朱靜靜,黃海于
(西南交通大學 信息科學與技術學院,四川 成都 611756)
隨著計算機技術的發展,計算機仿真技術逐漸應用于國防、工業、交通、物聯網、教育等各個領域[1]。分布式仿真平臺也越來越多地應用于各個應用和科研領域。高速列車數字化仿真平臺就是一個基于分布式計算架構的分布式系統[2]。現有的高速列車數字化仿真平臺是由圖形化建模子系統、計算工況、調度器軟件、耦合器軟件、執行機、監控子系統等構成的一個分布式仿真平臺[3]。計算工況是整個仿真系統的關鍵部分,目前存在的工況管理方式不夠靈活,項目和工況的管理上易操作性不強,可視化程度不高,在選取模板及其工況仿真參數配置上具有局限性,只能對指定的模塊組成的模型進行工況仿真,功能比較單一,大大降低了系統建模功能的可用性。如果對計算工況的管理方式進行應用功能擴展,不僅能應用于高速列車的仿真領域,在多種仿真領域也可以使用該仿真平臺,對整個仿真平臺實現更加有效的通用性。
文中以高速列車數字化仿真平臺為背景,針對以上問題,主要討論了用戶端計算工況的管理方式,計算工況管理是基于用戶端仿真軟件的一個功能模塊。在用戶登錄仿真軟件后,項目和工況的創建和信息管理及其二者關系采用項目管理器窗口中樹形結構層次化展示方式提供可視化程度,根據耦合連接圖進行工況仿真參數配置,可以提高軟件的可視化和通用性,進行模塊的功能擴展。生成工況配置文件,進行工況保存和耦合仿真。同時具有錯誤警告提示機制,具有良好的用戶交互界面。用戶可以在該平臺進行多種應用的仿真計算。
分布式仿真平臺用戶端仿真軟件是以高速列車數字化仿真平臺為研究背景,設計并實現的一個基于Oracle數據庫的通用仿真軟件,是整個仿真系統中重要的組成部分。圖1為仿真平臺框架圖。
用戶運用仿真軟件可以為整個仿真系統提供原始模板,運用模板創建計算工況,與調度器、耦合器、執行機之間進行系統的仿真,并將仿真結果通過監控示波器顯示出來,更好地體現實時動態的繪制曲線的特性[4]。

圖1 仿真平臺框架
仿真軟件主要分為圖形化建模、計算工況、多用戶管理三大功能模塊,如圖2所示。

圖2 仿真軟件功能結構
仿真軟件是使用仿真平臺的用戶接口軟件,界面的美觀、可視化,界面友好和操作方便為用戶提供了良好的用戶體驗。仿真軟件由項目管理器窗口、屬性窗口、仿真模型窗口、模型耦合參數設置窗口組成,所有的操作都是通過菜單項和工具條完成的。采用多文檔(MDI)的MFC框架[5],可以進行多個模型的創建或者工況的仿真,采用派生CDockablePane類實現選項卡式窗口,從而實現窗口的動態切分功能,可以更加方便地實現窗口的浮動、停靠、隱藏[6]。
系統建模主要是為整個仿真平臺提供仿真模型[7]。采用視圖窗口和對話框結合的方式,模塊化的建模方式[8],主要是模型的創建和管理,模塊間耦合關系的設置以及模塊的屬性設置。用戶利用模塊庫中的模塊創建模型,建模完成后生成模型文件:模塊配置文件、模型配置文件、模型位圖文件。
計算工況主要包括項目和工況的層次化管理,仿真結果的圖形化顯示。主要是根據仿真模型創建工況,加載耦合連接圖,設置工況仿真參數,生成工況配置文件,通過網絡提交仿真工況信息注冊到相應的耦合器,同時將工況文件上傳到數據庫,調度器、耦合器、執行機分別解析相應的配置文件進行耦合計算,將仿真結果存儲到數據庫,最后監控仿真結果并顯示。文中重點討論項目和工況的層次化管理部分。
用戶管理是為了便于管理多種用戶的訪問,不同的用戶具有不同的操作權限,登錄系統后,有相應權限的操作模塊[9-10]。多用戶包括系統管理員、項目負責人、工況創建人、模型創建人。
項目和工況的層次化展示是在項目管理器視圖窗口中將項目和工況信息以樹形列表的形式展示出來,從項目表cs_projecttable和工況表cs_conditiontable中讀出用戶權限內的項目和工況信息,保存在數組CArray
項目管理器窗口從上到下依次展示項目號和項目名,工況創建人ID和創建人名,工況號和工況名,以及工況下模板包含的模塊信息,這種展示方式便于用戶操作。
雙擊列表中的項目列,即可對選中的項目進行項目的查詢和修改、項目下新建工況等。雙擊工況列,即可對選中的工況進行工況查詢和修改、耦合計算、加載仿真模型等,加載仿真模板到仿真模型窗口,并與對話框結合,對工況設置仿真參數等,將創建成功的工況信息上傳到數據庫并提交工況進行仿真。
由于每個項目下有多個不同工況,不同的用戶創建的工況也有區別,因此采用創建項目,在項目下再新建工況的方式進行工況的管理,這種方式便于工況的查詢、仿真等。
項目的創建主要指項目負責人新建一個項目,配置項目的參數,包括項目的編號、項目名稱、項目創建時間、項目存儲路徑、項目描述、項目創建人等信息,項目新建成功后在項目管理器窗口中顯示。
用戶登錄仿真軟件后,在菜單欄中有新建項目子菜單,點擊菜單彈出新建項目對話框,設置項目參數,保存項目信息到項目表cs_projecttable,如表1所示。如要新建工況,下一頁即可顯示新建工況窗口,進行工況參數的設置。

