您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 信息化管理 > 基于PCI-1713和LabVIEW的高速数据采集系统设计
1基于PCI-1713和LabVIEW的高速数据采集系统设计ADesignforHighSpeedDataAcquisitionSystemBasedonPCI-1713andLabVIEW(兰州交通大学)王梦玲,王思明Wang,MenglingWang,Siming摘要:本文介绍了一种基于图形化虚拟仪器编程软件LabVIEW的高速数据采集系统设计方案,并且详细论述了32位LabVIEW驱动函数的功能和使用方法。系统以研华公司的高速数据采集卡PCI-1713为硬件平台,采用中断触发方式进行数据采集,并将数据存储到文本文件中。实验结果表明,该系统能够有效地完成对信号的高速数据采集和实时图形显示。关键词:PCI-1713;LabVIEW;数据采集;研华32位LabVIEW驱动;中断触发中图分类号:TP274文献标识码:AAbstract:Inthispaper,adesignproposalforhighspeeddataacquisitionsystembasedonvirtualinstrumentprogrammingsoftwareLabVIEWandthefunctionof32-bitLabVIEWdriveraredescribed.AdvantechPCI-1713isusedasthehardwareplatformofthesystem,whichusesinterrupttriggeringtoacquiredataandthensavesthemtotextfile.Thesystemisprovedtoworkwelltoaccomplishhighspeeddataacquisitionandreal-timegraphdisplaybytest.Keywords:PCI-1713;dataacquisition;LabVIEW;Advantech32-bitLabVIEWdriver;interrupttriggering1引言目前的高速数据采集系统设计主要是基于VB、VC等文本编程语言,虽然这类语言的灵活性好,执行效率高,但若要在采集的同时将数据实时绘制成图形,则难度很大,对采集数据的分析处理也只能借助于其他工具才能实现。使用LabVIEW软件编程可以很好地解决以上问题,它含有的图形控件能够直接将输入数据以图形方式显示,并且LabVIEW提供了大量的信号处理函数和高级信号分析工具,可直接对输入信号进行分析和处理。另外,虽然有些资料介绍了在LabVIEW环境下通过采集卡进行数据采集的方法,但由于采用的是软件触发方式,采集速度很低,在很多情况下不能满足实际应用的要求。而在中断触发方式下,可以进行连续高速的数据采集。研华公司为其数据采集控制卡开发了32位的LabVIEW驱动程序,该驱动提供了一个调用32位DLL驱动程序的接口。在LabVIEW中,驱动函数以子VI的形式给出,通过对这些子VI的调用,用户可以方便地访问底层寄存器,直接对板卡进行I/O操作。以PCI-1713为硬件平台,借助LabVIEW驱动程序提供的子VI函数,可以设计一个基于LabVIEW软件的采用中断触发方式进行数据采集的高速数据采集系统。本系统不仅能实现对模拟信号的高速数据采集,还能将采集结果以图形方式显示,很好地解决了在文本编程语言下实时图形绘制难的问题。2系统硬件介绍本系统使用的PCI-1713是研华公司生产的一款基于PCI总线的32通道模拟量采集控制卡,它采用12位高速A/D转换,采样率可达100KS/s,并在输入和PCI总线之间提供了2500VDC的直流光隔离保护,用于保护PC及外设免受输入线上高压电的损害。PCI-1713使用一个PCI控制器作为采集卡与PCI总线的接口。由于它支持PnP(PlugandPlay),其基地址及中断都由系统自动配置。板卡功能结构框图如图1所示。图1PCI-1713结构框图PCI-1713的主要特性如下:(1)32路单端或16路差分模拟量输入,或采用单端和差分输入的不同组合方式来完成多通道采样;(2)各输入通道的增益可独立编程,输入范围包中断步长模拟输入(32路)10MHzOSCPGIA12位A/D4KFIFO地址总线地址解码器PCI总线多路复用器PCI控制器中断发生器计数器数据总线ADC控制逻辑2括±10V,±5V,±2.5V,±1.25V等,用户可通过软件选择最适合被测信号的电压范围,并且每个通道不同的增益值及配置会存储到卡上的SRAM中;(3)自动通道/增益扫描,板上的自动通道/增益扫描电路在采样时自动完成对多路选通开关的控制;(4)板载4KFIFO采样缓存器,该特性提供了连续高速的数据传输及Windows下更可靠的性能;(5)对于A/D转换,PCI-1713支持三种触发模式:软件触发、内部定时器触发和外部定时器触发。3系统软件设计3.1主要子VI说明子VI的使用是在LabVIEW环境下进行数据采集系统设计的基础,只有掌握了它们的功能和使用方法,才能设计出实现特定功能的程序。虽然研华公司提供了PCI-1713的32位LabVIEW驱动程序,但跟其配套的帮助手册上对这些驱动函数子VI的说明却不够详尽,提供的例子也并不实用,给用户开发自己的应用程序带来很大的不便。笔者结合自己在实际项目中积累的编程经验和一些实验结果,给出了本系统所用到的几个关键子VI的功能和使用方法说明:DeviceOpen:打开指定的设备并返回一个驱动句柄,之后所有执行相应I/O操作的子VI都应基于该句柄参数所获得的配置数据。该子VI必须在调用其他驱动子VI之前调用。AllocDSPBuf:为用户缓冲区分配参数Count指定大小的空间。该子VI的输出用作FAITransfer子VI的输入,通过MemoryType参数可以选择以电压形式或二进制形式显示数据。程序运行结束后,LabVIEW自动释放此内存空间。SingleChannelINTSetup:开始单通道中断触发方式的A/D转换,并将采集到的数据储存到内部缓冲区,该操作将一直进行,直到调用FAIStop子VI。该子VI运行时将自动调用AllocINTBuf子VI,分配FAIINTStart.Count参数所指定大小的内部缓冲区。与用户缓冲区不同的是,在程序结尾需另外调用子VI释放此内存空间。通过该子VI可以设置采样率、增益代码、循环方式、是否使用FIFO缓存器等。WaitFastAIEvent:使程序进入等待状态,直到设定的事件发生(内部缓冲区半满或全满,等待结束,内部缓冲区全满)或等待时间超出用户通过Timeout参数设定的值。该子VI可以用来捕获内部缓冲区半满或全满事件。FAITransfer:将数据从内部缓冲区传送到用户缓冲区。该子VI能够判断内部缓冲区当前的状态是半满还是全满,从而执行不同的操作:半满时,从内部缓冲区取出1/2Count数量的数据到用户缓冲区;全满时,不做任何传输操作。要实现连续数据采集,程序中需要反复调用该子VI。此外,如果在AllocDSPBuf中选择的是以电压形式显示数据,该子VI还负责完成从原始数据到电压值的转换。FAICheck:获得当前操作的状态。主要参数如下:Retrieved:显示采集到的数据的数量,当采集数据的数量达到FAIINTStart.Count的值后归零,重新开始计数;OverRun:显示缓冲区中的数据是否已被及时地传送出去;HalfReady:显示内部缓冲区的状态:0表示无任何半区满;1表示前半区已满;2表示后半区已满。需要注意的是,该子VI和FAITransfer判断半满和全满的标准是采集到的数据数量是否达到FAIINTStart.Count的一半和FAIINTStart.Count,并不是内部缓冲区真正意义上的半满和全满。当然,如果将内部缓冲区的容量设置为与FAIINTStart.Count的值相等,这两者就是同一种情况。只有将该子VI与FAITransfer配合使用,才能实现对采集数据的处理。DeviceClose:关闭由DeviceOpen打开的设备,在程序结尾需调用此子VI,以释放资源为下次操作做好准备。3.2程序设计研华LabVIEW驱动程序提供三种动态数据采集方法,分别是中断触发、DMA触发和看门狗触发。本系统采用的是常用的中断触发方式。长时间的高速实时数据采集要用到内部缓冲区和用户缓冲区两块内存区域。采集的数据先写入内部缓冲区,再由内部缓冲区传送到用户缓冲区,然后就可以将数据以图形方式显示并存入文本文件。3PCI-1713模拟输入的中断操作有两种方式:一种是不使用FIFO,每完成一次A/D转换就产生一个中断信号,进行一次传送。另一种方式是使用FIFO,将采样值先放在卡上的FIFO缓存器中,当FIFO半满时才产生一个中断。不使用FIFO时,FAIINTScanStart.FIFOSize是默认值1,使用FIFO时,这个参数值应设为2048,即FIFO容量的一半。使用FIFO能够获得更高速率的数据传输。内部缓冲区的使用多采用循环方式。在这种方式下,内部缓冲区分为前后对等的两个半区使用,执行一次SingleChannelINTSetup可以进行无数次的A/D转换。当内部缓冲区前半区满时,将此半区数据传送到用户缓冲区中,采集的数据继续向内部缓冲区的后半部分写入。当内部缓冲区全满时,将其后半部分数据传送到用户缓冲区中,同时新转换的数据会继续写入内部缓冲区的前半部分,如此反复,从而达到连续高速采集的功能。系统的软件流程图如图2所示。在本系统的程序设计中,使用SingleChannelINTSetup子VI将内部缓冲区的容量设置为与FAIINTStart.Count的值相等,这样,内部缓冲区半满和全满与采集数量达到FAIINTStart.Count的一半和FAIINTStart.Count就成为同一种情况。另外,在使用FIFO的情况下,基于内部缓冲区和用户缓冲区之间的传输机制,FAIINTStart.Count的值必须设置为半个FIFO的倍数。由于FAITransfer子VI不能在内部缓冲区达到全满的时候将其后半区的数据传出,所以只能在其半满时将缓冲区两个半区的数据一次性取出。基于这种思路,将用户缓冲区设置为两倍FAIINTStart.Count的大小。传输到用户缓冲区中的FAIINTStart.Count个数据由两部分组成,前半部分是刚采集进来的新数据,后半部分是未被刷新的先于这前半部分写入内部缓冲区后半区的旧数据,为了按照正常的时间顺序显示和存储数据,还应对这两部分数据的顺序进行调换,这由Split1DArray和BuildArray两个函数完成。由于只在内部缓冲区半满时才进行从内部缓冲区到用户缓冲区的数据传输,还应在FAITransfer之后加一个FAICheck子VI和Case结构,将采集数据过滤出来。对数据的重新排序、图形显示和存储在HalfReady=1的分支中进行。在第一次从内部缓冲区到用户缓冲区的数据传输中,虽然只采集到1/2FAIINTStart.Count数量的数据,但传输到用户缓冲区中的数据数量是FAIINTStart.Count。这次传输后用户缓冲区只前半部分是采集到的数据,因此对其进行的操作应不同于之前所述处理办法,而只是提取前半部分数据,这就必须将第一次传输与其他次传输区别开来。本系统通过局部变量解决这一问题,使用局部变量可实现对控制器的写操作。先设置一个数值控制器,将其值初始化为1,在第一次传输完成后,向其局部变量写入2。用一个Case结构对此控件的数值进行判断,就可以进行两种不同的操作。按下停止键的同时再次通过局部变量将控件的数值置1,为下次启动做准备。在LabVIEW中,可采用ASCII字节流、数据记录文件和二进制字节流三种文件格式存储或者获得数据。数据记录文件只能通过G语言访问;必须把数据转换成二进制字符串才能保存为二进制字节流格式。ASCII字节流是最常用的数据文件格式,把数据保存为文本(ASCII)字节流的最大好处是,方便别的软件,如字处理程序或者电子表格程序等来访
本文标题:基于PCI-1713和LabVIEW的高速数据采集系统设计
链接地址:https://www.777doc.com/doc-1234748 .html