一、什么是modbus协议
MODBUS 是一项应用层
报文传输协议,用于在通过不同类型的总线或网络连接的设备之间的客户机/服务器通信。
自从 1979 年出现工业串行链路的事实标准以来,MODBUS 使成千上万的自动化设备能够通信
。目前,继续增加对简单而雅观的 MODBUS 结构支持。互联网组织能够使 TCP/IP 栈上的保留系统端口502 访问 MODBUS。
MODBUS 是一个请求/应答协议,并且提供功能码规定的服务。MODBUS 功能码是 MODBUS 请求/应答 PDU 的元素。本文件的作用是描述 MODBUS 事务处理框架内使用的功能码。
目前,Modbus已经成为工业领域通信协议的业界标准,并且现在是工业电子设备之间常用的连接方式。Modbus作为目前工业领域应用最广泛的协议。
二、常用的MODBUS通讯方式
基于串口的Modbus-RTU: 数据按照标准串口协议进行编码,是使用最广泛的一种Modbus协议,采用CRC-16_Modbus校验算法。
基于串口的Modbus-ASCII :所有数据都是ASCII格式,一个字节的原始数据需要两个字符来表示,效率低,采用LRC校验算法。
基于网口的Modbus-TCP: Modbus-TCP基于TCP/IP协议,占用502端口,数据帧主要包括两部分:MBAP(报文头)+PDU(帧结构),数据块与串行链路是一致的。
每个设备必须都有相同的传输模式。所有设备都支持RTU模式,ASCII传输模式是选项。
三、协议介绍
当我们提及Modbus协议时,要确定是哪种模式:RTU、ASCII或TCP,3种模式区别还是很大的。
3.1 数据结构
MODBUS 协议定义了一个与基础通信层无关的简单协议数据单元(PDU)。特定总线或网络上的 MODBUS 协议映射能够在应用数据单元(ADU)上引入一些附加域。
在某种请求中,数据域可以是不存在的(0长度),在此情况下服务器不需要任何附加信息。功能码仅说明操作。
1.ModbusRTU的报文格式:
从站地址(1个字节)+功能码(1个字节)+数据部分(N个字节)+校验、CRC检验(2个字节)
- RTU 传输模式CRC校验,必须存在!!!!
- 数据按照标准串口协议进行编码,是使用
最广泛
的一种Modbus协议,采用CRC校验算法
。 - 优点:较高的数据密度,在相同的波特率下比ASCII模式有更高的传输效率。每个报文必须以连续的字符流传送。
- ModbusAscii的报文格式:
开始字符(:)+从站地址(2个字节)+功能码(2个字节)+数据部分(N个字节)校验、LRC检验(2个字节)+结束字符(CRLF)
- 在ASCII模式,报文用特殊的字符区分帧起始和帧结束。一个报文必须以一个‘冒号’(:)(ASCII十六进制3A)起始,以‘回车-换行’(CRLF)对(ASCII十六进制0D和0A)结束。设备连续的监视总线上的‘冒号’字符。当收到这个字符后,每个设备解码后续的字符一直到帧结束。报文中字符间的时间间隔可以达一