專利名稱:基于modelica建模語言的分布式實時交互仿真系統的制作方法
技術領域:
本發明屬于計算機運用領域,具體涉及一種基于modelica建模語言的分布式實時交互仿真系統,該系統特別適合于搭建多學科虛擬實驗教學平臺。
背景技術:
分布式交互仿真是指采用協調一致的結構、標準、協議和數據庫,通過局域網或者廣域網,將分散在各地的仿真設備互聯,形成可參與的綜合仿真環境。分布式交互仿真技術從產生到DIS2. X、IEEE1278. X系列協議的制定,進而發展到今天的HLA(高級仿真體系架構),都企圖解決建模與仿真領域存在的問題絕大多數仿真器的應用實現較為獨立,仿真器的重用性差;開發、維護和使用費時而且成本高;可驗證性、有效性和置信度較差。Modelica的語言采用類似MatLab語法,模型是通過各專業領域熟悉的數學方程表達出來,從而可以方便的描述方程,而不需要特殊手動計算中間變量,使模式的開發者從繁重的語言學習開發中解脫出來。Modelica用類似面向對象的編程方式來描述對象,并在運算和表達式中支持條件判斷語句,支持離散事件的仿真與計算。在Modelica的語言設計中特別強調事務的同步與衍發,在連續事件中能夠啟動離散事件。Mode I i ca提供了豐富的語法功能,例如可以聲明不同類型的變量,不同的事件觸發過程,以滿足各類復雜系統仿真的要求。目前,隨著Modelica語言的發展,其支持多領域仿真建模的特征也越來越突出。然而,支持Modelica建模語言的眾多求解器都沒能很好的實現實時交互式仿真。隨著計算機多媒體技術和網絡通信技術的迅速發展,信息時代的學習、生活方式都發生了重大變革。作為培養和提高學生動手實踐能力、觀察能力、分析問題和解決問題能力等方面有著先天優勢的實驗教學是高校教育改革的關鍵問題之一。目前,我國傳統實驗教學環節不足、實驗資源不均衡,學生創新能力不足,虛擬實驗教學環境研究與建設有利于解決當前實驗教學中存在的問題。然后虛擬實驗教學環境存在學科多樣性的特點,現有仿真系統均難以滿足所有實驗教學的需要。因而迫切需要構建一種支持多領域仿真建模,易于擴展和維護的虛擬實驗教學平臺。
發明內容
本發明的目的在于提供一種基于modelica建模語言的分布式實時交互仿真系統,該系統在仿真計算規模較小的情況下,可支持多人實時交互仿真,因而特別適合于搭建多學科虛擬實驗教學平臺。為了實現上述目的,本發明提供了下述技術方案一種基于modelica建模語言的分布式實時交互仿真系統,其特征在于,該系統包括中心服務器,每個中心服務器上連接有多個客戶端和多個子計算服務器,每個子計算服務器通過仿真器調度接口連接有多個仿真器;客戶端接收用戶提交的仿真任務請求,向中心服務器請求全局唯一的標示仿真任務的任務號;客戶端通過與中心服務器建立的TCP連接發送用于交互的任務請求命令和接收回復命令,客戶端處理回復命令并通知用戶;中心服務器監聽來自客戶端的TCP連接請求,解析來自不同客戶端的任務請求命令后根據任務號和負載均衡策略分配對應于子計算服務器的IP地址給仿真任務;中心服務器與任務對應的子計算服務器建立TCP連接,轉發包含仿真任務的任務請求命令,并接收來自子計算服務器的回復命令,將其轉發給相應的客戶端;子計算服務器監聽來自中心服務器的TCP連接請求,負責解析來自中心服務器的任務請求命令,并在本地根據任務的類型,創建不同的仿真器調度接口進程;子計算服務器還負責維護仿真器調度接口的工作目錄和通信端口 ;子計算服務器主動與仿真器調度接口進程建立TCP連接,并處理任務請求命令后將計算請求命令轉發給仿真器調度接口進程;子計算服務器接收來自仿真器調度接口的結果命令,并繼續將其轉發給中心服務器;中心服務器和子計算服務器配合完成集群的分布式任務調度;仿真器調度接口獲得子計算服務器分配的啟動參數并監聽來自子計算服務器的TCP連接請求,為子計算服務器提供統一的調用接口 ;仿真器調度接口與仿真器配合,通過TCP對外提供計算服務,仿真器調度接口解析計算請求命令并調用仿真器進行計算,并將計算結果整合后以結果命令的形式通過TCP返還給子計算服務器。本發明結合Modelica建模語言支持多領域仿真建模的特點,并根據Modelica建模語言在實時交互仿真方面的薄弱環節,結合現有HLA仿真體系結構而提出。該系統通過中心服務器將異構的多臺計算機通過具有統一的通信標準、規范和協議的高速網絡互聯起來,以構成一個一體化仿真環境。系統借助客戶端、中心服務器、子計算服務器、仿真器調度接口和仿真器五個功能模塊來實現。多個客戶端和中心服務器通過TCP協議進行通信。系統的核心是提供了統一的仿真器調度接口。本發明的有益效果是,運用基于modelica建模語言的分布式實時交互仿真系統,可以實現多用戶的實時交互仿真。系統提供了統一的仿真器調度接口,使得開發新的仿真實驗更容易,降低了開發難度,提高了系統的可擴展性。根據上述技術方案,本發明是一種基于modelica建模語言的分布式實時交互仿真系統,該系統通過客戶端發送仿真請求命令到中心服務器,中心服務器根據任務類型以及當前系統負載,將任務分發到合適的子服務器,子服務根據任務類型調用相應的仿真器調度接口,仿真器調度接口調用仿真器完成仿真任務并將結果以數據流的形式返回客戶端。
圖I為本發明的整體結構圖。圖2為本發明的仿真器調度接口的功能結構框圖。圖3為本發明中客戶端的功能結構框圖。圖4為本發明中客戶端的工作流程圖。圖5為本發明中心服務器的功能結構框圖。圖6為本發明中心服務器的工作流程圖。圖7為本發明子計算服務器的功能結構框圖。圖8為本發明子計算服務器的工作流程圖。
圖9為本發明仿真器調度接口的工作流程圖。圖10為本發明仿真器的功能結構圖。圖11為本發明仿真器的工作流程圖。
具體實施例方式如圖I所示,系統借助客戶端I、中心服務器2、子計算服務器3、仿真器調度接口 4和仿真器5五個功能模塊來實現。在介紹各模塊的功能和交互過程之前,首先對系統的仿真交互協議做詳細說明。系統包含二種交互命令任務請求命令、計算請求命令和回復命令。任務請求命令、計算請求命令和回復命令的集合構成了本系統的仿真交互協議??蛻舳薎向中心服務器2發送的命令和中心服務器2向子計算服務器3轉發的命令都是任務請求命令;子計算服務器3向仿真器調度接口 4發送的命令為計算請求命令;仿真器調度接口 4向子計算服務器3回復的命令、子計算服務器3向中心服務器2回復的命令和中心服務器2向客戶端I回復的命令都是回復命令。每條計算請求命令均由一串字符組合而成,字符串的結構為長度+命令類型+命令內容+命令編號。其中長度由8個字符表示,命令類型由4個字符表示,命令內容根據具體仿真任務和命令類型確定,字符數不限(最少為空),命令編號由I個字符表示。長度的十進制值是指字符串“長度+命令類型+命令內容+命令編號”的總字節長度。長度的字符串表示不夠八字符則在前面補字符’O’,所有字符串的編碼為UTF-8。命令類型指示命令所表示的意義,具體信息請參見表I、計算請求命令的內容。命令內容包含了對求解任務的規范化描述(比如modelica的源文件mo)或者命令執行時所需的參數,具體內容由仿真器5決定。命令編號從O開始計數,以10為模,命令編號用于和回復命令的編號對應,保證請求與應答的對應關系。
任務請求命令用于平臺的內部通信,和計算請求命令不同的是它增加了任務管理前綴,而且命令類型編號以字母a開頭,每條任務請求命令均由一串字符組合而成,字符串的結構為任務號+實驗類型編號+長度+命令類型+命令內容+命令編號。其中任務號由28個字符表示,實驗類型由4個字符表示,長度由8個字符表示,命令類型由4個字符表示,命令內容為計算請求命令或者任務請求命令所需參數或者為空,命令編號由I個字符表示。其中任務號由中心服務器2產生并返回給客戶端1,實驗類型為4位字符,用于保證子計算服務器3調用正確的仿真器調度接口 4。長度的十進制值是指字符串“長度+命令類型+命令內容+命令編號”的總字節長度。長度的字符串表示不夠八字符則在前面補字符’ 0’,所有字符串的編碼為UTF-8。命令類型指示命令所表示的意義,具體信息請參見表2、任務請求命令的內容。命令編號從O開始計數,以10為模,命令編號用于和回復命令的編號對應,保證請求與應答的對應關系。同樣,每一條回復命令也由一串字符組合而成,字符串的結構為長度+命令類型+命令內容+命令編號?;貜兔畹淖址鞑糠炙复饬x與計算請求命令字符串中名稱相同的各部分指代意義相同?;貜兔畹念愋蛥⒁姳?、回復命令的內容?;貜兔畹拿罹幪柼畛鋵埱竺畹拿罹幪???蛻舳薎和中心服務器2通過可靠的TCP協議進行通信。用戶通過客戶端I生成描述仿真任務的仿真場景;客戶端I向中心服務器2請求全局唯一的任務號,標示這一次仿真任務;客戶端I通過與中心服務器2建立的TCP連接發送用于交互的任務請求命令,比如初始化命令、修改參數命令、暫停命令等;客戶端I通過與中心服務器2建立的TCP連接接收回復命令;客戶端I處理回復命令,并通知用戶。中心服務器2監聽來自客戶端I的TCP連接請求,并準備為客戶端I分配全局唯一的任務號;中心服務器2解析來自不同客戶端I的任務請求命令后根據任務號和負載均衡策略分配對應于子計算服務器3的IP地址給仿真任務。中心服務器2與任務對應的子計算服務器3建立TCP連接,轉發包 含仿真任務的任務請求命令;中心服務器2負責接收來自子計算服務器3的回復命令并將其轉發給相應的客戶端I。子計算服務器3監聽來自中心服務器2的TCP連接請求;子計算服務器3負責解析來自中心服務器2的任務請求命令,并在本地根據任務的類型,創建不同的仿真器調度接口 4進程;子計算服務器3負責維護仿真器調度接口 4的工作目錄,通信端口等臨時資源;子計算服務器3主動與仿真器調度接口 4進程建立TCP連接,并處理任務請求命令后將計算請求命令轉發給仿真器調度接口 4進程;子計算服務器3接收來自仿真器調度接口 4的結果命令,并繼續將其轉發給中心服務器2。中心服務器2和子計算服務器3配合完成集群的分布式任務調度。仿真器調度接口 4提供了子計算服務器3使用不同仿真器5的統一調用接口。統一的調用接口包括下面幾個方面第一、仿真器調度接口 4為一個可執行程序(如在Iinux或者windows下的),這個可執行程序啟動時,可以接收來自命令行的參數,參數包括但不限于仿真器調度接口 4用于監聽計算服務器3發送的TCP連接請求的端口號和仿真器調度接口 4調用仿真器5進行仿真計算時存放臨時文件的工作目錄;第二、仿真器調度接口 4需要根據仿真器5的具體功能提供用于仿真控制的交互命令,具體包括實現系統仿真協議部分的計算請求命令和回復命令。第三、仿真器調度接口 4可以將仿真結果以回復命令的形式通過TCP發給子計算服務器3。仿真器調度接口 4與仿真器5配合,通過TCP對外提供計算服務。如圖2,根據仿真器5的不同,仿真器調度接口 4調用仿真器5的結構分多種形式,典型的結構包括以下三種當仿真器5的仿真計算過程能由單獨一個可執行程序控制完成時,如果這個仿真器5的控制程序可以通過簡單修改實現仿真調度接口 4需要滿足的統一調用接口,可采用單進程仿真器調用接口 4. 3 ;如果這個仿真器5的控制程序結構復雜,不容易修改或者不可修改時,可采用第一多進程仿真器調用接口 4. 1,通過添加第一多進程仿真器調用接口 4. I程序來實現對仿真器5的調用包裝,實現子計算服務器3對仿真器5的統一調用。當仿真器5的仿真計算過程不能由單獨一個可執行程序控制完成時,仿真器調用接口 4需要根據仿真器5的具體結構,實現仿真器5的調用,同時對子計算服務器3提供統一的調用接口。如圖2中第二仿真器調用接口 4. 2所示為此種情況下的典型,仿真器5由仿真編譯器5. I和仿真可執行程序5. 2組成,第二仿真器調用接口 4. 2首先需要調用仿真編譯器5. I來生產仿真可執行文件5. 2,之后第二仿真器調用接口 4. 2與仿真可執行文件5. 2交互進行仿真計算。本發明所述客戶端I必須根據所選用的仿真器調度接口 4和仿真器5所提供的計算服務的具體內容構造任務請求命令、計算請求命令和解析回復命令??蛻舳伺c中心服務器2之間的交互過程也需遵從一定的流程,其中包括啟動階段、交互階段和退出階段。仿真的規范化交互流程可以表述如下啟動階段 客戶端I啟動以后創建客戶端I與中心服務器2之間的TCP連接,并向中心服務器2申請任務號。之后,客戶端I構造用于初始化的任務請求命令,請求中心服務器2分發仿真任務到任務號對應的子計算服務器3,子計算服務器3接收到中心服務器2轉發的任務請求命令后,根據任務類型啟動仿真器調度接口 4,仿真器調度接口 4啟動以后向子計算服務器3發送表示初始化成功的回復命令,子計算服務器3轉發該回復命令給中心服務器2,中心服務器2轉發該回復命令給客戶端I。客戶端I 一旦接收到初始化的回復命令,則保證了仿真器調度接口 4已經正常啟動。交互階段客戶端I根據具體用戶指令向后臺發送任務請求命令,同時接收、處理來自中心服務器2的回復命令。退出階段客戶端I向中心服務器2發送退出命令,客戶端I斷開與中心服務器2的TCP連接。下面借助實施例更加詳細地說明本發明,但以下實施例僅是說明性的,本發明的保護范圍并不受這些實施例的限制。實施例實現了如下表I、表2、表3所示的任務請求命令、計算請求命令和回復命令??蛻舳薎遵從以上仿真交互協議,并按照系統的規范化交互流程實現如下模塊。如圖3所示,為客戶端I的功能結構框圖??蛻舳薎由交互控制模塊I. I、仿真任務請求模塊I. 2、結果數據接收模塊I. 3、數據緩存I. 4構成。交互控制模塊I. I負責給用戶提供交互界面,接受用戶輸入、顯示仿真結果和構建仿真場景等。仿真任務請求模塊I. 2負責構造任務請求命令。結果數據接收模塊I. 3負責接收中心服務器2回傳的回復命令。數據緩存I. 4用于緩存回傳的回復命令。用戶借助交互控制模塊I. I向客戶端I輸入指令(比如點擊按鈕,傳輸文件,書寫代碼等),仿真任務請求模塊I. 2根據指令生成不同的任務請求命令,并將其發送到中心服務器2。結果數據接收模塊I. 3接收到中心服務器2回傳的回復命令時,將其保存到數據緩存I. 4中。交互控制模塊I. I檢查數據緩存I. 4的數據,并解析回復命令向用戶輸出信息(比如圖像,文字,動畫等)。下面結合具體流程圖詳細說明客戶端的工作過程。如圖4、客戶端啟動以后向中心服務器申請任務號,請求中心服務器為該任務分配子計算服務器IP。申請任務號成功之后,客戶端發送init命令,請求中心服務器轉發任務請求命令到負責該任務的子計算服務器,并等待來自中心服務器的回復命令init-answer??蛻舳艘坏┙邮栈貜兔頸nit_answer,則保證了仿真器調度接口已經正常啟動。之后,客戶端就可以不停地向后臺發送包含命令類型為0002至0013的計算請求命令的任務請求命令,同時接受來自中心服務器的回復命令,直到客戶端退出程序,斷開與中心服務器的連接。如圖5所示、為本發明所述中心服務器2的功能結構框圖,中心服務器3基于異步通信框架實現,包括第一請求命令轉發模塊2. I、第一任務管理模塊2. 2、第一回復命令轉發模塊2. 3、負載均衡模塊2. 4。
當第一任務管理模 塊2.2接收到來自客戶端的TCP連接請求后,第一任務管理模塊2. 2從負載均衡模塊2. 4獲取各子計算服務器的負載信息,由第一任務管理模塊2. 2的負載均衡策略負責為該TCP連接請求所指代的任務分配仿真任務號和子計算服務器的IP地址。之后,第一任務管理模塊2. 2將調用第一請求命令轉發模塊2. I創建服務器連接對象,該對象負責接收來自客戶端的任務請求命令,并利用從第一任務管理模塊2. 2獲得的子計算服務器的IP地址創建中心服務器與子計算服務器的TCP連接,最后第一請求命令轉發模塊2. I返回該服務器連接對象連接子計算服務器的TCP套接字句柄給第一任務管理模塊2. 2,同時將客戶端發送的任務請求命令轉發給該任務所分配的子計算服務器。第一任務管理模塊2. 2根據客戶端與中心服務器的TCP套接字句柄、中心服務器與子計算服務器的TCP套接字句柄和任務號調用第一回復命令轉發模塊2. 3創建客戶端連接對象,該對象負責接收來自子計算服務器的回復命令,并將其轉發給客戶端。最后第一任務管理模塊2. 2將以任務號為關鍵字,服務器連接對象和客戶端連接對象為鍵值,將其添加到第一任務管理模塊2. 2維護的任務字典中、該任務字典為一個字典數據結構,記錄了中心服務器上所有任務號對應的服務器連接對象和客戶端連接對象。當第一任務管理模塊2. 2需要斷開與客戶端的連接時,第一任務管理模塊2. 2通過任務號在任務字典中查找服務器連接對象和客戶端連接對象,并將之銷毀,之后刪除該任務號。下面結合具體流程圖詳細說明中心服務器的工作過程。如圖6所示、中心服務器啟動后首先讀取配置文件,配置文件描述了系統中各子計算服務器的IP地址、通信端口,平臺類型(linux、windows或者mac os等)以及各子計算服務器所能承擔的仿真計算類型。中心服務器創建監聽服務,接收來至客戶端的連接??蛻舳说倪B接到達時,中心服務器會創建一個臨時的連接對象,該對象用于管理與客戶端的通信。如果對象創建失敗,中心服務器負責做資源清理,包括斷開連接,刪除臨時的連接對象。如果對象創建成功,那么中心服務器等待客戶端發送仿真請求數據。如果接收的數據不是一條完整的命令,則返回繼續接收。當接收到一條完整的命令時,對命令經行解析。如果命令是aOOl,則向客戶端返回一個任務編號,并為該任務分配子計算服務器的IP地址,然后創建客戶端連接對象,并將任務號等信息添加到任務字典中。如果不是命令aOOl,也不是退出命令,則將任務請求命令轉發到對應的子計算服務器,否則,銷毀服務器連接對象和客戶端連接對象,刪除任務號并等待新的客戶端發起的連接請求??蛻舳诉B接對象負責將子計算服務器回傳的回復命令傳遞給客戶端。如果中心服務器退出,則程序銷毀所有連接對象,回收系統資源然后退出。如圖7所示,是本發明所述子計算服務器3功能框圖,子計算服務器3基于異步通信框架實現,包括第二請求命令轉發模塊3. I、第二任務管理模塊3. 2、第二回復命令轉發模塊3. 3、第二仿真求解器器調用模塊3. 4。當第二任務管理模塊3.2接收到來自中心服務器的TCP連接請求后,第二任務管理模塊3. 2從第二仿真求解器器調用模塊3. 4獲取端口號和臨時工作目錄。之后,第二任務管理模塊3. 2將調用第二請求命令轉發模塊3. I創建服務器連接對象,該對象負責接收來自中心服務器的任務請求命令,并利用從第二任務管理模塊3. 2獲得的端口號、臨時工作目錄以及對應該任務類型的仿真器調度接口路徑創建仿真器調度接口進程,并與仿真器調度接口進程建立TCP連接,之后如果任務請求命令中包含計算請求命令,則將其轉發給仿真器,最后第二請求命令轉發模塊3. I返回該服務器連接對象連接仿真器調度接口的TCP套接字句柄給第二任務管理模塊3. 2,第二任務管理模塊3. 2根據中心服務器與子計算服務器的TCP套接字句柄、子計算服務器與仿真器調度接口的TCP套接字句柄和任務號調用第二回復命令轉發模塊3. 3創建客戶端連接對象,該對象負責接收來自仿真器調度接口的回復命令,并將其轉發給中心服務器。最后第二任務管理模塊3. 2將以任務號為關鍵字,月艮務器連接對象和客戶端連接對象為鍵值,將其添加到第二任務管理模塊3. 2維護的任務字典中、該任務字典為一個字典數據結構,記錄了子計算服務器上所有任務號對應的服務器連接對象和客戶端連接對象。當第二任務管理模塊3. 2需要斷開與中心服務器的連接時,第二任務管理模塊3. 2通過任務號在任務字典中查找服務器連接對象和客戶端連接對象,并將之銷毀,之后刪除該任務號。下面結合具體流程圖詳細說明子計算服務器的工作過程。如圖8所示、子服務器啟動后首先讀取配置文件,配置文件描述了該子計算服務器上實驗類型對應的仿真器調度接口的路徑,以及啟動這些仿真器調度接口所需要的必要參數。子計算服務器創建監聽服務,接收來至中心服務器的連接。中心服務器的連接到達時,子計算服務器會創建一個臨時的連接對象,該對象用于管理與中心服務器的通信。如果對象創建失敗,子計算服務器負責做資源清理,包括斷開連接,刪除臨時的連接對象。如果對象創建 成功,那么子計算服務器等待中心服務器發送仿真請求數據。如果接收的數據不是一條完整的命令,則返回繼續接收。當接收到一條完整的命令時,對命令經行解析。然后根據命令中出現的任務號判斷該任務是否已經存在。如果不存在,則根據任務的實驗類型確定仿真器調度接口的路徑,分配與仿真器調度接口通信的端口號并創建臨時工作目錄,創建仿真器調度接口進程,創建客戶端連接對象,將任務號等信息添加到仿真任務字典中。客戶端連接對象負責接受回復命令,并將其轉發給中心服務器。如果任務存在,而且命令不是退出命令,則將仿真的請求轉發到對應的仿真器調度接口進程,否則,銷毀連接對象,結束仿真器調度接口進程,刪除任務號并等待中心服務器發起新的連接請求。如果子服務器退出,則程序銷毀所有連接對象并回收系統資源然后退出。該實施例的仿真器調度接口 4采用的是如圖2的第二多進程仿真器調度接口 4. 2的形式,仿真編譯器和仿真可執行程序構成仿真器5。該實施例的仿真器調度接口 4具備以下特性仿真器調度接口 4為一個可執行文件,且能夠以帶命令行參數的方式啟動,參數包括但不限于端口號,臨時工作目錄;具備解析表I、表3中所有交互命令的能力;將仿真結果以回復命令的形式通過TCP發給子計算服務器3。仿真編譯器為Openmodelica的編譯器OMC(open modelica compiler)。下面結合具體流程圖詳細說明仿真器調用接口的工作過程。如圖9所示,仿真器調度接口從命令行參數讀取端口號port和臨時工作目錄,端口號用于和子計算服務器通信,臨時工作目錄是該仿真任務臨時數據和文件的存放地。仿真器調度接口在分配的端口處創建監聽服務器并等待子計算服務器的仿真請求。仿真器調度接口創建回復命令發送線程和計算請求命令接收線程,同時主線程返回繼續等待子計算服務器的其他請求。發送線程不斷檢查共享緩沖區是否為空,如果不為空時,發送線程將緩沖區的數據取出并發送給子計算服務器,如果為空,則發送線程繼續等待直到共享緩沖區不為空。接收線程等待仿真請求命令,當命令類型為0001時,構造0001號回復命令并將其插入共享緩沖隊列尾部,然后返回繼續接收后續命令。當命令類型為0002的請求命令時,仿真器調度接口獲取仿真模型,并調用OMC編譯器對仿真模型經行編譯,編譯后將生成仿真可執行程序,隨后仿真器調度接口以端口號port+1為參數啟動生成的仿真可執行程序并創建結果數據接收線程。主線程構造0002號回復命令并將其插入共享緩沖隊列尾部,然后返回繼續接收后續命令。接收線程與仿真可執行程序建立連接。接收線程等待仿真可執行程序產生的結果數據。當接收到結果數據時,對結果數據經行解析,根據結果數據的意義構造相應的回復命令并將其插入共享緩沖隊列尾部。同時接收線程返回繼續等待仿真可執行程序產生的結果數據。當命令為退出命令時,程序釋放所有資源并退出。當命令類型為除0002,0001和退出的其他命令時,將命令轉發給仿真可執行程序,然后返回繼續接收后續命令。
如圖10所示、是本發明所述仿真器5的功能框圖。仿真器5由第三接收數據模塊5. I、數據緩存5. 2、命令解析模塊5. 3、求解計算模塊5. 4、結果數據過濾模塊5. 5和第三回傳數據模塊5. 6組成。第三接收數據模塊5. I接收來自求解器調度接口 4的計算請求命令,并存放到數據緩存5. 2中,命令解析模塊5. 3解析數據緩存中存放的計算請求命令,并根據命令意義控制求解器計算模塊5. 4計算。求解器計算模塊5. 4計算的結果保存在數據緩存5. 4中,結果過濾模塊5. 5從數據緩存5. 2中取出數據并過濾后通知第三回傳數據模塊5. 6發送給仿真器調度接口 4。下面結合具體流程圖詳細說明仿真器的工作過程。如圖11所示,仿真器啟動以后,從命令行參數列表中讀取端口號port+Ι的參數,然后在端口 port+Ι出創建服務監聽。仿真器創建回復命令發送線程、計算請求命令接收線程和求解計算線程。計算請求命令接收線程等待計算請求命令,并根據命令類型做不同處理。如果命令為退出命令,則退出程序。求解計算線程在計算請求命令接收線程的控制下將計算仿真結果存放到共享緩沖區中。回復命令發送線程不斷檢測共享緩沖區是否為空,如果不為空則將結果發送給求解器調度接口。根據上述技術方案,一種基于modelica建模語言的分布式實時交互仿真系統通過客戶端按照規范化的交互流程和仿真交互協議發送任務請求命令到中心服務器,中心服務器根據任務類型以及當前系統負載,將任務分發到合適的子計算服務器,子計算服務器根據任務類型調用仿真器調度接口,仿真器調度接口解析任務請求命令并調用仿真器完成仿真任務,然后將結果以數據流的形式返回客戶端。表I、計算請求命令的內容
權利要求
1.一種基于modelica建模語言的分布式實時交互仿真系統,其特征在于,該系統包括中心服務器(2),每個中心服務器上連接有多個客戶端(I)和多個子計算服務器(3),每個子計算服務器通過仿真器調度接口(4)連接有多個仿真器(5); 客戶端(I)接收用戶提交的仿真任務請求,向中心服務器(2)請求全局唯一的標示仿真任務的任務號;客戶端(I)通過與中心服務器(2)建立的TCP連接發送用于交互的任務請求命令和接收回復命令,客戶端(I)處理回復命令并通知用戶; 中心服務器(2)監聽來自客戶端(I)的TCP連接請求,解析來自不同客戶端(I)的任務請求命令后根據任務號和負載均衡策略分配對應于子計算服務器(3)的IP地址給仿真任務;中心服務器(2)與任務對應的子計算服務器(3)建立TCP連接,轉發包含仿真任務的任務請求命令,并接收來自子計算服務器(3)的回復命令,將其轉發給相應的客戶端(I);子計算服務器(3)監聽來自中心服務器(2)的TCP連接請求,負責解析來自中心服務器(2)的任務請求命令,并在本地根據任務的類型,創建不同的仿真器調度接口(4)進程;子計算服務器(3)還負責維護仿真器調度接口(4)的工作目錄和通信端口 ;子計算服務器(3)主動與仿真器調度接口(4)進程建立TCP連接,并處理任務請求命令后將計算請求命令轉發給仿真器調度接口(4)進程;子計算服務器(3)接收來自仿真器調度接口(4)的結果命令,并繼續將其轉發給中心服務器(2); 中心服務器(2)和子計算服務器(3)配合完成集群的分布式任務調度; 仿真器調度接口(4)獲得子計算服務器(3)分配的啟動參數并監聽來自子計算服務器(3)的TCP連接請求,為子計算服務器(3)提供統一的調用接口 ;仿真器調度接口(4)與仿真器(5)配合,通過TCP對外提供計算服務,仿真器調度接口(4)解析計算請求命令并調用仿真器(5)進行計算,并將計算結果整合后以結果命令的形式通過TCP返還給子計算服務器⑶。
2.根據權利要求I所述的基于modelica建模語言的分布式實時交互仿真系統,其特征在于,所述仿真器調度接口(4)為可執行程序,該可執行程序啟動時接收來自命令行的參數,參數包括仿真器調度接口(4)用于監聽計算服務器(3)發送的TCP連接請求的端口號和仿真器調度接口(4)調用仿真器(5)進行仿真計算時存放臨時文件的工作目錄;所述仿真器調度接口(4)提供用于仿真控制的交互命令,包括計算請求命令和回復命令;所述仿真器調度接口(4)將仿真結果以回復命令的形式通過TCP發給子計算服務器(3)。
3.根據權利要求2所述的基于modelica建模語言的分布式實時交互仿真系統,其特征在于,仿真器調度接口(4)包括第一多進程仿真器調用接口(4. I)、第二仿真器調用接口(4. 2)和單進程仿真器調用接口(4. 3)三種結構形式; 單進程仿真器調用接口(4. 3)是指仿真器5的仿真計算過程由單獨一個可執行程序控制完成,且該仿真器(5)的控制程序能夠通過簡單修改實現統一調用接口功能; 第一多進程仿真器調用接口(4. I)是指仿真器5的仿真計算過程由單獨一個可執行程序控制完成,且仿真器(5)的控制程序結構復雜,通過添加專用仿真器調用接口程序以實現對仿真器(5)的調用包裝; 第二仿真器調用接口(4.2)是在仿真器(5)由仿真編譯器(5. I)和仿真可執行程序(5.2)組成時,調用仿真編譯器(5. I)以生產仿真可執行文件(5. 2),之后與仿真可執行文件(5. 2)交互進行仿真計算。
4.根據權利要求1、2或3所述的基于modelica建模語言的分布式實時交互仿真系統,其特征在于,客戶端(I)包括交互控制模塊(I. I)、仿真任務請求模塊(I. 2)、結果數據接收模塊(I. 3)和數據緩存(I. 4); 交互控制模塊(I. I)負責給用戶提供交互界面,接受用戶輸入、顯示仿真結果和構建仿真場景,并提供 給仿真任務請求模塊(1.2); 仿真任務請求模塊(1.2)負責構造任務請求命令,并將其發送到中心服務器(2); 結果數據接收模塊(1.3)負責接收中心服務器(2)回傳的回復命令,將其保存到數據緩存(I. 4)中;交互控制模塊(I. I)檢查數據緩存(I. 4)的數據,并解析回復命令向用戶輸出信息。
5.根據權利要求I、2或3所述的基于modeI i ca建模語言的分布式實時交互仿真系統,其特征在于,中心服務器(3)包括第一請求命令轉發模塊(2. I)、第一任務管理模塊(2. 2)、第一回復命令轉發模塊(2.3)和負載均衡模塊(2.4); 第一任務管理模塊(2. 2)接收到來自客戶端的TCP連接請求,從負載均衡模塊(2. 4)獲取各子計算服務器的負載信息,為該TCP連接請求所指代的任務,分配仿真任務號和子計算服務器的IP地址;第一任務管理模塊(2. 2)還將調用第一請求命令轉發模塊(2. I)創建服務器連接對象,該對象負責接收來自客戶端的任務請求命令,并利用從第一任務管理模塊(2. 2)獲得的子計算服務器的IP地址創建中心服務器與子計算服務器的TCP連接,最后第一請求命令轉發模塊(2. I)返回該服務器連接對象連接子計算服務器的TCP套接字句柄給第一任務管理模塊(2. 2),同時將客戶端發送的任務請求命令轉發給該任務所分配的子計算服務器;第一任務管理模塊(2. 2)根據客戶端與中心服務器的TCP套接字句柄、中心服務器與子計算服務器的TCP套接字句柄和任務號調用第一回復命令轉發模塊(2. 3)創建客戶端連接對象,該對象負責接收來自子計算服務器的回復命令,并將其轉發給客戶端;最后第一任務管理模塊(2. 2)將以任務號為關鍵字,服務器連接對象和客戶端連接對象為鍵值,將其添加到中心服務器的任務字典中、該任務字典為一個字典數據結構,記錄了中心服務器上所有任務號對應的服務器連接對象和客戶端連接對象;當第一任務管理模塊(2. 2)需要斷開與客戶端的連接時,第一任務管理模塊(2. 2)通過任務號在任務字典中查找服務器連接對象和客戶端連接對象,并將之銷毀,之后刪除該任務號。
6.根據權利要求4所述的基于modelica建模語言的分布式實時交互仿真系統,其特征在于,中心服務器(3)包括第一請求命令轉發模塊(2. I)、第一任務管理模塊(2. 2)、第一回復命令轉發模塊(2. 3)、負載均衡模塊(2. 4); 第一任務管理模塊(2. 2)接收到來自客戶端的TCP連接請求,從負載均衡模塊(2. 4)獲取各子計算服務器的負載信息,為該TCP連接請求所指代的任務,分配仿真任務號和子計算服務器的IP地址;第一任務管理模塊(2. 2)還將調用第一請求命令轉發模塊(2. I)創建服務器連接對象,該對象負責接收來自客戶端的任務請求命令,并利用從第一任務管理模塊(2. 2)獲得的子計算服務器的IP地址創建中心服務器與子計算服務器的TCP連接,最后第一請求命令轉發模塊(2. I)返回該服務器連接對象連接子計算服務器的TCP套接字句柄給第一任務管理模塊(2. 2),同時將客戶端發送的任務請求命令轉發給該任務所分配的子計算服務器;第一任務管理模塊(2. 2)根據客戶端與中心服務器的TCP套接字句柄、中心服務器與子計算服務器的TCP套接字句柄和任務號調用第一回復命令轉發模塊(2. 3)創建客戶端連接對象,該對象負責接收來自子計算服務器的回復命令,并將其轉發給客戶端;最后第一任務管理模塊(2. 2)將以任務號為關鍵字,服務器連接對象和客戶端連接對象為鍵值,將其添加到中心服務器的任務字典中、該任務字典為一個字典數據結構,記錄了中心服務器上所有任務號對應的服務器連接對象和客戶端連接對象;當第一任務管理模塊(2. 2)需要斷開與客戶端的連接時,第一任務管理模塊(2. 2)通過任務號在任務字典中查找服務器連接對象和客戶端連接對象,并將之銷毀,之后刪除該任務號
7.根據權利要求1、2或3所述的基于modelica建模語言的分布式實時交互仿真系統,其特征在于,子計算服務器(3)包括第二請求命令轉發模塊(3. I)、第二任務管理模塊(3. 2)、第二回復命令轉發模塊(3. 3)、第二仿真求解器器調用模塊(3. 4); 第二任務管理模塊(3. 2)用于接收來自中心服務器的TCP連接請求,從第二仿真求解器器調用模塊(3.4)獲取端口號和臨時工作目錄;第二任務管理模塊(3. 2)調用第二請求命令轉發模塊(3. I)創建服務器連接對象,該對象負責接收來自中心服務器的任務請求命令,并利用從第二任務管理模塊(3. 2)獲得的端口號、臨時工作目錄以及對應該任務類型的仿真器調度接口路徑創建仿真器調度接口進程,并與仿真器調度接口進程建立TCP連接,之后如果任務請求命令中包含計算請求命令,則將其轉發給仿真器,最后第二請求命令轉發模塊(3. I)返回該服務器連接對象連接仿真器調度接口的TCP套接字句柄給第二任務管理模塊(3. 2),第二任務管理模塊(3. 2)根據中心服務器與子計算服務器的TCP套接字句柄、子計算服務器與仿真器調度接口的TCP套接字句柄和任務號調用第二回復命令轉發模塊(3. 3)創建客戶端連接對象,該對象負責接收來自仿真器調度接口的回復命令,并將其轉發給中心服務器;第二任務管理模塊(3.2)以任務號為關鍵字,服務器連接對象和客戶端連接對象為鍵值,將其添加到第二任務管理模塊(3. 2)維護的任務字典中、該任務字典為一個字典數據結構,用于記錄子計算服務器上所有任務號對應的服務器連接對象和客戶端連接對象;當第二任務管理模塊(3. 2)需要斷開與中心服務器的連接時,第二任務管理模塊(3. 2)通過任務號在任務字典中查找該任務對應的服務器連接對象和客戶端連接對象,并將之銷毀,之后刪除該任務號。
8.根據權利要求6所述的基于modelica建模語言的分布式實時交互仿真系統,其特征在于,子計算服務器(3)包括第二請求命令轉發模塊(3. I)、第二任務管理模塊(3. 2)、第二回復命令轉發模塊(3. 3)、第二仿真求解器器調用模塊(3.4); 第二任務管理模塊(3. 2)用于接收來自中心服務器的TCP連接請求,從第二仿真求解器器調用模塊(3. 4)獲取端口號和臨時工作目錄;第二任務管理模塊(3. 2)還調用第二請求命令轉發模塊(3. I)創建服務器連接對象,該對象負責接收來自中心服務器的任務請求命令,并利用從第二任務管理模塊(3. 2)獲得的端口號、臨時工作目錄以及對應該任務類型的仿真器調度接口路徑創建仿真器調度接口進程,并與仿真器調度接口進程建立TCP連接,之后如果任務請求命令中包含計算請求命令,則將其轉發給仿真器,最后第二請求命令轉發模塊(3. I)返回該服務器連接對象連接仿真器調度接口的TCP套接字句柄給第二任務管理模塊(3. 2),第二任務管理模塊(3. 2)根據中心服務器與子計算服務器的TCP套接字句柄、子計算服務器與仿真器調度接口的TCP套接字句柄和任務號調用第二回復命令轉發模塊(3. 3)創建客戶端連接對象,該對象負責接收來自仿真器調度接口的回復命令,并將其轉發給中心服務器;第二任務管理模塊(3.2)以任務號為關鍵字,服務器連接對象和客戶端連接對象為鍵值,將其添加到第二任務管理模塊(3. 2)維護的任務字典中、該任務字典為一個字典數據結構,用于記錄子計算服務器上所有任務號對應的服務器連接對象和客戶端連接對象;當第二任務管理模塊(3. 2)需要斷開與中心服務器的連接時,第二任務管理模塊(3. 2)通過任務 號在任務字典中查找該任務對應的服務器連接對象和客戶端連接對象,并將之銷毀,之后刪除該任務號。
9.根據權利要求1、2或3所述的基于modelica建模語言的分布式實時交互仿真系統,其特征在于, 仿真器(5)包括第三接收數據模塊(5. I)、數據緩存(5. 2)、命令解析模塊(5. 3)、求解計算模塊(5. 4)、結果數據過濾模塊(5.5)和第三回傳數據模塊(5.6); 第三接收數據模塊(5. I)用于接收來自求解器調度接口(4)的計算請求命令,并存放到數據緩存(5. 2)中,命令解析模塊(5. 3)解析數據緩存中存放的計算請求命令,并根據命令意義控制求解器計算模塊(5. 4)計算;求解器計算模塊(5. 4)用于將計算的結果保存在數據緩存(5.4)中,結果過濾模塊(5.5)從數據緩存(5.2)中取出數據并過濾后通知第三回傳數據模塊(5.6)發送給相連的仿真器調度接口(4)。
10.根據權利要求8所述的基于modelica建模語言的分布式實時交互仿真系統,其特征在于, 仿真器(5)包括第三接收數據模塊(5. I)、數據緩存(5. 2)、命令解析模塊(5. 3)、求解計算模塊(5. 4)、結果數據過濾模塊(5. 5)和第三回傳數據模塊(5. 6); 第三接收數據模塊(5. I)用于接收來自求解器調度接口(4)的計算請求命令,并存放到數據緩存(5. 2)中,命令解析模塊(5. 3)解析數據緩存中存放的計算請求命令,并根據命令意義控制求解器計算模塊(5. 4)計算;求解器計算模塊(5. 4)用于將計算的結果保存在數據緩存(5.4)中,結果過濾模塊(5.5)從數據緩存(5.2)中取出數據并過濾后通知第三回傳數據模塊(5.6)發送給相連的仿真器調度接口(4)。
全文摘要
本發明公開了一種基于modelica建模語言的分布式實時交互仿真系統,是結合Modelica建模語言支持多領域仿真建模的特點,并根據Modelica建模語言在實時交互仿真方面的薄弱環節,結合現有HLA仿真體系結構而提出。該系統通過中心服務器將異構的多臺計算機通過具有統一的通信標準、規范和協議的高速網絡互聯起來,以構成一個一體化仿真環境。系統借助客戶端、中心服務器、子計算服務器、仿真器調度接口和仿真器五個功能模塊來實現。多個客戶端和中心服務器通過TCP協議進行通信。系統的核心是提供了統一的仿真器調度接口。本發明使得開發新的仿真實驗更容易,降低了開發難度,提高了系統的可擴展性。
文檔編號G06F9/455GK102622262SQ20121000661
公開日2012年8月1日 申請日期2012年1月9日 優先權日2012年1月9日
發明者劉超, 張磊, 王曙光, 童圍, 董浩, 蔣文斌, 金海 , 馬瀟 申請人:華中科技大學