gpt4 book ai didi

java - 使用 Java 实现 TCP 上的 ModBus

转载 作者:太空宇宙 更新时间:2023-11-04 09:31:01 24 4
gpt4 key购买 nike

enter image description here我有一个 HLK-DIO16 设备,支持 TCP 上的 modbus。

在用户手册中我看到了一个同时读取 16 个数字输入的示例

字符串是:

0x01030026000165c1

01设备地址 03 功能码 0026 寄存器起始地址 0001 寄存器编号 65c1 CRC 校验码

将 java 代码与 jlibmodus 库一起使用方法是

int[] registerValues = m.readHoldingRegisters(slaveId, offset, quantity);

3个变量的参数值用于重现字符串 0x01030026000165c1

最佳答案

编辑:下面的答案仅适用于问题特定设备的串行 Modbus RTU,该设备似乎不支持 Modbus TCP(但它确实支持 TCP 端口 8080 上的不同 HEX 协议(protocol))。

以下是如何翻译这些不同的命名约定:

slaveId = 设备地址(在您的情况下为01)

offset = 初始寄存器(从您开始读取的位置),在上面的示例中为 0x0026,即十进制 38。

quantity= 要读取的寄存器数量(如果要读取 1 个寄存器,则应为 0001,其中包含 16 个 DI 位)

函数代码0x03和CRC将在您调用readHoldingRegisters时由库添加,因此您不必担心它们。

所以你可以这样做:

int[] registerValues = m.readHoldingRegisters(1, 38, 1);

您应该在 registerValues 变量中获取这 16 位。例如,如果您得到:

registerValues=255

这意味着您的所有输入都设置为高电平(为 1)。

关于java - 使用 Java 实现 TCP 上的 ModBus,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57095917/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com