張劍
中國艦船研究設計中心,湖北武漢430064
基于CCM構件的HLA仿真開發研究
張劍
中國艦船研究設計中心,湖北武漢430064
HLA仿真作為新一代分布仿真體系結構,對仿真界產生了深刻影響。但是由于HLA與其它中間件技術沒有建立廣泛的聯系,使得HLA的可重用性僅僅局限在HLA范圍內,同時HLA的開發也具有很大的復雜性。在深入研究HLA仿真框架的基礎上,提出了一種基于CORBA構件模型(CCM)構件的HLA仿真開發方法,該方法利用CCM構件技術來實現各聯邦成員的具體功能。該方法提高了軟件重用率和仿真開發效率,并優化了HLA仿真系統的軟件層次結構。驗證中該方法成功運用于艦船作戰系統聯邦的指控系統聯邦成員仿真。結果表明該方法確實可行。
HLA;CORBA構件模型;軟件復用;構件包
HLA作為仿真領域的一種中間件技術,通過提供通用的、相對獨立的支撐服務系統,將應用層同底層支撐環境分離,即將具體的仿真功能實現、仿真運行管理、底層通信三者分開,目的是提高仿真組件的可重用性和互操作性。從HLA規范的提出到現在,HLA與其他領域一些類似的中間件技術 (如CORBA,EJB等)一直沒有建立廣泛的聯系,使得現有仿真組件的可重用性僅僅局限于HLA的范圍內。而且,HLA是從橫向的角度在聯邦成員的基礎上進行仿真集成,并不考慮仿真成員是如何設計與實現的。因此,其他分布式仿真技術要過渡到HLA,盡管系統的實際仿真行為并沒有多大的改變,但為了要將仿真移植到RTI支撐環境上,聯邦成員要重新開發,仿真組件代碼需要重新編寫。這些都嚴重阻礙了HLA的進一步發展,仿真領域迫切需要一種先進的軟件工程技術來解決這些問題。
近幾年來,相關人員在構件技術應用于HLA仿真方面進行了大量研究。文獻[1]探討了利用CCM開發符合HLA1516標準的仿真功能的方法。文獻[2]研究了CBD方法在HLA開發的應用,提出了基于HLA的仿真構件模型及其實現思路,闡明了實現的關鍵環節和方法。文獻[3]~[5]應用MDA的設計思想,對于HLA的模型設計,提出了一個基于CCM構件的仿真模型(SCM)。文獻[6]通過對比CCM和HLA,提出了一種基于構件的HLA開發模式。該模式借用了CCM的大量思想和概念。
本文在深入研究HLA仿真框架的基礎上,結合CCM商用技術,提出了一種基于CCM構件的HLA仿真開發方法。該方法利用CCM構件技術來實現聯邦成員的具體功能。本文不僅介紹了該方法的主題思想和程序框架,還作為重點詳細論述了其運行步驟。通過將該方法成功地運用于艦船作戰系統聯邦的指控系統聯邦成員仿真,表明該方法確實可行。
2.1 HLA仿真基本思想
HLA主要考慮在聯邦成員的基礎上如何進行聯邦集成[7,8],即如何設計聯邦成員間的交互以達到仿真的目的。其基本思想就是采用面向對象的方法設計、開發和實現仿真系統的對象模型,以獲得仿真聯邦的高層次的互操作和重用。在HLA中,互操作定義為一個成員能向其他成員提供服務和接收其他成員的服務。HLA定義了實現聯邦成員互操作的體系結構和機制。除了方便成員之間的互操作外,HLA還向聯邦成員提供靈活的仿真框架。在HLA框架下,一個典型的仿真聯邦的邏輯結構如圖1所示。

