基于虚拟仪器的ARINC429总线信号仿真和测试方案
导语:虚拟仪器|ARINC429|总线信号
ARINC429总线是美国航空无线电公司(ARINC)制定的航空数字总线传输标准,定义了航空电子设备和系统之间相互通信的一种规范。随着国内航空业的发展,ARINC429总线的应用日益广泛,已推广到许多航空设备中。与此同时在许多航空机载设备的检测维修中出现了大量对429信号的检测需求。这就使得对429信号的仿真和测试显得十分关键。本文使用目前市场上技术成熟的基于PCI接口的429收发板卡,以LabWindows/CVI作为软件开发环境,设计实现了对429信号的仿真和测试,达到了使用个人电脑完成429信号检测任务的目的。 ARINC429总线简介 ARINC429协议规定使用双绞屏蔽线以串行方式传输数字数据信息,信息为单向传输,即总线上只允许有1个发送设备,可以有多个(≤20个)接收设备。总线的数据传输率为12.5~100kbps,传输字为32位。线路上的码型为双极性归零码。每条线上的信号电压范围为+5V到-5V之间。一条线称为A(或+),而另一条线称为B(或-)。两条线路的差分信号的逻辑关系有三种:当A-B 的差分电压为7.25V~11V时,表示逻辑1,即HI;当A-B的差分电压为-0.5V~0.5V 时,表示NULL;当A-B的差分电压为-11V~-7.25V 时,表示逻辑0,即LO。具体编码方式如图1所示。
[align=center]图1 ARINC429双极性归零编码方式图 [/align] 按照规定ARINC429字的32个数据位分为5个基本区域,分别为Parity、SSM、DATA、SDI、LABEL,如图2所示。1~8位是标号位(LABEL),标记出包括在这个传送字内的信息的类型。通过这些数据标号,接收设备可以很容易地判断出所接收到的字的用途。9~10位是源终端识别位(SDI),它指示信息的来源或信息的终端。11~28或29位是数据位(Data Field),是所确定的用于传输的信息。 29到30或31位为符号状态矩阵位(SSM),表示数据的特性或字类型,也可表示发送设备的状态信息。32位为奇偶校验位(P),实现简单的数据校验功能。
[align=center]图2 429 信号32位字格式 [/align] 基本设计思想 设计航空429总线信号的仿真和检测采用了虚拟仪器的设计思路。简单的说,虚拟仪器就是通用计算机加上软件和硬件。硬件用来解决信号的输入输出问题,软件用来实现对信号的处理、显示等功能。它利用计算机的强大支持,使用户可以很方便地对其维护、扩展和升级。与传统仪器相比,虚拟仪器具有很高的灵活性,可以通过编制软件来定义功能。目前在这一领域内,使用较为广泛的软件包括NI公司的LabVIEW 和LabWindows/CVI,HP公司的VEE等。 设计中,硬件方面使用基于PCI插槽的429信号收发板卡,将其插入通用电脑PCI插槽达到了测试的硬件要求,实现429信号的发送和接收;软件方面使用NI公司的LabWindows/CVI作为开发平台,主要用来完成发送前的数据准备、对接收数据的处理和显示等工作。 设计实现方法 硬件介绍 选用西安方元明公司代理的EXC_M4K429RTx模块板卡。该板卡的基本结构如图3所示。
[align=center]图3 M4K429RTx板卡结构原理图 [/align][align=left] 其主要性能参数包括:支持5~10通道,每个通道均支持接收发送自定义;信号传输率为12.5~100Kbps编程可调;4K×8双端口RAM作为数据收发缓存;支持奇偶校验和可编程输出硬件触发,中断和选择模式;发送通道支持单个发送,单次发送和循环发送三种发送模式;接收通道支持查询接收,单通道连续接收和多通道连续接收种模式;发送字间隔编程可调;支持添加时间标签;有纠错功能。 软件支持:提供windows下运行的C驱动;支持VC、LabVIEW、Delphi、LabWindows/CVI等软件进行开发。 [/align][align=left]软件设计 软件设计主要包括两方面的工作,一是设计实现29信号的发送,即信号的仿真;另一个是实现接收429信号并以合适的方式处理,包括如何显示等,即信号的检测。 ·发送部分 发送部分设计流程如图4所示,设计的工作界面参见图5。 [/align]
首先,输入设备号、模块号和选择发送通道,通过调用板卡函数Init_Module_RTx对板卡初始化,获得对板卡进行操作的句柄,点击“打开板卡”按钮可以完成这一步工作。然后调用板卡的属性设置函数Setup_Transmit_Channel_RTx设置发送通道的发送属性,包括发送方式,发送数据速率,发送时间间隔和奇偶校验,通过面板控件获得这些属性值,如发送方式可选择单次,单个和循环发送三种发送模式。发送速率12.5~100Kbps可选。 实现设计的关键是如何得到标准格式的32位429码,并按照板卡硬件规定的格式将其放入发送寄存器中。如图5在发送数据区中对应输入所要发送的数据信息。由于429 信号数据位码的填充方式根据数据类型的不同分为两种,一种是按照BCD码填充,一种是按照BNR码填充,因此编写软件时,首先需要判断label类型,确定数据的填充方式,然后将它们合并成符合其数据类型的32位429码信息,再按照图6所示的发送格式,将其分为高16位和低16位两组码分别放入发送寄存器的高位和低位中,才能被正确发送出去。
下面给出了以BNR方式填充数据区的部分代码。主要采用位操作完成了32位码的生成和拆分。 int generat32 (int tr_data,int lab,int ssm, int sdi)//生成32位码 { int data,i,j=0; tr_data =tr_data<<10; ssm =ssm<<29; sdi =sdi<<8; data =tr_datalabssmsdi; return data32; } Lo=(data 320x 00ffff00)>>8; //生成低16位码 for(i=0;i<8;i++) //颠倒lable位 { real_lab=(lab>>i)%2; temp_lab=temp_lab(real_lab<<(7-i)); real_lab=0; } Hi=((data32 0xff00000 0)>>24)(temp_lab<<8); //生成高16位码 调试证明,通过以上的数据准备工作,就可以发出符合规范的429码。 ·接收部分 接收部分的前端设计与发送部分相同,图7是设计的接收界面。开始也要进行板卡初始化和设置接收属性,调用Setup_Receive_Channel_RTx函数设置完成。
当开始接收数据时,接收寄存器会得到高16位和低16位两组码(数据格式与发送部分完全相同,可参见图6,同时在板卡的标准模式下,还会得到用两个16位码表示的时间标号以及1个16位码的板卡状态返回值。要正确识别各段码的信息。关键是对于数据位的处理。要根据数据不同的填充方式编写不同的代码。仍然以BNR码填充为例,给出读取32位码各段信息的代码。按照同样的思路,可以得到以BCD码填充数据区的识别程序和对时间标号的识别。 data=((hi0x0000001f)<<14)(lo>>2); //合并两端数据代码,读取数据 lab=(hi0xff00)>>8; //读取label for(i=0;i<8;i++) l {real_lab=(lab>>i)%2; temp_lab=temp_lab(real_lab<<(7-i)); real_lab=0;} lab=temp_lab; ssm=(hi0x00000060)>>5; //读取ssm sdi=lo0x00000003; //读取sdi 由以上程序可以读出429码的各段码信息,对于这些信息,CVI编程支持的显示方式包括表格循环显示、表盘显示等。 ·触发和中断的处理 对于信号发送和接收中存在的触发和中断的问题,板卡本身支持硬件触发和中断。同时还可以利用CVI提供的Timer控件实现,通过面板控件可以设置Timer的时间间隔来控制触发时间,通过设置Timer的关闭,来实现中断。 结语 本设计采用虚拟仪器设计思想,在针对某型飞机研发的自动检测系统中很好地完成了对各类429总线信号的仿真和检测任务。另外,使用这种方法还可以根据需要选择多个通道同时工作,并发挥虚拟仪器灵活的特点对429信号进行多种处理和显示。 参考文献: 1. 张毅,周绍磊等,虚拟仪器技术分析与设计[M],机械工业出版社,2004 2. 429RTxDiscrete Software Tools Programmer’s Reference[M].Excalibur System Inc..2003 3. M4K429RTx User’s Manual[M].Excalibur System Inc..2006 4. 王建新,杨世凤等,LabWindows/CVI测试技术及工程应用[M],化学工业出版社,2006 编辑:何世平