目前我正在使用 Schneider Power Logic 电气设备。我想从设备中读取数据并在我的系统中显示值。到目前为止,我发现了 J2mod、Jamod 和 Modbus4Java 库。我使用所有 modbus4java 来连接并获取设备的数据。
实际上我仍然很困惑我是否应该创建主端或从端。根据我的理解,设备将是从属设备,我的系统将是主设备(第一个问题)。
以下是在我的设备上的设置。表示设备处于从机模式,其协议为 Modbus RTU。那么,我需要创建一个使用 ModbusRTU 协议的主应用程序来与之通信,对吗?(第二个问题)
- 模式:奴隶
- 协议:Modbus RTU
- 地址1
- 波特率:38400
- 奇偶校验:无
以下是我的应用程序的代码充当主设备并使用 ModbusRTU 协议
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”之外的其他值的值。因为基本上它接收一个字符串值。那么我可以给它添加任何字符串值吗?这个特定的 setCommPortID 的功能是什么。(第三题)
查看 Modbus4Java 页面提供的示例代码,它没有放置设备的 IP 地址。但就我而言,我的设备有一个 IP 地址。并且 IP 地址仅在从应用程序中使用。我的系统应该如何识别设备的 IP 地址?(第四题)。
在我运行这个代码片段之后,我得到了一个错误:
稳定的图书馆
本机库版本 = RXTX-2.1-7
Java 库版本 = RXTX-2.1-7
Modbus 主初始化错误:com.serotonin.io.serial.SerialPortException:gnu.io.NoSuchPortException
请,请,请帮助我。我被这个困住了将近一个月。真的希望有人能帮助我。提前感谢您的任何帮助和建议。