趙保學(xué) 汪琴琴
[摘要]設(shè)計一種基于Qt Graphics View的組態(tài)仿真框架。按照Graphics View模塊化的設(shè)計思路,首先介紹其每個模塊的特性,并在此基礎(chǔ)上提出組態(tài)仿真的設(shè)計要素。最后提出控制策略和數(shù)據(jù)庫的設(shè)計思路。
[關(guān)鍵詞]Qt Graphics View 組態(tài) 仿真 控制策略
中圖分類號:TP3文獻標(biāo)識碼:A文章編號:1671-7597(2009)0320043-01
一、引言
隨著信息技術(shù)和自動化技術(shù)的飛速發(fā)展,可視化組態(tài)軟件系統(tǒng)在工程設(shè)計、地形勘測、游戲開發(fā)等諸多領(lǐng)域都有著廣泛的應(yīng)用。開發(fā)一款控制算法高效、功能完善且具有靈活擴展性的組態(tài)仿真軟件可能是一項十分復(fù)雜的工作,但優(yōu)秀的軟件框架無疑是至關(guān)重要的。
Qt是一套優(yōu)秀的跨平臺應(yīng)用程序開發(fā)包,自4.2版本開始引入的Graphics View框架對于開發(fā)者有很大的吸引力。Graphics View提供基于圖元的模型視圖設(shè)計方式,具備完善的圖元管理、碰撞檢測、外部事件處理及坐標(biāo)變換等功能。Graphics View包含三個主要模塊,它們分別是場景(Scene)、視圖(View)和圖元(Item)。下文將從模塊的角度,利用Graphics View設(shè)計一個通用的組態(tài)仿真框架。
二、視圖模塊
Graphics View的視圖模塊提供了場景的載體,其實現(xiàn)類為QGraphicsView, 該類繼承自QAbstractScrollArea,是一個可滾動的窗口組件。在設(shè)計過程中,可以直接利用QGraphicsView的子類作為軟件的頂層組件,更常用的方法是將其作為QMainWindow的中心部件,這樣可以充分利用QMainWindow的菜單欄和工具欄實現(xiàn)功能的統(tǒng)一化布局和管理。
視口的幾何變換功能可以在該模塊完成。QGraphicsView類提供了統(tǒng)一的視口變換方法setMatrix,從而將旋轉(zhuǎn)、縮放、平移、仿射等變換統(tǒng)一為矩陣變換。值得注意的是,矩陣變換僅改變場景的顯示效果,并不影響實際的圖元數(shù)據(jù)。所有這些功能可以轉(zhuǎn)化成為模塊的接口,通過信號槽機制連接用戶界面,響應(yīng)用戶操作。
三、場景模塊
Graphics View的場景模塊主要由QGraphicsScene類來實現(xiàn)。繪圖場景模塊位于整個組態(tài)仿真框架的中間層次:外層有可視化模塊QGraphicsView的支持,同時場景也管理著框架最內(nèi)層次的圖元模塊、控制著圖元的幾何變換和渲染、重繪、設(shè)置字體和顏色等變換。利用場景可以實現(xiàn)對大量不同類型圖元的系統(tǒng)方便的管理。
在仿真框架中,我們將控制邏輯加入到該模塊,使其具有控制器的功能。根據(jù)軟件的具體需求不同,該模塊可能執(zhí)行不同的操作,一般分為以下幾類:1.響應(yīng)各種鼠標(biāo)和鍵盤事件,實現(xiàn)對圖元的編輯功能;2.響應(yīng)圖元狀態(tài)改變的事件(包括圖元焦點事件、位置改變事件、文字插入事件等);3.通過控制邏輯執(zhí)行相應(yīng)的圖元處理,并將處理結(jié)果反饋給視圖模塊和相應(yīng)的圖元;4.通過事件廣播機制管理場景內(nèi)各種類型圖元的屬性。
場景模塊中的控制邏輯部分用來定義應(yīng)用程序在整個場景和圖元之上的行為。場景從視圖模塊獲得用戶命令,然后傳送給控制邏輯執(zhí)行,對圖元進行相應(yīng)的處理。最后場景模塊更新圖元數(shù)據(jù),并將更新通知給視圖模塊。實現(xiàn)了三個模塊的同步更新。對于控制邏輯的管理可采用策略模式(Strategy Pattern)進行:定義統(tǒng)一的接口,不同的控制算法以不同的方式實現(xiàn)此接口。
四、圖元模塊
Graphics View框架中的圖元是軟件中需要管理和編輯的對象。基類QGraphicsItem定義了所有圖元類型的共同屬性和方法,另外,框架也提供了最常用的幾種標(biāo)準圖元,如矩形圖元(RectItem)、文本圖元(TextItem)、位圖圖元(PixmapItem)等。在框架的設(shè)計過程中,我們可以根據(jù)需求繼承QGraphicsItem,實現(xiàn)自己的圖元類型。在實際應(yīng)用中,我們常常需要在同一場景中建立大量不同類型的圖元對象,對它們的統(tǒng)一管理也可使用策略模式。QGraphicsItem的接口type()可進行圖元類型統(tǒng)一識別。
考慮到實際應(yīng)用中眾多的模塊類別及數(shù)據(jù)流格式,對于圖形化組態(tài)仿真來說,關(guān)鍵是如何建立起反映實際拓撲結(jié)構(gòu)的模塊和流程。Graphics View中的圖元具有碰撞檢測、外部事件響應(yīng)及相互之間的邏輯關(guān)聯(lián)、定向信息傳遞等特性,利用這些特性可以很容易地實現(xiàn)組態(tài)仿真軟件中的數(shù)據(jù)流動、信息反饋、實時監(jiān)控等業(yè)務(wù)邏輯。例如,用戶可以根據(jù)連線的源圖元和目的圖元類型及連線方向很容易地判斷出相關(guān)業(yè)務(wù)信息。另外,QGraphicsScene通過二叉搜索算法進行圖元查找,大大提高了搜索效率,對于業(yè)務(wù)邏輯非常復(fù)雜、模塊眾多的仿真仍能夠做到很高的實時性。
五、控制策略
組態(tài)仿真重要的是做到準確、實時地模擬實際系統(tǒng),在模擬的過程中,控制策略起著關(guān)鍵作用。本文涉及的控制策略主要包含兩個部分:場景的控制和單個圖元的控制。場景的控制即系統(tǒng)全局狀態(tài)的控制由場景模塊的控制邏輯部分來完成,而單個圖元的控制通過圖元對象自身與外界的交互來完成。這種集中加分布式的控制策略既便于整個仿真系統(tǒng)的統(tǒng)一管理,也增加了系統(tǒng)各個邏輯模塊自主運作的靈活性,減輕了控制邏輯的工作負擔(dān)。
六、數(shù)據(jù)庫
組態(tài)仿真系統(tǒng)的數(shù)據(jù)庫用來記錄系統(tǒng)中各個模塊的屬性和當(dāng)前狀態(tài)信息,以及模塊之間的關(guān)聯(lián)信息。對于一般框架而言,數(shù)據(jù)庫中應(yīng)包含如下信息:1.圖元的靜態(tài)屬性(編號、名稱、模塊類別、所執(zhí)行的業(yè)務(wù)邏輯等);2.圖元的動態(tài)屬性(位置、大小、當(dāng)前狀態(tài)等);3.圖元的輸入接口和輸出接口的屬性;4.圖元之間連線的屬性(連線的序號、信息流向、上下游圖元的接口號等)。
如果軟件設(shè)計為單機模式,控制策略和數(shù)據(jù)庫可作為與視圖、場景并列的模塊;如果軟件設(shè)計為客戶機/服務(wù)器模式,則可由服務(wù)器負責(zé)數(shù)據(jù)庫和控制策略算法的管理。
七、結(jié)束語
本文討論了Qt的Graphics View各個模塊的主要特性以及如何利用這些特性完成一個通用的組態(tài)仿真軟件框架的設(shè)計,該框架雖然不夠細化,但能反映出一般組態(tài)仿真系統(tǒng)的一些共性。在控制策略完善的情況下,利用Graphics View框架可以設(shè)計出界面美觀、執(zhí)行效率高、一體性和靈活性較好的仿真系統(tǒng),CISCO公司的仿真軟件Packet Tracer 5便是一個成功的案例。
參考文獻:
[1]薛福珍、侯菲莉,基于環(huán)節(jié)的控制系統(tǒng)圖形組態(tài)仿真軟件[J].系統(tǒng)仿真學(xué)報,2002,14(7).
[2]楊晨、鐘晶亮,分布式控制系統(tǒng)可視化組態(tài)仿真軟件開發(fā)[J].系統(tǒng)仿真學(xué)報,1999,11(4).
[3]蔡志明,精通Qt4編程[M].北京:電子工業(yè)出版社,2008.
[4]Nokia. Qt 4.4.3 Reference Documentation,2008.