【问题标题】:modbus Hex address Conversionmodbus 十六进制地址转换
【发布时间】: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

GE-PQM sample

我的代码:

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


【解决方案1】:

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-08-08
    • 1970-01-01
    • 2013-01-11
    • 2018-05-29
    • 1970-01-01
    • 2021-01-04
    • 2013-11-14
    • 2013-11-16
    相关资源
    最近更新 更多