專利名稱::按照iec61131-3標準的將梯形圖語言編譯成指令表語言的方法
技術領域:
:本發明涉及工業控制語言的編譯方法,特別地,涉及一種按照IEC61131-3國際標準的將梯形圖語言編譯成指令表語言的方法。
背景技術:
:可編程邏輯控制器在當今的各行各業中具有廣泛的應用。IEC61131-3是可編程控制器編程語言的國際標準,該標準定義了四種編程語言,分別為梯形圖(LD)、指令表(IL)、結構化文本(ST)及功能塊圖(FBD)。其中,梯形圖語言是目前工業控制領域最為流行的編程語言。由于梯形圖語言是一種圖形化的高級語言,因此用梯形圖語言編寫的控制邏輯不能被可編程邏輯控制器的處理器直接執行。目前商用的可編程控制器編程平臺都先將梯形圖語言轉換成指令表語言,再對指令表語言解釋執行或將指令表語言編譯成匯編語言后執行。盡管IEC61131-3已經被可編程控制器廠商普遍接受,但出于各種原因,目前商用可編程控制器梯形圖到指令表編譯軟件還未能完全符合IEC61131-3標準。同時,這些平臺對梯形圖的功能、拓撲的連接方式等方面的支持也不一致。這造成已經存在的梯形圖語言代碼在更換可編程控制器平臺后,移植困難,需要迸行大量的修改或重寫,效率低下。
發明內容本發明的目的是針對現有技術的不足,提供一種按照IEC61131-3標準的將梯形圖語自'編譯成指令表語言的方法,使得梯形圖的控制邏輯最終可以被可編程邏輯控制器的處理器正確執行。本發明的目的是通過以下技術方案來實現的一種將符合IEC61131-3標準的梯形圖語言編譯成指令表語言的方法,包括如下步驟-(1)利用有向圖來表達梯形圖中每個梯級的拓撲結構,形成一個有向圖的集(2)若某個有向圖具有n個輸出線圈節點,則將該有向圖進行拆分為n個子有向圖,其中,n大于l;(3)根據有向圖中節點之間的串并聯關系,將每個有向圖轉化為二叉分解樹。對該二叉分解樹進行后序遍歷,得到遍歷結果符合"從上到下,從左到右"的梯形圖到指令表翻譯原則;(4)依后序遍歷的順序,計算二叉分解樹中規約節點的指令表,根節點的指令表就是其有向圖的指令表。本發明的有益效果是通過按照IEC61131-3標準的將梯形圖語言編譯成指令表語言的方法,使得任何符合標準規定的梯形圖語言都可以轉換成標準的指令表語言,方便實現梯形圖程序在不同可編程控制器平臺之間的移植,提高開發的效率及產品的可靠性。圖l是數據結構轉換的流程圖2是梯形圖中復雜連接關系抽象為有向圖邊的示意圖;圖3具有多個輸出線圈的梯形圖示意圖;圖4為圖2經轉換后生成的有向圖示意圖5為將具有多個線圈節點的有向圖分解為若干子圖的流程圖;圖6為利用圖4中的算法分解圖3所示有向圖的示意圖;圖7為建立二叉分解樹的流程圖8為利用圖6中的算法建立圖5中Gl,的二叉分解樹的示意圖;圖9為利用圖6中的算法建立圖5中G4的二叉分解樹的示意圖;圖10為從二叉分解樹得到指令表的流程具體實施例方式在提供可編程邏輯控制器編程環境的軟件系統中,實現按照IEC61131-3標準的將梯形圖語言編程成指令表語言的方法的實質,就是將梯形圖語言的數據結構轉換到指令表語言的數據結構。因此在編譯過程中存在的問題,一是確定表示梯形圖語言和指令表語言的合理數據結構,且該結構必須充分支持IEC61131-3對梯形圖及指令表的語法定義。二是要建立一種將表示梯形圖的數據結構轉換為表示指令表的數據結構的方法,并確保兩種結構所表達的控制邏輯完全一致。本發明定義了6種數據結構數據結構LDGraphStruct用來表示梯形圖中每個梯級內部元素之間的連接關系。由于標準支持在一個梯級中可具有多個輸出線圈,因此本發明將具有多個輸出線圈的梯級劃分為若干個子梯級,這些子梯級內部元素的連接關系用數據結構LDSubGraphStruct來表示。ILStruct用來表示指令表語言的數據結構。為了完成LDGraphStruct和ILStruct兩種數據結構之間的轉換,引入一種稱為二叉分解樹的中間數據結構BinaryDecompositionTree,該結構易于表示梯級內部組成元素之間的拓撲關系,又易于轉換為ILStruct數據結構。其次,為了對編譯過程中的輔助變量進行正確管理,引入了兩個輔助數據結構,分別為變量賦值鏈表VariableAssignList和變量引用鏈表VariableReferList。下面詳細說明每種數據結構的內容和數據結構之間的轉換方法。1.數據結構(i)梯形圖梯級的數據結構一LDGraphStruct根據ffiC61131-3標準,.梯形圖的梯級是由母線、輸入觸點、輸出線圈、函數、功能塊以及這些元件之間的連線組成。本發明用有向圖來表達梯級內元素之間的相互關系,有向圖的節點由這些元素組成,有向圖的邊由元素之間的連線組成。根據上述描述,梯形圖梯級的數據結構如下所示structLDGraphStructintnID;〃元件唯一編號,整數型。charstrName[50];〃元件的變量名,如X0,Y0,字符串型。intnType;//元件的類型(母線節點=0、觸點節點=1,〃線圈節點=2、虛擬節點=3,功能節點=4),整〃型。LDGraphStruct**pSuccessorList;//存儲本節點所有的后繼節點,指針鏈表型。■,(ii)梯形圖子梯級的數據結構一LDSubGraphStructIEC61131-3支持在一個梯級中具有多個輸出線圈,在本發明中將一個梯級分解為若干個子梯級,每個子梯級對應一個輸出線圈。子梯級的數據結構與梯級的數據結構基本相同,唯一區別在于數據結構中多了一個用于標識輔助變]的元素。梯形圖子梯級的數據結構如下StructLDSubGraphStruct//元件唯一編號,整數型。〃元件的變量名,如X0,Y0,字符串型。〃元件的類型(母線節點=0、觸點節點=1,//線圈節點=2、虛擬節點=3,功能節點-4),整數〃型。〃輔助變量的名字,字符串型。若字符串為空,則表示〃沒有輔助變量標識在該元素后面,否則代表當該元〃素的值執行完后,需要將可編程控制器當前累加器〃的值存到strHdp。LDGraphStmct"pSuccessorList;//存儲本節點所有的后繼節點,指針鏈表〃型。intnID;charstrName[50];intnType;charstrHelp[50];(iii)指令表語言的數據結構一ILStruct指令表語言是一種純文本語言,用指令表編寫的程序使用字符串就可以實現表示和保存,因此IL語言的數據結構中僅包含一個字符串數組。指令表語言的數據結構如下StructILStruct、charstrlL[100][50];//指令表語言程序文本,二維字符數組類型。'1(iv)二叉分解樹的數據結構一BinaryDecompositionTree由于梯形圖和指令表分別屬于圖形語言和文本語言,兩者之間的語法規則相差太大,難以直接從LDGraphStruct轉換到ILStruct。為了完成轉換,引入一科'中間數據結構BinaryDecompositionTree作為中介。BinaryDecompositionTree是一種二叉樹結構,其葉節點用于表示梯級內部的元素,中間節點用于表示元素之間的連接關系。通過對BinaryDecompositionTree進行后序遍歷,可以得到200810062554.9說明書第5/15頁一個由中間節點組成的轉換序列,然后沿該序列對中間節點進行翻譯,就可以得到整個梯級的ILStruct結構。二叉分解樹的數據結構如下structBinaryDecompositionTreeintnID〃元件唯一編號,整數型。charstrName[50];〃元件的變量名,如X0,Y0,字符串型。intnType;//元件的類型(母線節點=0、觸點節點=1,〃線圈節點=2、虛擬節點=3,功能節點=4),整〃數型。intnConnection;〃左右子樹的連接類型(串聯連接=0,并聯連接=1)。BinaryDecompositionTree*pLeftNode,pRightNode;〃左右子樹的指針。(v)變量賦值鏈表的數據結構一VariableAssignList當--個梯級具有多個輸出線圈,或梯級中具有函數或功能塊時,需要將程序執行的中間結果保存到某個中間變量中。在本發明中,用一個全局鏈表來記錄賦值信息,該鏈表的數據結構如下structVariableAssignListi、intn[D;//元素在鏈表中的唯一編號,整數型。charstrName[50];//梯級中某個元素的名稱。當該元素執行完后,需要將當//前可編程控制器累加器上的值保存到該結構strHelp〃量中,字符串型。charstrHelp[50];〃輔助變量的名稱,字符串型。VariableAssignList*pNext;〃下一個鏈表元素的指針。(vi)變量引用鏈表的數據結構一VariableReferList當判定一個函數或功能塊是否可以被調用時,往往需要引用到前面已經執行過的子網絡的邏輯值。在本發明中,用一個全局鏈表VariableReferList來記錄該引用信息,該鏈表的數據結構如下structVariableReferListintnID;〃元素在鏈表中的唯一編號,整型。charstrName[50];〃梯級中某個元素的名稱。若當前翻譯的梯形圖元素在〃元素后面,則需要引用strHdp的值,字符串型。charstrHelp[50];〃輔助變量的名稱,字符串型。VariableReferList*pNext;〃下一個元素的指針。2.數據結構的轉換步驟本發明的整個數據結構轉換過程分為五步,如圖1所示。首先是將梯形圖的每個梯級用數據結構LDGraphStruct來表示;其次將LDGraphStruct轉換為若干個LDSubGraphStruct;接著將每個LDSubGraphStruct轉變為BinaryDecompositionTree結構;然后將每個BinaryDecompositionTree結構轉換為ILStruct結構;最后,將所有ILStruct結構的內容合并,就可以得到整個梯級的指令表語言。(l)將梯形圖的梯級轉換為LDGraphStruct。該轉換主要通過將梯形圖的組成元素(母線、觸點、線圈、函數及功能塊)抽象為有向圖的節點,它們彼此之間的連接抽象為有向圖的邊來實現數據結構LDGraphStruct的構造。其具體的構造步驟如下(i)將母線抽象為母線節點。(ii)將觸點抽象為觸點節點。(iii)將函數及功能塊節點抽象為功能節點。(iv)兩個元素之間的連線抽象為連接兩個節點之間的邊。(v)'工字型'及'n字型'的復雜連接抽象為兩個虛擬節點及它們之間的條邊,圖2表示了這種抽象。利用該轉換方法,可以將圖3所示的梯級轉換為圖4所示的有向圖,該圖用LDGraphStruct的數據結構表示如下圖4所示有向圖G的數據成員值<table>tableseeoriginaldocumentpage15</column></row><table>(2)將LDGraphStruct轉換為一個或多個LDSubGraphStruct。該轉換過程的目的是將具有多個輸出線圈的梯級拆分為多個子梯級,使得每個子梯級代表一個線圈的輸出邏輯,并用LDSubGraphStruct來表示每個子梯級的結構,具體的算法如圖5。利用該算法,對如圖4所示的有向圖進行拆分,具體步驟如下所示(i)利用深度優先遍歷的路徑產生子圖,并從G中刪除該子圖所具有的邊,并將G中出、入度為0的節點刪除,重復該過程知道G為空為止,可以得到如圖6(a)所示的子圖G1、G2、G3、G4。(U)由于G2的起始點和終點(s,vl)都包括在Gl當中,所以Gl和G2可以在節點s和vl出合并成一個圖;同理,G3也可以和Gl合并為同一個圖。因此,最終整個G分解為G1'和G4兩個如圖6(b)所示的子圖。.(iii)由于G4的起點X6在Gl'中,因此一個輔助變量help被開辟,并標識在圖G1'的元件X6后面。同時,將G4中的起點X6刪除,并在G4起始處加入母線節點s及標識有變量helpl的新觸點節點,最終結果如圖6(c)所示。利用該方法得到Gl'、G4的LDSubGraphStruct的值如下表2:Gl'的數據成員值<table>tableseeoriginaldocumentpage16</column></row><table>(3)將LDSubGraphStruct轉換為BinaryDecompositionTree。該轉換過程是將數據結構LDSubGraphStruct轉變為數據結構BinaryDecompositionTree,這種結構更適宜表達節點之間的連接關系,具體的轉換算法如閣7A和7B所示。利用該算法對圖Gl'和G4進行轉換,詳細步驟分別如下對GI'的轉換(i)初始時,全局鏈表VariableAssignList中擁有的節點為XI,FUN1,X2,X3,X4,X5。由于X1和FUN1在G4中連接在一起,并且XI的前驅s其出度大于1,所以XI和FUN1規約為一個節點vl,并且構建以vl為根,XI和FUN1為左右子樹的二叉分解樹;同理,X2和X3可以規約為節點v2。此時VariableAssignList包含的節點有vl,v2,X4,X5。(ii)由于vl和v2在G4中并聯連接,并且vl是其前驅s的第一個出度節點,因此vl和v2被并聯規約為節點v3,并構建以v3為根,vl和v2為左右子樹的二叉分解樹;同理,X4和X5被規約為節點v4。此時VariableAssignList為空。(iii)從新將G4中入度和出度的節點放入VariableAssignList中,得到VariableAssignList為v3,xl,x2,v4,X6。由于這當中任何一個節點其前驅節點的出度都為1,所以不滿足串聯規約的要求;同時,也不滿足并聯規約的要求。因此,將所有節點都放入VariableAssignList中,得到VariableAssignList為s,v3,xl,x2,v4,X6,Y0。(iv)首先將s和v3規約為一個節點v5;其次規約v5和xl,得到v6;其次規約v6和x2,得到v7;規約v7和和v4,得到v8;規約v8和X6,得到v9;規約v9和Y0得到v10,由于有一個輔助變量help標識在v9后面,所以需要將元組(v9,help)存儲到列表VariableAssignList當中。表4:Tl的數據成員值<table>tableseeoriginaldocumentpage17</column></row><table><table>tableseeoriginaldocumentpage18</column></row><table>表5:VariableAssignList的數據成員值<table>tableseeoriginaldocumentpage18</column></row><table>對G5的轉換(i)初始時,LS中擁有的節點為helpl,X6,X7。由于這當中任何一個節點其前驅節點的出度都為1,所以不滿足串聯規約的要求;同時,也不滿足并聯規約的要求。因此,將所有節點都放入LS中,得到LS為s,helpl,X6,X7,Yl。(ii)首先將s和helpl規約為節點vll;其次規約vll和X6得到vl2;其次規約vl2和X7得到vl3;最后規約vl3和Yl得到v14。表6:T2的數據成員值<table>tableseeoriginaldocumentpage18</column></row><table>(4)將Bi露yDecompositionTree轉換為ILStruct該轉換過程是將數據結構BinaryDecompositionTree轉換為指令表語言的數據結構lLStmct,其轉換步驟如圖IO所示。在圖IO所示的步驟中,利用了表7、8所示的轉換規則。表7和8的使用方法為,給定一個規約節點v,假設其左節點為vl,右節點為v2。若節點v標識為串連連接,那么v的指令表可以通過査表7得到;若節點V為并聯連接,那么V的指令表可以通過查表8得到。為了描述方便,在表中任何一個節點V的指令表語句用符號丄(V)來表示。表7:串聯規約節點的指令表產生規則<table>tableseeoriginaldocumentpage19</column></row><table><table>tableseeoriginaldocumentpage20</column></row><table>表8:并聯規約節點的指令表產生規則<table>complextableseeoriginaldocumentpage21</column></row><table>利用圖10所示方法對二叉分解樹Tl、T2進行轉換,可分別得到ILStruct如下Tl根節點vlO的ILStruct數據結構內容TRUESThelp2AND(help2ANDXSTENCA[丄F畫ANDENOOR(X2ANDX3))AND(X4ANDX5)ANDX6SThelplSTY0T2根節點v13的ILStruct數據結構內容LDhelplANDX7OUTYl(5)將所有子梯級的ILStruct結構合并成一個ILStruct該轉換過程實際上是將每個子梯級的指令表語言連接在一起,構成整個梯級完整的指令表語言。如,將過程(4)的兩個ILStruct結構連接在一起,最終可得到完整的指令表語言如下LDTRUESThelp2AND(help2ANDXISTENCALLFUN1ANDENOOR(X2ANDX3))AND(X4ANDX5ANDX6SThelplSTY0LDhelplANDX7OUTYl權利要求1.一種將符合IEC61131-3標準的梯形圖語言編譯成指令表語言的方法,其特征在于,包括如下步驟(1)利用有向圖來表達梯形圖中每個梯級的拓撲結構,形成一個有向圖的集合。(2)若某個有向圖具有n個輸出線圈節點,則將該有向圖進行拆分為n個子有向圖,其中,n大于1。(3)根據有向圖中節點之間的串并聯關系,將每個有向圖轉化為二叉分解樹。對該二叉分解樹進行后序遍歷,得到遍歷結果符合“從上到下,從左到右”的梯形圖到指令表翻譯原則。(4)依后序遍歷的順序,計算二叉分解樹中規約節點的指令表,根節點的指令表就是其有向圖的指令表。2.如權利要求1所述的方法,其特征在于,所述步驟(1)中,將梯形圖中的母線,觸點,線圈,功能塊及函數等分別抽象為了有向圖中的母線節點、觸點節點、線圈節點、功能塊節點,并將它們之間的連接抽象為了有向圖中的邊。3.如權利要求l所述的方法,其特征在于,所述步驟(1)中,將梯形圖中<工字型'及'n字型'連接抽象為兩個虛擬節點之間的連接。4.如權利要求l所述的方法,其特征在于,所述步驟(2)中中包括步驟(i)從有向圖G的某一起點開始,利用深度優先遍歷算法遍歷到某一終點,將遍歷經過的節點及邊組成一個圖Gi,放入列表Lg當中。(ii)將遍歷經過的邊從G中刪除。(iii)將G中出入度為零的節點刪除。(iv)重復以上過程,直到G變為空。(v)若在LG當中存在兩個圖Gi及Gj,且Gi的起始節點與終止節點都存在Gj當中,則執行步驟(VI)、(W)、(Vffl);否則跳到步驟(IX)。(vi)將Gi與Gj在Gi的起始節點及終止節點處并聯連接,產生新圖G。(vii)將Gi、Gj從LG當中刪除,并將G放入到LG當中。(viii)返回步驟(V)。(ix)若LG中有一個圖Gi其起始節點的類型不是母線節點,我們設該起始節點為v,則執行如下步驟;否則結束。(x)在LG中找到另一個包含v節點的圖Gj,開辟一個輔助變量,并將該輔助變量標識在Gj的這個v節點的后面。(xi)用一個觸點節點代替Gi中的起始節點,且該觸點節點的名稱為步驟(x)中開辟的輔助變量。5.如權利要求1所述的方法,其特征在于,由所述步驟(3)中得到的二叉分解樹,其具有以下的特征(i)二叉樹葉子節點都是有向圖中的節點,中間節點都是規約節點,用來表示左右節點之間的連接關系。(ii)規約節點的種類分為邏輯規約節點及功能塊規約節點,它們的定義分別如下(a)若某個規約節點v是邏輯規約節點,則在以v為根節點的子樹中,沒有一個葉子節點是功能塊節點。(b)若某個規約節點v是功能塊規約節點,則在以v為根節點的子樹中,至少有一個葉子節點是功能塊節點。6.如權利要求1所述的方法,其特征在于,所述步驟(3)包括以下步驟(i)清空列表LS,并將有向圖G中所有入度和出度為1的節點放入LS當中。(ii)若在LS中存在著兩個在G中連接在一起的節點vl和v2,且vl在G中的前驅節點其當前出度大于1,則執行步驟(iii)、(iv)、(v),否則跳到步驟(vi)。(iii)若在G中,有一個輔助變量標識在vl的后面,則將vl與輔助變量組成的元組放入到LS當中。(iv)將vl及v2規約為一個節點,并創建以該規約節點為根的二叉分解樹,該樹的左右子樹分別為vl及v2。(v)將vl及v2從LS中刪除,并將規約節點v放入LS當中,并返回到步驟(ii)。(vi)若在LS中存在著兩個具有相同前驅及后繼的節點vl及v2,并且vl是其前驅的第一個后繼節點,則執行步驟,否則跳到步驟。(vii)若己有一個輔助變量標識在了它們的前驅后面,則執行步驟(viii),否則執行步驟(ix)、(x)、(xi)。(viii)若v2是一個功能塊節點,則將v2及輔助變量組成的元組放入到LR當中。(ix)若vl或v2是一個功能塊節點,則開辟一個輔助變量并將該變量標識到它們的前驅后面。(X)若Vl是一個功能塊節點,則將Vl及新開辟的輔助變量組成的元組放入到LR當中。(xi)若v2是一個功能塊節點,則將v2及新開辟的輔助變量組成的元組放入到LR當中。(xii)將vl及v2規約為一個節點,并創建以該規約節點為根的二叉分解樹,該樹的左右子樹分別為vl及v2.(xiii)將vl及v2從LS中刪除,并將v放入到LS中。(xiv)重復(i)到(xiii)的所有操作,直到LS中任何節點都不滿足串聯及并聯規約的要求。(xv)將LS中所有的節點都刪除,并將G中剩余的節點都放入LS中。(xvi)若剩下的有向圖G的節點數還多1,則執行以下步驟直到G僅剩下一個節點。(xvii)得到G的開始節點及該開始節點的后繼節點,若在該起始節點的后面標識著一個輔助變量,則將起始節點及輔助變量組成的元組放入到LA當中。'(xviii)將起始節點及其后繼節點規約為一個節點,并構建該節點的二叉分解7.如權利要求1所述的方法,其特征在于,所述步驟(4)中中計算規約節點的指令表,其遵守如下的規則1)串聯規約節點指令表產生規則設有一串連規約節點V,其左節點為V1,右節點為v2,函數L(v)代表節點v的指令表,則串連規約節點的指令表計算如下(i)若vl屬于觸點節點、功能節點、邏輯規約節點、或功能塊規約節點,且v2屬于觸點節點,則規約節點v的指令表為L(vl)ANDv2(ii)若W屬于觸點節點、功能節點、邏輯規約節點、或功能塊規約節點,且vl包含于LA中,且v2屬于觸點節點,則規約節點v的指令表為L(vl)SThelpANDv2(m)若vl屬于母線節點,v2屬于觸點節點,則規約節點v的指令表IX)v2(iv)若vl屬于觸點節點、功能節點、邏輯規約節點、或功能塊規約節點,v2屬于功能節點,則規約節點v的指令表為L(vl)L(v2)(v)若vl屬于觸點節點、功能節點、邏輯規約節點、或功能塊規約節點,且vl包含于LA中,v2屬于功能節點,則規約節點v的指令表為L(vl)SThelpL(v2)(vi)若vl母線節點,v2屬于功能節點,則規約節點v的指令表為LDTRUEL(v2)(vii)若vl屬于觸點節點、功能節點、邏輯規約節點、或功能塊規約節點,v2屬于線圈節點,則規約節點v的指令表為L(vl)STv2(viii)若vl屬于觸點節點、功能節點、邏輯規約節點、或功能塊規約節點,且vl包含于LA中,v2屬于線圈節點,則規約節點v的指令表為L(vl)SThelpSTv2(ix)若vl屬于觸點節點、功能節點、邏輯規約節點、或功能塊規約節點,v2屬于母線節點,則規約節點v的指令表為LDTRUESTv2(x)若vl屬于邏輯規約節點或功能塊規約節點,v2屬于虛擬節點,則規約節點v的指令表為L(vl)(xi)若vl屬于觸點節點、功能節點、邏輯規約節點、或功能塊規約節點,v2屬于邏輯規約節點,則規約節點v的指令表為L(vl)<formula>formulaseeoriginaldocumentpage6</formula>(xii)若vl屬于觸點節點、功能節點、邏輯規約節點、或功能塊規約節點,且vl包含于LA中,v2屬于邏輯規約節點,則規約節點v的指令表為<formula>formulaseeoriginaldocumentpage6</formula>(xiii)若vl屬于母線節點,則規約節點v的指令表為LDL(v2)(xiv)若vl屬于觸點節點、功能節點、邏輯規約節點、或功能塊規約節點,v2屬于功能塊規約節點且以v2為根的子樹其最左葉節點是功能節點,則規約節點v的指令表為<formula>formulaseeoriginaldocumentpage6</formula>(xv)若vl屬于母線節點,v2屬于功能塊規約節點且以v2為根的子樹其最左葉節點是功能節點,則規約節點v的指令表為TRUESThelpANDChelpL(v2)(xvi)若vl屬于觸點節點、功能節點、邏輯規約節點、或功能塊規約節點,v2屬于功能塊規約節點且以v2為根的子樹其最左葉節點不是功能節點,則規約節點v的指令表為<formula>formulaseeoriginaldocumentpage6</formula>SThelpAND(helpANDL(v2))(xvii)若vl屬于母線節點,v2屬于功能塊規約節點且以v2為根的子樹其最左葉節點不是功能節點,則規約節點v的指令表為LDTRUESThelpAND(helpANDL(v2)2)并聯規約節點指令表產生規則設有一并聯規約節點V,其左節點為VI,右節點為v2,函數L(v)代表節點v的指令表,則并聯規約節點的指令表計算如下(xviii)若V1屬于觸點節點、功能節點、邏輯規約節點、或功能塊規約節點,且v2屬于觸點節點,則規約節點v的指令表為L(vl)ORv2(xk)若vl屬于觸點節點、功能節點、邏輯規約節點、或功能塊規約節點,且v2屬于功能節點,則規約節點v的指令表為L(vl)OR(helpL(v2)(XX)若vl屬于觸點節點、功能節點、邏輯規約節點、或功能塊規約節點,且v2屬于邏輯規約節點,則規約節點v的指令表為L(vl)OR(L(v2))(xxi)若vl屬于觸點節點、功能節點、邏輯規約節點、或功能塊規約節點,v2屬于邏輯規約節點且以v2為根的子樹其最左葉節點是功能節點,則規約節點V的指令表為L(vl)OR(helpL(v2))(xxii)若vl屬于觸點節點、功能節點、邏輯規約節點、或功能塊規約節點,v2屬于邏輯規約節點且以v2為根的子樹其最左葉節點不是功能節點,則規約節點v的指令表為L(vl)ORChelpANDL(v2)》全文摘要本發明公開了一種按照IEC61131-3標準的將梯形圖語言編譯成指令表語言的方法。該方法適用的梯形圖可以處理邏輯量與非邏輯量,且得到的指令表語言完全符合IEC61131-3的指令集。該方法具體為將梯形圖抽象為有向圖,并根據梯形圖中元素的種類定義有向圖中節點的種類;若該梯形圖有多個輸出,則將該有向圖分解為若干個子圖;利用節點規約的方法,判定該有向圖是否是串并圖,本方法目前僅支持對串并結構的梯形圖進行編譯;利用節點規約方法,夠造二叉分解樹,對該二叉分解樹進行后序便利的結果,符合對梯形圖從上到下,從左到右的分析方法;對二叉分解樹的規約節點按照后序遍歷的順序計算其指令,知道計算到根節點為止。所得的根節點的指令表就是最終的指令表語言。文檔編號G06F9/45GK101369234SQ20081006255公開日2009年2月18日申請日期2008年6月24日優先權日2008年6月24日發明者義嚴,章航平申請人:杭州電子科技大學