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