Modbus RTU 配置寄存器 Arduino C++

问题描述 投票:0回答:1

我从 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); //

目标是使用同一段代码建立与两个片段的连接 感谢您的帮助。

c++ arduino modbus
1个回答
0
投票

在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 主设备的要求。

© www.soinside.com 2019 - 2024. All rights reserved.