登录
首页 串口通信 串口通信
回帖 发帖
正文

主题:plc与感应加热电源modbus通讯寻址

点击:980 回复:7

plc与感应加热电源modbus通讯寻址:协议里提到“MODBUS 协议的寄存器编号为从1 开始,在MODBUS 的PDU 中的,从0 开始寻址寄存器,因此编号1~16 的寄存器被寻址为0~15。在具有集成MODUBUS 功能的PLC如西门子、莫迪康等(或者具有集成MODBUS 通讯模块的PC机组态软件如“组态王”)中,工程师只需按照寄存器编号做相应的数据对应即可,由“编号”到PDU 中“地址”的转换操作已由集成的软件模块自动完成”
其中针对“寄存器编号做相应的数据对应”这一句
请问:比如读编号为17的寄存器,在modbus程序里的addr是直接写“17”的意思吗?是否还需要转换为“40017”或者别的什么?虚心求教!
16-01-19 17:35
是的。。。请参考MODBU的映射寄存器地址
16-01-19 18:20
你是指直接写“17”?
16-01-20 21:57
不是。。40017
16-01-21 18:13

引用 845090586 在 2016/1/19 17:35:05 发言【内容省略】

什么1,什么0
这么理解最好:
应该说MODBUS的地址是从16进制的0开始的,到16进制的FFFF结束;
然后MODBUS的地址的编号是从1开始的,比如离散输入寄存器就是从100001开始,到165536结束,而对应的实际地址则就是16#0000~16#FFFF;
再比如线圈就是从000001开始,到065536结束的,,而对应的实际地址则就是16#0000~16#FFFF;
其他模拟量输入、模拟量输出类似,
有人会问,那这几种寄存器的实际地址不就重复了么,别担心,它们还需要用功能码来区分的!
西门子200中填写的所谓寄存器地址,其实不是地址而是编号!
比如读编号为17的寄存器,在modbus程序里的addr是直接写“17”的意思吗?是否还需要转换为“40017”或者别的什么?虚心求教!
这个还要看是哪一类的寄存器呢,如果是具体的数字量输出,那么寄存器编号就是00017;如果是实际的数字量输入,那么编号就是10017,如果是实际的模拟量输入,那么编号就是300017,如果是实际的模拟量输出或者是内部可读写的寄存器,那么编号就是400017。
最后修改:2016/1/24 17:32:43
16-01-24 17:26

引用 845090586 在 2016/1/19 17:35:05 发言【内容省略】

重要的事再说一遍:
100001~165536:离散输入寄存器的编号,对应读的功能码为2,其实际地址范围为16#0000~16#FFFF
000001~065536:数字量输出寄存器的编号,对应读的功能码为1,对应的写单路功能码为5,写多路功能码为15,其实际地址范围为16#0000~16#FFFF
300001~365536:只读寄存器(16位),对应读的功能码为4,其实际地址范围为16#0000~16#FFFF
400001~465536:读写寄存器(16位),对应读的功能码为3,对应的写单路功能码为6,写多路功能码为16,其实际地址范围为16#0000~16#FFFF
16-01-24 17:31
受益匪浅!最近被这个问题困惑了很久很久了,感觉刚接触到modbus通讯的小白基本上都会搞不清楚地址怎么对应的,特别是要转换成16进制的情况到底转什么,和选用哪条指令也是很大的困惑
17-05-19 13:31

引用 丶轻寒丿 在 2017/5/19 13:31:23 发言【内容省略】

表情
17-05-20 00:59

工控新闻

更多新闻资讯