LabVIEWForum.de - State Machine mit Instrument - richtige Umsetzung

LabVIEWForum.de

Normale Version: State Machine mit Instrument - richtige Umsetzung
Du siehst gerade eine vereinfachte Darstellung unserer Inhalte. Normale Ansicht mit richtiger Formatierung.
Hallo zusammen,

ich habe ein VI erstellt, welches eine Verbindung zu einem Instrument (Signalgenerator von Agilent) herstellen soll. Zur Einstellung von Amplitude, Frequenz etc. habe ich verschiedene Numeric Controls und Ring‘s erstellt. Zudem habe ich eine Tabelle in der man gewünschte Einstellung hinzufügen kann über den „Add“-Button. Außerdem kann man die Zeilen löschen über den „delete“-Button und ändern über den „change“-Button. Die Tabelle dient lediglich zu Speicherung von bestimmten Einstellungen (eine Speichereinheit wird später noch erstellt).

Zu meiner Frage:
Das Instrument soll genau die Werte übernehmen, welche ich über die Kontrollelemente im Frontpanel einstelle. Mir wurde nun geraten als Design Pattern für meinen Code eine State Machine zu verwenden. Macht dies denn Sinn so wie ich es umgesetzt habe? Mein VI findet ihr angehängt.

Ich freue mich auf Tipps!

Vielen Dank im Voraus.

Gruß
Lea
(24.06.2022 10:04 )mriworld schrieb: [ -> ]Das Instrument soll genau die Werte übernehmen, welche ich über die Kontrollelemente im Frontpanel einstelle. Mir wurde nun geraten als Design Pattern für meinen Code eine State Machine zu verwenden. Macht dies denn Sinn so wie ich es umgesetzt habe? Mein VI findet ihr angehängt.

Was macht denn dein VI:
Es wartet 100 Sekunden um sich dann zu beenden.. (Unten links startest du das Shiftregister mit 'Stop'.)

gehen wir mal davon aus, dein Shiftregister soll bei 'Initialize' starten dann
  1. machst du nichts für 100s und wechselst dann zu 'Table'
  2. hier wartest du unendlich lange (mindestens 100s) bis jemand einen der 3 Knöpfe drückt. ACHTUNG: Hier werden die Werte genommen, die am Anfang des States drin stehen. Dann wechselst du auf 'Instrument'
  3. hier stellst du alles ein und beendest das Programm (wieder mit 100s Wartezeit)

Das klingt nicht gewollt. Vorallem die 100000 ms Wartezeit und die Bedienelemente außerhalb der Event-Struktur.

Es gibt im Example finder das 'State Machine Fundamentals', das sollte ganz gut passen zu dem was du machen willst. In der Menüleiste: 'help' - 'Finde Examples', dort entweder über die Suche oder 'Fundamentals' - 'Loops and Structures'

Soweit mal kurz und knapp.

MfG Timo
Hallo Timo,

vielen Dank für die Hilfe.
Zitat:Unten links startest du das Shiftregister mit 'Stop'

Das war leider ein Fehler, den habe ich schon korrigiert und das Timing nun raus genommen.

Zitat: die Bedienelemente außerhalb der Event-Struktur.
Hier wusste ich leider nicht, wie ich es anders umsetzten soll. Einerseits will ich das man über die Bedienelemente das Instrument steuert und andererseits soll man die eingestellten Werte gleichzeitig auch in der Tabelle abspeichern können.
Am besten wäre es die States irgendwie zu verbinden. Das hatte ich auch schon einmal ausprobiert und nur Fehlermeldungen bekommen.

Gibt es die Möglichkeit die beiden Prozesse zu verbinden? Und ist eine State Machine da überhaupt sinnvoll?
(26.06.2022 10:05 )mriworld schrieb: [ -> ]Hier wusste ich leider nicht, wie ich es anders umsetzten soll. Einerseits will ich das man über die Bedienelemente das Instrument steuert und andererseits soll man die eingestellten Werte gleichzeitig auch in der Tabelle abspeichern können.
Am besten wäre es die States irgendwie zu verbinden. Das hatte ich auch schon einmal ausprobiert und nur Fehlermeldungen bekommen.

Hier sehe ich erstmal kein Problem eine locale Variable zu verwenden um diese Werte dann in die Tabelle zu speichern (so würde ich es machen, bin aber auch kein Profi..). Das Bedienelement dann zum Steuern des Instruments lesen.

Wenn du das Beispiel von LabVIEW selbst mal anschaust siehst du auch ein grundlegenden Unterschied. Hier wird nach jeder Eingabe wieder zurückgesprungen zur Eventstruktur. In deinem Fall würde das klicken auf eines der Buttons in einen State springen, indem der Code (den du da in der Eventstruktur hast) ausgeführt wird und anschließend wieder zurück und auf eine Eingabe wartet. Hierfür benötigst du dann auch einen separaten Start Knopf, kannst aber unabhängig Werte der Tabelle hinzufügen oder löschen, ohne das Gerät zwischendrin einzustellen.

Hilfreich und übersichtlicher ist es sicherlich die Einstellungen in ein Cluster zusammenzuschließen.

MfG Timo
Referenz-URLs