历史
ModBus官网是Modicon(Modicon早年已被施耐德收购)公司为其PLC通讯而开发的一种通讯协议。
概述
通过Modbus协议,控制器之间、或控制器经由网络(如以太网)可以和其它设备之间进行通信。
优点
免费、好用、成熟、网络上支持资料多,开发上手容易。
通讯技术
Modbus协议使用的是主从通讯技术,即由主设备主动查询和操作从设备。一般将主控设备方所使用的协议称为Modbus Master,从设备方使用的协议称为Modbus Slave。典型的主设备包括工控机和工业控制器等;典型的从设备如PLC可编程控制器等。
Modbus协议说明
Modbus协议的工作方式
响应方式:主站请求/从站应答的方式。
主站:每次通讯均由主站发送指令,发送方式可以是广播,也可以是向特定从站的单播(PearToPear);
从站:每次通讯主要是响应主站指令,并按要求应答,或报告异常。当主站不发送请求时,从站不会自己发出数据,并且从站之间不能直接通讯。
Modbus协议的数据传输模式
传输模式:使用串口传输,RTU、ASCII或TCP模式。
消息定义:主要确认消息、数据结构、命令与应答方式,且需要对数据进行校验。
校验方式:RTU模式采用16位CRC校验,ASCII模式采用LRC校验。
传输方式:通过以太网传输数据时,一般使用TCP协议,因为TCP协议是一个面向连接的可靠协议,所以在该模式下不校验。
三种通讯模式(依据传输介质分类)
Modbus可使用串口和网口(含光纤)方式进行传输。
串口通讯:RTU、ASCII。串口通讯(Serial Communication),是指外设和计算机间,通过数据信号线、地线等,按位进行传输数据的一种通讯方式。
网口(含光纤):TCP属于网口(以太网通讯),通常是RJ45接口,即日常的网线作为承载物。
串口的样子
使用Modbus通信的所有设备都必须选择相同的传输模式和串口参数,否则通信无法成功。
好比A说印度语,B说汉语,两人很难交流成功。
常用的参数如下:
- 波特率:通讯速率
- 数据位:衡量通信中实际数据位
- 停止位:用于表示单个包的最后一位
- 校验位:通信中的验错方式。奇校验(ODD)、偶校验(EVEN),1校验(MARK) 、 0校验(SPACE),无校验(NONE)。
ModbusRTU
数据包的开始与结束
完整报文的识别:在ModbusRTU协议中,通过每次通信的时间间隔来判断一帧报文的开始和结束,协议规定的时间为3.5个字符周期。在一帧报文开始前,必须有大于3.5个字符周期的空闲时间,一帧报文结束后,也必须要有3.5个字符周期的空闲时间,否则就会出现粘包的请况。3.5个字符周期是一个具体时间,与波特率有关,开发时需要注意。
异常报文的识别:整个报文帧必须以连续的字符流发送。如果两个字符之间的空闲间隔大于 1.5 个字符时间,则报文帧被认为不完整应该被接收节点丢弃。
报文分割情况:
CRC循环冗余校验
在 RTU 模式包含一个对全部报文内容执行的,基于循环冗余校验 (CRC - Cyclical Redundancy Checking) 算法的错误检验域。CRC域检验整个报文的内容。不管报文有无奇偶校验,均执行此检验。CRC的值具体情况如下:
1)16位,由两个8字节组成;
2)在报文包的最后部分,字节由低到高;
3)由发送设备计算。接收设备在接收报文时需重新计算CRC的值,并将计算结果与实际接报文中的CRC值进行对比,如果两值不等,则被视为错误。
在串行链路中的报文格式
从站地址(1 byte)+功能码(1 byte)+数据区(N bytes)+校验码(2 bytes)
- 从站地址(子节点地址):1byte,索引功能
- 功能代码:1byte,标识读写功能
- 具体数据:1byte/N bytes通信所传输的数据
- CRC校验:2bytes,判断接收的数据在传输过程中是否有损失
读取输出/保持寄存器
ModbusTCP
报文帧
MBAP+PDU
MBAP
MBAP为报文头,长度为7字节
PDU
ModbusASCII
报文帧
数据包的开始与结束
并非依靠时间间隔判定帧的起始,而是依靠特定字符做数据包的起始判定,结束也是通过特定字符判定。从图中可知起始的判断是’:’字符,结束的判断是字符是windows系统下的回车换行。数据的最大长度被扩容到2*252的长度,相比rtu模式能传输相同的数据量,但ascii传输的速度更慢一些。