圖1 HLA仿真的邏輯結構
2.2 運行支撐環境RTI
RTI是一個按照HLA接口規范開發的軟件系統,它為仿真應用提供通用的、相對獨立的支撐服務。其主要作用有:
1)具體實現了HLA接口規范。HLA接口規范用文字定義了各種標準服務和接口,而RTI則用程序設計語言將這些標準服務和接口轉換成了標準的RTI API函數。
2)為仿真應用提供了仿真運行管理功能,使開發人員只需集中精力實現具體的仿真功能。
3)提供了底層通信傳輸服務,屏蔽了網絡通信程序實現的復雜性,使開發人員可以很容易地實現數據的發送和接收。
4)是仿真功能與仿真運行管理、底層通信傳輸三者分離的基礎。它使仿真系統具有較好的擴充性,各個組成部分的編程實現可以相對獨立地進行,很適合于團隊開發。
2.3 聯邦成員的運行流程
對于每一個聯邦成員,其運行流程主要包括以下環節:初始化聯邦運行數據、創建并加入聯邦、注冊RTI對象實例、聲明訂閱/發布關系、確定時間推進策略、數據處理循環、退出聯邦。數據處理循環是聯邦成員的核心環節,也是各個聯邦成員區別于彼此的主要環節。在該環節中,聯邦成員接收自己感興趣的數據,按照特定的規則或者算法進行處理,處理完畢后向網絡發布。
3.1CCM構件簡介
CCM鼓勵通過組合而不是繼承來重用軟件[9,10]。CCM構件提供了稱為端口的多種外部接口,以便與客戶、其他構件、CORBA服務等進行交互。CCM構件支持5種基本的端口:刻面/插座、事件源/事件槽和屬性。5種端口的表示方法如圖2所示。

圖2 CCM構件的端口示意圖
1)刻面:刻面的主要功能是用來向其它構件提供接口。另外,它還是CCM構件提供的與客戶交互的相互獨立的一組接口。刻面的實現被封裝在構件中,對客戶不透明。
2)插口。插口的主要功能是用來獲得其它構件的接口。另外,它還是一些指定的連接點。通過使用插口,構件能夠與其他對象進行連接,并調用這些對象的操作。
3)事件源。事件源的主要功能是發布特定的事件。它是指定發送特定類型事件的連接點。事件源分為Emitter和Publisher兩類。Emitter規定在某個時間只允許一個接收者與之連接,Publisher允許同時有多個接收者與之連接。
4)事件槽。事件槽的主要目的是接收特定的事件。它是指定接收特定類型事件的連接點。事件槽允許有多個事件源與之相連。
5)屬性。屬性主要用于構件的配置,配置工具使用屬性對構件的配置參數進行預先的設置。
3.2 基于CCM構件的軟件開發步驟
基于CCM構件的應用程序,其整個開發過程包括以下5個步驟:
1)構件設計。根據系統需要設計構件,定義構件和其實現信息。
2)構件實現。實現構件中具體的業務邏輯,并編譯生成相應的構件二進制文件。
3)構件打包。把構件實現者實現的二進制文件以及構件描述信息打包成為單個構件包。
4)構件組裝[11,12]。根據具體的功能需要把多個構件包組裝成一個構件集。構件集包含有多個構件包以及XML形式的構件集描述文件。圖3為構件組裝的效果示意圖。

圖3 構件組裝效果示意圖
5)構件部署。部署者根據構件集描述文件把構件集(或構件)安裝在指定的網絡節點上,激活構件實例并連接構件。
以上5個步驟中,構件打包和構件組裝可以使用可視化的工具來完成。
4.1 基于CCM的HLA仿真開發的主體思想
基于CCM構件的HLA開發的主體思想是,將聯邦成員代碼的核心部分——數據處理循環中的數據處理規則或者算法利用CCM構件的形式進行實現。其框架如圖4所示。
聯邦中各個聯邦成員的對外表現即對外接口主要是訂閱數據和發布數據,其內部主要是進行自身承擔的數據處理。具體實現的描述如下:

