李馳骎 王庭有 李應(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)提出一種分布式存儲(chǔ)方案,實(shí)現(xiàn)梯形圖圖元之間的連接關(guān)系存儲(chǔ)?;赒T圖形框架采用面向?qū)ο蟮能浖椒▽?shí)現(xiàn)梯形圖標(biāo)準(zhǔn)圖元?jiǎng)?chuàng)建、連接關(guān)系建立、圖元?jiǎng)h除等功能。完成梯形圖編輯系統(tǒng)設(shè)計(jì)后,對(duì)圖元管理、各種指令調(diào)用進(jìn)行編輯測(cè)試,結(jié)果表明該系統(tǒng)設(shè)計(jì)方法可行。
關(guān)鍵詞:可編程控制器;梯形圖;QT;存儲(chǔ)結(jié)構(gòu);圖元管理
DOI:10. 11907/rjdk. 181943
中圖分類號(hào):TP319文獻(xiàn)標(biāo)識(shí)碼:A文章編號(hào):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編程軟件是推動(dòng)PLC發(fā)展的重要?jiǎng)恿1-2],而編輯系統(tǒng)是編程軟件中至關(guān)重要的組成部分,它負(fù)責(zé)梯形圖的輸入、編輯、顯示,各個(gè)單元的位置、符號(hào)等信息保存,決定了軟件的交互性[3]。
國(guó)外PLC發(fā)展相當(dāng)成熟,PLC編程軟件技術(shù)研究較多:Milik A[4]提出了一種多線程執(zhí)行技術(shù),利用數(shù)據(jù)流圖識(shí)別程序的并行性,完成編程語(yǔ)言的編譯;Prahofer等[5]采用程序上的模式匹配、控制流、數(shù)據(jù)流等分析方法,開(kāi)發(fā)靜態(tài)代碼分析工具;Deveza等[6]將指令表作為Matlab/Simulink翻譯軟件包的輸入,實(shí)現(xiàn)PLC在Matlab中的仿真;Kim H S等[7]采用二叉邏輯樹(shù)方法實(shí)現(xiàn)梯形圖程序的解釋;Moonga等[8-10]通過(guò)將梯形圖映射為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è)自動(dòng)化程序開(kāi)發(fā)環(huán)境。
國(guó)內(nèi)PLC編程軟件研究主要有:李慧亮等[12]使用FLEC、BISON對(duì)指令表進(jìn)行詞法分析和語(yǔ)法分析,進(jìn)一步完成了中間代碼結(jié)構(gòu)設(shè)計(jì)、目標(biāo)代碼生成器設(shè)計(jì),但文中的中間代碼結(jié)構(gòu)和目標(biāo)代碼生成器考慮過(guò)少,不具備通用性;韓江等[13]將梯形圖映射為AOV圖,建立梯形圖到以鄰接矩陣方式存儲(chǔ)的AOV圖的映射,但由于梯形圖串并聯(lián)關(guān)系的復(fù)雜性,使用該算法會(huì)導(dǎo)致轉(zhuǎn)換不穩(wěn)定;吳盼盼等[14]采用XML文件描述梯形圖圖元及其連接方式的存儲(chǔ)結(jié)構(gòu),以類C的腳本語(yǔ)言作為中間語(yǔ)言實(shí)現(xiàn)梯形圖到指令表的轉(zhuǎn)換,但存儲(chǔ)方式和轉(zhuǎn)換方式稍顯復(fù)雜,支持的指令不多;黃健[15]基于MFC實(shí)現(xiàn)圖元的數(shù)據(jù)結(jié)構(gòu)設(shè)計(jì),用分層方法存儲(chǔ)圖元位置關(guān)系;楊觀賜等[16]提出了以鏈表與雙向二維鏈表結(jié)合的梯形圖網(wǎng)絡(luò)存儲(chǔ)結(jié)構(gòu)。
本文對(duì)梯形圖編輯系統(tǒng)設(shè)計(jì)方法進(jìn)行研究。從梯形圖編程系統(tǒng)總體需求出發(fā),通過(guò)分析梯形圖的網(wǎng)絡(luò)拓?fù)浣Y(jié)構(gòu)及圖元存儲(chǔ)方案,提出拓?fù)浣Y(jié)構(gòu)及對(duì)應(yīng)的圖元存儲(chǔ)結(jié)構(gòu),采用面向?qū)ο蟮能浖椒▽?shí)現(xiàn)圖元管理功能,該方案在梯形圖網(wǎng)絡(luò)結(jié)構(gòu)上更加人性化,圖元存儲(chǔ)結(jié)構(gòu)更加簡(jiǎn)單,對(duì)編輯語(yǔ)言轉(zhuǎn)換的復(fù)雜度更低,圖元管理的各種功能更加健全。
1 系統(tǒng)總體設(shè)計(jì)
1.1 系統(tǒng)功能
編輯系統(tǒng)在整個(gè)編程軟件中起著基石作用,可細(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ī)定每個(gè)元件所占網(wǎng)格數(shù),優(yōu)點(diǎn)是圖元連接關(guān)系清晰且排版簡(jiǎn)單,但也有一些缺點(diǎn):①網(wǎng)絡(luò)空間利用率低;②圖元操作的算法時(shí)間復(fù)雜度高,串并聯(lián)關(guān)系識(shí)別較復(fù)雜,如圖2所示。
因此,本文不采用固定位置的網(wǎng)絡(luò)結(jié)構(gòu)而采用元件可以自由移動(dòng)的網(wǎng)絡(luò)拓?fù)浣Y(jié)構(gòu),這種網(wǎng)絡(luò)結(jié)構(gòu)不限制梯級(jí)中任何一個(gè)圖元位置,圖元之間的連接關(guān)系是用戶添加的,通過(guò)解析連接線唯一得到,與圖元位置沒(méi)有任何關(guān)系。刪除圖元時(shí),只刪除和該圖元直接相連的連接線,不對(duì)其余圖元及連接線做任何更新。
本文采用的網(wǎng)絡(luò)結(jié)構(gòu)以最優(yōu)方式完整呈現(xiàn)整個(gè)梯級(jí)網(wǎng)絡(luò),同時(shí)降低圖元存儲(chǔ)結(jié)構(gòu)復(fù)雜度和圖形網(wǎng)絡(luò)轉(zhuǎn)換復(fù)雜度。此外,雖然沒(méi)有網(wǎng)格會(huì)給程序編排帶來(lái)困難,但通過(guò)建立大小隨意設(shè)置的柵格可以解決問(wèn)題,元件按照柵格的設(shè)置移動(dòng),每次只移動(dòng)一格[20]。
1.3 程序結(jié)構(gòu)設(shè)計(jì)
基于面向?qū)ο蟮能浖_(kāi)發(fā)方法,本文使用Qt圖形/視圖框架搭建編輯系統(tǒng)的程序結(jié)構(gòu)。圖形/視圖框架包含圖元(QGraphicsItem)、場(chǎng)景(QGraphicsScene)、視圖(QGraphicsView)三層結(jié)構(gòu),分別具有作為場(chǎng)景圖形項(xiàng)目的基類、提供圖形/視圖場(chǎng)景管理器的容器、使場(chǎng)景中的內(nèi)容可視化功能[21]。
將IEC61131-3標(biāo)準(zhǔn)規(guī)定的梯形圖圖元抽象為圖形視圖框架中的圖元,采用繼承QGraphicsItem的方法生成不同的圖元,并通過(guò)響應(yīng)圖元的鼠標(biāo)雙擊事件完成圖元信息的修改。圖元的管理通過(guò)重寫(xiě)場(chǎng)景類QGraphicsScene實(shí)現(xiàn):響應(yīng)鼠標(biāo)的單擊事件完成圖元的連接及圖元的添加,響應(yīng)鍵盤(pán)事件刪除圖元。最后,考慮到梯形圖網(wǎng)絡(luò)中功能/功能塊的使用頻率高,增加拖拽添加功能/功能塊圖元的方式,該過(guò)程通過(guò)重寫(xiě)圖形/視圖框架中的視圖類QGraphicsView的拖放響應(yīng)函數(shù)完成。面向?qū)ο蟮能浖_(kāi)發(fā)方法將軟件系統(tǒng)中各個(gè)實(shí)體抽象為類,然后基于類的繼承、封裝、消息傳送、多態(tài)等特性構(gòu)造軟件系統(tǒng),最后設(shè)計(jì)各個(gè)實(shí)體類之間關(guān)鍵信息通信。編輯系統(tǒng)實(shí)現(xiàn)結(jié)構(gòu)如圖3所示。
2 圖元數(shù)據(jù)結(jié)構(gòu)設(shè)計(jì)
2.1 圖元存儲(chǔ)結(jié)構(gòu)設(shè)計(jì)
采用準(zhǔn)確高效的圖元存儲(chǔ)結(jié)構(gòu)是設(shè)計(jì)梯形圖編輯系統(tǒng)不可缺少的環(huán)節(jié)。目前,主流的梯形圖存儲(chǔ)結(jié)構(gòu)有雙向鏈表[22]、分層存儲(chǔ)法[23]、三級(jí)單向鏈表[24]。
根據(jù)網(wǎng)絡(luò)拓?fù)浣Y(jié)構(gòu)提出一種分布式圖元存儲(chǔ)結(jié)構(gòu),該存儲(chǔ)結(jié)構(gòu)設(shè)計(jì)如下:①每個(gè)圖元存儲(chǔ)每個(gè)輸入/輸出點(diǎn)對(duì)應(yīng)的連接線集合;②連接線存儲(chǔ)起點(diǎn)圖元及終點(diǎn)圖元。
由于梯形圖圖元管理系統(tǒng)由Qt圖形/視圖框架中的場(chǎng)景類QGraphicsScene提供,所以這種分布式存儲(chǔ)結(jié)構(gòu)僅僅需要存儲(chǔ)圖元之間的連接關(guān)系,并不需要考慮圖元本身的存儲(chǔ),從而降低了存儲(chǔ)結(jié)構(gòu)的復(fù)雜度,圖4為該存儲(chǔ)結(jié)構(gòu)的方法示例。
2.2 圖元類設(shè)計(jì)
圖元作為梯形圖網(wǎng)絡(luò)中最小的單元,是構(gòu)造梯形圖網(wǎng)絡(luò)的核心元素,但是圖元的多樣性決定了不能對(duì)每個(gè)圖元單獨(dú)設(shè)計(jì),因此本文對(duì)圖元進(jìn)行類設(shè)計(jì)。圖元類設(shè)計(jì)思路是:把圖元的通用屬性抽象成所有圖元的基類,然后按照各個(gè)圖元的不同屬性從該基類中派生出具體類,所有圖元將基于圖形/視圖框架中的圖元類QGraphicsItem生成。為使圖元支持SIGNLA/SLOT操作[25],采用繼承QGraphicsItem、QObject的多繼承方式實(shí)現(xiàn)梯形圖圖元類設(shè)計(jì),圖5是圖元類的繼承關(guān)系。
3 圖元管理
3.1 圖元?jiǎng)?chuàng)建
本文設(shè)計(jì)的圖元采用工具欄按鈕添加方式創(chuàng)建。
圖元添加工具欄屬于主程序?qū)嶓w,和梯形圖編輯框架中的圖元管理實(shí)體屬于不同的實(shí)體,故無(wú)法在對(duì)應(yīng)工具按鈕的響應(yīng)函數(shù)中生成圖元。通過(guò)工具欄按鈕添加圖元時(shí),需要將圖元的型別信息通過(guò)SIGNAL/SLOT傳遞給圖元管理實(shí)體類,型別信息的傳遞過(guò)程如圖6所示。圖6中KM_PLC為編程軟件主框架類,LD_Viewer為梯形圖編輯模塊主部件,LD_View為基于圖形/視圖框架中視圖類QGraphicsView的自定義視圖類,LD_Scene為基于圖形/視圖框架的場(chǎng)景類。
自定義圖元管理類LD_Scene通過(guò)響應(yīng)鼠標(biāo)的單擊事件完成與當(dāng)前型別信息相對(duì)應(yīng)的圖元類添加。型別信息為字符串類型,無(wú)法被new運(yùn)算符直接使用,為了保證圖元添加算法的可伸縮性,采用工廠模式(Object Factory)完成型別信息映射到對(duì)應(yīng)圖元類。本文使用map類容器完成型別信息與函數(shù)指針之間的映射關(guān)系,圖元的注冊(cè)、取消注冊(cè)、創(chuàng)建分別對(duì)應(yīng)于map容器的添加、刪除、查找。
根據(jù)上述設(shè)計(jì),要在梯形圖程序組織單元中產(chǎn)生圖形元素必須用到該工廠模式,如果每個(gè)程序組織單元都實(shí)例化一個(gè)全局的BaseItem工廠模式,程序?qū)⒖赡芤騼?nèi)存不足而被迫結(jié)束。因此,本文將工廠類封裝在Singleton模式下,在LD_Scene的構(gòu)造函數(shù)中完成圖元注冊(cè)。
3.2 圖元連接關(guān)系建立
創(chuàng)建連接關(guān)系的實(shí)質(zhì)是確定圖元之間的存儲(chǔ)關(guān)系。起始連接、結(jié)束連接信號(hào)都是從圖元中輸入(輸出)連接捕捉點(diǎn)發(fā)出的,為了區(qū)分這兩個(gè)信號(hào),設(shè)計(jì)一個(gè)公有的bool變量flag作為標(biāo)記:當(dāng)flag的值為false時(shí),發(fā)射開(kāi)始連接信號(hào);當(dāng)flag的值為true時(shí),發(fā)射結(jié)束連接信號(hào)。此外為保證正確的位置繪制連接線起點(diǎn)、終點(diǎn)且實(shí)現(xiàn)連接線起始圖元的正確存儲(chǔ),在請(qǐng)求連接/結(jié)束時(shí)需要傳遞“請(qǐng)求連接位置”及“請(qǐng)求連接捕捉點(diǎn)類型”。
3.4 圖元?jiǎng)h除
圖元?jiǎng)h除操作通過(guò)重寫(xiě)LD_Scene的鍵盤(pán)響應(yīng)事件完成(按Del建實(shí)現(xiàn)刪除)。使用場(chǎng)景類的接口函數(shù)selectItem()提取當(dāng)前所有的選中項(xiàng)目,利用運(yùn)行時(shí)類型識(shí)別(run-time type identification,RTTI)技術(shù)中的dynamic_cast判斷選中的項(xiàng)目類型。由于圖元基類的析構(gòu)函數(shù)會(huì)刪除所有與該圖元相連的連接線,所以為了避免二次刪除連接線,本文先刪除連接線再對(duì)選中的項(xiàng)目執(zhí)行delete操作。
4 軟件測(cè)試
對(duì)系統(tǒng)設(shè)計(jì)方案進(jìn)行編輯測(cè)試,對(duì)圖元管理、各種指令調(diào)用都進(jìn)行了測(cè)試,結(jié)果表明本文提出的編輯系統(tǒng)設(shè)計(jì)方法可行。圖7為梯形圖編程實(shí)例。
5 結(jié)語(yǔ)
本文基于面向?qū)ο蟮能浖_(kāi)發(fā)方法實(shí)現(xiàn)了PLC梯形圖編輯系統(tǒng)設(shè)計(jì),通過(guò)軟件測(cè)試證明該方案有良好的應(yīng)用效果,為后續(xù)功能完善的PLC編程軟件開(kāi)發(fā)打下了基礎(chǔ),是在目前國(guó)內(nèi)沒(méi)有完全自主開(kāi)發(fā)的PLC編程軟件現(xiàn)狀下的一種探索。梯形圖是PLC編程語(yǔ)言中最常用的語(yǔ)言,該編程軟件的其它模塊正在開(kāi)發(fā)中,本文的研究對(duì)推進(jìn)PLC軟件發(fā)展有著重要意義。
參考文獻(xiàn):
[1] 歐陽(yáng)三泰,周琴,歐陽(yáng)希. 軟PLC控制技術(shù)綜述[J]. 電氣傳動(dòng),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語(yǔ)言編譯器的設(shè)計(jì)與實(shí)現(xiàn)[D]. 西安:西安電子科技大學(xué),2014.
[13] 韓江,段少磊,夏鏈,等. PLC梯形圖向指令表轉(zhuǎn)化的算法研究與實(shí)現(xiàn)[J]. 組合機(jī)床與自動(dòng)化加工技術(shù),2013(11):61-63
[14] 吳盼盼. 梯形圖與腳本語(yǔ)言互換方法的研究[D]. 杭州:杭州電子科技大學(xué),2013.
[15] 黃健. 基于ARM與FPGA的PLC及其梯形圖編程系統(tǒng)設(shè)計(jì)[D]. 廣州:華南理工大學(xué),2016.
[16] 楊觀賜,陳占杰,李少波,等. 面向智能控制的軟PLC中梯形圖的動(dòng)態(tài)解析方法[J]. 貴州大學(xué)學(xué)報(bào):自然科學(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] 胡飛虎,傅亮,劉樂(lè). 基于表格技術(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高級(jí)編程[M]. 北京:電子工業(yè)出版社,2011.
(責(zé)任編輯:杜能鋼)