2. INTEGRITY通信栈体系结构解析

在综合模块化航电(IMA)系统中,应用软件被封装在相互隔离的分区(Partition)内运行,而分区之间、分区与外部设备之间的通信必须经过一套严格定义的软件栈。INTEGRITY RTOS 上的通信栈正是承担这一职责的核心基础设施。理解它的关键在于:应用看到的“端口”与物理网络上的“帧”之间,隔着若干层抽象,每一层都有明确的职责边界。本节从应用分区出发,逐层向下剖析到物理网络,并说明 ARINC 653 APEX 通信服务、虚拟通道与端口抽象,以及栈内各组件的数据流关系。

一、层次划分:从分区到物理链路

INTEGRITY 通信栈自上而下可划分为四个逻辑层次,每一层解决一类问题:

  • 应用层(APEX 服务层):向分区内的应用提供 ARINC 653 定义的通信 API,包括采样端口(Sampling Port)、队列端口(Queuing Port)、服务访问点(Service Access Point)等。应用只操作“端口号”和“消息缓冲区”,不感知底层链路。
  • 端口/虚拟通道层:将 APEX 端口映射为虚拟通道(Virtual Channel, VC),完成端口标识到通道标识的绑定、消息的排队与采样策略、以及分区间的逻辑连接管理。
  • 传输层(消息调度与路由):负责消息的分段/重组、优先级调度、通道到物理链路的映射,以及跨模块(LRM)的路由选择。
  • 物理网络层:对应实际的航空总线,如 ARINC 664 Part 7(AFDX)、ARINC 429 或 CAN,完成帧的封装、发送与接收。

这种分层并非简单的“套娃”,而是职责与数据形态的逐级转换:应用层传递的是带端口号的消息;端口层将其转为带虚拟通道 ID 的通道数据;传输层将其转为带优先级和路由信息的传输单元;物理层最终将其封装为符合总线规范的帧。

二、ARINC 653 APEX 通信服务

ARINC 653 定义了分区操作系统与航空电子应用之间的标准接口,其中通信服务是核心部分。在 INTEGRITY 中,APEX 通信服务主要提供两类端口:

  • 采样端口(Sampling Port):适用于周期性、状态类数据。发送方写入最新值,接收方读取当前值,旧数据被覆盖。典型用于传感器状态、飞行参数等。
  • 队列端口(Queuing Port):适用于事件类、需保序的数据。消息按 FIFO 排队,接收方逐条读取,队列满时按配置策略处理(阻塞或丢弃)。典型用于告警、指令等。

APEX 服务通过 CREATE_SAMPLING_PORT、WRITE_SAMPLING_MESSAGE、READ_SAMPLING_MESSAGE、CREATE_QUEUING_PORT、SEND_QUEUING_MESSAGE、RECEIVE_QUEUING_MESSAGE 等调用完成端口生命周期管理。每个端口在创建时需指定方向(SOURCE/DESTINATION)、最大消息长度、刷新周期(采样端口)或队列深度(队列端口)。

APEX 端口是“逻辑端点”,它并不直接对应物理链路。一个采样端口可能映射到一条 AFDX 虚拟链路,也可能映射到一条 ARINC 429 标签,具体由配置表决定。

三、虚拟通道与端口抽象

虚拟通道是连接 APEX 端口与物理链路的关键中间层。它的作用可以概括为三点:

  1. 解耦:应用只绑定端口,端口再绑定虚拟通道,虚拟通道再绑定物理链路。任一层变化不影响其他层。
  2. 复用:多条虚拟通道可以共享同一条物理链路,通过 VC ID 区分。
  3. 策略承载:采样/队列策略、刷新周期、优先级、带宽分配等参数都挂在虚拟通道上。

在 INTEGRITY 中,虚拟通道通常以配置表的形式静态定义,系统启动时由通信栈加载。每个 VC 包含:VC ID、源分区、目的分区、端口类型、最大消息长度、周期或队列深度、绑定的物理链路标识。应用通过端口号访问 VC,而 VC 的配置在分区之外,保证了分区隔离性。

