LabVIEWForum.de
Schaltereinlesen innerhalb laufendem Programm erfolglos - Druckversion

+- LabVIEWForum.de (https://www.labviewforum.de)
+-- Forum: LabVIEW (/Forum-LabVIEW)
+--- Forum: LabVIEW Allgemein (/Forum-LabVIEW-Allgemein)
+--- Thema: Schaltereinlesen innerhalb laufendem Programm erfolglos (/Thread-Schaltereinlesen-innerhalb-laufendem-Programm-erfolglos)



Schaltereinlesen innerhalb laufendem Programm erfolglos - Stefan22 - 31.03.2006 14:48

Komischerweise gelingt es mir nicht in einer einfachen while
Schleife während des laufenden Programms, irgenwelche Schalterstellungen, welche vom Benutzer gedrückt werden, einzulesen.

Ich befinde mich in einer einfachen while Schleife, in der wenige Instrumenteneinstellungen vornehme und Messungen durchführe.
U.A. befindet sich noch ein delay Block von 5sec darin, jedoch keine Reaktion auf irgendwelche Art von Schalterveränderungen während des laufenden Programms.

Es muss doch möglich sein mit einem Schalter einen einfachen Interrupt zu erzeugen auch innerhalb einer laufenden Schleife, um diesen überall abrufen und auwerten zu können ?

Habt ihr ein paar Tips parat ?


Schaltereinlesen innerhalb laufendem Programm erfolglos - eg - 31.03.2006 15:08

Duzu dient ein Eventstructure, bitte LV-Help durchlesen


Gruss, Eugen


Schaltereinlesen innerhalb laufendem Programm erfolglos - Stefan22 - 01.04.2006 20:37

OK ich hänge mal mein kleines Beispiel VI dran - es geht
mir da nur um's Prinzip ich starte aus einer Ereignisstruktur auf eine
Buttoneingabe meine kleine Schleife.
Ich möchte nun nichts anderes machen, als mit einem anderen Button eine Aktion auslösen z.B. Pause oder Abbrechen -
das Problem ist nur, dass ich keinerlei Reaktion auf Buttoneingaben während dem laufenden Programm habe!


Schaltereinlesen innerhalb laufendem Programm erfolglos - Lucki - 02.04.2006 00:14

Habe mir das mal angesehen und sehe da drei Fehlerchen:

1.) Aus einer Pause kommst Du nie wieder heraus. Der Schalter muß sich innerhalb der Schleife befinden (Der Case ist überflüssig), damit er während der Pause laufend abgefragt wird. Siehe Hilfe zu While-Schleifen, dort ist dieser geradezu "klassische" Fehler explizit erwähnt. Außerdem sollte sich in der Schleife ein Timer befinden, damit Dein Prozessor nicht verglüht.

2.) Das Schaltverhalten von Pause ist zu ändern auf "Beim Loslassen schalten". Bei dir wird der Pauseschalter nach Drücken automatisch rückgesetzt, die Pause ist immer nur von winzig kurzer Dauer.

3) Beim Ereignis "Start Counter" ist bei Dir das Häkchen: "Frontpanel bis zum Ausführungsende des Ereignis-Case speren" gesetzt. Der Pause-Schalter ist also, wie alle anderen Bedienelemente auch, während des Zählens totgelegt. Du kannst schlichtweg nichts mehr bedienen.

Ludwig


Schaltereinlesen innerhalb laufendem Programm erfolglos - Stefan22 - 02.04.2006 09:29

Danke, werde die Punkte nochmal durchgehen.


Schaltereinlesen innerhalb laufendem Programm erfolglos - Stefan22 - 02.04.2006 21:28

Danke, hat soweit funktioniert, mit dem Häkchen, welches
im Frontpanel gesetzt war, und die Abfrage der Buttons in den
Ereignisstrukturen verhindert hat.
Nun habe ich noch eine zusätzliche Frage zur Afrage eines Buttons innerhalb
verschiedener Ereignisse -
als Beispiel will ich nun ein Abbruch Button in 2 unterschiedlichen Ereignissen
abfragen - hatte bisher für solche Fälle immer zusätzliche Lokale Variablen

erstellt, was jedoch anscheinend mit binären Schaltern in Kombi mit Latch -
Schaltverhalten zu Problemen führt.
Habt ihr hierfür auch eine alternative parat - danke


Schaltereinlesen innerhalb laufendem Programm erfolglos - Lucki - 02.04.2006 21:48

Schnelle Antwort, ohne dein vi angesehen zu haben. 2 Möglichkeiten:
1. Die beiden Ereignisse in einen Ereignisrahmen unterbringen. Mit + (hinzufügen) kannst du für einen Ereignisrahmen nämlich mehr als nur ein Ereignis definieren!
2 Du kannst deinen Button2 auch außerhalb des Ereignisrahmens, aber natürlich noch in der While-Schleife, abfragen. Natürlich wird Button2 dann bei jedem Ereignis abgefragt. Wenn du das nicht willst, dann setzt du den button2 in einen case, der nur dann auf true conditioniert ist, wenn eines der beiden Ereignisse eingetreten ist.
Nachtrag: Habe es jetzt doch kurz angesehen. Ich würde es im Sinne von 2 ändern. Die Ereignisstruktur winzig klein machen, dort überhaupt nichts reintun. Alles in die While-Schleife legen. Die jetzt nicht angeschlossenen Buttons Start up/ Start Down wirst Du dann an Cases anschließen, damit in der richtigen Situation jeweils das Richtige geschieht.
Evtl. wäre noch ein Ereignis für Stop sinnvoll
Ludwig


Schaltereinlesen innerhalb laufendem Programm erfolglos - Stefan22 - 03.04.2006 07:51

danke, das hilft mir in meinem speziellen Fall aber leider nicht weiter, da ich mich in einer Ereignisstruktur befinde und in dieser 2 Cases abfrage.
In jedem dieser Cases befindet sich auch noch eine While Schleife in der ich dann ein und denselben Schalter abfragen will.
Das aktuelle Problem ist nun, ich kann zwar in einer while Schleife diesen Eingabe Button/Schalter (Boolesch) abfragen, aber nicht in der anderen.
Hatte zwar schon eine lokale Variable dieses Schalters verwendet und diese dann in der zweiten while Schleife abgefragt, jedoch kann ich dann kein Latch Schaltverhalten verwenden.

Somit frage ich nun, wie kann ich auf diesen Button in einer zweiten Abfrage verweisen ? Alternativ zum Erstellen von einer lokalen Variable ??


Schaltereinlesen innerhalb laufendem Programm erfolglos - Lucki - 03.04.2006 09:41

Alles was Du fragst sind Scheinprobleme, die erst durch diesen ganzen total redundanten und verhunzten Code selbst entstehen. Es genügt ein Bruchteil an Code, der so einfach ist, daß die Probleme entfallen. Allein schon das Benutzen der Ereignisstruktur heißt hier mit Kanonen auf Spatzen schießen.
Anbei ein Vorschlag