您好,欢迎来到筏尚旅游网。
搜索
您的当前位置:首页基于Visual C++的精确定时技术与应用

基于Visual C++的精确定时技术与应用

来源:筏尚旅游网
维普资讯 http://www.cqvip.com 2007年5月 农机化研究 第5期 基于V i s u a l C++的精确定时技术与应用 冀荣华。,祁力钧 ,傅泽田 (中国农业大学a.信息与电气工程学院b.精细农业系统集成技术重点实验室,北京 l00083) 摘 要:为了保证实时控制系统的控制精度,往往要求能精确定时。在Vi sual c++中提供多种定时方案, 对常见的几种定时方法进行了对比、分析。针对精准施药系统的定时要求,分别采用QueryPerformance— Frequency 0和QueryPerformancecounter()函数及多媒体两种方法进行定时。经过测试,表明两种方法均 能够满足系统提出的定时精度要求,但前者与计算机的硬件配置有关,因此在精准施药系统中采用基于多 媒体的定时方法。 关键词:自动控制技术;精确定时;应用;Vi sual c++;多媒体定时;精准施药 中图分类号:TP273 ̄.5;S126 文献标识码:A 文章编号:1003—188X(2007)05--0191—03 0 引言 经过测试定时精度为55ms;三是无法处理实时性强 的问题。原因在于基于消息响应机制的程序,当CPU 在很多控制系统中,有许多需要定时完成的操 被某个进程占用或系统资源紧张时,发送在消息队 作,如定时采集、定时向执行机构发出命令或传送 列中的消息就暂时被挂起,得不到实时处理;同时 数据等。为了保证系统的控制精度,需要进行精确 由于定时器消息WM—TIMER的优先级很低,很难保证 定时。由于Visua]c++语言简练、代码结构紧凑、 定时消息能够被及时地响应和处理。 执行效率高。。等特点,已经成为大多数控制系统的 因此,本方法只应用于对定时要求不是很高的 主要程序设计语言。基于Visua]c++的定时方法有 场合。 很多种,本文详细地分析对比了Vi sua]c++中各种 1.2 基于GetTjckCount()函数的定时 定时方法,并结合精准施药系统来说明该系统中精 本种方法属于一种定时精度较高的方法。定时 确定时的设计与实现。 实现思路: 1 基于Visual C++的定时方法 由于GetTi ckCount()函数的返回值为DWORD 型,表示以ms为单位的计算机启动后经历的时间间 1.1 基于WM—TlMER消息的定时 隔。其可以通过两次调用该函数,然后控制其差值 该方法是利用MFC类库中的CWnd类提供的 从而进行定时,如 Timer来实现的。定时实现思路: DWORD dwStart,dwEnd; 1)利用Set Timer()函数创建定时器,并设置 dwEnd=GetTickCount(); 时间间隔; whi1 e(TRUE) 2)设置消息响应函数OnTimer(),并在该函数 { 中添加消息响应的处理语句; dwStart ̄dwEnd; 3)调用Ki11 Timet()函数删除定时器。 //添加定时控制任务语句 例如,Set Timet(hWnd,0,200,NULL)即设置 200ms的时间间隔。当200ms的时问到时会发出一 d0 个wMTIMER消息,调用消息响应函数0n Timet(), {dwEnd=GetTickCount(); 以进行实时处理。 )wh i 1 e(dwEnd一20<dwStart); 方法说明: )  ,一是方法简单,实现方便;二是定时精度较低, 可以发现,本方法CPU占用率很高,为了降低 CPU占用率可把代码改为: 收稿日期:2006—08—31 作者简介:冀荣华(1 973一),女,黑龙江延寿人,讲师,博士生 DWORD dwStart=GetTiCkCount(); (E-mai l)je s si c1212@coln.edu.c13。 DWORD dwEnd=dwStart: .191— 维普资讯 http://www.cqvip.com 2007年5月 d0 农机化研究 第5期 的LpTimeProc回调函数中。需要注意的是,任务处 MSG msg; { 理的时间不能大于周期间隔时间。 GetMeSSage(&msg,NULL,0,0); TranS1ateMeSsage(&msg); Di SpatchMeSSage(&msg); 2)多媒体定时器对实现较高精度定时是比较 理想的工具,其精度也较为可靠。 3)定时器的任务完成后,要及时删除,否则 占用太多内存,系统会变得越来越慢。删除定时器 首先删除定时器句柄,然后删除定时器分辨率。多 dwEnd:GetTickCount()一dwStart; )while(dwEnd<20); 这样可以降低CPU的占有率,但经过测试发现 将会降低定时精度。经过大量的测试,发现本种方 法的定时精度为lms。 1.3基于多媒体定时器的定时 微软提供了精确定时器的底层AP1支持,能够 媒体定时器的定时精度可以达到lms。 1.4 基于QueryPerformanceFrequency() ̄D Que— ryPerformanceCounter()函数的定时 为了实现精度更高的定时,在Vi sual c++为 Windows95及其后续版本提供了更精确的时间函数, 该高精度定时器主要是通过调用函数OueryPerfo— rmanceFrequency()和函数QueryPerformanceCou— nter() 实现的。 提供高精度的定时器服务。利用多媒体定时器可以 精确地读出系统的当前时间,并在很精确的时间间 隔内处理事件。多媒体定时器定时思路: 1)在项目中插入Windows Multimedia Libr— 定时原理为:在进行定时之前,先利用函数Qu— eryPerformanceFrequency 0函数获得机器内部定 ary组件,此时多媒体定时器所需的头文件(MMS— ystam.h)和库(winmm.1 ib)将自动插入工程的 Stdafx.h中; 2)利用timeGetDevCapS()函数得到定时器分 时器的时钟频率,然后在需要严格定时的事件发生 之前和之后分别调用QueryPerformancecou—nter() 函数,利用两次获得的计数之差及时钟频率,计算 出事件经历的精确时间。本种方法的定时精度大于 lms,但是定时精度与CPU等机器配置有关。 辨率等信息; 3)利用timeBeginPeriod()函数设置定时器 分辨率; 4)利用 timesetE、,e t()函数设置定时间隔, 2 精确定时在精准施药系统中的应用 精准施药是精准农业在植物保护方面的一个 主要应用方向。实施精准施药不仅能够提高农产品 的产量,而且通过农药投入的合理分配,能够有效 启动定时器; 5)使用定时器后,则应及时地调用timeK— il1Event()函数删除定时器句柄; 6)利用timeEndPeriod0函数删除定时器的 分辨率。 在设计多媒体定时器时应注意以下事项: 地提高农药利用率 ,降低农产品中有毒物质的残 留,提高农产品品质。另外,也减少了因农药滥用 而造成环境污染的风险 。 精准施药系统由数据采集、施药决策以及施药 1)本方法比较适合系统中有周期性需要执行 的任务,如定时采集、控制等。此时可将需要周期 性执行的任务定义在timeSetEvent()函数中指定 响应3部分组成。其具体的组成如图1所示。 cco摄像头 I视频果集卡 数 喷 药 雷达速度传感器b 压力传感器 ——PC104 —..——.—1 / 控 数据 ———J\ 计算机 -1/ 据 执 行 机 构 制 I竺竺 卡 采集卡 流量传感器b 图1 精准施药系统的基本组成 其组成:一是数据采集部分:由CCD摄像头、 视频采集卡、雷达速度传感器、压力传感器、流量 ..传感器以及数据采集卡组成。二是施药决策部分: 包括对采集的数据处理及施药决策两部分,由 192.. 维普资讯 http://www.cqvip.com 2007年5月 农机化研究 第5期 PC104内程序实现。三是施药响应部分:由数据控 制卡、比例减压阀、电磁阀及喷药执行机构组成。 根据数据采集系统采集到的图像、速度、压力 由雷达速度传感器测量拖拉机的速度,并传送到数 据采集卡,由数据采集卡将速度信号转换为数字信 号,由控制程序读取数字信号,并计算出拖拉机的 速度测量值,将其显示出来。每种定时方法分别在 30个定时时间间隔内做了测试,这样将得到两组速 以及流量等信号,给出施药控制决策,通过施药响 应部分来进行精准施药。 根据精准施药系统的控制要求,需要周期性地 采集数据、处理数据,实施精准施药。通过实际测 量拖拉机的运行速度,以及摄像头与喷头体之间的 距离,系统确定1OOms为一个控制周期,即每1OOms 度测量值。分别将速度测量值和实际值相比较,并 利用Mat1ab进行分析。 分析结果显示两种方法均能够满足系统的定 时精度要求。由于本系统控制较为复杂,在将基于 QueryPerformanceFrequency 0函数的定时方法应 对现场的速度、流量、压力以及图像等信号进行采 集、处理一次,同时控制电磁阀响应一次。由于本 用于本系统中,发现存在一些问题。.因此,本系统 最终采用基于多媒体定时方案。 系统属于周期性定时,因此本系统采用了基于多媒 体定时器进行定时。 为了验证不同的定时方法在本系统中的定时 精度,设计一个测试实验。测试方法如下: 3 结论 由于Windows为基于消息的系统,在Vi SUa1 由于本系统的定时精度较高,因此主要验证基 于多媒体定时器及基于QueryPerfor皿anceFreque— ncy 0和QueryPerformanceCounter()函数两种定 c++中直接运用高精度定时器会导致在运行时程序 大量占用CPU时间和系统资源,可能会出现死机现 象。为此,精准施药系统将实现高精度定时器的控 制程序放在一个线程中执行,这样可以有效地防止 死机现象。 时方法。在Vi sual c++中创建一个基于对话框的项 目,其界面如图2所示。 Vi SUa1 c++中实现定时的方法很多,但是各有 优缺点,在实际系统中应该根据具体情况来选择适 当的方法进行定时。 参考文献: [1] 何建辉,董方鹏.实用 Vi sua1 C++610教程[M].北 2000. 京:清华大学出版社, [2]李维林,栾海峰,顾 兵.基于VC++的数据采集卡的 程序设计[J].应用科技,2004,31(3):20—21. 图2测试界面 [3] 陈 勇,郑加强.精确施药可变量喷雾控制系统的 研究[J].农业工程学报,2005,21(5):69—72. [4] 史 岩.压力式变量施药系统研究[D].北京:中国 农业大学,2004. 测试思路:通过在界面上选择当前定时的方 法、定时时间间隔,使拖拉机工作速度为5km/h。 则按照指定的定时方法在指定的定时时间间隔内, Precise Timing Technology and Application Based on Visual C++ JI Rong—hua ,QI Li—jun ,FU Ze—tian。 fa.College of Information and Electricity Engineering;b.Key Laboratory for Modern Precision Agriculture System Integration,Ministry of Education,China Agricultural University,Beijing 1 00083,China) Abstract:Many real—time control systems need precise timing in order to insure the control precision.It analyzes and contrasts several timers that Visual C++offered in the paper.Base on the requirement of precise timing in the precision sprayer,It realizes the precise timing with two ways,which are multimedia timer and timer with functions of QueryPerformanceFrequency 0 and QueryPerformanceCounter(),in the precision sprayer.It can reach the control precision with two ways through testing.Because the timer,with functions of QueryPerformanceFrequency 0 and QueryPerformanceCounter(),realizes on the configuration of computer,the precision sprayer realize the precise timing with multimedia timer in this paper. Key words:auto—control technology;precise timing;application;Visual C++;multimedia timer;precise spray 193— 一

因篇幅问题不能全部显示,请点此查看更多更全内容

Copyright © 2019- efsc.cn 版权所有 赣ICP备2024042792号-1

违法及侵权请联系:TEL:199 1889 7713 E-MAIL:2724546146@qq.com

本站由北京市万商天勤律师事务所王兴未律师提供法律服务