您现在的位置: 范文先生网 >> 理工论文 >> 电子通信论文 >> 正文

Windows 95下智能数据采集系统

时间:2007-1-20栏目:电子通信论文

摘要:提出一种智能数据采集系统。用编程简单、定时分辨率高、工作可靠的单片机定时取代编程繁复、定时分辨率低、工作不可靠的Windows95下的定时。解决了Windows 95环境下短时间定时不准确的难题,又简化了用户的应用程序。整个系统结构简单、高效可靠,实现了对信号的高性能采集。

    关键词:定时器 时钟 并口 数据采集

引言

数据采集系统在各行各业都有广泛的应用。目前,已有各种各样高速、高精度、多通道的数据采集卡问世。计算机通过卡上的模数转换器采入数据,然后进行数据存储、数据处理和图形显示等工作。随着微电子技术和计算机技术的发展,(范文先生网www.fwsir.com收集整理)Windows 95/98平台下的应用程序已经成为数据采集与处理软件开发的主流。

用于数据采集的常规Windows定时顺又存在着严重的不足。首先,常规Windows定时器的定时分辨率低。定时器每隔55ms中断1次,相当于最高采样频率仅为18.2Hz。对由于Windows 95/98下的应用程序无法直接与硬件打交道,不能通过对定时中断重新安装的方法改变定时时间长度。如此低的采样频率对于绝大多数的信号采集与处理都是不适合的,必须寻找能以更高频率采集的方法。

其次,Windows系统是一个多任务操作系统,它是基于消息来驱动事件的。定时器消息WMTIMER在串行消息队列中的优先级别很低,往往得不到及时响应,甚至消息队列中的几个未及时处理的定时器消息会被合并为一个;而应用程序无法确定由于这种处理而丢失的消息数,使实际的采样间隔不均匀。

针对以上问题,人们想出了很多方法予以解决。目前常用的方法都是在PC机上编程,一般来讲有以下3种方法:

(1)在Windows应用程序中,Windows 95下智能数据采集系统使用普通C语言中常用的函数delay()[2,3]。

delay()是C语言中常用的延延、定时函娄。使用delay(),最高采样率可达1kHz,但delay()与多任务的Windows操作系统不兼容。在Windows应用程序中直接使用delay()会发生编译警告和连接错误。可以通过程序中显示说明函数delay()原型并在Windows库中包含DELAY模块的方法去除这一错误,从而可以在Windows应用程序中,像普通C程序一样使用delay()。然而,这种用软件等待的方法,对于主机的资源来讲是一个极大的浪费。

(2)使用Windows多媒体定时器的回调函数[4,5]

Windows多媒体定时器可以通过函数timeBeginPeriod来设置定时器分辨率,其分辨率最小为1ms,最大为16ms。这一分辨率代表了60~1000Hz的采样率,可以满足一般信号对采样率的要求。而且多媒体定时器采用中断完成定时服务,在中断时刻调用1个回调函数,而不是向消息队列发送WM_TIMER信息。在应用程序中,使用Windows多媒体定时器并不容易,必须遵循严格的步骤。在使用回调函数的赶集,在中断服务程序和用户主程序之间,要进行数据的共享,给编程和调试带来不便。程序的稳健性也会受到影响。在定时时间较短时,主机负荷过重。

(3)实时钟定时[6]

实时钟芯片在基准频率作用下驱动内部时钟电路工作,同时可通过对内部寄存器A(D3~D0)编程,选择22分频输出信号频率。实时钟周期性地输出方波和周期中断请求信号(该中断请求连到IRQ8),从而为程序中实现时间控制提供了另一条途径。同时,在Windows机制中,使用优先级高于一般的任务级,而等于系统级的VxD编制驱动程序,Windows 95下智能数据采集系统可以保证驱动程序在运行时享有最高优先权,在进行硬件设备的管理、控制时不会被其他任务所中断,充分保证了驱动程序返还给用户的数据是完全真实的值。而且可以直接对硬件进行访问,因而通过编写VxD直接管理实时钟中断,定时分辨率更高。但VxD对调试者的编程水平要求较高,稍有不慎,很容易出现异常错误或死机。

不难看出,直接在PC机上编程解决定时问题要求调

[1] [2] [3] 下一页

下页更精彩:1 2 3 4 下一页