文档详情

为了保证ac6115板卡能够进行高速不间断采样,我们提供了一套新的驱动

j****9
实名认证
店铺
DOC
120KB
约10页
文档ID:46331286
为了保证ac6115板卡能够进行高速不间断采样,我们提供了一套新的驱动_第1页
1/10

AC6112PCI 采集卡采集卡 SDK 2.0 说明说明自 AC6112 板卡上市以来,满足了许多用户多通道无相差连续采样的需求但其中有 一些高端用户希望在进行采样的同时能够灵活进行其他任务,如显示、数据存盘等,但以 前提供的 SDK 在这方面的性能较低,对用户编程的要求过高 为了保证 AC6112 板卡能够进行高速不间断采样的同时仍能进行其他操作,我们提供 了一套新的驱动和开发包—SDK 2.0该驱动使用了中断及虚拟软件采集方式,采样任务的 优先级高于其他用户层(ring3)上运行的应用软件,用户的应用层操作将不能影响内核层 (ring 0)的任务,保证了采集程序不间断的运行;在内核中提供了了约 2M WORD 的缓冲空 间,对于 AC6112 最高 400K 的采样速率可提供约 5 秒的缓冲时间,用户的应用程序只要 在 5 秒内能够及时读取内核缓冲数据,就可以保证采样的连续性;在采样的同时用户仍可 进行其他 IO 操作,如 DA、IO、计数器等 内核与应用层数据流向的原理框图如下:AD 采样数据流程如图 1 所示当启动采样后,AC6112 采集卡即按用户设定的采样方 式、速率等参数进行采样,数据按时间和通道顺序进入板载 FIFO 中;当板载 FIFO 半满时, 产生中断;驱动程序响应中断,将 2048 个采样点写入缓冲池。

用户应用程序方面随时可以 查询采样状态,查看缓冲池中的数据情况,按需要读取缓冲池中的数据由于在内核中使 用了中断方式,其优先级别高于其他操作,因此可保证采集卡的采样数据完整的进入 ring0 层的数据缓冲;用户主要应该注意的是要在内核缓冲池溢出之前,及时读走数据,也就是 上文所说的 400K 采样速率有 5 秒的缓冲时间(400K X 5 s=2M) 具体的编程方式提供了 1 普通的查询方式、2 定时器中断采集方式共两种方式当用 户需要类似普通查询 AD 板的采样方式时,可以选取方式 1;若用户要求在连续采集的同 时,可以进行显示、存盘、计算处理等其他操作时,可以选择方式 2 对两种编程方式的具体描述见下: 0、无论用户采取哪种方式编程,在程序的开始处都要执行 AC6112_CreateDevice() 以获得驱动句柄;在整个程序体内 AC6112 API 函数对设备的识别都要依靠该句柄,如 AC6112_DA()等等;一旦需要结束程序的时刻,请用户先调用 AC6112_CloseDeivce()释 放设备句柄,然后再进行退出应用程序 1、查询方式:图 1:软硬件结构框图ADDA数字 IO计数器2M WORD 缓冲池4K FIFO用户缓冲DA数字 IO,计数器用 户图 形界面AC6112 PCI 采集卡用户应用程序 ring3内核驱动 ring0最为普通的采集方式,基本流程如下: a.AC6112_INI 设定相关参数; b.AC6112_RUN启动 AD 采样; c.AC6112_STATE检查采样状态,FIFO 非空、半满、溢出等; d.若得到了需要的状态,可根据具体状态读取需要的数据 AC6112_READ_HARD_FIFO;若状态为达到要求,可循环执行 c,直至得到符合 要求的状态。

e.AC6112_STOP;停止采样2、定时器中断采集方式: a.AC6112_INI 设定相关参数,启动中断方式; b.启动定时器 c.AC6112_RUN启动 AD 采样; 下面是在定时器中的代码注意:在内核缓冲区溢出之前一定要将数据读走! a.AC6112_STATE检查采样状态,缓冲池中的数据数量、是否溢出等; b.当达到需要读取的数据调用 AC6112_READ_KFIFO按方式 2 编程,采集过程不影响 PC 其他操作,使用户在进行不间断采样的过程 中可以进行其他操作(如:图形显示、数据存盘、数学运算、IO 控制、DA 输出、记 数等其他操作) 该驱动使用了 WDM 方式,可以安装在 Windows 98/Windows 2000/xp 上随驱动提供了相关的 API 接口(API 函数位于 AC6112.DLL 动态链接库中) 提 供 Visual C++ 6.0 / Visual Basic 6.0 / C++ Builder 5.0 / Delphi 6.0 四种语言的详细例程相关接口函数如下:AC6112_CreateDevice 获得 AC6112 操作句柄 AC6112_CloseDevice关闭设备AC6112_Version检查驱动程序和 DLL 的版本(厂家保留)AC6112_INI AC6112 采集板的初始化,包括 AD 采样模式、采样速度、起止通道、输入 电压范围、触发方式、边沿选择、中断使用、事件使用、事件通知门限等等 AC6112_STATE查询 AC6112 采集板硬件 FIFO 状态,查询 AC6112 驱动中软件 FIFO 的 状态:FIFO 容量,可读数量,可写数量AC6112_CHN设置通道和输入电压范围(厂家保留) AC6112_AD_MODE设置采样模式,触发方式,边沿选择(厂家保留) AC6112_RUN启动采样过程 AC6112_STOP停止 AC6112 采样,关闭中断 AC6112_REW停止 AC6112 采样(厂家保留) AC6112_READ_HARD_FIFO读 AC6112 板上 FIFO 数据,读 2048 个字 AC6112_READ_KFIFO读驱动中的软件 FIFO,可设定读取的长度,最大长度小于 2000000AC6112_AD_TIMERAD 采样定时器设定 16 位定时器,时基为 4MHz osc(厂家保留) AC6112_DA_MODE设定 DA 模式字 AC6112_DA0 DA 0 通道输出 AC6112_DA1 DA 1 通道输出 AC6112_IO_MODE设置 IO 模式字 AC6112_DI数字输入 AC6112_DO 数字输出 AC6112_RCOUNTER读计数器数值 AC6112_WCOUNTER 设置计数器数值 AC6112_RTIMER 读定时器数值 AC6112_TEST_HARDWARE硬件检测(厂家保留) AC6112_PROGRAM_TEST 程序测试(厂家保留)AD 采样使用方法如下:1、查询---比较适合采集少量数据,数据采集不容易连续,易受机器中运行的相关程序干扰 最基本的方法,参照说明书中的说明,分别设置好各个数据控制字(AC6112_INI,设置为 不使用中断,不使用事件通知) ,启动 AD 采样(AC6112_RUN) ,检查 AC6112 FIFO 状态 (AC6112_State)直至 FIFO 半满,若 FIFO 半满则读取 AC6112 FIFO 中的 2048 个采样数 据(AC6112_READ_HARD_FIFO)2、中断+查询---适合大量数据采集,由用户查询驱动程序中软 FIFO 的状态,选择合适的 时机读取可以连续采集,参照说明书中的说明,分别设置好各个数据控制字 (AC6112_INI,设置为使用中断,不使用事件通知) ,启动 AD 采样(AC6112_RUN) ,检 查 AC6112 软件 FIFO 状态(AC6112_State)直至 KFIFO 中的数据满足用户的要求,读取 KFIFO 中的 N 个采样数据(AC6112_READ_KFIFO) ,N 由用户自行控制。