圖4 基于CCM構件的HLA程序框架
1)對于訂閱數據和發布數據,聯邦成員只需調用RTI接口模塊的API函數,具體的數據傳輸由運行支撐環境RTI完成。
2)對于數據處理,通過CCM構件集完成。聯邦成員在其主程序中,利用構建集提供的接口向構件集發送數據處理請求。構件集收到數據處理請求后,進行相應的處理,然后把處理結果返回給主程序。此時,聯邦成員的運行模式就是通常的客戶機/服務器(C/S)模式。主程序充當客戶機,構件集充當服務器。
基于CCM構件的HLA程序框架的主體部分就是各個聯邦成員的數據處理構件集。構件集由多個構件,按照如圖3所示的方式組裝而成。
4.2 基于CCM的HLA仿真開發的運行步驟
實驗中采用的相關軟件為:CCM:ACE-5.5+TAO-1.5+CIAO-0.5;RTI:RTI-1_3NGv3_2;VC7.1
基于CCM的HLA仿真開發的運行步驟大致分為開啟ORB命名服務,開啟rtiexec服務,構件部署,運行聯邦成員主程序。
4.2.1 開啟ORB命名服務
在CCM中,為了便于分布式開發,可以為每個構件定義一個有意義的別名。任何應用程序,即使和構件不在一個主機上,只需要知道這個別名,即可獲取相應構件的信息,從而創建構件實例,調用其提供的服務。這是通過CORBA規范提供的命名服務來實現的。命名服務提供從名字到對象引用的映射。CCM中的別名定義在構件配置文件中進行,構件配置文件中可以為構件包中的每個構件定義一個別名,具體是在屬性RegisterNaming中進行設置,圖5的代碼即為某構件定義了一個別名“ADD”。
當開啟命名服務后,主程序可以通過這個別名來訪問該構件。命名服務的開啟主要是調用CORBA規范的Naming_service服務,可以通過命令行方式進行。具體格式如下:
naming_service-ORBEndPoint iiop://<version>@<ipAddr:ipPort>[-m(1=enable multicast responses,0=disable(default)]
其中,version表示IIOP協議的版本;ipAddr和ipPort分別表示監聽請求的主機IP地址和端口號。-m表示是否使用多播方式。1表示使用,0表示不使用,默認情況下為0。一般都在開啟命名服務的主機上監聽請求,因此主機IP選為本機IP。而為了進行分布式開發,必須使用多波方式。因此,開啟命名服務的命令行一般寫成:
naming_service -ORBEndPointiiop://1.2@localhost:1234-m 1

圖5 構件配置文件中的命名服務代碼
4.2.2 開啟rtiexec服務
HLA運行時,需要首先開啟rtiexec服務。rtiexec是一個全局進程,主要功能是管理聯邦的創建、結束。每個聯邦成員通過與rtiexec的通信進行初始化,加入到相應的聯邦中。rtiexec實際上是一個運行程序。如果不引入CCM構件,即不同時運行ORB命名服務,那么直接運行rtiexec服務即可,不需要添加任何參數。如果同時運行ORB命名服務,那么就需要為rtiexec添加相應參數。rtiexec的格式為:
rtiexec-multicastDiscoveryEndpoint<ipAddr:ipPort>
其 中 ,ipAddr的 范 圍 為 224.0.0.0~239.255.255.255;ipPort的范圍為1024~65535。例如,可以寫成:
rtiexec-multicastDiscoveryEndpoint 224.0.0.1:1025
另外,還需要修改RID文件的相應行的ipAddr和ipPort。
(RtiExecutiveMulticastDiscoveryEndpoint 224.0.0.1:1025)
4.2.3 構件部署
在運行聯邦成員之前,首先應該完成構件的部署。即根據構件集描述文件,通過一些命令把構件集安裝在指定的網絡節點上。大致步驟如下:
1)利用Nodemanager命令啟動可供構件部署、運行的節點node。每個構件對應一個節點。
2)利用Execution_Manager命令完成邏輯節點與具體nodeApplication之間的關聯。
3)利用 Plan_Launcher命令完成構件的部署。該過程需要把構件集描述文件作為Plan_Launcher命令的參數。
以上命令均可以通過命令行方式進行。
4.2.4 運行聯邦成員主程序
完成以上全部工作后,就可以運行聯邦成員主程序。在聯邦成員主程序數據處理循環中,通過解析構件提供的別名,即可創建構件實例,進而調用該構件對應的接口函數,由構件來完成具體的數據處理。
4.3 基于CCM的指控系統聯邦成員的仿真應用
為了驗證以上方法的可行性,我們構建了一個艦船作戰系統的HLA聯邦,其中的指控系統采用基于CCM構件的方法實現。整體框架如圖6所示。

