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

主从通讯模式:

Modbus RTU是运行在串口上的Modbus协议,它采用了主从通讯模式。简单来说,在一条总线上,只有一个主站,可以有很多个从站。

主站可以主动地发起通讯,向从站查询自己所需要的信息,它既可以向指定的从站发送信息(每个从站都有一个地址),或者使用地址0,向所有的从站发出广播。

而从站则只能被动的反应,只能在收到主站的查询后回复信息,它不可以主动发送信息的,无论是向主站,还是向其它从站。

另外:

实际上Modbus Organization在2020年时,作为技术也要政治正确的一部分,已经不再使用Master/Slave的说法了,他们在2020年的声明:

https://modbus.org/docs/Client-ServerPR-07-2020-final.docx.pdf

简单来说,Master/Slave这种说法已经被废止了,修改为了Client/Server,所以在一些地方看到的是Modbus RTU Client和Modbus RTU Server,但由于主/从的说法仍被广泛使用,这里就仍然沿用了。

查询和响应:

主从通讯模式下,采用的是查询-响应(Query-Response)的方式传递信息。简单来说,主站发出的命令被称之为查询,而从站的回复被称之为响应。

举例来说:

像是在一个教室里,老师就是主站Master,学生们就是一个个的从站Slave,每个学生都有一个自己的编号,老师会依次地向学生发问,老师的发问里就包含了学生的编号,被问到的学生则开始回答,没有被问到的学生是不可以说话的,如果被问到的学生在设定时间里没有回答,这就是超时了,那么老师也会结束这次询问并开始下一个的询问。

如下图所示,横线的上部分为主站的查询,下半部分为从站的响应:主站开始查询,被问到的从站开始响应;主站开始广播,这时是不需要响应的,主站继续开始下一次的查询,依次进行一个又一个的循环。

这就是主从模式和查询-响应的数据交换方式,那么主站在查询,从站在响应时到底包括了哪些内容的,以下会简单介绍数据帧的格式。

数据帧格式:

Modbus RTU的数据帧格式也比较简单,无论是主站的查询,还是从站的应答都包括了一样的内容:

组成

定义

长度

解释

1

从站地址

1 字节

0: 广播(所有从站)

1–247: 从站地址

2

功能码

1 字节

功能码用于指示读或者写的操作

3

数据

n 字节

对于读或者写的操作,给出其具体的命令的内容

4

校验

2 字节

CRC16,用于校验数据帧是否正常

注意:主站是没有地址的,地址0是留给广播用的。

简单来说:

主站发出查询命令,会指定要查询的是哪个从站(从站地址),会告诉从站主站是要读数据还是要写数据(功能码),想要读写的数据的寄存器地址和数据(数据),最后给出校验,用于从站判断数据帧是否正常(校验)。

从站的返回,也会说明是哪个从站返回的数据(从站地址),会告诉主站当时收到的功能码是多少(功能码),写入和读取的数据(数据),最后同样给出校验,用于主站判断数据帧是否正常(校验)。

我经常参考的网站:Data Communication Solutions | Simply Modbus Software

比如FC01,这里清楚地给出了一个例子,包含了Request和Response的数据帧,并对每个字节都给出了注释:

Modbus Function Code 01 | Read Coil Status | Simply Modbus Software

  • 18
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值