vb设计论文六篇:VB语言下上位机与单片机串口通讯的的延时方法
摘要:PC机与单片机之间通讯时, 要制定延时方案, 以保证通讯高效、准确。本文介绍了时钟控件Timer和Get Tick Count函数延时方法, 并编写设计延时方案。最后通过实例介绍了两种方法组合使用, 实例已经过长时间的考验, 运行稳定可靠。对于设计同类型的延时方案有借鉴意义。
关键词:延时; 时钟控件Timer; GetTickCount;
在信息技术高速发展的时代, 通讯技术是其关键问题, 其中控制更是系统稳定运行的核心。现今多以PC为上位机, 单片机将所需的数据通过串口发送给上位机, 由上位机进行分析、处理。上位机根据实际数据, 通过串口发出命令进行干预、控制。在这个过程有很多处理方法和规则, 其中延时方案尤为重要。延时方案设计的是否合理, 直接影响到数据传输的正确性和效率, 也影响到整个系统的运行是否稳定。
在PC中有各种可以实现串口通讯的语言, 本文选用VB6.0作为开发语言。Visual Basic采用可视化的图像用户界面、面向对象的程序设计思想、事件驱动的工作机制和结构化的高级程序设计语言。可高效、快速的开发出WINDOWS环境下功能强大、图形界面丰富的应用软件[1]。Visual Basic6.0通过调用MSComm控件进行串口通讯, 其中有几种延时方法, 本文就HEW互感器误差管理系统各个版本中的用到的两种延时方法进行阐述。
一、上位机与单片机串口通讯实现
上位机与单片机之间以串行总线接口为RS-232。VB6.0通过调用控件MSComm来实现通讯传输。通过属性Comm Port设置COM口, 属性Settings设置通讯参数, 如:波特率, 数据位, 校验位等。由Outpu向单片机发送命令, 属性Input将接收的数据进行处理。
一个简单的例子, 使用通讯端口COM1, 波特率为9600, 无奇偶校验码, 8位数据位, 1位停止位, 发送字符“A”。代码如下:
如果PC和单片机有协议, 单片机收到“A”后, 会向上位机发送数据, 使用MSComm1.Input将接收到的数据进行处理, 就完成了PC机和单片机之间的数据交换。
在实际运用过程中, 当PC机向单片机发送命令的时候, 会得到单片机的回应, 或者单片机会自动不间断的向PC机发送数据。这时设计有效的延时方案, 将直接影响接收数据效率、完整性、正确性。
二、上位机的延时方法
1. 通过时钟控件 (Timer) 实现延时
时钟控件 (Timer) 是一种定时触发事件的控件, 可以有规律的以一定的时间间隔触发Timer事件。其中使用Interval属性控制时间间隔, 时间单位为毫秒, 有效时间值的范围 (0-65535) 。通过Enabled属性, 可以控制计时器是否开始。主要通过这两个属性可以达到延时的目的。
例如, 每2秒钟进行一次Timer控件触发, 代码如下:
Timer1.Interval=2000’设置时间间隔, 每两秒触发
Timer1.Enabled=True’使Timer1控件有效
每2秒将触发一次Timer事件, 可以在Timer事件中进行相应的编程, 就可以做到延时控制的作用。
通过上面的例子可以看出Timer控件可以简单的进行延时, 但是有很大的局限性。
第一, 有效值范围最大只有65535毫秒, 也就是说最大延时间隔只有60多秒。
第二, Interval属性值只是一个参考值, 其准确性低, 因而时间间隔不一定准确。Timer控件是基于Windows消息WM_TIME的时钟脉冲发生器, 系统每秒生成18个时钟信号, 所以即使用毫秒衡量Interval属性, 间隔的实际精度不会超过1/18秒, 所以Timer控件能够精确设置的最短时间是65.6毫秒[2]。
由此可以得出, Timer控件可以进行延时, 但是准确度受到局限。通常只用于对时间的准确度要求不高的定时执行事件。
2. 通过调用Windows提供的API函数
在Visual Basic6.0中还有一种延时方式是条用API函数, 通常调用time Get Time、Get Tick Count函数。这两个Windows系统API函数都是返回系统时间, 以毫秒为单位。从系统启动到调用函数时所经过的毫秒时间。49.7天为一个周期, 超过49.7天, 值回从0开始, 作为短时间延时控制, 这个周期限制可以忽略。
以Get Tick Count函数为例, 代码如下:
这段代码就是不停的使用Get Tick Count获取当前时间, 当达到结束时间时退出循环。
以上代码即可实现延时5秒。这样的延时相对准确。对于和单片机通讯之间, 使用这样的延时功能足够满足需求。这里要注意的是, Get Tick Count和time Get Time是返回系统时间, 所以更具不同的系统, 延时间隔会有不同, 在使用的过程中要根据实际情况进行调整。
3. 两种方法组合使用
在实际使用中, 经常会将两种方法同时使用, 互相配合, 已达到各种延时的要求。在HEW互感器误差管理系统中就使用这种组合方式。HEW2000互感器校验仪每100毫秒将测试数据, 按照16进制码, 10个字节为一组, 向PC机发送。PC机与HEW2000互感器校验仪双向通讯。这样通讯系统需要设计一个延时方案。
首先, 加载一个时钟控件 (Timer) , 并设置属性Timer1.Interval=80, 并在Timer1_Timer () 事件中编写接收命令。代码如下:
虽然设置为80毫秒, 但在实际运行中, 由于软件线程等问题, 间隔并不一定准确。在实际通讯过程中, 互感器校验仪会源源不断的发送数据, 根据上面的代码, 系统软件会不断的接受数据, 并对这些数据进行处理。
其次, 编写调用Get Tick Count的延时函数, 代码如下:
在函数调用时, 时间变量ms Value可以设置延时长度, 单位毫秒。在PC机器向互感器检验仪发送控制命令的时候, 这里加入延时函数。代码如下:
MSComm1.Output=&H64’向互感器校验仪发送控制码
YANSHI (100) ’延时100毫秒
这样的延时一方面等待互感器校验仪响应时间, 另一方面时钟控件Timer中的间隔所受到的影响将到最低, 保证Timer1_Timer () 事件中接收数据完整性。
最后, 利用Timer1.Enabled属性, 控制时钟控件Timer是否工作。在仪器响应、接收数据、数据处理、仪器行程等, 这些需要精确控时的地方用Get Tick Count的延时函数来控制延时。如果遇到特殊情况可以设置Advance Exit和Wait False值使延时函数提前退出。两种方式有效的配合将使得整个系统运行流畅。
三、结束语
本文介绍了时钟控件Timer和调用Get Tick Count延时函数的延时方法。并通过HEW互感器误差管理系统中的串口通讯的例子, 介绍两种延时方法组合使用。此系统中的延时方案经过调试并运行很多年, 运行情况稳定。本文对于初涉设计延时方案有一定的借鉴意义。
参考文献
[1]蒋加伏, 张林峰.Visual Basic程序设计教程[M].北京:北京邮电大学出版社.
[2] 宜昌市交通学校, 雷海峰.Timer控件的使用[N].计算机世界, 2001-12-17 (C19) .