王增全,黃夏旭,吳 艷,申焱華
(1. 北京航天發(fā)射技術(shù)研究所,北京,100076;2. 北京科技大學(xué),北京,100083)
基于Socket的ADAMS與HLA/RTI適配器開發(fā)
王增全1,黃夏旭2,吳 艷1,申焱華2
(1. 北京航天發(fā)射技術(shù)研究所,北京,100076;2. 北京科技大學(xué),北京,100083)
高層體系結(jié)構(gòu)(High Level Architecture,HLA)/運(yùn)行實(shí)時(shí)支撐環(huán)境(Run Time Infrastructure,RTI)是一種先進(jìn)的仿真體系結(jié)構(gòu),由于其較好的可重用性和互操作性被廣泛用作協(xié)同仿真中的仿真軟總線。ADAMS作為多體動(dòng)力學(xué)軟件,是進(jìn)行多學(xué)科聯(lián)合仿真的常用軟件,但是本身并不支持HLA/RTI,無法直接參與基于HLA/RTI的協(xié)同仿真。從分布式協(xié)同仿真需求出發(fā),提出了一種基于Socket的ADAMS與HLA/RTI適配器實(shí)現(xiàn)思路,詳細(xì)介紹了實(shí)現(xiàn)途徑,并進(jìn)行了驗(yàn)證。結(jié)果表明:該適配器的開發(fā)實(shí)現(xiàn)了工程應(yīng)用系統(tǒng)在分布異構(gòu)的虛擬試驗(yàn)運(yùn)行支撐環(huán)境下的即插即用和互操作。
Socket;ADAMS;高層體系結(jié)構(gòu);運(yùn)行實(shí)時(shí)支撐環(huán)境;接口開發(fā)
由于產(chǎn)品越來越高的復(fù)雜性,需要將原有的單領(lǐng)域仿真(多體動(dòng)力學(xué)、控制系統(tǒng)和液壓系統(tǒng)仿真等)聯(lián)合起來,進(jìn)行多領(lǐng)域協(xié)同仿真,實(shí)現(xiàn)不同領(lǐng)域的知識(shí)共享和設(shè)計(jì)交流,降低設(shè)計(jì)對(duì)大型試驗(yàn)、調(diào)試試驗(yàn)的依賴程度,縮短研制周期,提高設(shè)計(jì)效率。目前,多學(xué)科聯(lián)合仿真可以采用基于統(tǒng)一語言、模型接口和軟總線的3種實(shí)現(xiàn)方式。其中基于軟總線的多學(xué)科聯(lián)合仿真技術(shù)能夠?qū)崿F(xiàn)多領(lǐng)域、分布異構(gòu)模型的重用和互操作,是近年來復(fù)雜聯(lián)合仿真技術(shù)發(fā)展的重點(diǎn)方向之一。
基于軟總線的多學(xué)科協(xié)同仿真將多種仿真應(yīng)用聯(lián)合在一起進(jìn)行分布協(xié)同仿真,可完成功能更為復(fù)雜的系統(tǒng)仿真,但是也面臨著一些問題,比如如何將各種商用仿真軟件改造成分布式仿真所要求的形式等[1]。目前,多體動(dòng)力學(xué)軟件ADAMS在機(jī)械動(dòng)力學(xué)仿真應(yīng)用中較為廣泛,但是對(duì)于其參與軟總線分布式仿真的研究較少,若開發(fā)一種其與軟總線分布協(xié)同仿真中間適配器,將ADAMS在多體領(lǐng)域的專業(yè)技術(shù)應(yīng)用到多學(xué)科協(xié)同仿真中具有重要意義[2,3]。
基于Socket的數(shù)據(jù)通信機(jī)制[4],開發(fā)了多體系統(tǒng)動(dòng)力學(xué)軟件 ADAMS與高層體系結(jié)構(gòu)(High Level Architecture,HLA)/運(yùn)行實(shí)時(shí)支撐環(huán)境(Run Time Infrastructure,RTI)仿真軟總線之間數(shù)據(jù)交互和仿真過程驅(qū)動(dòng)接口,在軟總線平臺(tái)基礎(chǔ)上實(shí)現(xiàn)軟件的開啟、仿真時(shí)間和步長控制及數(shù)據(jù)傳輸?shù)裙δ?。?shí)現(xiàn)工程應(yīng)用系統(tǒng)在分布、異構(gòu)的虛擬試驗(yàn)運(yùn)行支撐環(huán)境下的即插即用和互操作。
ADAMS與其它學(xué)科的數(shù)據(jù)交互接口主要集中在ADAMS/View 和 ADAMS/Solver兩 個(gè) 模 塊 。ADAMS/Solver主要是通過用戶子程序[5](Subroutine)獲取求解器在計(jì)算時(shí)的狀態(tài)量(如位移、速度、加速度等)向外傳輸,同時(shí)向求解器返回所需的外界值。而ADAMS/View主要是通過調(diào)用ADAMS/Controls接口模塊實(shí)現(xiàn)數(shù)據(jù)的傳輸和對(duì)求解器仿真計(jì)算的控制。
ADAMS開放了其Controls接口與其它學(xué)科軟件進(jìn)行數(shù)據(jù)交換和聯(lián)合仿真,但是該接口不具有標(biāo)準(zhǔn)性、開放性,接口擴(kuò)充困難、調(diào)用方式單一,且不支持基于軟總線的分布式仿真方法,缺乏通用性和靈活性。ADAMS/Solver通過Subroutine方式實(shí)現(xiàn)外部仿真過程對(duì)ADAMS核心算法的調(diào)用,可用于用戶函數(shù)開發(fā)、仿真過程控制等,能夠支持大部分的用戶二次開發(fā)。Subroutine利用通用程序設(shè)計(jì)語言[6](FORTRAN或C語言)開發(fā)和編譯,依據(jù)多學(xué)科協(xié)同仿真提出的數(shù)據(jù)交換流程、內(nèi)容、方式、軟件內(nèi)部仿真的控制等要求,通過程序開發(fā)實(shí)現(xiàn)其與軟總線之間的通信。
目前,ADAMS沒有提供與HLA/RTI的接口,為了實(shí)現(xiàn)基于HLA的多領(lǐng)域協(xié)同仿真,需要通過一個(gè)中間件(適配器),將RTI與ADAMS軟件連接起來,負(fù)責(zé)數(shù)據(jù)交換和時(shí)間同步。通過一個(gè)能夠與遠(yuǎn)程計(jì)算機(jī)相互通信的底層API(即Socket服務(wù)器),采用Socket服務(wù)器與客戶端通信方式,實(shí)現(xiàn)ADAMS軟件與仿真軟總線之間的通信、數(shù)據(jù)交換以及仿真控制權(quán)的轉(zhuǎn)移,從而實(shí)現(xiàn)聯(lián)合仿真,適配器與ADAMS、RTI的關(guān)系如圖1所示。
Socket通常稱作“套接字”,Socket套接字主要用于描述IP地址與端口,作為一個(gè)通信鏈的句柄,其目的在于實(shí)現(xiàn)不同計(jì)算機(jī)設(shè)備之間的網(wǎng)絡(luò)通信。
基于Socket的通信機(jī)制如圖2所示。首先啟動(dòng)服務(wù)器,服務(wù)器通過調(diào)用Socket函數(shù)建立一個(gè)套接字,并將該套接字和本地網(wǎng)絡(luò)地址聯(lián)系在一起,同時(shí)做好監(jiān)聽準(zhǔn)備??蛻舳嗽诮⑻捉幼趾笸ㄟ^調(diào)用 Connect函數(shù)和服務(wù)器建立連接?;赟ocket的通信機(jī)制支持?jǐn)?shù)據(jù)的雙向交互,并可實(shí)現(xiàn)異地?cái)?shù)據(jù)的一致性和同步性,解決ADAMS軟件與軟總線之間的數(shù)據(jù)交互。
ADAMS適配器分兩部分:客戶端與服務(wù)端??蛻舳藶锳DAMS軟件用戶子程序,實(shí)現(xiàn)與Socket服務(wù)器的連接,獲得 ADAMS模型計(jì)算所需數(shù)據(jù),在ADAMS模型求解完成后將計(jì)算數(shù)據(jù)輸出的功能;服務(wù)端為Socket服務(wù)器,實(shí)現(xiàn)與客戶端的數(shù)據(jù)接收與發(fā)送,通過仿真軟總線將服務(wù)端接收到的數(shù)據(jù)提供給其它邦員,將從其它邦員獲得的數(shù)據(jù)放入Socket服務(wù)端。
3.1 ADAMS客戶端接口程序
ADAMS客戶端接口程序核心內(nèi)容有兩部分:CONSUB子程序與非CONSUB子程序。CONSUB子程序控制求解器,實(shí)現(xiàn)仿真命令的修改,以及返回是否達(dá)到指定時(shí)間;非CONSUB子程序(如SFOSUB子程序)獲取求解器中指定數(shù)據(jù)(指定構(gòu)件的位移、速度等)并上傳到服務(wù)器,從服務(wù)器獲取所需數(shù)據(jù)。圖3為ADAMS客戶端接口程序框圖。
ADAMS適配器客戶端實(shí)現(xiàn)用戶模型封裝、子程序的編寫、編譯及仿真腳本文件的編寫。
a)用戶模型封裝。
用戶模型封裝是以用戶建立的動(dòng)力學(xué)模型為基礎(chǔ),針對(duì)其中的輸入、輸出內(nèi)容,采用非CONSUB用戶子程序完成輸入、輸出標(biāo)準(zhǔn)化接口的開發(fā)工作。以Sforce為例,用戶模型封裝過程為:將Sforce中參數(shù)設(shè)置選項(xiàng)中Define Using項(xiàng)設(shè)置為Subroutine,在User parameter中鍵入需要傳遞給子程序的數(shù)組。用戶模型封裝完畢后,將生成擴(kuò)展名為adm的模型文件,供仿真過程調(diào)用。
b)用戶子程序編寫及編譯。
ADAMS用戶子程序的作用是實(shí)現(xiàn)對(duì)仿真模型求解器的控制,進(jìn)而實(shí)現(xiàn)外部仿真系統(tǒng)對(duì)仿真過程、仿真時(shí)間的控制,將仿真的輸出數(shù)據(jù)(指定構(gòu)件的位移、速度、力等)上傳到服務(wù)器,同時(shí)從服務(wù)器獲取下一時(shí)刻仿真輸入數(shù)據(jù)和控制信息。
ADAMS子程序的編寫按照.C文件的格式進(jìn)行編寫,ADAMS子程序并沒有整體的邏輯結(jié)構(gòu),因?yàn)樗罱K是作為.dll文件被求解器調(diào)用,只需在每個(gè)單獨(dú)的函數(shù)中實(shí)現(xiàn)特定的功能。
以SFOSUB為例,介紹ADAMS非CONSUB用戶子程序的主要內(nèi)容:
1)定義SFOSUB子函數(shù)數(shù)據(jù)結(jié)構(gòu)體類型,用于存儲(chǔ)不同函數(shù)數(shù)據(jù);
2)定義發(fā)送接收消息的SEND、GET_MSG函數(shù),完成 Socket端口、IP地址等的初始化,連接 Socket服務(wù)器,發(fā)送、接收消息;
c)定義CONSUB函數(shù),實(shí)現(xiàn)對(duì)求解器的控制,獲得ADAMS求解器中的數(shù)據(jù)(如速度、位移等),并返回模型求解所需要的數(shù)據(jù)。
ADAMS用戶子程序的編譯是指將編寫完成的.C文件編譯成被求解器調(diào)用的.dll文件,實(shí)現(xiàn)途徑為在ADAMS-Command dos界面下生成。
3.2 ADAMS服務(wù)端接口程序
ADAMS適配器服務(wù)端接口程序主要有兩個(gè)功能:接收ADAMS求解器發(fā)送的數(shù)據(jù),經(jīng)處理后提供給其它邦員,并接收其它邦員返回?cái)?shù)據(jù),然后發(fā)送到ADAMS求解器。圖4為適配器服務(wù)端接口程序框圖。
ADAMS服務(wù)端程序、邦員函數(shù)的編寫環(huán)境與客戶端相同,包含兩部分內(nèi)容代碼的編寫:ADAMS sever.h及ADAMS sever.cpp文件。
ADAMS sever.h文件主要定義所需的頭文件、消息頭結(jié)構(gòu)體、數(shù)據(jù)結(jié)構(gòu)體,.cpp文件中所需要實(shí)現(xiàn)的函數(shù)等。ADAMS sever.cpp文件有兩部分內(nèi)容,實(shí)現(xiàn)按頭文件中的定義對(duì)消息進(jìn)行處理與開啟Socket的線程函數(shù)。
本文建立某牽引車及牽引裝置的ADAMS模型,采用BH-RTI2.3軟總線平臺(tái)對(duì)ADAMS適配器進(jìn)行測(cè)試。在同一局域網(wǎng)不同計(jì)算機(jī)上安裝ADAMS軟件及BH-RTI2.3軟總線平臺(tái)(每臺(tái)計(jì)算機(jī)都安裝),其中一臺(tái)計(jì)算機(jī)為RTI服務(wù)器,另一臺(tái)為客戶機(jī),首先開啟BH-RTI2.3中心服務(wù)器運(yùn)行版,然后啟動(dòng)客戶機(jī)上的BH-RTI2.3運(yùn)行版,BH-RTI2.3軟總線平臺(tái)啟動(dòng)后,在客戶機(jī)上開啟適配器服務(wù)端程序加入聯(lián)盟并等待求解器計(jì)算,運(yùn)行ADAMS仿真腳本文件即可運(yùn)行仿真。仿真運(yùn)行中間文件及結(jié)果如圖 5~圖9所示。圖 9中ADAMS機(jī)械系統(tǒng)模型接收到服務(wù)端傳來的力后打開抓桿,并將抓桿打開角度值返回,達(dá)到對(duì)整個(gè)過程的實(shí)時(shí)控制。
本文按照Socket的數(shù)據(jù)通信機(jī)制,完成了一種基于 Socket的 ADAMS仿真工具適配器開發(fā),解決了ADAMS軟件與仿真軟總線之間數(shù)據(jù)交互及仿真過程驅(qū)動(dòng)接口的通用性問題;
本文開發(fā)的適配器實(shí)現(xiàn)方法與ADAMS中的具體模型不存在緊密耦合,可通過適配器將ADAMS作為一個(gè)聯(lián)邦成員加入RTI聯(lián)邦中,參與協(xié)同仿真;
該適配器實(shí)現(xiàn)方法解決了ADAMS軟件與仿真軟總線之間數(shù)據(jù)的接口標(biāo)準(zhǔn),該適配器開發(fā)方法可推廣到其它商用軟件接口適配器的開發(fā)。
[1] 郭斌, 熊光楞, 等. MATLAB與HLA/RTI通用適配器研究與實(shí)現(xiàn)[J]. 系統(tǒng)仿真學(xué)報(bào), 2004, 16(6): 1275-1279.
[2] 張志娟, 關(guān)曉東. MSC Adams用戶自定義子程序在衛(wèi)星姿控系統(tǒng)仿真分析中的應(yīng)用[J]. 計(jì)算機(jī)輔助工程, 2006, 15(S1): 4-5.
[3] 薛運(yùn)鋒, 石明全. 基于 ADAMS的列車系統(tǒng)參數(shù)化建模的二次開發(fā)研究[J]. 鐵道機(jī)車車輛, 2006, 26(3): 30-33.
[4] 譚翀. 基于 Socket的跨平臺(tái)多服務(wù)器通信系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)[J]. 艦船電子工程, 2009 (08): 101-103.
[5] 梁思率, 張和明. ADAMS二次開發(fā)技術(shù)在分布式仿真中的應(yīng)用[J]. 系統(tǒng)仿真學(xué)報(bào), 2009 (10): 2940-2944.
[6] 紀(jì)玉杰, 楊強(qiáng), 等. 應(yīng)用C語言編寫ADAMS用戶自定義函數(shù)的研究[J].機(jī)械設(shè)計(jì)與制造, 2006 (01): 101-103.
Development of ADAMS and HLA/RTI Adaptor Based on Socket
Wang Zeng-quan1, Huang Xia-xu2, Wu Yan1, Shen Yan-hua2
(1. Beijing Institute of Space Launch Technology, Beijing, 100076; 2. University of Science and Technology Beijing, Beijing, 100083)
High level architecture (HLA) is a kind of very advanced simulation architecture, which is widely used as the software bus of collaborative simulation due to its better reusability and interoperability. ADAMS is virtual prototype analysis software that is often used in co-simulation. However, ADAMS doesn’t support HLA/RTI, so it can not participate in collaborative simulation based on HLA/RTI. This paper presents a new general adaptor of ADAMS based on Socket and HLA/RTI. In addition, this paper describes implementation of prototype of the adaptor in detail, and the adaptor code was validated by an example. The development of the adapter for engineering application system in distributed and heterogeneous run-time infrastructure of virtual experiment support plug and interoperability.
Socket; ADAMS; High level architecture; Run time infrastructure; Interface development
TP319
A
1004-7182(2017)02-0072-04
10.7654/j.issn.1004-7182.20170216
2016-07-26;
2016-12-09
王增全(1986-),男,工程師,主要研究方向?yàn)闄C(jī)電液一體化系統(tǒng)建模與仿真技術(shù)
導(dǎo)彈與航天運(yùn)載技術(shù)2017年2期