0 引言
軟件PLC的開(kāi)發(fā)中,各編程語(yǔ)言模塊的開(kāi)發(fā)是關(guān)鍵環(huán)節(jié)。在IEC1131 3標(biāo)準(zhǔn)提出的5種編程標(biāo)準(zhǔn)語(yǔ)言中,指令語(yǔ)言和梯形圖語(yǔ)言應(yīng)用最為廣泛。指令表語(yǔ)言的解析過(guò)程主要是根據(jù)編譯原理,通過(guò)詞法分析、語(yǔ)法分析及語(yǔ)義分析等環(huán)節(jié),最終生成中間代碼。梯形圖是圖形化的編程語(yǔ)言,其編程模塊包括編輯和編譯2部分,其中面向用戶的編輯環(huán)境已經(jīng)有很成熟的應(yīng)用。另外,對(duì)于不同操作系統(tǒng)的數(shù)控系統(tǒng),PLC程序的控制執(zhí)行策略是不同,如何設(shè)計(jì)簡(jiǎn)單高效的程序執(zhí)行機(jī)也是軟件PLC的重點(diǎn)環(huán)節(jié)。以前的一些研究在一定程度上實(shí)現(xiàn)了軟件PLC的部分功能,但都沒(méi)有涉及程序的描述模型的概念,提出針對(duì)所有語(yǔ)言的通用解決方案。在此提出了PLC程序的描述模型和通用可執(zhí)行數(shù)據(jù)結(jié)構(gòu),開(kāi)發(fā)了梯形圖的圖形化編程模塊,并設(shè)計(jì)了基于RT Linux的數(shù)控系統(tǒng)的PLC程序的執(zhí)行機(jī)。
1 梯形圖編程環(huán)境
梯形圖的編程環(huán)境包括編輯和檢查2個(gè)環(huán)節(jié)。編輯的任務(wù)是提供一個(gè)編制PLC程序的工具,使之方便地完成程序草圖的設(shè)計(jì)、修改、檢查和儲(chǔ)存等編輯功能。梯形圖程序結(jié)構(gòu)模型如圖1所示。結(jié)構(gòu)模型中,每個(gè)方框代表一個(gè)單元。單元類型可分為:輸入單元(包括常開(kāi)單元、常閉單元等。每個(gè)單元對(duì)應(yīng)于輸入寄存器中相應(yīng)的地址);輸出單元(基本功能單元、擴(kuò)展功能單元等。輸出單元對(duì)應(yīng)邏輯運(yùn)算結(jié)果輸出地址);邏輯單元(主要指串聯(lián)符號(hào)與并聯(lián)符號(hào),其一般不參與運(yùn)算,但決定輸入單元之間的邏輯關(guān)系,是邏輯計(jì)算依據(jù));空單元(梯形圖中的空白部分是空單元所處位置,空單元表示沒(méi)有實(shí)際單元,但不意味沒(méi)有含義。解析梯形圖程序的過(guò)程中,空單元也需要加以分析,是有意義的);功能單元(包括計(jì)時(shí)器、計(jì)數(shù)器等其它實(shí)現(xiàn)特殊功能的單元)。模型中的最小元素是單元(即圖1中的小方塊),因此梯形圖草圖能夠記錄于一個(gè)二維數(shù)組lad-der_draft[MAX_ROW][MAX_COL]中。其中,MAX_COL表示圖中的一列最多可以容納的單元數(shù)量,MAX_ROW表示梯形圖最多可以容納的行的數(shù)量。數(shù)組中每個(gè)結(jié)構(gòu)體成員記錄著草圖中每個(gè)單元的每項(xiàng)信息,包括單元的類型、單元寄存器的地址、寄存器類型、自然行號(hào)、列號(hào)和備注說(shuō)明等。事實(shí)上,梯形圖程序草圖對(duì)應(yīng)于一個(gè)面向?qū)ο蟮臄?shù)組,還包括對(duì)數(shù)組的操作。對(duì)于用戶,繪制草圖的過(guò)程實(shí)質(zhì)是對(duì)數(shù)組ladder_draft[MAX_ROW][MAX_COL]的操作過(guò)程。操作主要包括4種:De-lete cell,刪除梯形圖上已存在的一個(gè)單元;Deleterow,刪除梯形圖上的一自然行,其下的一行自動(dòng)連接上;Undo,撤銷(xiāo)上一次的刪除操作;Redo,解除上一步的撤銷(xiāo)操作。梯形圖程序流程如圖2所示,程序經(jīng)編輯環(huán)節(jié)需進(jìn)行檢查,檢查出錯(cuò)誤需要報(bào)錯(cuò)。
圖1 梯形圖程序結(jié)構(gòu)模型
a.程序的語(yǔ)法錯(cuò)誤檢查。語(yǔ)法檢查負(fù)責(zé)檢查各個(gè)單元的參數(shù)是否正確。如寄存器地址是否越界、重復(fù),計(jì)時(shí)器、計(jì)數(shù)器的設(shè)定值是否超過(guò)了限定的最大值等。當(dāng)發(fā)現(xiàn)錯(cuò)誤時(shí),保存錯(cuò)誤類型即錯(cuò)誤所在的行號(hào)和列號(hào)。流程如圖2a所示。
b.程序的邏輯錯(cuò)誤檢查。梯形圖的邏輯錯(cuò)誤負(fù)責(zé)檢查指令位置,如并聯(lián)單元的順序,輸出單元是不是存在,位置是否合理等等。當(dāng)發(fā)現(xiàn)錯(cuò)誤時(shí),同樣提示報(bào)錯(cuò),流程如圖2b所示。
圖2 程序流程
2 描述模型數(shù)據(jù)結(jié)構(gòu)及執(zhí)行機(jī)原理
PLC程序編譯的最終目的是獲得可執(zhí)行文件。對(duì)于硬件PLC,將可執(zhí)行文件送往硬件執(zhí)行模塊即可。對(duì)于本文中的軟件PLC,程序描述模型的記錄,即可執(zhí)行程序通用數(shù)據(jù)結(jié)構(gòu),是可執(zhí)行文件的主要內(nèi)容。因此,選擇恰當(dāng)?shù)某绦蛎枋瞿P褪钦麄(gè)問(wèn)題的關(guān)鍵,該模型需要完整地表述梯形圖程序中所包含的層次特征和所有單元之間的邏輯關(guān)系;诖它c(diǎn),我們?cè)O(shè)計(jì)模型結(jié)構(gòu)如圖3所示。
圖3 模型結(jié)構(gòu)
模型在形式上類似梯形圖中的一個(gè)梯級(jí),包含有5個(gè)層次,從低到高依次是:單元層次、邏輯行層次、段層次、梯級(jí)層次、梯形圖層次。
a.自然行。梯形圖中的所有水平并列的單元構(gòu)成了一個(gè)自然行。
b.邏輯行。由單元組成,段內(nèi)是并聯(lián)關(guān)系。同處一個(gè)自然行的單元不一定同處一個(gè)邏輯行。圖中的每個(gè)矩形框代表一個(gè)邏輯行。
c.段。由邏輯行組成。梯級(jí)內(nèi)的段與段是串聯(lián)關(guān)系。圖3中,從上到下、并行排列的幾個(gè)矩形框構(gòu)成一段。
d.梯級(jí)。由相互聯(lián)系而不可分割的一個(gè)或數(shù)個(gè)自然行組成,同時(shí)也由段串聯(lián)組成。圖3中前3個(gè)輸入段與最后的輸出段構(gòu)成一個(gè)梯級(jí)。
e.梯形圖。由一個(gè)或數(shù)個(gè)梯級(jí)依次排列而成。各梯級(jí)間一般有邏輯或者時(shí)間上的順序。
針對(duì)具體梯形圖的設(shè)計(jì)規(guī)模,還需要制定一些規(guī)則,即每個(gè)梯形圖最多包含60個(gè)自然行;每個(gè)自然行包含12個(gè)單元;每個(gè)邏輯行至多包含6個(gè)單元;每段至多包含6個(gè)邏輯行,每個(gè)梯級(jí)至多包含4段,其中包含1個(gè)輸出段;整個(gè)梯形圖至多包含20個(gè)梯級(jí)以及30個(gè)輸出單元。規(guī)則中的參數(shù)可以通過(guò)實(shí)際的情況靈活修改。
程序模型的作用在于為解析PLC程序提供參照,描述模型的數(shù)據(jù)結(jié)構(gòu)即為PLC程序的最終數(shù)據(jù)結(jié)構(gòu)。對(duì)應(yīng)程序模型,數(shù)據(jù)結(jié)構(gòu)同樣分為5個(gè)層次,分別為單元、邏輯行、段、梯級(jí)、梯形圖。
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; //行的值
};
段、梯級(jí)的數(shù)據(jù)結(jié)構(gòu)與邏輯行的數(shù)據(jù)結(jié)構(gòu)大體類似,不再重復(fù)。其中,最重要的梯形圖程序模型的層次結(jié)構(gòu)如下。
struct SLadderGragh //梯形圖程序?qū)哟?br />
{
int layer_num; //實(shí)際包含的梯級(jí)數(shù)
int output_num; //實(shí)際的輸出單元的數(shù)
SLadderLayer layer [MAX _ LAYER _ OF _
GRAPH]; //梯級(jí)的記錄
};
針對(duì)以上通用數(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),具體的步驟是通過(guò)層次分析、邏輯判斷,為每個(gè)單元在程序描述模型中/定位0,即確定單元的梯級(jí)號(hào)、段號(hào)、行號(hào)和列號(hào)。單元數(shù)據(jù)結(jié)構(gòu)的數(shù)據(jù)成員分為2組:第1組包括單元類型、單元對(duì)應(yīng)的寄存器地址和類型、備注說(shuō)明及單元在圖中的自然坐標(biāo)等,這些成員在編輯草圖的過(guò)程中由設(shè)計(jì)者直接確定;第2組為邏輯行號(hào)、邏輯列號(hào)、梯級(jí)號(hào)和段號(hào)。這些成員的數(shù)值需要分析得出。分析的基本方法是掃描二維數(shù)組ladder_draft[MAX_ROW][MAX_COL],單元類型是掃描的關(guān)注點(diǎn)。掃描分為2步進(jìn)行:第1次掃描過(guò)程中,當(dāng)掃描到某個(gè)具體單元時(shí),由于沒(méi)有后繼單元的信息便無(wú)法計(jì)算出當(dāng)前單元的完整信息。這次掃描的目的在于向中間結(jié)果數(shù)組中記錄相應(yīng)信息。無(wú)論是設(shè)計(jì)文本編程環(huán)境還是圖形化編程環(huán)境,我們的分析都應(yīng)著眼于表意的最小元素。對(duì)于PLC程序,最小表意元素是一個(gè)完整的梯級(jí)。當(dāng)掃描處在某個(gè)梯級(jí)當(dāng)中,打破了梯形圖的最小表意單元(梯級(jí)),則無(wú)法得出單元的完整信息。SRowPropertynaturerow[MAX_ROW]是中間結(jié)果數(shù)組,主要記錄自然行的信息。通過(guò)該數(shù)組可確定梯形圖單元在/垂直方向0的參數(shù)(梯級(jí)號(hào)和邏輯行號(hào))。中間結(jié)果數(shù)組的數(shù)據(jù)結(jié)構(gòu)如下。
struct SRowProperty
{
int or_num; //并聯(lián)符的個(gè)數(shù)
int layer_no; //自然行所在的梯級(jí)
int logic_row; //自然行的邏輯行號(hào)
int seg_num; //自然行出現(xiàn)過(guò)的段的數(shù)量
};
自然行的信息是劃分梯級(jí)的依據(jù)。凡是存在并聯(lián)符的自然行和其上面相鄰的一行必屬同一梯級(jí),凡沒(méi)有并聯(lián)符的、非空自然行是新梯級(jí)的開(kāi)端。準(zhǔn)確劃分梯級(jí),將確定每個(gè)自然行所處的梯級(jí)號(hào)以及每個(gè)自然行在所屬梯級(jí)的位置(邏輯行號(hào))。自然行的梯級(jí)號(hào)和邏輯行號(hào)與該自然行上每個(gè)單元的梯級(jí)號(hào)和邏輯行號(hào)是一個(gè)概念。第2步掃描針對(duì)/水平方向0的參數(shù)(段號(hào)和邏輯列號(hào)),結(jié)合了中間結(jié)果,能最終實(shí)現(xiàn)對(duì)段的準(zhǔn)確劃分。段的處理方式與梯級(jí)劃分的區(qū)別在于梯級(jí)劃分在于找到梯級(jí)的/首0,而段的劃分在于找到段的/尾0。段的劃分與邏輯列號(hào)的確定是同一過(guò)程。
綜上所述,編譯就是參照PLC的程序模型對(duì)梯形圖的劃分過(guò)程,從圖劃分成梯級(jí),梯級(jí)劃分成段,段劃分成邏輯行,最后是單元,依次進(jìn)行。
4 應(yīng)用實(shí)例
圖4所示是一個(gè)在編程環(huán)境完成的主軸運(yùn)動(dòng)控制的局部梯形圖。
圖4 主軸運(yùn)動(dòng)控制的局部梯形
圖4中包括主軸旋轉(zhuǎn)方向控制(順時(shí)針旋轉(zhuǎn)SPCW或逆時(shí)針旋轉(zhuǎn)SPCCW)、主軸齒輪換檔控制(低速檔SPL或高速檔SPH)以及主軸停(SPOFF)的控制?刂品绞椒譃槭謩(dòng)(HAND)和自動(dòng)(AU-TO)2種工作方式。在/主軸順時(shí)針旋轉(zhuǎn)0梯級(jí)中,HAND=/10,主軸旋轉(zhuǎn)方向選擇旋鈕置于順時(shí)針位置,CW.M(順轉(zhuǎn)開(kāi)關(guān)信號(hào))=1,又由于主軸停止旋鈕開(kāi)關(guān)OFF.M沒(méi)接通,SPOFF常閉接點(diǎn)為/10,使主軸手動(dòng)控制順時(shí)針旋轉(zhuǎn)。當(dāng)方向選擇旋鈕置于逆時(shí)針接通狀態(tài)時(shí),和順時(shí)針旋轉(zhuǎn)分析方式相同,使主軸逆時(shí)針旋轉(zhuǎn)。
第1,第2和第3自然行為第1梯級(jí),即/主軸順時(shí)針旋轉(zhuǎn)0梯級(jí)。第1行中,HAND與SW.M 2個(gè)常開(kāi)單元是串聯(lián),SW.M右旁為一個(gè)串聯(lián)單元,標(biāo)志邏輯行的結(jié)束; SPOFF是常閉單元是新邏輯行的開(kāi)始,其右邊的串聯(lián)單元同樣表示這個(gè)邏輯行的結(jié)束,第1行是沒(méi)有并聯(lián)單元的;第2行中,串聯(lián)關(guān)系的AUTO和M03組成一個(gè)邏輯行,M03右邊的右并聯(lián)單元是邏輯行的結(jié)束標(biāo)志;第3行和第2行幾乎完全一樣。應(yīng)該注意到,第2行和第3行都存在并聯(lián)單元,這個(gè)信息在第一步掃描時(shí)記錄在中間結(jié)果數(shù)組中。這表明第2行、第3行與第1行有/聯(lián)系0,即同屬一個(gè)梯級(jí);第4行沒(méi)有并聯(lián)單元,表明這是一個(gè)新梯級(jí),即/主軸逆時(shí)針旋轉(zhuǎn)0梯級(jí)的首行。由上述可知,段的劃分與判斷邏輯行的終止是一個(gè)概念,一個(gè)邏輯行的結(jié)束就是其所屬的段在其所處的自然行上的結(jié)束。
局部梯形圖共包含5個(gè)梯級(jí),除了/主軸順時(shí)針旋轉(zhuǎn)0梯級(jí)、還有/主軸逆時(shí)針旋轉(zhuǎn)0梯級(jí)、/主軸停0梯級(jí)、/變低速檔齒輪0梯級(jí)以及/變高速檔齒輪0梯級(jí)。但分析的原理與步驟與第1個(gè)梯級(jí)的相似,不再重復(fù)。
5 結(jié)束語(yǔ)
應(yīng)用程序模型的概念,實(shí)現(xiàn)了圖形化編程環(huán)境,通過(guò)數(shù)控系統(tǒng)中主軸控制的一個(gè)應(yīng)用實(shí)例表明,上述分析方法和原理是有效、可行的。
核心關(guān)注:拓步ERP系統(tǒng)平臺(tái)是覆蓋了眾多的業(yè)務(wù)領(lǐng)域、行業(yè)應(yīng)用,蘊(yùn)涵了豐富的ERP管理思想,集成了ERP軟件業(yè)務(wù)管理理念,功能涉及供應(yīng)鏈、成本、制造、CRM、HR等眾多業(yè)務(wù)領(lǐng)域的管理,全面涵蓋了企業(yè)關(guān)注ERP管理系統(tǒng)的核心領(lǐng)域,是眾多中小企業(yè)信息化建設(shè)首選的ERP管理軟件信賴品牌。
轉(zhuǎn)載請(qǐng)注明出處:拓步ERP資訊網(wǎng)http://www.ezxoed.cn/
本文標(biāo)題:基于開(kāi)放式數(shù)控系統(tǒng)平臺(tái)的軟件PLC
本文網(wǎng)址:http://www.ezxoed.cn/html/support/11121516119.html