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.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ich bin der Betreuer für j2mod, also meine Antwort wird schlage vor, Sie Blick auf die test-Programme, die im Lieferumfang enthalten sind j2mod. Finden Sie j2mod auf SourceForge unter der URL --
https://sourceforge.net/projects/j2mod/
Ich bin ziemlich gut über die Beantwortung von Fragen gibt, aber ich habe auch Folgen stackoverflow, also erklären kann ich hier mehr als gut. Es gibt eine MENGE von Fragen hier, also entschuldige ich mich im Voraus, wenn ich habe nichts übersehen.
Dem Schneider-Gerät ist slave, oder "server" und Ihre Anwendung "master" - client". Modbus ist ein master/slave-Protokoll, mit dem master initiieren alle Anforderungen. Ihre Anwendung wird der master sein und dafür verantwortlich, dass alle Anfragen, die von Ihrem Gerät.
Die genaue Kommunikation wird von der Dokumentation zum Gerät. In diesem Fall können Sie angeben, dass das Gerät arbeitet mit 38400 baud, und so weiter. Das sind die Parameter, die Sie verwenden, um die update-SerialParameters mit der RXTX-library (was gerade so passiert, um es auch von j2mod).
Den Wert übergeben setCommPortId() ist die Windows COM-port-Kennung - Sie sollten in der Lage sein, um übergeben Sie einen Wert, der verbunden ist mit einer tatsächlichen COM-port -- "COM1", "COM2", etc.. Beachten Sie, dass einige USB-Konverter wandeln Sie Ihre COM-port jedes mal wenn Sie verwendet werden, so können Sie die Verfolgung der port-Namen.
Du hast erwähnt, dass Ihr Gerät auch eine IP-Adresse hat. Sie können die RTU-Klassen und Methoden Zugriff auf ein Modbus/TCP-Gerät. Das gleiche gilt für jamod und j2mod - die meisten Modbus-Bibliotheken haben verschiedene Klassen für RTU-und TCP-Transporte (auch als ASCII-Format und UDP, für die Bibliotheken, die diese andere Transporte).