TIA Modbus disconnect reconnect problem

8beats7

Level-2
Beiträge
8
Reaktionspunkte
0
Zuviel Werbung?
-> Hier kostenlos registrieren
Tach zusamme,

ich hab folgende situation und werd nicht schlau draus.
CPU 1212 ist der Modbus Client (MB_Client). Verbindung besteht zum Server CPU1215. Daten können gelesen und geschrieben werden ohne Probleme.
Sobald ich z.B. am Client den disconnect ansteuere wird die Verbindung abgebroche. Nach 1min. wird das Signal wieder weggenommen und die Verbdinung wird auch wieder hergestellt. Nur kann ich über req weder lesen noch schreiben, und keiner der Bausteine egal ob Server oder Client gehen in Störung oder zeigen sonstige fehler an. Es scheint so als würde der Client sogar schreiben (Status 70005/6) aber es kommt nichts beim Server an.
Erst nachdem ich die CPU komplett neustarte, gehts wieder.
Überseh ich etwas?

Tia V16
MB_Client/Server Bausteinvserion 5.2
 
Beim Abbau der Verbindung sollte der Status sich auf 7003 ändern. Tut er das?
Du schreibst wenn Du am Client disconnect ansteuerst wird die Verbindung abgebrochen. Wird sie wirklich abgebrochen oder nur abgebaut? Abbrechen einer Verbindung wäre etwas anderes als das kontrollierte Abbauen. Beim Abbau wird die Ressource freigegeben, beim Abbruch wird versucht sie wieder aufzubauen.

Die zeitlichen Zusammenhänge Deiner Verbindung sind mir nicht ganz so eindeutig. Was geschieht wann genau und hast Du Die bei den einzelnen Aktionen auch den Status angesehen?

Wie wird der MB-Client/Server verschaltet?
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo,
die Verbdinung wird abgebaut nicht abgebrochen. Falsch formuliert.
Eigentlich wollte ich auf der Serverseite nur fehlermeldungen erstellen für den fall das der Baustein einen fehler haben sollte. Sollte ein fehler kommen, dann wollte ich über einen Reset button ein reset über den "Disconnect" eingang am Baustein, anstoßen. So der gedanke.
Die Clientseite dient für mich nur zum testen.

Sobald am Client der merker für Disconnect gesetzt wird sehe ich kurz den status 7003. Danach bleibt er konstant auf 7000.
Der Server hingegen zeigt weiterhin 7006 an. Wenn ich den merker am disconnect wieder wegnehme geht der status auf 7004
 
So richtig schlau bin ich nun noch nicht geworden.
Du sendest vom Client aus ein Disconnect, bekommst Status 7003, nimmst Disconnect zurück, bekommst Status 7000. Das wäre so erstmal richtig.
Der Server reagiert gleichzeitig nun wie? Eigentlich sollte er auf 7002 stehen wenn Disconnect=0 und EN=1 ist und gerade keiner versucht eine Verbindung zu ihm aufzubauen.
7004 hat der Server eigentlich nicht, es sei denn in meiner Bausteinversion 5.1 zu Deiner 5.2 hat sich etwas geändert, wovon ich nicht ausgehe da bisher immer Firmware <4.0 und Firmware >=4.0 unterschieden wurde.
Warum willst Du am Server einen Disconnect auslösen? Nach welchen Kriterien soll da vorgegangen werden?

Wie also ist das verschaltet? Was passiert wann genau?
Die Dokumentation hast Du berücksichtigt?
Wie programmieren und parametrieren Sie die Modbus/TCP-Kommunikation zwischen S7-1500 CPU und S7-1200 CPU?

Vielleicht hilft auch die Darstellung Deiner Netzwerke ein wenig weiter.
 
Ich setze am Client Baustein selbst den Disconnect händisch (keine verschaltung) ich wollte sehen was passiert und wie Client und Server reagieren. Status 7003 erscheint am Client Baustein sowie 7004 nachdem ich den Merker zurückgesetzt habe. Der Server reagiert garnicht, er zeigt weiterhin 7006 an. Es gibt in diesem Sinne keine Verschaltung, ich setzte alles händisch da ich sehen will die Bausteine reagieren.
 

