魏曉晴,吳旭光,牛 云,郭 逸,騰林陽
WEI Xiao-qing, WU Xu-guang, NIU Yun, GUO Yi, TENG Lin-yang
(西北工業大學,西安 710072)
隨著計算機技術、通訊技術和微電子技術的迅速發展,軟PLC技術己漸漸成為國內外工業控制技術研究的熱點。軟PLC是以標準的、通用的控制器硬件平臺和專用控制卡作為硬件基礎,基于工業控制計算機(IPC)或嵌入式PC(EPC),使用軟件實現PLC功能的軟邏輯控制系統。因此,軟PLC既可提供傳統PLC的相應功能,也具備PC機或嵌入式系統的各種優點,具有更強的兼容性和可擴展性。
軟PLC開發系統實際上就是帶有編譯和調試功能的軟PLC編程器[1],應當支持基于IEC61131-3[2]國際標準的編程語言。在IEC61131-3定義的5種語言中,梯形圖和語句表應用最為廣泛,梯形圖便于工程人員編程,語句表便于控制器解析執行。因此,在軟PLC開發系統中實現從梯形圖到語句表的轉換解算尤為重要。現有的解算方法有很多,但往往存在結構不清晰、建立過程繁瑣、復雜節點判斷困難等問題[3,4]。為此,本文提出了一種梯形圖到語句表轉換的新策略。
本文研究并實現了一種軟PLC開發系統。它運行在PC機上,既可以與軟PLC執行系統組成一個完整的系統,又可以單獨仿真運行。該開發系統按功能可分為梯形圖編輯模塊,編譯解算模塊,通信監控模塊三大部分,以VC++編程實現。
梯形圖編輯模塊即梯形圖編輯器,主要功能包括梯形圖圖元的繪制、編輯、保存和讀取,如圖1所示。

圖1 梯形圖編輯模塊設計組成
梯形圖元件包括常開觸點、輸出線圈等簡單元件和定時器、計數器等復雜元件。由C++面向對象的繼承特性,可以抽象出一個基類作為梯形圖圖元的總體接口,再以這個類為基礎,派生出具體的圖元子類。梯形圖圖元的基類定義如下:


因每個圖元繼承自同一個基類,擁有共同的屬性,因此,界面上的所有圖元可看作一個集合,稱為集合類。對圖元的各種操作,如繪制、選中、刪除、存取等,都是通過對集合類的操作進行,這里用到的集合類為C++的CPtrArray類。
如繪制定時器圖元的過程:程序響應鼠標左鍵消息,新建一個定時器子類對象,將該對象加入集合類并調用定時器子類的Draw( )函數實現繪制。示例代碼如下:

梯形圖的編譯[6]是本系統的關鍵部分,主要包括編譯解算和語法查錯兩部分。
編譯解算即把用戶編輯的梯形圖程序,編譯轉換生成語句表。
語法查錯即在編譯過程中,按照梯形圖編程語言規范,進行邏輯和語法分析,若發現梯形圖有錯誤,便生成相應的錯誤提示信息,并顯示到用戶界面。
將梯形圖邏輯關系轉換解算為語句表一直是軟PLC開發中的重點和難點,本文提出了一種轉換解算的新策略,它基于二叉樹的轉換解算方法,但不同于傳統的掃描分割圖形構造二叉樹法,而是一種按“節點勢”關系構造二叉樹的方法,它的指導思想是將梯形圖圖元間邏輯關系抽象為數值關系,量化地顯示出梯形圖的層次,從而以之精確地解析出圖元之間的串、并聯等關系。
本文首次提出了“節點勢”這一概念,可以將它類似于電路中的電勢理解。節點,即梯形圖各圖元間的連接點。節點勢,即節點的勢值。因為梯形圖每個圖元都有左右兩個節點,因此每個圖元擁有左節點勢和右節點勢。如圖2所示,I0.0的左節點勢=0,右節點勢=1。
梯形圖到語句表的轉換解算的過程大體分為以下四步。
1)定義梯形圖的“節點勢”。按從左→右,從上→下的順序多次掃描梯形圖,按一定規則給每個圖元左右節點賦值。通過各圖元節點勢的確定,就將梯形圖圖元間邏輯關系抽象為數值關系了,如左右節點勢都相等的圖元互為并聯關系。如圖2所示,I0.1與I0.6左節點勢同為1,右節點勢同為2,兩者是并聯關系。

