寻求了解如何更改地址DS1(400001(中的值的帮助。首先,点击显示使用6位Modbus,因此不确定如何处理2字节中的。我想我读40001是一样的,但不知道怎么读。当Click 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)
认识到Modbus中的应用层寻址不同于导线上的字节。应用层地址中的前导数字(例如4xxxx表示保持寄存器(隐含在功能代码(例如读取保持寄存器(中
因此,在导线上,删除前导4,然后向左偏移1-65536(是的,应用程序层偏移是基于1的(。但在WIRE上,它们是基于0的,因此您可以从偏移中减去1以获得值0-65535。
因此,有时您会看到应用程序Modbus HR,如4001、40001或400001,它们都引用了设备中的第一个HR。5位数是最常见的。我确实看到了旧RTU设备的4位数字。我确实每隔一段时间就会看到一个6位数的数字,其中远程设备有大量内存(或者没有,比如Click(。
要意识到,很多设备都是由只了解底层协议的人实现的,所以当他们说某个东西在地址40001时,它实际上可能在偏移量0x0001或0x0000(导线上的正确偏移量(。我甚至看到了一个实现,它将地址40001实现为线路上的0x9C41(可能是0x9C40(。是,6位应用层保持寄存器440001。