国产日韩欧美一区二区三区三州_亚洲少妇熟女av_久久久久亚洲av国产精品_波多野结衣网站一区二区_亚洲欧美色片在线91_国产亚洲精品精品国产优播av_日本一区二区三区波多野结衣 _久久国产av不卡

?

一種基于DDS協(xié)議的分布式仿真網(wǎng)絡(luò)設(shè)計(jì)

2015-12-18 13:17孟益民
電子科技 2015年8期
關(guān)鍵詞:航電時(shí)鐘狀態(tài)

孟益民

(上海飛機(jī)設(shè)計(jì)研究院民用飛機(jī)模擬飛行國(guó)家重點(diǎn)實(shí)驗(yàn)室,上海 201210)

在民用飛機(jī)航電系統(tǒng)的集成過程中,除了真實(shí)機(jī)載設(shè)備外,大量使用仿真模型來替代一些外圍飛機(jī)系統(tǒng)[1],這些仿真模型之間存在大量的數(shù)據(jù)交互。由于試驗(yàn)設(shè)施由不同的供應(yīng)商制造,內(nèi)部采用的通信協(xié)議不盡相同,因此需要一個(gè)面向應(yīng)用層的軟件中間件,利用已有的公共網(wǎng)絡(luò)將各個(gè)試驗(yàn)設(shè)施中的仿真模型連接起來,實(shí)現(xiàn)數(shù)據(jù)和物理傳輸層的隔離,使技術(shù)人員在開發(fā)軟件或試驗(yàn)的過程中,只需面對(duì)他們所關(guān)心的數(shù)據(jù),而無需關(guān)注這些數(shù)據(jù)是如何傳輸?shù)?。傳統(tǒng)的航電仿真平臺(tái)軟件與硬件有較強(qiáng)的關(guān)聯(lián)性,難以兼容不同的通信協(xié)議[2-3]。為了解決上述問題,本文設(shè)計(jì)了一種基于DDS協(xié)議的分布式仿真網(wǎng)絡(luò),實(shí)現(xiàn)了一個(gè)通用的仿真模型運(yùn)行環(huán)境。

1 DDS簡(jiǎn)介

不同于傳統(tǒng) C/S架構(gòu)的協(xié)議(如 CORBA協(xié)議)[4],DDS協(xié)議規(guī)范了分布式實(shí)時(shí)系統(tǒng)中數(shù)據(jù)發(fā)布、傳遞和接收的接口和行為[5]。并提出了以數(shù)據(jù)為中心的發(fā)布/訂閱(Data-Centric Publish/Subscribe DCPS)機(jī)制[6],提供了一個(gè)與平臺(tái)無關(guān)的數(shù)據(jù)模型。DCPS層是DDS規(guī)范的核心,它提供了數(shù)據(jù)發(fā)布的基礎(chǔ)架構(gòu)。DDS的結(jié)構(gòu)如圖1所示[7]。

圖1 DDS基本網(wǎng)絡(luò)結(jié)構(gòu)

2 仿真網(wǎng)絡(luò)總體設(shè)計(jì)

仿真網(wǎng)絡(luò)的設(shè)計(jì)思路是在應(yīng)用層虛擬一個(gè)數(shù)據(jù)列表,將仿真模型或其他應(yīng)用程序與物理傳輸網(wǎng)絡(luò)隔離開。對(duì)于每一個(gè)仿真模型,其輸出數(shù)據(jù)反映在仿真網(wǎng)絡(luò)的虛擬數(shù)據(jù)列表中,并可被其他應(yīng)用或仿真模型讀取。對(duì)于仿真模型的輸入數(shù)據(jù),均來源于其他仿真模型的輸出,即從虛擬數(shù)據(jù)列表中找到并讀取相應(yīng)的數(shù)據(jù)即可。這樣,所有仿真模型只需關(guān)心其輸入輸出的數(shù)據(jù)而不用關(guān)心數(shù)據(jù)的來源以及傳輸方式。虛擬數(shù)據(jù)列表遵循一個(gè)寫入讀取的原則,即虛擬數(shù)據(jù)列表中的同一個(gè)數(shù)據(jù)只能存在一個(gè)數(shù)據(jù)源,該數(shù)據(jù)只能被一個(gè)數(shù)據(jù)源修改,但可同時(shí)被多個(gè)模型進(jìn)行讀取。

