Probleme mit Modbus-Slave

Hallo Forum,

Ich nutze die Modbus-Slave-Funktionalität vom EMS mittlerweile recht intensiv. OpenEMS ist quasi der “Modbus-Chef”, sammelt sämtliche Zählerdaten und stellt sie der Haussteuerung und mittlerweile 5 Siemens Logos zur Verfügung. Problem: nach einem Neustart vom OpenEMS startet die Mobus-Slave-Komponente nicht mehr.

[odbusExt] ERROR [s.common.worker.AbstractWorker] [ctrlModbusExt] Unable to start Modbus/TCP Api on port [503]: Cannot start TCP listener - Die Adresse wird bereits verwendet (Bind failed)

Zuerst dachte ich an offene Sockets auf Port 503. Aber selbst bei gezogenem Netzwerk-Kabel und nach einem Reboot tritt das Problem auf. Eine Änderung des Ports und ein “Komponente aktualisieren” funktioniert nicht. Die anderen Modbus-Master empfangen keine Daten vom OpenEMS-Modbus-Slave.
Ein Hochsetzen der Cycle-Time brachte auch nichts. Es könnte ja sein, dass die Zählerdaten zunächst nicht schnell genug gelesen und verarbeitet werden können.

Einzige Abhilfe: sämtliche (10 Stück) Zähler aus der “Controller Api Modbus/TCP Read-Only”-Komponente löschen, OpenEMS neu starten, alle Zähler wieder einfügen und die Komponente dann aktualisieren.

Gruß & schöne Feiertage,
klinki

Hallo Klinki,

wir hatten das Problem bei uns kürzlich auch. Die Ursache ist wohl, dass die Bridge öfters activated/deactivated wurde, beim deactivate aber der Server nicht schnell genug gestoppt wurde und dann deshalb beim activate nicht mehr auf dem gleichen Port gestartet werden kann.

Die Lösung ist, dass wir beim deactivate einen sleep einbauen - das hat geholfen:

Gruß,
Stefan

Guten Morgen Stefan,

Du meinst in “controller/api/modbus/AbstractModbusTcpApi.java”

		// wait until modbus slave was completely closed
		try {
			Thread.sleep(10000);
		} catch (InterruptedException e) {
			this.log.warn(e.getMessage());
		}

Habe das eben in meinem Repo geändert, kompiliert und eingespielt. Scheint zu laufen!
Vielen Dank dafür!

Gruß,
Klinki

2 Likes