1 引言
利用数传无线电台进行远程通信可以通过多种编程方法来实现。但是如果在通信可靠性、兼容性和组网的灵活性方面有要求,那么就不是一般通信程序能实现的。最好是能利用一个现成的、应用最广泛的、可靠性较高的、通信效率较好的、实现较容易的、经过充分实践证明的通用通信协议来完成。Modbus协议正是完全符合上述要求的诸多通信协议中的一种。
Modbus协议是由美国可编程控制器制造商莫迪康(Modicon Inc.)公司出品的一种应用于工业通信和分布式控制系统的协议。现已被众多的硬件厂商所支持,已经成为一通用工业标准。通过此协议,控制器之间、控制器经由网络(例如以太网)和其它设备之间可以通信。由于Modbus协议完全公开、实现简单、硬件要求低、可靠性好等特点,已成为构建低速网络(数据采集、仪表等)通信的最佳选择。
2 Modbus协议
2.1 协议简介
Modbus协议通信使用主—从技术,即仅有一台设备(主设备)能初始化传输(查询)。其它设备(从设备)根据主设备查询提供的数据作出相应回应。图1是Modbus协议的询问应答环路。典型的主设备:主机和可编程仪表。典型的从设备:可编程控制器。
图1 主从查询——回应周期表
主设备发送的一个含有指定编址的请求报文到通讯线路上;从设备则从通讯线路上检测报文是否含有自身编址。如果报文编址与自身编址相同则接收此报文进行处理。从机报文处理的过程是,如果报文正确,则按报文要求执行任务,然后再将正确的回应报文返回给发送者;否则只返回一个错误信息报文给发送者。
Modbus协议上允许1台主机和至多247台从机。只有主机才能启动事务处理程序。事务处理可以是应答式(只对一台从机寻址),亦可是广播式(无应答,对所有从机寻址)。事务处理程序由询问和应答帧组成,或由一个广播帧组成。
Modbus协议提供两种传输模式供用户选择。一种模式是ASCII(美国标准信息交换代码),另一种模式是RTU(远程终端设备)。这两种模式从实现通信的功能上看是完全一样的。ASCII模式主要优点是字符发送的时间间隔可达到1秒而不产生错误,较为适用于长距离、低速率的通信应用(如无线电台通信等)。RTU模式则较为适用于短距离、高速率的通信应用。在控制系统中应用较多。
由于本文主要是利用Modbus协议的ASCII模式来实现无线通信。因此着重介绍Modbus协议的ASCII模式。
2.2 ASCII模式格式
使用ASCII模式,消息以冒号(:)字符(ASCII码 3AH)开始,以回车换行符结束(ASCII码 0DH,0AH)。
其它域可以使用的传输字符是十六进制的0...9,A...F。网络上的设备不断侦测“:”字符,当有一个冒号接收到时,每个设备都解码下个域(地址域)来判断是否发给自己的。
一个典型消息帧如下所示:
图2 ASCII消息帧
起始位字段表示一帧报文的开始。
地址码字段表示接收主机报文的从机地址。用户必须设置每台从机的地址。
功能码字段通知从站应执行何种功能。
数据字段含有从机执行某项具体功能的信息,或含有从机应答询问的信息,这些信息可以是数值、地址参数或范围。
校验码字段是用来检查通讯报文有无错误。
2.3 LRC校验
ASCII模式采用LRC方法进行错误校验。具体为:
A、LRC域检测了消息域中除开始的冒号及结束的回车换行号外的内容。
B、LRC域是一个包含一个8位二进制值的字节。LRC值由传输设备来计算并放到消息帧中,接收设备在接收消息的过程中计算LRC,并将它和接收到消息中LRC域中的值比较,如果两值不等,说明有错误。
C、LRC方法是将消息中的8Bit的字节连续累加,丢弃了进位。
LRC简单函数如下:
static unsigned char LRC(auchMsg,usDataLen)
unsigned char *auchMsg ; /* 要进行计算的消息 */
unsigned short usDataLen ; /* LRC 要处理的字节的数量*/
{ unsigned char uchLRC = 0 ; /* LRC 字节初始化 */
while (usDataLen——) /* 传送消息 */
uchLRC += *auchMsg++ ; /* 累加*/
return ((unsigned char)(-((char_uchLRC))) ;
}
3 功能描述
3.1功能概述
Modbus协议总共有24种功能。其中主要的有8种,分别如图3所示:
图3 Modbus协议主要功能
Modbus协议原意是为了实现可编程控制器的高效联网通信。在此8种功能中其通信功能有所重复。有考虑到实现的简易性,在无线通信应用中,其实只需功能04及功能16即可。
3.2 读输入寄存器组(功能码04)
例如:读8号从机的寄存器组。起始地址是30123,寄存器个数是2个的报文格式如图4所示:
读输入寄存器组询问报文:
读输入寄存器组应答报文:
图4 读输入寄存器组报文格式
3.3 写多个寄存器(功能码16)
本功能可以修改控制器内多个寄存器的内容,不用的高位必须置0。本功能码支持广播模式(即从机地址为0)。例如:将08从机的40210、40211寄存器置成0835h和0312h的报文如图5所示。
写多个寄存器询问报文:
写多个寄存器应答报文:
图5写多个寄存器报文格式
4 Modbus协议在无线通信中的实现
4.1 Modbus口与无线数传modem口的连接
Modbus口及无线数传modem口均采用标准9芯串行口方式,使用其中部分引脚。如图6所示
图6 Modbus口与无线数传modem口的连接
4.2 通信方式的全双工转半双工
Modbus本身属于半双工的通信协议,而无线数传modem一般只能工作于半双工方式。无线数传modem工作时,当RTS控制线为低电平,modem处于发送状态,将TXD的信号以载波的方式发送出去;当RTS控制线为高电平时,则modem处于接收状态,将接到的载波信号经检波后送回Modbus口。
如果所有的主从设备均采用半双工方式通信时则用Modbus协议实现无线通信较为容易。然而如果在整个通信网络中有部分从机采用全双工方式工作时,则必须将此部分从机的通信机制改为半双工。
例如一个远程主机与一个以Modicon TSX SCP 111通信卡为从机的PLC进
行 Modbus无线通信时,就必须在Modicon TSX SCP 111侧增加一块全双工转半双工卡。原因,Modicon TSX 111无论RXD是否存在有用信号均在每个通信周期均使CTS出现一次低电平(使电台发射),扰乱了正常的通信。
5 结论
湛江市自来水公司寸金加压站无人值守控制系统就是利用上述方法成功地实现了远程无线遥控加压站的机泵操作。实践证明:运用Modbus协议来实现无线通信,使得通信可靠,系统结构简单,扩展性好,能满足多数工程的实际需要。