LabVIEWForum.de
TCP Verbindung automatisch wiederverbinden - Druckversion

+- LabVIEWForum.de (https://www.labviewforum.de)
+-- Forum: LabVIEW (/Forum-LabVIEW)
+--- Forum: LabVIEW Allgemein (/Forum-LabVIEW-Allgemein)
+---- Forum: Datenkommunikation (/Forum-Datenkommunikation)
+---- Thema: TCP Verbindung automatisch wiederverbinden (/Thread-TCP-Verbindung-automatisch-wiederverbinden)



TCP Verbindung automatisch wiederverbinden - Philipp99 - 06.07.2018 15:09

Hallo zusammen,

ich frage über TCP Werte von einem Gerät ab. Manchmal gibt es einen Timeout, Error 56, liegt wohl an dem Gerät, denn mit einem anderen gibts keine Probleme.
Damit mein Programm nicht ganz hängen bleibt, hab ich eine Abfrage gemacht, damit bei Fehler die Verbindung geschlossen wird und dann wieder geöffnet. Hiermit funktioniert es wunderbar, mein Problem ist nur, dass der Benutzer eine Fehlermeldung bekommt, die quittiert werden muss und solange das Programm stehen bleibt. Das möchte ich nicht, das Programm soll autonom laufen. Gibt es eine Möglichkeit die Fehlermeldung abzufangen, oder - noch besser - gibt es eine elegantere Lösung für mein Problem?

[attachment=59257]

Vielen Dank!


RE: TCP Verbindung automatisch wiederverbinden - jg - 06.07.2018 15:24

Da du den Fehler intern über den Reconnect-Versuch selber behandelst, ist es ja gar kein Programm-Fehler mehr. Wieso gibst du ihn dann als Fehler-Ausgang weiter?

Gruß, Jens

P.S.: Anhänge wie Bilder in Zukunft bitte hier im Forum hochladen. Danke.


RE: TCP Verbindung automatisch wiederverbinden - Philipp99 - 06.07.2018 16:44

Danke für die Antwort Jens.
Leider verstehe ich es nicht ganz:
Das was aus der Schleife rauskommt ist ja der Fehler von dem neuen TCP Open.
Wenn der Fehler am Eingang ansteht, dann kommt die Fehlermeldung vom Anhang. Sollte die eigentich nicht kommen, wenn ich den Fehler selbst behandle?


RE: TCP Verbindung automatisch wiederverbinden - jg - 06.07.2018 16:59

Du widersprichst dir gerade selber. Zwecks Datenfluss gibst du den Fehler nach TCP-Read raus (in der Annahme, dass Error-Out der Cluster ist, den du aus deinem SubVI weitergibst). Das zeigt ja auch der Text, Error in TCP-Read. Parallel zum Error-Out behandelst du den Fehler in einer Case-Struktur. Laut deiner Aussage funktioniert das ja wunderbar. Also: Datenfluss korrigieren, und alles wird gut:

[attachment=59259]

Gruß, Jens


RE: TCP Verbindung automatisch wiederverbinden - IchSelbst - 07.07.2018 10:52

Hallo Philipp99

jg schreibt "Also: Datenfluss korrigieren, und alles wird gut:" - auch wenn jenes wie nebensächlich klingt, so ist das Nicht-Sequenzieren von was auch immer einer der fatalsten Fehler, du du in LabVIEW machen kannst. Du musst davon ausgehen, dass alles, was nicht explizit sequenziert ist, im schlimmsten Falle parallel ausgeführt wird. Das Dumme an einer Nicht-Sequenzierung (dort wo sie notwendig ist) ist, dass sie nicht unbedingt zu einem Fehler führen muss - nur kann. Also: immer mindestens dort sequenzieren, wo es notwendig ist.


RE: TCP Verbindung automatisch wiederverbinden - Philipp99 - 07.07.2018 20:39

Ah ok, jetzt hats geklingelt.

Wenn eine Funktion keinen Fehlereingang bekommt, dann wirft sie auch keinen Fehler aus.

Und danke für die Korrektur mit dem Datenfluss, hat mir sehr geholfen!


RE: TCP Verbindung automatisch wiederverbinden - IchSelbst - 07.07.2018 21:06

(07.07.2018 20:39 )Philipp99 schrieb:  Wenn eine Funktion keinen Fehlereingang bekommt, dann wirft sie auch keinen Fehler aus.
Das kann man sooo nicht sagen.

Wenn der Fehlereingang eines VIs beschaltet wird mit einem Datenfluss, der den Wert "Fehler liegt an" führt, dann wird im Normalfall das VI nicht ausgeführt (Methode: Case-Struktur, an deren Selektor der Errorcluster hängt). Vielmehr wird der Fehlereingang auf den Fehlerausgang gegeben.

Wenn der Fehlereingang eines VIs nicht beschaltet ist, liegt implizit der Wert "Kein Fehler" an (SW-technisch heißt das: optionaler Eingangsparameter, der eine Vorbesetzung hat). Demzufolge wird das VI ausgeführt. Und während dieser Ausführung kann ein Fehler auftreten, der dann am Fehlerausgang anliegt. Das VI kann also einen Fehler werfen, obwohl es keinen Fehlereingang hat.