李應(yīng)春+王庭有+楊安園
摘要: 本文使用跨平臺的C++應(yīng)用程序開發(fā)框架(Qt)及其圖形視圖框架(The Graphics View Architecture)以及信號與槽機制,結(jié)合C++標(biāo)準(zhǔn)模板庫中的鏈表結(jié)構(gòu)、運行時類型識別等技術(shù),實現(xiàn)了PLC梯形圖編程軟件的總體框架設(shè)計;梯形圖語言的主程序、子程序、中斷程序的存儲及圖元的插入編輯操作等功能。
Abstract: This paper uses the cross-platform C++ application development framework (Qt) and its Graphics View Architecture, as well as the signal and slot mechanism, combined with the C++ standard template library linked list structure, run-time type recognition technology to achieve the PLC Ladder diagram programming software overall framework design; ladder language main program, subroutine, interrupt program storage and primitive insert editing operation and other functions.
關(guān)鍵詞: 梯形圖;Qt;存儲結(jié)構(gòu)
Key words: ladder diagram;Qt;storage structure
中圖分類號:TP313 文獻(xiàn)標(biāo)識碼:A 文章編號:1006-4311(2018)01-0185-03
0 引言
PLC作為一種工控裝備,占據(jù)了自動化控制領(lǐng)域的半壁江山。在德國提出“工業(yè)4.0”,我國部署“中國制造2025”的大環(huán)境下,自動化形式越來越嚴(yán)峻,在這樣的形式下,PLC的技術(shù)改進也就成為了一種必然的趨勢。另一方面,雖然我國是PLC的使用大國,但是就最近幾年的PLC市場份額來看,我國使用的PLC大多來自歐美和日本。國內(nèi)的PLC主要應(yīng)用在小型自動化控制系統(tǒng)中。所以綜合來看,開發(fā)具有自主知識產(chǎn)權(quán)的PLC系統(tǒng)是我國自動化產(chǎn)業(yè)發(fā)展的必然需要。
梯形圖被稱為PLC的第一編程語言,憑借其直觀易學(xué)的優(yōu)點,成為最廣泛的PLC編程語言。梯形圖采用圖形語言,沿用了繼電器的觸點、線圈、串并聯(lián)等術(shù)語與圖形符號,在計算機和控制技術(shù)上稱為“面向生產(chǎn)過程的語言”[1]。
Qt使用“一次編寫,隨處編譯”的方式為開發(fā)跨平臺的圖形用戶界面應(yīng)用程序提供了一個完整的C++應(yīng)用程序開發(fā)框架。Qt允許程序開發(fā)人員使用應(yīng)用程序的單一源碼來構(gòu)建可以運行在不同平臺下的應(yīng)用程序,這些平臺包括從Windows98到Vista、Mac OS X、Linux以及其他很多基于X11的UNIX[2]。
由于當(dāng)下工業(yè)形式的發(fā)展對工業(yè)生產(chǎn)的速度和安全提出了全新的要求,Windows系統(tǒng)在工業(yè)現(xiàn)場中的非實時性、不安全性得到了進一步暴露。所以開發(fā)跨平臺的、高效的PLC系統(tǒng)是今后PLC發(fā)展的一大趨勢。故本文基于Qt平臺實現(xiàn)的PLC梯形圖編程軟件將對開發(fā)跨平臺的PLC系統(tǒng)有著一定的貢獻(xiàn)。因為它結(jié)合了C++語言的高效性以及Qt框架的跨平臺特性充分體現(xiàn)了以上兩個PLC發(fā)展的方向。
1 梯形圖編程軟件的總體框架設(shè)計及實現(xiàn)
同任何的軟件框架相同,PLC梯形圖編程軟件的基本框架也包含了基于Qt類——QMainWindow的應(yīng)用程序主窗口。其中包含基于QMenu的菜單欄、基于QToolBar的工具欄、基于QTabWidget的中央窗口部件、基于QStatusBar的狀態(tài)欄以及基于QDockWidget的停靠窗口(軟件主要構(gòu)架如圖1所示)。中央窗口作為應(yīng)用程序的主要部分,用QTabWidget來實現(xiàn)梯形圖編程時候的主、子、中斷程序之間的相互切換。當(dāng)然,其中QTabWidget中包含的部件是基于Qt圖形視圖框架的梯形圖編輯部分。
從圖1中可以看出,中央窗口QTabWidget下面將包含三層結(jié)構(gòu):QGraphicsView、QGraphicsSecne、QGraphicsItem. 其實這就是整個圖形視圖框架的三層結(jié)構(gòu):視圖、場景、項目。其中,場景類用于提供一個用于管理位于其中的眾多圖元的容器,視圖類用于顯示場景中的圖元,一個場景可以供多個視圖來表現(xiàn)[3],場景的大小理論上來說是無限大的。圖形視圖框架的三元素關(guān)系如圖2所示。由于圖形視圖框架支持時間傳播體系結(jié)構(gòu),使得圖元能夠處理鼠標(biāo)和鍵盤事件,另一方面來說,圖形視圖框架通過二叉空間分割樹(Binary Space Partitioning,BSP)來提供圖元的快速查找。在這樣的條件下,該框架能夠處理百萬級圖元的大場景。從而可以輕松的完成梯形圖的編輯。
2 梯形圖的數(shù)據(jù)存儲結(jié)構(gòu)
在國際電工委推出了IEC61131-3標(biāo)準(zhǔn)后,基本上所有的PLC廠商都在逐漸的向這個標(biāo)準(zhǔn)靠攏。考慮到PLC梯形圖編程語言的讀寫方便性,該標(biāo)準(zhǔn)將各種程序進行必要的劃分——使用多種塊來組成整個控制程序。所以PLC編程軟件必須能對程序進行劃分處理,本文主要將控制程序劃分成主程序、子程序、終端程序三個部分。其實所有的劃分都是在另外一個存儲空間中存儲不同的梯形圖程序,他們的不同點存在于PLC梯形圖編程語言到可執(zhí)行二進制代碼的編譯過程。由于鏈表在任何位置插入和刪除的速度都比較快,所以本文用QList < QList
從圖1的主框架結(jié)構(gòu)中可以看出,中央窗口部件QTabWidget主要以選項卡的方式來呈現(xiàn)出各個程序塊。也就是說,必須在每一個選項卡中添加一個圖形視圖框架來顯示場景。但是這樣做將會使程序的內(nèi)存開支大大增加,故本文結(jié)合場景的無限大特點,將場景進行認(rèn)為的劃分。其劃分結(jié)果如圖3所示。通過以上的場景劃分,可以在同一個場景中完成所有程序快的顯示,大大節(jié)省了程序的內(nèi)存開支。
3 梯形圖編輯實現(xiàn)
在梯形圖編程語言中,為了讓程序的可讀性增強。一般將梯形圖程序劃分成多個程序段組成。在本文的設(shè)計中,一個程序段由以下4部分組成:程序段序號區(qū)、程序注釋、程序段、左母線、分割線。在Qt的圖形視圖框架下,重寫QGraphicsObject來實現(xiàn)程序段。同時采用C++的多態(tài)特性結(jié)合QPainter來重寫梯形圖語言的常開觸點、觸閉觸點、定時器等圖元.其繼承關(guān)系如圖4所示。
從圖中可以看出,程序段中的所有元素都繼承自QGraphicsItem。結(jié)合C++的RTTI(運行時類型識別),就可以把所有的程序段存入以QGraphicsItem為元素的鏈表結(jié)構(gòu)中(即QList
4 總結(jié)
本文以C++語言為基礎(chǔ),結(jié)合Qt跨平臺應(yīng)用程序框架,主要應(yīng)用Qt圖形視圖框架以及C++語言的運行時動態(tài)類型識別等技術(shù),實現(xiàn)了PLC梯形圖編程軟件的框架設(shè)計以及程序編輯的基本功能。經(jīng)過測試,此軟件可以運行在Linux和Windows平臺上,對于今后開發(fā)跨平臺的PLC應(yīng)用程序有一點的貢獻(xiàn)作用。
參考文獻(xiàn):
[1]蒲志新,熊永超,熊曉紅.PLC梯形圖語言編輯功能的軟件實現(xiàn)[J].機械,2003,30.
[2]Blanchette H,Summerfield M.C++ Programming with Qt4[M].New York:Prentice Hall,2008:6.
[3]陸文周.Qt5開發(fā)及實例[M].北京:電子工業(yè)出版社,2015,205.
[4]姜琳.基于單片機的 PLC 設(shè)計與實現(xiàn)[D].東南大學(xué),2008.
[5]李洪亮.基于IEC 61131-3 標(biāo)準(zhǔn)的 PLC 仿真系統(tǒng)的研究與設(shè)計[D].山東大學(xué),2010.
[6]朱兆斌.嵌入式數(shù)控系統(tǒng)軟 PLC 模塊的研究與實現(xiàn)[D].南京航空航天大學(xué),2009.
[7]吳盼盼.梯形圖與腳本語言互換方法的研究[D].杭州電子科技大學(xué),2013.
[8]萬偉.PLC編程語言開發(fā)平臺的設(shè)計[D].武漢理工大學(xué),2007.