请教:什么是输入寄存器、什么是保持寄存器 点击:32679 | 回复:19



hnck

    
  • 精华:0帖
  • 求助:0帖
  • 帖子:2帖 | 1回
  • 年度积分:0
  • 历史总积分:20
  • 注册:2002年6月01日
发表于:2007-11-21 12:12:00
楼主
1、对modbus 协议中的寄存器类型有些疑惑:03功能码用于读保持寄存器,04功能码用于读输入寄存器,那么什么寄存器定义为保持寄存器,什么的寄存器定义为输入寄存器。(保持寄存器就是那些可作为参数存储,掉电不丢失的,输入寄存器就是那些保存A/D转换结果,或其它过程数据的寄存器,是这样吗?)
2、modbus协议中,寄存器编号规则,资料中常常这样写"4XXXX"或“3XXXX”,个人理解:首数字表示寄存器类型,其它数字是序号,对吗?



excellence

  • 精华:0帖
  • 求助:0帖
  • 帖子:1帖 | 27回
  • 年度积分:0
  • 历史总积分:0
  • 注册:1900年1月01日
发表于:2007-11-21 16:47:00
1楼
真对

  • 精华:0帖
  • 求助:0帖
  • 帖子:104帖 | 641回
  • 年度积分:0
  • 历史总积分:1360
  • 注册:2005年7月21日
发表于:2007-12-19 12:01:00
2楼
输入寄存器主要是指模拟量的输入,保持寄存器就是设备内部的寄存器了,4XXXX表示保持寄存器,后面的数字是从1开始的

分阶

  • 精华:0帖
  • 求助:0帖
  • 帖子:70帖 | 501回
  • 年度积分:0
  • 历史总积分:1721
  • 注册:2004年9月29日
发表于:2008-01-04 08:34:00
3楼
 我觉得孜说得对,我没有碰到过.

胖丫

  • 精华:1帖
  • 求助:0帖
  • 帖子:126帖 | 971回
  • 年度积分:0
  • 历史总积分:1644
  • 注册:2007年7月23日
发表于:2008-02-25 09:23:00
4楼
可以这么理解。

章征兵

  • 精华:0帖
  • 求助:0帖
  • 帖子:0帖 | 2回
  • 年度积分:0
  • 历史总积分:2
  • 注册:2008年3月07日
发表于:2008-07-20 14:24:33
5楼

应该是这个道理

 

zs331871441

  • 精华:0帖
  • 求助:0帖
  • 帖子:0帖 | 2回
  • 年度积分:0
  • 历史总积分:2
  • 注册:2008年7月24日
发表于:2009-03-20 09:26:40
6楼
"地址"参数是起始的Modbus地址。允许使用下列取值范围:
00001至09999是离散输出(线圈)

10001至19999是离散输入(触点)
30001至39999是输入寄存器
40001至49999是保持寄存器

zs331871441

  • 精华:0帖
  • 求助:0帖
  • 帖子:0帖 | 2回
  • 年度积分:0
  • 历史总积分:2
  • 注册:2008年7月24日
发表于:2009-03-20 09:29:03
7楼
4开头可以写入  浮点等类型的

bt001

  • 精华:0帖
  • 求助:0帖
  • 帖子:3帖 | 167回
  • 年度积分:0
  • 历史总积分:540
  • 注册:2009年5月21日
发表于:2009-08-30 21:35:01
8楼

所谓保持寄存器,指的是可以通过通信命令读或者写的寄存器;通常是一些功能控制寄存器或者输出寄存器等。

不同的设计中,有些保持寄存器是掉电保持;有些则不。这个看需要,不一定的。

所谓输入寄存器,指的是只能读不能写的寄存器,通常是状态寄存器或者是输入结果寄存器等。

ltflying

  • 精华:0帖
  • 求助:0帖
  • 帖子:2帖 | 5回
  • 年度积分:0
  • 历史总积分:65
  • 注册:2011年3月18日
发表于:2012-07-10 10:14:14
9楼
回复内容:
对:孜关于 输入寄存器主要是指模拟量的输入,保持寄存器就是设备内部的寄存器了,4XXXX表示保持寄存器,后面的数字是从1开始的 内容的回复:

孜,你好,是不是存在一些例外,比如modbus地址是3xxxx,而功能吗是04呢。我现在遇到这种情况了

ltflying

  • 精华:0帖
  • 求助:0帖
  • 帖子:2帖 | 5回
  • 年度积分:0
  • 历史总积分:65
  • 注册:2011年3月18日
发表于:2012-07-10 10:17:40
10楼
回复内容:
对:孜关于 输入寄存器主要是指模拟量的输入,保持寄存器就是设备内部的寄存器了,4XXXX表示保持寄存器,后面的数字是从1开始的 内容的回复:

孜,你好,是否存在一些例外,比如modbus地址是3xxxx,而功能码却用的04.这在定义上是可行的吗

ffppcc

  • 精华:0帖
  • 求助:0帖
  • 帖子:0帖 | 8回
  • 年度积分:0
  • 历史总积分:111
  • 注册:2012年9月23日
发表于:2012-10-03 11:06:45
11楼

我也想弄明白受教了。

