姚旭栋 何黎明 王 林
(上海交通大学电子信息与电气工程学院,上海 200240)
在某研究院航电实验室针对某型号支线飞机的开发与试验过程中,现有ARINC 429总线通信设备由于开放性差以及可扩展性不足等因素,已不能满足实验室在开发和试验过程中对ARINC 429总线通信仿真环境的要求。为了提供一个可靠、实用、可自定义的运行环境,本文设计了基于虚拟仪器的ARINC 429总线仿真系统。该系统可实现上电初始化、总线数据存储以及自定义增减总线信号、编辑发送数据和解析接收数据等功能,能够满足航电系统当前开发与试验工作中对ARINC 429总线通信仿真环境的需求,并可根据需要,方便地进行系统功能的升级和扩展。
ARINC 429是美国航空无线电公司所制定的航空数字总线传输标准,定义了航空电子设备和系统之间相互通信的规范。ARINC 429总线信号使用双绞屏蔽线传输,传输速率可分为高速100 kbit/s和低速12.5 kbit/s,每个总线发送端最多可连接20个接收端[1]。总线数据通信的每个字都由32位数据组成,其中1~8位包含了标号信息(label),9~10位提供了源终端识别信息(source/destination identifier,SDI),11 ~29 位包含数据(data),30 ~31位组成符号状态矩阵(symbolic state matrix,SSM),最高位(32 位)为奇偶校验位(parity)[2]。
ARINC 429总线仿真系统基于虚拟仪器技术,硬件采用美国国家仪器公司(NI)的工业化总线PXI平台以及AIM公司的ACX429 PXI通信模块。ACX429 PXI通信模块具有8路通道,通过编程可对每路通道的收发状态以及传输速率进行配置,传输速率可在高速100 kbit/s和低速12.5 kbit/s之间进行切换。软件设计基于LabVIEW,搭建了系统的框架和硬件的控制程序,并借助LabVIEW图形化的开发环境,创建了具有良好人机交互性的系统界面。
借助上述硬件和软件平台,自定义ARINC 429总线仿真系统可实现多通道自定义信号的批量发送和接收,支持 BNR(binary)、BCD(binary-coded-decimal)和DISC(discrete)三种数据类型的总线信号,并通过创建数据库,实现总线信号的初始化和自定义配置以及数据和状态的自定义保存等功能。
自定义总线数据的发送模块可按需求实现对总线信号的配置,能设置信号的名称、数据类型、发送间隔等所有相关信息,并自动生成32位数据,在指定的发送间隔和发送通道下进行总线信号的发送。
实现总线信号发送功能的LabVIEW软件结构主要分为数据库、总线数据操作程序、全局变量和ACX429驱动程序四部分,其结构框图如图1所示。
图1 总线信号发送程序结构框图Fig.1 Block diagram of bus signal transmitting program
数据库基于Microsoft Access数据库管理系统,通过第三方开发的工具包LabSQL对数据库进行操作。LabSQL利用Microsoft ADO和SQL语言访问数据库,并对复杂的底层 ADO和SQL操作进行了封装[3-4]。相比于LabVIEW中如TDMS等其他形式的数据存储方式,使用数据库连接LabVIEW,尽管存取速度相对较低,但能够有效地支持一些对数据结构要求严格的场合[5]。数据库中保存了所有总线信号的配置信息以及发送数据,供总线数据操作程序调用。
总线数据操作程序主要由以下四部分构成。
①总线信号配置程序,实现新增、删除、编辑任意总线信号等功能,每条信号都包括信号名称、Label、数据类型、发送通道等信息,并实时保存至数据库。
②初始化程序,在程序运行初始,读取数据库中全部总线信号的配置信息并赋给全局变量,最后,根据全局变量,生成初始状态下的32位数据。
③发送状态配置程序,双击信号列表中的信号名称,可编辑总线信号的发送数据和发送状态,并将编辑结果实时传递给全局变量,生成待发送的32位数据。
④发送状态管理程序,可以将全局变量中所有信号的发送数据以及是否被选定发送的信息保存至数据库,也可以从数据库将这些信息载入到全局变量。
LabVIEW全局变量由配置信息、发送数据、发送通道、发送间隔和32位数据这五种数据构成。配置信息包含了每条总线信号除发送数据外的所有信息,发送间隔和发送通道从每条信号的配置信息中提取。一旦全局变量从总线数据操作程序获得某信号配置信息或发送数据的更新,系统将实时计算该信号的32位数据,以确保硬件驱动程序能随时调用到最新的信息。
ACX429板卡的驱动程序模块通过LabVIEW的CLN节点调用相关动态链接库实现,这种方法使得LabVIEW在能够支持NI公司数据采集卡的情况下,还能够直接使用第三方的数据采集卡,从而大大提高了开发效率[6-7]。
当开始发送总线信号后,LabVIEW程序首先对发送通道的传输速率、缓存空间等参数进行配置。系统中,将参数b_speed置为1,则通道的传输速率设定为高速,即100 kbit/s;将参数b_speed置为0,则通道的传输速率设定为低速,即12.5 kbit/s。然后,调用LabVIEW全局变量中每个总线信号的发送间隔以及32位数据,为每路发送通道创建一张缓存表,保存在缓存空间。最后,根据缓存空间内的表格进行总线信号的发送。
ACX429驱动程序的初始化程序为每个信号分配20个字的缓存空间,因此,缓存表的大小为信号数N×20,格式如图2所示。系统中,总线信号的发送间隔共有 50 ms、100 ms、200 ms、500 ms 和 1000 ms 五种,根据每个信号不同的发送间隔,将该信号的发送数据按照图2中数据“D”所示的位置和间隔,写入到缓存表中的相应行和列。ACX429驱动程序在初始化后读取各通道的缓存表,每隔50 ms依次发送缓存表中的一列数据,并在收到停止发送指令前循环发送缓存表中的数据,从而每秒都能将整张缓存表的数据发送一遍。因此,按图2所示的格式,根据信号的发送间隔,将所有总线信号的32位数据写到缓存空间中去,就能够使总线信号在指定的发送间隔下进行发送。
图2 总线通信缓存表示意图Fig.2 Schematic of the bus communication buffering
自定义总线数据的接收模块可实现接收和显示在指定通道内传输的总线信号的功能。除了每条总线信号原始的32位数据外,还能显示信号的解析数据、配置信息以及在相应通道内的发送间隔。
对于需要接收的总线信号,与发送信号一样,必须事先在数据库中预存基本信息,如信号名称、数据类型、数据格式等。在接收总线信号时,根据32位数据中低8位的Label信息,查找它在数据库中对应的预存信息,并根据数据类型、数据格式来解析该总线信号的发送数据,实现了实时接收、显示、解析总线数据的功能,且可对接收到的总线信号按自定义配置,保存至数据库或者导出至Excel文件中。
ARINC 429总线信号的Label号共有256种,每个Label号对应四种SDI号。因此,通过LabVIEW在缓存空间中创建一张256×4×20的表格,可以使接收到的总线信号按Label号和SDI号存放在唯一指定的位置,并为每个总线信号分配20个字的缓存空间。
在完成硬件的初始化配置以及缓存表的创建后,程序每隔50 ms接收一次通道上正在发送的总线数据,并更新至缓存表。在接收20次数据即1 s后,程序将根据缓存空间每一行的非空数据的数量,计算该行对应的总线信号的发送间隔。完成所有信号发送间隔的计算后,清空缓存表并重复以上操作,程序流程如图3所示。
在软件设计中,引入了生产者-消费者模型作为程序的主要结构,将不同功能的循环划分为生产者和消费者角色,并在VI内部建立通信队列和状态机[8]。生产者循环以一定的速率生产数据或指令,并通过队列传输出去,而消费者循环则不断地从队列中接收新数据或指令,从而完成预定的“消费”操作[9]。通过引入这一结构,总线通信接收程序在执行接收数据、解析数据、显示数据以及保存数据这多项任务的同时,还能保持对用户界面的良好响应。LabVIEW支持多线程任务,而生产者-消费者模型利用多线程处理机制,使用队列作为缓存,将采集到的数据或者发出的指令直接放到队列中进行传递,实现将数据采集、数据处理、数据显示、数据保存和对界面的响应放到不同的循环中去执行的功能[10]。在这样的结构中,只通过队列传输数据或指令,使得各个功能模块能够独立运行,从而避免了多任务情况下各个功能模块之间的相互干扰以及对主界面响应造成影响。
通过与某研究院航电系统的现场交联试验,本系统能够按自定义需求正确收发ARINC 429总线信号,相关功能和可自定义的性能得到了验证,为航电系统及相关设备的开发和试验工作提供了一个可靠、实用、可自定义的运行环境。此外,本系统的开发基于虚拟仪器技术,采用模块化的设计思想,为今后根据现场的实际需要而进行的功能升级和扩展奠定了良好的基础。
[1]张田甜,刘亚斌.基于PXI总线的多功能ARINC 429通信接口电路设计[J].计算机测量与控制,2009,17(3):534 -548.
[2]宋桂华,赵伟,刘建业.多路ARINC429数据传输的设计与实现[J].微处理机,2009(3):116 -118.
[3]唐波,潘红兵,赵以顺.在LabVIEW环境下基于ADO技术和SQL语言的数据库系统实现[J].仪器仪表学报,2007,28(4):227-229.
[4]秘晓元,张彦斌,薛德庆.LabVIEW中利用LabSQL访问数据库[J].微计算机信息,2004,20(10):53 -54.
[5]丰伟伟,杨世文,南金瑞,等.LabVIEW中TDMS文件和SQL数据库数据处理速度的研究[J].仪器仪表与分析监测,2011(1):10-12.
[6]武剑,李巴津.基于LabVIEW的普通数据采集卡驱动研究[J].现代电子技术,2009(12):149-151.
[7]袁魏华,韩裕生,张伟伟,等.LabVIEW平台下调用DLL实现PC/104数据采集[J].嵌入式计算机应用,2008,24(4-2):57-61.
[8]叶枫桦,周新聪,白秀琴,等.基于LabVIEW队列状态机的数据采集系统设计[J].现代电子技术,2010(4):204-210.
[9]王晓飞,李岩,刘旺开,等.基于LabVIEW的环境模拟试验数据采集系统[J].兵工自动化,2009,28(2):76 -78.
[10]阮奇桢.我和LabVIEW[M].北京:北京航空航天大学出版社,2009:200-201.