圖2 仿真網(wǎng)絡(luò)架構(gòu)

仿真網(wǎng)絡(luò)的底層數(shù)據(jù)通信使用DDS協(xié)議,必須給所有參與通信的節(jié)點(diǎn)所收發(fā)的數(shù)據(jù)配置Topic和數(shù)據(jù)類型。Topic為字符串類型,采用的命名規(guī)則為只有數(shù)據(jù)源節(jié)點(diǎn)有對(duì)發(fā)送數(shù)據(jù)Topic的命名權(quán)力,命名由數(shù)據(jù)源ID/名稱和數(shù)據(jù)屬性描述共同組成,所有命名在同一命名空間內(nèi),所有節(jié)點(diǎn)需要提交自己的Topic,供接收數(shù)據(jù)節(jié)點(diǎn)選擇使用。

為了提供仿真網(wǎng)絡(luò)的靈活性,在系統(tǒng)設(shè)計(jì)時(shí)并不制定Topic的內(nèi)容。具體Topic的內(nèi)容可在仿真網(wǎng)絡(luò)應(yīng)用的過程中進(jìn)行制定。

3 仿真模型調(diào)度設(shè)計(jì)

仿真網(wǎng)絡(luò)為每一個(gè)仿真模型提供5種狀態(tài)的控制,狀態(tài)圖如圖3所示。

圖3 仿真模型狀態(tài)圖

模型狀態(tài)分為初始化狀態(tài)、運(yùn)行狀態(tài)、凍結(jié)狀態(tài)、解凍狀態(tài)和停止?fàn)顟B(tài)這5個(gè)狀態(tài)。其中,初始化狀態(tài)用于模型自身的載入以及模型預(yù)設(shè)參數(shù)的載入。之后,當(dāng)模型進(jìn)入運(yùn)行狀態(tài)時(shí),仿真網(wǎng)絡(luò)便可通過設(shè)置時(shí)間間隔(步長(zhǎng))從模型獲取/發(fā)送數(shù)據(jù)。在凍結(jié)狀態(tài)下,模型將無法進(jìn)行數(shù)據(jù)的接收和發(fā)送,仿真網(wǎng)絡(luò)每次獲取的數(shù)據(jù)為凍結(jié)前最后一次更新的數(shù)據(jù)。同樣,每次發(fā)送的數(shù)據(jù)模型將不能接收。數(shù)據(jù)通信的恢復(fù)需要進(jìn)行解凍操作。當(dāng)模型得到解凍指令后,模型重新處于運(yùn)行狀態(tài)。當(dāng)模型進(jìn)入停止?fàn)顟B(tài)后,模型將不能進(jìn)行數(shù)據(jù)的接收和發(fā)送,數(shù)據(jù)通信的恢復(fù)需要將模型重新初始化。

模型的5個(gè)狀態(tài)由模型本身通過接口函數(shù)的方式提供,仿真網(wǎng)絡(luò)通過調(diào)用接口函數(shù),將仿真模型提供的控制函數(shù)注冊(cè)進(jìn)入仿真網(wǎng)絡(luò),從而控制模型在5個(gè)狀態(tài)之間進(jìn)行切換。

仿真網(wǎng)絡(luò)對(duì)模型的控制原理如圖4所示,仿真模型的控制數(shù)據(jù),通過仿真網(wǎng)絡(luò)解析后,轉(zhuǎn)換為對(duì)模型本身的調(diào)用操作。仿真模型的控制數(shù)據(jù)可來源于用戶界面或其他控制程序。

