楊絢,魏小勇,崔德龍
航空工業(yè)第一飛機(jī)設(shè)計(jì)研究院,西安 710089
由于艦載機(jī)空間布局緊湊,飛控系統(tǒng)機(jī)載設(shè)備可采用集中式的硬件架構(gòu)方式,將各個(gè)飛控子系統(tǒng)集中布局,采用一個(gè)總線接口模塊端(BIM)板與多個(gè)控制與管理模塊端(CPM)板組合的方式實(shí)現(xiàn)對(duì)飛控系統(tǒng)計(jì)算機(jī)的架構(gòu)。飛控總線接口設(shè)計(jì)是集中式飛控計(jì)算機(jī)的重要組成部分,負(fù)責(zé)外部設(shè)備與飛控計(jì)算機(jī)之間的數(shù)據(jù)傳輸,外部設(shè)備向飛控計(jì)算機(jī)輸入數(shù)據(jù)用于飛行控制律的計(jì)算,得到的控制指令通過(guò)總線接口發(fā)送至相應(yīng)的控制器。飛控?cái)?shù)據(jù)總線接口軟件用以實(shí)現(xiàn)外部傳感器數(shù)據(jù)、飛機(jī)控制數(shù)據(jù)等的傳輸和更新,這些數(shù)據(jù)與其他應(yīng)用軟件,如余度管理、機(jī)內(nèi)自檢、飛行管理、飛行控制律等軟件都有數(shù)據(jù)交聯(lián)。因此,為保證數(shù)據(jù)的完整性和可靠性,對(duì)飛控?cái)?shù)據(jù)總線接口的策略研究是十分必要的。
近年來(lái),許多學(xué)者開(kāi)展了機(jī)載總線數(shù)據(jù)傳輸方面的研究。寧新建[1]討論了航空總線的總線特征、數(shù)據(jù)格式、通信過(guò)程控制、總線接口等;逯計(jì)劃[2]介紹了傳統(tǒng)總線和新一代總線技術(shù)的幾種典型技術(shù),分析了其優(yōu)勢(shì)和缺點(diǎn);孟銳等[3]介紹了幾種常用的航空總線,并重點(diǎn)介紹了ARINC659總線;馬貴斌等[4]介紹、比較和分析了國(guó)內(nèi)外現(xiàn)階段應(yīng)用的幾種軍用數(shù)據(jù)總線的構(gòu)架及其優(yōu)缺點(diǎn);ARINC659總線[5-6]具有容錯(cuò)性、高可用性和高完整性的特點(diǎn);張銳等[7]利用ARINC659 作為余度管理軟件中數(shù)據(jù)交叉?zhèn)鬏數(shù)目偩€,以提高飛行控制計(jì)算機(jī)系統(tǒng)中的可靠性;張阿莉等[8]針對(duì)新型飛控采集器采集數(shù)據(jù)流數(shù)增多、試飛模式改變的問(wèn)題,對(duì)原有飛行控制系統(tǒng)總線數(shù)據(jù)處理軟件進(jìn)行優(yōu)化設(shè)計(jì),軟件有效解決了多流、多表號(hào)飛行控制系統(tǒng)總線數(shù)據(jù)處理問(wèn)題;陳新華和支高飛[9]描述了利用通用采集系統(tǒng)板卡搭建模擬飛控?cái)?shù)據(jù)測(cè)試系統(tǒng),并通過(guò)開(kāi)發(fā)模擬飛控信號(hào)隔離器實(shí)現(xiàn)了被試設(shè)備與采集器之間的交聯(lián); Yedavallir等[10]指出數(shù)據(jù)傳輸中節(jié)點(diǎn)的瞬時(shí)故障、數(shù)據(jù)損壞、傳輸錯(cuò)誤或編碼/解碼錯(cuò)誤都可能會(huì)引起數(shù)據(jù)丟包;閆莉和王勇[11]采用電子設(shè)計(jì)自動(dòng)化(EDA)方法,設(shè)計(jì)并實(shí)現(xiàn)了符合機(jī)載串行數(shù)字傳輸?shù)哪承惋w機(jī)機(jī)載總線多通道模塊接口;邢達(dá)波等[12]對(duì)某型飛機(jī)網(wǎng)絡(luò)化架構(gòu)中出現(xiàn)的數(shù)據(jù)丟包現(xiàn)象進(jìn)行分析,通過(guò)對(duì)KAD/SWI/108進(jìn)行重新軟件編程,消除了數(shù)據(jù)丟包現(xiàn)象;張毅和張勇[13]介紹了某型號(hào)飛機(jī)飛控系統(tǒng)試驗(yàn)的數(shù)據(jù)采集處理系統(tǒng)軟件,包括數(shù)據(jù)采集、數(shù)據(jù)存儲(chǔ)、數(shù)據(jù)分析及事后處理;靳鴻等[14]針對(duì)機(jī)載數(shù)據(jù)記錄儀總線通訊存在數(shù)據(jù)傳輸不穩(wěn)定、數(shù)據(jù)失真等問(wèn)題,提出一種1553B總線接口設(shè)計(jì)與實(shí)現(xiàn)方法,并進(jìn)行了1553B總線接口硬件設(shè)計(jì),使記錄儀能夠完整、準(zhǔn)確地接收和響應(yīng)消息數(shù)據(jù);劉明等[15]設(shè)計(jì)了一種數(shù)字飛控采集器,符合機(jī)載環(huán)境要求;李聲飛[16]為提高數(shù)據(jù)傳輸可靠性,提出一種適用于機(jī)載平臺(tái)的總線接口,有效降低了通信誤碼率,提高了數(shù)據(jù)傳輸?shù)目煽啃院汪敯粜?;付莉和趙民[17]設(shè)計(jì)了一種數(shù)據(jù)通信系統(tǒng)實(shí)現(xiàn)無(wú)人機(jī)系統(tǒng)的飛行操縱和機(jī)載任務(wù)設(shè)備控制;宋軍強(qiáng)等[18]考慮航空發(fā)動(dòng)機(jī)分布式控制系統(tǒng)中丟包問(wèn)題,提出增益重構(gòu)補(bǔ)償策略,保證了存在數(shù)據(jù)丟包的發(fā)動(dòng)機(jī)分布式控制系統(tǒng)的性能和穩(wěn)定性。劉語(yǔ)喬等[19]為了解決RS422總線數(shù)據(jù)處理問(wèn)題,基于某飛機(jī)平臺(tái),研究了總線數(shù)據(jù)處理各個(gè)環(huán)節(jié)的關(guān)鍵技術(shù)問(wèn)題;王凱等[20]針對(duì)機(jī)載航空設(shè)備通信特點(diǎn),介紹了一種可配置的多通道通信軟件設(shè)計(jì),提供了簡(jiǎn)單的接口層以便應(yīng)用軟件開(kāi)發(fā),易于擴(kuò)展和部署。
外部設(shè)備發(fā)送數(shù)據(jù)至串行通信設(shè)備,串行通信設(shè)備每個(gè)周期將接收的數(shù)據(jù)寫(xiě)入到BIM端,并采用ARINC659總線進(jìn)行BIM端到CPM端的數(shù)據(jù)更新,然后飛控軟件在CPM端讀取數(shù)據(jù)并解析。由于外部設(shè)備、串行通信設(shè)備、ARINC659總線、飛控軟件等的運(yùn)行頻率各有差異,會(huì)導(dǎo)致數(shù)據(jù)包不完整甚至丟失的現(xiàn)象,本文針對(duì)數(shù)據(jù)接口的讀/寫(xiě)沖突問(wèn)題進(jìn)行研究,分析不同原因?qū)е碌牟煌瑢?shí)驗(yàn)現(xiàn)象,并提出相應(yīng)的解決方案。
圖1所示為飛控軟件數(shù)據(jù)輸入接口原理圖,外部設(shè)備(如慣性測(cè)量組件、作動(dòng)器控制器、組合導(dǎo)航、差分衛(wèi)星接收機(jī)等)以不同的頻率(200、100、50、25 Hz等)發(fā)送數(shù)據(jù),對(duì)應(yīng)的串行通信設(shè)備以字符或塊為單位每5 ms接收并處理外部設(shè)備輸入的數(shù)據(jù),每20 ms將接收到的外部數(shù)據(jù)發(fā)送到659數(shù)據(jù)交換區(qū)BIM端輸入數(shù)據(jù)區(qū),659背板總線每2.5 ms完成BIM端輸入數(shù)據(jù)區(qū)到CPM端輸入數(shù)據(jù)區(qū)的數(shù)據(jù)更新,最后由通用處理模塊(軟件)每20 ms將CPM端輸入數(shù)據(jù)區(qū)的數(shù)據(jù)接收并處理,隨后經(jīng)過(guò)余度表決、數(shù)據(jù)處理等模塊,進(jìn)入到飛行控制律模塊。
圖1 數(shù)據(jù)輸入接口原理圖Fig.1 Schematic diagram of data input interface
飛行控制與管理接口軟件具有如下特點(diǎn):
1) 外部設(shè)備的數(shù)據(jù)刷新頻率不同。
2) 串行通信設(shè)備都以5 ms為周期接收數(shù)據(jù),并以20 ms為周期將數(shù)據(jù)發(fā)送至659背板總線的BIM端。
3) 采用659背板總線進(jìn)行BIM端到CPM端的數(shù)據(jù)交換,2.5 ms進(jìn)行一次,刷新速率快。
4) 通用處理模塊以20 ms為周期處理CPM端的數(shù)據(jù)。
以慣性測(cè)量組件的輸入為例,如圖2所示,慣性測(cè)量組件設(shè)備的發(fā)送頻率為200 Hz,即5 ms發(fā)送一次,串行通信設(shè)備每5 ms接收一次,放入緩沖區(qū),每20 ms接收約4個(gè)數(shù)據(jù)包,將其發(fā)送至ARINC659總線的BIM數(shù)據(jù)存儲(chǔ)區(qū),通過(guò)659背板總線將BIM數(shù)據(jù)存儲(chǔ)區(qū)的數(shù)據(jù)更新至CPM端規(guī)定的存儲(chǔ)區(qū)內(nèi),然后通用處理軟件即可對(duì)CPM端存儲(chǔ)區(qū)內(nèi)的數(shù)據(jù)進(jìn)行采集并處理。
圖2 慣性測(cè)量組件數(shù)據(jù)輸入原理Fig.2 Principle of data input for inertial measurement components
在時(shí)鐘完全匹配的情況下,如圖3所示,在一個(gè)20 ms任務(wù)中,串行通信設(shè)備在t0時(shí)刻將輸入數(shù)據(jù)寫(xiě)入BIM數(shù)據(jù)區(qū),通用處理模塊在t1時(shí)刻從CPM數(shù)據(jù)區(qū)讀取數(shù)據(jù),數(shù)據(jù)寫(xiě)入和讀取的速率能夠完全匹配。在每個(gè)周期任務(wù)里,飛控軟件都能夠獲取設(shè)備的最新數(shù)據(jù),用于之后的控制律計(jì)算。
串行通信設(shè)備每20 ms將數(shù)據(jù)發(fā)送到BIM輸入數(shù)據(jù)區(qū),而CPM也是每20 ms處理CPM輸入數(shù)據(jù)區(qū)的數(shù)據(jù),659背板總線進(jìn)行BIM到CPM的數(shù)據(jù)傳輸時(shí)間相對(duì)于串行通信設(shè)備和CPM周期運(yùn)行時(shí)間很短,可忽略其影響。串行通信設(shè)備發(fā)送數(shù)據(jù)周期和CPM端的運(yùn)行周期一致,但是兩個(gè)設(shè)備采用各自的時(shí)鐘,可能會(huì)出現(xiàn)時(shí)鐘周期長(zhǎng)短不一致或者時(shí)鐘漂移,引起數(shù)據(jù)讀/寫(xiě)沖突,實(shí)驗(yàn)證明會(huì)出現(xiàn)丟失數(shù)據(jù)包的現(xiàn)象,因此軟件運(yùn)行所處理的數(shù)據(jù)的時(shí)效性和完整性得不到保證,這對(duì)實(shí)時(shí)性要求高的飛控系統(tǒng)來(lái)說(shuō)是不能接受的;另一方面,對(duì)于數(shù)據(jù)更新較慢的外設(shè)而言,通用處理軟件因無(wú)法判斷存儲(chǔ)區(qū)中數(shù)據(jù)的是否被更新,可能會(huì)重復(fù)解析內(nèi)存中的數(shù)據(jù),對(duì)上述2種實(shí)驗(yàn)現(xiàn)象,進(jìn)行分析并給出解決方案。
圖3 數(shù)據(jù)讀/寫(xiě)時(shí)序圖Fig.3 Sequence diagram of data read/write
針對(duì)飛控系統(tǒng)數(shù)據(jù)不完整傳輸和數(shù)據(jù)重復(fù)解析兩類問(wèn)題展開(kāi)研究。
不同的外設(shè)數(shù)據(jù)刷新的頻率不一樣,慣性測(cè)量組件5 ms刷新一次,串行通信設(shè)備每20 ms將采集的數(shù)據(jù)發(fā)送至BIM端,通用處理模塊(軟件)在CPM端采集到的數(shù)據(jù)總是更新的數(shù)據(jù)包;而數(shù)據(jù)鏈通信每40 ms刷新一次數(shù)據(jù),通用處理模塊(軟件)依然是每20 ms訪問(wèn)一次CPM端的數(shù)據(jù)區(qū),如圖4所示,這樣會(huì)使得軟件將CPM端數(shù)據(jù)鏈存儲(chǔ)區(qū)的數(shù)據(jù)處理兩次,這無(wú)疑浪費(fèi)了軟件的運(yùn)行時(shí)間。
理想情況是在寫(xiě)入BIM數(shù)據(jù)區(qū)的時(shí)鐘和讀取CPM數(shù)據(jù)區(qū)的時(shí)鐘完全同步的前提下,工程實(shí)踐中可能會(huì)出現(xiàn)時(shí)鐘偏差,如圖5所示,“寫(xiě)入”和“讀取”的時(shí)鐘偏差為Δt,在試驗(yàn)時(shí)發(fā)現(xiàn)數(shù)據(jù)區(qū)會(huì)出現(xiàn)未更新完全的情況,即在“寫(xiě)入”未完時(shí),進(jìn)行“讀取”,導(dǎo)致數(shù)據(jù)包中前半部分?jǐn)?shù)據(jù)為更新的數(shù)據(jù),后半部分?jǐn)?shù)據(jù)為前一拍處理過(guò)的未更新的數(shù)據(jù)。但是通用處理模塊(軟件)并不能夠識(shí)別數(shù)據(jù)包是否為全新?tīng)顟B(tài),只要存儲(chǔ)區(qū)中有數(shù)據(jù),軟件就會(huì)對(duì)其進(jìn)行處理。
為避免上述讀寫(xiě)同時(shí)進(jìn)行和對(duì)數(shù)據(jù)包重復(fù)解析的問(wèn)題,在串行通信設(shè)備將數(shù)據(jù)包寫(xiě)入BIM數(shù)據(jù)區(qū)時(shí),在數(shù)據(jù)包的末端增加數(shù)據(jù)包編號(hào),以判斷數(shù)據(jù)區(qū)中的數(shù)據(jù)包是否為完全更新的數(shù)據(jù)包。此外,為明確數(shù)據(jù)包中有效數(shù)據(jù)的長(zhǎng)度,在數(shù)據(jù)包前增加了兩個(gè)字節(jié)存放“數(shù)據(jù)長(zhǎng)度”變量。如圖6虛線框中所示,為優(yōu)化之后的BIM端/CPM端數(shù)據(jù)存儲(chǔ)區(qū)的格式。
圖4 數(shù)據(jù)鏈數(shù)據(jù)寫(xiě)入/讀取時(shí)序圖Fig.4 Sequence diagram of DTL read/write
圖5 數(shù)據(jù)讀取/寫(xiě)入沖突Fig.5 Conflict of data read/write
以慣性測(cè)量組件為例,如圖6所示,慣性測(cè)量組件設(shè)備每5 ms更新一次數(shù)據(jù),每個(gè)數(shù)據(jù)包為25個(gè)字節(jié),串行通信設(shè)備每20 ms接收4個(gè)數(shù)據(jù)包,即100個(gè)字節(jié),發(fā)送至BIM端,在數(shù)據(jù)存儲(chǔ)區(qū)預(yù)留120個(gè)字節(jié)(每個(gè)接口通道的數(shù)據(jù)區(qū)都做相應(yīng)的預(yù)留)作為每個(gè)周期的包數(shù)據(jù)存儲(chǔ),包數(shù)據(jù)之前的2個(gè)字節(jié)存放本包數(shù)據(jù)的有效長(zhǎng)度(不大于120個(gè)字節(jié)),包數(shù)據(jù)之后的4個(gè)字節(jié)存放包編號(hào)。每次數(shù)據(jù)寫(xiě)入時(shí),包編號(hào)加1,從0x00000000→(+1)0x00000001→…(long long later)…→0xFFFFFFFF循環(huán)計(jì)數(shù)。軟件在運(yùn)行時(shí),識(shí)別到包編號(hào)大于上拍處理過(guò)的數(shù)據(jù)包的包編號(hào),就對(duì)本包數(shù)據(jù)進(jìn)行處理,否則,不進(jìn)行處理,這樣就避免了對(duì)數(shù)據(jù)更新不完整的數(shù)據(jù)包進(jìn)行處理或者對(duì)處理過(guò)的數(shù)據(jù)包進(jìn)行二次處理。
圖6 BIM端/CPM端數(shù)據(jù)存儲(chǔ)區(qū)格式Fig.6 Format of data storage in BIM/CPM
BIM端數(shù)據(jù)存儲(chǔ)區(qū)每20 ms會(huì)被刷新一次,CPM處理軟件每20 ms會(huì)讀取數(shù)據(jù)存儲(chǔ)區(qū)的數(shù)據(jù)并進(jìn)行處理。實(shí)際上,兩個(gè)不同的時(shí)鐘下,同樣的20 ms周期可能會(huì)略有偏差,寫(xiě)入BIM端的時(shí)鐘可能比讀取CPM端數(shù)據(jù)的時(shí)鐘快,也可能會(huì)慢。
1) 當(dāng)CPM端的時(shí)鐘略快時(shí),如圖7(a)所示,在t0時(shí),向BIM端寫(xiě)入數(shù)據(jù);在t1時(shí),通用處理軟件在CPM端讀取數(shù)據(jù);t2時(shí)刻,再次在CPM端讀取數(shù)據(jù),但是此時(shí)數(shù)據(jù)區(qū)并未更新,會(huì)出現(xiàn)重復(fù)讀取的現(xiàn)象。由于在2.1節(jié)中引入了包編號(hào),所以可以通過(guò)包編號(hào)的大小來(lái)判斷是否為更新的數(shù)據(jù)包,以決定是否需要處理數(shù)據(jù)。
2) 當(dāng)BIM端寫(xiě)入數(shù)據(jù)的時(shí)鐘略快時(shí),會(huì)出現(xiàn)向BIM端寫(xiě)入兩次數(shù)據(jù)包時(shí),CPM端的數(shù)據(jù)才被處理一次。如圖7(b)所示,t0時(shí)刻在CPM端“讀取”,t1時(shí)刻在BIM端寫(xiě)入數(shù)據(jù),由于兩個(gè)20 ms之間有偏差,t2時(shí)刻又一次在BIM端寫(xiě)入數(shù)據(jù),導(dǎo)致上一包數(shù)據(jù)未經(jīng)處理就被覆蓋,t3時(shí)刻在CPM端讀取數(shù)據(jù)時(shí),已經(jīng)丟失了t1時(shí)刻寫(xiě)入的數(shù)據(jù),所以在BIM端設(shè)置一個(gè)數(shù)據(jù)存儲(chǔ)區(qū)是不能夠保證數(shù)據(jù)的完整性和時(shí)效性的,因此在ARINC659總線BIM端和CPM端分別設(shè)置2個(gè)相同的數(shù)據(jù)存儲(chǔ)區(qū),如圖8所示。將t1時(shí)刻和t2時(shí)刻的兩包數(shù)據(jù)分別寫(xiě)入兩個(gè)存儲(chǔ)區(qū),t3時(shí)刻,在CPM端讀取時(shí),一個(gè)周期任務(wù)內(nèi)對(duì)兩包數(shù)據(jù)進(jìn)行解析,這樣就避免了因時(shí)鐘偏差引起的數(shù)據(jù)丟包現(xiàn)象。
圖7 時(shí)鐘大小偏差讀寫(xiě)時(shí)序圖Fig.7 Read and write sequences determined by clock values
圖8 BIM端/CPM端數(shù)據(jù)存儲(chǔ)區(qū)Fig.8 Data storage in BIM/CPM
上述情況都是在串口通信設(shè)備發(fā)送數(shù)據(jù)包完整時(shí)討論的,即每次從ARINC659總線CPM端讀取的數(shù)據(jù)都是完整的數(shù)據(jù)包。以慣性測(cè)量組件為例,串行通信設(shè)備每20 ms接收4個(gè)數(shù)據(jù)包即100個(gè)字節(jié)的數(shù)據(jù),將其發(fā)送至BIM端,在CPM端讀取的數(shù)據(jù)包也為100個(gè)字節(jié)。但是在實(shí)驗(yàn)中監(jiān)控包編號(hào),仍會(huì)偶爾出現(xiàn)丟失數(shù)據(jù)包的現(xiàn)象,這是因?yàn)槲纯紤]數(shù)據(jù)傳輸過(guò)程數(shù)據(jù)包是否完整,如圖9所示,具體分析如下:
1) 外部設(shè)備傳輸數(shù)據(jù)以字符為單位一個(gè)字節(jié)一個(gè)字節(jié)的發(fā)送數(shù)據(jù),或者是以數(shù)據(jù)塊為單位發(fā)送數(shù)據(jù),由于時(shí)鐘偏差的存在使得不能在20 ms 內(nèi)準(zhǔn)確地發(fā)送理論長(zhǎng)度的字節(jié)數(shù)。
2) 串行通信設(shè)備每20 ms將接收的數(shù)據(jù)包發(fā)送至BIM端,而當(dāng)一個(gè)新的20 ms周期到達(dá)時(shí),設(shè)備數(shù)據(jù)區(qū)的數(shù)據(jù)長(zhǎng)度可能會(huì)大于或者小于理論數(shù)據(jù)長(zhǎng)度(如慣性測(cè)量組件應(yīng)發(fā)送100個(gè)字節(jié))。
3) 向ARINC659總線BIM端寫(xiě)入數(shù)據(jù)是需要一定時(shí)間的,通過(guò)ARINC659總線向CPM端傳輸數(shù)據(jù)也是需要時(shí)間的(2.5 ms)。
4) 外部設(shè)備、串行通信設(shè)備、ARINC659總線、軟件周期任務(wù)所遵循的為不同的時(shí)鐘,不可避免的會(huì)有偏差。
綜合上述幾種情況,認(rèn)為每20 ms運(yùn)行周期任務(wù)在CPM端讀取數(shù)據(jù)時(shí),CPM端數(shù)據(jù)區(qū)中的數(shù)據(jù)包可能會(huì)小于理論長(zhǎng)度,是不完整的數(shù)據(jù)包。
以慣性測(cè)量組件為例,如圖10所示,假設(shè)當(dāng)20 ms到達(dá)時(shí),串行通信設(shè)備中只接收到60個(gè)字節(jié)的數(shù)據(jù),將這些數(shù)據(jù)打包發(fā)送至BIM端數(shù)據(jù)存儲(chǔ)區(qū)A1,下一個(gè)20 ms到達(dá)時(shí),串行通信設(shè)備除接收到另一包完整數(shù)據(jù)之外,還接收到上一包的余留數(shù)據(jù),有140個(gè)字節(jié),而數(shù)據(jù)包最大長(zhǎng)度只有120個(gè)字節(jié),分兩個(gè)數(shù)據(jù)包發(fā)送,將前120個(gè)字節(jié)打包發(fā)送至數(shù)據(jù)區(qū)A2,剩余20個(gè)字節(jié)打包發(fā)送至數(shù)據(jù)區(qū)A1,此時(shí)在如圖7(b)所示的情況下,即在CPM端未來(lái)得及讀取數(shù)據(jù)區(qū)A1中的數(shù)據(jù)時(shí),數(shù)據(jù)區(qū)A1已經(jīng)被新的數(shù)據(jù)包所覆蓋,故而兩個(gè)數(shù)據(jù)存儲(chǔ)區(qū)仍然不能夠滿足工程需求,為此,最終將BIM端和CPM端的數(shù)據(jù)存儲(chǔ)區(qū)都設(shè)置為3個(gè),如圖11所示,采用3個(gè)數(shù)據(jù)存儲(chǔ)區(qū)可以避免上述數(shù)據(jù)區(qū)被覆蓋造成的數(shù)據(jù)丟失現(xiàn)象。
此外,通用處理軟件還需對(duì)3個(gè)數(shù)據(jù)區(qū)的讀取隊(duì)列進(jìn)行設(shè)計(jì)。每周期對(duì)CPM端數(shù)據(jù)區(qū)的3個(gè)包進(jìn)行掃描,如果包編號(hào)大于上周期解析的數(shù)據(jù)包包編號(hào),將本包數(shù)據(jù)拷貝至全局?jǐn)?shù)組,因此每個(gè)周期最多的情況是將3包數(shù)據(jù)均拷貝至全局?jǐn)?shù)組,最少的情況是沒(méi)有一包為新的數(shù)據(jù)包。之后,根據(jù)全局?jǐn)?shù)組中存儲(chǔ)的數(shù)據(jù)包個(gè)數(shù)以及每個(gè)數(shù)據(jù)包的包編號(hào),判斷數(shù)據(jù)包的先后到達(dá)順序,隨后數(shù)據(jù)解析。
圖9 數(shù)據(jù)傳輸過(guò)程Fig.9 Process of data transfer
圖10 BIM端/CPM端數(shù)據(jù)區(qū)覆蓋Fig.10 Data overwriting in BIM/CPM
圖11 BIM端/CPM端數(shù)據(jù)區(qū)設(shè)計(jì)Fig.11 Design of data storage in BIM/CPM
綜上所述,對(duì)飛控軟件接口數(shù)據(jù)讀/寫(xiě)的沖突分2種情況:① 時(shí)鐘偏差引起的寫(xiě)入速度小于讀取速度;② 時(shí)鐘偏差或數(shù)據(jù)發(fā)送不完整引起的寫(xiě)入速度大于讀取速度。綜合考慮不同情況下的解決方案,分析得到寫(xiě)入/讀出的過(guò)程。接口數(shù)據(jù)寫(xiě)入BIM端的流程如圖12所示,每個(gè)周期任務(wù)內(nèi)將CPM端數(shù)據(jù)讀取至軟件中所定義的存儲(chǔ)區(qū)即可進(jìn)行解析,讀取數(shù)據(jù)的流程如圖13所示。
圖12 接口數(shù)據(jù)寫(xiě)入BIM端流程Fig.12 Procedure of writing data from interface to BIM
通過(guò)在某型艦載機(jī)飛控軟件接口數(shù)據(jù)處理模塊中試驗(yàn),并在試驗(yàn)中監(jiān)控,證明采用上述方法沒(méi)有發(fā)生丟包現(xiàn)象和重復(fù)解析。表明此方法能夠有效解決數(shù)據(jù)包不完整和數(shù)據(jù)重復(fù)解析的問(wèn)題。
圖13 讀取CPM端數(shù)據(jù)流程Fig.13 Procedure of reading data from CPM
通過(guò)上述2種方法來(lái)解決總線數(shù)據(jù)的時(shí)效性和完整性:① 重新設(shè)計(jì)數(shù)據(jù)包格式,增加數(shù)據(jù)包長(zhǎng)度和數(shù)據(jù)包編號(hào)信息;② 是增加數(shù)據(jù)存儲(chǔ)區(qū)空間,將1個(gè)存儲(chǔ)區(qū)變成3個(gè)存儲(chǔ)區(qū)。這樣無(wú)疑增加了空間和時(shí)間的開(kāi)銷。
1) 空間開(kāi)銷
增加數(shù)據(jù)存儲(chǔ)區(qū)的方案使得飛控計(jì)算機(jī)與外設(shè)通信的每個(gè)通道的存儲(chǔ)空間都會(huì)增加,一方面在659總線的BIM端和CPM端都需要增加2個(gè)數(shù)據(jù)包的存儲(chǔ)空間,另一方面在解析數(shù)據(jù)包時(shí)也需要增加2個(gè)數(shù)據(jù)包的全局占用空間。這些都會(huì)增加軟件的空間開(kāi)銷,但是這些空間開(kāi)銷能夠滿足艦載機(jī)飛控系統(tǒng)的空間總要求,是一種以犧牲空間來(lái)保證數(shù)據(jù)完整性的方法。
2) 時(shí)間開(kāi)銷
增加數(shù)據(jù)存儲(chǔ)區(qū)的解決方案,使得軟件在每個(gè)周期內(nèi)會(huì)增加對(duì)數(shù)據(jù)存儲(chǔ)區(qū)的包編號(hào)的掃描過(guò)程以及對(duì)數(shù)據(jù)包的先后順序的判斷過(guò)程,但是最終解析數(shù)據(jù)也僅解析最新一包數(shù)據(jù)。在一般情況下,數(shù)據(jù)包發(fā)送的時(shí)間頻率與通用軟件解析的時(shí)間頻率基本保持一致,每一個(gè)周期只會(huì)掃描到一包有效數(shù)據(jù)進(jìn)行解析;在數(shù)據(jù)包發(fā)送阻塞的情況下,可能會(huì)導(dǎo)致一個(gè)周期收到2包甚至3包有效數(shù)據(jù),此時(shí)需要對(duì)數(shù)據(jù)包的先后順序進(jìn)行判斷,從而得到最新的有效數(shù)據(jù);另一方面,重新設(shè)計(jì)數(shù)據(jù)包格式,增加數(shù)據(jù)包編號(hào),在有些周期沒(méi)有新的數(shù)據(jù)包到達(dá)的情況下,省去對(duì)數(shù)據(jù)的重復(fù)解析,也能夠節(jié)省一定的時(shí)間開(kāi)銷。所以,對(duì)于時(shí)間開(kāi)銷的增加更多的是在數(shù)據(jù)包發(fā)送阻塞時(shí)造成的,但是增加的開(kāi)銷時(shí)間也極短暫,對(duì)于以20 ms為周期的飛控實(shí)時(shí)系統(tǒng)也是能夠滿足的,是一種以犧牲時(shí)間保證數(shù)據(jù)時(shí)效性和完整性的解決方法。
1) 在數(shù)據(jù)寫(xiě)入速度大于讀取速度的情況下,設(shè)計(jì)了數(shù)據(jù)緩沖方案,實(shí)際應(yīng)用中監(jiān)測(cè)數(shù)據(jù)包的幀計(jì)數(shù),有效解決了艦載機(jī)飛控系統(tǒng)數(shù)據(jù)傳輸過(guò)程中各種因素導(dǎo)致的數(shù)據(jù)包丟失問(wèn)題。
2) 在數(shù)據(jù)寫(xiě)入速度小于讀取速度的情況下,給出了包編號(hào)的判斷方法,有效避免軟件中數(shù)據(jù)重復(fù)解析、浪費(fèi)運(yùn)行時(shí)間的問(wèn)題,上述方法可以作為機(jī)載軟件工程師在飛控軟件接口實(shí)際應(yīng)用中的參考。
3) 數(shù)據(jù)存儲(chǔ)區(qū)的設(shè)計(jì),增加了空間的開(kāi)銷,數(shù)據(jù)包格式的設(shè)計(jì)和數(shù)據(jù)存儲(chǔ)區(qū)的設(shè)計(jì),一方面在無(wú)新數(shù)據(jù)包的周期能夠節(jié)省時(shí)間開(kāi)銷,在同時(shí)有2~3個(gè)數(shù)據(jù)包到達(dá)的周期又會(huì)增加時(shí)間開(kāi)銷,但是艦載機(jī)飛控系統(tǒng)的硬件存儲(chǔ)和軟件周期能夠允許這樣的空間開(kāi)銷和時(shí)間開(kāi)銷,以一定的時(shí)間和空間犧牲來(lái)保證數(shù)據(jù)的時(shí)效性和完整性。
4) 對(duì)于飛控軟件的接口,可以進(jìn)一步將接口軟件做到模塊化和通用化,提高接口軟件在不同型號(hào)飛機(jī)上的可移植性。