首页 > 范文大全 > 正文

基于WINCE系统的实时数据采集方法

开篇:润墨网以专业的文秘视角,为您筛选了一篇基于WINCE系统的实时数据采集方法范文,如需获取更多写作素材,在线客服老师一对一协助。欢迎您的阅读与分享!

【摘要】Windows CE操作系统是常见的嵌入式操作系统,具有良好人机交互界面,常用于消费类产品。该系统应用于工业控制领域时,实时数据采集能力差。本文通过对硬件定时器编程,探索了一种保证实时性数据采集的方法,可以较的解决Windows CE操作系统在工业领域的应用。

【关键词】Windows CE 数据采集 驱动层硬件定时器

一、概述

Windows CE(以下简称WinCE)是微软公司开发的一种小型的、基于ROM的、具有Win32子集API的精简操作系统。由于wince操作系统的简洁(最小系统需要的存储容量可达10M字节以下)和系统软件的开发便利(其应用软件与桌面操作系统window具有较好的兼容性),其在手机和掌上电脑等嵌入式产品中有着广泛的应用。随着工业测控设备的发展需求趋向于智能化、小型化,WinCE在工业测控设备中也得到越来越多的使用。

在工业测控设备对操作系统一个很重要的要求就是具有实时处理能力。而WinCE的实时处理能力一直作为其软肋遭人诟病。在这里我们针对公司的具体项目的要求,通过反复的实验,找到了一种在WinCE下实现定时数据采集功能的方法,为公司测控设备的智能化、小型化做了一定的技术准备。

二、定时数据采集系统要求

(一)功能要求

在公司生产的一个地面测试设备中,要求每2ms采集一次输入的模拟量,并将采集到的数据绘制成曲线,在液晶屏上实时显示。

(二)硬件和软件开发环境

在采用ARM9技术核心的S3C2440芯片为主CPU的硬件平台上,安装定制WinCE操作系统,并开发相应的驱动程序和应用软件。

WinCE操作系统的版本选择为5.0,驱动程序开发环境为相应的Platform Builder 5.0,应用软件开发环境为Embedded VC 4.0。

(三)测试方法

定时采集系统的输入模拟信号用函数发生器HP33250A产生,信号类型为正弦波,频率10Hz,峰峰值为2V,直流偏置1V。

定时采集系统将采集到的数字量保存在文件中,使用Excel打开并绘制曲线,观察采集到的数字量是否满足每2ms一个数据点的要求。

三、定时数据采集系统的设计

(一)系统功能划分

定时数据采集功能的实现包括三个部分:

a. 控制硬件(模数转换器)进行定时数据采集;

b. 对采集到的数据进行处理和保存;

c. 根据采集的数据进行绘图操作。

整个采集系统设计的关键是数据采集的定时是否可靠。数据保存与绘图操作的实时性误差不会造成系统的错误,而数据采集必须每间隔准确的2ms时间间隔就进行一次,否则将无法反映外接输入模拟量的实时变化情况。在实际的实验中,数据采集、数据处理和保存的方法和位置的不同,直接影响着系统功能是否能够可靠实现。下面根据使用定时器的不同、数据处理方法的不同分别介绍几种方案。

(二)应用层软件定时器方案

WinCE操作系统下的应用软件开发环境EVC与桌面操作系统windows下的VC++环境基本相同,提供了几乎相同的类函数的封装,同样也可以调用基本的Win32API函数。

在应用层编程中常用的定时器包括MFC(微软基本类库)提供的Timer事件和windows提供的多媒体定时器。

Timer事件定时器先使用SetTimer()来定时,再在程序中增加定时响应函数OnTimer(),并在此函数中增加相应的处理语句完成时间到时的操作。精度在毫秒级别,一般其响应时间为55ms,且系统越忙精度越差。所以不符合2ms定时采集的要求。

多媒体定时器是windows提供的内置定时器。通过调用timeSetEvent()函数,将需要周期性执行的任务定义在 lpFunction()回调函数中(如:定时采样、控制等),从而完成所需处理的事件。在定时器使用完毕后,调用timeKillEvent()将之释放。下面是使用多媒体定时器定时的部分代码。

将数据缓存dataBuf中的数据保存到文件中,使用Excel打开后,得到的数据曲线,但AD采集到的数据点间隔并不是严格的2ms。

(三)驱动层硬件定时器方案

鉴于软件定时器的误差较大,考虑为CPU自带的定时器timer0编写驱动程序。在驱动程序中,配置好timer0后,创建一个中断服务线程;中断服务线程在timer0产生硬件中断后,触发中断事件;中断服务线程中循环执行的程序段检测到中断事件,即开始一次AD采集。

硬件定时器timer0每2ms控制AD采集数据,并将数据保存在数据缓存dataBuf数组中。但应用层无法直接调取驱动层的变量。所以,在驱动层可被映射到应用层的IO函数中,将dataBuf数组地址映射到应用层传递过来的地址指针中。

在结果数据绘制的数据看到,每100ms时AD采集到的数据出现缺失,即此时的AD并没有采集到数据。怀疑为100ms定时读取数据时,占用CPU,或是驱动程序中保存AD采集数据的数据缓存,导致AD采集到的数据无法保存。

(三)创建独立线程读取驱动数据

为了让应用层对数据缓存的调用不会影响到驱动层的数据缓存,考虑在应用程序中创建一个独立线程,由事件驱动,定时读取驱动层中的数据缓存。编写完软件后将应用层采集的数据保存到文件中,并用Excel打开,绘制数据出波形为连续正弦波。这种数据读取和处理方法不会影响到驱动层中AD的定时数据采集,也获得了比较精确的数据采集时间间隔,满足了定时采集数据系统的要求。

四、总结

从上面的一系列实验可以看出,要在WinCE操作系统下实现精确的定时数据采集,必须使用硬件定时器控制AD采集;在应用层读取AD采集数据尽量采用独立线程方式,以减小对CPU和数据缓存独占情况的出现。这种设计方法一定程度上解决了对实时采集和即时控制要求较高的工业测控设备,在向系统级实时性较差的便携式操作系统发展时所遭遇的矛盾,为工业领域的测控设备的智能化、集成化发展提供了一定的技术准备。