> 技术文档 > 飞机总线介绍 —— ARINC 429 总线协议_429总线

飞机总线介绍 —— ARINC 429 总线协议_429总线


概述

ARINC 429(航空标准 429)是一种广泛应用于商用飞机和军事飞机中,采用串行数据传输的通信协议。它由航空电子设备制造商 Aeronautical Radio, Inc.(ARINC)制定,旨在提供可靠的航空电子数据通信。ARINC 429 是一种单向数据总线协议,用于航空电子设备之间的通信,它支持数据传输、控制信号和状态指示的传递。

ARINC 429 被广泛应用于航电系统,如导航、飞行控制、通信、引擎监控等系统中。它的优点包括高可靠性、抗干扰能力强、传输速度适中等。

本文将详细介绍 ARINC 429 总线协议的工作原理、格式、实现方法以及相关代码示例,帮助您理解和实现该协议。

ARINC 429 总线协议概述

1. 总线架构

ARINC 429 是一种单向数据传输协议,其中数据总线用于设备之间的单向通信。通常,数据流是从数据源(如传感器、仪表、计算机等)流向数据接收端(如飞行仪表、显示器、其他计算机等)。ARINC 429 协议通过标识符来区分不同的数据源。

2. 总线物理层

ARINC 429 使用两条信号线来实现数据传输:

  • Data (数据线):主要的信号线,用于数据传输。
  • Return (返回线):信号的返回路径。

ARINC 429 的数据传输采用差分信号,因此具有很强的抗干扰能力。数据传输的物理层通常由低压差分信号(LVDS)构成,支持 12V 的电压差。

3. 数据帧结构

ARINC 429 的数据帧由 32 位组成,分为多个部分。其格式如下:

字段 位数 说明 起始位 1 位 固定为 0,表示数据的开始 数据标识符 8 位 标识数据来源和类型 数据 19 位 实际数据内容 校验位 1 位 校验位,用于错误检查 终止位 1 位 固定为 1,表示数据的结束

4. 数据编码

ARINC 429 使用的编码方法是 Bipolar Return-to-Zero (BPRZ) 编码。数据在传输时,只有两个电平:正电压和负电压,表示 1 和 0;中间零电平表示无信号。这种方式可以减少传输中的干扰。

BPRZ 编码
  • 1:表示高电平(+12V)。
  • 0:表示低电平(-12V)。
  • 零电平(0V)用于区分数据和空闲状态。

5. 数据传输速度

ARINC 429 支持两种数据传输速率:

  • Low-speed (低速):12.5 kbit/s。
  • High-speed (高速):100 kbit/s。

根据飞机的系统需求和设备的工作频率,可以选择不同的速率。


ARINC 429 数据帧解析

1. 数据帧格式

如前所述,ARINC 429 的数据帧由 32 位组成。我们可以将其分解为几个部分:

  • 起始位:始终为 0,表示数据的开始。
  • 数据标识符:8 位,用于标识数据来源和数据类型。
  • 数据:19 位,传输的实际数据内容。
  • 校验位:1 位,用于校验传输的数据是否正确。
  • 终止位:始终为 1,表示数据帧的结束。

2. 示例

假设我们需要通过 ARINC 429 协议传输飞行数据,如飞行高度。假设数据标识符为 0x7A,数据为 15000(即高度为 15000 英尺)。

  • 起始位0
  • 数据标识符0x7A01111010
  • 数据15000(需要转为二进制表示,15000 对应的二进制为 001110010100000
  • 校验位1(校验位根据数据内容生成)
  • 终止位1

数据帧的结构将类似于:

0 01111010 001110010100000 1 1

如何实现 ARINC 429 总线协议

实现 ARINC 429 总线协议,通常需要使用硬件模块(如 FPGA 或微控制器)来处理数据的发送和接收。此外,还需要配置信号驱动、电压控制等。下面是一个简单的例子,说明如何用 Python 实现一个 ARINC 429 总线协议的接收和发送。

硬件需求

  • FPGA 或微控制器:可以通过 GPIO 控制线来模拟 ARINC 429 信号的发送和接收。
  • ARINC 429 接口:硬件接口模块,支持数据传输和接收。

Python 示例

假设我们使用 Python 编写一个简单的 ARINC 429 数据发送程序。我们将模拟发送一个包含飞行高度信息的 ARINC 429 数据帧。

import timeimport random# 模拟 ARINC 429 数据帧的生成def generate_arinc429_frame(data_identifier, data_value): # ARINC 429 起始位总是0 start_bit = 0 # ARINC 429 数据标识符,8位 identifier = format(data_identifier, \'08b\') # ARINC 429 数据,19位 data = format(data_value, \'019b\') # ARINC 429 校验位,根据数据计算,假设简单计算:校验为数据的奇偶性 checksum = \'1\' if data.count(\'1\') % 2 == 0 else \'0\' # ARINC 429 终止位总是1 end_bit = 1 # 拼接所有字段,生成完整的数据帧 arinc_frame = f\"{start_bit}{identifier}{data}{checksum}{end_bit}\" return arinc_frame# 发送 ARINC 429 数据帧def send_arinc429_frame(frame): # 模拟通过硬件接口发送数据 print(f\"发送数据帧:{frame}\")# 主函数,生成并发送 ARINC 429 数据帧if __name__ == \"__main__\": # 模拟发送一个飞行高度数据 data_identifier = 0x7A # 示例数据标识符 data_value = random.randint(1000, 40000) # 随机飞行高度 # 生成 ARINC 429 数据帧 frame = generate_arinc429_frame(data_identifier, data_value) # 发送 ARINC 429 数据帧 send_arinc429_frame(frame) # 模拟延时,等待下一次发送 time.sleep(1)

代码解析

  1. generate_arinc429_frame:此函数接收数据标识符和数据值,生成一个 ARINC 429 数据帧。它将各部分按 ARINC 429 协议格式拼接成一个完整的字符串。
  2. send_arinc429_frame:模拟通过硬件接口发送 ARINC 429 数据帧。
  3. 主函数:在主程序中,模拟生成一个飞行高度数据(数据值为 1000 到 40000 之间的随机数),并通过 send_arinc429_frame 函数发送。

调试与验证

在实际项目中,您需要连接到硬件设备,如 FPGA 或微控制器,来实际发送和接收 ARINC 429 数据帧。此外,还需考虑信号传输、同步问题和多设备通信等复杂问题。


总结

ARINC 429 协议是航空电子设备中广泛应用的一种数据通信协议,它具有可靠性高、抗干扰能力强的特点。本文介绍了 ARINC 429 的工作原理、数据帧格式、编码方法以及如何实现简单的 ARINC 429 数据传输。

通过模拟代码,您可以实现 ARINC 429 数据的生成与发送,并能够理解协议的基本构成和应用。在实际开发中,您可能需要结合 FPGA、微控制器等硬件来实现高效的 ARINC 429 总线通信系统。