标题:
基于虚拟仪器的ARINC429总线信号仿真和测试方案
[打印本页]
作者:
Bazinga
时间:
2014-5-27 21:21
标题:
基于虚拟仪器的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所示。
图1 ARINC429双极性归零编码方式图
按照规定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),实现简单的数据校验功能。
图2 429 信号32位字格式
基本设计思想
设计航空429总线信号的仿真和检测采用了虚拟仪器的设计思路。简单的说,虚拟仪器就是通用计算机加上软件和硬件。硬件用来解决信号的输入输出问题,软件用来实现对信号的处理、显示等功能。它利用计算机的强大支持,使用户可以很方便地对其维护、扩展和升级。与传统仪器相比,虚拟仪器具有很高的灵活性,可以通过编制软件来定义功能。目前在这一领域内,使用较为广泛的软件包括NI公司的LabVIEW 和LabWindows/CVI,HP公司的VEE等。
设计中,硬件方面使用基于PCI插槽的429信号收发板卡,将其插入通用电脑PCI插槽达到了测试的硬件要求,实现429信号的发送和接收;软件方面使用NI公司的LabWindows/CVI作为开发平台,主要用来完成发送前的数据准备、对接收数据的处理和显示等工作。
设计实现方法
硬件介绍
选用西安方元明公司代理的EXC_M4K429RTx模块板卡。该板卡的基本结构如图3所示。
图3 M4K429RTx板卡结构原理图
其主要性能参数包括:支持5~10通道,每个通道均支持接收发送自定义;信号传输率为12.5~100Kbps编程可调;4K×8双端口RAM作为数据收发缓存;支持奇偶校验和可编程输出硬件触发,中断和选择模式;发送通道支持单个发送,单次发送和循环发送三种发送模式;接收通道支持查询接收,单通道连续接收和多通道连续接收三种模式;发送字间隔编程可调;支持添加时间标签;有纠错功能。
软件支持:提供windows下运行的C驱动;支持VC、LabVIEW、Delphi、LabWindows/CVI等软件进行开发。
软件设计
软件设计主要包括两方面的工作,一是设计实现29信号的发送,即信号的仿真;另一个是实现接收429信号并以合适的方式处理,包括如何显示等,即信号的检测。
·发送部分
发送部分设计流程如图4所示,设计的工作界面参见图5。
图4 发送数据流程图
图5 发送界面
首先,输入设备号、模块号和选择发送通道,通过调用板卡函数Init_Module_RTx对板卡初始化,获得对板卡进行操作的句柄,点击“打开板卡”按钮可以完成这一步工作。然后调用板卡的属性设置函数Setup_Transmit_Channel_RTx设置发送通道的发送属性,包括发送方式,发送数据速率,发送时间间隔和奇偶校验,通过面板控件获得这些属性值,如发送方式可选择单次,单个和循环发送三种发送模式。发送速率12.5~100Kbps可选。
实现设计的关键是如何得到标准格式的32位429码,并按照板卡硬件规定的格式将其放入发送寄存器中。如图5在发送数据区中对应输入所要发送的数据信息。由于429 信号数据位码的填充方式根据数据类型的不同分为两种,一种是按照BCD码填充,一种是按照BNR码填充,因此编写软件时,首先需要判断label类型,确定数据的填充方式,然后将它们合并成符合其数据类型的32位429码信息,再按照图6所示的发送格式,将其分为高16位和低16位两组码分别放入发送寄存器的高位和低位中,才能被正确发送出去。
图6 发送寄存器中的码格式
下面给出了以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_data|lab|ssm|sdi;
return data32;
}
Lo=(data
32&0x 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函数设置完成。
图7 接收界面
当开始接收数据时,接收寄存器会得到高16位和低16位两组码(数据格式与发送部分完全相同,可参见图6,同时在板卡的标准模式下,还会得到用两个16位码表示的时间标号以及1个16位码的板卡状态返回值。要正确识别各段码的信息。关键是对于数据位的处理。要根据数据不同的填充方式编写不同的代码。仍然以BNR码填充为例,给出读取32位码各段信息的代码。按照同样的思路,可以得到以BCD码填充数据区的识别程序和对时间标号的识别。
data=((hi&0x0000001f)<<14)|(lo>>2); //合并两端数据代码,读取数据
lab=(hi&0xff00)>>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=(hi&0x00000060)>>5; //读取ssm
sdi=lo&0x00000003; //读取sdi
由以上程序可以读出429码的各段码信息,对于这些信息,CVI编程支持的显示方式包括表格循环显示、表盘显示等。
·触发和中断的处理
对于信号发送和接收中存在的触发和中断的问题,板卡本身支持硬件触发和中断。同时还可以利用CVI提供的Timer控件实现,通过面板控件可以设置Timer的时间间隔来控制触发时间,通过设置Timer的关闭,来实现中断。
结语
本设计采用虚拟仪器设计思想,在针对某型飞机研发的自动检测系统中很好地完成了对各类429总线信号的仿真和检测任务。另外,使用这种方法还可以根据需要选择多个通道同时工作,并发挥虚拟仪器灵活的特点对429信号进行多种处理和显示。
欢迎光临 电子技术论坛_中国专业的电子工程师学习交流社区-中电网技术论坛 (http://bbs.eccn.com/)
Powered by Discuz! 7.0.0