Anhänge

  • client.png
    client.png
    96 KB · Aufrufe: 20
  • server.PNG
    server.PNG
    80,2 KB · Aufrufe: 21
wenn ich nach dem disconnect das REQ am Client ansteuere springt der Status auf 7006.Aber es kommen keine Daten am Server an. Server zeigt unverändert 7006 an. Wenn ich jetzt die CPU spannungslos schalte und zuschalte, wird die Verbindung aufgebaut und ich kann wieder ganz normal senden.
 
Ich meinte wenn Du in dem Moment wie der Zustand da oben ist das REQ triggerst. Nicht erst noch Disconnect.
Auf 7006 springen kann der Client gar nicht, sendet ja wegen Mode=116. Also muss das der Server sein den Du meinst, aber der steht doch schon auf 7006, also kann er ja nicht darauf springen oder lässt Du Worte/Taten aus?
 
Jo, genau das verstehe ich nicht so ganz:

Parameter STATUS (S7-1200)
7005Daten wurden gesendet.
7006Daten wurden empfangen.

Parameter MB_MODE, MB_DATA_ADDR und MB_DATA_LEN (S7-1200, S7-1500)
1160 bis 65.5351 bis 123161 bis 123 Halteregister auf der remoten Adresse 0 bis 65.535 schreiben

Letztlich kann MB_Client eigentlich nicht auf 7006 stehen.
Irgendwas passt da nicht so ganz. DBs vertauscht, Mode im Zwischenaufruf verändert?
Der EN am MB_Server - schaltest Du den oder bleibt er auf Dauer-1? Wenn er geschaltet wird kann das auch Probleme bereiten.

Ich hatte noch nie die Thematik das ein zu sendender Baustein etwas empfangen möchte. Ob aber auch bei mir ab und an mal eine 7006 drin steht kann ich aber nicht sagen, da ich das nicht beobachte sondern einfach nur eben die beiden Sende- und Empfangs-DBs in beiden Steuerungen reintipper, die Bausteine anlege und verschalte.

Ich würde vorschlagen Du änderst Deine Verschaltung genau so ab wie es in der Dokumentation steht und testest es dann mal. Vielleicht ein anderes Verhalten oder das gleiche? Bei weiterem fehlerhaften Verhalten sollten wir uns vielleicht um die Firmware der CPUs Gedanken machen. Nicht das da ein Problem existent ist an das wir nicht denken.

Das manuelle Eintragen um Werte zu sehen ist ohnehin mühselig und nicht machbar, da die Bausteine in einer Sekunde auch 30 verschiedene Status-Einträge erhalten können, das TIA-Portal beim Beobachten aber nur alle 1 Sekunde etwas sieht.
Wenn Du Disconnect am Server machst, dann wird der Client im übrigen nicht ein Disconnect ausführen sondern sofort wenn der Server eine Anfrage akzeptiert (Disconnect=0) wieder die Verbindung aufbauen, bis er selbst disconnecten soll.
 
Parameter STATUS (S7-1200)
7005Daten wurden gesendet.
7006Daten wurden empfangen.

(...)

Letztlich kann MB_Client eigentlich nicht auf 7006 stehen.
Wieso nicht? Wenn der MB_Client ein Modbus-Register lesen will, dann sollte Status 7006 kommen, nachdem er die Leseanforderung an den Modbus-Server gesendet hat.

Bei der TIA-Hilfe (V15.1) zur Baustein/Bibliotheks-Version ab V4.0 steht übrigens:
Parameter STATUS
7005Daten werden gesendet.
7006Daten werden empfangen.
Ob das nur eine TIA-typische Schlamperei ist oder eine sinnvolle/gerechtfertigte Korrektur, und ob das bei TIA V16 auch noch so steht, kann ich nicht sagen...

Harald
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Wieso nicht? Wenn der MB_Client ein Modbus-Register lesen will, dann sollte Status 7006 kommen, nachdem er die Leseanforderung an den Modbus-Server gesendet hat.
In genau dem Kontext ja, aber doch nicht wenn der Mode auf schreiben steht, oder wird er nach dem Schreiben auch mal Lesen?
 
Zurück
Oben