Modbus协议的入门简介 (2) - 从Modbus RTU说起



Modbus协议的入门简介 (1) - 历史-CSDN博客

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

你可能感兴趣的:(网络,单片机,嵌入式硬件)