KY-RTI分佈模擬技術:第一章 簡介
第一章 簡介
高層體系結構(High Level Architecture,HLA)是美國國防部為了解決美軍在各個領域開發出來的多種模型和各類模擬系統的互聯和互操作問題而提出的一種分散式模擬標準,而按照HLA介面規範實現的軟體則被稱之為執行支撐平臺(Run Time Infrastructure,RTI)。HLA定義了一個通用的、靈活的、可伸縮的、可重用的模擬軟體體系結構,實現了基於元件“即插即用”的分散式模擬思想。
1996年8月,美國國防部建模和模擬辦公室(Defense Modeling & Simulation Office,DMSO)頒佈了第一個HLA標準HLA 1.0,DMSO的最新標準為1998年2月頒佈的HLA 1.3。1997年12月,HLA 1.3被模擬互操作標準化委員會SISC(Simulation Interoperability Standards Committee)接納為IEEE標準草案,並在2000年9月被正式接納為IEEE 1516標準。當前的IEEE1516標準由瑞典Pitch公司主導,該公司實現的RTI軟體為pRTI。
HLA極大地豐富和促進了各國模擬事業的發展,並已發展成為分散式模擬領域的前沿和熱點技術。
KY-RTI是麒麟RTI的簡稱,旨在為國產作業系統提供全方位支援。KY-RTI遵循HLA1.3標準,採用HLA1.3標準實現KY-RTI主要基於以下幾點理由。
(1)HLA1.3簡單實用,程式設計方便。與之相對,IEEE1516標準則更加規範化,但程式設計相對複雜。以引數型別來說,IEEE 1516對引數型別進行了更復雜的封裝。邏輯時間一般用浮點數就可以實現了,通過“+”、“-“、“<”、“>”等運算子進行邏輯時間的運算和比較操作;但在IEEE1516標準中卻無法做到,邏輯時間必須例項化,再通過呼叫物件類中的方法來進行運算和比較。IEEE 1516這種封裝看似比HLA1.3更加標準化了,但使用起來卻不方便。
(2)美軍幾乎都在使用DMSO自己定義的HLA1.3標準,而不是一個由他國公司主導的模擬標準。
(3)遵循HLA1.3標準,可以更好地相容原有模擬系統。像10多年以前的模擬系統,一般都是基於HLA1.3標準開發,但這些模擬程式現在一般很難執行在最新的作業系統和CPU上;但通過KY-RTI可以方便地移植到最新的作業系統和CPU上。
KY-RTI的特點概括如下:
(1)與DMSO RTI-1.3NGv6完全相容
DMSO RTI-1.3NGv6是DMSO開發的一個RTI軟體。KY-RTI採用了與DMSO RTI-1.3NGv6完全一樣的.h檔案和庫檔名,因此與DMSO RTI-1.3NGv6完全相容。採用DMSO RTI-1.3NGv6編寫的程式幾乎不需要修改任何程式碼即可移植到KY-RTI,包括Windows程式和Linux程式。
(2)支援Linux和Windows作業系統
除了支援Windows,KY-RTI為Linux和各種國產作業系統和國產CPU提供全面支援。當前,KY-RTI在x86、飛騰CPU,在RedHat、CentOS、Ubuntu、優麒麟、銀河麒麟等作業系統上都執行良好,並且能夠很好地移植到其他國產作業系統和CPU。
(3)支援GNU C++、Qt、Java、Visual C++、Visual C#
KY-RTI支援多種程式設計語言,包括GNU C++、Qt、Java、Visual C++、Visual C#。Java支援OpenJDK和Oracle JDK、JRE。Visual C++版本包括VC6.0、VC2005、VC2008、VC2010、VC2013等。
KY-RTI支援基於不同作業系統、不同CPU、不同程式設計語言開發的模擬成員之間實現透明通訊,就好像這些模擬成員在同一臺計算機上毫無障礙地進行資料通訊。
(4)堅持“大道至簡”的設計原則
對於C++介面而言,KY-RTI採用了與DMSO RTI-1.3NGv6完全一樣的.h檔案和庫檔名。但對於Java和Visual C#來說,則採用了能簡單則儘量簡單的原則,所有Handle(例如模擬成員控制代碼、物件類控制代碼、物件例項控制代碼、互動類控制代碼、引數控制代碼等)都用int表示,所有時間都用double表示。從而有效地提高使用者的程式設計效率。
(5)融合IEEE1516標準的優點,支援使用tick和不使用tick兩種程式設計方法
在基於HLA1.3標準開發時間管理服務的程式時,模擬成員需要不斷呼叫tick服務來接收來自RTI的回撥訊息;否則將收不到訊息。KY-RTI對此進行了功能增強,既可以按照HLA1.3標準,採用tick服務來接收回調訊息;也可以不採用tick服務而直接接收回調訊息。
當模擬程式第一次執行時,會在當前目錄產生1個叫做“RTI.rid”的檔案。RTI.rid是遵循HLA1.3標準實現的RTI所採用的檔案。KY-RTI對其功能進行了擴充套件,如圖1.1所示,該檔案定義了RTI伺服器的IP地址和埠號;另一方面還定義了一個tick開關標識。圖中的IP地址為127.0.0.1,即為本機;埠號為10000,可在configure.rti中修改。“;; UsingTickSwitch On”為tick開關標識,該標識以“;;”開頭,其他RTI會把該行作為註釋行而忽略;KY-RTI會根據該標識確定模擬成員是否使用tick服務;設定為“;; UsingTickSwitch On”表示使用tick服務;設定為“;; UsingTickSwitch Off”表示不使用tick服務。如果沒有這一行,則預設表示使用tick服務;因此,基於DMSO RTI-1.3NGv6開發的程式,其RTI.rid檔案中並沒有這一行,但同樣可以在KY-RTI上執行。
圖1.1 自動生成的RTI.rid
1.3 章節說明
本文主要圍繞KY-RTI在GNU C++、Qt、Java、Visual C++、Visual C#等多個程式設計語言的模擬成員開發方法進行介紹。前三種語言分別針對KY-RTI在Linux軟體包中的聊天程式和時間管理程式進行介紹;後兩種語言通過KY-RTI在Windows軟體包中的ping、pong程式進行介紹。通過相近程式的比較,使用者可以迅速地掌握基於KY-RTI開發模擬系統的方法。
第一章,本章介紹了KY-RTI遵循HLA1.3標準的原因、KY-RTI自身的優點。對於使用者而言,需要重點關注圖1.1,在程式設計中會經常用到。
第二章,本章介紹了KY-RTI在Linux和Windows系統下的安裝方法。
第三章,本章介紹了物件模型模板的概念,再次探討了將物件類和互動類作用於資料交換時,在很多情況下是等價的。另外,介紹了基於KY-OMT工具建立fed檔案的方法。
第四章,本章介紹了基於GNU C++開發兩個示例程式的方法,包括聊天程式和時間管理程式。
第五章,本章介紹了使用Qt Creator開發聊天程式和時間管理程式的方法。聊天程式是一個控制檯Qt程式,而時間管理程式則是一個圖形介面的Qt程式。時間管理程式是一個接近真實模擬系統的典型用例。
第六章,本章介紹了基於Java開發兩個示例程式的方法,包括聊天程式和時間管理程式。使用者應主要關注Java程式的介面和呼叫形式,用例程式的邏輯在前面章節中已有多次介紹。另外,Java程式的使用方式與Visual C#較為相似,兩者可參照檢視。
第七章,本章介紹了基於Visual C++開發ping、pong示例程式的方法。
第八章,本章介紹了基於Visual C#開發ping、pong示例程式的方法。另外,Visual C#程式的使用方式與Java較為相似,兩者可參照檢視。
第九章,本章介紹了3個演示系統。一是基於銀河麒麟作業系統實現了GNU C++、Qt、Java三種程式的互操作;二是基於Windows 7實現了Visual C++和Visual C#兩種程式的ping-pong測試;三是在飛騰和x86兩種CPU型號的機器上,基於銀河麒麟作業系統和Windows 7實現了GNU C++、Qt、Java、Visual C++和Visual C#等各種程式的互操作功能。在這些程式中,有些使用了tick服務,有些則沒有使用tick服務。結果表明KY-RTI具有很好的整合性,能夠把基於不同CPU、不同作業系統、不同程式設計語言、不同HLA服務呼叫方式開發的模擬程式完美地整合在一起。