第1章:ARINC661体系架构
各位同学,今天我们来聊聊ARINC661的体系架构。说实话,这个标准我研究了十几年,每次看都有新体会。它就像座舱显示系统的"交通规则",把复杂的事情变得井井有条。
1.1 系统分层架构
ARINC661把座舱显示系统分成了两层:用户应用层和显示服务层。听起来抽象?我换个说法。
用户应用层,就是那些需要显示数据的系统。比如飞行管理系统、导航系统、发动机监控系统。它们只管"我要显示什么",不管"怎么显示"。显示服务层呢,就是负责"怎么显示"的底层系统。它接收上层的数据,然后画到屏幕上。
我个人习惯把这两层比作"老板"和"设计师"。老板说"我要一个红色的警告",设计师就去画那个警告框。老板不用管像素怎么排,颜色怎么调。这就是分层的好处——各司其职。
核心要点:用户应用(UA)只负责定义显示内容,座舱显示系统(CDS)只负责渲染显示。两者通过标准接口通信,互不干扰。
我在项目中遇到过一个问题:有个团队把业务逻辑写到了显示层里。结果换了个显示器供应商,整个系统都要重写。嗯,这就是不分层的代价。
1.2 UA与CDS的通信机制
UA和CDS怎么通信?说白了就是"你问我答"的模式。但这里的"问"和"答"有严格规定。
通信走的是UDP协议。为什么用UDP?因为座舱显示对实时性要求高,丢一帧数据可以接受,但延迟不能接受。TCP那种重传机制,在座舱里反而坏事。
数据格式呢?用的是二进制编码。我刚开始接触时觉得这太原始了,后来才明白——二进制解析快,不依赖操作系统,适合嵌入式环境。
通信流程大概是这样的:
- UA发送参数更新给CDS
- CDS收到后更新显示
- CDS把用户操作(比如按键)反馈给UA
- UA根据操作做出响应
你想想看,这就像两个人传纸条。UA写"把高度表指针转到3000英尺",CDS收到就照做。CDS写"飞行员按了确认键",UA就执行确认逻辑。简单吧?
避坑指南:我曾经遇到过通信时序问题。UA发得太快,CDS处理不过来。后来加了速率限制,每帧最多处理100条参数更新。这个经验后来成了我们团队的编码规范。
1.3 定义文件(DF)的作用与结构
定义文件,简称DF。这是ARINC661里最重要的概念之一。没有它,UA和CDS就是鸡同鸭讲。
DF是什么?说白了就是一份"协议文档"。它规定了UA和CDS之间所有可能的通信内容。包括:
- 有哪些显示元素(按钮、仪表、警告灯)
- 每个元素的位置、大小、颜色
- 每个元素有哪些参数可以修改
- 参数的数据类型和取值范围
DF用XML格式编写。为什么用XML?因为可读性好,工具支持多。我见过有人想用JSON替代,但ARINC661标准里明确规定了XML,咱们还是按规矩来。
来看一个简单的DF片段:
<Widget x="100" y="200" width="50" height="30" type="PushButton">
<Parameter name="Label" type="String" value="确认"/>
<Parameter name="Enabled" type="Boolean" value="true"/>
<Parameter name="Visible" type="Boolean" value="true"/>
</Widget>
这段代码定义了一个按钮。位置在(100,200),大小50x30,类型是按压按钮。它有三个参数:标签文字、是否可用、是否可见。
DF的结构是树形的。根节点是"Layer"(图层),下面可以挂"Group"(组),组里再挂具体的"Widget"(控件)。这种结构方便管理,也方便复用。
| 层级 | 说明 | 示例 |
|---|---|---|
| Layer | 顶层容器,一个DF可以有多个Layer | 主飞行显示层、导航显示层 |
| Group | 逻辑分组,用于组织同类控件 | 高度表组、速度表组 |
| Widget | 具体控件,可交互或纯显示 | 按钮、仪表盘、文本标签 |
| Parameter | 控件的属性,可被UA动态修改 | 颜色、位置、数值 |
注意:DF文件一旦发布,UA和CDS双方都不能随意修改。要改?得走变更管理流程。我曾经见过一个项目,开发阶段频繁改DF,结果UA和CDS版本对不上,调试了整整两周。所以,DF的版本控制一定要做好。
好了,这一章的内容就这些。总结一下:ARINC661的分层架构让系统解耦,UA和CDS通过标准协议通信,DF则是它们之间的"契约"。这三者构成了座舱显示系统的骨架。
下一章,我们会深入讲解Widget的类型和参数配置。到时候我会分享一些实际项目中踩过的坑,保证让你少走弯路。