摘要:為提高航空電子總線數(shù)據(jù)服務(wù)軟件的開發(fā)效率和可靠性,采用基于ICD配置文件的通用化處理流程,每一條ICD配置信息對應總線中的一個信號,利用ICD配置文件轉(zhuǎn)換工具對系統(tǒng)ICD進行預處理,設(shè)計了一種基于ICD的總線數(shù)據(jù)通用化處理方法,當用戶ICD配置文件發(fā)生變更時,只需修改相應配置文件,無須改動代碼,增強了軟件的適應性和通用性。
關(guān)鍵詞:總線;ICD配置;機電系統(tǒng);嵌入式軟件
中圖分類號:TP319" 文獻標志碼:A" 文章編號:1671-0797(2023)07-0049-03
DOI:10.19514/j.cnki.cn32-1628/tm.2023.07.012
0" " 引言
機電綜合管理系統(tǒng)作為飛機的核心系統(tǒng)與飛機安全運行密切相關(guān),其包含燃油系統(tǒng)、環(huán)控系統(tǒng)、液壓系統(tǒng)、供電系統(tǒng)、起落架系統(tǒng)、艙門系統(tǒng)、照明系統(tǒng)等公共設(shè)備[1]。機電綜合管理系統(tǒng)涉及總線類型、信號管理類型眾多,機載軟件對總線的訪問十分頻繁,這將對硬件接口資源產(chǎn)生無序競爭,因此要求有統(tǒng)一的總線服務(wù)軟件來完成控制、告警、畫面頁信號的集成發(fā)送。
總線數(shù)據(jù)服務(wù)軟件作為機電核心處理機上的總線通信大總管,統(tǒng)一負責外部消息的收發(fā),并向各個機電功能應用分區(qū)提供信號輸入/輸出服務(wù)。以往的總線服務(wù)分區(qū)軟件設(shè)計采用的是基于消息內(nèi)容的處理模式,需為每條消息配置專用通信端口并編寫發(fā)送和接收代碼,總線數(shù)據(jù)服務(wù)軟件代碼量高達數(shù)萬行,同時軟件與系統(tǒng)ICD緊耦合,當后期系統(tǒng)ICD發(fā)生變化,總線數(shù)據(jù)服務(wù)軟件也需要頻繁更新迭代,頻繁的軟件變更和聯(lián)試驗證,對人力資源的耗費很大,維護成本高[2]。
針對總線數(shù)據(jù)服務(wù)軟件的重要性和復雜性,為了解決傳統(tǒng)總線服務(wù)分區(qū)軟件開發(fā)和維護過程中出現(xiàn)的各種問題,本文設(shè)計了基于ICD的機電總線數(shù)據(jù)服務(wù)軟件,根據(jù)通信分區(qū)的不同對配置表進行邏輯劃分,提供為總線分區(qū)與同一分區(qū)通信消息自動生成統(tǒng)一結(jié)構(gòu)體的功能,采用同一消息處理流程使軟件與系統(tǒng)ICD解耦,降低了軟件代碼規(guī)模,提高了總線數(shù)據(jù)服務(wù)軟件的可移植性與可維護性。
1" " 系統(tǒng)ICD文件預處理
接口控制文件(Interface Control Document,ICD)定義了飛機各系統(tǒng)之間交互的信號信息以及飛機各系統(tǒng)的控制、告警、顯示等信號,是飛機設(shè)計文件的重要組成部分,用于存儲外部設(shè)備與飛機各子系統(tǒng)分區(qū)進行交互的所有消息[3]。
通常系統(tǒng)ICD文件都是文本或表格的形式,無法直接以編程語言的形式被開發(fā)人員使用,因此需借助工具軟件將其轉(zhuǎn)化為頭文件,本文涉及兩個工具軟件:分區(qū)間通信結(jié)構(gòu)體生成工具與ICD結(jié)構(gòu)體數(shù)據(jù)生成工具。
基于結(jié)構(gòu)化的思想,遍歷系統(tǒng)ICD文件通過分區(qū)間通信結(jié)構(gòu)體生成工具以分區(qū)為單位將其進行邏輯劃分,并將總線分區(qū)與各子系統(tǒng)功能分區(qū)之間交互的所有消息根據(jù)消息源及目的的不同存儲在不同的結(jié)構(gòu)體中,而對于源和目的分區(qū)相同的所有消息則提取出該分區(qū)與總線分區(qū)收發(fā)的所有消息的有效屬性,取并集作為統(tǒng)一的結(jié)構(gòu)體的屬性集合[4]。
總線分區(qū)發(fā)往功能分區(qū)的通信結(jié)構(gòu)體如下所示:
typedef union
{
struct
{
int control_signal_1;
int disp_signal_1;
int warning_signal_1;
...
int control_signal_n;
}IO_Partition1;
int buffer[n];
}io_partition1;
功能分區(qū)發(fā)往總線分區(qū)的通信結(jié)構(gòu)體如下所示:
typedef union
{
struct
{
int control_signal_1;
int disp_signal_1;
int warning_signal_1;
...
int control_signal_n;
}Partition1_IO;
int buffer[n];
}partition1_io;
將分區(qū)間通信結(jié)構(gòu)體與系統(tǒng)ICD作為ICD結(jié)構(gòu)體數(shù)組生成工具的輸入,將系統(tǒng)ICD轉(zhuǎn)換為頭文件形式,并在系統(tǒng)ICD的基礎(chǔ)上增加了兩個屬性:
(1)消息接收、發(fā)送緩沖區(qū):用于存放對應物理信號的值。
(2)當前物理信號在對應分區(qū)間通信結(jié)構(gòu)體中的變量序號:用于在總線分區(qū)與功能分區(qū)之間傳輸對應的物理信號。
系統(tǒng)ICD文件預處理流程如圖1所示。
1394總線消息配置表在程序中的結(jié)構(gòu)體設(shè)計如下:
typedef struct
{
char Pathway_name[20];//通道名稱
char Message_source[20];//消息源
char Message_destination[20];//消息目的
int Message_ID;//消息ID
int Message_length;//消息長度
int Message_refresh_period;//消息周期
int Message_transmission_type;//消息類型
int DataWord_offset;//數(shù)據(jù)字偏移量
char BusSignal_codename[50];//信號名稱
int BusSignal_width;//單個信息的占位寬度
int BusSignal_lsb_position;//單個信息在其所在數(shù)據(jù)字中的起始位
int Partition_Mask;//分區(qū)掩碼
int * pBuffer;//指向接收/發(fā)送緩沖區(qū)
int index;//變量在分區(qū)間通信結(jié)構(gòu)體中的順序
}CfgTab;
2" " 軟件架構(gòu)與設(shè)計
總線分區(qū)和其他機電功能分區(qū)一樣都屬于應用分區(qū),總線分區(qū)在機電核心處理機軟件架構(gòu)中所處位置如圖2所示。
總線分區(qū)包含初始化模塊、通信模塊、數(shù)據(jù)處理模塊和健康管理模塊,如圖3所示。
初始化模塊包含配置信息加載,并根據(jù)加載的配置信息完成初始化資源創(chuàng)建,如緩沖區(qū)創(chuàng)建、初始化數(shù)據(jù)分發(fā)表等;通信模塊包括基于總線消息配置信息的外部設(shè)備數(shù)據(jù)收發(fā)、基于機電功能分區(qū)數(shù)據(jù)發(fā)布訂閱信息的核心機內(nèi)部數(shù)據(jù)收發(fā),即接收外部設(shè)備數(shù)據(jù)并通過分區(qū)間通信端口將數(shù)據(jù)發(fā)送到機電功能分區(qū),或接收機電功能分區(qū)發(fā)來的數(shù)據(jù),并調(diào)用總線服務(wù)接口向外部總線發(fā)送數(shù)據(jù);分區(qū)間數(shù)據(jù)通信緩存管理使用操作系統(tǒng)的APEX接口和配置機制,總線分區(qū)與每個機電功能分區(qū)間分別配置4個端口,分別為隊列消息發(fā)送端口、隊列消息接收端口、采樣消息寫端口、采樣消息讀端口,交互的數(shù)據(jù)為該功能分區(qū)訂閱和發(fā)布的數(shù)據(jù);數(shù)據(jù)處理模塊能夠支持基于機電功能分區(qū)數(shù)據(jù)發(fā)布訂閱信息的結(jié)構(gòu)化數(shù)據(jù)組包和解包,其對應總線分區(qū)中的兩個周期進程,即總線數(shù)據(jù)接收與總線數(shù)據(jù)發(fā)送;健康管理模塊包括平臺及應用健康狀態(tài)監(jiān)測、故障記錄及上報。
2.1" " 總線數(shù)據(jù)接收
如圖4所示,總線數(shù)據(jù)接收任務(wù)包含三部分:接收總線數(shù)據(jù)、數(shù)據(jù)拆包、發(fā)送給應用分區(qū)??偩€分區(qū)在每一個任務(wù)周期通過調(diào)用總線接收接口完成所有外部總線數(shù)據(jù)的接收,若總線數(shù)據(jù)校驗正常則將總線數(shù)據(jù)保存至接收緩沖區(qū)中,若總線數(shù)據(jù)異常則進入異常處理分支;通過遍歷總線接收ICD將接收緩沖區(qū)中的總線數(shù)據(jù)按對應字對應位拆包后賦值給分區(qū)間通信結(jié)構(gòu)體,最后調(diào)用分區(qū)間通信服務(wù)將已拆包的總線數(shù)據(jù)發(fā)送至各個應用分區(qū)進行邏輯處理,分發(fā)過程不解析數(shù)據(jù)包內(nèi)容,若分區(qū)間通信異常,則進入異常處理分支上報異常。
2.2" " 總線數(shù)據(jù)發(fā)送
如圖5所示,總線數(shù)據(jù)發(fā)送任務(wù)包含三部分:接收應用分區(qū)數(shù)據(jù)、數(shù)據(jù)組包、發(fā)送至外部總線??偩€分區(qū)在每一個任務(wù)周期首先通過調(diào)用分區(qū)間通信服務(wù)將經(jīng)應用分區(qū)邏輯處理后的數(shù)據(jù)接收至分區(qū)間通信結(jié)構(gòu)體中,然后根據(jù)總線發(fā)送ICD將發(fā)送緩沖區(qū)的對應位清零,再將屬于同一條消息的數(shù)據(jù)組包至對應的發(fā)送緩沖區(qū)中,最后調(diào)用總線發(fā)送接口將發(fā)送緩沖區(qū)中的數(shù)據(jù)同意發(fā)送至外部總線。
3" " 結(jié)語
本文提出了一種基于總線配置文件的總線數(shù)據(jù)服務(wù)軟件的設(shè)計方法,非常有效地解決了機電綜合處理系統(tǒng)總線信號種類繁多、應用程序設(shè)計困難的問題。同時這樣的軟件架構(gòu)靈活性非常好,當用戶的ICD文件需要變更時,只需利用預處理工具軟件重新生成頭文件即可,而程序一般不需要做出改動,實現(xiàn)了軟件與系統(tǒng)ICD解耦,并且這種統(tǒng)一的設(shè)計使程序很少出現(xiàn)細節(jié)上的錯誤,提高了軟件的可靠性。
[參考文獻]
[1] 李愛軍,王山虎,陳瑜,等.一種新型機電系統(tǒng)綜合管理計算機設(shè)計方法[J].測控技術(shù),2015,34(4):74-77.
[2] 葉海明,周紹磊,王昆平.通用測試系統(tǒng)軟件平臺設(shè)計[J].國外電子測量技術(shù),2010,29(2):54-57.
[3] 申鵬亮,翟正軍,周健.基于ICD的通用化航電測試軟件研究[J].測控技術(shù),2013,32(11):124-127.
[4] 周健,肖鵬.基于總線配置文件的仿真測試軟件通用化設(shè)計[J].信息系統(tǒng)工程,2015(2):37-39.
收稿日期:2022-12-30
作者簡介:王昆(1996—),男,陜西人,助理工程師,研究方向:嵌入式軟件。