Problem mit Modbus bei Write Coil

Mobi

Level-3
Beiträge
1.369
Reaktionspunkte
135
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo,

folgendes Szenario:
ILC 150 ETH ist Modbus-Server. Dieder ist per TCP verbunden mit meinem PC, der der Client ist. Verbindung steht und beiden schicken sich gegenseitig die Pakete zu.

Nun möchte ich einen Ausgang setzen mit Write Coil. Also schicke ich ein Request an das ILC (0x00 00 00 00 00 06 FF 05 00 A0 FF 00). Diesen führt er aus und setzt den Ausgang. Er schickt auch wieder eine Response zurück.
Nach dem eingestellten TimeOut (T#10s) geht aber der Baustein MODBUS_TCP_Server_V1_30 auf Error mit dem Code C020.

Code:
Es  wurde ein schreibender Dienst ausgeführt und nicht innerhalb der im Parameter TimeOut angegebenen Zeit ein erneutes  schreibendes Telegramm empfangen.  Zum  Deaktivieren dieser Funktionalität muss am Parameter TimeOut der Wert T#0s angegeben werden

Mit Wireshark kann ich aber feststellen, dass ein 4-Wege-Handshake zustande kommt.
Woran kann das noch liegen, dass ein fehler entsteht?
 
Hi,
kenne eigentlich keine von deinen Komponenten,
aber wenn ich mir die Fehlermeldung durchlese wird eh klar

Es gibt eine Sicherheitsfunktion bei Schreibbefehlen (ev. für Verbindungsabbruch nach setzen eines Ausgangs oder ähnlich) dass innerhalb einer bestimmten Zeit wieder ein Schreibbefehl kommen muss. Ist dass nicht gewünscht, T=0 setzen ???
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo,

folgendes Szenario:
ILC 150 ETH ist Modbus-Server. Dieder ist per TCP verbunden mit meinem PC, der der Client ist. Verbindung steht und beiden schicken sich gegenseitig die Pakete zu.

Nun möchte ich einen Ausgang setzen mit Write Coil. Also schicke ich ein Request an das ILC (0x00 00 00 00 00 06 FF 05 00 A0 FF 00). Diesen führt er aus und setzt den Ausgang. Er schickt auch wieder eine Response zurück.
Nach dem eingestellten TimeOut (T#10s) geht aber der Baustein MODBUS_TCP_Server_V1_30 auf Error mit dem Code C020.

Code:
Es  wurde ein schreibender Dienst ausgeführt und nicht innerhalb der im Parameter TimeOut angegebenen Zeit ein erneutes  schreibendes Telegramm empfangen.  Zum  Deaktivieren dieser Funktionalität muss am Parameter TimeOut der Wert T#0s angegeben werden
Mit Wireshark kann ich aber feststellen, dass ein 4-Wege-Handshake zustande kommt.
Woran kann das noch liegen, dass ein fehler entsteht?

Will die Kiste eventuell zwei Mal das Gleiche Telegramm ? Innerhalb von 10s ? Stell doch mal den Timeout auf T#0 !
 
Code:
Es  wurde ein schreibender Dienst ausgeführt und nicht innerhalb der im Parameter TimeOut angegebenen Zeit ein erneutes  schreibendes Telegramm empfangen.  Zum  Deaktivieren dieser Funktionalität muss am Parameter TimeOut der Wert T#0s angegeben werden

Ich kenne deine Hardware zwar auch nicht, aber die Fehlermeldung sagt eigentlich eh schon alles aus.
Du musst immer wieder innerhalb der eingestellten Timeoutzeit ein schreibendes Diagramm senden, damit der Slave nicht auf einen Fehler geht.

Auf Modbus über RS485/422 reicht in der Regel auch ein Lese- Zugriff aus um den Timeout wieder aufzuziehen, aber da ja auf Modbus TCP/IP auch mehrere Master zugleich lesen könnten, ist dies eine Sicherheitsfunktion das nur schreibende Diagramme für den Timeout ausgewertet werden.
 
Hab jetzt den TimeOut rausgenommen. Läuft prima. Danke Jungs. Dachte es geht auch mit.
 
Schon logisch. Einmal gesetzt ist immer gesetzt, es sei denn man setzt sie wieder zurück im Programm oder per Modbus. ;)
Dafür muss man dann halt eine Errorhandling programmieren.
Was hat das jetzt mit dem TimeOut zutun?
 
Dafür muss man dann halt eine Errorhandling programmieren.
Was hat das jetzt mit dem TimeOut zutun?
Ein "dummes" Modbus IO Modul würde bei diesem Fehler einfach alle Ausgänge zurücksetzten.
Ich sehe allerdings gerade, dass dies eine SPS und nicht nur ein einfach konfigurierbares Modbus IO Modul ist.
Hier kannst du natürlich auch selbst ein Errorhandling (z.B. Zähler welcher immer erhöht wird, Bit toggeln...) ausprogrammieren wenn du möchtest. - Im Prinzip ist dieser Timout Fehler genau dieses Errorhandling, bwz. das wie du diesen Timeout Fehler dann im Programm auswertest.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Gut ich könnte auch wenn genau der Fehler immer kommt mit einem Vergleich, einfach dann den Fehler quittieren. Aber im Moment brauche ich den TimeOut nicht. Ich sende ja nicht dauernd Telegramme.
 
Zurück
Oben