基于PXI总线数据采集系统的设计
2016-10-14苗忠海徐志跃
苗忠海,徐志跃
(北京航空航天大学北京100191)
基于PXI总线数据采集系统的设计
苗忠海,徐志跃
(北京航空航天大学北京100191)
本文介绍一种通用的数据采集系统来对压力,温度等进行数据采集和处理。文中包含了采集系统的硬件设计和软件设计两部分,其中硬件部分包括PXI采集板卡,软件部分包括采集板卡WDM驱动,基于C#的上位机界面以及与MATLAB的混合编程。实际应用表明,该系统具有操作简便、测试准确的特点,达到了设计要求。
数据采集;PXI;WDM驱动;混合编程
数据采集与处理是计算机应用的重要分支,主要研究的是数据的采集、存储和处理。在工业生产、科研及医疗等领域经常需要针对一些现象来进行处理,比如在工业生产中对压力,温度等进行监测控制,在科研方面对某些现象进行系统分析,提取关键因素从而进行系统建模。而数据采集系统在里面具有很大重要性。对于简单的数据采集系统一般采用单片机或者ARM等微控制器加上外部模拟电路来实现,但对于复杂的采集系统,需要对数据进行实时传输和存储并且需要复杂处理的情况,是不能够满足的。计算机在后续的数据处理方面拥有绝对的优势。因此基于PXI的计算机数据采集系统具有广泛的应用性。利用PC机作为数据采集的平台,通过PXI数据总线将采集的数据传输到PC机内存中,然后进行数据处理。
1 总体设计
本文将基于PXI总线设计一种数据采集系统。系统结构图如图1所示。主要包括PXI数据采集卡的板卡设计,板卡驱动开发,上位机软件编程以及与MATLAB的混合编程。
2 系统硬件设计
基于PXI数据采集卡主要分为5部分:PXI总线接口芯片PCI 9054、FPGA、数字量输出调理电路、AD采集电路和输入/输出连接器。其原理框图如图2所示。
其板卡实物图如图3所示。
为了实现板卡与主机物理连接,板卡设计成PXI总线连接器,通过与主机的PXI总线插座连接。图中的FPGA芯片通过对主机传过来的上位机指令进行解析译码,配合上位机的读写时序,将设计的数字量传至底层的硬件,或者将下层采集的AD值传给主机。底层的AD采集硬件主要包括多路选择器,量程设置电路,差分/单端选择电路和AD转换电路。AD采集的工作流程为将采集到的数据先缓存至FPGA里面的FIFO中,判断是否满足触发条件,然后进行触发上位机中断,此时上位机读取转换的AD采集数据[1]。
虽然主机与板卡进行了物理连接,但要进行通信需要一定的逻辑电路来实现接口。采用PLX公司的PCI总线接口芯片(PCI9054)来实现接口,配合时序、逻辑电路,以PCI9054为核心来实现Local总线与PXI总线的接口[2]。
图1 系统总体结构图
3 软件设计
3.1驱动程序的编写
在Windows操作系统下,一般的应用程序不能直接操作I/O端口,往往通过驱动程序将数据读至计算机的内存中,然后再进行数据操作。因此驱动程序在硬件和上层应用程序之间具有纽带作用。然而如何去设计驱动程序,不同的硬件具有不同的驱动程序,特别是不同类型硬件更是有不同的方式[3],比如USB驱动,PCI驱动等不同种类的驱动开发方法。所以在设计驱动前要明确以下步骤:
1)寄存器:设备具有寄存器的数量,功能,以及何种类型(控制、数据、状态);
2)设备错误和状态:设备具有哪些状态和错误信号,最后需要反馈给用户;
3)中断行为:确定设备所使用的中断数量和触发条件;
4)数据传输机制:数据传输方式基本包含I/O传输和DMA传输;
5)操作流程和注意事项。
驱动类型为WDM驱动程序,它编写规范,源自Windows NT驱动程序体系,具有即插即用、电源管理等功能。开发所需要的环境有微软公司提供的DDK(Device Driver Kits),开发软件选择Driver Studio+VC6.0。
图2 数据采集板卡原理图
图3 数据采集板卡实物图
PXI板卡驱动开发流程:
①首先参照DDK的帮助文档等相关资料,实现PCI驱动程序的框架,设计一个虚拟的驱动程序,不对真实硬件操作,初步能够实现在操作系统上进行安装和卸载[4]。
②同样编写驱动程序与应用程序的接口,能够完成基本的的虚拟设备操作。不操作硬件,主要验证驱动程序与应用程序通信的可行性。
③将设计的板卡插入至机箱,验证所编写的驱动程序的正确性,此时只完成了驱动的基本操作,如简单的读写寄存器,突发传输方式读写板载FIFO,同时验证FPGA逻辑程序的正确性。
④验证中断服务程序和延迟过程调用例程的正确性。
⑤去掉开发板卡,直接对自主设计的PCI板卡进行验证。
⑥完善整个驱动程序,实现与应用程序的接口部分,并进行封装。
3.2上层界面设计
系统的上位机采用C#语言进行界面开发,如图4所示。C#具有缩短软件开发周期,入门简单,移植性优秀的特点,支持.NET技术增加了软件的可移植性和可靠性。C#作为微软公司在2000年发布的全新的面向对象语言,吸取了之前的C,C++和JAVA的语言的优点,经过这些年的使用更新,越来越占有编程软件的市场份额,这也使它始终位于科技前沿,在现代企业计算环境里作为一种效率高,可用性强的高级编程语言。C#融合了当今世界上使用最为广泛的3种程序设计语言,还增加自己独有的新技术,为程序设计提供了全新的开发设计平台。
但C#不能直接去操作硬件,在开发完驱动后,生成对应的DLL库,通过对库进行封装,通过引用DLL的方式去操作板卡[5]。对相应函数进行说明。
①初始化模拟采集任务CPXI7040Card(uint dev)
在该方法中,首先通过DAQmxCreateTask()函数创建模拟输入任务,通过DAQmxCreateAIChan()函数创建模拟输入通道。
②设置板卡参数AIConfig()
与数字输出不同的是模拟采集任务需要配置任务参数,使用板卡驱动的API函数DAQmxCfgSampClkTiming()可以设置采样率、采集触发方式、采样模式、每通道采样点数。分别设置为10000S/s,上升沿触发、连续采样、每通道采集100个点。
③启动模拟采集任务AIStart()
图4 上层界面设计
启动模拟采集任务,通过调用板卡驱动的API函数DAQmxStartTask()来启动数据采集。这时板卡不断地对模拟信号进行采集。如果想获得采集到的数据,则需要在启动数据采集前调用驱动API提供的注册函数DAQmxRegisterEveryNSamplesEven()注册回调函数,并在回调函数中调用DAQmxReadAnalogF64()读取数据即可。
④停止模拟采集任务AIStop()
在该方法中通过板卡驱动API的DAQmxClearTask()来停止采集任务,清理采集通道。
3.3C#与MATLAB混合编程
MATLAB在算法和数学计算方面具有很大的优势,可以处理各种数据,然而却没有比较好的界面去显示,同时C#具有很好的界面,但作为C家族的成员,在计算方面一般,不能进行复杂的运算,因此将两者结合充分发挥他们的有点,弥补他们的缺点是很好的数据处理方法。
MATLAB软件提供了多种方法来和供C#使用,其中还可以利用MATLAB自身的编译工具(MATLAB COM Builder)将M文件生成COM组件,然后再C#可以添加引用里调用生成的COM组件[6]。
1)环境配置
在开发之前要搭载好开发环境,需要安装的软件有:
①MATLAB 2010b;
②MCR(Matlab Compile Runtime)。
③Microsoft Visual Studio 2008;
其中MCR在安装目录下可以找到。
2)设计COM组件
首先编写MATLAB的M文件,M文件里包含了数据处理的方法函数,然后在MATLAB菜单栏里新建Deployment Project。在Type类型里选择.net assembly。选择好名字点击下一步,在Add Class选项添加M文件,点击编译等待一段时间即可生成对应DLL文件。
3)混合编程
在C#里引用生成的DLL文件,从而对MATLAB生成的算法进行使用。首先新建一个C#工程,在引用里添加生成的DLL文件,同时,由于MATLAB和C#有不同的数据类型,因此在使用时要给两者提供一个翻译机制。因此我们还需要引用MATLAB提供的.NET支持的DLL库(MWArray.dll),同时在文件中引用他们。最后在程序中可以使用M文件的功能函数进行数据处理了。
4 结论
利用模拟信号技术和数字信号技术,基于计算机的PXI总线数据采集系统能够有效地解决科研,工业等领域的数据采集问题。拥有良好的界面且具有处理复杂数据的能力,是科研人员有益的工具。在温度监控,压力测试等数据采集领域具有重要的应用。
[1]韩喜春.计算机总线技术应用实例[M].北京:化学工业出版社,2010.
[2]李贵山,陈金鹏.PCI局部总线及其应用[M].西安:西安电子科技大学出版社,2003.
[3]尹勇,李宇.PCI总线设备开发宝典[M].北京:北京航空航天大学出版社,2005.
[4]武安河.Windows 2000/XP WDM设备驱动程序开发[M],北京:电子工业出版社,2003.
[5]李焕英.数据采集系统的研究与设计[D].南京理工大学,2012.
[6]张亮.MATLAB与C/C++混合编程[M].北京:人民邮电出版社,2008.
Design of data acquisition system based on PXI bus
MIAO Zhong-hai,XU Zhi-yue
(Bei Hang University,Beijing 100191,China)
In order to collect and deal with the data,such as pressure and temperature,a general-purpose data acquisition system is designed in this paper.It contains the hardware system and the software system.The hardware part introduces the design of the PXI Card.what's more,the software part introduces the Card WDM driver,the mixed programming of MATLAB and C#.The experiment and application show that this test system has good performance,and achieve the design requirement.
data collection;PXI;WDM driver;hybrid programming
TN919
A
1674-6236(2016)12-0067-03
2015-06-29稿件编号:201506247
苗忠海(1991—),男,山东日照人,硕士。研究方向:WDM驱动开发、计算机测控。