cuojiucuole

  • 精华:0帖
  • 求助:2帖
  • 帖子:2帖 | 4回
  • 年度积分:0
  • 历史总积分:71
  • 注册:2011年5月02日
发表于:2012-12-07 19:25:35
12楼
受教了。之前一直没弄懂modscan软件的寄存器选择03还是04

gongkonglxxx

  • 精华:0帖
  • 求助:0帖
  • 帖子:0帖 | 1回
  • 年度积分:0
  • 历史总积分:1
  • 注册:2014年8月25日
发表于:2014-08-25 08:42:38
13楼

回复内容:

对: ltflying 回复内容:对:孜关于                 ... 内容的回复!


1xxxx 2xxx 3xxxx  4xxxx是modbus地址功能码的,但是有联系,比如3xxx对应功能吗04,4xxx对应r:03,w:6,16

azhaobos

  • 精华:0帖
  • 求助:0帖
  • 帖子:0帖 | 2回
  • 年度积分:0
  • 历史总积分:0
  • 注册:2012年12月17日
发表于:2014-11-17 12:03:21
14楼

学习   了      

cjj_f22

  • 精华:0帖
  • 求助:1帖
  • 帖子:3帖 | 24回
  • 年度积分:0
  • 历史总积分:25
  • 注册:2008年6月06日
发表于:2014-12-30 10:29:04
15楼

30001至39999是输入寄存器  当然用04功能码(读取输入寄存器)参考MODBUS协议文本

40001至49999是保持寄存器  用03/06/16功能码(读N个/预置1个/预置N个 保持寄存器)

00001至09999是对应PLC-Y/Q  用01/05/15功能码(读N个/预置1个/预置N个线圈状态)

10001至19999是对应PLC-X/I   用02功能码(读取输入状态)

另外注意各个元件地址对应从0x/1x/3x/4x0001开始,不是0x/1x/3x/4x0000开始

假设D0对应40001不是40000
具体看每个厂家给出的元件地址对应MODBUS通讯协议表格即可

 

另外要注意各个功能码对应的数据类型:

01/02/05/15功能码(即0x....和1x....)对应的是操作

03/04/06/16功能码(即3x....和4x....)对应的是8位字符型1字节  16位整型1字 32位浮点双字

比如:D0作为保持寄存器,其数据类型一般是16位整型

    如果使用03或者06功能码操作D0,根据MODBUS的协议规则,必须分成高8bit和低8bit

最终凑成一个18bit整型代表D0寄存器

    如果操作输入寄存器,比如04功能码进行模拟量的采集,根据精度要求可以选16bit整型或者32bit浮点,这样就要分成2个8bit或者4个8bit进行处理。

    记住,MODBUS的数据处理是按一个字节8bit处理,关心你要操作的数据类型就OK

<此处内容被屏蔽>MODBUS功能码从01-255<此处内容被屏蔽>

cjj_f22

  • 精华:0帖
  • 求助:1帖
  • 帖子:3帖 | 24回
  • 年度积分:0
  • 历史总积分:25
  • 注册:2008年6月06日
发表于:2014-12-30 11:22:34
16楼

 

回复内容:

对: cjj_f22 30001至39999是输入寄存器  当然用04功能码... 内容的回复!

 由于PLC内部元件存在着置位复位、还有的既可以当做位元件,也存在着数据寄存的问题,

比如T既可以采集它的位状态,也可以设置T的具体K值,所以针对T元件可以使用01/02/03/05/06/15/16等功能码。

比如PLC的X/I,Y/Q虽然字面上理解可以分成输入元件和输出线圈,因为PLC元件存在着功能多元化,那么Y/Q同样可以由02功能码采集,而X/I同样可以由01/05/15功能码采集处理。

具体其他电器比如传感仪表、单片机等等具体元件怎么处理,都应当参考厂家提供的说明书因地制宜具体对待。

小小的苗

  • 精华:0帖
  • 求助:0帖
  • 帖子:0帖 | 2回
  • 年度积分:0
  • 历史总积分:2
  • 注册:2016年3月10日
发表于:2016-03-14 09:14:32
17楼

大家说的都行,这个可以看一下modbus协议说明

zzlj0106

  • 精华:0帖
  • 求助:0帖
  • 帖子:0帖 | 6回
  • 年度积分:0
  • 历史总积分:129
  • 注册:2009年7月15日
发表于:2016-05-26 11:29:15
18楼

输入寄存器和保持寄存器的数据类型都是16比特位的字,输入寄存器只能读,由I/0系统提供数据;保持寄存器可读可写,通过应用程序实现数据读写。

wuqingzhi

  • 精华:0帖
  • 求助:0帖
  • 帖子:5帖 | 15回
  • 年度积分:8
  • 历史总积分:447
  • 注册:2010年11月15日
发表于:2016-11-13 22:31:53
19楼

回复内容:

对:zs331871441 "地址"参数是起始的Modbus地址。允许使用下列取值范围: 00001至09999是离散输出(线圈) 10001至19999是离散输入(触点) 30001至39999是输入寄存器 40001至49999是保持寄存器     内容的回复:

这位大哥说的是对的,建议看看李志斌的200的讲解,不一定要自己记住,用时找出来看看就可以了


热门招聘
相关主题

官方公众号

智造工程师