1 引 言 仿真技術(shù)作為人類(lèi)第三種認識、改造客觀(guān)世界的重要手段已經(jīng)深入應用到各個(gè)領(lǐng)域并取得了很多成果,如軍事、電力、以及能源等。在各類(lèi)應用需求的作用下仿真技術(shù)已經(jīng)發(fā)展形成綜合性的專(zhuān)業(yè)技術(shù)體系,特別是DIS,HLA等技術(shù)的發(fā)展給仿真的應用帶來(lái)了新的機遇。 分布式協(xié)同工作網(wǎng)絡(luò )系統(Distributed CollaborativeWorking Network System)是指分布在不同平臺上的多個(gè)處理系統,通過(guò)TCP/IP網(wǎng)絡(luò )進(jìn)行數據交互,完成同一個(gè)任務(wù),達到快速解決問(wèn)題及實(shí)現協(xié)同工作。作為DIS和HLA仿真系統中底層必備的網(wǎng)絡(luò )通信模塊,在實(shí)際開(kāi)發(fā)中各Agent封裝自己底層通信模塊,分布式各節點(diǎn)只暴露他對外通信接口,因此使各個(gè)節點(diǎn)的通信細節不明確、耦合度很差;造成開(kāi)發(fā)資源的極大浪費,以及開(kāi)發(fā)成本的增加。同時(shí)也讓仿真系統開(kāi)發(fā)人員需要花大部分精力對底層通信進(jìn)行調試,這種工作非常繁瑣,同時(shí)也不易進(jìn)行。本文將重點(diǎn)介紹應用在HLA仿真系統中新型底層通信組件設計方案及實(shí)現方法。 2 HLA簡(jiǎn)介及組件開(kāi)發(fā)模型 2.1 HLA高層體系結構 分布交互仿真(DIS)技術(shù)從產(chǎn)生(SIMENT計劃)到DIS2.X,IEEE1278.X系列協(xié)議和ALSP協(xié)議制定,進(jìn)而發(fā)展到今天的HLA,都是力圖解決系統建模與系統仿真(Modeling and Simulation,M&S)領(lǐng)域存在的問(wèn)題:絕大多數仿真器的應用實(shí)現較為獨立,仿真器之間的互操作性和重用性差;開(kāi)發(fā)、維護和使用費時(shí)且成本高;可驗證性、有效性和置信度較差。HLA就是從體系結構上建立這樣的一個(gè)框架,他能盡量涵蓋M&S領(lǐng)域中所涉及的各種不同類(lèi)型仿真系統,并利于他們之間的互操作性和重用性。同時(shí)能利用不斷發(fā)展的新技術(shù),來(lái)滿(mǎn)足復雜大系統的仿真要求。HLA按照面向對象的思想和方法來(lái)構建仿真系統,他的基本思想是不考慮如果有對象構造成員,而是在假設已有成員的情況下考慮如何構建聯(lián)邦。采用面向對象的方法來(lái)設計、開(kāi)發(fā)和實(shí)現方針系統的對象模型(OM)以獲取聯(lián)邦的高層次的互操作和重用。雖然HLA本身不能完全實(shí)現互操作,但他定義了實(shí)現聯(lián)邦成員互操作的體系結構和集中,提供靈活的仿真框架。由各聯(lián)邦成員和運行支持環(huán)境RTI(Run-Time Infrastrueture,運行時(shí)間基礎結構或運行支撐環(huán)境)一起構成一個(gè)分布式仿真系統,用于集成分布的各種聯(lián)邦成員,在聯(lián)邦運行時(shí)提供各種標準的服務(wù),并具有良好的可擴充性。主要包含聯(lián)邦管理、聲明管理、對象管理、所有權管理、時(shí)間管理和數據分發(fā)管理。一個(gè)典型的機遇HLA的仿真邏輯結構圖如圖1所示: 2.2 底層網(wǎng)絡(luò )通信組件模型 基于組件開(kāi)發(fā)(Component-Based Development,CBD)是當前的最新發(fā)展階段,是解決軟件復用和重用的突破點(diǎn),能更好地滿(mǎn)足目前軟件開(kāi)發(fā)的需求。他是經(jīng)過(guò)封裝的、定義完備接口可發(fā)布的軟件包,提供特定的服務(wù),并期望得到外部特定的接口輸入。從某種程度上說(shuō)他也是一種程序接口,實(shí)現系統模塊之問(wèn)的互操作和重用。每個(gè)組件包含一組屬性、事件和方法,組合若干組件就可以生成設計者所需要的特定程序,并能集成到其他軟件產(chǎn)品中。應用程序開(kāi)發(fā)者可以購買(mǎi)現成的組件,他們只要利用現有的組件,再加上自己的業(yè)務(wù)規則,就可以開(kāi)發(fā)一個(gè)應用軟件?傊,組件開(kāi)發(fā)技術(shù)使軟件設計變得更加簡(jiǎn)單和快捷,并極大地增強軟件的重用能力。他相對系統軟件體系獨立的不關(guān)心軟件系統業(yè)務(wù)實(shí)現,因此可以獨立于系統軟件的開(kāi)發(fā),從而降低軟件調試困難。 本網(wǎng)絡(luò )底層通信組件主要為解決基于HLA分布式仿真應用系統中底層網(wǎng)絡(luò )通信接口通信,分布各仿真模擬器節點(diǎn)的網(wǎng)絡(luò )數據交換,以及網(wǎng)絡(luò )通信服務(wù)質(zhì)量(QOS)的保證。提高系統運行的時(shí)效、完整的數據報文交換、及數據報文的丟失解決、冗余數據檢測等。下面是為HLA分布式仿真系統設計的網(wǎng)絡(luò )通信組件的設計的模型結構圖,各仿真模擬器節點(diǎn)通過(guò)他實(shí)現對整個(gè)模擬交換和互操作,實(shí)現協(xié)同完成系統模擬仿真工作。仿真模型結構如圖2所示。 3 仿真網(wǎng)絡(luò )組件設計與實(shí)現 3.1 仿真網(wǎng)絡(luò )通信組件的設計 本網(wǎng)絡(luò )通信組件采用CORBA設計思想對網(wǎng)絡(luò )底層通信協(xié)議異步套接字(Socket)進(jìn)行的封裝,統一實(shí)現對整個(gè)系統的通信的支持。CORBA(公共對象請求代理架構) 由OMT提出,用于在不同進(jìn)程(程序)之間,甚至是不同物理機器上的進(jìn)程(程序)之間通訊。底層技術(shù)依靠RPC(遠程過(guò)程調用)實(shí)現。面向對象的軟件,以數據為中心設計,對象類(lèi)既具有模塊的封裝性和類(lèi)屬等特性,還具有繼承特性,極大地提高了類(lèi)的可擴充性和可再用能力。對象類(lèi)較之于傳統軟件的功能模塊而另具有的優(yōu)點(diǎn)是:易于理解,具有完整的語(yǔ)義特征;易于擴充和修改,具有較高的通用性和適應性;易于構造組裝,具有規范的外部接口。 基于CORBA的對象請求代理ORB為客戶(hù)機/服務(wù)器開(kāi)發(fā)提供了中間件的新格式。把IDL說(shuō)明編譯為面向對象程序設計語(yǔ)言的實(shí)代碼后,客戶(hù)可以調用已知對象的操作。在某些應用中,用戶(hù)并不了解應用接口編譯信息,但也要求調用對象的操作,這時(shí)就要動(dòng)態(tài)調用接口來(lái)調用用戶(hù)的操作。具體的對象操作的調用實(shí)際上是用動(dòng)態(tài)調用接口來(lái)完成的。在基于HLA仿真應用系統的各個(gè)仿真節點(diǎn)實(shí)現互操作,及協(xié)同工作完成整個(gè)仿真任務(wù)都是通過(guò)網(wǎng)絡(luò )數據進(jìn)行數據交換,及對數據報文進(jìn)行解析、分發(fā)、操作實(shí)現的任務(wù)協(xié)同,因此對于HLA仿真應用對整個(gè)TCP報文或者UDP報文采用統一的格式,例如:對整個(gè)系統環(huán)境網(wǎng)、系統模擬仿真網(wǎng)絡(luò )中傳輸的TCP,UDP報文采用統一的報文標識,如系統仿真時(shí)統UDP報文標示為0x1,那么在仿真系統中收到標識為0x1的UDP報文。各個(gè)分布式仿真節點(diǎn)將對該報文進(jìn)行時(shí)統系統對時(shí),實(shí)現整個(gè)仿真系統的時(shí)間一致行,保證對整個(gè)仿真過(guò)程中時(shí)間與現實(shí)的同步,選擇異步Socket進(jìn)行自我封裝成能夠符合HLA仿真系統的報文傳輸要求。同時(shí)組件的設計安裝面向對象設計的一般過(guò)程、軟件工程的要求。 設計如下的組件的結構如圖3所示。 3.2 通訊組件的實(shí)現 作為一種通信組件,他不僅需要完成上層HLA仿真主程序給他的發(fā)送報文的分發(fā)及從其他仿真節點(diǎn)收到的仿真數據報文的解析,還提供對外清晰的交互接口。同時(shí)作為仿真工作的一個(gè)部件,他需要工作在一個(gè)復雜的網(wǎng)絡(luò )環(huán)境中,在不能很多程度上與占有寶貴的分布式處理機的處理時(shí)問(wèn),作為網(wǎng)絡(luò )組件經(jīng)常會(huì )在某些時(shí)間,等待連接、或者等待數據報文而發(fā)生嚴重的阻塞,以及需要不斷的監聽(tīng)端口,從而耗費處理機時(shí)間,信號Windows提供了異步SOCKET的API接口使得組件設計能夠一直以異步方式工作的應用層,不斷向網(wǎng)絡(luò )層接收和發(fā)送數據報文。但是單純實(shí)用原始異步SOCKET的API接口仍然不能滿(mǎn)足某些特定的要求,不能很好地融入HLA仿真應用系統中去。因此首先對Windows提供的異步SOCKET套接字CAsyncSocket進(jìn)行特定封裝。 下面給出部分封裝代碼: 在應用中申請一個(gè)組件的主構造類(lèi),在該類(lèi)中去實(shí)例化經(jīng)過(guò)封裝的異步套接字來(lái)進(jìn)行底層網(wǎng)絡(luò )數據的收發(fā),組件實(shí)例可以接收到初始化該組件的操作句柄,完成配合仿真節點(diǎn)完成仿真主題工作,數據的交互,數據的處理等。 下面是主題組件的實(shí)體類(lèi)。 仿真節點(diǎn)只要向組件發(fā)送一啟動(dòng)命令(IniComponent(HWND m_hWnd))組件就將啟動(dòng)并完成組件的初始化,如組件全局SOCKET的版本請求、版本協(xié)商、經(jīng)過(guò)封裝后的異步套接字實(shí)例化、SOCKET通信API的實(shí)例初始化等。同時(shí)組件完成初始化以后,組件將一直開(kāi)始監聽(tīng)本機指定端口、并等待接收本仿真節點(diǎn)的消息發(fā)送命令等。仿真節點(diǎn)在按照HLA仿真體系中規定的報文協(xié)議填寫(xiě)完成數據報文以后,只需要調用組件對外的接口函數:Send-Data(char *bur,char*pDataCode,char*pIDNode)即能完成把報文發(fā)送到指定目的仿真接點(diǎn),協(xié)同完成仿真模擬任務(wù)。組件在接收到網(wǎng)絡(luò )消息的時(shí)候調用OnReceive(intnErrorCode)進(jìn)行報文的預處理,確定是否需要仿真節點(diǎn)處理該報文。如首先對接收到的報文進(jìn)行長(cháng)度分析如果長(cháng)度很小為系統發(fā)送確認報文,就不需要仿真主程序進(jìn)行處理,為仿真節點(diǎn)主處理器節省處理時(shí)間。如果長(cháng)度超過(guò)一定長(cháng)度,是仿真節點(diǎn)中協(xié)同報文的話(huà),組件將首先對報文得到報文標識頭(GetNodeByName(char*IdNode,CString strPeerAddress))然后進(jìn)行報文解析,并向仿真主程序發(fā)送消息函數::PostMessage(…)到主程序中,進(jìn)行最終的報文處理工作;如界面更新、數據交互處理等,同時(shí)組件線(xiàn)程在完成了對解析以后需要對發(fā)送方發(fā)送解析和成功解析報文,以確認發(fā)送方的發(fā)送報文別目的節點(diǎn)成功接受并成功解析。 4 結 語(yǔ) 基于HLA高層體系結構的分布式仿真系統中通過(guò)分布在不同物理點(diǎn)的分布式仿真節點(diǎn),借助網(wǎng)絡(luò )進(jìn)行數據報文交互、仿真同步、仿真協(xié)同完成對真實(shí)世界的模擬。作為仿真系統在必備的通信模塊,在頻繁地設計和不斷地重寫(xiě),在一個(gè)特定的仿真領(lǐng)域中需不同的仿真網(wǎng)絡(luò )通信模塊,重復的開(kāi)發(fā)和設計使得各個(gè)仿真節點(diǎn)之間的交互需要不斷地協(xié)調協(xié)議接口;不統一的設計方案也同樣讓仿真開(kāi)發(fā)人員陷入重復工作的泥潭中。本文針對以上的開(kāi)發(fā)弊端,采用現代軟件設計思想,組件的開(kāi)發(fā)設計模式,使得代碼得以最大程度上的共享,并易于調試。他使得仿真開(kāi)發(fā)人員能夠花最小的時(shí)間和代價(jià)協(xié)調網(wǎng)絡(luò )通信模塊,從而集中精力在仿真主題功能的設計和實(shí)現上。在實(shí)際應用中本仿真組件清晰、而又簡(jiǎn)單的對外接口,對基于HLA分布式仿真應用系統功能開(kāi)發(fā)者基本上不需要了解他的設計和實(shí)現,就能很好地使用本組件完成通信要求,從而將最大程度上為開(kāi)發(fā)者節省項目時(shí)間、項目花費。 組件采用異步SOCKET套接字進(jìn)行自封裝,隱藏了組件通信如何進(jìn)行的過(guò)程,從而不必要求對HLA傳真系統功能開(kāi)發(fā)者關(guān)心底層網(wǎng)絡(luò )通信是如何進(jìn)行的。同時(shí)組件工作的異步模式下,對系統不會(huì )產(chǎn)生過(guò)大的資源浪費,同時(shí)也能很好地滿(mǎn)足HLA分布式仿真節點(diǎn)的實(shí)時(shí)性要求。 |