Modbus协议的入门简介 (2) - 从Modbus RTU说起-CSDN博客
1. 主从通讯模式(Master/Slave)
Modbus RTU是运行在串口上的Modbus协议,它采用了主从通讯模式。简单来说,在一条总线上,只有一个主站,可以有很多个从站。
主站可以主动地发起通讯,向从站查询自己所需要的信息,它既可以向指定的从站发送信息(每个从站都有一个地址),或者使用地址0,向所有的从站发出广播。
而从站则只能被动的反应,只能在收到主站的查询后回复信息,它不可以主动发送信息的,无论是向主站,还是向其它从站。
另外,实际上Modbus Organization在2020年时,作为技术也要政治正确的一部分,已经不再使用Master/Slave的说法了,修改为了Client/Server,所以在一些地方看到的是Modbus RTU Client和Modbus RTU Server,但由于主/从的说法仍被广泛使用,这里就仍然沿用了。在2020年的声明:
https://modbus.org/docs/Client-ServerPR-07-2020-final.docx.pdf
2. 查询和响应(Query-Response)
主从通讯模式下,采用的是查询-响应(Query-Response)的方式传递信息。简单来说,主站发出的命令被称之为查询,而从站的回复被称之为响应。
举例来说:
像是在一个教室里,老师就是主站Master,学生们就是一个个的从站Slave,每个学生都有一个自己的编号,老师会依次地向学生发问,老师的发问里就包含了学生的编号,被问到的学生则开始回答,没有被问到的学生是不可以说话的,如果被问到的学生在设定时间里没有回答,这就是超时了,那么老师也会结束这次询问并开始下一个的询问。
如下图所示,横线的上部分为主站的查询,下半部分为从站的响应:主站开始查询,被问到的从站开始响应;主站开始广播,这时是不需要响应的,主站继续开始下一次的查询,依次进行一个又一个的循环。
这就是主从模式和查询-响应的数据交换方式,那么主站在查询,从站在响应时到底包括了哪些内容的,这就是数据帧和数据帧的解析了。以下会简单介绍Modbus RTU的数据帧的格式。
3. Modbus RTU的数据帧
Modbus RTU的数据帧格式也比较简单,无论是主站的查询,还是从站的应答都包括了一样的内容:
组成 | 定义 | 长度 | 解释 |
1 | 从站地址 | 1 字节 | 0: 广播(所有从站) 1–247: 从站地址 |
2 | 功能码 | 1 字节 | 功能码用于指示读或者写的操作 |
3 | 数据 | n 字节 | 对于读或者写的操作,给出其具体的命令的内容 |
4 | 校验 | 2 字节 | CRC16,用于校验数据帧是否正常 |
注意:主站是没有地址的,地址0是留给广播用的。
简单来说:
主站发出查询命令,会指定要查询的是哪个从站(从站地址),会告诉从站主站是要读数据还是要写数据(功能码),想要读写的数据的寄存器地址和数据(数据),最后给出校验,用于从站判断数据帧是否正常(校验)。
从站的返回,也会说明是哪个从站返回的数据(从站地址),会告诉主站当时收到的功能码是多少(功能码),写入和读取的数据(数据),最后同样给出校验,用于主站判断数据帧是否正常(校验)。
关于往返的数据帧的格式的定义,我在开发时经常参考下面网站,这里针对每一个功能码,给出了很详细的例子,解释了往返数据帧里每一个字节的含义:
Data Communication Solutions | Simply Modbus Software
比如功能码FC01:
Modbus Function Code 01 | Read Coil Status | Simply Modbus Software
标签:RTU,入门,主站,查询,Modbus,地址,数据 From: https://blog.csdn.net/DeviceTalk/article/details/141682498