编辑: 元素吧里的召唤 | 2014-10-06 |
第二节 驱动程序功能概述(不针对具体某一种设备)
一、数据传输采集方式 我公司提供的驱动程序完全支持程序查询方式、硬件中断方式、直接内存存取 DMA)方式.您从我公司所购买 的硬件产品能支持的数据采集方式,我们的驱动程序均予以满足.
二、数据传输与数据处理的独立性 为了提高数据吞吐率以及实现实时数据处理(如随时取数、随时暂停设备、随时开始传输、随时存盘、随时显示 波形、随时设备控制输出等功能), 我们采用一种最新、最灵活的设计思想,即数据采集传输和数据处理相独立的思 想.即用我们所创建的设备对象在 Windows 系统空间管理一个一级强制性缓冲队列,该缓冲队列可支持 128K 字(即256K 字节)的系统内存空间 Buffer,该队列采用先进先出策略和动态链表等技术来更高效地管理这个 Buffer.这个 队列缓冲与用户数据缓冲区相独立,设备对象在后台负责数据采集和传输,将其数据映射到相应的队列缓冲单元, 且维持一个动态链表,并向用户发送相应的通知消息.而用户则不必知道内部的任何复杂操作,而只须在这个消息 到来时,使用 ReadDeviceIntAD 函数读一批 AD 数据或几批即可.重要的是,在这个消息没有到来时,用户代码不必 花任何 CPU 时间去轮询等待,而用户正好利用这段空闲时间去处理更多的任务.即轻松实现了数据采集与数据处理 的同步并发进行.这将是最高效的.这个队列缓冲跟先进先出存储器 FIFO 芯片功能基本一致,只不过这个缓冲是一 个被软件仿真的 FIFO 存储器.使用这项技术的最大优点就是完全解决了在多任务环境中实现高速连续采集数据难的 问题.特别是整个系统突然繁忙的时候,比如用户在高速采集数据或实时存盘时,偶而移动窗口或改变窗口大小或 弹出对话框时,这项技术足以保证所采集的数据完整无缺.如果用户希望应用程序有更好的处理能力和克服操作系 统的陡然忙碌对连续数据采集的影响,可以考虑在用户模式中再使用二级缓冲队列和相应的缓冲区链表技术.具体 细节请参考 NT 下的中断演示程序.(目前在 Window NT 中完全支持此项技术,在以后的 Win2000 和WinXP 版本中 应该会进一步提供).
三、连续不间断大容量采集存盘 在虚拟仪器、实验室数据分析、医疗设备、记录仪等诸多研究和应用领域中,对数据的要求很高,一方面数据 容量较大,如几百兆甚至几仟兆,另一方面采样速度都较高,如200KHz,300KHz 等,更重要是要求在高速长时间 的采集数据过程中,不能丢掉一个点,必须全部存入硬盘,同时还要进行一些点的抽样分析,这在 DOS 环境中实现 起来就有较大的难度,就更别说在 Windows 这样的多任务环境中(对于 Windows 多任务机制请参阅有关 Windows 手册) .大家知道 Windows 的各应用程序总是不断地被任务调度器调度,循环处在睡眠、排队、就绪、触发运行等状 态中.Win95 任务之间的切换密度至少大于
1 毫秒,那么如果要以 300KHz 频率采样(即每 3.3 微秒就得传输一个数 据) ,很显然有大量的数据在传输中由于任务之间的切换而被丢失掉.这就是基于 Windows 客户程序在传统模式下, 高速连续采集传输数据时所具有的局限性.为了突破这种局限性,就得采用别的办法,如非客户程序、内核程序、 驱动程序(如VxD、微代码)等,再加上我们所掌握的新技术,如内存映射、直接写盘技术以及独有的设计思想便 可以很好的解决这些问题.从1998 年9月开始,已有部分用户实际使用,反映良好.我们自己也经过全面测试,比 如在 Windows95 下使用无 FIFO 芯片的 BH5104 模板,实际结果是:以200KHz 频率,双通道采集正弦波且存盘,写 满整个硬盘近