最新精品久久,欧美亚洲福利,表妹免费在线观看,久久国产二区,国产三级电影网站,日本特黄久久,成人a在线视频免费观看

基于開放式數(shù)控系統(tǒng)平臺的軟件PLC

來源:萬方數(shù)據(jù) 作者:尚 靖 周會成 陳吉紅

點(diǎn)擊:1799

A+ A-

所屬頻道:新聞中心

關(guān)鍵詞:開放式 數(shù)控系統(tǒng) PLC

    0 引言

      軟件PLC的開發(fā)中,各編程語言模塊的開發(fā)是關(guān)鍵環(huán)節(jié)。在IEC1131 3標(biāo)準(zhǔn)提出的5種編程標(biāo)準(zhǔn)語言中,指令語言和梯形圖語言應(yīng)用最為廣泛。指令表語言的解析過程主要是根據(jù)編譯原理,通過詞法分析、語法分析及語義分析等環(huán)節(jié),最終生成中間代碼。梯形圖是圖形化的編程語言,其編程模塊包括編輯和編譯2部分,其中面向用戶的編輯環(huán)境已經(jīng)有很成熟的應(yīng)用。另外,對于不同操作系統(tǒng)的數(shù)控系統(tǒng),PLC程序的控制執(zhí)行策略是不同,如何設(shè)計(jì)簡單高效的程序執(zhí)行機(jī)也是軟件PLC的重點(diǎn)環(huán)節(jié)。以前的一些研究在一定程度上實(shí)現(xiàn)了軟件PLC的部分功能,但都沒有涉及程序的描述模型的概念,提出針對所有語言的通用解決方案。在此提出了PLC程序的描述模型和通用可執(zhí)行數(shù)據(jù)結(jié)構(gòu),開發(fā)了梯形圖的圖形化編程模塊,并設(shè)計(jì)了基于RT Linux的數(shù)控系統(tǒng)的PLC程序的執(zhí)行機(jī)。

    1 梯形圖編程環(huán)境

      梯形圖的編程環(huán)境包括編輯和檢查2個環(huán)節(jié)。編輯的任務(wù)是提供一個編制PLC程序的工具,使之方便地完成程序草圖的設(shè)計(jì)、修改、檢查和儲存等編輯功能。梯形圖程序結(jié)構(gòu)模型如圖1所示。結(jié)構(gòu)模型中,每個方框代表一個單元。單元類型可分為:輸入單元(包括常開單元、常閉單元等。每個單元對應(yīng)于輸入寄存器中相應(yīng)的地址);輸出單元(基本功能單元、擴(kuò)展功能單元等。輸出單元對應(yīng)邏輯運(yùn)算結(jié)果輸出地址);邏輯單元(主要指串聯(lián)符號與并聯(lián)符號,其一般不參與運(yùn)算,但決定輸入單元之間的邏輯關(guān)系,是邏輯計(jì)算依據(jù));空單元(梯形圖中的空白部分是空單元所處位置,空單元表示沒有實(shí)際單元,但不意味沒有含義。解析梯形圖程序的過程中,空單元也需要加以分析,是有意義的);功能單元(包括計(jì)時器、計(jì)數(shù)器等其它實(shí)現(xiàn)特殊功能的單元)。模型中的最小元素是單元(即圖1中的小方塊),因此梯形圖草圖能夠記錄于一個二維數(shù)組lad-der_draft[MAX_ROW][MAX_COL]中。其中,MAX_COL表示圖中的一列最多可以容納的單元數(shù)量,MAX_ROW表示梯形圖最多可以容納的行的數(shù)量。數(shù)組中每個結(jié)構(gòu)體成員記錄著草圖中每個單元的每項(xiàng)信息,包括單元的類型、單元寄存器的地址、寄存器類型、自然行號、列號和備注說明等。事實(shí)上,梯形圖程序草圖對應(yīng)于一個面向?qū)ο蟮臄?shù)組,還包括對數(shù)組的操作。對于用戶,繪制草圖的過程實(shí)質(zhì)是對數(shù)組ladder_draft[MAX_ROW][MAX_COL]的操作過程。操作主要包括4種:De-lete cell,刪除梯形圖上已存在的一個單元;Deleterow,刪除梯形圖上的一自然行,其下的一行自動連接上;Undo,撤銷上一次的刪除操作;Redo,解除上一步的撤銷操作。梯形圖程序流程如圖2所示,程序經(jīng)編輯環(huán)節(jié)需進(jìn)行檢查,檢查出錯誤需要報(bào)錯。

    圖1 梯形圖程序結(jié)構(gòu)模型

      a.程序的語法錯誤檢查。語法檢查負(fù)責(zé)檢查各個單元的參數(shù)是否正確。如寄存器地址是否越界、重復(fù),計(jì)時器、計(jì)數(shù)器的設(shè)定值是否超過了限定的最大值等。當(dāng)發(fā)現(xiàn)錯誤時,保存錯誤類型即錯誤所在的行號和列號。流程如圖2a所示。

      b.程序的邏輯錯誤檢查。梯形圖的邏輯錯誤負(fù)責(zé)檢查指令位置,如并聯(lián)單元的順序,輸出單元是不是存在,位置是否合理等等。當(dāng)發(fā)現(xiàn)錯誤時,同樣提示報(bào)錯,流程如圖2b所示。

    圖2 程序流程

    2 描述模型數(shù)據(jù)結(jié)構(gòu)及執(zhí)行機(jī)原理

      PLC程序編譯的最終目的是獲得可執(zhí)行文件。對于硬件PLC,將可執(zhí)行文件送往硬件執(zhí)行模塊即可。對于本文中的軟件PLC,程序描述模型的記錄,即可執(zhí)行程序通用數(shù)據(jù)結(jié)構(gòu),是可執(zhí)行文件的主要內(nèi)容。因此,選擇恰當(dāng)?shù)某绦蛎枋瞿P褪钦麄€問題的關(guān)鍵,該模型需要完整地表述梯形圖程序中所包含的層次特征和所有單元之間的邏輯關(guān)系?;诖它c(diǎn),我們設(shè)計(jì)模型結(jié)構(gòu)如圖3所示。

    圖3 模型結(jié)構(gòu)

      模型在形式上類似梯形圖中的一個梯級,包含有5個層次,從低到高依次是:單元層次、邏輯行層次、段層次、梯級層次、梯形圖層次。

      a.自然行。梯形圖中的所有水平并列的單元構(gòu)成了一個自然行。

      b.邏輯行。由單元組成,段內(nèi)是并聯(lián)關(guān)系。同處一個自然行的單元不一定同處一個邏輯行。圖中的每個矩形框代表一個邏輯行。

    c.段。由邏輯行組成。梯級內(nèi)的段與段是串聯(lián)關(guān)系。圖3中,從上到下、并行排列的幾個矩形框構(gòu)成一段。

      d.梯級。由相互聯(lián)系而不可分割的一個或數(shù)個自然行組成,同時也由段串聯(lián)組成。圖3中前3個輸入段與最后的輸出段構(gòu)成一個梯級。

      e.梯形圖。由一個或數(shù)個梯級依次排列而成。各梯級間一般有邏輯或者時間上的順序。

      針對具體梯形圖的設(shè)計(jì)規(guī)模,還需要制定一些規(guī)則,即每個梯形圖最多包含60個自然行;每個自然行包含12個單元;每個邏輯行至多包含6個單元;每段至多包含6個邏輯行,每個梯級至多包含4段,其中包含1個輸出段;整個梯形圖至多包含20個梯級以及30個輸出單元。規(guī)則中的參數(shù)可以通過實(shí)際的情況靈活修改。

      程序模型的作用在于為解析PLC程序提供參照,描述模型的數(shù)據(jù)結(jié)構(gòu)即為PLC程序的最終數(shù)據(jù)結(jié)構(gòu)。對應(yīng)程序模型,數(shù)據(jù)結(jié)構(gòu)同樣分為5個層次,分別為單元、邏輯行、段、梯級、梯形圖。

      struct SLadderCell //單元層次
      {
      char type; //單元類型
      int address; //地址
      int setting_value; //設(shè)定
      int current_value; //當(dāng)前值
      char reg_type; //寄存器類型
      int result_value; //單元值
      };
      struct SLadderRow //邏輯行層次
      {
      int cell_num; //實(shí)際包含的單元數(shù)量
      struct SLadderInputCell cell[MAX_CELL_OF
      _ROW]; //記錄一行的單元
      int result_value; //行的值
      };

      段、梯級的數(shù)據(jù)結(jié)構(gòu)與邏輯行的數(shù)據(jù)結(jié)構(gòu)大體類似,不再重復(fù)。其中,最重要的梯形圖程序模型的層次結(jié)構(gòu)如下。

      struct SLadderGragh //梯形圖程序?qū)哟?br/>  {
      int layer_num; //實(shí)際包含的梯級數(shù)
      int output_num; //實(shí)際的輸出單元的數(shù)
      SLadderLayer layer [MAX _ LAYER _ OF _
      GRAPH]; //梯級的記錄
      };

      針對以上通用數(shù)據(jù)結(jié)構(gòu),設(shè)計(jì)軟件PLC執(zhí)行機(jī)結(jié)構(gòu)如下。

      PLC executive //PLC程序執(zhí)行機(jī)
      {
      FOR (LAYER NO. < ACTUAL LAYER
      NUMBER)
      {
      FOR (SEGMENT NO. < ACTUAL SEG-
      MENT NUMBER)
      {
      FOR (LOGIC ROW NO. < ACTUAL LOG-
      IC ROW NUMBER)
      {
      FOR (CELL NO. <ACTUAL CELL NUM-
      BER)
      {
      ROW RESULT = ROW _ RESULT &&
      VALUE OF THE NEXT CELL //單元之間執(zhí)行
      與運(yùn)算
      }
      SEG RESULT = SEG_RESULT || VALUE
      OF THE NEXT LOGIC ROW //邏輯行間執(zhí)行
      或運(yùn)算
      }
      LAYER RESULT = LAYER RESULT &&
      VALUE OF THE NEXT SEGMENT //段之間
      執(zhí)行與運(yùn)算
      }
      }
      }

    3 梯形圖的解析

      梯形圖解析的最終目的是通用數(shù)據(jù)結(jié)構(gòu),程序描述模型的結(jié)構(gòu)框架是解析的參照標(biāo)準(zhǔn),具體的步驟是通過層次分析、邏輯判斷,為每個單元在程序描述模型中/定位0,即確定單元的梯級號、段號、行號和列號。單元數(shù)據(jù)結(jié)構(gòu)的數(shù)據(jù)成員分為2組:第1組包括單元類型、單元對應(yīng)的寄存器地址和類型、備注說明及單元在圖中的自然坐標(biāo)等,這些成員在編輯草圖的過程中由設(shè)計(jì)者直接確定;第2組為邏輯行號、邏輯列號、梯級號和段號。這些成員的數(shù)值需要分析得出。分析的基本方法是掃描二維數(shù)組ladder_draft[MAX_ROW][MAX_COL],單元類型是掃描的關(guān)注點(diǎn)。掃描分為2步進(jìn)行:第1次掃描過程中,當(dāng)掃描到某個具體單元時,由于沒有后繼單元的信息便無法計(jì)算出當(dāng)前單元的完整信息。這次掃描的目的在于向中間結(jié)果數(shù)組中記錄相應(yīng)信息。無論是設(shè)計(jì)文本編程環(huán)境還是圖形化編程環(huán)境,我們的分析都應(yīng)著眼于表意的最小元素。對于PLC程序,最小表意元素是一個完整的梯級。當(dāng)掃描處在某個梯級當(dāng)中,打破了梯形圖的最小表意單元(梯級),則無法得出單元的完整信息。SRowPropertynaturerow[MAX_ROW]是中間結(jié)果數(shù)組,主要記錄自然行的信息。通過該數(shù)組可確定梯形圖單元在/垂直方向0的參數(shù)(梯級號和邏輯行號)。中間結(jié)果數(shù)組的數(shù)據(jù)結(jié)構(gòu)如下。

      struct SRowProperty
      {
      int or_num; //并聯(lián)符的個數(shù)
      int layer_no; //自然行所在的梯級
      int logic_row; //自然行的邏輯行號
      int seg_num; //自然行出現(xiàn)過的段的數(shù)量
      };

      自然行的信息是劃分梯級的依據(jù)。凡是存在并聯(lián)符的自然行和其上面相鄰的一行必屬同一梯級,凡沒有并聯(lián)符的、非空自然行是新梯級的開端。準(zhǔn)確劃分梯級,將確定每個自然行所處的梯級號以及每個自然行在所屬梯級的位置(邏輯行號)。自然行的梯級號和邏輯行號與該自然行上每個單元的梯級號和邏輯行號是一個概念。第2步掃描針對/水平方向0的參數(shù)(段號和邏輯列號),結(jié)合了中間結(jié)果,能最終實(shí)現(xiàn)對段的準(zhǔn)確劃分。段的處理方式與梯級劃分的區(qū)別在于梯級劃分在于找到梯級的/首0,而段的劃分在于找到段的/尾0。段的劃分與邏輯列號的確定是同一過程。

      綜上所述,編譯就是參照PLC的程序模型對梯形圖的劃分過程,從圖劃分成梯級,梯級劃分成段,段劃分成邏輯行,最后是單元,依次進(jìn)行。

    4 應(yīng)用實(shí)例

      圖4所示是一個在編程環(huán)境完成的主軸運(yùn)動控制的局部梯形圖。

    圖4 主軸運(yùn)動控制的局部梯形

      圖4中包括主軸旋轉(zhuǎn)方向控制(順時針旋轉(zhuǎn)SPCW或逆時針旋轉(zhuǎn)SPCCW)、主軸齒輪換檔控制(低速檔SPL或高速檔SPH)以及主軸停(SPOFF)的控制。控制方式分為手動(HAND)和自動(AU-TO)2種工作方式。在/主軸順時針旋轉(zhuǎn)0梯級中,HAND=/10,主軸旋轉(zhuǎn)方向選擇旋鈕置于順時針位置,CW.M(順轉(zhuǎn)開關(guān)信號)=1,又由于主軸停止旋鈕開關(guān)OFF.M沒接通,SPOFF常閉接點(diǎn)為/10,使主軸手動控制順時針旋轉(zhuǎn)。當(dāng)方向選擇旋鈕置于逆時針接通狀態(tài)時,和順時針旋轉(zhuǎn)分析方式相同,使主軸逆時針旋轉(zhuǎn)。

      第1,第2和第3自然行為第1梯級,即/主軸順時針旋轉(zhuǎn)0梯級。第1行中,HAND與SW.M 2個常開單元是串聯(lián),SW.M右旁為一個串聯(lián)單元,標(biāo)志邏輯行的結(jié)束; SPOFF是常閉單元是新邏輯行的開始,其右邊的串聯(lián)單元同樣表示這個邏輯行的結(jié)束,第1行是沒有并聯(lián)單元的;第2行中,串聯(lián)關(guān)系的AUTO和M03組成一個邏輯行,M03右邊的右并聯(lián)單元是邏輯行的結(jié)束標(biāo)志;第3行和第2行幾乎完全一樣。應(yīng)該注意到,第2行和第3行都存在并聯(lián)單元,這個信息在第一步掃描時記錄在中間結(jié)果數(shù)組中。這表明第2行、第3行與第1行有/聯(lián)系0,即同屬一個梯級;第4行沒有并聯(lián)單元,表明這是一個新梯級,即/主軸逆時針旋轉(zhuǎn)0梯級的首行。由上述可知,段的劃分與判斷邏輯行的終止是一個概念,一個邏輯行的結(jié)束就是其所屬的段在其所處的自然行上的結(jié)束。

      局部梯形圖共包含5個梯級,除了/主軸順時針旋轉(zhuǎn)0梯級、還有/主軸逆時針旋轉(zhuǎn)0梯級、/主軸停0梯級、/變低速檔齒輪0梯級以及/變高速檔齒輪0梯級。但分析的原理與步驟與第1個梯級的相似,不再重復(fù)。

    5 結(jié)束語

      應(yīng)用程序模型的概念,實(shí)現(xiàn)了圖形化編程環(huán)境,通過數(shù)控系統(tǒng)中主軸控制的一個應(yīng)用實(shí)例表明,上述分析方法和原理是有效、可行的。


    (審核編輯: 滄海一土)

    聲明:除特別說明之外,新聞內(nèi)容及圖片均來自網(wǎng)絡(luò)及各大主流媒體。版權(quán)歸原作者所有。如認(rèn)為內(nèi)容侵權(quán),請聯(lián)系我們刪除。