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!
Hallo,
ich möcht aus einem laufenden Programm mittels globaler variablen Boolsche Elemente in Eventcases in anderen laufenden vi´s auslösen.
Dieses klappt mittels Eigenschaftsknoten(SGL) auch aber dieser ausgelöste Event läuft dann premenent. Wie stoppe ich diesen oder wie kann ich diesen Eigenschaftsknoten wieder zurücksetzen?
Im Vorraus schonmal Danke für Eure Mühe.
24.09.2010, 11:20 (Dieser Beitrag wurde zuletzt bearbeitet: 24.09.2010 11:20 von schurzgasschweisser79.)
Ich dachte immer, man sollte nur ein VI für Benutzereingaben mit einer Eventstruktur machen und diese Eventstruktur startet dann gegebenenfalls andere VIs. Naja, egal, ich hab keine Ahnung wie das geht, was du möchtest- habs ma versucht, aber ich weiß es net - Was willst du denn machen?
Hallöchen,
ich habe mal am Ende und mal am Anfang der Ereignissequenz den Knoten zurückgestzt, die Globale zurückgesetzt..., hat leider alles nicht geholfen.
Ich möchte Drei bestehende Programme zur Steuerung verschiedener Geräte mit einem "Oberprogramm" Boolsche Werte setzen, Messwerte auslesen und im "Oberprog." Zeitstempel-synchron miteinander "verrechnen".
' schrieb:Eigenschaftsknoten können "beschrieben" werden. Somit musst nur ein false Boolean ranhänken.
Das ist doch garnicht das Problem...
Die Eventstruktur reagiert auf das ValueChange Event des Indicators/Controls, dem der Eigenschaftsknoten gehört.
Wert(SGL) löst genau das aus, was bei manueller Aktion auch passiert. Das registriert die ES. Wenn du bei jedem Schleifendurchlauf aus der glob. Variablen was in den Eigenschaftsknoten Wert(SGL) schreibst, löst du damit jedesmal das Event aus. Es scheint permanent zu laufen, tut es aber nicht. Du selbst stößt es bei jedem Schleifendurchlauf erneut an.
--> Grundkonzept überdenken. (Für mehr Hilfe musst du dann mal dein VI hochladen)
Gruß SeBa
Dieser Beitrag soll weder nützlich, informativ noch lesbar sein.
Er erhebt lediglich den Anspruch dort wo er ungenau ist, wenigstens eindeutig ungenau zu sein.
In Fällen größerer Abweichungen ist es immer der Leser, der sich geirrt hat.
Rette einen Baum!
Diesen Beitrag nur ausdrucken, wenn unbedingt nötig!
Wie kann ich denn Events in anderen VIs überhaupt auslösen?
Also ich drücke im haupt.vi ein Control und im neben.vi soll dann eine Eventstruktur ablaufen:
Ich kann doch dieses Event in meinem neben.vi gar nicht als solches definieren, weil neben.vi die Controls von haupt.vi nicht kennt.
Die Lösung mit der globalen Variable funktioniert meines Erachtens auch nicht:
Wenn ich eine globale Variable in meinem neben.vi einbaue, taucht diese bei den Eventdefinitionen auch nicht auf. Ich kann also den Inhalt der globalen Variable nicht auf "Wertänderung" von dem Eventmanager prüfen lassen.
Die einzige Möglichkeit mit globalen Variablen und Events zu arbeiten wäre, den Wert der gloablen Variablen in einem weiteren parallelen loop in neben.vi immer abzufragen und nur dann wenn eine Änderung auftritt, das Event auslösen zu lassen. Aber das ist doch totaler Quatsch. Dann brauch ich keine Eventstruktur mehr, sondern bin wieder beim Polling und kann da auch bleiben...
' schrieb:Wie kann ich denn Events in anderen VIs überhaupt auslösen?
Zwei Möglichkeiten fallen mir ein:
1. Queues
In dem einen VI eine Queue (oder auch einen Melder) beschreiben. In dem anderen VI warten, bis was in der Queue steht. Dann Queue auslesen und was arbeiten. Dieses Verfahren kann man auch als eventgesteuert ansehen. Beachte selbstverständlich, dass beide VIs auf die selbe Queue zugreifen.
2. Benutzerereignis
Kuck mal nach "Benutzerereignis". Hier wird eine Referenz erstellt, die die Ereignisquelle enthält. Diese Referenz wird (z.B.) von dem VI erstellt, das ein Event erzeugen will. Dann wird diese (Benutzerereignis-)Referenz an das VI weitergegeben, das das Event bearbeiten soll. Diese Referenz kann man mit Eventcases bearbeiten (guckst du Kontextmenü des Rahmens vom Ereigniscase: "Benutzerereignis anzeigen"). So kann man also in einem beliebigen VI eventgesteuert reagieren auf Ereignisse, die in einem anderen VI entstanden sind.
Jeder, der zur wahren Erkenntnis hindurchdringen will, muss den Berg Schwierigkeit alleine erklimmen (Helen Keller).
' schrieb:Das was der Gipler1977 will, geht doch dann gar nicht...
Das kann man so nicht sagen. Im Prinzip ist das, was er machen will, möglich. (Aber nicht mit GV, da gebe ich dir Recht.)
Wenn drei zu steuernde Geräte vorliegen, ist es schon schön, drei einzelne VIs zu verwenden. Das erzeugt aber automatisch Probleme bei der Synchronität. Im schlimmsten Falle muss man mit Synchronisier-Elementen (hier wohl Rendezvous) arbeiten. Das kann aber umständlich werden.
Einfacher könnte es sein, ein SubVI zu nehmen, das alle drei Geräte ausliest bzw. beschreibt. Dann bekommt man diese drei Geräte auch ohne entsprechende Elemente synchron. Seine drei VI samt gerätespezifischem FP kann er ohne weiteres beibehalten. Das SubVI könnte die von den Geräten gelesenen Daten per Melder/Queue an das entsprechende VI senden. Oder an eines, das alle Daten gleichzeitig haben will. Umgekehrt geht das natürlich auch. Jedes der drei VIs sendet Steuerinformationen zum SubVI.
Welcher der beiden Methoden (SubVI oder Rendezvous) einfacher ist, kommt darauf an wie die Schnittstellen zu den Geräten aussieht: Um RS232 mit AD und CAN zu synchronisieren, müsste man wohl Rendezvous nehmen.
Jeder, der zur wahren Erkenntnis hindurchdringen will, muss den Berg Schwierigkeit alleine erklimmen (Helen Keller).