陳瑞金



【摘 要】體系結構開放化是數控系統發展的必然趨勢,軟PLC技術采用軟件實現傳統PLC的功能,是實現數控系統開放性的關鍵技術之一。軟PLC系統由編程開發系統及運行系統組成。其中,編程開發系統是實現具備PLC控制功能的控制系統必不可少的開發工具之一。本文通過深入分析梯形圖中各單元之間關系,各功能的配置與實現,提出了一種新的梯形圖編程系統的數據結構與實現方法。利用Windows平臺下的Visual C++作為開發語言以期能夠開發出更為簡單實用的梯形圖編程系統。
【關鍵詞】PLC梯形圖編程系統;應用分析
一、導言
軟PLC系統由編程開發系統及運行系統組成。其中,編程開發系統是實現具備PLC控制功能的控制系統必不可少的開發工具之一。通過編寫PLC程序并轉換為可執行目標代碼,下載到軟PLC運行系統中執行,才能夠實現系統的控制功能。然而,目前國內的PLC編程開發系統種類繁多、編程語言差異大,與IEC61131-3 PLC編程語言標準相差甚遠、編譯效率低、缺乏程序調試功能等問題突出,導致控制程序開發過程繁瑣、調試困難、開發周期長、系統穩定性差,成為快速開發穩定可靠的控制程序的主要障礙。本文提出一種基于雙向循環鏈表和十字鏈表的梯形圖編輯和指令表生成算法,實現了一個軟PLC開發系統,并分析了軟PLC運行系統實現思想。
二、梯形圖與指令表簡介
梯形圖(ladder diagram,LD)是一種圖形化編程語言,引入了電氣系統中電源軌線、繼電器、觸點、線圈等概念,以“能量流動”描述數據傳遞過程,直觀性強,易于學習。一個電動機啟保停控制邏輯梯形圖示例如圖1所示。
按動START觸點對應的按鈕,線圈MO-TOR對應的電動機將持續運轉,直到按動STOP觸點對應的按鈕,電動機停止運轉。由圖1梯形圖生成的指令表如圖2所示。
指令表(IL,instruction list)以一系列指令作為編程語言,由操作符、修正符和操作數等組成。
LD指令讀取相應觸點狀態,st指令將運算后的結果輸出到線圈Motor對應的輸出點,從而控制電動機啟停。
三、雙向循環鏈表與十字鏈表
雙向循環鏈表每個節點中有2個指針,*next指向后繼節點,*previous指向前驅節點,因此在查找前驅節點和后繼節點時非常高效,如圖3所示。
十字鏈表是表示正交關系的一種鏈式存儲結構,可用于存儲有向圖和稀疏矩陣等,如圖4所示。
四、梯形圖的數據結構
(一)梯形圖基本元素定義
梯形圖的基本元素包括電源軌線、連接線、觸點、線圈等,具體分類見表1所列。
為便于擴展梯形圖基本元素,提高程序模塊化程度,降低不同基本元素處理復雜度,可將所有梯形圖基本元素的共同特征抽象為一個公共基類。基類中定義了基本元素的類型、輸入輸出參數、對應的變量名、在梯形圖中的坐標等信息。同時以虛函數的方式定義了賦值函數、繪圖函數和IL指令轉換函數。每個基本元素繼承自基類,并按照各自特點重新實現虛函數。如豎直連接線元素,不需要賦值,也不用輸出IL指令,只需重寫Draw()函數,在指定行列坐標畫出該連接線即可。
(二)梯形圖生成指令表實例
梯形圖雙向循環十字鏈表各節點命名如下:v[i]表示電源軌線和連接線,x[i],YO表示觸點和線圈,如圖5所示。
借助棧記錄遍歷過的電源軌線和連接線節點,編寫梯形圖outPutIL()遍歷算法,按圖5所示中箭頭及標號順序表示的路徑依次訪問節點。
分別調用各基本元素節點的toIL()方法輸出該元素代表的具體IL指令,最終組成完整的指令表語言程序。
五、相關算法對比
梯形圖的編輯和指令表轉換,已有算法主要采用鏈表、二叉樹、AOV網相結合的方式實現。
(一)鏈表與二叉樹結合算法
以AOV網的節點表示梯形圖元素,AOV網的弧表示梯形圖元素間的連接關系,對梯形圖進行存儲;再將AOV網轉換為二叉樹,以二叉樹的非葉節點表示梯形圖串聯、并聯邏輯關系,對轉換后的二叉樹進行一定的裁剪,通過中序遍歷輸出指令表語句。以圖1所示梯形圖為例,該算法對應的存儲結構和轉換示意如圖6所示。
此算法的AOV網將連接線元素統一作為虛節點,梯形圖元素間的串聯、并聯邏輯關系隱含在節點的出度、入度信息中,需要對AOV網進行一次遍歷,構建出二叉樹,裁剪虛節點,才能進行指令表的轉換。AOV網發生變化后,二叉樹需要重建。
(二)雙向鏈表與AOV網結合算法
以行雙向鏈表作為梯形圖數據結構,用于存儲和顯示數據;根據行雙向鏈表生成AOV網,對梯形圖節點進行拓撲排序,再轉換為指令表語句。以圖1所示梯形圖為例,該算法對應的存儲結構和轉換示意如圖7所示。
此算法的行雙向鏈表僅保留了行內元素之間和行與行之間的邏輯關系,卻丟失了處于不同行的元素之間的邏輯關系。因此在將梯形圖轉換為指令表前,需要對整個鏈表進行一次掃描,在適當位置添加虛節點(圖7中的vp1節點),構建AOV網,再進行拓撲排序和輸出。一旦對梯形圖進行編輯,建立AOV網的過程需要重新進行。
(三)程序的傳輸
當用戶編輯好梯形圖程序之后,將程序生成為指令表形式。然后再把指令表程序轉換為一系列的二進制指令,可以通過串口來實現程序指令從編程主機向硬件平臺的傳輸。VC提供了MSComm控件,利用該控件可以很方便的實現應用程序的串行通信功能。另外要利用該控件必須使它寄生于某個對話框,所以首先要生成一個應用于串口傳輸的對話框類。如
IBCD VW132
Network 7
LD M0.0
MOVB VB121,VB140
MOVB VB123,VB141
MOVB VB125,VB142
Network 8
LD M0.0
MOVB VB127,VB143
MOVB VB131,VB144
MOVB VB133,VB145
Network 9
LD M1.6
ED
TODW VB140
六、結束語
本文提出一種基于雙向循環鏈表和十字鏈表的梯形圖數據結構,正確實現了梯形圖編輯和梯形圖生成指令表算法。該數據結構能直觀地表現梯形圖各元素間邏輯關系,對實現完整的軟PLC控制系統具有一定意義。
參考文獻:
[1]周峰,王新華.軟PLC編輯系統的設計與實現[J].計算機工程與應用,2005,41(7):111-113.
[2]杉布,王蔚庭.IEC61131-3國際標準簡介[J].國內外機電一體化技術,2001(1):54-57.endprint