Modbus由Modicon公司于1979年开发,是一种工业现场总线协议标准。Modbus通信协议具有多个变种,其中有支持串口,以太网多个版本,其中最著名的是Modbus RTU
、Modbus ASCII
和Modbus TCP
三种。其中Modbus TCP是在施耐德收购Modicon后1997年发布的。
Modbus RTU:运行在串口
上的协议,采用二进制表现形式以及紧凑的数据结构,通信效率较高
,应用比较广泛
Modbus ASCII:运行在串口
上的协议,采用ASCII码进行传输,并且每个字节的开始和结束都有特殊字符作为标志,传输效率远远低于Modbus RTU
,一般只有通讯量比较少时才会考虑
Modbus TCP:Modbus TCP是基于以太网的变体,使用TCP/IP协议栈进行数据传输。它使用标准的以太网物理层和IP网络连接,可以通过以太网
进行设备间的通信。
Modbus协议是现在国内工业领域应用最多的协议,不只PLC设备,各种终端设备,比如水控机、水表、电表、工业秤、各种采集设备。
采用主从问答的通信,主机可以对应多个从机,可以特意问某个从机。不仅采集还要控制,有问必有答。
使用TCP/IP协议栈,能够实现可靠的数据传输,并支持通过路由器或者互联网对设备进行远程访问和控制。
支持高速通信,与Modbus RTU或Modbus ASCII等串行通信相比较,它的通信速度更快,可以实现更高的数据传输效率。
4.Modbus TCP端口号默认502
总之,Modbus TCP是一种基于以太网的工业自动化控制系统通信协议,它具有高速通信、报文完整性和可靠性等特点。如果您还有其他问题,可以继续向我提问。
Modbus TCP协议包含三部分:报文头、功能码、数据
报文头:7个字节 (byte)功能码:1个字节
Modbus TCP/IP协议最大数据帧长度为260字节
(1)MBAP报文头
事务处理标识符:区分消息 ,一般主机怎么发,从机怎么回复。
协议标识符: 固定 00 00
长度:接下来的字节长度。
单元标识符:从机id
总结:报文头包含的内容个数、顺序都不可以调换
(2)寄存器(存储数据)
Modbus TCP使用不同类型的寄存器来存储和读取数据,包括离散量输入
、线圈
、输入寄存器
和保持寄存器
。
线圈寄存器
(Coil Register)和离散量输入寄存器
(Discrete Input Register)都属于位寄存器
。每个寄存器占用1字节,用于存储开关状态
(0或1)。线圈寄存器用于控制IO设备的输出状态,而离散量输入寄存器则用于读取输入信号。
输入寄存器
(Input Register)和保持寄存器
(Holding Register)属于字寄存器
。每个寄存器占用2个字节
,用于存储工业设备的值
。保持寄存器可以读写,用于存储配置参数、控制命令或状态信息。而输入寄存器只支持读取,用于获取工业设备的输入数据,例如AD采集值或传感器读数。
总结而言,通过Modbus TCP协议可以通过不同类型的寄存器来读取和写入数据。线圈寄存器和离散量输入寄存器用于控制和读取开关量状态,而输入寄存器和保持寄存器用于读取和存储字节或字数据。对于每种寄存器类型,客户端可以使用相应的功能码进行读写操作。
(3)功能码
寄存器PLC地址和寄存器的对应关系:
00001-09999 :线圈
10001-19999:离散量输入
30001-39999:输入寄存器
40001-49999:保持寄存器
在一般工业场景中,使用Modbus RTU的情况更常见一些。Modbus RTU是基于串行通信协议的一种形式,通常使用RS-232或RS-485等工业总线协议进行数据的收发。
与Modbus TCP不同,Modbus RTU没有报文头中的MBAP字段。而在尾部,Modbus RTU增加了两个CRC检验字节(CRC16),用于数据完整性的校验。这是因为在网络协议中,如TCP协议,已经包含了自带的校验机制,所以在Modbus TCP中不需要使用CRC校验码。
总体而言,Modbus RTU和Modbus TCP在使用方法上基本一致,只是在创建Modbus对象时有所不同。对于Modbus TCP,需要传入网络Socket信息;而对于Modbus RTU,则需要传入串口相关信息。
Modbus RTU也是主从问答协议,由主机发起,一问一答
Modbus RTU通过串口进行通信
设置串口参数:
设置串口参数时要求:
波特率为9600
8位数据位
1位停止位
无流控
Modbus RTU数据帧组成:地址码 功能码 数据 校验码
地址码:从机id
功能码:(同Modbus TCP)读:01 02 03 04 写单个:05 06 写多个:0f 10
数据:起始地址 数量 数据
校验码:2个字节,对地址码、功能码和数据进行校验,通过函数自动生成