18.01.2012, 17:47
Beitrag #1
|
Lien_Alere
LV-Testengineer
Beiträge: 26
Registriert seit: Feb 2011
2018
2004
DE
Deutschland
|
VISA: Wait on Event - Vor Timeout Abbrechen
Hallo,
ich habe schon viel gelesen und viel ausprobiert, jedoch mein Problem nicht gefunden. Ich kann mir nicht vorstellen, dass man ein Eventhandler in Labview entwickelt, der nur abbricht, wenn ein Ereignis eintrifft oder das Timeout abläuft.
Daher meine Frage. Kann man das VI VISA:Wait on Event abbrechen, bevor ein Ereignis eintrifft oder das Timeout zuschlägt?
Falls dies nicht möglich ist, macht dieses VI für mich persönlich kein Sinn. Dann kan ich auch wie gewöhnlich auf die Schnittstelle pollen. Oder??
Viele Grüße
Alere
|
|
|
18.01.2012, 20:13
Beitrag #2
|
GerdW
______________
Beiträge: 17.480
Registriert seit: May 2009
LV2021
1995
DE_EN
10×××
Deutschland
|
RE: VISA: Wait on Event - Vor Timeout Abbrechen
Hallo Lien,
Gegenfrage: Wie sollte eine Funktion namens "Warte auf Event" denn deiner Meinung nach ablaufen?
Entweder das gewünschte Ereignis tritt ein oder die Funktion meldet einen TimeOut. Den kann man dank ErrorCluster behandeln und weiter warten...
|
|
|
19.01.2012, 01:04
Beitrag #3
|
Lucki
Tech.Exp.2.Klasse
Beiträge: 7.699
Registriert seit: Mar 2006
LV 2016-18 prof.
1995
DE
01108
Deutschland
|
RE: VISA: Wait on Event - Vor Timeout Abbrechen
Das Timeout des VI Visa Wait On Event "schlägt nicht zu", sondern ganz im Gegenteil: Es ist Dein Freund und Helfer, um Das Programm zu stoppen.
Bei der Methode handelt es sich, genau genommen, um ein Mittelding von Polling und Eventbehandlung: Die VISA-Events werden augenblicklich behandelt, die Stop-Behandlung ist hingegen Polling .
Die Funktionsweise ist so: Das VISA-Vi erhält einen Timout, z.B 500ms, entsprechend der gewünschten Polling-Rate. Dieses Timeout hat nichts mit Deinem gewünschten Timeout zu tun. Wenn die 500ms Timeout erreicht sind, wird der Fehler abgefangen und ein einem neuen Schleifendurchlauf weiter auf Events gewartet. Bei dieser Gelegenheit wird jedesmal der Stop-Button gelesen.
Erst wenn das wirklich gewünschte Timeout erreicht ist, z.B von 10s, wird die Schleife und damit das Warten auf Ereignisse abgebrochen.
Habe mal das offizielle Beispiel zum VISA Wait On Event.VI modifiziert. Allerdings wäre das gar nicht notwendig gewesen, die Methode wird dort eigentlich schon praktiziert. Dort ist der Timeout lediglich unendlich: Das VI zählt so lange Ereignisse, bis mit dem Stopp-Knopf abgebrochen wird - und das Abbrechen funktioniert! Ungeschickt ist dort lediglich die Fehleranzeige. Das Visa-Timeout ist hier kein Fehler und sollte nicht groß als Fehler auf dem Frontpanel angezeigt werden.
Beispiel.vi (Größe: 41,69 KB / Downloads: 404)
|
|
|
19.01.2012, 10:35
Beitrag #4
|
Lien_Alere
LV-Testengineer
Beiträge: 26
Registriert seit: Feb 2011
2018
2004
DE
Deutschland
|
RE: VISA: Wait on Event - Vor Timeout Abbrechen
Hallo Lucki und GerdW,
vielen Dank für eure Antwort. Die Funktion ist also doch so, wie ich mir das gedacht habe . Die Beispiele hatte ich
schon begriffen. Jedoch dachte ich, man könnte das pollen mit diesem VI umgehen und es gäbe eine - sagen wir mal - schönere Lösung.
Dann werde ich mir das so annehmen und eine Lösung für mein Problem finden.
Viele Grüße
Alere
|
|
|
19.01.2012, 10:40
Beitrag #5
|
GerdW
______________
Beiträge: 17.480
Registriert seit: May 2009
LV2021
1995
DE_EN
10×××
Deutschland
|
RE: VISA: Wait on Event - Vor Timeout Abbrechen
Hallo Alere,
Zitat:ein Eventhandler ..., der nur abbricht, wenn ein Ereignis eintrifft oder das Timeout abläuft.
Wann soll er denn sonst noch abbrechen? Bzw. was genau ist dein Problem?
|
|
|
19.01.2012, 10:46
(Dieser Beitrag wurde zuletzt bearbeitet: 19.01.2012 10:53 von Lucki.)
Beitrag #6
|
Lucki
Tech.Exp.2.Klasse
Beiträge: 7.699
Registriert seit: Mar 2006
LV 2016-18 prof.
1995
DE
01108
Deutschland
|
RE: VISA: Wait on Event - Vor Timeout Abbrechen
Das Problem ganz ohne Polling zu lösen wäre möglich, wenn man das VI "VISA Wait on Event" nicht verwenden würde und statt dessen eine normale Ereignisstruktur dazu bringen könnte, auf das VISA-Ereignis zu warten. Vielleicht ist das möglich, aber zumindest ich stoße hier an meine Grenzen.
Aber was ist denn konkret an der gewählten Lösung auszusetzen? Wenn Du jetzt antwortest, das stört dich aus ästhetischen Gründen, hat keine praktischen Gründe, aber aus rein schöngeistigen Interesse suchst Du noch nach einer anderen Lösung - dann hätte ich dafür volles Verständnis, denn ich ticke genau so.
|
|
|
20.01.2012, 15:42
Beitrag #7
|
Lien_Alere
LV-Testengineer
Beiträge: 26
Registriert seit: Feb 2011
2018
2004
DE
Deutschland
|
RE: VISA: Wait on Event - Vor Timeout Abbrechen
Hallo,
genau das ist es. Polling belastet nur die Ressourcen des Rechners, falls das in dem VI nicht sowieso getan wird. Also eben nur zur Verschönerung und Vereinfachung .
Ich meinte das mit dem Ereignis so. Das Vi bricht nur ab, wenn ein VISA Event auftritt, dass dem Eventtype entspricht, welches ich an dem VI Eingang angeschlossen hab. In meinem Fall wäre das "Serial TermChar". Sprich, das VI wartet auf das von mir definierte Zeichen.
Meine derzeitige Lösung ist, dass ich das VI beende indem ich dieses Zeichen an die Schnittstelle schicke. Problem dabei ist, dass ich diese Art von Abbruch nicht genau zurückgeben kann. Ich weiß nur, dass ein Event eingetreten ist, aber nicht welches. Meins oder kam vielelicht doch ein von dem Gerät von außen, das eventuell ein Fehlereignis aufwies.
Ich spreche hier von Worst Case Fälle, die jedoch bei Qualitätskontrollen wichtig zu beachten sind .
Meine Lösung an NI, welche ich dort auch angebracht habe, ist dieses VI nicht nur auf ein bestimmten Eventtype reagieren zu lassen. Sondern auch die Möglichkeit zu schaffen auf ein Softwareereignis zu reagieren wie das drücken eines Stopbuttons, der sowieso durch eine Eventstructure ausgelöst wird.
So mein Vorhaben .
Viele Grüße
Alere
|
|
|
20.01.2012, 16:00
(Dieser Beitrag wurde zuletzt bearbeitet: 20.01.2012 16:00 von GerdW.)
Beitrag #8
|
GerdW
______________
Beiträge: 17.480
Registriert seit: May 2009
LV2021
1995
DE_EN
10×××
Deutschland
|
RE: VISA: Wait on Event - Vor Timeout Abbrechen
Hallo Alere,
ich fände es sehr befremdlich, wenn eine für VISA dedizierte Funktion plötzlich UI-Events abfragen sollte...
Außerdem wird dir (nicht nur) NI sagen, dass du doch gern im TimeOut-Case alle möglichen UI-Events abfragen kannst.
Zitat:Problem dabei ist, dass ich diese Art von Abbruch nicht genau zurückgeben kann. Ich weiß nur, dass ein Event eingetreten ist, aber nicht welches.
??? Du erzeugst das Event selbst und weißt nicht, welches Event zum Abbruch führt???
Außerdem bekommst du doch vom EventWait die Angabe zurück, welches Event ausgelöst hat ("Ereignistyp (Ausgang)")...
Zitat:Polling belastet nur die Ressourcen des Rechners,
Das mag sein. Aber ist dein Programm so heiß gestrickt, dass ein Abfragen eines UI-Elements alle ca. 250ms (im Timeout) zu Problemen führt?
|
|
|
| |