LabVIEWForum.de
Problem bei Eventcase in State Machine - Druckversion

+- LabVIEWForum.de (https://www.labviewforum.de)
+-- Forum: LabVIEW (/Forum-LabVIEW)
+--- Forum: LabVIEW Allgemein (/Forum-LabVIEW-Allgemein)
+--- Thema: Problem bei Eventcase in State Machine (/Thread-Problem-bei-Eventcase-in-State-Machine)



Problem bei Eventcase in State Machine - Pate Toni - 30.08.2007 09:25

Servous Leute,

ich hab ein kleines Problem. Ich habe ein Evetcase in eine State Machine eingebunden. Doch diese State Machine arbeitet mit FGV. Um die FGV zu aktualisieren, muss man erst ein Event durchgeführt werden. Meine Events bestehen eigentlich daraus, dass ich die Einstellung speichere, lade oder beende, sprich zum aktualisieren eher ungünstig. Habt ihr eine Idee, wie ich dies änderen könnte???
Hier noch die zwei VIs:

[attachment=8349](VI LV 8.2)
[attachment=8350](VI LV 8.2)


Problem bei Eventcase in State Machine - Achim - 30.08.2007 10:58

Ich versteh das Problem nicht so richtig...wann willst du die FGV denn aktualisieren? Wieso willst du sie aktualisieren, wenn doch keine Änderung (= Event) stattgefunden hat?

Willst du sie initialisieren, bevor dein Programm startet? Dann musst du halt vor deine Programmschleife mal ein SubVI platzieren, dass eben diese Initialisierung (inkl. Lesen der Binärfiles) durchführt...

Gruss
Achim


Problem bei Eventcase in State Machine - Lucki - 30.08.2007 11:29

Das kommt oft vor, daß man beim Programmaufruf einen Ereignisrahmen ausführen muß, im weiteren Programmverlauf aber nur bei Wertänderung. Ich wundere mich, daß NI dafür kein Werkzeug anbietet.
Solange es das Werkzeug nicht gibt, kann ich Dir da nur den ""Luckischen Spezialtrick" empfehlen:
Im Initialisierungsteil weise ich dem Eigenschaftsknoten "Wert, signalisierend" einen Wert aus einer lokalen Variablen desselben Elementes zu. Es findet zwar damit keine reale Wertändernug statt, aber als wertänderndes Ereignis zählt die Operation doch.
(Das Schaltverhalten muß gegebenenfalls geändert werden)
[attachment=8359]


Problem bei Eventcase in State Machine - Achim - 30.08.2007 11:47

Alternativ zu Lucki's Vorschlag:

Mach in deine Ereignis-Struktur mal nen (leeren) Timeout-Case und schließ ne Timeout-Zeit an...dann funktioniert auch deine Schleife ohne Ereignis und du kannst sie mit "load_FGV" initialisieren...so kann sich NI auch das von Lucki vorgeschlagene "Werkzeug" sparenWink


Problem bei Eventcase in State Machine - Pate Toni - 30.08.2007 14:34

@achim
kannst mir ein Bild oder so von deinen vorschlag zeigen oder so. Hab nicht ganz verstanden, was du meinst.

EDIT

ich hab's, danke!!!


Problem bei Eventcase in State Machine - Achim - 30.08.2007 17:11

' schrieb:EDIT

ich hab's, danke!!!

Trotzdem nochmal:

[attachment=8370]


Problem bei Eventcase in State Machine - eg - 30.08.2007 18:40

Ich habe zwar nicht so ganz verstanden was du genau mit FGV machen willst. Aber nach dem Durchlesen was Achim und Lucki dazu geschrieben haben komme ich langsam darauf.

Im Anhang findest du drei Varianten, wie man die Initialisierung und Denitialisierung machen kann. Ich bevorzuge die dritte Variante. Der Trick dabei ist (ausser der ersten Variante) die State Machine zu mischen.

eg

(VIs LV 7.1)


Problem bei Eventcase in State Machine - rolfk - 03.09.2007 10:11

' schrieb:Das kommt oft vor, daß man beim Programmaufruf einen Ereignisrahmen ausführen muß, im weiteren Programmverlauf aber nur bei Wertänderung. Ich wundere mich, daß NI dafür kein Werkzeug anbietet.
Solange es das Werkzeug nicht gibt, kann ich Dir da nur den ""Luckischen Spezialtrick" empfehlen:
Im Initialisierungsteil weise ich dem Eigenschaftsknoten "Wert, signalisierend" einen Wert aus einer lokalen Variablen desselben Elementes zu. Es findet zwar damit keine reale Wertändernug statt, aber als wertänderndes Ereignis zählt die Operation doch.
(Das Schaltverhalten muß gegebenenfalls geändert werden)
[attachment=35176:Ereignis.png]

Ich frage mich was Du denn für ein Werkzeug erwartest. Viel mehr als ein Property um die entsprechende Eventbehandlung anzustossen wird das wohl nicht sein und das hast Du ja mit dem "Set Value, signalisierend" Property schon.

' schrieb:Im Anhang findest du drei Varianten, wie man die Initialisierung und Denitialisierung machen kann. Ich bevorzuge die dritte Variante. Der Trick dabei ist (ausser der ersten Variante) die State Machine zu mischen.

Das ist auch meine bevorzugte Weise. Meist kommst Du bei komplexeren State Machines ohnehin in die Situation das bestimmte Aktionen (update von bestimmten User Interface Controls) aus verschiedenen Events getriggert werden müssen und dann ist es immer praktisch wenn man das in einen seperaten State in der Case Behandlung legen kann und dann aus den verschiedenen anderen States und der Eventabhandlung aufrufen kann. Solange ein anderes Event als Idle im Schieberegister ist wird das im entsprechenden Case ausgeführt und im Idle Case wird die LabVIEW Eventstruktur ausgeführt (eventuel mit Timeout um beispielsweise regelmässig eine Zeitinformation zu aktualisieren oder um irgendwelche externen Geräte zu pollen).

Rolf Kalbermatter