服务器与单片机系统无线通讯设计与实现
2010-03-16李东岳邢传义
李东岳,邢传义
(哈尔滨威克科技股份有限公司,黑龙江哈尔滨150090)
1 前言
把无线通信和串行通信结合起来,在铁路与其他行业中有着极其广泛的应用,可以进行远程数据采集、处理与控制。文章介绍的是服务器与单片机系统,通过数传电台,实现串行主从式通信的实例。上位机使用RS-232串口,连接数传电台,数传电台用的是MOTOROLA公司的GM950i,下位机硬件主要有89C51单片机及串口电路等,串口电路采用MAX232芯片。
在无线通信过程中,会产生一系列的不同于有线通信的问题,主要是无线通信中的干扰,无线电台在发送数据的时候,自身会产生一些乱码,在对数据处理的时候,还要有对从机的识别与区分。这些都要通过制定必要的通讯协议来解决。所以要编写相应的发送程序和接受程序,增强系统对误码的判断能力,提高程序对数据传输的可靠性。
2 通信原理
串行端口的本质功能是作为CPU和串行设备间的编码转换器。当数据从CPU经过串行端口发送出去时,字节数据转换为串行的位。在接收数据时,串行的位被转换为字节数据。数传电台是本通信系统中重要的通信媒介,起到微波发送与接收的作用,它有一个RS232接口,直接与上位机的串口连接,它们之间通过四线制(RX、TX、SG、RTS)连接。在收发数据的时候,程序要合理地控制RTS信号线。
本通信系统是半双工的,一次只能同一个终端设备进行数据交换。所以就有资源冲突问题,要通过时序的协调来解决。网络的控制权集中在中心主机上,主机以顺序查询的方式与从机进行通讯,从机是被动地接收或发送数据,其功能可通过通信协议来实现。为了解决单片机缓冲区小的问题,本程序采用了多次发送,多次接收,一次处理的方法,使单片机可以通过协议收发多组数据。对于数传电台传输过程中的干扰问题,也有相对的解决方案。经试验发现,干扰产生的乱码集中在RTS发生变化的时候,也就是说,大部分乱码出现在数据的首尾,于是本程序利用乱码出现频率较低的OAAH和55H作为前导码。接收程序在判断到这两个数据之后才对协议中的控制字、地址等进行判断。控制字定义了按协议写的数组的长度,所以后续的乱码就不用去处理了,从而实现了先判断后处理。实验证明,此方案可行。通信连接示意图如图1所示。
3 协议的设计
表1 协议构成
帧头(24位)就是前导码。制定无线通信协议的第一任务就是要能够正确识别数据。传送过程中的干扰噪声和有效数据干扰噪声是以随机字节形式出现的,没有明显的表示规律。通过测试发现,0AAH和55H比较合适。
从机地址的范围为1到254,所以一次最多可以连254个从机。0作为广播式通信时主机发送的地址信号。255保留。
控制字有8位。D7表示数据来源,1为主机,0为从机。D6表示传送方式,1主从式,0广播式。D5D4D3是控制字,000表示准备好了吗/准备好了;001表示请求子机发送数据/子机发送数据;010表示子机发送的是最后一组数据;100表示是主机发送数据;101代表主机发送结束。D2D1D0标志着数据位的长度,000~111依次表示传送0~8个字节数据。数据位可根据需要取相应字节数,按十六进制传送;校验位采用CRC校验码。
4 软件设计
4.1 程序功能及流程图
上位机通信程序用VB编写,通信流程图如图2。下位机用汇编语言编写,通信流程图如图3。除了遵守通信协议之外,还要遵守相应的硬件规约。发送的每个字节数据都是10位,包括1个起始位、1个停止位、8个数据位。通信波特率为4 800bit/s。
4.2 上位机程序
4.2.1 发送程序
发送数据的关键问题是一次传送的字节数,由于单片机缓冲区一次只能放一个字节的数据。而按照协议发送的字节数组很长,所以本程序用了如下方法实现收发:
(1)将要发送的数据按照协议放入一个字节数组中,例如:要发送数据7给从机1,数据帧FF AA 55 01 E1 07,校验位在本演示程序未写入,放在SendData字节数组中SendData(0)=0FFH,SendData(1)=0AAH,以此类推。
(2)将字节数组中的数据发送出去,每个中间间隔40ms,从SendData(0)依次发到SendData(5),中间经过一个过度数组out(),是一个能放一字节数据的定长数组。
发送程序如下:
4.2.2 接收程序
由于发送时间间隔是40ms,本程序采用事件驱动接收,就是缓冲区每有一个字节的数据就触发Oncomm事件,将缓冲区数据取入数组中,可以在六个数据都取完了之后再处理。如何知道数据发送结束呢?在这里,利用发送时间间隔为40ms这个特点,可以把每组数据时间间隔设长一点。第一次触发,用时钟记时,第二次触发,时钟清零,再开始记时,然后对接收到的数组处理。接收数据的接收过程利用的是Oncomm事件和Timer3定时器。
4.3 下位机程序
下位机通信程序的收发功能与上位机类似,发送的时序和时间间隔都按照本通信协议,只是使用汇编语言编写,本程序只对程序发送数据做简单描述。
4 结束语
实验证明,该方法及其通信协议能很好地实现数据的接收和发送,数据收发准确率较高;不足之处在于数据传输速度相对比较慢,因此适合于对数据传输速度要求不高,数据量不多的场合。在铁路通讯中,由于部分区段无法进行有线通讯,无线通信是很好的解决方法。目前越来越多的智能仪器采用通用的RS232接口加数传电台方式实现通信和控制。文章的方法可以很好地解决这一问题。
[1]李华.单片机原理及应用[M].兰州:兰州大学出版社,2001.
[2]范逸之.利用实现串并行通信技术[M].北京:清华大学出版社,2001.
[3]李鸿吉.Visual Basic 6.0中文版编程方法详解[M].北京:科学出版社,2001.(编辑:钟 媛)