LabVIEWForum.de
Nicht regelmäßiges Einlesen erzeugt Timeout fehler - Druckversion

+- LabVIEWForum.de (https://www.labviewforum.de)
+-- Forum: LabVIEW (/Forum-LabVIEW)
+--- Forum: LabVIEW Allgemein (/Forum-LabVIEW-Allgemein)
+---- Forum: Instrument IO & VISA (/Forum-Instrument-IO-VISA)
+---- Thema: Nicht regelmäßiges Einlesen erzeugt Timeout fehler (/Thread-Nicht-regelmaessiges-Einlesen-erzeugt-Timeout-fehler)



Nicht regelmäßiges Einlesen erzeugt Timeout fehler - Kex2006 - 04.12.2008 14:13

Hallo,
ich bekomme nur ab und zu etwas einlesen. wenn ich den ganz normalen VISA seriel port nehme und den einlese durch visa read dann bekomme ich nach der entsprechenden timeout einen fehler.

das programm soll aber auch ablaufen wenn eben keine daten gesendet werden. alle jede sekunde oder 500 ms würde schon reichen.
von einem vorgänger hab ich ein vi übernommen, die ungefähr das macht (nachdem ich die timeout zeit auf 700ms runtergesetzt habe) nur verstehe ich nicht was das vi macht. kanns mir jemand erklären?
lieben gruß

LabVIEW 8.2


Nicht regelmäßiges Einlesen erzeugt Timeout fehler - IchSelbst - 04.12.2008 18:21

' schrieb:Hallo,
ich bekomme nur ab und zu etwas einlesen. wenn ich den ganz normalen VISA seriel port nehme und den einlese durch visa read dann bekomme ich nach der entsprechenden timeout einen fehler.

das programm soll aber auch ablaufen wenn eben keine daten gesendet werden. alle jede sekunde oder 500 ms würde schon reichen.
Ich verstehe nicht, ob und was diese beiden Sätze etwas mit einem Problem zu tun haben.

Daher kann ich nur folgendes beantworten:
Zitat:von einem vorgänger hab ich ein vi übernommen, die ungefähr das macht (nachdem ich die timeout zeit auf 700ms runtergesetzt habe) nur verstehe ich nicht was das vi macht.
Das ist einfach: Das gepostetet VI konfiguriert einen Com-Port und versucht 8 Zeichen auszulesen. Allerdings wird dieses VI an sich nicht richtig funktionieren. Die beiden VIs müssen sequenziert werden: Erst initialisieren, dann Einlese-Versuch.

Beachte, dass das Initialisieren mur einmalg nötig ist.


Nicht regelmäßiges Einlesen erzeugt Timeout fehler - Kex2006 - 05.12.2008 10:28

naja mein problem ist das das visa read vi wartet bis daten empfangen wurden. wenn innerhalb der timeout zeit nix empfangen wurde bricht das programm mit einem fehler ab.
das bedeutet erstens das das programm nicht ausgeführt wird solang das read vi auf daten wartet und zweitens eben dass es komplett abbricht wenn ich innerhalb von 10s keine daten bekomme.

das kann aber gut seind ass ich innerhalb dieser zeit keine daten bekomme!! das programm soll aber keinen fehler melden sondern weiter arbeitn! außerdem soll das programm nicht 10 s dort warten (was bedeutet dass das proramm in der zeit keine eingaben einliest) sondern soll egal ob daten kommen oder nicht alle 500ms ausgeführt werden..

(das der port außerhalb der programmschliefe initialisiert werden muss weiß ihc.. war ja nur n beispiel zum posten..


Nicht regelmäßiges Einlesen erzeugt Timeout fehler - IchSelbst - 05.12.2008 12:53

' schrieb:naja mein problem ist das das visa read vi wartet bis daten empfangen wurden. wenn innerhalb der timeout zeit nix empfangen wurde bricht das programm mit einem fehler ab.
Verwende nicht die VISA/Serial-VIs, denen du nur die Portnummer übergeben musst. Verwende die VISA-VIs, mit denen du alles selber machen musst bzw. kannst. Diese VISA-VIs arbeiten mit einer Referenz.
Es gibt ein VISA-Property (dafür brauchst du die Referenz), das dir die akteulle Anzahl der Zeichen im Eingangspuffer angibt. Lies also dieses Property aus, und du weißt ob und wieviele Daten im Puffer stehen. Jetzt musst du nur noch um dieses Property den entsprechenden Sourcecode herumbauen: wenn was da, dann auslesen und bearbeiten; sonst eben nichts tun.


Nicht regelmäßiges Einlesen erzeugt Timeout fehler - IchSelbst - 05.12.2008 17:32

Ich hab dir mal ein Bild gemacht. Vielleicht kannst du ja was daraus lesen.


Nicht regelmäßiges Einlesen erzeugt Timeout fehler - Kex2006 - 08.12.2008 16:04

erstmal DANEK!!
also verstehe ich das richtig:
erst wird ausgelesen wieviele bytes am port anliegen. wenn weniger als die "gewollten" anliegen läuft die while schleife. aber maximal 100mal. dann geht das programm weiter an das Read visa
wenn bytes emofangen wurden soll das read Vi genau die anzahl von bytes auslesen. wenn aber keine bytes empfangen wurden soll das read vi auch nur 0 (null) bytes auslesen, und sendet daher keine fehlermeldung wenn keine daten anliegen?

PS: nächste aufgabe für mich ist die daten via tcp ip auszulesen. gibt es da gescheite beispiele wie das funktioniert in LabVIEW?

liebe grüße und nochmal danke


Nicht regelmäßiges Einlesen erzeugt Timeout fehler - IchSelbst - 08.12.2008 16:50

' schrieb:erst wird ausgelesen wieviele bytes am port anliegen. wenn weniger als die "gewollten" anliegen läuft die while schleife. aber maximal 100mal. dann geht das programm weiter an das Read visa
Jawohl, das verstehst du richtig.

Zitat:wenn bytes emofangen wurden soll das read Vi genau die anzahl von bytes auslesen.
Entweder genau die erforderliche Anzahl. Oder eben weniger, wenn nur weniger angekommen sind. Sind weniger angekommen, erkennt die Nachfolgeschaltung einen Fehler - und es kommt nicht zu einem Ablauffehler. Schon erst recht nicht zu einen Fehler aus dem VISA-VI heraus.

Zitat:wenn aber keine bytes empfangen wurden soll das read vi auch nur 0 (null) bytes auslesen, und sendet daher keine fehlermeldung wenn keine daten anliegen?
Im Prinzip genau so. Das VISA-VI selbst darf keinen Fehler machen, wenn es 0 lesen soll und 0 da sind.

Zitat:PS: nächste aufgabe für mich ist die daten via tcp ip auszulesen. gibt es da gescheite beispiele wie das funktioniert in LabVIEW?
Neu Frage, neues Thema ausmachen.