圖2 節點勢示例
2)定義二叉樹數據結構
typedef struct Tree
{ int index;//索引值
int type;//類型
char *opr;//根節點內容
struct Tree *lchild;//左節點指針指向的二叉樹
struct Tree *rchild; //右節點指針指向的二叉樹
int lenode;//左節點勢值
int rinode;//右節點勢值
BOOL restruct;//二叉樹屏蔽標志
} DTree;
3)按從左到右,從上到下的順序掃描梯形圖,對每個圖元(橫豎線除外),構建對應的二叉樹。然后依據二叉樹間的節點勢關系,循環構建新二叉樹,屏蔽舊二叉樹。直到現有的二叉樹數目等于輸出元件個數時,停止循環,完成最終構建,現有二叉樹為最終二叉樹。
4)運用遞歸算法,遍歷最終二叉樹,生成語句表,顯示在主界面上,同時生成編譯數據及文件。
該策略基于二叉樹的解算方法,但通過梯形圖“節點勢”的確定,將梯形圖圖元間邏輯關系抽象為數值關系,能大大降低二叉樹算法的時間和空間復雜度,思路簡單清晰,運行快速精確。并且能夠解算多支梯形圖及復雜的邏輯關系,在執行過程中對梯形圖進行邏輯查錯和規范檢查,該解算方法還能夠為其他類似圖形關系的解算提供參考,具有普遍適用性。
本系統既可以單獨仿真運行,又可與軟PLC執行系統組成一個完整的系統,為此,提供了與執行系統通信的串口,既可通過虛擬串口軟件與基于PC的軟PLC執行系統連接運行,也可通過實際串口與基于嵌入式的軟PLC執行系統連接。串口通信采用事件驅動的接收方式,利用MSComm 控件進行串口初始化、接收數據、發送數據等串行通信管理。
本系統通過串口下載編譯數據到執行系統,并與之進行聯調。執行系統執行編譯數據后刷新輸出映像區,開發系統獲取執行系統的運行狀態并在梯形圖界面上顯示,以監控執行系統的工作狀態。

圖3 軟PLC編程開發系統主界面
該軟PLC開發系統主界面主要有梯形圖編輯區、指令區和信息輸出區三部分。如圖3所示,在中間編輯區繪制了兩支簡單的梯形圖,經過編譯解算,在右方指令區顯示出它們對應的語句表程序,在下方信息輸出區顯示出對應的提示信息。當連接監控時,開發系統通過串口獲取執行系統的工作狀態并在梯形圖界面上顯示,某觸點或線圈操作數為1時對應的圖元加粗變紅。該實例證明,本系統可以解算多支梯形圖,并且實現定時器計數器等復雜元件的編輯及編譯解算。
本文設計實現了一種軟PLC編程開發系統,并提出了一種簡單易用的梯形圖到語句表轉換的新策略。經過大量測試證明,該系統能夠方便準確地完成梯形圖程序的開發和解算,并且在執行過程中完成對梯形圖的邏輯查錯和規范檢查。如今國外的軟PLC編程系統是工控市場上的主流,國產的相對較少而且不成熟,因此,本文對推進軟PLC的國產化有著重要意義。
[1]趙雨生, 高美鳳. 一種梯形圖編程系統的研究與實現方法[J]. 工業控制計算機, 2008, 21(6): 34-35.
[2]KONG Yaguang, WANG Wenhai. Realization of Control Algorithm Editor Based on IEC61131-3[J].Computer Engineering, 2006, (18): 283-284.
[3]石銳, 周雷, 楊正益. 軟PLC梯形圖到語句表轉換新策略的研究[J]. 計算機工程與應用, 2010, 46(18): 244-248.
[4]葛芬, 吳寧. 基于AOV圖及二叉樹的梯形圖與指令表互換算法[J]. 南京航空航天大學學報, 2006, 38(6): 754-758.
[5]王亞男, 陳嬋娟. 基于Flex與Bison的軟PLC編譯模塊的研究[J]. 制造業自動化, 2011, 33(17): 76-79.