MB_SERVER: Erneuter Verbindungsaufbau scheitert

Begonnen von BeCe, 03. Januar 2012, 10:52:01

Vorheriges Thema - Nächstes Thema

0 Mitglieder und 1 Gast betrachten dieses Thema.

BeCe

Hallo Oscat Community,

ich benutze den FB "MB_SERVER" auf einem WAGO Controlpanel mit Targetvisualisierung. Die Modbus Kommunikation funktioniet bei Tests mit "Modbus Poll" als Master problemlos. Jedoch wird die Verbindung getrennt und dann anschliessend ein neuer Verbindungsversuch gestartet, kann keine Verbindung mehr hergestellt werden. Beim debuggen konnte ich folgende Stelle im MB_SERVER als Ursache identifizieren: Läuft die Modbus Kommunikation befindet sich der MB_SERVER in Schritt 20. Dieser Schritt wird nur in Richtung Schritt 0 verlassen, wenn der Eingang  Enable zurückgesetzt wird. Somit wird nach einem Verbindungsabriss (IP_C.C_Enable = FALSE) kein erneuter Verbindungsversuch unternommen.

Fix Vorschlag: Die Abbruchbedingung im Schritt 20 erweitern:
      IF ENABLE = FALSE OR IP_C.C_ENABLE = FALSE THEN
    ip_state := BYTE#4; (* Abmelden *)
state := 00;
END_IF;


Rückmeldungen und andere Workarounds sind wilkommen.

Einen schönen Tag noch

peewit

#1
Hallo

das Problem ist mir schon länger bekannt, und habe es auch schon vor 6 Monaten korrigiert (es gab aber bislang keine neue release)
es betrifft übrigens alle bausteine die als Server arbeiten
voraussichtlich bis diesen Sonntag werden wir sowieso eine neue oscat version freigeben
dabei wird natürlich auch dieses Problem behoben sein.

solltest du nicht solange warten können, dann solltest du es mir mitteilen

welches Plattform benutzt du ?

BeCe

Hallo peewit,

vielen Dank für die schnelle Antwort. Der MB_Server läuft auf einem WAGO 762-3035 (Controlpanel mit Targetvisu), also CoDeSys 2.3

Bis zum nächsten offiziellen Release werde ich dann erstmal mit meinem Fix weiterabeiten.
Falls es Dir jedoch keine Umstände machst, kannst du mir gerne eine Vorabversion zukommen lassen.

Viel Dank nochmal.

peewit

Hallo

vorab fix



[gelöscht durch Administrator]

BeCe

Super. Funktioniert wie erwartet. Nachdem der 5s Timeout abgelaufen ist, kann ich mich erneut verbinden.

Vielen Dank für die superschnelle Hilfe.




jzhvymetal

I still have issues with new Modbus Server code not timing out when the socket is disconnected or the Ethernet cable is disconnected.  I had do add the following below to reset the socket after the receive data timed out.  Since there is no code to detect that the Socket is still open you must force the socket closed and wait for the next connection.

Case 10:
IP_C.R_OBSERVE := TRUE; (* keine Empfangsueberwachung *)

and

IF ENABLE = FALSE OR t.Q THEN
    ip_state := BYTE#4; (* Abmelden *)
   state := 00;
   IP_C.C_ENABLE := FALSE;
END_IF;