圖4 仿真網(wǎng)絡(luò)對(duì)模型的控制原理

仿真網(wǎng)絡(luò)通過IDL文件定義,在DDS網(wǎng)絡(luò)上自動(dòng)生成控制數(shù)據(jù)或狀態(tài)數(shù)據(jù)的數(shù)據(jù)結(jié)構(gòu),在允許重新編譯的前提下,數(shù)據(jù)結(jié)構(gòu)可任意更改,增加整個(gè)仿真網(wǎng)路的兼容性。仿真網(wǎng)絡(luò)定義了開始、暫停、保持、參數(shù)設(shè)置、文件推送等5種控制狀態(tài)。

同時(shí),仿真網(wǎng)絡(luò)可獲取模型當(dāng)前的狀態(tài)信息,并把該信息反饋給控制程序。事實(shí)上,狀態(tài)數(shù)據(jù)可用于反映任何一個(gè)運(yùn)行于仿真網(wǎng)絡(luò)下的軟件實(shí)例的當(dāng)前狀態(tài),任意軟件實(shí)例都可以使用狀態(tài)數(shù)據(jù)發(fā)布自身的狀態(tài)。實(shí)例的狀態(tài)數(shù)據(jù)分為開始、加載、空閑、初始化、初始化完成、設(shè)置、就緒、運(yùn)行、保持、卸載和結(jié)束等11種。

當(dāng)仿真網(wǎng)絡(luò)接收到控制指令,并對(duì)控制指令進(jìn)行解析后,通過調(diào)用相應(yīng)的函數(shù)對(duì)仿真模型的狀態(tài)進(jìn)行控制,其中int initial()函數(shù)用于完成仿真模型的初始化。int run()函數(shù)使仿真模型進(jìn)入運(yùn)行狀態(tài),此時(shí)仿真模型可以正常接收和發(fā)送數(shù)據(jù)。int stop()函數(shù)完成仿真模型停止運(yùn)行和設(shè)置模型狀態(tài)操作,此時(shí)仿真模型將刪除所有實(shí)體,當(dāng)需要再次運(yùn)行模型時(shí),需重新初始化。int freeze()函數(shù)完成仿真模型由運(yùn)行狀態(tài)到凍結(jié)狀態(tài)的配置,此時(shí)仿真模型實(shí)例仍然存在,但不能進(jìn)行數(shù)據(jù)交換,即發(fā)送數(shù)據(jù)和接收數(shù)據(jù)的操作仍可正常使用,但新數(shù)據(jù)不會(huì)被發(fā)送,模型也不會(huì)接收到任何新數(shù)據(jù)。使用int resume()函數(shù)則可將仿真模型從凍結(jié)狀態(tài)恢復(fù)至運(yùn)行狀態(tài)。使用int getStatus()函數(shù),可實(shí)現(xiàn)在任何情況下返回仿真模型當(dāng)前的狀態(tài)給仿真平臺(tái)。

4 仿真模型的數(shù)據(jù)收發(fā)設(shè)計(jì)

仿真網(wǎng)絡(luò)除了能夠控制仿真模型的運(yùn)行狀態(tài),還提供了模型之間的數(shù)據(jù)傳輸通道。當(dāng)仿真模型進(jìn)入初始化狀態(tài)后,仿真網(wǎng)絡(luò)首先需要為模型的輸入/輸出數(shù)據(jù)在DDS網(wǎng)絡(luò)上進(jìn)行注冊(cè),初始化完成后,生成兩個(gè)線程DDS reader和DDS writer作為仿真數(shù)據(jù)的周期性讀寫器。之后,仿真網(wǎng)絡(luò)通過read和write函數(shù)對(duì)仿真網(wǎng)絡(luò)上的數(shù)據(jù)進(jìn)行讀寫操作。仿真網(wǎng)絡(luò)數(shù)據(jù)收發(fā)的流程如圖5所示。

