【发布时间】:2016-11-04 14:02:48
【问题描述】:
我正在尝试从 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
我的代码:
rc = modbus_read_registers(ctx, 752, 753, clock);
输出:
ERROR Too many registers requested (753 > 125)
Too many data
十六进制转换有什么问题吗?还是其他地方?
【问题讨论】:
-
你真的读过documentation for modbus_read_registers吗?当出现错误时,首先要做的应该是查阅文档。检查第三个参数应该是什么。
-
如果你使用这个libmodbus,那么在函数调用中
int modbus_read_registers(modbus_t *ctx, int addr, **int nb**, uint16_t *dest);参数nb是读取的寄存器数,它必须等于2而不是753。 -
感谢您的回答!!
-
错过了是我的错。
-
十进制也不需要转,地址用0x2F0即可。
标签: c modbus modbus-tcp