Modbus4J Modbus RTU-master

Aktuell arbeite ich mit den Schneider Power Logic elektrischen Gerät. Ich möchte zum Lesen der Daten aus dem Gerät und zeigt den Wert in meinem system. So weit ich entdecken J2mod, Jamod und Modbus4Java Bibliothek. Ich habe alle modbus4java zu verbinden und bekommt das Gerät die Daten.

Eigentlich habe ich immer noch verwirrt, ob ich nehme an, erstellen der Master-Seite oder der Slave-Seite. Basierend auf meinem Verständnis, die das Gerät auf Slave, und mein system wird Meister (1. Frage).

Unten ist die Einstellung für MEIN GERÄT. Es anzugeben, dass das Gerät im slave-Modus und das dazugehörige Protokoll ist Modbus RTU. Also, ich brauche zum erstellen einer master-apps, um mit ihm zu kommunizieren rechts, die mit dem ModbusRTU-Protokoll, richtig ? (2. Frage)

  • Modus: Slave
  • Protokoll: Modbus RTU
  • Adresse: 1
  • Baud Rate: 38400
  • Parität: Keine

Unten ist der code meiner apps als Master und mit dem ModbusRTU Protokoll

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"); 
}

Dies ist der code, dass ich von den Beispiel-code vom Modbus4Java Seite. Die andere Sache, die mich betrifft, ist der Wert des params.setCommPortId("COM6"); Was anderen Wert als "COM6", dass ich es. Denn im Grunde erhalten Sie einen String-Wert. So bin ich in der Lage, um eine beliebige Zeichenfolge Wert ? Und was ist die Funktion dieses speziellen setCommPortID. (3. Frage)

Blick auf den Beispiel-code vom Modbus4Java Seite, Sie nicht, stellen Sie die IP-Adresse des Geräts. Aber in meinem Fall, mein Gerät bekam eine IP-Adresse. Die IP-Adresse und verwenden Sie nur im Slave-apps nur. Wie sollte mein system erkennt die IP-Adresse des Geräts ? (4. Frage).

Und nachdem ich dieses code-snippet, ich bekam eine Fehlermeldung:

Stabil Bibliothek

Native lib Version = RXTX-2.1-7

Java lib Version = RXTX-2.1-7

Modbus-Master-Init-Fehler: com.serotonin.io.serial.SerialPortException: gnu.io.NoSuchPortException

Bitte, bitte und bitte helfen Sie mir. Ich war stecken mit dieser fast einen Monat. Hoffe wirklich jemand wird in der Lage sein, mir zu helfen. Vielen Dank im Voraus für jede Art von Hilfe und Anregung.

Schreibe einen Kommentar