modbus协议地址问题

conniezhou   2009-6-16 20:41 楼主
PC对PLC通过MODBUS协议通讯时
给出的映射表是这样的
H0000      P区域
H1000      M区域
H2000      L区域
H3000      K区域

现在我要对一个M1900(已经是16进制了)进行读写就遇到了麻烦   因为这样算下来的话  就到了2900了

请问如何对M1900访问 应该如何实现呢

回复评论 (10)

H1000  M区域是说M从1000起,这有2个可能1.M1000=1000,2.M0=1000。如果是2那么你的PLC的M区太小,是1的话M1900就没有超出2000.你试试吧。
点赞  2009-6-17 07:17
我试过 M2A=102A   所以不知道M1900该怎么办了
点赞  2009-6-17 08:03
那就是说M2A=102A是对的?这样M1900就到L区了。  
点赞  2009-6-17 13:21
一般PLC的存储是分区的,如你所说:1900,其实他是:M区的第900个单元地址。
按照串口通信的一般规则:起始符+下位机地址+地址符+区域地址+命令+参数+校验码+结束符
这里应该有一个地址符的确定。
起始符+01+M+900+命令+参数+校验码+结束符

其中参数和校验码是可选的,参数一般用于写命令时。
点赞  2009-6-17 22:04
是啊 这样的话M1900 就实际用MODBUS协议提交后 PLC就认到L区了  
点赞  2009-6-18 09:13
引用: 引用 4 楼 Veron_04 的回复:
一般PLC的存储是分区的,如你所说:1900,其实他是:M区的第900个单元地址。
按照串口通信的一般规则:起始符+下位机地址+地址符+区域地址+命令+参数+校验码+结束符
这里应该有一个地址符的确定。
起始符+01+M+900+命令+参数+校验码+结束符

其中参数和校验码是可选的,参数一般用于写命令时。


但是MODBUS协议中   只分了 高地址位和低地址位  并没有单独的把 区域符分出来的   它就认为H1000到H2000就表示M区  到了2000以上就表示另一个区  
点赞  2009-6-18 09:15
发一组报文,看返回数据,测试一下就知道了!
点赞  2009-6-18 09:50
引用: 引用 7 楼 lujunql 的回复:
发一组报文,看返回数据,测试一下就知道了!



测试过了   如果发1900  过去那么PLC中M1900地址是没有改变的
点赞  2009-6-18 11:29
一般MODBUS协议中,不要发高字节地址(实际现在的设备出也不支持),高字节为0。那如何区分你说的几个区域呢,这就是MODBUS协议中的功能码来区分了。
功能码+地址码可以区分读写哪个区:
02+01 这是状态区01寄存器
03+01 这是保存寄存器区01寄存器
注:这是举个例子,具体什么功能码对应什么区,看协议,忘了。。。我做过的一般只用到保持寄存器区(从40000开始编号)。
点赞  2009-6-18 16:42
你理解错了  我说的M1900  是M区的  1900
点赞  2009-6-25 11:43
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 京公网安备 11010802033920号
    写回复