PC对PLC通过MODBUS协议通讯时
给出的映射表是这样的
H0000 P区域
H1000 M区域
H2000 L区域
H3000 K区域
现在我要对一个M1900(已经是16进制了)进行读写就遇到了麻烦 因为这样算下来的话 就到了2900了
请问如何对M1900访问 应该如何实现呢
H1000 M区域是说M从1000起,这有2个可能1.M1000=1000,2.M0=1000。如果是2那么你的PLC的M区太小,是1的话M1900就没有超出2000.你试试吧。
我试过 M2A=102A 所以不知道M1900该怎么办了
那就是说M2A=102A是对的?这样M1900就到L区了。
一般PLC的存储是分区的,如你所说:1900,其实他是:M区的第900个单元地址。
按照串口通信的一般规则:起始符+下位机地址+地址符+区域地址+命令+参数+校验码+结束符
这里应该有一个地址符的确定。
起始符+01+M+900+命令+参数+校验码+结束符
其中参数和校验码是可选的,参数一般用于写命令时。
是啊 这样的话M1900 就实际用MODBUS协议提交后 PLC就认到L区了
引用: 引用 4 楼 Veron_04 的回复:
一般PLC的存储是分区的,如你所说:1900,其实他是:M区的第900个单元地址。
按照串口通信的一般规则:起始符+下位机地址+地址符+区域地址+命令+参数+校验码+结束符
这里应该有一个地址符的确定。
起始符+01+M+900+命令+参数+校验码+结束符
其中参数和校验码是可选的,参数一般用于写命令时。
但是MODBUS协议中 只分了 高地址位和低地址位 并没有单独的把 区域符分出来的 它就认为H1000到H2000就表示M区 到了2000以上就表示另一个区
引用: 引用 7 楼 lujunql 的回复:
发一组报文,看返回数据,测试一下就知道了!
测试过了 如果发1900 过去那么PLC中M1900地址是没有改变的
一般MODBUS协议中,不要发高字节地址(实际现在的设备出也不支持),高字节为0。那如何区分你说的几个区域呢,这就是MODBUS协议中的功能码来区分了。
功能码+地址码可以区分读写哪个区:
02+01 这是状态区01寄存器
03+01 这是保存寄存器区01寄存器
注:这是举个例子,具体什么功能码对应什么区,看协议,忘了。。。我做过的一般只用到保持寄存器区(从40000开始编号)。