四、栈内组件职责与数据流

下面用一张结构关系图展示从应用分区到物理网络的完整数据流。图中左侧为发送路径,右侧为接收路径,中间为通信栈内部组件。

INTEGRITY 通信栈数据流:应用分区 → 物理网络 应用分区 A WRITE_SAMPLING_MESSAGE SEND_QUEUING_MESSAGE APEX 端口层 采样端口 / 队列端口 端口号 → 消息缓冲区 虚拟通道层 VC ID 绑定 采样/队列策略 传输层 分段/重组 · 优先级调度 路由选择 物理网络 ARINC 664 / ARINC 429 / CAN 帧封装 · 发送/接收 应用分区 B READ_SAMPLING_MESSAGE RECEIVE_QUEUING_MESSAGE APEX 端口层 采样端口 / 队列端口 端口号 → 消息缓冲区 虚拟通道层 VC ID 解绑 采样/队列策略 传输层 重组 · 优先级调度 路由选择 通信配置表(静态加载) VC ID · 源/目的分区 · 端口类型 最大消息长度 · 刷新周期/队列深度 优先级 · 带宽分配 · 物理链路绑定 分区隔离边界 应用不可见 VC 配置 仅通过端口号访问 健康监控(HM) 端口超时 · 队列溢出 · 链路故障 发送路径 接收路径 配置

从图中可以看出,发送路径与接收路径在栈内是对称的,但共享同一套配置表。应用分区 A 调用 APEX 写操作后,消息进入端口层;端口层根据端口类型(采样或队列)决定覆盖还是排队;虚拟通道层将端口号映射为 VC ID,并附加策略参数;传输层完成分段、优先级调度和路由选择;最终由物理网络层封装为帧发送。接收侧则反向执行:物理层收帧、传输层重组与调度、虚拟通道层解绑、端口层按策略交付、应用分区 B 读取。

五、关键参数与配置示例

为了更具体地理解各层职责,下面给出一个采样端口的配置示例(参数为教学示例,非实测值):

端口名称:    ENGINE_N1_SAMPLE
端口类型:    SAMPLING
方向:        SOURCE (分区A) → DESTINATION (分区B)
最大消息长度: 32 字节
刷新周期:    20 ms
VC ID:       0x1024
物理链路:    AFDX VL-1024
优先级:      3
带宽分配:    64 kbps

该配置的含义是:分区 A 每 20 ms 写入一次发动机 N1 转速采样值,通信栈将其映射到 VC 0x1024,经 AFDX 虚拟链路 VL-1024 发送,分区 B 以相同周期读取。若分区 B 在 40 ms 内未读到新数据,健康监控可触发端口超时告警。这里的关键判断依据是刷新周期与读取周期的匹配关系:读取周期应不大于刷新周期,否则会重复读取同一采样值;若读取周期远大于刷新周期,则可能丢失中间状态。

采样端口不保证每条消息都被接收方看到,只保证接收方读到的是“当前最新值”。若业务要求每条消息都不能丢,必须使用队列端口,并合理设置队列深度。

六、组件职责小结

层次核心职责关键输入关键输出
APEX 端口层提供标准通信 API,管理端口生命周期端口号、消息缓冲区端口消息
虚拟通道层端口到 VC 的绑定,承载采样/队列策略端口消息、VC 配置带 VC ID 的通道数据
传输层分段/重组、优先级调度、路由选择通道数据、路由表传输单元
物理网络层帧封装、发送与接收传输单元、链路参数总线帧

理解这张分层关系图与职责表,是后续进行通信配置、故障排查和性能分析的基础。实际工程中,大多数通信问题都可以定位到某一层的参数不匹配:端口类型选错、VC 绑定错误、刷新周期与读取周期不匹配、物理链路带宽不足等。掌握从应用到物理的完整数据流,就能按层排查,快速缩小问题范围。