魏曉晴,吳旭光,牛 云,郭 逸,騰林陽
WEI Xiao-qing, WU Xu-guang, NIU Yun, GUO Yi, TENG Lin-yang
(西北工業(yè)大學(xué),西安 710072)
隨著計算機(jī)技術(shù)、通訊技術(shù)和微電子技術(shù)的迅速發(fā)展,軟PLC技術(shù)己漸漸成為國內(nèi)外工業(yè)控制技術(shù)研究的熱點(diǎn)。軟PLC是以標(biāo)準(zhǔn)的、通用的控制器硬件平臺和專用控制卡作為硬件基礎(chǔ),基于工業(yè)控制計算機(jī)(IPC)或嵌入式PC(EPC),使用軟件實(shí)現(xiàn)PLC功能的軟邏輯控制系統(tǒng)。因此,軟PLC既可提供傳統(tǒng)PLC的相應(yīng)功能,也具備PC機(jī)或嵌入式系統(tǒng)的各種優(yōu)點(diǎn),具有更強(qiáng)的兼容性和可擴(kuò)展性。
軟PLC開發(fā)系統(tǒng)實(shí)際上就是帶有編譯和調(diào)試功能的軟PLC編程器[1],應(yīng)當(dāng)支持基于IEC61131-3[2]國際標(biāo)準(zhǔn)的編程語言。在IEC61131-3定義的5種語言中,梯形圖和語句表應(yīng)用最為廣泛,梯形圖便于工程人員編程,語句表便于控制器解析執(zhí)行。因此,在軟PLC開發(fā)系統(tǒng)中實(shí)現(xiàn)從梯形圖到語句表的轉(zhuǎn)換解算尤為重要?,F(xiàn)有的解算方法有很多,但往往存在結(jié)構(gòu)不清晰、建立過程繁瑣、復(fù)雜節(jié)點(diǎn)判斷困難等問題[3,4]。為此,本文提出了一種梯形圖到語句表轉(zhuǎn)換的新策略。
本文研究并實(shí)現(xiàn)了一種軟PLC開發(fā)系統(tǒng)。它運(yùn)行在PC機(jī)上,既可以與軟PLC執(zhí)行系統(tǒng)組成一個完整的系統(tǒng),又可以單獨(dú)仿真運(yùn)行。該開發(fā)系統(tǒng)按功能可分為梯形圖編輯模塊,編譯解算模塊,通信監(jiān)控模塊三大部分,以VC++編程實(shí)現(xiàn)。
梯形圖編輯模塊即梯形圖編輯器,主要功能包括梯形圖圖元的繪制、編輯、保存和讀取,如圖1所示。
圖1 梯形圖編輯模塊設(shè)計組成
梯形圖元件包括常開觸點(diǎn)、輸出線圈等簡單元件和定時器、計數(shù)器等復(fù)雜元件。由C++面向?qū)ο蟮睦^承特性,可以抽象出一個基類作為梯形圖圖元的總體接口,再以這個類為基礎(chǔ),派生出具體的圖元子類。梯形圖圖元的基類定義如下:
因每個圖元繼承自同一個基類,擁有共同的屬性,因此,界面上的所有圖元可看作一個集合,稱為集合類。對圖元的各種操作,如繪制、選中、刪除、存取等,都是通過對集合類的操作進(jìn)行,這里用到的集合類為C++的CPtrArray類。
如繪制定時器圖元的過程:程序響應(yīng)鼠標(biāo)左鍵消息,新建一個定時器子類對象,將該對象加入集合類并調(diào)用定時器子類的Draw( )函數(shù)實(shí)現(xiàn)繪制。示例代碼如下:
梯形圖的編譯[6]是本系統(tǒng)的關(guān)鍵部分,主要包括編譯解算和語法查錯兩部分。
編譯解算即把用戶編輯的梯形圖程序,編譯轉(zhuǎn)換生成語句表。
語法查錯即在編譯過程中,按照梯形圖編程語言規(guī)范,進(jìn)行邏輯和語法分析,若發(fā)現(xiàn)梯形圖有錯誤,便生成相應(yīng)的錯誤提示信息,并顯示到用戶界面。
將梯形圖邏輯關(guān)系轉(zhuǎn)換解算為語句表一直是軟PLC開發(fā)中的重點(diǎn)和難點(diǎn),本文提出了一種轉(zhuǎn)換解算的新策略,它基于二叉樹的轉(zhuǎn)換解算方法,但不同于傳統(tǒng)的掃描分割圖形構(gòu)造二叉樹法,而是一種按“節(jié)點(diǎn)勢”關(guān)系構(gòu)造二叉樹的方法,它的指導(dǎo)思想是將梯形圖圖元間邏輯關(guān)系抽象為數(shù)值關(guān)系,量化地顯示出梯形圖的層次,從而以之精確地解析出圖元之間的串、并聯(lián)等關(guān)系。
本文首次提出了“節(jié)點(diǎn)勢”這一概念,可以將它類似于電路中的電勢理解。節(jié)點(diǎn),即梯形圖各圖元間的連接點(diǎn)。節(jié)點(diǎn)勢,即節(jié)點(diǎn)的勢值。因?yàn)樘菪螆D每個圖元都有左右兩個節(jié)點(diǎn),因此每個圖元擁有左節(jié)點(diǎn)勢和右節(jié)點(diǎn)勢。如圖2所示,I0.0的左節(jié)點(diǎn)勢=0,右節(jié)點(diǎn)勢=1。
梯形圖到語句表的轉(zhuǎn)換解算的過程大體分為以下四步。
1)定義梯形圖的“節(jié)點(diǎn)勢”。按從左→右,從上→下的順序多次掃描梯形圖,按一定規(guī)則給每個圖元左右節(jié)點(diǎn)賦值。通過各圖元節(jié)點(diǎn)勢的確定,就將梯形圖圖元間邏輯關(guān)系抽象為數(shù)值關(guān)系了,如左右節(jié)點(diǎn)勢都相等的圖元互為并聯(lián)關(guān)系。如圖2所示,I0.1與I0.6左節(jié)點(diǎn)勢同為1,右節(jié)點(diǎn)勢同為2,兩者是并聯(lián)關(guān)系。
圖2 節(jié)點(diǎn)勢示例
2)定義二叉樹數(shù)據(jù)結(jié)構(gòu)
typedef struct Tree
{ int index;//索引值
int type;//類型
char *opr;//根節(jié)點(diǎn)內(nèi)容
struct Tree *lchild;//左節(jié)點(diǎn)指針指向的二叉樹
struct Tree *rchild; //右節(jié)點(diǎn)指針指向的二叉樹
int lenode;//左節(jié)點(diǎn)勢值
int rinode;//右節(jié)點(diǎn)勢值
BOOL restruct;//二叉樹屏蔽標(biāo)志
} DTree;
3)按從左到右,從上到下的順序掃描梯形圖,對每個圖元(橫豎線除外),構(gòu)建對應(yīng)的二叉樹。然后依據(jù)二叉樹間的節(jié)點(diǎn)勢關(guān)系,循環(huán)構(gòu)建新二叉樹,屏蔽舊二叉樹。直到現(xiàn)有的二叉樹數(shù)目等于輸出元件個數(shù)時,停止循環(huán),完成最終構(gòu)建,現(xiàn)有二叉樹為最終二叉樹。
4)運(yùn)用遞歸算法,遍歷最終二叉樹,生成語句表,顯示在主界面上,同時生成編譯數(shù)據(jù)及文件。
該策略基于二叉樹的解算方法,但通過梯形圖“節(jié)點(diǎn)勢”的確定,將梯形圖圖元間邏輯關(guān)系抽象為數(shù)值關(guān)系,能大大降低二叉樹算法的時間和空間復(fù)雜度,思路簡單清晰,運(yùn)行快速精確。并且能夠解算多支梯形圖及復(fù)雜的邏輯關(guān)系,在執(zhí)行過程中對梯形圖進(jìn)行邏輯查錯和規(guī)范檢查,該解算方法還能夠?yàn)槠渌愃茍D形關(guān)系的解算提供參考,具有普遍適用性。
本系統(tǒng)既可以單獨(dú)仿真運(yùn)行,又可與軟PLC執(zhí)行系統(tǒng)組成一個完整的系統(tǒng),為此,提供了與執(zhí)行系統(tǒng)通信的串口,既可通過虛擬串口軟件與基于PC的軟PLC執(zhí)行系統(tǒng)連接運(yùn)行,也可通過實(shí)際串口與基于嵌入式的軟PLC執(zhí)行系統(tǒng)連接。串口通信采用事件驅(qū)動的接收方式,利用MSComm 控件進(jìn)行串口初始化、接收數(shù)據(jù)、發(fā)送數(shù)據(jù)等串行通信管理。
本系統(tǒng)通過串口下載編譯數(shù)據(jù)到執(zhí)行系統(tǒng),并與之進(jìn)行聯(lián)調(diào)。執(zhí)行系統(tǒng)執(zhí)行編譯數(shù)據(jù)后刷新輸出映像區(qū),開發(fā)系統(tǒng)獲取執(zhí)行系統(tǒng)的運(yùn)行狀態(tài)并在梯形圖界面上顯示,以監(jiān)控執(zhí)行系統(tǒng)的工作狀態(tài)。
圖3 軟PLC編程開發(fā)系統(tǒng)主界面
該軟PLC開發(fā)系統(tǒng)主界面主要有梯形圖編輯區(qū)、指令區(qū)和信息輸出區(qū)三部分。如圖3所示,在中間編輯區(qū)繪制了兩支簡單的梯形圖,經(jīng)過編譯解算,在右方指令區(qū)顯示出它們對應(yīng)的語句表程序,在下方信息輸出區(qū)顯示出對應(yīng)的提示信息。當(dāng)連接監(jiān)控時,開發(fā)系統(tǒng)通過串口獲取執(zhí)行系統(tǒng)的工作狀態(tài)并在梯形圖界面上顯示,某觸點(diǎn)或線圈操作數(shù)為1時對應(yīng)的圖元加粗變紅。該實(shí)例證明,本系統(tǒng)可以解算多支梯形圖,并且實(shí)現(xiàn)定時器計數(shù)器等復(fù)雜元件的編輯及編譯解算。
本文設(shè)計實(shí)現(xiàn)了一種軟PLC編程開發(fā)系統(tǒng),并提出了一種簡單易用的梯形圖到語句表轉(zhuǎn)換的新策略。經(jīng)過大量測試證明,該系統(tǒng)能夠方便準(zhǔn)確地完成梯形圖程序的開發(fā)和解算,并且在執(zhí)行過程中完成對梯形圖的邏輯查錯和規(guī)范檢查。如今國外的軟PLC編程系統(tǒng)是工控市場上的主流,國產(chǎn)的相對較少而且不成熟,因此,本文對推進(jìn)軟PLC的國產(chǎn)化有著重要意義。
[1]趙雨生, 高美鳳. 一種梯形圖編程系統(tǒng)的研究與實(shí)現(xiàn)方法[J]. 工業(yè)控制計算機(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梯形圖到語句表轉(zhuǎn)換新策略的研究[J]. 計算機(jī)工程與應(yīng)用, 2010, 46(18): 244-248.
[4]葛芬, 吳寧. 基于AOV圖及二叉樹的梯形圖與指令表互換算法[J]. 南京航空航天大學(xué)學(xué)報, 2006, 38(6): 754-758.
[5]王亞男, 陳嬋娟. 基于Flex與Bison的軟PLC編譯模塊的研究[J]. 制造業(yè)自動化, 2011, 33(17): 76-79.