modbus协议中的寄存器理解

本文深入解析Modbus协议中各类寄存器的功能与用途,包括线圈寄存器、离散输入寄存器、保持寄存器及输入寄存器。阐述了每种寄存器的读写操作及对应的功能码,帮助读者理解Modbus协议在工业自动化中的应用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

modbus协议中的寄存器理解

对modbus中常用功能码寄存器的理解

在这里插入图片描述

最近有用到modbus协议,就把之前原来收集的资料全都拿出来又复习了一遍。发现以前了解的也忘了差不多了。所以这次理解了赶紧做个总结,省的下次再忘记了。
modbus完整支持很多功能码,但是实际在应用的时候常用的也就那么几个。具体如下:

0x01: 读线圈寄存器

0x02: 读离散输入寄存器

0x03: 读保持寄存器

0x04: 读输入寄存器

0x05: 写单个线圈寄存器

0x06: 写单个保持寄存器

0x0f: 写多个线圈寄存器

0x10: 写多个保持寄存器

如上所示一共8种功能码。这其中有涉及到线圈、离散输入、保持、输入四种寄存器。这名字也不知道谁起的,让人看了一点不通俗易懂,搞得晕晕乎乎。实际上你要是看清他的本质就很简单了。下面分别解释一下:
线圈寄存器,实际上就可以类比为开关量,没一个bit都对应一个信号的开关状态。所以一个byte就可以同时控制8路的信号。比如控制外部8路io的高低。 线圈寄存器支持读也支持写,写在功能码里面又分为写单个线圈寄存器和写多个线圈寄存器。对应上面的功能码也就是:0x01 0x05 0x0f

离散输入寄存器,如果线圈寄存器理解了这个自然也明白了。离散输入寄存器就相当于线圈寄存器的只读模式,他也是每个bit表示一个开关量,而他的开关量只能读取输入的开关信号,是不能够写的。比如我读取外部按键的按下还是松开。所以功能码也简单就一个读的 0x02

保持寄存器,这个寄存器的单位不再是bit而是两个byte,也就是可以存放具体的数据量的,并且是可读写的。比如我我设置时间年月日,不但可以写也可以读出来现在的时间。写也分为单个写和多个写,所以功能码有对应的三个:0x03 0x06 0x10

输入寄存器,只剩下这最后一个了,这个和保持寄存器类似,但是也是只支持读而不能写。一个寄存器也是占据两个byte的空间。类比我我通过读取输入寄存器获取现在的AD采集值。对应的功能码也就一个 0x04


版权所有“老伙计”, 谢绝转载
如确需转载,请注明版权人-老伙计
很久没有写日志了,理由是太忙,总没有时间,其实呢,是太懒惰了啊。

modbus的地址,其实modbus的规范里面写的很明确了,但是最近还有人问我,其实这个很简单的。
00001至09999是离散输出(线圈)-----Coil status
10001至19999是离散输入(触点)-----Input status
30001至39999是输入寄存器(通常是模拟量输入)------Input register
40001至49999是保持寄存器 -------Holding register

为了便于记忆, 我编了两句口诀,希望对朋友们有帮助:

1,2减一,3,4颠倒,

在这里插入图片描述
在这里插入图片描述
在Modbus 总线上,发送的数据为:

80 04 01 00 00 10 ee 2b

MODBUS 软件开发实战指南 pdf

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值