modbus十六进制地址转换

时间:2016-07-02 07:20:08

标签: c modbus modbus-tcp

我正在尝试从GE-PQM II能量计读取数据。电能表通过2线RS-485 MODBUS连接支持实时监控。我在c中使用libmodbus库来读取modbus寄存器。

在GE通信指南(https://www.ccontrols.com/support/dp/GEK-113532.pdf)中,寄存器的地址以十六进制给出。我将十六进制转换为十进制。

我正在尝试从modbus寄存器(02F0,02F1)读取值 - 相应的十进制值为752,753

GE-PQM sample

我的代码:

rc = modbus_read_registers(ctx, 752, 753, clock);

输出:

ERROR Too many registers requested (753 > 125)
Too many data

十六进制转换有什么问题吗?或者其他什么地方?

1 个答案:

答案 0 :(得分:0)

如果你使用这个libmodbus,那么在函数调用中

int modbus_read_registers(modbus_t *ctx, int addr, int nb, uint16_t *dest);
参数nb是读取寄存器的数量,它必须等于2而不是753. - imbearr