随笔 - 342  文章 - 0 评论 - 49 阅读 - 147万
< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5

 一、Modbus通信协议概述

      Modbus是一种串行通信协议,是Modicon公司(现在的施耐德电气 Schneider Electric)于1979年为使用可编程逻辑控制器(PLC)通信而发表。Modbus已经成为工业领域通信协议的标准,是工业电子设备之间非常常见的通信方式。

二、Modbus寄存器地址

1、Modbus寄存器类型

      Modbus中,寄存器可以分为两大类,分别为位变量(Coils)和整形变量(Registers)。每一种寄存器类型,根据读写方式的不同,又可分为两种只读(R)和读写(R/W)。

2、Modbus寄存器地址

三、Modbus功能码

四、Modbus协议详解

0x01(读线圈)

请求:从机地址      功能码      寄存器起始地址H       寄存器起始地址L      读取数量H      读取数量L      CRCH      CRCL
响应:从机地址      功能码      字节数量      读取数据      CRCH      CRCL  (一个地址的数据为1位,数据可能有多个字节)

eg1:从从机0x01中,读取线圈寄存器起始地址为0x0001的寄存器数据,读1位

请求:

        

应答:

        

eg2:从从机0x01中,读取线圈寄存器起始地址为0x0000的寄存器数据,读4位

请求:

        

应答:

        

0x02(读离散量输入)

请求:从机地址      功能码      寄存器起始地址H       寄存器起始地址L      读取数量H      读取数量L      CRCH      CRCL
响应:从机地址      功能码      字节数量      读取数据      CRCH      CRCL  (一个地址的数据为1位,数据可能有多个字节)

eg:从从机0x01中,读取离散量输入寄存器起始地址为0x0000的寄存器数据,读4位

请求:

        

应答:

        

0x03(读保持寄存器)

请求:从机地址      功能码      寄存器起始地址H       寄存器起始地址L      读取数量H      读取数量L      CRCH      CRCL
响应:从机地址      功能码      字节数量      读取数据      CRCH      CRCL  (一个地址的数据为2个字节,数据可能有多个字节)

eg1:从从机0x01中,读取保持寄存器起始地址为0x03E8的寄存器数据,读1个

请求:

        

应答:

        

eg2:从从机0x01中,读取保持寄存器起始地址为0x03E8的寄存器数据,读3个

请求:

        

应答:

        

0x04(读输入寄存器)

请求:从机地址      功能码      寄存器起始地址H       寄存器起始地址L      读取数量H      读取数量L      CRCH      CRCL
响应:从机地址      功能码      字节数量      读取数据      CRCH      CRCL  (一个地址的数据为2个字节,数据可能有多个字节)

eg:从从机0x01中,读取输入寄存器起始地址为0x03E8的寄存器数据,读1个

请求:

        

应答:

        

0x05(写单个线圈)

请求:从机地址      功能码      寄存器地址H       寄存器地址L      输出值H      输出值L      CRCH      CRCL
响应:从机地址      功能码      寄存器地址H       寄存器地址L      输出值H      输出值L      CRCH      CRCL

eg:向从机0x01里,写入线圈寄存器起始地址为0x0000的数据0xFF00(打开,另关闭是0x0000)

请求:

        

应答:

        

0x06(写单个保持寄存器)

请求:从机地址      功能码      寄存器地址H       寄存器地址L      输出值H      输出值L      CRCH      CRCL
响应:从机地址      功能码      寄存器地址H       寄存器地址L      输出值H      输出值L      CRCH      CRCL

eg:向从机0x01里,写入保持寄存器地址为0x03EA的数据0x0002

请求:

        

应答:

        

0x0F(写多个线圈)

请求:从机地址      功能码      寄存器起始地址H       寄存器起始地址L      写入寄存器数量H       写入寄存器数量L      字节数量       输出值      CRCH      CRCL
响应:从机地址      功能码      寄存器起始地址H       寄存器起始地址L      写入寄存器数量H       写入寄存器数量L      CRCH      CRCL

eg:向从机0x01里,写入线圈寄存器起始地址为0x0000的数据0xFF00(打开,另关闭是0x0000),写入4位

请求:

        

应答:

        

0x10(写多个保持寄存器)

请求:从机地址      功能码      寄存器起始地址H       寄存器起始地址L      写入寄存器数量H       写入寄存器数量L      字节数量       输出值      CRCH      CRCL
响应:从机地址      功能码      寄存器起始地址H       寄存器起始地址L      写入寄存器数量H       写入寄存器数量L      CRCH      CRCL

eg:向从机0x01里,写入保持寄存器起始地址为0x03EA的数据0x00030000,写入了2个寄存器数据

请求:

        

应答:

        

参考资料:modbus通讯协议详解

posted on   amanlikethis  阅读(2744)  评论(0编辑  收藏  举报
编辑推荐:
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
阅读排行:
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通
历史上的今天:
2013-11-14 gcc -D选项
2013-11-14 一个matlab数字图像处理程序的解释
点击右上角即可分享
微信分享提示