1 引言
PLC作為工業(yè)控制系統(tǒng)的重要組成部分,是現(xiàn)代工業(yè)自動(dòng)化的重要支柱。2006年,國務(wù)院在發(fā)布的《國家中長期科學(xué)和技術(shù)發(fā)展規(guī)劃綱要(2006-2020年)》中提出建設(shè)“核高基”重大科技專項(xiàng),2015年又提出“中國制造2025”。在此背景下,國產(chǎn)化、自主化已經(jīng)成為PLC市場發(fā)展的重要趨勢(shì)。QT開發(fā)框架因其出色的跨平臺(tái)性和代碼開源的特點(diǎn),成為開發(fā)自主可控軟件的優(yōu)良選擇。
IEC 61131-3是旨在規(guī)范可編程控制器(Programmable Logic Controller,簡稱PLC)編程語言的國際標(biāo)準(zhǔn),經(jīng)過十多年的發(fā)展和完善,已被廣大PLC使用者和生產(chǎn)廠商所認(rèn)可和支持[1]。它是國際電工委員會(huì)(IEC)定義的PLC編程系統(tǒng)規(guī)范,也是工業(yè)控制領(lǐng)域的通用標(biāo)準(zhǔn)。梯形圖(Ladder Diagram, LD)被稱為PLC的第一編程語言,憑借其直觀易學(xué)的優(yōu)點(diǎn),成為最廣泛的編程語言[2]。它作為IEC 61131-3規(guī)定的PLC編程語言之一,沿襲自繼電器控制電路的術(shù)語和符號(hào),具有形象、實(shí)用等特點(diǎn),被稱為是“面向生產(chǎn)過程的編程語言”。
和利時(shí)推出的新一代自主可控編程軟件平臺(tái)AutoThink V4提供了對(duì)梯形圖語言的編程支持,完整的LD編程組態(tài)支持包括前端的編輯和管理,以及后端的編譯和執(zhí)行。本文主要介紹LD前端編輯器的設(shè)計(jì)和實(shí)現(xiàn)。
2 QT下圖形視圖框架的介紹
2.1 框架組成
圖形視圖框架(The Graphic View Framework)是QT中基于MVC(Model View Controller)的軟件設(shè)計(jì)模型開發(fā)出來的一個(gè)圖元管理與交互平臺(tái)。圖1為框架的結(jié)構(gòu)圖,它由三部分組成:
(1)場景(QGraphicsScene)
場景是圖元對(duì)象存儲(chǔ)和管理的容器,也是圖元存在的邏輯場所,我們創(chuàng)建的圖元只有添加到場景中才能進(jìn)行顯示和操作。
(2)視圖(QGraphicsView)
視圖是整個(gè)框架的對(duì)外交互接口,負(fù)責(zé)將場景中特定區(qū)域的內(nèi)容顯示出來。在實(shí)際使用中,可以對(duì)一個(gè)場景只添加一個(gè)視圖,也可以將多個(gè)視圖附加到同一個(gè)場景來顯示其不同區(qū)域或不同縮放旋轉(zhuǎn)變換下的狀況。
(3)圖元(QGraphicsItem)
圖元是場景中的最基本元件,單個(gè)圖元支持各種事件響應(yīng),多個(gè)圖元之間可以生成父子組合等層級(jí)關(guān)系。
圖1 圖形視圖框架結(jié)構(gòu)
2.2 框架特點(diǎn)
(1)圖元管理
QT圖形視圖架構(gòu)使用了BSP(二叉空間分割樹)的數(shù)據(jù)結(jié)構(gòu)來組織和管理其中的圖元,能夠支持大場景下百萬數(shù)量級(jí)別的2D圖元的快速查找、排序以及實(shí)時(shí)顯示。
(2)坐標(biāo)系統(tǒng)
圖形視圖框架中存在三個(gè)坐標(biāo)系統(tǒng):場景坐標(biāo)、視圖坐標(biāo)及圖元坐標(biāo),每個(gè)系統(tǒng)都以自己的中心點(diǎn)為原點(diǎn)分別管理自己的坐標(biāo),三套系統(tǒng)之間使用映射來進(jìn)行坐標(biāo)轉(zhuǎn)換。
(3)圖形渲染
框架設(shè)計(jì)的坐標(biāo)系統(tǒng)使每個(gè)圖元僅需負(fù)責(zé)自己的圖形渲染,圖形視圖框架基于仿射矩陣變換的運(yùn)算處理能夠快速響應(yīng)縮放、旋轉(zhuǎn)等高級(jí)渲染需求。
除此之外,框架支持圖元間的z-order深度排序、碰撞檢測(cè),以及動(dòng)畫、OpenGL等高級(jí)應(yīng)用,便于之后的高級(jí)應(yīng)用擴(kuò)展 。
(4)事件處理
圖形視圖框架中包含一套事件傳播架構(gòu),支持對(duì)場景中圖元進(jìn)行雙精度的精確交互[3] 。
3 LD編輯器在AutoThink V4組態(tài)軟件中的功能
AutoThink V4是和利時(shí)研發(fā)的自主可控可編程控制系統(tǒng)的上位機(jī)軟件,它作為系統(tǒng)中的控制算法組態(tài)工具,運(yùn)行于工程師站中,技術(shù)人員通過它來進(jìn)行現(xiàn)場工程的邏輯設(shè)備組態(tài)。AutoThink V4基于QT環(huán)境進(jìn)行開發(fā),整體模塊結(jié)構(gòu)如圖2所示,其中框架管理和變量管理主要負(fù)責(zé)軟件的UI展示與人機(jī)交互,IEC組態(tài)與硬件配置負(fù)責(zé)編程語言與硬件模塊及協(xié)議的組態(tài),數(shù)據(jù)源通過組態(tài)、語法分析、指令翻譯等一系列處理,經(jīng)過編譯生成二進(jìn)制形式的目標(biāo)文件,最終通過在線模塊下發(fā)給PLC下位機(jī)執(zhí)行指令。
LD組態(tài)模塊是IEC組態(tài)部分的子模塊,分為前端編輯器及后端邏輯轉(zhuǎn)換與處理兩部分。梯形圖編輯器負(fù)責(zé)梯形圖中元件的創(chuàng)建、刪除、選中、繪制、語法檢查等管理操作,編輯器中的組態(tài)數(shù)據(jù)經(jīng)過語法檢查無誤后,將被LD后端轉(zhuǎn)換為一種預(yù)定好的中間語法結(jié)構(gòu)傳遞給編譯模塊進(jìn)行處理,生成目標(biāo)文件下裝到硬件設(shè)備端,并在在線監(jiān)控狀態(tài)下通過編輯器進(jìn)行調(diào)試。
圖2 AutoThink V4模塊結(jié)構(gòu)圖
4 基于QT圖形視圖框架的梯形圖編輯器的設(shè)計(jì)
4.1 梯形圖編輯器的模塊結(jié)構(gòu)
本文實(shí)現(xiàn)的梯形圖編輯器模塊結(jié)構(gòu)如圖3所示,它基于QT的圖形視圖框架,采用三層結(jié)構(gòu)。編輯器分別從QGraphicsView、QGraphicsScene、QGraphicsItem繼承并實(shí)現(xiàn)自己的視圖、場景和各元件類。
圖3 梯形圖編輯器的模塊功能圖
視圖類中放開了鼠標(biāo)鍵盤及拖拽等消息的接收,并在其中通過右鍵菜單響應(yīng)創(chuàng)建圖元管理的交互接口。圖元管理與邏輯信息存儲(chǔ)在場景類中完成,視圖類中的右鍵菜單響應(yīng)與場景類通過“信號(hào)/槽”機(jī)制進(jìn)行連接,當(dāng)鼠標(biāo)點(diǎn)擊右鍵菜單中的命令時(shí),視圖類發(fā)出信號(hào),場景類接收到該信號(hào)開始進(jìn)行元件的創(chuàng)建、刪除、復(fù)制粘貼等的操作。為了實(shí)現(xiàn)圖元的撤銷恢復(fù)編輯動(dòng)作,場景類中設(shè)計(jì)了兩個(gè)棧結(jié)構(gòu)用于存儲(chǔ)撤銷與恢復(fù)的元件指針??紤]到場景關(guān)閉及打開時(shí)的內(nèi)容保存與重建,場景類還繼承了QObject,以實(shí)現(xiàn)對(duì)數(shù)據(jù)的序列化操作。本文實(shí)現(xiàn)了IEC61131-3規(guī)定的所有梯形圖元件,為了便于元素的管理和組織,還創(chuàng)建了一組抽象的邏輯元件用于表示不同元件之間的連接關(guān)系,元件之間可以存在父子包含關(guān)系,并以樹形結(jié)構(gòu)向下擴(kuò)展直至到達(dá)終端的葉子節(jié)點(diǎn)元件,當(dāng)父元件被刪除的時(shí)候,它將會(huì)遍歷刪除所有的子元件之后再釋放自身資源。除了繼承自QGraphicsItem,本文還為所有的梯形圖元件定義了一個(gè)基類CElement,用于記錄其工程所要用到的其他基本特性。
使用這種三層架構(gòu)很好地將數(shù)據(jù)的處理與表示進(jìn)行分離,為數(shù)據(jù)的組織管理提供了統(tǒng)一的接口,便于分層管理和降低耦合,簡化開發(fā)過程難度,提高開發(fā)效率。
4.2 主要接口封裝
本文實(shí)現(xiàn)的梯形圖編輯器,主要針對(duì)以下方面進(jìn)行了接口的二次封裝:
(1)鼠標(biāo)鍵盤消息響應(yīng)
在視圖、場景和圖元中均重載了keyPressEvent及mousePressEvent函數(shù),用于實(shí)現(xiàn)元件在離線狀態(tài)的選中判斷及快捷鍵等的響應(yīng)。
(2)圖元繪制渲染
因?yàn)閳D形視圖框架特有的坐標(biāo)系統(tǒng),編輯器中場景和視圖類并不負(fù)責(zé)整體圖形的繪制,而是由每個(gè)元件單獨(dú)處理自己的圖元渲染。圖元在繪制時(shí)將以局部坐標(biāo)系作為參考,以自身包圍盒范圍為限定進(jìn)行圖形的渲染處理。因此,本文中所有的可見節(jié)點(diǎn)元件都重載了paint和boundingRect函數(shù),用于實(shí)現(xiàn)選中、離線、在線等不同狀況下的圖元顯示。
(3)拖拽動(dòng)作響應(yīng)
梯形圖編輯器中需要經(jīng)常添加自定義或庫中的函數(shù)和功能塊,為了使用方便,需要實(shí)現(xiàn)拖拽添加函數(shù)塊和功能塊。因此,在場景、視圖和元件類中都分別重載了拖拽系列的函數(shù)dragEnterEvent、dragMoveEvent和dropEvent,同時(shí),圖元中調(diào)用setAcceptDrops函數(shù)允許接收拖拽事件。
4.3 事件傳遞
圖4顯示了梯形圖編輯器中的事件傳遞流程,視圖類接收來自鼠標(biāo)鍵盤等外部設(shè)備事件或其他視圖的拖拽事件,然后將事件傳遞給場景類,場景類是整個(gè)事件傳播的中間層,負(fù)責(zé)將接收到的事件封裝后再次傳遞給對(duì)應(yīng)的元件,并在傳遞的過程中將自動(dòng)對(duì)事件包含的坐標(biāo)進(jìn)行映射轉(zhuǎn)換。如果一個(gè)事件在場景中進(jìn)行了阻塞,那么對(duì)應(yīng)位置的元件將不會(huì)再接收到事件。
圖4 梯形圖編輯器中的事件傳遞流程
4.4 實(shí)現(xiàn)效果
圖5為AutoThink V4實(shí)際運(yùn)行時(shí)的梯形圖編輯器效果圖,該編輯器支持梯形圖中不同元件的管理操作,支持離線和在線狀態(tài)下的圖形繪制,并能正確處理各種事件的響應(yīng),滿足梯形圖組態(tài)編程的前端需求。
圖5 梯形圖編輯器的實(shí)際應(yīng)用效果圖
5 結(jié)論
本文基于QT中的圖形視圖框架設(shè)計(jì)了一種支持IEC 61131-3標(biāo)準(zhǔn)的梯形圖編輯器,并已成功添加到和利時(shí)AutoThink V4自主可控PLC編程軟件中。該編輯器使用方便、直觀,能夠?qū)μ菪螆D程序進(jìn)行邏輯組態(tài),滿足工程現(xiàn)場的使用需求。
作者簡介
吳錦雯(1982-),女,碩士,工程師,就職于北京和利時(shí)智能技術(shù)有限公司,主要研究方向?yàn)镻LC技術(shù)、上位機(jī)軟件。
參考文獻(xiàn):
[1] 張海偉. 和利時(shí)IEC 61131-3編程軟件平臺(tái)[J]. 自動(dòng)化博覽, 2016, (6) : 42 - 44.
[2] 陳雪, 劉蔭忠, 徐恩松. 基于Qt的軟PLC梯形圖編輯軟件的設(shè)計(jì)與實(shí)現(xiàn)[J]. 計(jì)算機(jī)系統(tǒng)應(yīng)用, 2011, 20(12): 64 - 69.
[3] Graphics View Framework. https://doc.qt.io/archives/qt-4.8/graphicsview.html.