功能说明

对瑞博华公司的所有AD卡、模块,瑞博华公司均提供统一接口的ADCard驱动程序,适用于Windows 9x/Me/2000/XP,并可直接支持瑞博华公司的高性能网络录波器。ADCard驱动程序提供了一套简捷、方便的操作AD板的函数,使用户以简单、高效地方式操作AD板,而不用处理底层的硬件细节。所有的AD板均以硬时钟中断、大容留FIFO、DMA等方式,实现高采集速度、严格定时、后台实时采集,但这些细节在ADCard驱动程序中用户程序均不用考虑就可高效实现。同时,针对不同AD板的特殊特性,如DA输出、信号发生器功能、各通道的程控放大等,提供了万能的设备数据发送接口IOCtl()来统一实现这些功能。各驱动程序还实现了对硬件端口的访问函数inport/outport等,便于用户实现特殊功能、设备的底层控制。

ADCard驱动程序实现了采集卡在后台的实时、高速采集模拟信号,应用程序只需在必要时取采集结果即可,可以实现数据的实时采集、连续显示与处理、采集与取数、显示的同步,而且可以很简单、方便地实现。通过ADCard.DLL提供的一序列函数(主要包括初始化函数Initial()、多缓冲区方式开始函数StartIntr()、单缓冲区方式开始函数StartSnapshot()、采集停止函数StopIntr()、取采集结果函数ADResult()、ADResultRecent()、GetSnapshot()等),实现了两种方式的实时信号采集、缓冲数据管理方式: 一种是多缓冲区方式,或称为块FIFO方式。用Initial()函数初始化驱动程序后,用StartIntr()函数启动此工作模式,最后用StopIntr()函数停止。此方式下,系统(驱动程序)内部开有NumInnerBuf个缓冲区(块),形成先进先出的FIFO结构,存取采集结果的最小单位为1个缓冲区(块)。每个缓冲区可存放NumChn个通道、每通道SampPerChn个AD采样结果,这些缓冲区大小值、缓冲区的个数均可由应用程序自己指定,从而可能在性能、资源使用量方面得到最优的平衡。AD采集的结果实时、顺序地存放在各缓冲区中,ADResult()函数就顺序地取出(最先)一个放满采样结果的缓冲区的内容(进行过此操作后此缓冲区又可接收新的采集结果),和标准的FIFO工作模式完全一样。而ADResultRecent()函数直接取最后(新)一个缓冲区的内容(进行过此操作后所有缓冲区又可重新接收新的采集结果)。在这种方式下,存放有AD采集结果的缓冲区数目可用QueryBuf()函数进行查询。而且,通过使用RegisterNotify()函数,可设置在每一个缓冲区满时会给用户程序发送消息,用户可通过此消息及时、高效地取得AD结果,且是不丢点、连续的AD采集结果,而不用等待、查询。当然,若用户程序没有及时从缓冲区取采样结果,而使所有缓冲区都满时,此后AD采样结果就将丢失,直到有缓冲区被GetADResult()或GetADResultRecent()释放、可存放新的采样结果为止。此工作方式适宜于连续记录AD采集结果。连续两次成功地GetADResult()取得的AD结果在时间上不会重叠,之间是否丢失采样结果,要看返回结果的序列号(结果数组的第一个值,为无符号短整数)是否递增加一(注意,0xFFFF加一后会变成0)。只增一,说明两缓冲区在时间上是连续的。在采样率较低时,通过多缓冲区方式,有可能连续地记录、处理、保存长时间的AD结果。

另一工作方式为单缓冲区方式,驱动程序经Initial()函数初始化后,用StartSnapshot()方法启动,最后用StopIntr()停止。在此模式下,系统(驱动程序)维护一个大的缓冲区,硬件始终不断地往缓冲区中存放AD结果,缓冲区大小为NumChn个通道,每通道SampPerChn个点,大小也可由用户自由指定。用GetSnapshot()函数从此缓冲区中得到所有通道、最新指定个点(点数在方法的参数中指定)的采集结果(的快照)。此工作方式适宜于示波器方式,可随时得到最新的采集结果(的快照)。但两次GetSanpshot()取得的结果在时间上可能有重叠或丢失,相对时间关系不能确定,或者通过函数GetSnapshot()返回的SampPtr值和返回的ADBuf第一个元素所代表的系列号来求出。

各函数调用的顺序是:为了进行AD操作,程序先调用Initial()函数,再调用StartIntr()函数开始采集,反复调用ADResult()函数或ADResultRecent()函数取得采集结果后,或调用QueryBuf()函数查询缓冲区块的状况,调用StopIntr()函数停止采集。或通过先调用Initial()初始化,调StartSnapshot()开始采集,反复调用GetSnapshot()取得采集结果后,调用StopIntr()停止采集。可通过ChannelFrq()函数计算实际每通道的采样频率。通过ConfigInfo()函数查询驱动程序的设置。可通过RegisterNotify()设置多缓冲区模式下每缓冲区满时下应用程序发的消息。高级用户还可以通过IOCtl()函数、根据采集板的使用说明书设置AD卡的特殊功能。

ADCard.DLL中的命名规则为:如对于函数Initial(),在C语言下原型定义为int __stdcall Initial(WORD IOBase, WORD IRQNum, DWORD PhysAddr,WORD DMAChn),有4个参数,则DLL中的真实名字为_Initial@16。而VC下的库ADCard.LIB和C++Builder下的库_ADCard.LIB可自动连接正确的名称,在源程序中使用名称Initial()即可。而在VB中,通过在定义中包括Declare Function DllInitial Lib "adcard.dll" Alias _Initial@16指令就可使用正确的DLL函数名字。在Delphi中,通过在函数引用语句中包含stdcall; external'adcard.dll' name '_Initial@16'即可正确引用DLL中的正确名字。