宋 丫,李興智,劉逸涵
(中國航空工業(yè)集團(tuán)公司西安航空計(jì)算技術(shù)研究所,陜西 西安 710077)
ARINC429協(xié)議總線(以下簡稱ARINC429總線)是一種常見的飛機(jī)數(shù)據(jù)傳輸總線,它克服了模擬量傳輸帶來的高成本、傳輸線過多和可靠性差的問題,進(jìn)而在減輕飛機(jī)重量的同時(shí),使飛機(jī)信息傳輸?shù)木珳?zhǔn)度得以提升[1]。
ARINC429總線控制器由兩個(gè)接收器、一個(gè)發(fā)送器以及若干主機(jī)可編程控制寄存器組成,它具有如下特征:1) 循環(huán)自測試功能;2) 25或32位字長;3) 奇偶校驗(yàn)位;4) 接收與發(fā)送字的生成;5) 支持中斷和查詢兩種操作方式;6) 異步串行傳輸;7) 100 kbps或12.5 kbps傳輸速率[2]。
對于32位字長的ARINC429消息,其包含有標(biāo)志位(Label)、源/目的識(shí)別位(S/D)、數(shù)據(jù)位(data)、標(biāo)記位(SIGN)、狀態(tài)位(SSM)、奇偶校驗(yàn)位(Parity)[3]。數(shù)據(jù)格式分為主機(jī)端格式與線上傳輸格式,一般采用主機(jī)端格式定義數(shù)據(jù)結(jié)構(gòu),消息組成如圖1所示。
圖1 ARINC429總線數(shù)據(jù)格式
目前,機(jī)載通信常用的ARINC429總線消息主要分為周期性和事件性,其中周期性消息是指多個(gè)Label號(hào)數(shù)據(jù)按照一定的時(shí)間間隔進(jìn)行傳送,周期由主機(jī)端時(shí)鐘控制,數(shù)據(jù)字之間間隔4個(gè)位的空閑時(shí)間。事件性消息則由特定事件觸發(fā),一般由多個(gè)Label號(hào)相同的數(shù)據(jù)字組成,某一時(shí)刻連續(xù)發(fā)送,包含包頭包尾以便識(shí)別解析[4]。對于周期性消息,由于發(fā)送端與接收端的系統(tǒng)時(shí)鐘存在差異,且多個(gè)Label號(hào)數(shù)據(jù)需要一定的傳輸時(shí)間,從而導(dǎo)致發(fā)送和接收可能出現(xiàn)在周期間隔中的任何時(shí)刻,即我們常說的異步傳輸。
為了提高ARINC429總線的可靠性,及時(shí)監(jiān)測總線功能是否正常,在設(shè)計(jì)機(jī)載通信系統(tǒng)時(shí),常常需要建立一定的通信故障判斷機(jī)制,根據(jù)總線通信原理判斷線路通斷,同時(shí)檢查數(shù)據(jù)是否正常更新。
遠(yuǎn)程接口單元通過ARINC429總線接收來自座艙壓力傳感器的數(shù)據(jù)信息,再通過網(wǎng)絡(luò)總線傳輸至綜合管理計(jì)算機(jī)。為了保證數(shù)據(jù)的可靠性,實(shí)時(shí)監(jiān)測機(jī)上設(shè)備狀態(tài),遠(yuǎn)程接口單元需要對ARINC429總線通路及座艙壓力傳感器數(shù)據(jù)更新進(jìn)行判斷,并及時(shí)上報(bào)綜合管理計(jì)算機(jī)。
判斷總線通路是否斷開,一般采用讀取接收緩存的方式,連續(xù)多個(gè)周期接收緩存無數(shù)據(jù)則可認(rèn)為通信中斷,此時(shí)可判定總線故障或通信設(shè)備下線。在判斷接收數(shù)據(jù)是否更新時(shí),通常在消息中設(shè)置一個(gè)心跳位,通過心跳不斷更新,判斷當(dāng)前數(shù)據(jù)是否為最新包。
在一起機(jī)上偶發(fā)的ARINC429總線心跳故障案例中,座艙壓力傳感器每周期固定向遠(yuǎn)程接口單元發(fā)送8個(gè)Label號(hào)數(shù)據(jù)字,其中Label號(hào)為313(八進(jìn)制)的數(shù)據(jù)字包含1bit心跳位,并1、0交替變化。遠(yuǎn)程接口單元每周期接收數(shù)據(jù)后保存本地,同時(shí)判斷心跳位是否發(fā)生變化,連續(xù)10個(gè)周期(100 ms)心跳不變則上報(bào)該設(shè)備心跳故障。經(jīng)長時(shí)間試驗(yàn),發(fā)現(xiàn)該故障具有周期特性,設(shè)備上線大約二十分鐘后上報(bào)心跳故障,持續(xù)幾十秒恢復(fù)正常,如此循環(huán)往復(fù)。
首先心跳故障的根本原因是連續(xù)10個(gè)周期接收到的心跳位無更新,此時(shí)有兩種可能:1) 座艙壓力傳感器發(fā)送數(shù)據(jù)有誤;2) 遠(yuǎn)程接口單元接收解析不對。從根源處進(jìn)行故障隔離,持續(xù)讀取遠(yuǎn)程接口單元ARINC429總線接收緩存的原始數(shù)據(jù),篩選出所有Label號(hào)為313的數(shù)據(jù)包,解析出心跳位并實(shí)時(shí)監(jiān)控。試驗(yàn)顯示,心跳位持續(xù)穩(wěn)定更新,大約二十分鐘后故障再次復(fù)現(xiàn),上報(bào)設(shè)備心跳故障。同時(shí)該ARINC429總線設(shè)置256數(shù)據(jù)字大緩存,而設(shè)備每周期僅發(fā)送8個(gè)數(shù)據(jù)字,絕不會(huì)出現(xiàn)緩存溢出,至此可將故障定位于遠(yuǎn)程接口單元的判故機(jī)制。
周期性故障一般與軟件運(yùn)行的時(shí)序有關(guān),進(jìn)一步分析試驗(yàn)數(shù)據(jù)發(fā)現(xiàn),當(dāng)故障出現(xiàn)時(shí),遠(yuǎn)程接口單元每周期接收到的數(shù)據(jù)包個(gè)數(shù)與座艙壓力傳感器發(fā)送的8個(gè)不一致,即發(fā)送接收時(shí)機(jī)與時(shí)鐘中斷發(fā)生錯(cuò)位,此時(shí)當(dāng)前周期未收到包含心跳的Label數(shù)據(jù),而下個(gè)周期收到兩個(gè)包含心跳的Label數(shù)據(jù)。遠(yuǎn)程接口單元軟件在處理接收數(shù)據(jù)時(shí)采用周期覆蓋式,當(dāng)收到兩個(gè)心跳時(shí),新數(shù)據(jù)覆蓋舊數(shù)據(jù),導(dǎo)致0-1交替變化的心跳被連續(xù)覆蓋,從而導(dǎo)致故障發(fā)生。
究其根本是由于遠(yuǎn)程接口單元與座艙壓力傳感器是異步運(yùn)行的,沒有同步機(jī)制,兩者均是在自身時(shí)鐘控制下,以固定周期進(jìn)行消息收發(fā),且兩個(gè)設(shè)備上電順序及時(shí)間隨機(jī);再者兩個(gè)產(chǎn)品的自身時(shí)鐘精度也存在差異,時(shí)鐘信號(hào)在微觀上也有偏差,導(dǎo)致系統(tǒng)運(yùn)行一段時(shí)間后,兩者的本地時(shí)間出現(xiàn)相對差額,如圖2所示。
圖2 異步系統(tǒng)周期示意圖
如圖所示,A、B為兩個(gè)異步設(shè)備,各自時(shí)鐘周期存在微小差異。A設(shè)備在每個(gè)周期的固定點(diǎn)發(fā)送數(shù)據(jù)(向上箭頭),B設(shè)備在每個(gè)周期的固定點(diǎn)接收數(shù)據(jù)(向下箭頭),圓圈處為放大后的示意圖,正方形為ARINC429總線的一個(gè)數(shù)據(jù)字。一段時(shí)間后,兩個(gè)設(shè)備的發(fā)送和接收點(diǎn)會(huì)越來越近,由于A設(shè)備發(fā)送數(shù)據(jù)需要一定時(shí)間,隨著系統(tǒng)的運(yùn)行,B設(shè)備的接收點(diǎn)會(huì)出現(xiàn)在A設(shè)備的發(fā)送過程中,此時(shí)就會(huì)表現(xiàn)為遠(yuǎn)程接口單元接收到的數(shù)據(jù)與座艙壓力傳感器發(fā)送的個(gè)數(shù)不一致,一個(gè)周期內(nèi)出現(xiàn)兩包心跳數(shù)據(jù)。
針對上述故障原因,對遠(yuǎn)程接口單元接收數(shù)據(jù)判故方法進(jìn)行改進(jìn),去除周期覆蓋式的接收機(jī)制,只要在接收緩存中識(shí)別到Label號(hào)為313的數(shù)據(jù)包,即心跳所在數(shù)據(jù)包,就進(jìn)行一次心跳更新,同時(shí)清空故障計(jì)數(shù),并保存最新一次的心跳值。
考慮到心跳0-1跳變存在一定的風(fēng)險(xiǎn),容易受機(jī)上干擾產(chǎn)生數(shù)據(jù)位錯(cuò)誤,可以在數(shù)據(jù)負(fù)載允許的條件下,設(shè)置3位或多位心跳,變化范圍0-7等,發(fā)送端設(shè)備每周期心跳加1,接收端設(shè)備檢測到心跳變化即完成一次有效更新,如此可避免因干擾導(dǎo)致的誤判。
本文介紹了一起機(jī)上偶發(fā)的ARINC429總線心跳故障案例,分析了異步系統(tǒng)間周期傳輸消息的特征,并結(jié)合ARINC429總線格式,提出了一種穩(wěn)定有效的故障判斷機(jī)制,為后續(xù)工程應(yīng)用提供了一定的參考經(jīng)驗(yàn)。