3.Modbus介绍【工业控制系列】
一、Modbus协议介绍
Modbus
协议最初由Modicon
公司开发,此协议支持传统的RS-232
、 RS-422
、RS-485
和以太网
。许多工业设备,包括PLC
,DCS
,智能仪表
等都在使用Modbus
协议作为他们之间的通讯标准。
Modbus协议种类
Modbus
常见的类型包括:ASCII
、RTU
、TCP
。标准的Modicon
控制器使用RS232
实现串行的Modbus
。Modbus
的ASCII
、RTU
协议规定了消息与数据的结构、命令和就答的方式,数据通讯采用Master/Slave
方式。
如图所示就是RS232
的通讯线
Modbus协议校验
Modbus
协议需要对数据进行校验,串行协议中除有奇偶校验外;ASCII
模式采用LRC
校验,LRC
包含一个8位二进制
的字节;RTU
模式采用16
位CRC
校验,CRC
域是两个字节,,包含一个16
位的二进制值;TCP
模式没有额外规定校验,因为TCP
协议是一个面向连接的可靠协议。
二、Modbus功能码介绍
Modbus协议在设计之初中定义了三类功能码,分别是:公共功能码
、用户定义功能码
、保留功能码
。
- 公共功能码
由MODBUS
基金会进行设定,其中包含已被定义的功能码和未来使用的未指配保留供功能码;所有使用Modbus
协议设备需要遵守相关功能码设定。
- 用户定义功能码
因为Modbus
协议中设定的设定功能码主要针对的是对设备控制管理使用的是公共功能码。而对于设备使用内部上传下载程序使用多为用户自定义的功能码,为十进制的65至72和十进制100至110。用户没有MODBUS
组织的任何批准就可以选择和实现一个功能码,也无法保证被选功能码的使用是唯一的。
- 保留功能码
一些公司对传统产品通常使用的功能码,并且对公共使用是无效的功能码。例如施耐德PLC设备使用的90功能码;国内安控PLC使用的89功能码。
更多的Modbus功能码
三、Modbus通讯示例
在TCP
连接后,通过Modbus
功能码进行确定相关操作请求。03功能码
进行读内部输出量的寄存器,从0000
开始读取5个寄存器内部数据;在Modbus
设备响应Modbus
数据层首先是寄存器为03,数据长度为0a(也就是十进制的10),然后为每一个寄存器内的值。
如下是另一个例子,首先确定功能码为01为读内部比特量输出状态;从0000寄存器开始读取到0003寄存器
返回内容首先也为数据通讯的功能码01,长度01,因Wireshark
使用的为十六进制,使用2进制转换得到结果即为服务端返回101,为寄存器数据信息。
四、Modbus协议工作流程
刚才的是正常的Modbus
的响应流程对于异常通讯用Modbus
协议中规定响应功能码=请求功能码+0x80,用来为客户机提供处理过程中与被发现的差错相关的信息。
详细的处理错误过程为:输入有效的功能码然后进行判断是否为有效的数据地址,是否为有效的数据值,是否为有效的MB功能,如果说都正常的话会响应Modbus
结果,每一次异常都会在功能码加上_1,_2,_3,_4....
加上0x80
作为异常响应