APP下载

VC++应用软件程序实现RS-422实时通信的方法研究

2018-07-12罗霞沈德容贵州航天电子科技有限公司

数码世界 2018年6期
关键词:发送数据主程序计时器

罗霞 沈德容 贵州航天电子科技有限公司

1 引言

RS-422通信技术广泛应用于工程中,设计一个符合通信协议的计算机应用程序,是测试RS-422接口最简便快捷的方法。

通常RS-422接口设备之间通信的周期一般为几毫秒到几十毫秒,对VC++程序而言,接收数据设计一个工作线程即可,发送数据则需要定时,而且定时精度决定了实时性。

本文通过设计发送数据的功能程序,研究各种定时方法的精度与性能,从而对定时方法进行评价,供编写RS-422接口VC++程序的工程技术人员参考。

2 定时方法

功能程序基于对话框,在主程序中打开串口,设置波特率为921600;编写功能函数SendData( ),实现向RS-422接口发送一帧数据;设计定时方法,定时调用SendData( )函数。

2.1 使用WM_TIMER定时

映射WM_TIMER消息,在OnTimer函数中调用SendData( ),使用 SetTimer定时。

2.2 使用GetTickCount( )函数定时

GetTickCount( )函数返回从操作系统启动到当前所经过的毫秒数,常常用于测试一段代码的执行时间。定时需要创建线程,线程发送消息通知主程序时间,主程序挂起线程,在自定义消息函数中调用SendData( )按周期发送数据。线程函数中定时的代码如下:

2.3 使用timeGetTime( )函数定时

timeGetTime( )函数与GetTickCount( )函数使用方法相同。

2.4 使用CPU时钟频率定时

使 用QueryPerformanceFrequency和QueryPerformanceCounter定时,CPU频率越高,定时精度越高。定时需要创建线程,线程函数中定时的代码如下:

2.5 使用多媒体计时器

多媒体计时器即windows提供的内置定时器timeSetEvent,其函数原型如下:

程序首先通过timeBeginPeriod( )函数和timeEndPeriod()函数设置定时器的最小解析精度,然后调用timeSetEvent( )函数,周期性执行lpTimeProc回调函数完成SendData( )任务。在定时器使用完毕后,及时调用timeKillEvent( )将之释放。

3 测试结果

运行程序使用不同定时器的发送数据,用示波器测试数据帧的周期。测试用电脑配置Intel(R) Pentium(R) D CPU 2.80GHz 2.79GHz,内存2.00GB,操作系统Microsoft Windows XP,示波器是安捷伦DS06052A(500MHz,4GSa/s),测试结果见表1。

表1 计时器测试结果

4 结论

根据表1的测试结果,本文推荐在定时精度要求不高(通信的周期大于100ms)时,使用WM_TIMER定时;精度要求较高(通信的周期小于10ms)时,使用多媒体计时器。CPU时钟频率定时可以用来作延时,不影响其他任务。

猜你喜欢

发送数据主程序计时器
移动自组网中MAC层协议研究
松鼠的计时器
浅谈数控铣削技术代码程序的嵌套方式研究
超高精度计时器——原子钟
电控冰箱软件模块化设计
基于马尔科夫链的LoRaWAN网络节点性能分析
带标记方式的CRDSA++协议性能分析*
时光倒流 换回PotPlayer老图标
抗缪勒氏管激素:卵巢功能的计时器!
使用IPSec安全传输数据