Modbus4J Modbus RTU主站

时间:2015-09-07 06:42:23

标签: java ip master-slave modbus modbus-tcp

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

实际上我仍然混淆我是否想要创建Master侧或Slave侧。根据我的理解,该设备将是Slave,我的系统将是Master(第一个问题)。

以下是AT MY DEVICE的设置。它表示处于从机模式的设备及其协议是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"我可以放在那里。因为基本上它接收一个String值。所以我能够为它添加任何String值吗?这个特定的setCommPortID的功能是什么? (第3个问题)

查看Modbus4Java页面提供的示例代码,它不会放置设备的IP地址。但在我的情况下,我的设备有一个IP地址。并且IP地址仅用于Slave应用程序。我的系统应该如何识别设备的IP地址? (第四个问题)。

运行此代码片段后,我收到错误消息:

稳定的图书馆

Native lib Version = RXTX-2.1-7

Java lib Version = RXTX-2.1-7

Modbus Master Init错误:com.serotonin.io.serial.SerialPortException:gnu.io.NoSuchPortException

拜托,请帮助我。我差不多一个月都坚持了这个。真的希望那里的人能够帮助我。提前感谢您提供任何帮助和建议。

0 个答案:

没有答案