圖6 指控系統采用CCM實現的作戰系統聯邦框架
在指控系統聯邦成員的開發中,主程序和構件集分別由不同的人員承擔,表現出了很好的團隊開發性。聯邦運行正常,說明基于CCM構件實現聯邦成員的仿真是完全可行的。
4.4 基于CCM的HLA仿真開發的優點
將CCM構件技術應用到HLA仿真中,在發揮HLA自身優勢的基礎上,更具有以下優點:
1)提高了開發效率
對于每個聯邦成員來說,其中的數據處理是最關鍵且最難開發的環節。采用CCM構件技術之后,開發人員可以通過多種渠道獲取構件。可以自己編寫構件,也可以利用已有的商業構件或者其他開發人員編寫的構件。這樣,大大減少了重復勞動,提高了軟件開發效率。
2)應用程序層次清晰
引入CCM技術之后,HLA的主程序框架負責進行聯邦成員的日常維護以及數據的顯示,具體的數據處理由構件集在后臺完成,即實現了數據處理和數據應用的分離,使得程序層次相當清晰。
3)更加有利于團隊并行開發
RTI有效分離了仿真功能、仿真運行管理與底層通信傳輸,使得HLA仿真系統擴充容易,各個聯邦成員的實現可以相對獨立地進行,也就是說,RTI使得聯邦成員之間的團隊并行開發成為可能。在聯邦成員的內部數據處理中引入CCM技術,分離了數據處理和數據應用,使得開發人員可以相對獨立地并行進行數據處理和數據應用的代碼開發,即實現了聯邦成員內部的團隊并行開發。
4)可以很方便地進行混合語言開發
以往的HLA開發,由于數據處理循環的代碼沒有分離出來,因此每個聯邦成員只能使用一種編程語言開發。引入CCM技術之后,由于最終使用的是構件的二進制實現,即構件實現具有語言無關性。開發人員可以根據每個聯邦成員的特點、需求以及自己的偏好選擇最適合的語言來實現構件。
本文在深入研究HLA仿真框架的基礎上,結合當前流行的CCM構件模型,提出了一種基于CCM構件的HLA仿真開發方法。該方法在保持HLA優勢不變的基礎上,使得軟件層次結構更加清晰,同時提高了軟件復用率,更適合團隊開發。
[1]張春光,萬曉東,王云強.基于CCM符合HLA1516標準的戰場仿真模型研究[J].計算機仿真,2005(z1):121-123,247.
[2]李立綱,潘力,劉廣宇.基于構件的HLA系統開發[J].計算機仿真,2005,22(5):124-128.
[3]柏曉莉,柏曉輝,李恒峰,等.基于模型驅動的HLA建模仿真研究[J].計算機仿真,2007,24(6):102-105.
[4]RADESKI A,PARR S,KEITH-MAGEE R.Componentbased development extensions to HLA[C]//Proceedings of the 2002 Spring Simulation Interoperability Workshop(SISO Spring 2002),March 2002.
[5]RADESKI A,PARR S.Towards a simulation component model for HLA[C]//Proceedings of the 2002 Fall Simula鄄tion Interoperability Workshop(SISO Fall 2002),Novem鄄ber,2002.
[6]RADESKI A,PARR S,KEITH-MAGEE R,et al.Compo鄄nent-based development extensions to HLA[C]//Proceed鄄ings of the 2002 Spring Simulation Interoperability Work鄄shop(SISO Spring 2002),March,2002.
[7]戰玉芝,劉懷勛,王麗芹,等.基于HLA的仿真程序設計研究及其應用[J].計算機仿真,2007,24(7):146-148,275.
[8]周彥,戴劍偉.HLA仿真程序設計[M].北京:電子工業出版社,2002.
[9]潘慧芳,周興社,於志文.CORBA構件模型綜述[J].計算機應用研究,2005,22(5):14-15,26.
[10]張劍,董曉明.基于CCM構件的作戰系統互操作策略研究[J].艦船電子工程,2008,28(12):35-37,88.
[11]呂行,王志堅,許峰.CORBA構件組裝技術研究與應用[J].計算機與現代化,2004(7):1-4.
[12]許峰,陳智強,黃皓,王志堅.基于CCM的軟件構件組裝技術的研究[J].計算機科學,2006,33(8):232-235.
HLA Simulation Development Research Based on CORBA Component Model
Zhang Jian
China Ship Development and Design Center,Wuhan 430064,China
High Level Architecture(HLA),which is a new-generation distributed simulation architec鄄ture,has greatly influenced today's simulation field.But owing to its little contact with other middleware technology,the reusability of HLA has been restricted within the area of HLA.Its complexity also affects its development.Based on the thorough research of HLA simulation framework,a HLA simulation de鄄veloping method based on CORBA Component Model(CCM)was proposed.It used CCM to implement the real function of every federate.This method can not only advance the software reuse-rate and the de鄄velopment efficiency,but also optimize the software hierarchy of HLA simulation system.The validation shows that it is feasible for the method to be successfully applied to the simulation of command system federate member in the ship combat and control system federation.
High Level Architecture;CORBA Component Model;software reuse;component package
TP391.9
A
1673-3185(2009)06-70-05
2009-02-07
海裝“十一五”預研項目(1010108010201)
張 劍(1981-),男,助理工程師。研究方向:軟件體系結構、分布式仿真。E鄄mail:zhangjian99@tsinghua.org.cn