gpt4 book ai didi

java - Modbus4J Modbus RTU 主机

转载 作者:行者123 更新时间:2023-11-29 03:05:25 28 4
gpt4 key购买 nike

目前我正在使用 Schneider Power Logic 电气设备。我想从设备读取数据并在我的系统中显示值。到目前为止,我发现了 J2mod、Jamod 和 Modbus4Java 库。我使用所有 modbus4java 来连接并获取设备的数据。

其实我还在纠结到底要创建Master端还是Slave端。根据我的理解,该设备将是 Slave,而我的系统将是 Master(第一个问题)。

下面是在我的设备上的设置。表示设备处于slave模式,协议(protocol)为Modbus RTU。所以,我需要创建一个主应用程序来与之通信,它使用的是 ModbusRTU 协议(protocol)吗? (第二题)

  • 模式:从属
  • 协议(protocol):Modbus RTU
  • 地址:1
  • 波特率:38400
  • 奇偶性:无

下面是我的应用程序作为Master并使用ModbusRTU协议(protocol)的代码

public static void main(String[] args) throws ModbusTransportException, ErrorResponseException {
ModbusFactory factory = new ModbusFactory();

SerialParameters params = new SerialParameters();
params.setCommPortId("COM6");
params.setBaudRate(9600);
params.setDataBits(8);
params.setStopBits(1);
params.setParity(0);

ModbusMaster master = factory.createRtuMaster(params);

master.setTimeout(1000);
master.setRetries(0);
long start = System.currentTimeMillis();

try {
master.init();
} catch (Exception e) {
System.out.println( "Modbus Master Init Error: " + e.getMessage());
return;
}

try {
System.out.println("Reg. 1001 Value:" + master.getValue(1, RegisterRange.HOLDING_REGISTER, 3110, DataType.FOUR_BYTE_FLOAT_SWAPPED));
}
finally {
master.destroy();
}

System.out.println("Time elapsed: " + (System.currentTimeMillis() - start) + "ms");
}

这是我从 Modbus4Java 页面提供的示例代码中获得的代码。另一件让我担心的事情是 params.setCommPortId("COM6"); 的值 除了“COM6”我还可以放在那里。因为基本上它收到一个 String 值。那么我可以将任何 String 值放入其中吗?这个特定的 setCommPortID 的功能是什么。 (第三题)

查看Modbus4Java页面提供的示例代码,它没有输入设备的IP地址。但就我而言,我的设备获得了一个 IP 地址。并且 IP 地址仅在从属应用程序中使用。我的系统应该如何识别设备的 IP 地址? (第 4 个问题)。

在我运行这段代码之后,我得到了一个错误:

稳定库

native 库版本 = RXTX-2.1-7

Java 库版本 = RXTX-2.1-7

Modbus 主机初始化错误:com.serotonin.io.serial.SerialPortException:gnu.io.NoSuchPortException

请,请,请帮助我。我坚持了将近一个月。真的希望有人能帮助我。预先感谢您提供任何帮助和建议。

最佳答案

我是 j2mod 的维护者,所以我的回答是建议您查看 j2mod 中包含的测试程序。您可以通过此 URL 在 SourceForge 上找到 j2mod --

https://sourceforge.net/projects/j2mod/

我很擅长在那里回答问题,但我也关注 stackoverflow,所以我也可以在这里解释更多。这里有很多问题,所以如果我遗漏了什么,我提前道歉。

Schneider 设备是从设备或“服务器”,您的应用程序是主设备或“客户端”。 Modbus 是一种主/从协议(protocol),由主站发起所有请求。您的应用程序将成为主人并负责向您的设备发出所有请求。

确切的通信将由设备文档提供。在本例中,您指示设备使用 38400 波特等。这些是您将使用 RXTX 库更新 SerialParameters 的参数(j2mod 也恰好使用了它)。

传递给 setCommPortId() 的值是 Windows COM 端口标识符——您应该能够传递任何与实际 COM 端口关联的值——“COM1”、“COM2”等。请注意,某些 USB 转换器每次使用它们时都更改它们的 COM 端口,因此您可能正在寻找端口名称。

您提到您的设备也有一个 IP 地址。您不能使用 RTU 类和方法来访问 Modbus/TCP 设备。 jamod 和 j2mod 也是如此——大多数 Modbus 库都有不同的 RTU 和 TCP 传输类(以及 ASCII 和 UDP,用于支持其他传输的库)。

关于java - Modbus4J Modbus RTU 主机,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32432548/

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