Modbus通讯协议初学

Modbus通讯协议初学

什么是Modbus?

顾名思义,它是一个bus,即总线协议。比如串口协议、IIC协议、SPI都是通讯协议。你接触到这种协议,相信你所处的行业是工业方面或者你的产品用于工业。

Modbus用来做什么?

用两个来概括:通讯。

4个种类的寄存器

线圈状态(Coil Status) 可读可写

离 散 输入状 态(Discrete Input Status) 只读

保 持 寄 存 器(Holding Register) 可读可写

输 入 寄 存 器( Input Register)只读

在这里插入图片描述

协议速记

Modbus 是一主多从的协议

在这里插入图片描述

主控发出的数据里,必定含有如下信息:

① 设备地址:你要访问从设备 1,还是访问从设备 2

② 访问哪类寄存器,是读还是写,只访问 1 个寄存器,还是多个寄存器:这被称为功能码

③ 起始寄存器地址、寄存器数量:这在数据里定义

④ 为了保证数据传输的可靠,还附带有 CRC 检验码

以 Modbus RTU 协议为例,主控发出的数据包格式如下:

在这里插入图片描述

功能码

在这里插入图片描述

功能代码有哪些?常用的功能码如下:

① 读线圈状态(01)

② 读离散输入状态(02)

③ 写单个线圈(05)、写多个线圈(15)

④ 读保持寄存器(03)

⑤ 读输入寄存器(04)

⑥ 写单个保存寄存器(06)、写多个保存寄存器(16)

Modbus 报文帧

一个报文就是一帧数据,一个数据帧就一个报文: 指的是一串完整的指令数据,本质就是一串数据。

Modbus 报文是指主机发送给从机的一帧数据,其中包含着从机的地址,主机想执行的操作,校验码等内容。

Modbus 协议 RTU 报文格式如下所示:

帧结构 = 地址 + 功能吗 + 数据 + 校验

地址: 占用一个字节,范围0-255,其中有效范围是1-247,其他有特殊用途,比如255是广播地址(广播地址就是应答所有地址,正常的需要两个设备的地址一样才能进行查询和回复)。

功能码:占用一个字节,功能码的意义就是,知道这个指令是干啥的,比如你可以查询从机的数据,也可以修改数据,所以不同功能码对应不同功能。

数据:根据功能码不同,有不同结构,在后续的实例中有说明。

校验:为了保证数据不错误,增加这个,然后再把前面的数据进行计算看数据是否一致,如果一致,就说明这帧数据是正确的,我再回复;如果不一样,说明你这个数据在传输的时候出了问题,数据不对的,所以就抛弃了。

示例解读

以(0x01)读取线圈为例

在这里插入图片描述

从我上图的这个例子中,进行如下的解析

主机发送:07 01 00 00 00 08 3D AA
从机回复:07 01 01 20 50 D8

解析如下:
07(从设备地址) 01(功能码) 00 00(起始地址16bit,高位在前,低位在后) 00 08(寄存器数16bit 高位在前,低位在后) 3D AA (CRC校验) 

07(从设备地址) 01(功能码) 01(数据域字节数) 20(数据 1) 50 D8(校验) 

参考资料:

https://blog.csdn.net/qq_39400113/article/details/118369506

相关推荐

  1. Modbus-RTU通讯协议

    2024-05-12 21:52:04       41 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-05-12 21:52:04       94 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-05-12 21:52:04       100 阅读
  3. 在Django里面运行非项目文件

    2024-05-12 21:52:04       82 阅读
  4. Python语言-面向对象

    2024-05-12 21:52:04       91 阅读

热门阅读

  1. 给数据库贴标签

    2024-05-12 21:52:04       29 阅读
  2. docker————容器的管理

    2024-05-12 21:52:04       30 阅读
  3. Spring AOP和IOC

    2024-05-12 21:52:04       23 阅读
  4. 5月8日爬楼梯+使用最小花费爬楼梯

    2024-05-12 21:52:04       32 阅读
  5. 从零学算法6

    2024-05-12 21:52:04       32 阅读
  6. 去除夸克-百度云右键菜单上传

    2024-05-12 21:52:04       32 阅读
  7. 八股Day2 多线程

    2024-05-12 21:52:04       34 阅读
  8. python中多态的概念及简单样例

    2024-05-12 21:52:04       27 阅读
  9. sql中的exists和in的区别

    2024-05-12 21:52:04       31 阅读