基于高速多通道采集模块的数字化仪软件设计
2016-10-14贾玉姣刘亚斌张秀磊
贾玉姣,刘亚斌,张秀磊
(北京航空航天大学自动化科学与电气工程学院,北京100191)
基于高速多通道采集模块的数字化仪软件设计
贾玉姣,刘亚斌,张秀磊
(北京航空航天大学自动化科学与电气工程学院,北京100191)
基于高速数字化仪硬件设备,针对数字采集系统软件设计的关键技术从设备驱动程序、动态链接库接口函数封装、应用软件设计三个层次进行了详细阐述。采用VS2008,在Win7系统下设计了WDF驱动程序并实现了DMA传输;设计封装了操作设备的接口函数;用C#语言及多线程技术设计实现了多通道数据高速传输、实时显示及存储系统,实验测试结果稳定可靠。
数字化仪;WDF;DMA;高速
数字化仪(Digitizer)是电子测量领域中一种基于PC的常用测量仪器,和示波器相似的是,它也是一种用来观察、测量、记录各种瞬时物理现象,以波形方式显示其与时间关系的电子仪器,它开放式的结构和灵活的软件等特性已经超越了一般示波器[1]。基于PC的数字化仪主要优势在于它的灵活性,它可以工作在开放式的PC环境中,一个PC主机可以安装任何其他数字化仪的显示阵列、工具卡和控制软件等。系统就可以按照用户的需要进行配置。
本文所研究的高速多通道数据采集系统,是基于PXIExpress总线的模块化信号采集设备,具有4个独立通道、高采样分辨率、大数据容量以及高速数据传输等关键技术的数字化仪软件系统。包括完整的从底层驱动、接口动态链接库到应用分析处理软件。
1 硬件系统设计
高速数字化仪有如下硬件指标:输入阻抗50 Ω和1 MΩ可选;4个并行AD采集通道,14位采样精度,最高采样速率125 MS/s;输入信号量程±1 V和±10 V可选;每个通道最大采样深度4M字,最大预采样深度8K字。为实现以上技术指标,数字化仪包含如下模块:模拟信号调理模块,实现单端转差分,阻抗匹配,量程选择等功能;AD采集转换模块,将SMA接口接收的模拟信号转换为14位数字量信号并传给控制模块;控制器,采用FPGA作为逻辑算法控制器;板载内存,存储控制器处理过的数据,计算机读取数据的位置;PXIe通信模块,实现与上位机通过PXIe通信;时钟管理模块,为AD采集、板载内存提供时钟;电源管理模块,为其他模块提供高品质电源。数字化仪硬件总体设计方案如图1所示。
图1 数字化仪硬件总体设计图
2 WDF驱动程序设计
由于微软已经停止对Windows XP系统的维护,故选择在Win7系统下开发;而从Windows Vista系统开始,驱动程序开发需要用到微软新一代驱动程序开发模型WDF。WDF包括一整套对驱动程序进行开发设计、发布、维护的部件,WDF支持面向对象的,基于事件驱动机制的驱动程序设计思想;WDF实现了一些驱动程序所必须的基本特性,为驱动程序提供缺省的处理,并管理与操作系统的交互,这使设计者能够集中精力在特定硬件设备的处理上,而不是操作系统自身,从而大大简化设计[2]。WDF定义了一个驱动模型,提供了开发内核模式驱动程序(KMDF)和用户模式驱动程序(UMDF)的框架。一个即插即用的KMDF设备驱动程序包括:一个DriverEntry例程;一个EvtDriverDeviceAdd例程,类似于WDM的AddDevice例程;一个或多个I/O队列;一个或多个I/O事件回调例程,类似于WDM的DispatchXxx例程;支持的即插即用和电源管理回调例程;支持的WMI回调例程,用于管理计算机系统;其他回调例程,如对象的清除例程、中断处理例程、DMA例程等[3]。
2.1中断处理
中断是外设主动申请与计算机交互的唯一方式。WDF的中断处理分为两部分:中断处理例程EvtInterruptIsr,延迟过程调用EvtInterruptDpc。中断处理例程是在中断服务例程被调用时通过读取PEX8311的中断状态寄存器来判断是否是来自目标设备的中断;若是,则清除当前中断标记并写相应中断屏蔽寄存器位,暂时不再处理新的中断;然后调用延迟过程调用例程,在空闲时实现更多更复杂的操作。因为中断处理例程运行在DIRQL(Device Interrupt ReQuest Level)中断级别上,几乎可以屏蔽所有系统内和外部设备的中断请求,所以处理时间应该尽可能短,以提高系统的响应速度。而中断延迟处理例程运行在DISPATCH_LEVEL级别上,可以在延迟过程调用例程中做大部分的中断处理工作。
本例数字化仪设备主要分为两类中断:本地中断和DMA传输完成中断。本地中断包括AD转换完成中断、FIFO中断、数据转移完成中断,共4个通道,12个中断。中断处理流程如图2所示。
图2 数字化仪中断处理流程图
2.2DMA数据传输实现
利用中断和DMA相结合的方式采集数据,可以最大限度地提高CPU的工作效率,并且能够及时保存采集的数据,减少丢帧现象和误码率[4]。DMA传输方式无需CPU直接控制传输,通过硬件为RAM与I/O设备开辟一条直接传送数据的通路,使CPU的效率大为提高。由于数字化仪需要实现高速大数据量传输,故采取DMA(Direct Memory Access)传输,在DMA传输过程中CPU可以进行其他工作。一个完整的DMA传输过程包括4个步骤:DMA请求、DMA响应、DMA传输、DMA结束。在数字化仪设备的WDF驱动程序中,DMA传输实现流程如下:
1)在驱动程序初始化过程中,即Digitizer_EvtDeviceAdd例程中,创建一个DMA适配器对象WDFDMAENABLER,一个DMA传输对象WDFDMATRANSACTION,和一个公用缓冲区对象WDFCOMMONBUFFER,三者结合控制DMA传输过程;
2)当应用程序向驱动发起读数请求,驱动接收到I/O Request时,使用WDFCOMMONBUFFER公用缓存区作为DMA读缓冲区,初始化DmaTransaction对象,启动DMA传输;
3)驱动程序调用WdfDmaTransactionExecute启动DMA传输时,系统框架会调用启动传输前注册的回调例程Digitizer_EvtProgramDma进行寄存器配置,以正确启动DMA操作;由于数字化仪Local端总线位宽为32位,需要设置DMA传输位宽为32位;一次可以传输4个字节数据,提高数据传输速率;
4)当DMA传输完成时会通过中断通知驱动程序,驱动程序在中断延迟处理例程EvtInterruptDpc中完成最终DMA传输,同时将公用缓存区中的数据拷贝到I/O Request包中。
3 动态链接库接口函数设计
在驱动程序的设计过程中,必须考虑到应用程序接口的设计,良好的驱动程序设计必须从应用程序设计出发[5]。为方便上层应用程序使用,对驱动的操作和通信部分封装成动态库DLL。它是驱动层和应用程序层进行通信的桥梁,同时为应用程序层提供了方便调用的应用接口函数。
3.1动态链接库接口函数
数字化仪各项功能是通过应用程序调用DLL的导出函数来实现的,DLL接口函数封装了与硬件设备交互的具体细节,只提供统一的接口给应用程序调用。动态链接库中接口函数主要分三类,如表1所示:
1)设备打开关闭函数:Digitizer_OpenDevice根据指定设备号打开数字化仪硬件设备;Digitizer_CloseDevice关闭已打开的设备;
2)功能函数:Digitizer_Reset恢复数字化仪设备默认配置状态;Digitizer_Config根据指定通道,配置工作参数;Digitizer_SetInterruptLevel根据指定通道,设置设备中断通知级别,既设备缓存FIFO中数据量达到设定值时产生中断,通知应用程序读数;Digitizer_StartAD启动AD采集;Digitizer_ StopAD停止AD采集;
3)数据接收转换函数:Digitizer_Receive接收指定通道的AD采集数据;Digiziter_RecvCompleted指定通道数据接收是否完毕;DoubleToUshort将double类型数据转换成对应14位采样值;UshortToDouble将14位ADC采样值数据转换成实际信号量值
说明:
1)外部触发实现是通过全局变量控制的,在Digitizer_ StartAD对应的驱动函数中若为内部触发,则正常写开启AD寄存器;若为外部触发,则做好初始化工作(开启中断等)后写外部触发使能寄存器,等外部触发信号为高电平时底层自动开启AD转换。
2)预采样功能可以实现在电平触发或外部触发时对触发点之前的信号进行读取显示和分析。存储深度包括预触发深度和触发深度两部分,预采样深度表示在触发到来前被存储下来的数据量,触发深度表示在触发到来后被存储下来的数据量[6]。预采样FIFO中的数据在触发之前一直在刷新,时刻保持最新的数据直到触发开始。为此需要先读取正式采样的数据,再读取预采样数据,才能保证预采样数据是触发点之前的数据。
3.2高速数据传输的实现
由于本文数字化仪具有4个独立通道,每个通道采样率最高达到125Msps,所以若4个通道满速率工作的话,每秒钟产生的数据量为:125M*2Byte*4≈1GB的数据。而33MHz的PCI总线的最高速率只有133MBps,PCI Express x1总线的最高传输速率也只有476MBps。若4个通道同时全速率工作所产生的数据量远超过系统的处理能力,因此设计时,硬件板卡自身每个通道带有4M*32的SDRAM缓存,且不能连续工作过长时间。
系统接收端,在驱动程序中采用DMA结合应用程序使用的Windows完成端口I/O模型,实现数据尽可能的高速传输。下面介绍使用完成端口(IOCP)实现数据传输的过程。完成端口的建立步骤如下:
1)创建一个完成端口内核对象
调用系统API函数CreateIoCompletionPort(),返回一个IOCP句柄。
hIocp=CreateCreateIoCompletionPort(INVALID_HANDLE, NULL,NULL,0);
2)将设备句柄与I/O完成端口关联
可与完成端口关联的内核对象除了设备对象外,还可以是Win32文件对象,网络套接字等。将已经打开的设备句柄与IOCP内核对象关联起来,绑定时仍然使用CreateIo CompletionPort,只是参数不同:
CreateIoCompletionPort(hDevice,hIocp,CK_RECV,0);
3)创建工作者线程
前两步相当于只是建立了消息队列等结构,对句柄进行了关联,具体I/O读写操作还是要靠工作线程来完成,这里可以建立数量是CPU核心数两倍的工作线程。
CreateThread(NULL,0,WorkerThread,thParam,CREATE_SUSPENDED,NULL);
在工作者线程中对消息队列进行轮询,如果有已经完成的I/O请求,系统会将该I/O加入完成端口维护的消息队列,然后调度一个空闲工作线程对消息报进行处理。工作线程调用GetQueuedCompletionStatus()函数来轮询消息队列的状态或者进入睡眠状态。
完成端口的初始化代码实现如下:
工作者线程完成具体的数据传输任务,调用系统函数ReadFile()向驱动程序发起DMA读数任务,在读数I/O请求完成后将读取的数据写入DLL内部各通道的缓冲区当中。
4 上层软件设计
在应用软件设计中,采用Windows下的Visual studio 2008开发平台,基于.Net框架下的WinForm窗体应用程序,整体用户界面如图3所示。界面控件选用NI MeasureStudio 8.6工具软件包。
图3 数字化仪软件用户界面
数字化仪应用软件采用三层架构设计,即表现层,业务逻辑层,数据访问层。在每一层中都有对应的组件,完成对应的功能模块,同时系统还提供一些通用的组件来提供一些通用服务。
1)表现层:实现用户与系统的交互,提供一组控制接口给用户选择,并接收用户的输入。同时,将采集的数据信号以波形的形式呈现给用户。
2)业务逻辑层:处理所有业务逻辑,对用户的输入进行处理。主要工作包括:定义、初始化全局变量;设定数字化仪的工作模式;对采集的数据信息进行分析提取有用信息等。调用数据访问层接口,并为表现层提供服务。
3)数据访问层:该层是对业务逻辑层的扩展,实现对数据的操作。从数字化仪获取数据反馈给业务逻辑层处理;将需要保存的数据按照指定格式持久化到本地磁盘文件中。
5 测试结果及结论
数字化仪模块实现了4路独立的AD采集通道,复杂的前端调理电路及高频噪声,造成每个通道都有采集误差,降低了采样精度。为了保证通道的采样精度,模块增加了误差补偿功能,消除了一些固定误差的影响。误差主要分为偏置误差和增益误差两种,模块误差补偿功能就是针对这两种误差进行数据处理。通道误差补偿前需要获取每个通道的误差信息,而每个通道在不同量程、不同输入阻抗情况下,误差不同,需要分别进行误差测量。即先在0V输入下测试零位电压,电压值取反即为偏置补偿值,然后输入满量程电压,此时的采集电压即为增益误差补偿值。经测试误差补偿完成后测量精度可达0.1%。同时数字化仪系统可以精确实现电平触发、外部触发及预采样功能,并能精确计算正弦及方波等信号的频率。
6 结束语
本文在VS2008环境中编写了数字化仪的测试系统,通过调用驱动程序,实现了对高速数字化仪的控制。经实验验证,数字化仪在14位分辨率,单通道最大采样速度为125Msps条件下,达到预定的设计指标,可以满足大多数采样需要。该数字化采用了DMA数据传输模式,极大地提高了数据传输速度,可广泛应用于各种军事和工业领域,具有十分广阔的前景。
[1]柏向春.宽带高精度数字化仪应用软件设计[D].成都:电子科技大学,2008.
[2]王兰英,居锦武.Windows平台驱动程序新架构分析[J].计算机系统应用,2008(1):109-112.
[3]武安河.Windows设备驱动程序WDF开发[M].北京:电子工业出版社,2009.
[4]王波,郭建.基于PCI设备的DMA传输建模与分析[J].计算机测量与控制,2011(19):972-974.
[5]易伟,徐欣,孙兆林.基于WDF的PXIe接口驱动程序开发[J].微处理机,2011(8):86-92.
[6]付宁,赵浩然,梁宇,等.PXI数字化仪的触发设计[J].电子测量技术,2012(8):116-119.
Digitizersoftware design based on high-speed multi-channel acquisition module
JIA Yu-jiao,LIU Ya-bin,ZHANG Xiu-lei
(School of Automation Science and Electrical Engineering,Beihang University,Beijing 100191,China)
Combined with the hardware equipment of digitizer,the key problems and resolutions in the development of software of high speed data acquisition and analysis system are discussed.It is discussed from three aspects-device driver,driver interface encapsulation and application software.Firstly,the basic frame and operational mechanism of WDF are analyzed thoroughly.Using VS2008,under Win7 system design WDF driver and implements the DMA transfer;design encapsulates the interface functions to operate the equipment;using C#language and multi-threaded design and implementation of the multi-channel high-speed data transmission,real-time display and storage system.Experiments show that the system is stability.
digitizer;WDF;DMA;high-speed
TN98
A
1674-6236(2016)12-0077-04
2015-07-02稿件编号:201507017
贾玉姣(1990—),女,山东潍坊人,硕士研究生。研究方向:检测技术及自动化装置。