LabVIEWForum.de - Serial auslesen wenn COM-Port verfügbar

LabVIEWForum.de

Normale Version: Serial auslesen wenn COM-Port verfügbar
Du siehst gerade eine vereinfachte Darstellung unserer Inhalte. Normale Ansicht mit richtiger Formatierung.
Guten Tag,
ich habe ein Problem mit der seriellen Schnittstelle. Ich habe einen USB2Serial-Adapter, der so konfiguriert ist, dass er immer den COM-Port 7 (COM7) belegt. Mein vi soll nun erkennen wann der USB-Adapter eingesteckt ist und auch nur dann die Schnittstelle auslesen. Momentan wird nur beim Start des Programms die Verfügbarkeit überprüft.

Zwei ineinander verschachtelte Schleifen (eine für die Verügbarkeit und eine zum auslesen) wollte ich eigendlich vermeiden.
Was für Möglichkeiten gibt es da?

Vielen Dank
lrt65492
Hallo Irt,

Zitat:Momentan wird nur beim Start des Programms die Verfügbarkeit überprüft.
Zwei ineinander verschachtelte Schleifen (eine für die Verügbarkeit und eine zum auslesen) wollte ich eigendlich vermeiden.
Wieso das denn nun wieder?
Entweder du willst zur Laufzeit ständig die Verfügbarkeit prüfen - oder nur beim Programmstart. Wenn du ständig (heißt: bei momentan nicht vorhandener Verbindung mit dem Gerät) prüfen willst, brauchst du eine äußere Schleife.

Evtl. würde sich hier eine Statemachine anbieten:
- State "init" prüft, ob COM-Port vorhanden und initialisiert diesen im Erfolgsfall
- State "Abfrage" läuft solange der Port vorhanden ist (d.h. bis ein [TimeOut-]Fehler auftritt)
- State "cleanup" räumt auf und geht zurück auf Anfang ("init")
(02.05.2012 09:46 )lrt65492 schrieb: [ -> ]Guten Tag,
ich habe ein Problem mit der seriellen Schnittstelle. Ich habe einen USB2Serial-Adapter, der so konfiguriert ist, dass er immer den COM-Port 7 (COM7) belegt. Mein vi soll nun erkennen wann der USB-Adapter eingesteckt ist und auch nur dann die Schnittstelle auslesen. Momentan wird nur beim Start des Programms die Verfügbarkeit überprüft.

Zwei ineinander verschachtelte Schleifen (eine für die Verügbarkeit und eine zum auslesen) wollte ich eigendlich vermeiden.
Was für Möglichkeiten gibt es da?

Vielen Dank
lrt65492

Hallo,

oder steck alles in die Schleife.
Guten Morgen,
ich wollte eine verschachtelte Schleife vermeiden, weil ich wirklich nur einmal in der Sekunde den Seriellen Port auslesen möchte, sonst kommt es dort zu Lesefehlern.
Ich weiß nicht wie genau der Ablauf der Schleifen dann funktioniert.
Wenn die serielle Schnittstelle angeschlossen ist, läuft dann nurnoch die innere Schleife? Und die Äußere steht? Und Wiederholt die sich dann wirklich nur alle Sekunde? Oder funktioniert das dann?

Vielen Dank für eure Bemühungen
Gruß lrt65492
Hallo Irt,

Zitat:Ich weiß nicht wie genau der Ablauf der Schleifen dann funktioniert.
Guck's dir doch einfach mit ExecutionHighlighting an...

Zitat:Wenn die serielle Schnittstelle angeschlossen ist, läuft dann nurnoch die innere Schleife?
Ja.

Zitat:Und die Äußere steht?
Ja, THINK DATAFLOW!

Zitat:Und Wiederholt die sich dann wirklich nur alle Sekunde?
Zumindest hast du eine Wartezeit von 1s konfiguriert. Wobei feste Wartezeiten beim seriellen Port fast immer falsch sind...
(03.05.2012 08:08 )lrt65492 schrieb: [ -> ]Guten Morgen,
ich wollte eine verschachtelte Schleife vermeiden, weil ich wirklich nur einmal in der Sekunde den Seriellen Port auslesen möchte, sonst kommt es dort zu Lesefehlern.
Ich weiß nicht wie genau der Ablauf der Schleifen dann funktioniert.
Wenn die serielle Schnittstelle angeschlossen ist, läuft dann nurnoch die innere Schleife? Und die Äußere steht? Und Wiederholt die sich dann wirklich nur alle Sekunde? Oder funktioniert das dann?

Vielen Dank für eure Bemühungen
Gruß lrt65492

Hallo,

"ich wollte eine verschachtelte Schleife vermeiden" - das habe verstanden, deswegen entferne die innere Schleife [attachment=39680], somit hast keine verschachtelte Schleife mehr und für einmal pro Sekunde reicht die Geschwindigkeit.
Hallo Zusammen,
erstmal vielen Dank für eure Hilfe.´Es funktioniert soweit ganz gut mit zwei Schleifen. Nur gibt es ab und zu Lesefehler. GerdW sagt ja schon:
(03.05.2012 08:14 )GerdW schrieb: [ -> ]Wobei feste Wartezeiten beim seriellen Port fast immer falsch sind...
wie kann ich das vermeiden?
In meinem Sub-Vi "Serial read" lese ich die Eigenschaft "Bytes at port" schon aus, hat es damit etwas zu tun?

Vielen Dank
lrt65492
Hallo lrt,

Zitat:wie kann ich das vermeiden?
Entweder:
Auf BytesAtPort verzichten und mit EOT-Char arbeiten (dabei feste Anzahl Zeichen abfragen).
Oder:
Feste Anzahl Zeichen abfragen, damit String zusammensetzen und gesuchte Antwort parsen...
Referenz-URLs