劉思洋
摘 要:主要介紹了工業(yè)控制組態(tài)軟件開發(fā)環(huán)境中圖元類的設(shè)計思想,結(jié)合實時數(shù)據(jù)庫應(yīng)用,并利用QT集成開發(fā)工具及C++面向?qū)ο蟮奶匦?,給出了在Linux平臺下組態(tài)人機界面中圖元類的一種設(shè)計實現(xiàn)方法,實現(xiàn)了圖元控件的封裝性、獨立性和可重用性。
關(guān)鍵詞:組態(tài)軟件;圖元設(shè)計;組態(tài)動畫;Linux
中圖分類號:TP316 文獻標(biāo)識碼:A 文章編號:2095-1302(2015)03-00-03
0 引 言
隨著工業(yè)控制自動化水平的不斷提高,計算機應(yīng)用技術(shù)在工業(yè)控制領(lǐng)域的應(yīng)用也越來越廣泛。其中,組態(tài)軟件是用于管理、控制和監(jiān)控工業(yè)生產(chǎn)現(xiàn)場的軟件平臺,主要是指控制數(shù)據(jù)采集與生產(chǎn)過程監(jiān)控的專用軟件。組態(tài)軟件解決了以前在控制系統(tǒng)中的復(fù)雜流程設(shè)計、以及數(shù)據(jù)采集等功能需要依靠復(fù)雜編程來實現(xiàn)的問題。它可以為工程人員提供使用靈活的組態(tài)開發(fā)方式和運行環(huán)境,在工業(yè)控制系統(tǒng)中同時進行工業(yè)現(xiàn)場實時數(shù)據(jù)的采集處理和存儲,數(shù)據(jù)趨勢顯示、圖形動畫展示、報表、實時報警顯示等多種任務(wù)。并且能夠提供數(shù)據(jù)安全訪問機制,可以采用基于角色的多級關(guān)系安全訪問控制對實時數(shù)據(jù)庫進行操作,防止未授權(quán)用戶修改或刪除工業(yè)控制現(xiàn)場的有效數(shù)據(jù),避免非法訪問系統(tǒng)而造成工業(yè)生產(chǎn)事故和損失。
工業(yè)控制應(yīng)用的硬件平臺種類繁多,硬件平臺上的軟件系統(tǒng)需要有良好的可移植性。Linux操作系統(tǒng)是基于Unix設(shè)計理念發(fā)展出來的操作系統(tǒng),其系統(tǒng)源代碼是開源的。雖然目前存在很多不同的Linux,但它們都使用了Linux內(nèi)核并且具有廣泛的硬件支持,可以安裝在各種計算機硬件設(shè)備中,如臺式計算機,大型機、手機、平板電腦、路由器等,因此非常適合于工業(yè)控制領(lǐng)域。Linux內(nèi)核功能全面,具備網(wǎng)絡(luò)管理、網(wǎng)絡(luò)服務(wù)等方面的功能,可使用戶很方便地建立高效穩(wěn)定的通信,非常適用于工業(yè)控制領(lǐng)域自動化中的設(shè)備通信需求。其系統(tǒng)設(shè)計模塊化程度高,代碼的開源性也為用戶提供了很高的自由度,對于工業(yè)控制領(lǐng)域中多樣的需求,開發(fā)者可以根據(jù)個性化需求而有針對性的對操作系統(tǒng)源代碼進行修改和優(yōu)化,綜合各方面優(yōu)勢,使得Linux操作系統(tǒng)能夠在工業(yè)控制領(lǐng)域取得廣泛的使用。
1 組態(tài)介紹,結(jié)構(gòu)
組態(tài)軟件系統(tǒng)需要適用于工業(yè)控制現(xiàn)場管理,其結(jié)構(gòu)主要是由組態(tài)開發(fā)模塊,用戶界面運行模塊,實時數(shù)據(jù)庫系統(tǒng),通信模塊以及I/O驅(qū)動模塊等組件組成,結(jié)構(gòu)框圖如圖1所示。其中,用戶圖形界面系統(tǒng)將直觀的展示系統(tǒng)運行狀態(tài),是最直觀,與用戶交互也最直接的主要模塊。
圖1 組態(tài)軟件主要架構(gòu)
從用戶使用的角度來看,組態(tài)軟件一般由開發(fā)環(huán)境和運行環(huán)境組成。工程人員在開發(fā)環(huán)境下,根據(jù)不同的工業(yè)現(xiàn)場設(shè)計需求,進行個性化的組態(tài)和配置,進入運行系統(tǒng)后,將已經(jīng)設(shè)計好的組態(tài)程序進行運行,圖形界面運行系統(tǒng)通過通信模塊與實時數(shù)據(jù)庫通信,數(shù)據(jù)庫通過I/O通信模塊采集現(xiàn)場設(shè)備數(shù)據(jù)并進行處理。一方面,實時數(shù)據(jù)庫通過IO通信模塊獲取工業(yè)現(xiàn)場產(chǎn)生的實時生產(chǎn)數(shù)據(jù),經(jīng)過數(shù)據(jù)庫處理后傳送回組態(tài)運行界面,組態(tài)運行系統(tǒng)能夠以圖形或數(shù)據(jù)直觀展示工業(yè)現(xiàn)場的生產(chǎn)情況,能夠進行報警處理,顯示趨勢曲線等多種方式向用戶提供工業(yè)控制解決方案。另一方面,用戶也可以通過修改運行環(huán)境中的圖形元素和參數(shù)配置,通過通信接口向圖元對應(yīng)的工控現(xiàn)場設(shè)備發(fā)送指令。組態(tài)軟件就可以使用戶能夠以直觀簡潔、便于操作的方式管理和監(jiān)控工業(yè)現(xiàn)場的生產(chǎn)情況和相關(guān)數(shù)據(jù)。
組態(tài)軟件系統(tǒng)采用Qt/E集成開發(fā)工具進行設(shè)計開發(fā)。Qt/E最初由奇趣科技開發(fā),后來為諾基亞公司收購,是一個跨平臺的C++應(yīng)用程序以及UI開發(fā)框架。它支持Linux操作系統(tǒng),具有跨平臺的優(yōu)勢,同時,也支持其他常見的如Windows操作系統(tǒng),真正實現(xiàn)了一次開發(fā)而跨平臺運行的目標(biāo)。
Qt提供的信號和槽(Signal/Slot)機制是其核心特征機制之一。它可以讓編程人員把一些互不了解的對象綁定在一起,用于對象之間的通信,槽可以和信號連接在一起,每當(dāng)發(fā)射信號時,就會自動調(diào)用槽函數(shù)。它和普通C++成員函數(shù)幾乎是一樣的,可以是虛函數(shù),可以被重載,可以是共有的、保護的或者私有的,并且也可以被其他C++函數(shù)直接調(diào)用,參數(shù)也可以是任意類型。而且,編程人員在開發(fā)時可以設(shè)計自己的信號和槽,將信號聯(lián)系到某個槽上,則槽會在正確的時間,以正確的信號參數(shù)被調(diào)用。
Qt具有完備的圖形開發(fā)工具,提供了雙緩沖機制,能夠把一個窗口部件渲染到一個脫屏QPixmap中,然后再把這個QPixmap復(fù)制到顯示屏幕上。因此,用于組態(tài)圖形運行系統(tǒng)中就能夠消除屏幕的閃爍,更好地支持組態(tài)運行系統(tǒng)中圖形界面的操作和展示,因此QT集成開發(fā)環(huán)境非常適用于組態(tài)軟件的開發(fā)目標(biāo)。
2 組態(tài)圖形運行系統(tǒng)的設(shè)計
組態(tài)軟件中,構(gòu)成工業(yè)控制現(xiàn)場的圖形界面由各個簡單的圖元對象組成,它們是組態(tài)運行畫面的基礎(chǔ)單元,也是動畫功能的基本元素,主要分為基本圖元和動態(tài)圖元兩類。每個圖元擁有影響和決定其外觀展示的各種屬性,用戶通過配置不同的屬性值,在進入運行系統(tǒng)后將體現(xiàn)為不同形式的外觀展示。Qt的視圖框架中包括QGraphicsView,QGraphicsScene, QGraphicsItem和Qpainter,能夠提供給用戶開發(fā)圖形界面所需的必要元素,并且使用C++高級編程語言,支持面向?qū)ο箝_發(fā)。能夠進行圖元的圖形展示,可以繪制從簡單的直線到復(fù)雜的和弦曲線等形狀和動畫效果。
從Qt 4.2開始引入的QGraphicsView框架用來取代Qt 3中的Canvas模塊,并在很多地方進行了改進,QGraphicsView能夠管理大量圖元,支持如碰撞檢測、坐標(biāo)變換等功能。QGraphicsView中的圖元能夠處理鍵盤事件、鼠標(biāo)事件,包括鼠標(biāo)按下,移動,釋放,雙擊事件,能夠跟蹤鼠標(biāo)移動。在QGraphicsView框架中,通過二元空間劃分樹提供了快速的圖元查找,這樣就能夠?qū)崟r地顯示大場景??蚣苤邪齻€主要的類,分別是QGraphicsView,QGraphicsScene, QGraphicsItem,依次分別是視圖,場景和圖元。
QGraphicsItem是在一個QGraphicsScene中最基本的圖形類,它是在QGraphicsScene 中繪制的各個圖形的項的基類,類中包括聲明圖形項的位置,進行碰撞檢測,繪制的重載和進行各個項之間的相互作用的事件處理等屬性。
Qgraphicsscene進行場景的展示,包含許多不同的項。場景(以及它的項)在視圖中顯示,這樣用戶就可以看到了。QGraphicsView提供一個顯示QGraphicsScene內(nèi)容的窗口,可以在構(gòu)造時候把場景對象作為參數(shù),或者之后使用setScene()來設(shè)置View的場景,然后調(diào)用show()函數(shù)后,view就可以默認(rèn)的在場景的中心進行圖形界面的顯示。
2.1 簡單靜態(tài)圖元
圖形運行系統(tǒng)簡單的靜態(tài)圖元,例如直線、圓形、多邊形等,在繪制此類圖形時,需要用到QPainter類,自定義圖元類繼承QWidget類并重載paintEvent ( QPaintEvent * )方法,可以在派生的圖元類中重新實現(xiàn)繪圖事件。
由于不同圖元要求圖形有不同形狀,大小和顏色等,需要重寫其paint函數(shù),對圖元類的屬性值進行賦值,畫出期望的圖形形狀和顏色,以矩形圖元為例:
class MyRect: public QGraphicsObject{
public:
MyRect( );
QRectF boundingRect() const;
void paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget);
};
重寫paint函數(shù),對不同屬性進行賦值,在函數(shù)定義中實現(xiàn)圖像的繪制。
void MyRect::paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget){
Q_UNUSED(option);
Q_UNUSED(widget);
painter->setPen(QPen(Qt::black,2));
painter->setBrush(QColor(255,80,60));
painter->drawRect(-50,-50,50,20);
}
即可構(gòu)造出自定義大小/形狀和顏色的平面矩形形狀。其他簡單圖形例如圓形、直線、多邊形等,都可以使用類似的方法進行定義和重寫,就可以設(shè)計畫出不同的簡單圖形元素。
2.2 動態(tài)圖元的設(shè)計實現(xiàn)
系統(tǒng)中的動態(tài)運行圖元類能夠靈活而直觀的顯示工業(yè)現(xiàn)場運行狀態(tài),每一個動態(tài)的控件有獨立的數(shù)據(jù)源,因而有特定的動畫功能和效果。以動態(tài)圖形水管流動的圖元為例,可以使用QT/E中QGraphicsDropShadowEffect 類并設(shè)置數(shù)據(jù)范圍使得管道流水具有陰影效果,并且將圖元項添加到動畫組QParallelAnimationGroup中,則動態(tài)圖元類型具有陰影動畫效果,以水管WaterPipe類為例,實現(xiàn)代碼如下:
WaterPipe::WaterPipe(QGraphicsItem *parent)
: WaterPipePart(parent)
{
//setFlag(ItemHasNoContents);
QGraphicsDropShadowEffect *effect = new QGraphicsDropShadowEffect;
effect->setBlurRadius(1);
this->setGraphicsEffect(effect);
QGraphicsObject *flowItem = new Flow(this);
QGraphicsObject *pipeItem = new Pipe(this);
pipeItem->setPos(0,20);
flowItem->setPos(20,21);
QParallelAnimationGroup *animation = new QParallelAnimationGroup(this);
QPropertyAnimation *flowAnimation = new QPropertyAnimation(flowItem, “pos”);
flowAnimation->setStartValue(QPointF(63,0));
flowAnimation->setEndValue(QPointF(117,0));
animation->addAnimation(flowAnimation);
animation->setLoopCount(-1);
animation->start();
}
在視圖QGraphicsView中添加包含有WaterPipe類型圖元項的QGraphicsScene場景,進行初始化和調(diào)用顯示函數(shù)后,在圖形界面運行系統(tǒng)中便會顯示出水管動態(tài)流動的畫面效果,因此,對于類似的具有動態(tài)畫面效果的圖元類型,可以采用上述方法設(shè)計實現(xiàn),并能夠在Linux平臺系統(tǒng)中得到良好應(yīng)用。
3 結(jié) 語
本文采用在Linux系統(tǒng)下Qt/E進行開發(fā)設(shè)計,解決了組態(tài)圖形界面中的簡單圖元設(shè)計和實現(xiàn)的問題,提出了采用面向?qū)ο笤O(shè)計思想,對不同的靜態(tài)和動態(tài)圖元控件類的設(shè)計開發(fā)和研究。隨著工業(yè)自動化的發(fā)展和控制系統(tǒng)的規(guī)模不斷增大,使得組態(tài)軟件的功能需求日漸增多,系統(tǒng)變得更加復(fù)雜。由于組態(tài)軟件系統(tǒng)整體的復(fù)雜性,組態(tài)軟件系統(tǒng)中各個模塊之間的交互以及運行展示仍需要根據(jù)實際應(yīng)用中的不同需求、不同情況進行不斷的優(yōu)化和完善。
參考文獻
[1]王亞青,陳青,劉暢生,等. 組態(tài)軟件設(shè)計與開發(fā)[M]. 西安:西安電子科技大學(xué)出版社,2003.
[2]李冬梅. 基于Qt的組態(tài)軟件的設(shè)計與開發(fā)[D].大連:大連理工大學(xué),2012.
[3]段鵬,金敏. 嵌入式Linux組態(tài)軟件圖形界面設(shè)計實現(xiàn)[J].微計算機信息,2008(5):47-48.
[4]譚曉鵬. 工業(yè)控制中嵌入式組態(tài)的研究[D]. 成都:電子科技大學(xué),2008.
[5]安吉宇. 基于Qt的Linux組態(tài)軟件研究與開發(fā)[J]. 電子器件,2006(2):29-35.