利用VB实现PC机与多单片机远程无线通讯
图3 单片机中断子程序流程图
3.3 上位机PC串行通讯程序设计方法及实现
上位机利用VB6.0编程,用VB6.0开发串行通信程序普遍采用以下两种方法:一种是利用Windows的API函数;另一种是采用VB6.0的通讯控件MSComm。利用API函数编写串行通信程序较为复杂,需要调用许多繁琐的API函数,而VB6.0的MSComm通讯控件提供了标准的事件处理函数、事件和方法,用户不必了解通信过程中的底层操作和API函数,从而比较容易、高效地实现了串口通信。
MSComm控件提供了两种功能完善的串口数据发送和接收功能:一种是查询法,通过检查CommEvent属性的值来轮询(Polling)事件和通信状态,可以使用定时器或DO…Loop程序实现;另一种是事件驱动法(Event-driven),利用MSComm控件的OnComm事件捕获串口通信错误或事件,并在OnComm事件中编写程序进行相应处理,这种方法响应及时,可靠性高,本软件系统采用了此方法来接收远端单片机的回执信息,以使PC机作出更快的反应。
数传电台基于透明传输,不改变系统原来的通讯程序及传输格式,编程时只需适当考虑无线传输引起的信号时延。
软件采用定时器Timer1控件来实现在数据信息送出30秒后(Timer1.Interval = 30000),PC机仍未收到任何回执信息时,程序自动跳出系统。
实现同样的功能,程序代码会因不同人的编写而略有不同,并且篇幅所限,在此仅给出在VB中对MSComm控件初始化和数据发送与接收的部分源程序,代码如下:
……
初始化MSComm控件程序:
With Comm1 ‘控件名为Comm1
.CommPort=1 ‘使用串行端口1
.Settings=“9600,n,8,1” ‘设置初始化参数
.InputLen=0 ‘读取缓冲区的全部数据
.InputMode=comInputModeBinary ‘以二进制方式接收数据
.RThreshold=3 ‘接收缓冲区达到3个字节时产生OnComm事件
End with ‘其它属性值为默认即可
……
发送数据程序:
……
Dim Send As Variant ‘定义变量
Dim OutByteD(5) As Byte ‘定义发送数据数组
…… ‘获取发送数据
Send=OutByteD ‘将发送的数据赋给发送变量
Comml.Ouput=Send ‘发送数据
……
数据接收程序:
Private Sub Comm1_OnComm()
Select Case Comm1.CommEvent
Case comEvReceive
Dim Jshuju() As Byte , i%, count%
Dim Rec As Variant
Rec=Comm1.Input
count=UBound(Rec)
ReDim Jshuju(count-1) As Byte
For i=0 to count-1
Jshuju(i)=Rec(i)
Next i
…… ‘判断回执信息并进行相应处理,如处理指定远端单元数据接收完毕、数据接收有误请求重发信息、显示、打印自检信息等
End Select
End Sub
4 结论
通过采用上述通讯方法实现了基于数传电台的控制中心上位机对各远端单片机系统的远程实时控制,实现了高速、实时数据的发送和接收。经过实际应用,系统工作稳定可靠,满足了预期的控制要求。可以预见,数传电台以其使用灵活简便、全数字化无线通讯及环境适应能力强等优点必将在信息采集、远程监控等领域得到更加广泛的应用。
参考文献:
[1]范逸之,陈立元.Visual Basic与RS-232串行通信控制最新版.北京:中国青年出版社,2002
- PLC串行通讯应用原理(12-21)
- 串行通讯的一些认识(12-19)
- 串行通讯的速率与传输距离(12-19)
- 串行通讯(单片机)(11-24)
- 单片机学习之十八:串行通讯程序:单片机发送(11-18)
- 单片机学习之十九:串行通讯程序-单片机接收(11-18)