LabVIEWForum.de
Abbruch serieller Schnittstelle und wiederverbinden - Druckversion

+- LabVIEWForum.de (https://www.labviewforum.de)
+-- Forum: LabVIEW (/Forum-LabVIEW)
+--- Forum: LabVIEW Allgemein (/Forum-LabVIEW-Allgemein)
+---- Forum: Datenkommunikation (/Forum-Datenkommunikation)
+---- Thema: Abbruch serieller Schnittstelle und wiederverbinden (/Thread-Abbruch-serieller-Schnittstelle-und-wiederverbinden)



Abbruch serieller Schnittstelle und wiederverbinden - -cosmo- - 02.11.2018 12:35

Hallo,

ich habe folgendes Problem: Ich zeichne mit einem WTW Multimeter die Sauerstoffkonzentration kontinuierlich auf per USB (es handelt sich intern dabei um eine RS232 Schnittstelle in dem Gerät). Nach einiger Zeit bricht die Verbindung kurzzeitig ab, was dann dazu führt, dass das Programm abstürzt und nichts mehr aufgezeichnet wird. Gibt es eine Möglichkeit, dass er sich selbst wieder mit diesem Port verbindet, sobald er die Verbindung verloren hat? Problem war dann meistens, dass die Ports weiterhin belegt waren, sprich, die Ports müssten dann ebenso automatisch wieder freigegeben und belegt werden. Ist das möglich mit Labview?

BG
Cosmo


RE: Abbruch serieller Schnittstelle und wiederverbinden - IchSelbst - 04.11.2018 11:24

(02.11.2018 12:35 )-cosmo- schrieb:  Ist das möglich mit Labview?
Ja. Selbstverständlich.

Sollte tatsächlich die Verbindung abbrechen, so müsstes du ja per Error-Cluster einen Fehler bekommen, sobald du schreiben oder lesen lässt. - einfach diesen Fehler auswerten. Je nach Fehler musst du die Verbindung schließen und eben neu öffnen.

Bedenke aber folgendes:
Möglicherweise kommt auch lediglich dein Empfangs- und Auswerte-Algorithmus durcheinander. Immerhin prüfst du den empfangenen Stream nicht auf Konsistenz. Das Durcheinander sieht dann so aus, als ob nichts mehr geht.


RE: Abbruch serieller Schnittstelle und wiederverbinden - Freddy - 05.11.2018 17:12

Hallo Cosmo,
in der ersten IF Anweisung übergibst Du eine Konstante = 2. Das Füllen der XON Char/ XOFF Char wird nicht ausgeführt.

In der While - Schleife wird aller 50ms der Write Befehl ausgeführt, dass könnte Dein Zielsystem etwas überfordern.

In der IF Anweisung zum Lesen, verwendest Du beim Read VI feste Anzahl Zeichen. Wenn die nicht alle kommen gibt es ein Timeout.

Gruß
Freddy


RE: Abbruch serieller Schnittstelle und wiederverbinden - -cosmo- - 06.11.2018 14:05

Hey,
vielen Dank schon mal für die Hinweise, ja, das klingt plausibel.

@IchSelbst
(04.11.2018 11:24 )IchSelbst schrieb:  Möglicherweise kommt auch lediglich dein Empfangs- und Auswerte-Algorithmus durcheinander. Immerhin prüfst du den empfangenen Stream nicht auf Konsistenz. Das Durcheinander sieht dann so aus, als ob nichts mehr geht.

Wie kann ich denn konkret auf Konsistenz prüfen? Ich werte ja nur einen Teil-String aus, und zwar sobald er den String 'Ox' liest, wertet er die darauffolgenden 2 Zahlen aus, der restliche String wird ja vollkommen ignoriert. Im Grunde kommt auch gar keine Fehlermeldung, sondern das Programm friert einfach ein.

@Freddy
(05.11.2018 17:12 )Freddy schrieb:  in der ersten IF Anweisung übergibst Du eine Konstante = 2. Das Füllen der XON Char/ XOFF Char wird nicht ausgeführt.

Du hast vollkommen Recht. Das habe ich übersehen, ich habe es aus dem Labview-Tutorial und die Ablaufsteuerung auf RTC/RTS gestellt, da es so vom Gerät vorgegeben war und dann übersehen, dass es auch mit der IF-Abweisung verbunden ist. Weiß zugegeben nicht so recht, was XON Char/XOFF Char ist, würde vermuten, dass ein Anfangs und End-Buchstabe gesendet wird, richtig? Aber da ich ja 2 übergebe, wird diese Anweisung doch niemals ausgeführt, richtig?

(05.11.2018 17:12 )Freddy schrieb:  In der IF Anweisung zum Lesen, verwendest Du beim Read VI feste Anzahl Zeichen. Wenn die nicht alle kommen gibt es ein Timeout.

Richtig, timeout kam auch öfters. Wie kann man denn eine variable Anzahl beim suchen in einem String zulassen, bzw. dieses Problem umgehen?


BG
Cosmo


RE: Abbruch serieller Schnittstelle und wiederverbinden - Freddy - 07.11.2018 12:47

Zitat:Wie kann man denn eine variable Anzahl beim suchen in einem String zulassen, bzw. dieses Problem umgehen?

Z.B immer nur ein Zeichen auslesen, und diese in ein String sammeln. Den String nach den Schlüsselworten durchsuchen und auswerten.
Die Error Meldung Timeout mit dem VI 'Clear Errors' löschen und weiter abfragen.

Gruß
Freddy