关于MODBUS寄存器地址的怪异问题 点击:9153 | 回复:9



小女人在线

    
  • 精华:0帖
  • 求助:0帖
  • 帖子:1帖 | 4回
  • 年度积分:0
  • 历史总积分:9
  • 注册:2007年6月01日
发表于:2007-06-01 09:44:00
楼主
在MODBUS协议的串口通信过程中,规约上提供的寄存器起始地址为40001,结束地址为49999。
Tx: 01 03 9C 41 00 30 3B 9A(寄存器地址为40001)
Rx: 01 83 02 C0 F1

Tx: 01 03 9C 8D 00 02 7A 70(寄存器地址为40077)
Rx: 01 83 02 C0 F1
但是从上面的回复的功能码83可以看出,寄存地址是无效的,于是将地址40001换成0001,将40077换成0077,得如下报文:
Tx: 01 03 00 01 00 30 14 1E
Rx: 01 03 60 0D F8 0D 2C 08 30 08 2E 08 2D 00 25 00 29 00 27 13 88 00 DD 00
    0D 00 5A 00 44 00 5A 00 4C 00 5A 00 48 00 59 00 6E 00 21 00 26 00 25 00
    F4 00 4C 00 55 00 52 00 02 00 00 00 00 00 00 00 00 02 32 00 43 05 DF 01
    1A 01 1A 01 1A 01 1A 7F D6 7F D6 7F D6 7F D6 7F D6 7F D6 7F D6 7F D6 00
    01 7F D6 9E 1D

Tx: 01 03 00 4D 00 02 54 1C
Rx: 01 83 02 C0 F1

不难看出0001的寄存器地址是有效的,但是得到的数据不知是不是40001寄存器所对应的数据,另外0077寄存器的还是无效,不知哪位大师能解释这类怪异的问题。谢谢。



xiao a

  • 精华:1帖
  • 求助:0帖
  • 帖子:102帖 | 555回
  • 年度积分:0
  • 历史总积分:958
  • 注册:2005年12月10日
发表于:2007-06-01 09:49:00
1楼
关注!

通讯网

  • 精华:11帖
  • 求助:1帖
  • 帖子:431帖 | 10265回
  • 年度积分:0
  • 历史总积分:24711
  • 注册:2004年7月09日
发表于:2007-06-01 10:07:00
2楼
其实40001前面的4,相当于D0001,前面的D一样,不代表实际数字。

mr2020

  • 精华:0帖
  • 求助:0帖
  • 帖子:0帖 | 1回
  • 年度积分:0
  • 历史总积分:1
  • 注册:2011年3月15日
发表于:2011-03-15 13:55:22
3楼

不知道为什么不能输入。。

东方俗人

  • 精华:0帖
  • 求助:0帖
  • 帖子:3帖 | 17回
  • 年度积分:0
  • 历史总积分:39
  • 注册:2003年11月23日
发表于:2011-03-15 14:22:41
4楼

Modbus协议中的地址(规约中指的Starting Address)都是从0开始的。

40001指的是Hold寄存器第0个,有时候还会写成4001或400001,它在协议中表示为低位0,高位0,40002在协议中为低位1,高位0。依次类推。

这个在《Modicon Modbus Protocol Reference Guide》中有详细的说明。

 

 

yjig

  • 精华:2帖
  • 求助:5帖
  • 帖子:97帖 | 5237回
  • 年度积分:0
  • 历史总积分:12514
  • 注册:2004年6月04日
发表于:2011-04-03 12:15:14
5楼
引用东方俗人 的回复内容:

Modbus协议中的地址(规约中指的Starting Address)都是从0开始的。

40001指的是Hold寄存器第0个,有时候还会写成4001或400001,它在协议中表示为低位0,高位0,40002在协议中为低位1,高位0。依次类推。

这个在《Modicon Modbus Protocol Reference Guide》中有详细的说明。

 

 


 


 


楼上说的没错,Modicon的地址是从“1”开始的,而Modbus的地址是从“0”开始的,也就是说40001对应Modbus的地址是“0”(H0000)。同理,40077对应的Modbus的地址是“76”(H004C)。

补充一点:

4****中的的“4”表示保持寄存器/输出寄存器,3****中的“3”表示输入寄存器。

浅醉闲眠

  • [版主]
  • 精华:3帖
  • 求助:3帖
  • 帖子:219帖 | 13148回
  • 年度积分:152
  • 历史总积分:116149
  • 注册:2002年6月21日
发表于:2011-04-03 13:18:11
6楼
谢谢!没白来,又学了一招。

yjig

  • 精华:2帖
  • 求助:5帖
  • 帖子:97帖 | 5237回
  • 年度积分:0
  • 历史总积分:12514
  • 注册:2004年6月04日
发表于:2011-04-03 14:07:56
7楼

三菱FR-A700变频器的作用地址,采用的就是4****的形式,如果用PLC以RTU通讯控制变频器的话,因为PLC不能接受以4*****表示的地址,必须将其换算成PLC的地址,而在变频说明书中却没有直接明确的规定。

采用以上方式进行换算,就可以将4*****形式的地址输入到PLC了。

 

xiake720

  • 精华:0帖
  • 求助:0帖
  • 帖子:0帖 | 3回
  • 年度积分:0
  • 历史总积分:33
  • 注册:2011年7月11日
发表于:2011-10-09 11:07:49
8楼
我有个疑问,Hold寄存器的起始地址为40001H,结束地址应该是4FFFFH吧?

Maybe境界

  • 精华:0帖
  • 求助:5帖
  • 帖子:6帖 | 26回
  • 年度积分:0
  • 历史总积分:51
  • 注册:2013年6月14日
发表于:2013-06-19 08:57:56
9楼

=>为什么77寄存器无效呢,我现在遇到同样的问题。

=>另外,按照5楼的理论,只是让寄存器内容错位了,那也不应该是无效啊?



热门招聘
相关主题

官方公众号

智造工程师