正文

DAS-1802HC高性能数据采集卡及其DMA编程2007-03-16 21:51:00

【评论】 【打印】 【字体: 】 本文链接:http://blog.pfan.cn/iamben250/24018.html

分享到:

DAS-1802HC高性能数据采集卡及其DMA编程 赵从毅 吴征   【摘要】简述了美国吉时利(Keithley)公司的DAS-1802HC数据采集卡的性能及其Windows 95下的VB驱动程序DriverLINX/VB,并结合实例,介绍了该卡在DMA传输方式下的编程方法。  关键词:数据采集,驱动程序,直接存储器存取 The DAS-1802HC High-performence Data-acquisition Board and Its DMA Programming   Abstract:Major features of the DAS-1802HC data acquisition board of Keithley Instruments Inc. of USA and its VB driver DriverLINX/VB in Windows 95 are briefly introduced.Its programming method in DMA mode with an example is also introduced.  Key words:data acquisition,driver,DMA   要构成一个高速实时数据采集系统,必须选择高性能的数据采集产品。DAS-1802HC数据采集卡(以下简称数采卡)是美国Keithley公司DAS-1800数采卡系列中的一个产品。该卡具有高速、多通道、多种触发方式等特点,并配有功能强大的驱动程序DriverLINX/VB,特别适于高速、多通道的实时数据采集。在宝钢2030冷连轧机大电机故障诊断专家系统中,使用该卡完成64个通道的实时数据采集任务,取得了非常满意的效果。本文对DAS-1802 HC数采卡的性能及其驱动程序DriverLINX/VB作一个简要介绍,并结合笔者使用经验,介绍该卡在DMA(direct memory access,直接存储器存取)传输方式下的编程方法。 1 DAS-1802HC数采卡的主要性能[1]  ① 64路单端/32路双端模拟量输入;2路模拟量输出;4路/8路数字量输入/输出;  ② 最大采样速率333 Ksamples/s;12位分辨率;ISA总线;  ③ 64路通道/增益队列,各通道增益可单独设置为1/2/4/8;  ④ 1 K字FIFO缓冲器,双通道DMA;  ⑤ 外/内触发;模拟/数字触发;预触发(Pre-Trigger)/后触发(Post-Trigger)/全触发(About-Trigger);  ⑥ 丰富的驱动程序,以支持不同的开发平台(C/C+ +、VB、LabVIEW、TestPoint等);  ⑦ 除基地址用DIP开关设置外,单端/双端、单极性/双极性、DMA通道号等均用软件设置。 2 驱动程序DriverLINX/VB[2,3]  DriverLINX/VB是Keithley公司的数据采集板卡在Windows 95下的VB驱动程序(用于DAS-1800系列的产品序号是DLINX-18VB),系Keithley公司的OEM产品,由美国SST公司开发。该软件是Keithley公司向用户推荐使用的驱动程序。在该软件的强大功能支持下,用户能非常容易地在Windows 95下用VB开发自己的应用程序。该软件与硬件、操作系统及用户应用程序之间的关系如图1所示。 图1 驱动程序框图   DriverLINX/VB是一个独立于硬件的通用产品,它支持在一台计算机中多块多类型数采卡的并发操作,为用户提供的API可以完成100多个前台或后台的数据采集服务。  在DriverLINX/VB中,面向应用程序开发的有3个部分:SR控件和LDD控件(均为ActiveX控件)、一个或多个与硬件有关的DLL库和几个后缀名为Bas的模块。 用户在设计或运行时,可通过设置SR和LDD控件的属性来说明需执行的数据采集任务;DLL库提供了 DriverLINX/VB驱动数采卡的接口;模块定义了 DriverLINX/VB API的子程序声明、符号常量和错误代码。  在高速实时数据采集系统中,数据从数采卡传输至内存通常采用的是DMA方式,若数据量大且连续,则使用双DMA缓冲区技术来保证数据高速、可靠地传输。所谓双DMA缓冲区技术,指的是在内存中分配两个DMA缓冲区,卡上的数据通过DMA方式轮流地传送到两个缓冲区中,并在一个缓冲区填满后通知应用程序,将该缓冲区中的数据转移到VB数组中。DriverLINX/VB对DMA方式强有力的支持,为双DMA缓冲区技术的使用奠定了基础。其主要表现在:  ① DriverLINX/VB带有一个虚拟设备驱动器——DriverLINX VxD,通过VxD,DriverLINX/VB在Windows 95管理的内存中开辟出一个或数个在物理上连续的只由DriverLINX/VB管理的数据块,用作DMA缓冲区,缓冲区的数目和大小均可由用户在控制面板中设定,DriverLINX VxD协同卡上的FIFO缓冲器,将卡上数据高速、可靠地轮流传送到各DMA缓冲区中。  ② 由于DMA缓冲区由DriverLINX/VB管理,用户的VB程序无法直接读取,因此,DriverLINX/VB还提供了相应的API函数,用户程序可通过API调用将DMA缓冲区中的数据转移到用户程序的VB数组中,以供用户程序使用。  ③ 为保证用户程序能及时地从DMA缓冲区中转移数据,DriverLINX/VB还提供了相应的VB事件,在DMA缓冲区数据填满时,DriverLINX/VB通过SR控件使该事件得到触发,以通知用户程序转移数据。 3 DAS-1802HC卡的DMA编程  在DriverLINX/VB软件安装后,用户程序首先要载入DLCODES.BAS、DLVBLIB.BAS、DRVLNXVB.BAS和OEMCODES.BAS这4个模块,并在合适的窗体中载入SR和LDD控件。  在DMA编程之前,用户程序首先要初始化DAS-1802HC卡,若用户定义SR和LDD控件的名称分别为SR-AI和LDD-AI,则初始化程序如下:  Sub Init_SR_AI()   SR-AI.Req-DLL-name=“KMB1800.DLL” '调用与DAS-1802HC卡对应的DLL库   LDD-ff-AI.Req-DLL-name=SR-AI.Req-DLL-name   SR-AI.Req-subsystem=DL-DEVICE '指向卡上的各种数采任务   SR-AI.Req-mode=DL-OTHER '停止各种数采任务   SR-AI.Req-_op=DL-_INITIALIZE '各种数采任务初始化   SR-AI.Refresh '刷新后,执行初始化程序   If SR-AI.Res-result<>DL-NoErr Then '检查初始化结果SR-AI.Req-op=DL-MESSAGEBOX '显示出错信息SR-AI.Refresh '刷新后,执行出错程序   End If  End Sub  程序中的“各种数采任务”指的是模拟量输入、模拟量输出、数字量输入、数字量输出和定时/计数任务。  DMA编程,主要包括参数设定、分配DMA缓冲区和数据从DMA缓冲区转移到VB数组几个部分,下面以宝钢课题为例说明编程方法。该课题要求采集64路信号,通道总采样速率为100 kHz,使用卡上定时器作为主时钟,连续采样。程序如下:  .Sub Start-SR-AI() '启动数采卡硬件   SR-AI.Req-subsystem=DL-AI '模拟量输入   SR-AI.Req-mode=DL-DMA 'DMA传输方式   SR-AI.Req-op=DL-START '启动数据采集   '——定时器设置——   SR-AI.Evt-Tim-type=DL-RATEEVENT '周期循环采样   SR-AI.Evt-Tim-rateChannel=DL-DEFAULTTIMER '使用卡上定时器   SR-AI.Evt-Tim-rateMode=DL-RATEGEN '由硬件定时器产生等间隔采样   SR-AI.Evt-Tim-rateClock=DL-INTERNAL '卡上定时器作为数采主时钟源   '设置时钟周期=10 μs   SR-AI.Evt-Tim-ratePeriod=DLSecs2Tics(SR-AI,SR-AI.Evt-Tim-rateChannel,(1/100 000))   SR-AI.Evt-Tim-rateGate=DL-DISABLED '禁止定时器选通(定时器启动后一直有效)   '——设置启停方式——   SR-AI.Evt-Str-type=DL-COMMAND '软件命令方式启动   SR-AI.Evt-Stp-type=DL-COMMAND '软件命令方式停止   '——DMA缓冲区设置——   SR-AI.Sel-buf-N=2 '双DMA缓冲区   SR-AI.Sel-buf-notify=DL-NOTIFY 'DMA缓冲区填满时,触发一个事件   SR-AI.Sel-buf-size=DLSamples2Bytes(SR-AI,0,32 000) '一个DMA缓冲区的容量=32 000个采样数据,并将采样的数据量转换成字节数   SR-AI.Sel-chan-format=DL-tNATIVE 'DMA缓冲区的数据格式设为数采卡预定义格式(双字节整型数)   '——通道参数设定——   SR-AI.Sel-chan-N=2 '通道的定义次数(启始/结束通道各定义一次)   SR-AI.Sel-chan-start=0 '从0通道开始   SR-AI.Sel-chan-startGainCode=DLGain2Code(SR-AI,-1) '双极性,统一增益(±10 V)   SR-AI.Sel-chan-stop=63 '到63通道结束   SR-AI.Sel-chan-stopGainCode=DLGain2Code(SR-AI,-1) '双极性,统一增益(±10V)   SR-AI.Refresh '刷新后,设置有效,并启动采样   '——检查启动结果——   If SR-AI.Res-result <> DL-NoErr ThenSR-AI.Req-op=DL-MESSAGEBOX '显示出错信息SR-AI.Refresh '刷新后,执行出错程序   End If  End Sub  上段程序中,将DAS-1802HC卡设置成软件命令启停方式,使数采卡启动后,将一直工作到有停止命令为止,这就实施了连续采样。  当DMA缓冲区数据填满时,DriverLINX/VB会通过SR-AI控件触发一个名为SR-AI-BufferFilled的VB事件,在响应该事件的VB程序中,调用API函数VBArrayBufferConvert(),将DMA缓冲区中的数据转移至VB程序定义的数组VBDataArray()中。代码如下:  Temp=SR-AI.VBArrayBufferConvert(bufIndex,0,32 000,VBDataArray(), DL-tINTEGER,0,0)  参数1:指明当前一组数据在哪个DMA缓冲区中;  参数2:从DMA缓冲区的起始位置读取数据;  参数3:从DMA缓冲区读取32 000个采样数据;  参数4:VB数组的地址;  参数5:数据的类型是双字节整型数;  参数6、7:不使用倍增因子和偏移量来修正数据;  返回值:Temp是函数返回的错误代码。  在上面的例子中,使用了双DMA缓冲区技术,其中对缓冲区大小的选择应在工作效率和实时性之间权衡考虑。这是因为系统的采样速率是一定的,故缓冲区的大小将直接影响触发VB事件的时间间隔。若间隔太短,则响应频繁,采集的数据虽能得到较快处理,但系统频繁在事件之间切换,工作效率会降低;反之,若间隔太长,会使数据得不到及时处理,降低了系统的实时性。此外,缓冲区的大小应为64的整数倍,以保证64个通道的数据不被分割开。选择每个缓冲区的容量为32 000个字,可存放32 000个采样数据,填满缓冲区的时间是320 ms。经测试,此时系统的效率和实时性均能达到要求。  由于高速实时数据采集对系统资源要求较高,当Windows 95中有多个进程在执行且CPU负荷较重时,可能导致DriverLINX/VB因对数采卡的DMA请求不能及时响应而挂起,此时,DriverLINX/VB会触发SR-AI-ServiceDone事件通知用户程序。DriverLINX/VB挂起时,采集的数据将会丢失,因此,用户应合理安排CPU的负荷,以保证程序运行中不出现挂起现象。此外,作为防范措施,用户程序应在响应SR-AI-ServiceDone事件中写入下面代码,保证当DriverLINX/VB挂起时,能重新启动DriverLINX/VB:  SR-AI.Req-op=DL-START  SR-AI.Refresh  用户退出应用系统时,程序应停止DriverLINX/VB的工作,通过下面代码完成:  SR-AI.Req-op=DL-STOP  SR-AI.Refresh  综上所述,DAS-1802HC是性能优异的高速数采卡,而DriverLINX/VB 是功能强大的驱动程序,两者完美的结合,为用户在较短时间内完成高速数据采集应用程序的开发创造了条件。 作者单位:赵从毅 (安徽马鞍山市)华东冶金学院(243002)      吴征 (杭州)浙江省电力试验研究所(310014)  参考文献 1 Keithley Instruments Inc..DAS-1800HC Series User's Guide,1996 2 Scientific Software Tools Inc..DriverLINX/VB Technical Reference Manual,1996 3 Scientific Software Tools Inc..DriverLINX 4.0 Installation and Configuration Guide,1996

阅读(12394) | 评论(0)


版权声明:编程爱好者网站为此博客服务提供商,如本文牵涉到版权问题,编程爱好者网站不承担相关责任,如有版权问题请直接与本文作者联系解决。谢谢!

评论

暂无评论
您需要登录后才能评论,请 登录 或者 注册