利用VB实现PC机与多单片机远程无线通讯
转自电子工程网
1 引言
随着现代电子与信息技术的不断发展,计算机与单片机控制系统之间的远程无线通讯技术得到了广泛的应用而数传电台目前已发展成为远程无线通信的一种重要工具,它使用灵
活、性价比高,环境适应能力强,非常适用于大范围、分散控制系统及在恶劣环境中,不适于铺设有线网络的实时监控系统,数传电台已成功应用于电力设备监控、计算机实时监控与数据采集SCADA以及实时交易数据遥测遥控等领域。同时VB6.0具有界面友好、编程简便高效、数据处理及驱动底层硬件功能强等优点,成为许多用户开发PC机与单片机串行通信程序的首选工具。
本文以美国MDS OEMEL705数传电台为通讯媒体利用VB6.0的通讯控件MSComm实现了控制中心PC机与多个远端AT89C51单片机控制系统之间远程无线通讯实现了控制
中心PC机对多个远端单元的实时控制与管理并应用于工程设计中通过实际应用取得了满意的效果。
2 系统的组成及工作原理
2.1系统的组成
系统由控制中心和多个远端单元RTURemote Terminal Unit组成。控制中心主要由上位机PC和数传电台组成各远端单元由数传电台、AT89C51单片机系统及现场设备组成各远端单元。
2.2工作原理
控制中心作为系统的数据终端设备DTE,Data Terminal Equipment负责实现对远端单片机系统的实时控制与管理,打印单片机系统工作状态信息、自检信息、记录报表信息及远程单片机系统故障报警信息等并可通过局域网与其它PC机进行信息传递。 PC机与数传电台通过RS232通讯电缆相连接电台采用连续相位频移键控CPFSK调制方式数据直接启动电台发射空中无线传输速率为9600bps端口数据传输速率可根据系统需要设置为1200bps、19200bps。各远端单元数传电台通过RS232通讯电缆与单片机系统相连接单片机系统通过固态继电器以离散量的形式控制现场设备。单片机系统虚线框中部分采用MAX232芯片实现与数传电台之间信号的电平转换并通过2片8位移位寄存器74LS164和2片74LS373锁存器,实现串行输入并行输出16位开关量,分别控制16个固态继电器的通断从而控制16路现场设备。单片机系统还有复位、故障报警及高能蓄电池供电等系统。
综上所述,系统是以数传电台为通信媒体组成点到多点的主从式远程无线通信网络系统。控制中心PC机和远端单元之间通过数传电台以同频异步半双工方式进行数据信息传输PC机通过串口发送信息到数传电台,数传电台通过高频载波信号将控制信息发送给远端单元收到正确信息的远端单元向控制中心回送正确接收信息并执行控制命令控制现场设备的接通与关断从而实现控制中心对各远端现场设备的实时控制与管理。 为实现最大的传输距离并防止各远端单元之间的相互干扰系统控制中心的电台使用全向天线远端单元电台使用定向天线并保证控制中心电台天线高于各远端电台天线的高度。
3 无线串行通信程序设计
3.1通信协议
1、一帧数据位由1位起始位、8位数据位、0位校验位、1位停止位共10位组成。
2、波特率为9600bps。单片机串行口按方式1工作,波特率用定时器T1控制,为得到准确的波特率单片机采用振荡频率为11.0592MHz的晶振。PC机串口波特率通过VB通讯
控件MSComm的Settings属性设置,为保证数据传送的准确性两者的波特率必须一致。
3、PC机发送的信息为固定5个字节第1和第2字节分别为远端单元地址信息标志以AAH表示和具体地址号本系统有8个远端单元可分别编址为01H、02H、…08H第3和第4字节为开关量控制信息第3字节数据信息控制1到8路继电器第4字节控制9到16路继电器第5字节为校验码CheckSum数据。
4、远端单片机回送的信息为固定3个字节第1和第2字节为远端单元地址第3字节为回送的信息EEH为接收完毕确认信息FFH为接收出错重发信息等。
3.2远端AT89C51单片机串行通讯程序设计
控制中心上位机PC每次发送控制信息前必须先发送指定远端单元的地址信息,单片机进入数据接收子程序如果收到的地址与本机地址相同置接收数据标志位,连续接收上位机发送过来的控制信息。数据接收完毕开始对控制信息进行校验码确认操作,校验正确则回送上位机确认信息并对两字节控制数据进行移位操作等必要处理,最后输出开关量并返回中断入口处若校验错误回送上位机重发信息。如果远端单片机收到的地址与本机地址不同,程序也返回中断入口处,继续执行其它操作或等待接收新的信息。这样就确保上位
机把控制信息可靠地传给指定的远端单元,各远端单元回送的信息只能被上位机接收。由于每个数传电台时刻处于待机状态也可以根据实际需要使电台进入休眠状态等待。所以只有先对远端单元地址进行确认,才能保证在某一时刻只有一个远端单元完全接收了上位机发出的数据信息避免了不必要的资源耗费。
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 结论
通过采用上述通讯方法实现了基于数传电台的控制中心上位机对各远端单片机系统的远程实时控制实现了高速、实时数据的发送和接收。经过实际应用系统工作稳定可靠满足了预期的控制要求。可以预见数传电台以其使用灵活简便、全数字化无线通讯及环境适应能力强等优点必将在信息采集、远程监控等领域得到更加广泛的应用。
- 上一篇:半桥驱动电路工作原理及作用 [2019-05-28]
- 下一篇:SPI、I2C、UART、I2S、GPIO、SDIO、CAN,你能分清楚吗 [2019-04-11]