了解如何在address DS1 (400001)中更改值,以寻求帮助。首先,单击显示使用6位Modbus,因此不确定如何处理2字节。我想我读的40001是一样的,但不知道怎么读的。我能够接收数据和理解数据时,单击PLC是主人。我希望我的电脑成为主人,并改变地址。
这是我发送给PLC的数据。我期望将这些数据发送到PLC从02,并将DS1 (400001)中的数据更改为零。
frame(0) = 2 'Slave Address =2
frame(1) = 6 'Mode =6
frame(2) = CByte(40001 / 256) '
frame(3) = CByte(40001 Mod 256) '
frame(4) = 0 '
frame(5) = 0 '
Dim crc As Byte() = CRC(frame) ' Call CRC Calculate.
frame(6) = crc(0) '=59 Error Check Lo
frame(7) = crc(1) '=189 Error Check Hi
SerialPort1.Write(frame, 0, frame.Length)发布于 2022-03-18 20:34:57
实现Modbus中的应用层寻址与线路上的字节不同。应用层地址(例如,用于持有寄存器的4 4xxxx )中的前导数字隐含在功能代码中(例如,读取保持寄存器)。
因此,在连线上,您放下前导4,并留下1-65536的偏移量(是的,应用层偏移量是基于1的)。但是在连线上,它们是基于0的,所以你从偏移量中减去1,得到0-65535的值。
因此,有时您会看到应用程序Modbus HR,比如4001、40001或400001,它们都引用了设备中的第一个HR。5位是最常见的。我确实看到4位数的旧RTU设备。每隔一段时间,我都会看到一个6位数的数字,其中远程设备有大量的内存(或者没有,比如Click)。
意识到很多设备都是由那些只懂低级协议的人实现的,所以当他们说某件东西位于地址40001时,它可能实际上是在偏移量0x0001,或者0x0000 (线路上正确的偏移量)。我甚至在连线上看到一个将地址40001实现为0x9C41的实现(可能是0x9C40)。是的,6位数字应用层持有寄存器440001。
https://stackoverflow.com/questions/71531049
复制相似问题