gpt4 book ai didi

java - 使用 Jamod 写入 modbus

转载 作者:搜寻专家 更新时间:2023-11-01 03:14:44 28 4
gpt4 key购买 nike

在使用 jamod 写入 modbus 时,我遇到了一个奇怪的情况。以下阅读代码完美运行:

public static void main(String[] args) throws Exception {
InetAddress address = InetAddress.getByName("host.somewhere");
TCPMasterConnection connection = new TCPMasterConnection(address);
connection.setPort(502);
connection.connect();
ReadMultipleRegistersRequest request = new ReadMultipleRegistersRequest(0, 1);
ReadMultipleRegistersResponse response = (ReadMultipleRegistersResponse)
executeTransaction(connection, request);
}

private static ModbusResponse executeTransaction(TCPMasterConnection connection,
ModbusRequest request)
throws ModbusIOException, ModbusSlaveException, ModbusException {
ModbusTCPTransaction transaction = new ModbusTCPTransaction(connection);
transaction.setRequest(request);
transaction.execute();
return transaction.getResponse();
}

但是尝试写类似的方式失败了(Jamod 尝试了 3 次,每次都遇到 SocketTimeoutException,最后抛出 ModbusException)。

public static void main(String[] args) throws Exception {
final InetAddress address = InetAddress.getByName("host.somewhere");
final TCPMasterConnection connection = new TCPMasterConnection(address);
connection.setPort(502);
connection.connect();
Register reg = new SimpleRegister(0);
WriteMultipleRegistersRequest request = new WriteMultipleRegistersRequest(0,
new Register[]{reg});
executeTransaction(connection, request);
}

是的,我知道我正在使用请求对象的多寄存器版本,但我使用的设备仅支持功能代码 3 和 16。

我还编写了原始套接字测试器来写入寄存器,据我所知它工作正常。但是在这两种情况下都使用 jamod 会很好。

有没有人有使用 jamod 的经验,那位好心人能告诉我哪里做错了吗? jamod 的 1.1 和 1.2rc1 版本都会发生这种情况。或者这可能是某些特定于供应商的情况?

最佳答案

默认情况下,Modbus 请求的单元 ID = 0。所以任何其他 id 都必须设置为 request,例如:

WriteCoilRequest writeCoilRequest = new WriteCoilRequest(ref, bool);
writeCoilRequest.setUnitID(unitid);

浪费了几个小时试图解决您在问题中描述的相同问题。

关于java - 使用 Jamod 写入 modbus,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1840913/

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