1

告诉我是否可以直接从使用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”。

所以我相信有了这些信息,你可以帮助我。预先感谢您的回答。

4

0 回答 0