圖5 仿真網(wǎng)絡(luò)數(shù)據(jù)收發(fā)的流程

DDS_Reader_Init函數(shù)實(shí)現(xiàn)了DDS reader的初始化。按照調(diào)用層指定,在給定的DDS domain,使用給定的Topic接收一個(gè)指定數(shù)據(jù)結(jié)構(gòu)的網(wǎng)絡(luò)數(shù)據(jù)。在DDS網(wǎng)絡(luò)的封裝層內(nèi)創(chuàng)建子線程,使用多路復(fù)用方式使DDS網(wǎng)絡(luò)自行監(jiān)視新數(shù)據(jù)是否到達(dá)。當(dāng)新數(shù)據(jù)到達(dá)后,通過全局變量通知主線程。DDS_Writer_Init函數(shù)實(shí)現(xiàn)了 DDS writer的初始化。在給定的 DDS domain,使用給定的Topic發(fā)送一個(gè)指定數(shù)據(jù)結(jié)構(gòu)的數(shù)據(jù)。DDS reader和DDS writer建立后即按照指定的周期開始工作,并返回仿真數(shù)據(jù)的句柄(Handle),通過該句柄便可對(duì)仿真網(wǎng)絡(luò)上的數(shù)據(jù)進(jìn)行讀寫操作。DDS_read函數(shù)用于讀取指定DDS reader接收到的數(shù)據(jù)。每次讀取1個(gè)數(shù)據(jù),放入用戶指定地址。DDS_write函數(shù)用于將指定地址上的數(shù)據(jù)發(fā)送給指定的DDS writer。每次發(fā)送1個(gè)數(shù)據(jù),如圖6所示。

圖6 仿真網(wǎng)絡(luò)發(fā)送和接收數(shù)據(jù)流程

5 仿真網(wǎng)絡(luò)的時(shí)鐘同步設(shè)計(jì)

在分布式系統(tǒng)中,應(yīng)采用全局時(shí)鐘來調(diào)度各參數(shù)的傳輸[8]。仿真網(wǎng)絡(luò)的物理層基于以太網(wǎng),因此本文采用IEEE1588協(xié)議作為整個(gè)分布式仿真網(wǎng)絡(luò)的授時(shí)協(xié)議[9]。為了保證時(shí)鐘同步不受干擾,仿真網(wǎng)絡(luò)在設(shè)計(jì)上采用獨(dú)立的時(shí)鐘同步網(wǎng)絡(luò),與數(shù)據(jù)網(wǎng)絡(luò)分開。因此在構(gòu)建仿真系統(tǒng)過程中,所有接入仿真網(wǎng)絡(luò)的節(jié)點(diǎn)需要配備一塊。1588PCI板卡用于連接時(shí)鐘同步網(wǎng)絡(luò)。時(shí)鐘同步網(wǎng)絡(luò)采用PTP協(xié)議進(jìn)行對(duì)時(shí),各節(jié)點(diǎn)用于發(fā)送和接收數(shù)據(jù)的時(shí)間戳信息均來自于時(shí)鐘同步網(wǎng)絡(luò)的標(biāo)準(zhǔn)時(shí)間。時(shí)鐘校對(duì)不修改操作系統(tǒng)的系統(tǒng)時(shí)間,因此不會(huì)對(duì)操作系統(tǒng)造成影響,也不會(huì)影響系統(tǒng)的穩(wěn)定性。時(shí)鐘同步后,在1588板卡端的同步精度可達(dá)到ns級(jí)[9]。受操作系統(tǒng)的影響,可保障數(shù)據(jù)傳輸延時(shí)在標(biāo)準(zhǔn)場(chǎng)景下最高不超過20 ms[10]。時(shí)鐘同步系統(tǒng)結(jié)構(gòu)如圖7所示。

圖7 1588授時(shí)系統(tǒng)結(jié)構(gòu)圖

6 結(jié)束語(yǔ)

