李馳骎 王庭有 李應(yīng)春 楊安園
摘 要:為了探索PLC梯形圖編輯系統(tǒng)的設(shè)計(jì)方法,從梯形圖編程系統(tǒng)設(shè)計(jì)需求出發(fā),分析傳統(tǒng)梯形圖網(wǎng)絡(luò)的不足,采用一種高自由度的網(wǎng)絡(luò)拓?fù)浣Y(jié)構(gòu)描述梯形圖網(wǎng)絡(luò),并根據(jù)該網(wǎng)絡(luò)拓?fù)浣Y(jié)構(gòu)提出一種分布式存儲方案,實(shí)現(xiàn)梯形圖圖元之間的連接關(guān)系存儲?;赒T圖形框架采用面向?qū)ο蟮能浖椒▽?shí)現(xiàn)梯形圖標(biāo)準(zhǔn)圖元創(chuàng)建、連接關(guān)系建立、圖元刪除等功能。完成梯形圖編輯系統(tǒng)設(shè)計(jì)后,對圖元管理、各種指令調(diào)用進(jìn)行編輯測試,結(jié)果表明該系統(tǒng)設(shè)計(jì)方法可行。
關(guān)鍵詞:可編程控制器;梯形圖;QT;存儲結(jié)構(gòu);圖元管理
DOI:10. 11907/rjdk. 181943
中圖分類號:TP319文獻(xiàn)標(biāo)識碼:A文章編號:1672-7800(2019)002-0072-04
Abstract: In order to explore the design method of PLC ladder diagram (LAD) editor system, we start with the overall requirements of LAD editor system, analyze the shortcomings of the traditional LAD network, and use a high-degree-of-freedom network topology to describe LAD network. According to the network topology, a distributed storage scheme is proposed to implement the storage of connection relationships between LAD primitives. The object-oriented software method based on the QT graphics framework is used to realize the functions of creating ladder diagram standard primitives, establishing connection relationships and deleting primitives. After completing the design of the ladder diagram editing system, we tested the management of graphic elements and various instructions. No problems were found during the process. The results shows that the method of designing the ladder diagram editing system proposed in this paper is feasible.
Key Words: programmable logic controller; ladder diagram; QT; storage scheme; primitive management
0 引言
可編程控制器(programmable logic controller,PLC)在工業(yè)控制領(lǐng)域應(yīng)用廣泛, PLC編程軟件是推動PLC發(fā)展的重要動力[1-2],而編輯系統(tǒng)是編程軟件中至關(guān)重要的組成部分,它負(fù)責(zé)梯形圖的輸入、編輯、顯示,各個單元的位置、符號等信息保存,決定了軟件的交互性[3]。
國外PLC發(fā)展相當(dāng)成熟,PLC編程軟件技術(shù)研究較多:Milik A[4]提出了一種多線程執(zhí)行技術(shù),利用數(shù)據(jù)流圖識別程序的并行性,完成編程語言的編譯;Prahofer等[5]采用程序上的模式匹配、控制流、數(shù)據(jù)流等分析方法,開發(fā)靜態(tài)代碼分析工具;Deveza等[6]將指令表作為Matlab/Simulink翻譯軟件包的輸入,實(shí)現(xiàn)PLC在Matlab中的仿真;Kim H S等[7]采用二叉邏輯樹方法實(shí)現(xiàn)梯形圖程序的解釋;Moonga等[8-10]通過將梯形圖映射為AOV圖的方法,把梯形圖轉(zhuǎn)換為AOV圖,且使用雙堆棧深度優(yōu)先搜索算法(TSDFS)實(shí)現(xiàn)梯形圖到指令表的轉(zhuǎn)換;Asensio等[11]提出了基于IEC61131-3標(biāo)準(zhǔn)和PLCOpen TC6架構(gòu)的完整工業(yè)自動化程序開發(fā)環(huán)境。
國內(nèi)PLC編程軟件研究主要有:李慧亮等[12]使用FLEC、BISON對指令表進(jìn)行詞法分析和語法分析,進(jìn)一步完成了中間代碼結(jié)構(gòu)設(shè)計(jì)、目標(biāo)代碼生成器設(shè)計(jì),但文中的中間代碼結(jié)構(gòu)和目標(biāo)代碼生成器考慮過少,不具備通用性;韓江等[13]將梯形圖映射為AOV圖,建立梯形圖到以鄰接矩陣方式存儲的AOV圖的映射,但由于梯形圖串并聯(lián)關(guān)系的復(fù)雜性,使用該算法會導(dǎo)致轉(zhuǎn)換不穩(wěn)定;吳盼盼等[14]采用XML文件描述梯形圖圖元及其連接方式的存儲結(jié)構(gòu),以類C的腳本語言作為中間語言實(shí)現(xiàn)梯形圖到指令表的轉(zhuǎn)換,但存儲方式和轉(zhuǎn)換方式稍顯復(fù)雜,支持的指令不多;黃健[15]基于MFC實(shí)現(xiàn)圖元的數(shù)據(jù)結(jié)構(gòu)設(shè)計(jì),用分層方法存儲圖元位置關(guān)系;楊觀賜等[16]提出了以鏈表與雙向二維鏈表結(jié)合的梯形圖網(wǎng)絡(luò)存儲結(jié)構(gòu)。
本文對梯形圖編輯系統(tǒng)設(shè)計(jì)方法進(jìn)行研究。從梯形圖編程系統(tǒng)總體需求出發(fā),通過分析梯形圖的網(wǎng)絡(luò)拓?fù)浣Y(jié)構(gòu)及圖元存儲方案,提出拓?fù)浣Y(jié)構(gòu)及對應(yīng)的圖元存儲結(jié)構(gòu),采用面向?qū)ο蟮能浖椒▽?shí)現(xiàn)圖元管理功能,該方案在梯形圖網(wǎng)絡(luò)結(jié)構(gòu)上更加人性化,圖元存儲結(jié)構(gòu)更加簡單,對編輯語言轉(zhuǎn)換的復(fù)雜度更低,圖元管理的各種功能更加健全。
1 系統(tǒng)總體設(shè)計(jì)
1.1 系統(tǒng)功能
編輯系統(tǒng)在整個編程軟件中起著基石作用,可細(xì)分為變量模塊、圖元模塊、程序網(wǎng)絡(luò)模塊[17],具體功能細(xì)分如圖1所示。
1.2 梯形圖網(wǎng)絡(luò)拓?fù)浣Y(jié)構(gòu)設(shè)計(jì)
大部分梯形圖編程軟件的編輯模塊采用網(wǎng)格或矩陣固定位置的方式向梯形圖網(wǎng)絡(luò)中添加圖元[18-19],這種方式規(guī)定每個元件所占網(wǎng)格數(shù),優(yōu)點(diǎn)是圖元連接關(guān)系清晰且排版簡單,但也有一些缺點(diǎn):①網(wǎng)絡(luò)空間利用率低;②圖元操作的算法時間復(fù)雜度高,串并聯(lián)關(guān)系識別較復(fù)雜,如圖2所示。
因此,本文不采用固定位置的網(wǎng)絡(luò)結(jié)構(gòu)而采用元件可以自由移動的網(wǎng)絡(luò)拓?fù)浣Y(jié)構(gòu),這種網(wǎng)絡(luò)結(jié)構(gòu)不限制梯級中任何一個圖元位置,圖元之間的連接關(guān)系是用戶添加的,通過解析連接線唯一得到,與圖元位置沒有任何關(guān)系。刪除圖元時,只刪除和該圖元直接相連的連接線,不對其余圖元及連接線做任何更新。
本文采用的網(wǎng)絡(luò)結(jié)構(gòu)以最優(yōu)方式完整呈現(xiàn)整個梯級網(wǎng)絡(luò),同時降低圖元存儲結(jié)構(gòu)復(fù)雜度和圖形網(wǎng)絡(luò)轉(zhuǎn)換復(fù)雜度。此外,雖然沒有網(wǎng)格會給程序編排帶來困難,但通過建立大小隨意設(shè)置的柵格可以解決問題,元件按照柵格的設(shè)置移動,每次只移動一格[20]。
1.3 程序結(jié)構(gòu)設(shè)計(jì)
基于面向?qū)ο蟮能浖_發(fā)方法,本文使用Qt圖形/視圖框架搭建編輯系統(tǒng)的程序結(jié)構(gòu)。圖形/視圖框架包含圖元(QGraphicsItem)、場景(QGraphicsScene)、視圖(QGraphicsView)三層結(jié)構(gòu),分別具有作為場景圖形項(xiàng)目的基類、提供圖形/視圖場景管理器的容器、使場景中的內(nèi)容可視化功能[21]。
將IEC61131-3標(biāo)準(zhǔn)規(guī)定的梯形圖圖元抽象為圖形視圖框架中的圖元,采用繼承QGraphicsItem的方法生成不同的圖元,并通過響應(yīng)圖元的鼠標(biāo)雙擊事件完成圖元信息的修改。圖元的管理通過重寫場景類QGraphicsScene實(shí)現(xiàn):響應(yīng)鼠標(biāo)的單擊事件完成圖元的連接及圖元的添加,響應(yīng)鍵盤事件刪除圖元。最后,考慮到梯形圖網(wǎng)絡(luò)中功能/功能塊的使用頻率高,增加拖拽添加功能/功能塊圖元的方式,該過程通過重寫圖形/視圖框架中的視圖類QGraphicsView的拖放響應(yīng)函數(shù)完成。面向?qū)ο蟮能浖_發(fā)方法將軟件系統(tǒng)中各個實(shí)體抽象為類,然后基于類的繼承、封裝、消息傳送、多態(tài)等特性構(gòu)造軟件系統(tǒng),最后設(shè)計(jì)各個實(shí)體類之間關(guān)鍵信息通信。編輯系統(tǒng)實(shí)現(xiàn)結(jié)構(gòu)如圖3所示。
2 圖元數(shù)據(jù)結(jié)構(gòu)設(shè)計(jì)
2.1 圖元存儲結(jié)構(gòu)設(shè)計(jì)
采用準(zhǔn)確高效的圖元存儲結(jié)構(gòu)是設(shè)計(jì)梯形圖編輯系統(tǒng)不可缺少的環(huán)節(jié)。目前,主流的梯形圖存儲結(jié)構(gòu)有雙向鏈表[22]、分層存儲法[23]、三級單向鏈表[24]。
根據(jù)網(wǎng)絡(luò)拓?fù)浣Y(jié)構(gòu)提出一種分布式圖元存儲結(jié)構(gòu),該存儲結(jié)構(gòu)設(shè)計(jì)如下:①每個圖元存儲每個輸入/輸出點(diǎn)對應(yīng)的連接線集合;②連接線存儲起點(diǎn)圖元及終點(diǎn)圖元。
由于梯形圖圖元管理系統(tǒng)由Qt圖形/視圖框架中的場景類QGraphicsScene提供,所以這種分布式存儲結(jié)構(gòu)僅僅需要存儲圖元之間的連接關(guān)系,并不需要考慮圖元本身的存儲,從而降低了存儲結(jié)構(gòu)的復(fù)雜度,圖4為該存儲結(jié)構(gòu)的方法示例。
2.2 圖元類設(shè)計(jì)
圖元作為梯形圖網(wǎng)絡(luò)中最小的單元,是構(gòu)造梯形圖網(wǎng)絡(luò)的核心元素,但是圖元的多樣性決定了不能對每個圖元單獨(dú)設(shè)計(jì),因此本文對圖元進(jìn)行類設(shè)計(jì)。圖元類設(shè)計(jì)思路是:把圖元的通用屬性抽象成所有圖元的基類,然后按照各個圖元的不同屬性從該基類中派生出具體類,所有圖元將基于圖形/視圖框架中的圖元類QGraphicsItem生成。為使圖元支持SIGNLA/SLOT操作[25],采用繼承QGraphicsItem、QObject的多繼承方式實(shí)現(xiàn)梯形圖圖元類設(shè)計(jì),圖5是圖元類的繼承關(guān)系。
3 圖元管理
3.1 圖元創(chuàng)建
本文設(shè)計(jì)的圖元采用工具欄按鈕添加方式創(chuàng)建。
圖元添加工具欄屬于主程序?qū)嶓w,和梯形圖編輯框架中的圖元管理實(shí)體屬于不同的實(shí)體,故無法在對應(yīng)工具按鈕的響應(yīng)函數(shù)中生成圖元。通過工具欄按鈕添加圖元時,需要將圖元的型別信息通過SIGNAL/SLOT傳遞給圖元管理實(shí)體類,型別信息的傳遞過程如圖6所示。圖6中KM_PLC為編程軟件主框架類,LD_Viewer為梯形圖編輯模塊主部件,LD_View為基于圖形/視圖框架中視圖類QGraphicsView的自定義視圖類,LD_Scene為基于圖形/視圖框架的場景類。
自定義圖元管理類LD_Scene通過響應(yīng)鼠標(biāo)的單擊事件完成與當(dāng)前型別信息相對應(yīng)的圖元類添加。型別信息為字符串類型,無法被new運(yùn)算符直接使用,為了保證圖元添加算法的可伸縮性,采用工廠模式(Object Factory)完成型別信息映射到對應(yīng)圖元類。本文使用map類容器完成型別信息與函數(shù)指針之間的映射關(guān)系,圖元的注冊、取消注冊、創(chuàng)建分別對應(yīng)于map容器的添加、刪除、查找。
根據(jù)上述設(shè)計(jì),要在梯形圖程序組織單元中產(chǎn)生圖形元素必須用到該工廠模式,如果每個程序組織單元都實(shí)例化一個全局的BaseItem工廠模式,程序?qū)⒖赡芤騼?nèi)存不足而被迫結(jié)束。因此,本文將工廠類封裝在Singleton模式下,在LD_Scene的構(gòu)造函數(shù)中完成圖元注冊。
3.2 圖元連接關(guān)系建立
創(chuàng)建連接關(guān)系的實(shí)質(zhì)是確定圖元之間的存儲關(guān)系。起始連接、結(jié)束連接信號都是從圖元中輸入(輸出)連接捕捉點(diǎn)發(fā)出的,為了區(qū)分這兩個信號,設(shè)計(jì)一個公有的bool變量flag作為標(biāo)記:當(dāng)flag的值為false時,發(fā)射開始連接信號;當(dāng)flag的值為true時,發(fā)射結(jié)束連接信號。此外為保證正確的位置繪制連接線起點(diǎn)、終點(diǎn)且實(shí)現(xiàn)連接線起始圖元的正確存儲,在請求連接/結(jié)束時需要傳遞“請求連接位置”及“請求連接捕捉點(diǎn)類型”。
3.4 圖元刪除
圖元刪除操作通過重寫LD_Scene的鍵盤響應(yīng)事件完成(按Del建實(shí)現(xiàn)刪除)。使用場景類的接口函數(shù)selectItem()提取當(dāng)前所有的選中項(xiàng)目,利用運(yùn)行時類型識別(run-time type identification,RTTI)技術(shù)中的dynamic_cast判斷選中的項(xiàng)目類型。由于圖元基類的析構(gòu)函數(shù)會刪除所有與該圖元相連的連接線,所以為了避免二次刪除連接線,本文先刪除連接線再對選中的項(xiàng)目執(zhí)行delete操作。
4 軟件測試
對系統(tǒng)設(shè)計(jì)方案進(jìn)行編輯測試,對圖元管理、各種指令調(diào)用都進(jìn)行了測試,結(jié)果表明本文提出的編輯系統(tǒng)設(shè)計(jì)方法可行。圖7為梯形圖編程實(shí)例。
5 結(jié)語
本文基于面向?qū)ο蟮能浖_發(fā)方法實(shí)現(xiàn)了PLC梯形圖編輯系統(tǒng)設(shè)計(jì),通過軟件測試證明該方案有良好的應(yīng)用效果,為后續(xù)功能完善的PLC編程軟件開發(fā)打下了基礎(chǔ),是在目前國內(nèi)沒有完全自主開發(fā)的PLC編程軟件現(xiàn)狀下的一種探索。梯形圖是PLC編程語言中最常用的語言,該編程軟件的其它模塊正在開發(fā)中,本文的研究對推進(jìn)PLC軟件發(fā)展有著重要意義。
參考文獻(xiàn):
[1] 歐陽三泰,周琴,歐陽希. 軟PLC控制技術(shù)綜述[J]. 電氣傳動,2005(9):52-54.
[2] GREGOR K,GIOVANNI G,STANKO S. A new approach to PLC software design[J]. ISA Transactions,2003,42(2):167-171.
[3] 趙雨生,高美鳳. 一種梯形圖編程系統(tǒng)的研究與實(shí)現(xiàn)方法[J]. 工業(yè)控制計(jì)算機(jī),2008(6):34-35.
[4] MILIK A. Multiple-core PLC CPU implementation and programming[J]. Journal of Circuits, Systems and Computers,2018,27(10): 162-185.
[5] PRAHOFER H, ANGERER F, RAMLER R, et al. Static code analysis of iec 61131-3 programs: comprehensive tool support and experiences from large-scale industrial application[J]. IEEE Transactions on Industrial Informatics, 2017, 13(1): 37-47.
[6] DEVEZA T, MARTINS J F. PLC control and Matlab/Simulink simulations: a translation approach[C]. Mallorca, Spain: Emerging Technologies & Factory Automation, 2009.
[7] KIM H S, KWON W H, CHANG N. A translation method for ladder diagram with application to a manufacturing process[C]. Detroit, MI, USA: International Conference on Robotics and Automation, 1999.
[8] MOONGA K H, LINRU Y, SHAOJUN L. Algorithm for compiling unrestricted ladder diagram to IEC 61131-3 compliant instruction list[J]. Lecture Notes in Engineering and Computer Science, 2011, 2191(1): 949-954.
[9] FEN G,NING W. A transformation algorithm of ladder diagram into instruction list based on AOV digraph and binary tree[C]. Hong Kong: IEEE Region 10 Conference, 2006.
[10] YAN Y, ZHANG H. Compiling ladder diagram into instruction list to comply with IEC 61131-3[J]. Computers in Industry, 2010,61(5): 448-462.
[11] ASENSIO J, ORTU?O F, DAMAS M, et al. Industrial automation programming environment with a new translation algorithm among IEC 61131-3 languages based on the TC6-XML scheme[J]. International Journal of Automation and Control Engineering, 2013(2): 47-55.
[12] 李慧亮. 基于IEC61131-3標(biāo)準(zhǔn)的IL語言編譯器的設(shè)計(jì)與實(shí)現(xiàn)[D]. 西安:西安電子科技大學(xué),2014.
[13] 韓江,段少磊,夏鏈,等. PLC梯形圖向指令表轉(zhuǎn)化的算法研究與實(shí)現(xiàn)[J]. 組合機(jī)床與自動化加工技術(shù),2013(11):61-63
[14] 吳盼盼. 梯形圖與腳本語言互換方法的研究[D]. 杭州:杭州電子科技大學(xué),2013.
[15] 黃健. 基于ARM與FPGA的PLC及其梯形圖編程系統(tǒng)設(shè)計(jì)[D]. 廣州:華南理工大學(xué),2016.
[16] 楊觀賜,陳占杰,李少波,等. 面向智能控制的軟PLC中梯形圖的動態(tài)解析方法[J]. 貴州大學(xué)學(xué)報:自然科學(xué)版,2016,33(6):43-47.
[17] 韓兵兵. PLC梯形圖編程系統(tǒng)研究與實(shí)現(xiàn)[D].廣州: 華南理工大學(xué),2013.
[18] 吳玉香,郭建勛,周建香. 嵌入式軟PLC編程系統(tǒng)的設(shè)計(jì)[J]. 控制工程,2010,17(3):363-366.
[19] 胡飛虎,傅亮,劉樂. 基于表格技術(shù)的軟PLC梯形圖編輯軟件[J]. 微計(jì)算機(jī)信息,2009,25(19):227-229.
[20] 徐德剛,黃江波,劉育峰,等. 基于能流的梯形圖到指令表轉(zhuǎn)換方法研究[J]. 控制工程,2017,24(2):243-249.
[21] BLANCHETTE J, SUMMERFIELD M. C++GUIQt4編程[M]. 第2版. 北京:電子工業(yè)出版社,2008.
[22] 蘇淑芝. 軟PLC梯形圖編程系統(tǒng)的研究與實(shí)現(xiàn)[D]. 廣州:華南理工大學(xué),2012.
[23] SUMMERFIELD M. Qt高級編程[M]. 北京:電子工業(yè)出版社,2011.
(責(zé)任編輯:杜能鋼)