基于LabWindows/CVI的数据采集系统软件设计*
2010-04-26王海涛杜向辉
王海涛 付 钧 鲜 勇 杜向辉
(武汉市长虹桥37-1号1) 武汉 430064)(中国空空导弹研究院2) 洛阳 471009)
(海军驻洛阳地区航空军事代表室3) 洛阳 471009)
1 引言
ARINC 429是美国航空无线电设备公司(Aeronautical Radio Incorporated ARINC)资助,航空系统电子工程委员会(AEEC)制订的一个通讯协议标准,目前版本为ARINC429-15。ARINC429总线通过一对单向、差分耦合、双绞屏蔽线进行数据传输,支持最高100Kbit/s的传输速率,广泛应用在航空电子设备中。
LabWindows/CVI是NI公司开发的一种可以在多种操作系统下运行的虚拟测控软件开发平台,它不但有丰富的函数库,还集成了各种专业的测控工具,提供了优越的硬件接口功能,基于该环境可以充分利用各种资源配置系统结构,进而达到系统最优、成本最低的目的。
在某型产品的生产测试过程中,需要利用ARINC429数据采集设备进行数据采集和分析,本文设计一种基于LabWindows/CVI软件开发平台开发的USB接口的ARINC429数据采集系统,该系统通过USB连接线与测试计算机连接,支持即插即用(Plug and Play),使用简单,安装时无需关闭测试计算机,也不需要打开机箱安装,避免了专用测试设备体积大、质量大的缺点。
2 系统硬件组成
该数据采集系统由USB接口芯片PDIUSBD12、微控制芯片AT 89C52及ARINC429控制芯片DEI1016和BD429芯片组组成。DEI1016接收到429数据后,经AT 89C52发给PDIUSBD12,通过USB总线发给上位机[1]。系统硬件结构图如图1所示。
图1 数据采集系统硬件结构图
3 系统软件设计
该系统的应用程序开发选用LabWindows/CVI开发平台,CVI是Windows环境下面向计算机测控领域的虚拟仪器软件开发平台。该平台以ANSI C为核心,将功能强大的C语言与测控专业工具有机地结合起来,并支持多线程,利用它的集成开发环境,在编程过程中直接调用用户界面函数和高级分析库函数,能方便的实现数据存储、波形输出等功能[2]。
3.1 多线程技术与设计
在本系统中上位机和数据采集卡之间通信的实时性要求很高,收发的数据量比较大,软件对采集到的数据做实时处理之外还需要实时显示与储存,因此,保证各种任务的同时进行且互不影响是此系统软件设计的关键,采用多线程技术可以很好地解决本系统的问题。
多线程技术可以实现在操作系统的一个进程中执行多个线程的并行执行。因此采用多线程的编程技术,整个系统软件含有完成不同功能的多个线程,如数据采集、数据处理、实时数据显示。这样既能最大限度地保证数据采集的实时性,又能及时响应用户的其他操作,极大地提高了CPU利用率及程序的运行效率。
LabWindows/CVI提供2种定时器机制实现多线程的方法:线程池与异步定时器。线程池适用于不连续地执行多次或在循环中执行的任务,而异步定时器适用于在固定时间间隔内执行的任务。结合本系统的实际情况,多线程的设计采用线程池机制。软件中以用户界面为主线程,将数据采集、数据实时显示为次线程,在所有的并发线程中,负责数据采集线程优先权仅次于用户界面线程。数据采集系统主要完成的任务有实时采集,将采集的存入数据库或输出等。
使用多线程设计,数据保护与线程间的通信安全是一个关键问题,否则就会造成应用程序“死锁”。LabWindows/CVI提供了线程锁、线程安全变量和线程安全队列3种高级机制来解决这些问题,其中线程安全队列方法是为多个线程之间传递大批量数据提供的一种保护措施,因此本设计采用线程安全队列的方法。在建立线程安全队列TSQ的同时,设置对应于某一事件的回调函数,当有线程向线程安全队列TSQ添加数据或读取数据时,就会触发预先定义好的事件响应函数,这些函数存在于数据处理线程中,从而完成相应的数据处理功能。本设计多线程的架构流程见图2,两者通过线程安全队列开辟的缓存进行线程的同步与通信[3]。
图2 线程架构流程图
系统用户主界面如图3所示。
图3 数据采集系统用户主界面
3.2 动态链接库设计
动态链接库的设计主要解决USB板卡与应用软件之间的通信,动态链接库(DLL)是一种函数或资源库,库中的函数可以被应用程序或其他DLL调用。使用LabWindows/CVI平台开发的应用程序不能直接调用Window s的 API函数。因此,DLL就成为两者建立联系的桥梁。对于32位标准动态链接库,其DLL文件中包含了具体的实现代码,而导出库文件则包含函数的导出信息,即相应的函数在DLL文件中的位置和应用方法等[4]。
在为该系统的ARINC429数据采集卡开发的DLL文件中,其主要函数声明如下:
在DLL文件的编写中应注意以下问题:
1)DLL的声明中不需要在函数声明前加‘extern"C"'。
2)DLL的声明中如果某一个函数没有参数,应用void代替。
3.3 数据库设计
数据采集系统需要将采集到的数据以文档形式保存,由于数据繁多,查找起来不是很方便,可以创建一个数据库将有关数据索引存入数据库中,查找过程就可大大简化。还可将429解码信息放入数据库中,通过程序调用完成429数据解码功能。利用这种体制可以方便的对程序进行扩充,完成不同编码格式的429信息的解码。
LabWindows/CVI并没有提供直接通过标准函数库提供数据库的操作函数,也没有在工具包中包含数据库的驱动器。要在LabWindows/CVI的环境下使用数据库,可以安装一个免费的CVI数据库工具包DatabaseToolKit。工具包中提供了丰富的数据库函数,CVI可通过ADO接口连接多个数据源,本系统采用ODBC数据源。ODBC实际上是一个函数库,它提供了一个连接到底层数据库系统的公共应用程序接口。
软件连接数据库部分代码如下:
数据库查询界面如图4所示。
图4 数据查询界面
4 结语
本文基于LabWindows/CVI这一软件开发平台,设计了一种高速ARINC429数据采集系统。运用多线程技术、DLL技术及数据库技术极大的提高了系统性能,使采集系统具有了实时性、可扩展性等特点。系统经过测试达到了设计要求,运行情况良好。
[1]梅小冬,李玉恩.基于USB的ARINC429总线测试系统的设计[J].微计算机应用,2005(6):751~754
[2]王建新,杨世凤,隧美丽.LabWindows/CVI测试技术及工程应用[M].北京:化学工业出版社,2006
[3]翟巍,王勇,植涌.基于 LabWindows/CVI高速数据采集系统的设计[J].郑州轻工业学院学报,2007,22(6):83~86
[4]王纪森,周世刚.基于LabWindows/CVI的飞机加载测控系统[J].测控技术,2008,27(3):69~72