根據(jù)民用飛機(jī)航電系統(tǒng)集成過程中的實(shí)際需求,提出了一種基于DDS協(xié)議的分布式仿真網(wǎng)絡(luò)。該仿真網(wǎng)絡(luò)使用以太網(wǎng)作為傳輸介質(zhì)提供了一個(gè)統(tǒng)一的仿真模型運(yùn)行環(huán)境,能實(shí)現(xiàn)對(duì)分布在不同試驗(yàn)設(shè)施上的仿真模型進(jìn)行統(tǒng)一的控制,使工程人員在系統(tǒng)集成過程中能夠?qū)W⒂跀?shù)據(jù),簡(jiǎn)化了系統(tǒng)集成的工作難度。

[1] 趙紅軍,蔡志勇,程海峰.現(xiàn)代飛機(jī)航電系統(tǒng)集成驗(yàn)證方法研究[C].南昌:第五屆中國(guó)航空學(xué)會(huì)青年科技論壇,2012.

[2] 諸文潔.綜合航電仿真系統(tǒng)關(guān)鍵技術(shù)研究[J].民用飛機(jī)設(shè)計(jì)與研究,2010(1):15-18.

[3] 白曦,張鵬.基于反射內(nèi)存網(wǎng)的通用航電仿真平臺(tái)設(shè)計(jì)[J].電子科技,2013,26(6):137 -139.

[4] Object Management Group.Real- time CORBA specification[R].USA:Object Management Group,2005

[5] Object Management Group.Data distribution service for real-time systems specification[EB/OL].(2004-10-12)[2015 -01 -13]www.omg.org.

[6] 張大海,賴蘭劍,陳鼎才.DDS在分布式系統(tǒng)仿真中的應(yīng)用[J].計(jì)算機(jī)技術(shù)與發(fā)展,2011,21(3):250 -253.

[7] 姚兵,蔡婷,李峻林,等.基于DDS模型的數(shù)據(jù)分發(fā)中間件的設(shè)計(jì)與實(shí)現(xiàn)[J].計(jì)算機(jī)工程與設(shè)計(jì),2009,30(3):619-623.

[8] 桂本烜,劉錦華.IEEE1588高精度同步算法的研究和實(shí)現(xiàn)[J].電光與控制,2006,13(5):90 -94.

[9] John C Eidson,Mike Fischer,Joe White.IEEE - 1588TM standard for a precision clock synchronization protocol for network measurement and control systems[C].USA:34th Annual Precise Time and Time Interval (PTTI)Meeting,2002.

[10]宋波,孫超,姜守達(dá).一種基于PTP協(xié)議的局域網(wǎng)高精度時(shí)鐘同步方法[J].自動(dòng)化技術(shù)與應(yīng)用,2010,29(1):67-70.

猜你喜歡
航電時(shí)鐘狀態(tài)
別樣的“時(shí)鐘”
古代的時(shí)鐘
岷江犍為航電樞紐三期工程實(shí)施方案研究
狀態(tài)聯(lián)想
民用飛機(jī)航電系統(tǒng)虛擬教學(xué)資源建設(shè)
生命的另一種狀態(tài)
有趣的時(shí)鐘
某型無人直升機(jī)航電艙熱設(shè)計(jì)優(yōu)化
時(shí)鐘會(huì)開“花”
航電系統(tǒng)失效檢測(cè)優(yōu)化方法及仿真分析
栖霞市| 平果县| 大兴区| 乌拉特中旗| 乐至县| 漳浦县| 南通市| 沙田区| 金乡县| 井陉县| 长兴县| 宜川县| 开原市| 灵山县| 托克逊县| 黔南| 罗山县| 尚义县| 武川县| 南汇区| 长春市| 林西县| 偏关县| 海淀区| 改则县| 南漳县| 庆元县| 定兴县| 姚安县| 宜黄县| 台安县| 长宁县| 诸暨市| 玛多县| 桂阳县| 米林县| 常山县| 县级市| 云南省| 垫江县| 延安市|