我从 Arduino 代码中获得了两个代码片段。 在这两个片段中都定义了 modbus 保持和输入寄存器。 代码有什么不同或者两个代码应该具有相同的效果吗?
ModbusRTUServer.configureInputRegisters(0x7531, 12); // 12 Input-Register erstellen ab Adresse 0x7531 (dec: 30001)
ModbusRTUServer.configureHoldingRegisters(0x9C41, 4); // 3 Holding-Register erstellen ab Adresse 0x9C41 (dec: 40001)
ModbusRTUServer.holdingRegisterWrite(0x9C41, modbus_baudrate);
ModbusRTUServer.inputRegisterWrite(0x7531, Test);
和
ModbusRTUServer.configureInputRegisters(0x00, 12); // 12 Input-Register erstellen ab Adresse 0x01 (dec: 30001)
ModbusRTUServer.configureHoldingRegisters(0x00, 4); // 4 Holding-Register erstellen ab Adresse 0x01 (dec: 40001)
ModbusRTUServer.holdingRegisterWrite(0x00, modbus_baudrate);
ModbusRTUServer.inputRegisterWrite(0x00, Mb_H2EntGD); //
目标是使用同一段代码建立与两个片段的连接 感谢您的帮助。
在Modbus RTU中,寄存器地址通常以十六进制格式指定。 Modbus 功能代码指定寄存器是保持寄存器还是输入寄存器。
查看您提供的两个代码片段,似乎寄存器地址和要配置的寄存器数量存在一些差异。让我们来分解一下差异:
第一个代码片段:
ModbusRTUServer.configureInputRegisters(0x7531, 12); // 12 Input-Register erstellen ab Adresse 0x7531 (dec: 30001)
ModbusRTUServer.configureHoldingRegisters(0x9C41, 4); // 3 Holding-Register erstellen ab Adresse 0x9C41 (dec: 40001)
ModbusRTUServer.holdingRegisterWrite(0x9C41, modbus_baudrate);
ModbusRTUServer.inputRegisterWrite(0x7531, Test);
第二个代码片段:
ModbusRTUServer.configureInputRegisters(0x00, 12); // 12 Input-Register erstellen ab Adresse 0x01 (dec: 30001)
ModbusRTUServer.configureHoldingRegisters(0x00, 4); // 4 Holding-Register erstellen ab Adresse 0x01 (dec: 40001)
ModbusRTUServer.holdingRegisterWrite(0x00, modbus_baudrate);
ModbusRTUServer.inputRegisterWrite(0x00, Mb_H2EntGD); //
差异:
输入寄存器地址: 第一个片段:0x7531 第二个片段:0x00
保存寄存器地址: 第一个片段:0x9C41 第二个片段:0x00
要配置的保持寄存器数量: 第一个片段:4 第二个片段:4
要配置的输入寄存器数量: 第一个片段:12 第二个片段:12
如果您想使用同一段代码建立与两个片段的连接,则需要确保 Modbus 主设备与片段中指定的正确地址和寄存器计数进行通信。您可能需要调整寄存器地址和计数以匹配两个片段之间的匹配,具体取决于您的 Modbus 主设备的要求。