Wenn dein Problem oder deine Frage geklärt worden ist, markiere den Beitrag als "Lösung",
indem du auf den "Lösung" Button rechts unter dem entsprechenden Beitrag klickst. Vielen Dank!
04.12.2009, 00:54 (Dieser Beitrag wurde zuletzt bearbeitet: 04.12.2009 07:07 von jg.)
ich möchte ein VI schreiben um ein Messgerät zu steuern. Ein nötige Funktion ist dabei das erhöhen/erniedrigen einer Spannung.
Da der zur Verfügung stehende Rechner sehr langsam ist und es nach meinem bescheidenen LabVIEW Wissen die sauberere Art ist wollte
ich die Eventstruktur verwenden.
Im Highlighting Modus und auch wenn man ein WAIT in das EVENTCASE einbaut hängt sich das VI auf wenn man zu oft auf den Button zum erhöhen bzw erniedriegen
drückt.
Frage: Wie erreiche ich das der EventBuffer ausgestellt wird ? Der scheint mir das Prob zu sein.
Es kommt durchaus vor das man besagte Buttons 10 mal pro Sekunde drückt, angenommen das ausführen des Events dauert eine Sekunde. Klickt der Nutzer
dann ohne es zu wissen immer mehr den Buffer voll bis es abschmiert ?
kann es sein das man trotz eventstructur noch immer die while loop aussenrum braucht ?
es scheint dann zu gehen, auch wenn es nervig ist das der EVENT BUFFER an ist. Wenn die Ausführung eines Events lange dauert
schiesst man so mit seinen Befehlen übers Ziel hinaus.
finde das total doof an LabVIEW immer so eine false loop drum zu basteln, geht das auch anders ?
' schrieb:kann es sein das man trotz eventstructur noch immer die while loop aussenrum braucht ?
Richtig erkannt. Sonst läuft das VI nur einmal, bis das Event abgearbeitet wurde.
' schrieb:es scheint dann zu gehen, auch wenn es nervig ist das der EVENT BUFFER an ist. Wenn die Ausführung eines Events lange dauert
schiesst man so mit seinen Befehlen übers Ziel hinaus.
Abarbeitungen, die lange dauern, programmiert man im Normalfall auch nicht IN den Fall einer Eventstruktur.
' schrieb:finde das total doof an LabVIEW immer so eine false loop drum zu basteln, geht das auch anders ?
2. Beitrag hier, und schon LabVIEW doof schimpfen?
Gruß, Jens
P.S.: Deine Tastatur hat doch eine Shift-Taste? Bitte auch sinnvoll verwenden (vgl. LVF-Regeln, letzter Abschnitt).
Wer die erhabene Weisheit der Mathematik tadelt, nährt sich von Verwirrung. (Leonardo da Vinci)
!! BITTE !! stellt mir keine Fragen über PM, dafür ist das Forum da - andere haben vielleicht auch Interesse an der Antwort!
Die While-Loop ist dann auch sinnvollerweise mit einem Button verknüpft, das einen Namen wie Stopp oder Ende oder... trägt.
Natürlich benötigt der Stopp-Button einen eigenen Event-Fall, in dem der Knopf gelesen wird und sein Wert an das Stopp-Terminal übergibt.
Ich weiss nicht ob es bereits Queues in LabVIEW 7.1 gibt, jedoch würde dir diese Art der Producer/Consumer Architektur dein Problem wahrscheinlich lösen
Hier mal ein Screenshot, da ich nicht auf 7.1 runterspeichern kann
Hoffe das hilft dir weiter
Anzeige
04.12.2009, 10:01 (Dieser Beitrag wurde zuletzt bearbeitet: 04.12.2009 10:06 von jg.)
' schrieb:Ich weiss nicht ob es bereits Queues in LabVIEW 7.1 gibt, jedoch würde dir diese Art der Producer/Consumer Architektur dein Problem wahrscheinlich lösen
Hier mal ein Screenshot, da ich nicht auf 7.1 runterspeichern kann
Queues und Notifier gibt es schon ewig.
@unicorn:
' schrieb:Vielleicht ist das Programm auch wegen des 2-Sekunden Wartens so träge?
Bitte lieber eigenen Beitrag nochmals editieren als im 2-Minuten Rhythmus 2 Nachrichten schreiben.(s. auch LVF-Regeln).
Gruß, Jens
Wer die erhabene Weisheit der Mathematik tadelt, nährt sich von Verwirrung. (Leonardo da Vinci)
!! BITTE !! stellt mir keine Fragen über PM, dafür ist das Forum da - andere haben vielleicht auch Interesse an der Antwort!
Vielen Dank für die vielen Antworten, tolles Forum hier.
Zu meiner Verteidigung :
Die Regeln habe ich gelesen, aber meine LabVIEW version steht im Profil, aber sehe schon den Nutzen und werde sie immer mit angeben ab sofort.
Die 2 Sekunden Wartezeit hatte ich deshalb ins VI geschrieben weil die Spannung an meiner Probe nicht in beliebig grossen Schritten geändert werden darf.
Gibt der Nutzer beispielsweise eine Erhöhung um 2 V ein so braucht die VI Ausführung vielleicht länger als der Geduldsfaden der
Nutzer ist (durch das Programm wird die Spannung in 0,05 V Schritten mit Pausen dazwischen geändert ), die klicken nochmal und am Ende habe ich vielleicht 4 , 8 oder mehr Spannung auf der Probe.
Ich brauch also einen Button der anzeigt das die Ausführung noch läuft (dadurch das er eingedrückt ist) und während dieser Zeit keine Befehle akzeptiert/ Events generiert.
Die Antwort von Nussbaumer verstehe ich leider nicht , aber werde mir das mal anschauen. jedenfalls scheint es ein Lösung ohne Eventstructur zu sein (Wollte gerne Event benutzen weil ich dachte das wäre ein gutes Konzept, so spart man sich lauter leere Case Fälle).
Darum vielleicht nochmal die Frage:
Wie werde ich den Event Buffer los oder ist EventStructur wie von Jens geäußert nicht geeignet ?
Bei einer while Schleife könnte man ja die Button disabeln , nur das EventStructur scheint mir eben die Buttons in gewisser Weise zu ignorieren.
Die Buttons dienen bei einer Eventstructur eher dazu das der Benutzer was drücken kann statt der Steuerung des Programms.
Habe dir mal ein Beispiel gemacht, das nur alle 2 Sek. ein Event verarbeitet.
Denn "langsamen Prozess" (im Bsp. die 2 Sek. warten) würde ich so machen wie Nussbaumer gezeigt hat.
.·´¯)--> Leben ist das, was dir passiert, wenn du eifrig dabei bist andere Pläne zu machen <--(¯`·.