表1 項目表(cs_projecttable)
項目管理主要包括新建工況,查詢項目,修改項目。新建工況是指用戶在指定項目下,創建新的工況進行耦合仿真;查詢項目是通過在屬性窗口中顯示項目的參數信息,并能夠更改指定的項目參數,項目編號是唯一標識的,不能更改。
新建工況是用戶對權限內的項目下創建仿真工況,創建工況有兩種方式:
(1)在新建項目窗口,點擊新建工況按鈕,進入下一頁創建工況的窗口。
(2)在項目管理器窗口,雙擊項目列表,點擊新建工況菜單,進入創建工況的窗口。
窗口采用對話框的方式來設置工況信息,包括所在的項目編號、項目名稱、項目描述、工況名稱、工況號、工況創建時間、工況創建人、工況目錄、工況描述、工況模板號、設置模板信息等。其中模板信息的設置是在創建工況窗口中點擊選取模板按鈕,彈出模板窗口,模塊窗口采用ListControl控件列出可選取的模型,PictureControl控件顯示模型關系圖。用戶左鍵單擊某一模型可查看模型關系圖,判斷模型是否正確,如果保存的模板信息沒有合適的,用戶可以自己創建新的模型作為工況的模板,該模型也可以保存到模型表cs_modeltable中作為下次的模板使用,這樣可以更加靈活地進行模板的選取。當模板選取后,加載模板關系圖到模型窗口中,工況創建窗口中顯示工況模板號。保存工況基本信息,配置工況仿真參數,最后生成工況配置文件(.ini、.txt),提交工況信息并將工況信息寫入相應的數據表中進行耦合仿真。
工況仿真參數的合理配置是工況能夠正確仿真的關鍵。新建工況的過程中,選取模板后,加載耦合連接圖到仿真模型窗口中,開始設置工況的仿真參數。這樣配置仿真參數的最大優點就是更好地實現了軟件的通用性、提高了可視化程度,可以根據模板中實際的模塊個數靈活設置參數。
具體的操作如下:
(1)雙擊模塊彈出工況仿真參數對話框,顯示拾取的模塊的任務號和任務名,配置模塊仿真文件、仿真基本參數,比如積分步長、輸出步長、操作系統、IP地址等的設置。每個模塊的仿真基本參數從數據表cs_condtasksimparatable中讀出,以comb-box控件顯示出來,用戶能直接選取默認的值添加到參數列表CStringArray m_ModuleParaList中,并能修改參數的值和描述,顯示已經配置好的參數,點擊已有參數列表即可對參數進行重新修改,雙擊即可刪除參數。這樣的操作過程,方便用戶對每個模塊的獨立設置,更加清晰明了。
(2)單個模塊的參數設置完畢,點擊工況全局仿真參數設置子菜單,設置工況的全局仿真參數,包括總積分步長,列車數量,總積分時間。在全局仿真參數窗口中,顯示參數的默認值,也可以對各個參數的值和描述進行更改。
(3)保存模塊仿真參數和全局仿真參數,生成工況目錄文件夾,寫入到工況配置文件(.ini、.txt)中,保存在本地,便于用戶查看。
工況保存是指工況創建完成后,把工況基本信息以及仿真參數信息和配置文件保存到數據庫中。采用多線程的方式將文件上傳到數據庫中,提高系統性能,不會出現界面“死機”現象[11]。新建的工況保存在本地,每個工況對應一個目錄文件夾,方便多工況的管理。工況目錄下包括模塊的子文件夾即模塊的模型文件信息,工況的配置文件(.ini、.txt)。工況保存的具體實現過程如下:
(1)根據項目號、工況號、工況創建人id判斷是否已經保存過該工況的信息,如果保存過,提示是否重復保存,否則直接進行工況信息保存。
(2)根據路徑查找到指定工況的目錄文件夾,讀取工況配置文件(后綴為.ini),將工況的基本信息寫入到工況表cs_conditiontable中,以及相應的仿真信息分別寫入任務工況表、任務輸入參數表、任務輸出參數表、模塊輸入輸出表、模塊輸入文件表等數據表中。工況表如表2所示。
耦合仿真是先判斷工況是否已經保存到數據庫中,如果沒有保存,提示需要先提交相應工況。如果已保存,將工況的項目號、工況號、工況創建人ID通過網絡提交給調度器,將各個模塊調度到各個計算資源上進行仿真。仿真模型窗口中模型的線條顏色的變化說明工況的仿真狀態。

