



摘" 要: 為了設計一種PLC控制器,文中重點研究了PLC編程系統中由梯形圖到語句表編譯解算的實現過程,并提出一種應用于PLC開發的梯形圖轉換為語句表的新方法,即基于節點勢能的轉換方法。該方法將梯形圖類比電路圖,仿照電勢能,以節點勢能表示虛擬梯形圖中的能量流動,通過對梯形圖節點勢能的確定,將梯形圖各圖元之間的連接關系抽象為數值關系,并以此關系建立二叉樹,遍歷生成語句表。該方法簡單清晰,以一種復雜度較低的數據結構將梯形圖完整地描述出來,能夠準確快速地完成由梯形圖到語句表的編譯解算,并可適用于邏輯關系比較復雜的梯形圖程序的轉換。該轉換方法也能夠為其他類似圖形關系的解算提供參考,具有普遍適用性。
關鍵詞: PLC; 梯形圖; 語句表; 轉換方法; 節點勢能; 二叉樹
中圖分類號: TN709?34; TP273" " " " " " " " " " "文獻標識碼: A" " " " " " " " " " 文章編號: 1004?373X(2025)01?0168?05
A new method of converting ladder diagram into statement"list applied in PLC development
WEI Xiaoqing1, HAO Fang2, JIANG Tao1, KANG Bingbing1, ZHAO Nian1
(1. Institute of Aviation Basic, Naval Aviation University, Yantai 264001, China;
2. No. 1 Military Representative Office of Equipment Department of PLA Air Force in Shenyang, Shenyang 110034, China)
Abstract: In order to design a PLC controller, the realization process of compiling and calculating from ladder diagram to statement list is taken as the focus of the research, and a new method of converting ladder diagram into statement table applied in PLC development is proposed. It is a conversion method based on node potential energy. In this method, the ladder diagram is analogous to the circuit diagram. By imitating the electric potential energy, the energy flow in the virtual ladder diagram is represented by the node potential energy. The connection relationship between the primitives of the ladder diagram is abstracted into a numerical relationship by the determination of the node potential energy of the ladder diagram, and the binary tree is established based on this relationship, and the statement table is generated by traversing. This method is simple and clear, and can completely describe the ladder diagram with a low complexity data structure, and easily and accurately complete the compiling and calculating from the ladder diagram to the statement list. In addition, it can be applied to the conversion of ladder diagram programs with complex logical relationship. This conversion method can also provide a reference for the solution of other similar graph relationships, so it has universal applicability.
Keywords: PLC; ladder diagram; statement list; conversion method; node potential energy; binary tree
0" 引" 言
可編程邏輯控制器(PLC)在當今各行各業中的應用非常廣泛,是現代自動化行業的重要支柱[1?2],但目前國產PLC占市場份額[3]卻不足5%,發展空間非常大。為了設計一種PLC控制器,本文對PLC的編程系統進行了研究,研究重點是PLC編程系統中由梯形圖到語句表的編譯解算實現過程。
在IEC61131?3定義的5種PLC編程語言中,梯形圖和語句表的應用最為廣泛。梯形圖以常開元件、常閉元件、定時器等圖元的連接組合實現控制功能,作為一種圖形化編程語言易于工程人員使用。語句表是一種類匯編語言,易于處理器解析[4?5]。因此,在PLC開發中實現從梯形圖到語句表的轉換解算尤為重要,一直以來是PLC開發中的重點和難點[6?7]。
現已公知的轉換方法有多種,如掃描合并法[8],該方法以圖元對象和連接點對象的集合來描述梯形圖,數據結構的復雜度較高,并且對某些串并聯邏輯關系比較復雜的梯形圖不能得到很好的轉換結果,即并不適用于串、并聯邏輯關系比較復雜的梯形圖程序。
另一種可以稱作基于AOV有向圖的轉換方法[9?10],其特征包括:
1) 將梯形圖映射為AOV圖;
2) 由其建立表示指令間邏輯關系的二叉樹;
3) 通過后序遍歷二叉樹實現梯形圖與語句表的轉換。
該方法能夠實現各種復雜梯形圖與語句表間的轉換,但中間數據結構二叉樹的建立過程比較繁瑣,需要建立多個冗余的樹節點,時間和空間復雜度較高。
本文提出了一種梯形圖到語句表轉換的方法,即基于節點勢能的轉換方法,達到了降低轉換復雜度、解算多支路梯形圖及復雜梯形圖的效果。
1" 基于節點勢能的轉換方法
1.1" 方法描述
基于節點勢能轉換方法的指導思想是將梯形圖類比電路圖,仿照電勢能,以節點勢能虛擬梯形圖中的能量流動:對每支梯形圖,從左母線進入梯形圖時節點的勢能值為0,能量在梯形圖中按一定規則變化,經過梯形圖后連接到右母線節點的最終勢能值變為10 000。本文方法提出了節點勢能這一概念,節點,即梯形圖各圖元間的連接點,節點勢能,即節點的勢能值,每個節點擁有唯一的節點勢能值。除豎線外,梯形圖每個圖元都有左右兩個節點,因此除去豎線每個圖元擁有左節點勢能值和右節點勢能值。
本文以一種基于節點勢能的圖元數據集合描述梯形圖,進而基于節點勢能關系按特定的步驟將梯形圖轉化為最終二叉樹數據結構,最后通過遍歷最終二叉樹得到語句表,以三步完成了由梯形圖到語句表的轉換。具體轉換過程如圖1所示。
1.2" 以基于節點勢能的圖元數據集合描述梯形圖
梯形圖單個圖元的數據結構應包括圖元類型、圖元左右節點勢能值、圖元行列值、圖元地址、圖元的屬性參數等變量。所有圖元的集合即可完整地描述出梯形圖。
該步的關鍵是將梯形圖圖元間的邏輯連接關系抽象為簡單的數值關系,即節點勢能關系,賦值圖元的節點勢能值,具體規則如下。
1) 從上到下逐行掃描梯形圖,每行按從左到右的順序掃描,除豎線外,以一定規則給每個圖元左右節點勢能賦值,比如規則為:
① 令第一行最左端圖元的左節點勢能值=0;
② 對每一個圖元:右節點勢能值=左節點勢能值+1,即每經過一個圖元,節點勢能值增加1;
③ 某圖元左相鄰一列的同一行有圖元:其左節點勢能值=左相鄰圖元的右節點勢能值,即兩圖元交匯處的節點勢能值相等;
④ 若某圖元左相鄰一列的同一行無圖元:其左節點勢能值=前一個被掃描圖元右節點勢能值+1。
2) 對特殊類型圖元再次處理,如:
① 連接左母線的圖元:令左節點勢能值=0;
② 連接右母線的圖元:令右節點勢能值=10 000;
③ 豎線連接的節點:令下行圖元節點的勢能值=上行圖元節點的勢能值;
④ 橫線連接的節點:令橫線左相鄰圖元右節點勢能值、橫線左節點勢能值、橫線右節點勢能值、橫線右相鄰圖元左節點勢能值四者相等,且等于其中的最小值。
1.3" 基于節點勢能將梯形圖轉化為最終二叉樹
二叉樹是梯形圖轉換成語句表的中間媒介,目的是以二叉樹的數據結構來描述梯形圖的圖形結構。按照一定規則將梯形圖轉換為最終二叉樹后,通過對最終二叉樹的遍歷就可以直接得到語句表。
1.3.1" 二叉樹的數據結構
為了完成二叉樹向語句表的轉化,二叉樹數據結構至少應包括如下變量:索引號、二叉樹類型、左右節點勢能值、行值、根節點內容、左右節點指針、獨立標志位、遍歷標志位。
1.3.2" 二叉樹的構建規則
因梯形圖的各圖元之間僅有并聯和串聯兩種位置關系,因此二叉樹構建的規則可分為并聯規則和串聯規則。
1) 并聯規則:對某兩個二叉樹a、b,若二叉樹a左節點勢能值=二叉樹b左節點勢能值,二叉樹a右節點勢能值=二叉樹b右節點勢能值,則a、b為并聯關系。若建立一個并聯關系二叉樹,新建二叉樹的索引號按二叉樹的構建順序依次排列,類型為“并聯塊”,左右節點勢能值與并聯兩個二叉樹的左右節點勢能值相等,行值等于并聯的兩個二叉樹中較小的行值,根節點為并聯關系指令,左支指向行值較小的二叉樹,右支指向行值較大的二叉樹,二叉樹設為獨立,未被遍歷。構建新二叉樹的同時將并聯的兩個舊二叉樹設為非獨立。
2) 串聯規則:對某兩個二叉樹a、b,若二叉樹a右節點勢能值=二叉樹b左節點勢能值,則a、b為串聯關系。若建立一個串聯關系二叉樹,新建二叉樹的索引號按二叉樹構建順序依次排列,類型為“串聯塊”,左節點勢能值=a的左節點勢能值,右節點勢能值=b的右節點勢能值,左支指向二叉樹a,右支指向二叉樹b,根節點內容為左右支二叉樹類型決定的指令,行值等于二叉樹b的行值,二叉樹設為獨立,未被遍歷。構建新二叉樹的同時將串聯的兩個舊二叉樹設為非獨立。
1.3.3" 二叉樹的構建流程
二叉樹構建流程圖如圖2所示。
最終二叉樹的構建步驟如下所示。
1) 構建初始二叉樹。從上到下逐行掃描梯形圖,每行按從左到右的順序掃描。除橫豎連接線外,構建與每個圖元對應的初始二叉樹。新建二叉樹的索引號按構建順序從0開始依次加1,二叉樹類型、左右節點勢能值、行值等于對應圖元的相應變量值,根節點內容為各圖元地址和屬性參數對應的操作數,左右節點指針為空,二叉樹設為獨立,未被遍歷。
2) 構建并聯中間二叉樹。按索引號順序掃描現有的獨立二叉樹,對右節點勢能值不為10 000的二叉樹,按并聯規則處理完所有并聯關系。
3) 構建特定情況的串聯中間二叉樹。按索引號順序掃描現有的獨立二叉樹,對右節點勢能值不為10 000且類型不為取反、上升沿、下降沿的二叉樹,按串聯規則處理完所有“節點交匯處有且僅有兩個二叉樹串聯”的情況。
循環步驟2)、步驟3),至再無新二叉樹生成時停止。
4) 處理剩余的中間串聯情況。按索引號順序掃描現有的獨立二叉樹,對右節點勢能值不為10 000的二叉樹,按串聯規則處理完所有剩余的串聯情況:串聯取反、上升沿、下降沿二叉樹,節點交匯處有多個二叉樹串聯。
5) 構建最終二叉樹。按索引號順序掃描現有的獨立二叉樹,按串聯規則構建最終二叉樹。形成的最終二叉樹左節點勢能值為0,右節點勢能值為10 000。
1.4" 遍歷最終二叉樹得到語句表
對[N]支最終二叉樹按行值排序,依次進行遍歷。當某二叉數未遍歷時對其遍歷,遍歷過后將其設為已遍歷,以保證每支二叉樹只遍歷一次。對于本身為關系塊(并聯塊或串聯塊)且右支連接有關系塊的二叉子樹,采用后續遍歷,否則采用中序遍歷。遍歷遇到連接到某二叉樹左支的葉子節點時,根據其類型向語句表中加寫裝載指令。
2" 應用實例
以圖3中的梯形圖為例,描述該轉換方法下梯形圖到語句表的轉換過程。
2.1" 以基于節點勢能的圖元數據集合描述梯形圖
梯形圖圖元數據結構如下所述。
名稱:Element。
成員:
type表示圖元類型,為整數型,如type=2代表常開節點,type=3代表常閉節點……;
row、col表示圖元的行列位置,為整數型;
lenode表示圖元左節點勢能值,為整數型;
rinode表示圖元右節點勢能值,為整數型;
jcq、n1、n2表示圖元的地址,具體為寄存器、字、位,類型分別為字符串型、整數型、整數型;
n3、n4為圖元的屬性參數,為共用體型。
所有圖元的集合就將整個梯形圖描述出來。
賦值梯形圖的節點勢能,依據1.2節中所述規則,賦值每個圖元的左右節點勢能值。圖3中,①和②對應的數字分別顯示了按1.2節中步驟1)、步驟2)規則給各圖元賦值后,各圖元的節點勢能值,圖3中②對應著梯形圖最終的節點勢能值。
2.2" 將梯形圖轉化為最終二叉樹數據結構
二叉樹數據結構設定如下。
名稱:DTree。
成員:
type表示二叉樹類型,為整數型,如type=0代表串聯關系塊;type=1代表并聯關系塊,type=2對應圖元類型中的常開節點……;
lenode表示圖元對應二叉樹左節點勢能值,為整數型;
rinode表示圖元對應二叉樹右節點勢能值,為整數型;
index表示二叉樹索引號,按二叉樹建立順序排列,為整數型;
opr表示二叉樹根節點內容,包括指令和操作數,為字符串型;
lchild表示左指針指向的二叉樹,為指針型;
rchild表示右指針指向的二叉樹,為指針型;
nostruct表示=TRUE時該二叉子樹是獨立二叉樹,=FALSE時被連接到新二叉樹的左支或右支,失去獨立性,為布爾型;
row表示二叉樹行值,為整數型;
write表示=FALSE時,該二叉子樹未被遍歷寫入語句表,=TRUE時,已寫入語句表,為布爾型。
依據本文1.3.3節中所述規則,構建最終二叉樹,具體過程如下。
按照步驟1)構建初始二叉樹,每個梯形圖元件對應一個二叉樹,索引號為0~8。
循環步驟2)、步驟3):第一次循環中按步驟2)生成二叉樹9,步驟3)生成二叉樹10。第二次循環中按步驟2)生成二叉樹11,步驟3)生成二叉樹12。循環2次后,繼續循環再無新二叉樹生成。
執行步驟4),該步中無二叉樹生成。
執行步驟5),得到3支最終二叉樹:二叉樹13、14、15,對應圖3中的3支梯形圖。其中二叉樹14的全貌如圖4所示。
2.3" 遍歷最終二叉樹得到語句表
依據行值順序依次遍歷最終二叉樹13、14、15。當某二叉數遍歷標志位write=FALSE時對其遍歷,遍歷過后,使其遍歷標志位write=TRUE,因此最終二叉樹15與二叉樹14中相同的語句不會被重寫。以最終二叉樹14為例,遍歷過程中,遍歷至二叉子樹10時,因其本身為串聯關系塊(type=0)且右支連接并聯關系塊(type=1),對其采用后續遍歷,對其他二叉子樹均采用中序遍歷。遍歷至連接到二叉樹10左支的葉子節點二叉子樹2時,因它的類型為常開節點,向語句表寫根節點T37前加寫裝載指令LD;遍歷至連接到二叉樹9左支的葉子節點二叉子樹3時,因類型為常閉節點,向語句表寫根節點I0.1前加寫裝載指令LDN。
該實例最終轉換為語句表程序為:
LD" I0.0
TON" T37,+10
LD" T37
LDN" I0.1
O" I0.2
ALD
O" I0.3
A" I0.4
=" Q0.0
=" M0.1
本文方法可以解算多支梯形圖,并且可實現復雜關系的轉換。目前已由VC++編程實現[11?13],證明其可以將梯形圖轉換為語句表,實際應用于PLC系統的開發。應用結果表明,該方法能夠快速準確地完成梯形圖的編輯與解算,并可方便地對梯形圖進行邏輯查錯和規范性檢查,證明了其可用性。
3" 結" 論
本文介紹了一種應用于PLC開發的梯形圖轉換為語句表的方法。該方法通過對梯形圖節點勢能的確定,將梯形圖各圖元之間的連接關系抽象為數值關系,從而以一種復雜度較低的數據結構將梯形圖完整地描述出來,繼而完成由圖形到語言的轉換,與現有方法相比,該方法簡單清晰,可以解算多支梯形圖,也可以實現邏輯關系比較復雜的梯形圖程序的轉換,并且該轉換方法也能夠為其他類似圖形關系的解算提供參考,具有普遍適用性。
參考文獻
[1] 廖常初.PLC編程及應用[M].北京:機械工業出版社,2008.
[2] 向曉漢.PLC編程手冊[M].北京:化學工業出版社,2022.
[3] 陳蘇瑞.基于ARM的嵌入式可編程控制器相關技術研究[D].鎮江:江蘇科技大學,2023.
[4] 白效昆.支持沙克總線協議的小型可編程邏輯控制器設計[D].太原:中北大學,2023.
[5] 翟源康,蔣毅,安偉,等.基于ARM開發平臺的軟PLC系統設計與實現[J].機電信息,2023(20):42?45.
[6] 郭嘉成.基于某型特種舵機性能測試系統的嵌入式PLC設計研究[D].天津:天津工業大學,2019.
[7] 賀文杰.工業機器人控制器軟PLC關鍵技術研究與實現[D].南京:東南大學,2019.
[8] 張禮杰,林樹森.基于圖形結構和遞歸調用的軟PLC設計[J].工業控制計算機,2021,34(12):70?72.
[9] 施昊言,王庭有.PLC多線圈梯形圖向指令表的轉換算法[J].化工自動化及儀表,2022,49(4):522?528.
[10] 吳帥舉,楊其華,何雨辰.物流輸送線控制圖形化編程方法設計[J].現代電子技術,2023,46(13):91?96.
[11] 王越.基于IEC61499的嵌入式軟PLC設計與應用研究[D].杭州:浙江大學,2023.
[12] 錢能.C++程序設計教程[M].北京:清華大學出版社,2005.
[13] 明日科技.C++從入門到精通[M].北京:清華大學出版社,2015.
作者簡介:魏曉晴(1988—),女,山東濰坊人,碩士研究生,助教,研究方向為自動控制、航空電子設備。