×
嵌入式 > 技术百科 > 详情

利用VB实现PC机与多单片机远程无线通讯

发布时间:2020-06-20 发布时间:
|

1 引言

    随着现代电子与信息技术的不断发展,计算机与单片机控制系统之间的远程无线通讯技术得到了广泛的应用,而数传电台目前已发展成为远程无线通信的一种重要工具,它使用灵活、性价比高,环境适应能力强,非常适用于大范围、分散控制系统及在恶劣环境中,不适于铺设有线网络的实时监控系统,数传电台已成功应用于电力设备监控、计算机实时监控与数据采集(SCADA)以及实时交易数据遥测遥控等领域。同时VB6.0具有界面友好、编程简便高效、数据处理及驱动底层硬件功能强等优点,成为许多用户开发PC机与单片机串行通信程序的首选工具。
    本文以美国MDS OEM EL705数传电台为通讯媒体,利用VB6.0的通讯控件MSComm实现了控制中心PC机与多个远端AT89C51单片机控制系统之间远程无线通讯,实现了控制中心PC机对多个远端单元的实时控制与管理,并应用于工程设计中,通过实际应用,取得了满意的效果。

2 系统的组成及工作原理

2.1系统的组成

    系统由控制中心和多个远端单元RTU(Remote Terminal Unit)组成。控制中心主要由上位机PC和数传电台组成,各远端单元由数传电台、AT89C51单片机系统及现场设备组成,各远端单元根据实际需要分布在距控制中心一定距离的范围内,控制中心及远端单元结构分别如图1、图2所示。
2.2工作原理
    控制中心作为系统的数据终端设备DTE(Data Terminal Equipment),负责实现对远端单片机系统的实时控制与管理,打印单片机系统工作状态信息、自检信息、记录报表信息及远程单片机系统故障报警信息等,并可通过局域网与其它PC机进行信息传递。
    PC机与数传电台通过RS232通讯电缆相连接,电台采用连续相位频移键控(CPFSK)调制方式,数据直接启动电台发射,空中无线传输速率为9600bps,端口数据传输速率可根据系统需要设置为1200bps~19200bps。
    各远端单元数传电台通过RS232通讯电缆与单片机系统相连接,单片机系统通过固态继电器以离散量的形式控制现场设备。单片机系统(图2虚线框中部分)采用MAX232芯片实现与数传电台之间信号的电平转换,并通过2片8位移位寄存器74LS164和2片74LS373锁存器,实现串行输入并行输出16位开关量,分别控制16个固态继电器的通断,从而控制16路现场设备。单片机系统还有复位、故障报警及高能蓄电池供电等系统。
 
图1 控制中心结构示意图
 
图2 远端单元结构示意图

    综上所述,系统是以数传电台为通信媒体,组成点到多点的主从式远程无线通信网络系统。控制中心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单片机串行通讯程序设计
    远端AT89C51单片机采用中断方式、基于MCS-51汇编语言与上位机进行通讯,中断子程序流程图如图3所示。
    控制中心上位机PC每次发送控制信息前必须先发送指定远端单元的地址信息,单片机进入数据接收子程序,如果收到的地址与本机地址相同,置接收数据标志位,连续接收上位机发送过来的控制信息。数据接收完毕,开始对控制信息进行校验码确认操作,校验正确则回送上位机确认信息,并对两字节控制数据进行移位操作等必要处理,最后输出开关量并返回中断入口处;若校验错误,回送上位机重发信息。如果远端单片机收到的地址与本机地址不同,程序也返回中断入口处,继续执行其它操作或等待接收新的信息。这样,就确保上位机把控制信息可靠地传给指定的远端单元,各远端单元回送的信息只能被上位机接收。由于每个数传电台时刻处于待机状态(也可以根据实际需要,使电台进入休眠状态等待),所以只有先对远端单元地址进行确认,才能保证在某一时刻只有一个远端单元完全接收了上位机发出的数据信息,避免了不必要的资源耗费。[page]


 
图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




『本文转载自网络,版权归原作者所有,如有侵权请联系删除』

热门文章 更多
ADI 高精度低功耗精密放大器