gpt4 book ai didi

java - J2mod从保持寄存器读取不同的值

转载 作者:行者123 更新时间:2023-12-02 02:48:42 25 4
gpt4 key购买 nike

我已经使用j2mod成功连接到我的modbusRTU,当我尝试从保持寄存器读取40050到40054的值时,我总是得到28826,28828,28830,28832,28834。我不知道这个值是多少,请有人帮忙。

 ModbusSerialTransaction trans = null;
ReadMultipleRegistersRequest req = null;
ReadMultipleRegistersResponse res = null;

int unitid = 1; //the unit identifier we will be talking to
int ref = 40050; //the reference, where to start reading from
int count = 5; //the count of IR's to read
int repeat = 1; //a loop for repeating the transaction

//4. Open the connection
try {

//5. Prepare a request
req = new ReadMultipleRegistersRequest(ref, count);
req.setUnitID(unitid);
req.setHeadless();

//6. Prepare a transaction
trans = new ModbusSerialTransaction(con);
trans.setRequest(req);

int k = 0;
do {
trans.setTransDelayMS(50);
trans.execute();
res = (ReadMultipleRegistersResponse) trans.getResponse();
for (int n = 0; n < res.getWordCount(); n++) {
System.out.println("Word " + n + "=" + res.getRegisterValue(n));
}
k++;
} while (k < repeat);
con.close();
//8. Close the connection
} catch (ModbusException ex) {
System.out.print(ex);
}

please check this code.

最佳答案

正如评论中所讨论的,您的问题很容易解决:您只是为要读取的 Modbus 地址使用了错误的偏移量。

Modbus 保持寄存器按照惯例从 40000 开始编号,但对于大多数库来说,不考虑此偏移量。

因此,要读取某个设备的 Modbus 映射中名为 40011 的寄存器,您必须使用索引号 10。

按照同样的逻辑,要读取寄存器 40050,您只需更改代码中的地址行:

int ref = 49; //the reference, where to start reading from

关于java - J2mod从保持寄存器读取不同的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57125201/

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