表2 工況表
工況的管理是對已建好的工況進行工況查詢,工況修改和下載耦合連接圖,工況授權。
在工況列表下,雙擊某一工況,在屬性窗口中顯示工況的基本信息,可以在該窗口中對工況參數進行查詢和修改,可以修改模板,最終更新工況的信息。
下載耦合連接圖有4個用途:可以直接查詢工況的模板信息;用于配置工況的仿真參數;在工況仿真過程中,通過模型線條的顏色變化顯示工況的仿真狀態;用于對仿真工況的數據結果進行監控,仿真結果以圖形化的方式動態展示在窗口中[12-13],更加直觀、方便地對數據進行分析和管理[14]。
工況授權是指用戶可以將自己創建的工況授權給其他用戶使用,自己創建的工況和其他用戶授權給自己的工況都能在項目管理器窗口中顯示出來并對其進行操作,提高了工況使用的安全性。
為了驗證該工況管理方式的有效性,對軟件進行了測試仿真。根據仿真模型創建工況并進行提交仿真,主要討論工況的參數配置和查詢方式。通過采用MFC程序框架模式進行界面設計,實現了一個界面友好,便于操作的軟件,整個軟件的主界面如圖3所示。左側的項目管理器窗口對項目和工況進行層次化展示,仿真模型窗口可以查看工況的模板信息,屬性窗口可以顯示仿真工況的信息及其模板信息。在高速列車仿真領域和分布式人臉識別領域運用該工況創建方式在平臺上進行仿真測試,都可以實現系統的仿真,這種工況管理方式很好地體現了可視化和通用性。

圖3 仿真軟件主界面
以高速列車數字化仿真平臺為研究背景,從用戶端仿真軟件中對計算工況的管理方式進行討論,對系統建模和用戶權限管理不作詳細討論,討論項目和工況的創建、模板的選取、參數配置方式以及層次化展示,工況保存和耦合仿真,實現了一種更加直觀、便捷的工況仿真方式,能應用于多種領域進行仿真計算,對平臺的應用進行了擴展,增強了軟件使用的可視化和通用性。
[1] 崔懷林,蕭化昆,楊云川,等.通用一體化仿真平臺軟件的設計與實現[J].系統仿真學報,2004,16(3):436-440.
[2] 張 宇.基于分布式的耦合仿真平臺的研究與實現[D].成都:西南交通大學,2012.
[3] 杜志強.高速列車數字化協同計算及仿真平臺的研究與改進[D].成都:西南交通大學,2015.
[4] 李 濤,陶春榮.實時連續動態曲線在VC中的實現[J].雷達與對抗,2006(2):66-70.
[5] 孫 鑫.VC++深入詳解[M].北京:電子工業出版社,2012.
[6] 肖晨帆,肖 揚. 在VS2012下創建類似Visual Studio界面的方法[J].電腦編程技巧與維護,2014(19):34-40.
[7] 萬春陽.仿真平臺圖形化建模及數據顯示系統的研究與實現[D].成都:西南交通大學,2013.
[8] ZHENG Y C,FAN Y S,TAN W.Interactive-event-based workflow simulation in service oriented computing[C]//5th international conference on grid and cooperative computing.[s.l.]:[s.n.],2006.
[9] 史 杰.基于RBAC的雙層權限管理系統的設計與實現[D].西安:西安電子科技大學,2011.
[10] 張志強,葉安勝,古沐松.基于Web軟件的權限動態管理設計與實現[J].現代電子技術,2010,33(12):47-50.
[11] HORTON I.Windows programming with the Microsoft foundation classes (MFC)[M].[s.l.]:John Wiley&Sons,Inc.,2014:635-658.
[12] FLAMNINI F,GAGLINE A,OTTELO F,et al.Towards wireless sensor networks for railway infrastructure monitoring[C]//Electrical systems for aircaft,railway and ship prospulsion.[s.l.]:[s.n.],2010.
[13] 萬春陽,黃海于.分布式仿真系統的數據監控軟件的實現[J].計算機技術與發展,2013,23(9):14-17.
[14] LIANG S H L,GROITORU A,TAO C V.A distributed geospatial infrastructure for sensor web[J].Computer & Geosciences,2005,31(2):221-231.