第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的类型和参数配置。到时候我会分享一些实际项目中踩过的坑,保证让你少走弯路。