LabVIEWForum.de
Problem bei Realisierung einer State Machine - Druckversion

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



Problem bei Realisierung einer State Machine - mathez - 09.06.2015 16:03

Hallo zusammen,

ich versuche derzeit eine Datenaufzeichnung mittels einer boolschen Variable zu steuern. Ausgangssituation ist ein Sub-VI, welches Daten aus einer Queue bekommt und mit der globalen Variablen "datenaufzeichnung" die Aufzeichnung starten bzw. beenden soll. Die Daten werden in eine TDMS Datei geschrieben.

Das Hauptproblem war zunächst, dass die erstellte TDMS nach der Datenaufzeichnung, jedoch bei weiter laufendem Programm (das Programm soll praktisch durchlaufen) schon geöffnet werden können muss. Dazu muss die While-Schleife, in der die Datei beschrieben wird beendet werden. Versuche ich nun den Beginn und das Ende des Schreibvorgangs mit einer Variable zu lösen, funktioniert das nicht, da ich mit datenaufzeichnung = false sowohl die While-schleife beende, als auch den Case auf False setze und die Schleife so nicht sauber beendet wird.

Ich bin nun dazu übergegangen das Problem mit einer State-Machine zu lösen. Es funktioniert auch soweit. Im Case "Idle" wird abgewartet bis datenaufzeichnung = true ist, danach wird die Datei erstellt und beschrieben. Schalte ich nun jedoch datenaufzeichnung = false, so wird zwar der Schreibvorgang beendet, im nächsten Durchlauf von "Idle" jedoch steht Datenaufzeichnung immernoch auf "true" (warum???), so dass der Case "Idle" direkt durchlaufen und die Datei wieder geöffnet wird.

Irgendwo habe ich da einen Fehler drin, aber ich komme nicht weiter. Vielleicht könnt ihr mir weiter helfen. Ich habe zu diesem Zweck das VI mal angehangen.

Vielen Dank,

Mathes


RE: Problem bei Realisierung einer State Machine - Valduril - 10.06.2015 08:29

Hallo,


Im Grunde kann man man im VI selbst keinen Fehler sehen, aber warum sich deine boolsche Variable umschaltet kann man eher aus dem VI entnehmen, in dem du diese schaltest. Evtl. ist dein Frontpanel-Schalter im Schaltverhalten nur ein Latch statt einem richtigen Schalter
[attachment=53336]

Folgende Sachen sind noch aufgefallen:

- die Sequenzen sind unötig (Think Dataflow Wink )
- der Bedingungsanschluss der While-Schleife kann auch umgekehrt werden (Von "TRUE beendet die Schleife" zu "TRUE lässt die Schleife fortführen")
[attachment=53334]
(statt einem Vergleich mit FALSE wäre ein Negieren der globalen Variable auch besser, am betsen ist aber die vorherige Variante Wink )

Zur Übersichtlichkeit habe ich das VI mal angepasst, ich hoffe in der Schnelle nichts in der Semantik des Programmes geändert zu haben.
[attachment=53335]