API 函数使用说明:O、数据结构定义: 以下的 AC6112_INI_BYTE 和 AC6112_STATE 两个结构体包含了 AD 采样初始化的重要参 数以及采样状态的信息structAC6112_INI_BYTE{ unsigned long ad_mode;AD 采样模式字;(请参考说明书 74 页) unsigned long start_end_chn;采样起至通道、极性选择控制字;(请参考说明书 73-74 页) unsigned long ad_timer;采样时钟控制字;(请参考说明书 74 页) unsigned long da_mode;DA 输出模式控制字;(请参考说明书 75 页) unsigned long kFifo_Notify_Length;内核缓冲门限通知控制字;(小于内核缓冲的容 量,缓冲的容量 2000000) (保留为今后扩展使用) unsigned long Irq_Enable;中断允许控制字;(0-禁止/1-允许) unsigned long Event_Enable;事件通知允许控制字;(0-禁止,为今后扩展使用) HANDLEEvent;缓冲门限事件句柄;(保留为今后扩展使用)HANDLEEventFifoFull;缓冲溢出事件句柄;(保留为今后扩展使用) }ac6112inibyte;struct AC6112_STATE{ unsigned long HardwareState;板卡硬件状态字;(请参考说明书 73 页) unsigned long Irq_Enable;中断允许状态字;(0-禁止/1-允许) unsigned long Event_Enable;事件通知状态字;(0-禁止/1-允许) unsigned long SoftFifoCapacity;缓冲区容量;(按采样字长) unsigned long SoftFifoItemForRead;缓冲区中已经存在的数据长度;(按采样字长) unsigned long SoftFifoItemForWrite;缓冲区中的剩余空间。

(按采样字长) }ac6112state;I、驱动操作函数: AC6112_CreateDevice 函数功能:获得 AC6112 采集卡驱动句柄 函数原型: HANDLE AC6112_CreateDevice (DWORD instance, PDWORD pError) 参数: instance :AC6112 板卡的序号,如 0、1、2; pError:错误代码; 返回值:成功后返回 AC6112 板卡驱动句柄 备注:一般在用户程序启动后,可获取板卡句柄;其他 API 的使用都根据句柄来识别 AC6112AC6112_CloseDevice 函数功能:关闭 AC6112 驱动句柄 函数原型: int AC6112_CloseDevice (HANDLE hDevice) 参数: hDevice:驱动句柄; 返回值:如果函数执行成功,则返回 0;否则,返回错误代码 备注:当用户程序退出之前,请关闭驱动句柄AC6112_Version 函数功能:读取驱动程序软件版本信息 函数原型: int AC6112_Version (HANDLE hDevice, char *pversion) 参数: hDevice:驱动句柄; pversion :指向版本字符串的指针。

返回值:如果函数执行成功,返回 0;否则,返回错误代码 备注:该函数为厂家保留使用II、模数转换函数(AD)AC6112_INI 函数功能:初始化板卡,如设置相关参数,设置中断允许、事件通知等等 函数原型: int AC6112_INI (HANDLE hDevice, AC6112_INI_BYTE *IniByte) 参数: hDevice:驱动句柄 *IniByte :初始化信息,结构内容请参考数据结构定义 返回值:如果函数执行成功,返回 0;否则,返回错误代码 备注:所有的参数都是由本函数设定的AC6112_STATE 函数功能:查询硬件状态、缓冲状态 函数原型: int AC6112_STATE (HANDLE hDevice, struct AC6112_STATE *state_ac6112) 参数: hDevice:驱动句柄 *state_ac6112 :板卡硬件状态和缓冲信息,结构内容请参考数据结构定义 返回值:如果函数执行成功,返回 0;否则,返回错误代码 备注:AC6112_C。

下载提示
相似文档
正为您匹配相似的精品文档
相关文档