告诉我是否可以直接从使用Modbus协议的设备中读取寄存器的值。我想用java语言实现读取寄存器并将它们输出到jsp页面。该程序是文凭项目和获得Java知识所必需的。有没有人尝试这样做?使用芒果无限自动化找到了库 modbus4j,但不知何故,一切都非常困难。预先感谢您的回答。
我必须添加一些信息。我将施耐德电动ATV 71变频器通过Modbus TCP连接到计算机(由于软件看到此设备而建立连接)。
下面是使用的代码示例。主机不同,因为设备在大学里,我不记得指示的地址。
public class Test {
public static void main(String[] args) throws ErrorResponseException,ModbusTransportException {
ModbusFactory factory = new ModbusFactory();
IpParameters parameters = new IpParameters();
parameters.setHost("127.0.0.1");
parameters.setPort(502);
parameters.setEncapsulated(false);
ModbusMaster master = factory.createTcpMaster(parameters,true);
master.setTimeout(1000);
master.setRetries(0);
try {
master.init();
master.setConnected(true);
NumericLocator locator = new NumericLocator(1,RegisterRange.HOLDING_REGISTER,0,DataType.FOUR_BYTE_INT_SIGNED);
System.out.println("value: "+master.getValue(locator));
System.out.println(master.isInitialized());
System.out.println(master.isConnected());
} catch (ModbusInitException e) {
System.out.println("Something wrong");
e.printStackTrace();
}
} }
方法“master.isInitialized()”和“master.isConnected()”返回值“true”。设备中设置的地址为“1”。它还确认连接,因为在安装另一个 id 时会引发异常。
NumericLocator locator = new NumericLocator(1,RegisterRange.HOLDING_REGISTER,0,DataType.FOUR_BYTE_INT_SIGNED);
System.out.println("value: "+master.getValue(locator));
无论我设置什么班次,上面的代码总是返回“null”。
我还尝试了 EasyModbus 库并一直得到值“0”。
所以我相信有了这些信息,你可以帮助我。预先感谢您的回答。