基于ICD的机电总线数据服务软件设计方法研究案例

描述

1  现场总线技术的特点分析

机电综合管理系统作为飞机的核心系统与飞机安全运行密切相关,其包含燃油系统、环控系统、液压系统、供电系统、起落架系统、舱门系统、照明系统等公共设备[1]。机电综合管理系统涉及总线类型、信号管理类型众多,机载软件对总线的访问十分频繁,这将对硬件接口资源产生无序竞争,因此要求有统一的总线服务软件来完成控制、告警、画面页信号的集成发送。

总线数据服务软件作为机电核心处理机上的总线通信大总管,统一负责外部消息的收发,并向各个机电功能应用分区提供信号输入/输出服务。以往的总线服务分区软件设计采用的是基于消息内容的处理模式,需为每条消息配置专用通信端口并编写发送和接收代码,总线数据服务软件代码量高达数万行,同时软件与系统ICD紧耦合,当后期系统ICD发生变化,总线数据服务软件也需要频繁更新迭代,频繁的软件变更和联试验证,对人力资源的耗费很大,维护成本高[2]。

针对总线数据服务软件的重要性和复杂性,为了解决传统总线服务分区软件开发和维护过程中出现的各种问题,本文设计了基于ICD的机电总线数据服务软件,根据通信分区的不同对配置表进行逻辑划分,提供为总线分区与同一分区通信消息自动生成统一结构体的功能,采用同一消息处理流程使软件与系统ICD解耦,降低了软件代码规模,提高了总线数据服务软件的可移植性与可维护性。

 

2  软件架构与设计

接口控制文件(Interface Control Document,ICD)定义了飞机各系统之间交互的信号信息以及飞机各系统的控制、告警、显示等信号,是飞机设计文件的重要组成部分,用于存储外部设备与飞机各子系统分区进行交互的所有消息[3]。

通常系统ICD文件都是文本或表格的形式,无法直接以编程语言的形式被开发人员使用,因此需借助工具软件将其转化为头文件,本文涉及两个工具软件:分区间通信结构体生成工具与ICD结构体数据生成工具。

基于结构化的思想,遍历系统ICD文件通过分区间通信结构体生成工具以分区为单位将其进行逻辑划分,并将总线分区与各子系统功能分区之间交互的所有消息根据消息源及目的的不同存储在不同的结构体中,而对于源和目的分区相同的所有消息则提取出该分区与总线分区收发的所有消息的有效属性,取并集作为统一的结构体的属性集合[4]。

总线分区发往功能分区的通信结构体如下所示:

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;

功能分区发往总线分区的通信结构体如下所示:

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;

将分区间通信结构体与系统ICD作为ICD结构体数组生成工具的输入,将系统ICD转换为头文件形式,并在系统ICD的基础上增加了两个属性:

(1)消息接收、发送缓冲区:用于存放对应物理信号的值。

(2)当前物理信号在对应分区间通信结构体中的变量序号:用于在总线分区与功能分区之间传输对应的物理信号。

系统ICD文件预处理流程如图1所示。

缓冲器

1394总线消息配置表在程序中的结构体设计如下:

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;//数据字偏移量

char BusSignal_codename[50];//信号名称

int BusSignal_width;//单个信息的占位宽度

int BusSignal_lsb_position;//单个信息在其所在数据字中的起始位

int Partition_Mask;//分区掩码

int * pBuffer;//指向接收/发送缓冲区

int index;//变量在分区间通信结构体中的顺序

}CfgTab;

2  软件架构与设计

总线分区和其他机电功能分区一样都属于应用分区,总线分区在机电核心处理机软件架构中所处位置如图2所示。

缓冲器

总线分区包含初始化模块、通信模块、数据处理模块和健康管理模块,如图3所示。

缓冲器

初始化模块包含配置信息加载,并根据加载的配置信息完成初始化资源创建,如缓冲区创建、初始化数据分发表等;

通信模块包括基于总线消息配置信息的外部设备数据收发、基于机电功能分区数据发布订阅信息的核心机内部数据收发,即接收外部设备数据并通过分区间通信端口将数据发送到机电功能分区,或接收机电功能分区发来的数据,并调用总线服务接口向外部总线发送数据;

分区间数据通信缓存管理使用操作系统的APEX接口和配置机制,总线分区与每个机电功能分区间分别配置4个端口,分别为队列消息发送端口、队列消息接收端口、采样消息写端口、采样消息读端口,交互的数据为该功能分区订阅和发布的数据;

数据处理模块能够支持基于机电功能分区数据发布订阅信息的结构化数据组包和解包,其对应总线分区中的两个周期进程,即总线数据接收与总线数据发送;健康管理模块包括平台及应用健康状态监测、故障记录及上报。

2.1

总线数据接收

如图4所示,总线数据接收任务包含三部分:接收总线数据、数据拆包、发送给应用分区。总线分区在每一个任务周期通过调用总线接收接口完成所有外部总线数据的接收,若总线数据校验正常则将总线数据保存至接收缓冲区中,若总线数据异常则进入异常处理分支;通过遍历总线接收ICD将接收缓冲区中的总线数据按对应字对应位拆包后赋值给分区间通信结构体,最后调用分区间通信服务将已拆包的总线数据发送至各个应用分区进行逻辑处理,分发过程不解析数据包内容,若分区间通信异常,则进入异常处理分支上报异常。

缓冲器

2.2

总线数据发送

如图5所示,总线数据发送任务包含三部分:接收应用分区数据、数据组包、发送至外部总线。总线分区在每一个任务周期首先通过调用分区间通信服务将经应用分区逻辑处理后的数据接收至分区间通信结构体中,然后根据总线发送ICD将发送缓冲区的对应位清零,再将属于同一条消息的数据组包至对应的发送缓冲区中,最后调用总线发送接口将发送缓冲区中的数据同意发送至外部总线。

缓冲器

 

3  结语

本文提出了一种基于总线配置文件的总线数据服务软件的设计方法,非常有效地解决了机电综合处理系统总线信号种类繁多、应用程序设计困难的问题。同时这样的软件架构灵活性非常好,当用户的ICD文件需要变更时,只需利用预处理工具软件重新生成头文件即可,而程序一般不需要做出改动,实现了软件与系统ICD解耦,并且这种统一的设计使程序很少出现细节上的错误,提高了软件的可靠性。







审核编辑:刘清

打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分