王立春+張凱
摘 要:軟PLC是一種新型的控制技術(shù),即利用軟件實(shí)現(xiàn)傳統(tǒng)PLC的功能。梯形圖轉(zhuǎn)換指令表是軟PLC技術(shù)中一個(gè)關(guān)鍵點(diǎn),文章通過AOV和拓?fù)渑判?、AOV和串并聯(lián)掃描、正向深度優(yōu)先掃描、二叉有向圖四種方法實(shí)現(xiàn)梯形圖到指令表的轉(zhuǎn)換,同時(shí)介紹四種方法優(yōu)缺點(diǎn)。
關(guān)鍵詞:軟PLC;梯形圖;指令表;轉(zhuǎn)換算法
中圖分類號(hào):TM571.6 文獻(xiàn)標(biāo)志碼:A 文章編號(hào):2095-2945(2018)07-0080-03
Abstract: Soft PLC is a new type of control technology, which uses software to realize the function of traditional PLC. The conversion of ladder diagram into instruction table is a key point in soft PLC technology. In this paper, four methods, i.e., AOV and topological sorting, AOV and series-parallel scanning, forward depth-first scanning and binary digraph, are used to realize the conversion from ladder diagram into instruction table. At the same time, the advantages and disadvantages of the four methods are introduced.
Keywords: soft PLC; ladder diagram (LAD); instruction list; conversion algorithm
引言
近年來,隨著控制技術(shù)向網(wǎng)絡(luò)化、智能化、分散化以及開放式控制發(fā)展,傳統(tǒng)的PLC技術(shù)逐漸暴露出其不足之處:軟硬件體系結(jié)構(gòu)封閉、指令集固定;不同廠家的PLC產(chǎn)品兼容性差;編程語言和指令系統(tǒng)各不相同,給使用人員帶來很多不便[1]。隨著信息技術(shù)的迅速發(fā)展,特別是PLC的國際編程標(biāo)準(zhǔn)IEC61131-3的制定,軟PLC技術(shù)應(yīng)運(yùn)而生,它因其功能強(qiáng)大而越來越多得到企業(yè)和研究人員的重視。西門子、羅克韋爾、三菱、艾默生等公司都推出軟PLC相關(guān)產(chǎn)品,國內(nèi)外很多高校和科研機(jī)構(gòu)也在研究這項(xiàng)技術(shù)[2]。
相對(duì)于傳統(tǒng)PLC,軟PLC具有開放的體系結(jié)構(gòu)、強(qiáng)大網(wǎng)絡(luò)通信能力和快速數(shù)據(jù)處理分析能力,同時(shí)遵循國際工業(yè)標(biāo)準(zhǔn)[3]。軟PLC系統(tǒng)的體系結(jié)構(gòu)由開發(fā)系統(tǒng)和運(yùn)行系統(tǒng)組成的,編譯器是軟PLC開發(fā)系統(tǒng)中最重要的一個(gè)模塊,具有承上啟下的作用。用戶編寫的梯形圖程序只有通過編譯器進(jìn)行編譯,才能被運(yùn)行系統(tǒng)識(shí)別,進(jìn)而控制設(shè)備運(yùn)行。梯形圖作為圖形化的語言,具有直觀、清晰、易于電氣技術(shù)人員掌握和學(xué)習(xí)優(yōu)點(diǎn),但卻不能被PLC的CPU識(shí)別。然而,指令表是一種匯編風(fēng)格的編程語言,具有高效、執(zhí)行速度快的優(yōu)點(diǎn),易于底層的運(yùn)行系統(tǒng)解釋執(zhí)行。因此要想實(shí)現(xiàn)編譯功能,研究梯形圖向指令表轉(zhuǎn)換的算法是非常有必要的[4]。
1 基于AOV圖的轉(zhuǎn)換算法
AOV有向圖是由頂點(diǎn)和弧構(gòu)成的,梯形圖程序是由若干圖元和線段按照一定規(guī)則相互連接起來的。某些梯形圖到指令表的轉(zhuǎn)換方法需要將梯形圖轉(zhuǎn)換成AOV有向圖。通過分析梯形圖程序,我們可以把梯形圖中的圖元看作頂點(diǎn),圖元與圖元之間的連線看作有向圖中的弧,這樣就可以得到梯形圖的AOV有向圖結(jié)構(gòu),從而確定各元件后繼和前驅(qū)關(guān)系。梯形圖映射AOV圖時(shí),需要在母線處和其他聯(lián)結(jié)加入虛頂點(diǎn)[6]。根據(jù)上述方法將如圖1所示的梯形圖抽象成AOV有向圖,AOV圖中的1、2表示虛頂點(diǎn)。
1.1 AOV和拓?fù)渑判蜣D(zhuǎn)換算法
拓?fù)渑判蛑傅氖窃谟邢驁D中,尋找一個(gè)線性序列(V1V2V3…Vn),其中從頂點(diǎn)Vi到Vj有一條路徑,序列中頂點(diǎn)Vi必在Vj之前[7]。拓?fù)渑判蛩惴ǖ倪^程如下:
(1)在有向圖中選擇一個(gè)入度為0的頂點(diǎn),由于該頂點(diǎn)沒有任何先決條件,輸出該頂點(diǎn)。
(2)從圖中刪除所有以它為尾的弧。
(3)重復(fù)執(zhí)行(1)和(2),直到找不到入度為0的頂點(diǎn),拓?fù)渑判蛲瓿伞?/p>
拓?fù)渑判蚴腔贏OV為前提的,AOV有向圖常用存儲(chǔ)結(jié)構(gòu)有十字鏈表、鄰接矩陣、鄰接表三種,但由于梯形圖是動(dòng)態(tài)編輯的,而鄰接矩陣是靜態(tài)方法,效率較低,而十字鏈表建立過程比較復(fù)雜,我們采用鄰接表的存儲(chǔ)方式[8]。
根據(jù)拓?fù)渑判蛩惴?,選擇入度為0的頂點(diǎn)并將頂點(diǎn)輸出,同時(shí)該頂點(diǎn)所有后繼結(jié)點(diǎn)入度值減1。將輸出的頂點(diǎn)存放在一個(gè)臨時(shí)的棧中,當(dāng)所有頂點(diǎn)輸出以后就得到了圖元的地址值。圖2為虛頂點(diǎn)1輸出過程中,AOV圖頂點(diǎn)變化過程和臨時(shí)棧的變化過程。由于AOV的圖中頂點(diǎn)有虛頂點(diǎn),因此需要除去臨時(shí)棧中的虛頂點(diǎn)。當(dāng)所有虛頂點(diǎn)去除之后,在所有地址值前面添加相應(yīng)操作符即可得到完整指令表結(jié)構(gòu)[9]。
1.2 基于AOV和串并聯(lián)掃描法的轉(zhuǎn)換算法
串并聯(lián)掃描是為了解決AOV圖不能反映元件間的邏輯關(guān)系,通過對(duì)AOV圖進(jìn)行深入掃描確定AOV圖中各元件間串并聯(lián)關(guān)系[10]。串并聯(lián)掃描分過程如下:
(1)對(duì)AOV進(jìn)行掃描,確定并聯(lián)或者串聯(lián)關(guān)系。
(2)對(duì)更新的AOV圖進(jìn)行串并聯(lián)掃描,同樣把掃描結(jié)果去更新AOV圖。
(3)重復(fù)執(zhí)行(1)和(2),直到生成能夠清楚反映元件的邏輯關(guān)系的邏輯樹。
梯形圖準(zhǔn)換指令表的分為三個(gè)部分[11-12]:(1)梯形圖映射AOV;(2)對(duì)AOV進(jìn)行串并聯(lián)掃描,確定邏輯樹;(3)對(duì)邏輯樹進(jìn)行遍歷生成指令表。下面通過一個(gè)實(shí)例來說明具體如何實(shí)現(xiàn)串并聯(lián)掃描。將AOV圖中所有實(shí)頂點(diǎn)存入一個(gè)向量M中,第一輪掃描,找到第一個(gè)元件I0.0與元件I0.1串聯(lián),將I0.0和I0.1從向量M中移除,生成邏輯結(jié)點(diǎn)串1放入向量N中,同時(shí)更新AOV圖,如圖3。經(jīng)過第二次串并聯(lián)掃描,I0.2和I0.3串聯(lián),生成邏輯結(jié)點(diǎn)串2;經(jīng)過第三次掃描,I0.5和I0.6串聯(lián),生成結(jié)點(diǎn)串3;經(jīng)過第四次掃描,I0.7和I1.0串聯(lián),生成結(jié)點(diǎn)串4;進(jìn)過第五次掃描,I0.4和Q0.0串聯(lián),生成結(jié)點(diǎn)串5,如圖4。經(jīng)過第六次掃描,串1,I1.0和串3并聯(lián),生成邏輯結(jié)點(diǎn)并1;經(jīng)過第七次掃描,串2和串4并聯(lián),生成邏輯結(jié)點(diǎn)并2;經(jīng)過第八次掃描,并1,并2和串5串聯(lián),生成邏輯結(jié)點(diǎn)串6,如5圖。通過簡化生成邏輯樹結(jié)構(gòu),如圖6。endprint
2 基于正向深度優(yōu)先掃描的轉(zhuǎn)換算法
正向深度優(yōu)先掃描算法是通過正向、深度掃描梯形圖存儲(chǔ)的雙向鏈表結(jié)構(gòu),得到指令表方法?!罢颉本褪翘菪螆D程序第一行第一列的輸入結(jié)點(diǎn)開始,從左到右,從上到下順序?qū)Τ绦蜻M(jìn)行讀取掃描。深度優(yōu)先是按照手工翻譯思想,先處理深層次支,后處理淺層分支或主路,類似于樹的深度掃描[13-14]。具體描述就是,以梯形圖的每一個(gè)梯級(jí)為單位進(jìn)行從上到下,從左到右掃描,與到并聯(lián)支路,就轉(zhuǎn)入與當(dāng)前分支并聯(lián)的下一行進(jìn)行掃描,重復(fù)執(zhí)行,一個(gè)階梯掃描完成后,回到原來位置繼續(xù)向右掃描直到整個(gè)梯形圖程序掃描結(jié)束。如果沒有出現(xiàn)并聯(lián)情況,就按照從左到右掃描處理。通過掃描構(gòu)建成樹的結(jié)構(gòu),最后通過遍歷實(shí)現(xiàn)梯形圖到指令表轉(zhuǎn)換。
圖7舉例展示處理一個(gè)梯形圖程序時(shí)掃描過程和順序。按照?qǐng)D中箭頭和數(shù)字標(biāo)識(shí),從梯形圖第一行第一列開始掃描,首先掃描圖元I0.0,發(fā)現(xiàn)右下側(cè)右并聯(lián)分支,轉(zhuǎn)向下一行,對(duì)下一行進(jìn)行掃描發(fā)現(xiàn)圖元I0.1,掃描I0.1右下沒有并聯(lián)分支,此階梯掃描完畢。回到原來位置接著從圖元I0.0后面向右繼續(xù)掃描發(fā)現(xiàn)圖元I0.2,圖元I0.2右下有并聯(lián)分支轉(zhuǎn)向下一行,對(duì)并聯(lián)支路掃描遇到圖元I0.3,I0.4,發(fā)現(xiàn)I0.3沒有向下的并聯(lián)支路,返回主路圖元I0.2后面繼續(xù)向右掃描,遇到圖元I0.5發(fā)現(xiàn)圖元沒有并聯(lián)支路,繼續(xù)向右掃描遇到圖元Q0.0,繼續(xù)掃描發(fā)現(xiàn)右母線此網(wǎng)絡(luò)程序掃描結(jié)束,跳轉(zhuǎn)下一個(gè)網(wǎng)絡(luò),重復(fù)此過程直到整個(gè)程序結(jié)束。例子中的梯形圖轉(zhuǎn)換指令表程序段,如圖7。
3 基于二叉樹有向圖的轉(zhuǎn)換算法
梯形圖轉(zhuǎn)換指令表時(shí),常采用一種方法就是將梯形圖的存儲(chǔ)為二叉樹有向圖形式,通過一次遍歷就可以得到指令表[15]。梯形圖轉(zhuǎn)換指令表核心問題就是需準(zhǔn)確表達(dá)梯形圖圖元的位置關(guān)系與邏輯關(guān)系(串并聯(lián)關(guān)系)。利用二叉有向圖用左子樹表示串聯(lián),右子樹表示并聯(lián),這樣就可以表達(dá)出圖元的邏輯關(guān)系[16,17]。圖8給出了一個(gè)典型梯形圖程序,將梯形圖中的每個(gè)圖元看做一個(gè)節(jié)點(diǎn),按照每個(gè)網(wǎng)絡(luò)進(jìn)行轉(zhuǎn)換,網(wǎng)絡(luò)之間通過虛擬節(jié)點(diǎn)實(shí)現(xiàn)連接。轉(zhuǎn)換后的二叉有向圖如圖8。
4 結(jié)束語
本文介紹了幾種梯形圖向指令表轉(zhuǎn)換的算法,AOV和拓?fù)渑判蚍椒軌蛑庇^方便,對(duì)于復(fù)雜串并聯(lián)梯形圖效率不高;AOV和串并聯(lián)掃描轉(zhuǎn)換算法每次可以掃描歸并多個(gè)元件效率高,但掃描過繁多;正向深度優(yōu)先掃描算法準(zhǔn)換準(zhǔn)確率高但復(fù)雜梯形圖需要使用遞歸調(diào)用方法;二叉樹有向圖方法簡單,但對(duì)邏輯錯(cuò)誤查找和梯形圖規(guī)范的檢查比較困難。
參考文獻(xiàn):
[1]周雷.基于PC的軟PLC開發(fā)系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)[D].重慶:重慶大學(xué),2009.
[2]畢輝,程良鴻.關(guān)于軟PLC技術(shù)的研究及發(fā)展[J].機(jī)電產(chǎn)品開發(fā)與創(chuàng)新,2006,6.
[3]李成勇.軟PLC技術(shù)研究與開發(fā)[D].四川:西華大學(xué),2008.
[4]吳亞山,陸陽.軟PLC梯形圖編輯與指令表生成方法研究[J].合肥工業(yè)大學(xué)學(xué)報(bào):自然科學(xué)版,2015,33(10):1353-1357.
[5]朱戰(zhàn)立.數(shù)據(jù)結(jié)構(gòu)-使用C++語言[M].西安:西安電子科技大學(xué)出版社,2005.
[6]馮光,夏清國,裴遠(yuǎn)方.PLC梯形圖向AOV圖的一種轉(zhuǎn)化算法[J].航空計(jì)算技術(shù),2009,39(2):109-112.
[7]段恩澤.數(shù)據(jù)結(jié)構(gòu)(c#)[M].北京:清華大學(xué)出版社,2006.
[8]韓江,段少磊,夏鏈,等.軟PLC梯形圖向指令表轉(zhuǎn)換的算法研究與實(shí)現(xiàn)[J].組合機(jī)床與自動(dòng)化加工技術(shù),2013,11(11):61-64.
[9]姚遠(yuǎn),丑武勝,陳友東,等.軟PLC編程開發(fā)系統(tǒng)的設(shè)計(jì)和實(shí)現(xiàn)[J].組合機(jī)床與自動(dòng)化加工技術(shù),2006,6(14):14-17.
[10]鄒莉.軟PLC梯形圖向指令表轉(zhuǎn)換新算法的研究與實(shí)現(xiàn)[J].聊城大學(xué)學(xué)報(bào):自然科學(xué)版,2013,3(26):105-110.
[11]石銳,周雷,楊正益.軟PLC梯形圖到語句表轉(zhuǎn)換新策略的研究[J].計(jì)算機(jī)工程與應(yīng)用,2010.
[12]常明偉.PLC軟件開發(fā)平臺(tái)的設(shè)計(jì)與實(shí)現(xiàn)[D].天津:天津大學(xué),2009.
[13]郭書杰.軟件PLC梯形圖編程系統(tǒng)的研究與實(shí)現(xiàn)[D].沈陽:中國科學(xué)院,2010.
[14]章德平.軟件PLC開發(fā)平臺(tái)的設(shè)計(jì)與實(shí)現(xiàn)[D].武漢:武漢理工大學(xué),2007.
[15]黃云鷹,張浩,樊留群.軟PLC梯形圖可視化編輯軟件C++實(shí)現(xiàn)[J].機(jī)電一體化,2006,5:52-54.
[16]蘇淑芝.軟PLC梯形圖編程系統(tǒng)的研究與實(shí)現(xiàn)[D].廣州:華南理工大學(xué),2012.
[17]儀維.軟件化PLC平臺(tái)的研究與開發(fā)[D].山東:山東大學(xué),2005.endprint