ich habe hier ja schon über die Nutzung von MODBUS mit 3 Raspberries berichtet. Das funktioniert auch - nur eben nicht lange.
Ich nehme an, irgendein Timeout ist zu kurz. Frage ist, welcher (Response-Timeout steht auf 3000ms, Socket Timeout auf 30ms)
Nach Forcen der Reset-Flags eines Slaves liefen die Verbindungen wieder an, bleiben aber irgendwie hängen, da das Slave-Device noch Fehler brachte.
Nachdem das Ganze auch nach einem Programmdownload passiert ist, habe ich mit Forcen des Reset-Flags das Ganze wieder zum Laufen gebracht. Aber wie macht man das vom Programm aus. Mir als Codesys-Amateur gelingt nicht der Zugriff auf das Flag.
edit:
Das Setzen der Flags habe ich hinbekommen (Stichwort Pointer). Am Ende sehe ich aber vordergründig das Thema "Timeout" als Grund für die Ausfälle des Modbus.
Zur Zeit fahre ich mit Socket-Timeout = 100ms , nachdem ich immer wieder "SOCKET_ERROR" als Status (ComState) zurückbekommen habe. Nun würde mich das nicht so wundern, wenn ich in den Slaves zu Wago-Steuerungen vorher nie so hohe Werte vorgeben musste - und die Verbindungen liefen (auch jetzt noch mit 20ms - eher vorsichtshalber).
Ich denke die "Slave-Devices" haben noch eine kritische Stelle - die natürlich nur 3S ausmerzen kann. Denn so ein Timeout wird immer mal eintreten - aber dann muss das Slave-Device sich selbständig wieder "aufrappeln". Es kann ja nicht sein, das ich "resets" durch fragwürdige Aktionen in einer Library nutzen muss, um das Slave-Device wieder zu starten.
Grüße
Thomas
If you would like to refer to this comment somewhere else in this project, copy and paste the following link:
Hallo,
ich habe hier ja schon über die Nutzung von MODBUS mit 3 Raspberries berichtet. Das funktioniert auch - nur eben nicht lange.
Ich nehme an, irgendein Timeout ist zu kurz. Frage ist, welcher (Response-Timeout steht auf 3000ms, Socket Timeout auf 30ms)
Nach Forcen der Reset-Flags eines Slaves liefen die Verbindungen wieder an, bleiben aber irgendwie hängen, da das Slave-Device noch Fehler brachte.
Nachdem das Ganze auch nach einem Programmdownload passiert ist, habe ich mit Forcen des Reset-Flags das Ganze wieder zum Laufen gebracht. Aber wie macht man das vom Programm aus. Mir als Codesys-Amateur gelingt nicht der Zugriff auf das Flag.
Wie muss der Aufruf lauten ??
```
ModbusTCP_Rasp3_Slave_Device.m_ModbusServer.xReset:=TRUE;
``` bringt "unnützen Code" zurück.
edit:
Das Setzen der Flags habe ich hinbekommen (Stichwort Pointer). Am Ende sehe ich aber vordergründig das Thema "Timeout" als Grund für die Ausfälle des Modbus.
Zur Zeit fahre ich mit Socket-Timeout = 100ms , nachdem ich immer wieder "SOCKET_ERROR" als Status (ComState) zurückbekommen habe. Nun würde mich das nicht so wundern, wenn ich in den Slaves zu Wago-Steuerungen vorher nie so hohe Werte vorgeben musste - und die Verbindungen liefen (auch jetzt noch mit 20ms - eher vorsichtshalber).
Ich denke die "Slave-Devices" haben noch eine kritische Stelle - die natürlich nur 3S ausmerzen kann. Denn so ein Timeout wird immer mal eintreten - aber dann muss das Slave-Device sich selbständig wieder "aufrappeln". Es kann ja nicht sein, das ich "resets" durch fragwürdige Aktionen in einer Library nutzen muss, um das Slave-Device wieder zu starten.
Grüße
Thomas