LabVIEWForum.de - Frage zur Architektur: Statemachine und Wait for Events

LabVIEWForum.de

Normale Version: Frage zur Architektur: Statemachine und Wait for Events
Du siehst gerade eine vereinfachte Darstellung unserer Inhalte. Normale Ansicht mit richtiger Formatierung.
Hallo Zusammen,

ich hab eine Frage zur Architektur in LabView.

In einem Loop befindet sich eine Case Structure als StateMachine.
Es gibt die States Init, Wait for Events, Action 1 und Action 2.

Das Programm startet im Case Init und geht dann in den State Wait for Events weiter.

[attachment=62645]

In dem Case Wait for Events wird auf die Events von Buttons beobachtet. Werden die gedückt wechselt die Statemachine in die Case Action 1 bzw. Action 2. Nach dem Ausführen des Cases gehts wieder zurück in den Zustand Wait for Events. Zusätzlich wird auf das Event "Panel Close?" beobachtet.

In dem Init-Case wird in einer Loop so lang nach Hardware gesucht, bis diese angeschlossen / gefunden wird. Sprich das kann etwas dauern.

[attachment=62644]

Jetzt meine Frage:
Wenn ich jetzt im State Init das Programm über den Close(x)-Button das Programm beenden will klappt das natürlich nicht, da ich nicht im State "Wait for Events" vorbeikomme.
Was wäre hierzu eine sinvolle Lössung?
Passt meine grundsätzliche Programmarchitektur?

Vielen Dank
Viele Grüße
Christoph









[attachment=62646]
Hallo tuhpon,
deine While Schleife wird wahrscheinlich nie beendet.
Siehe hierzu:
https://www.labviewforum.de/Thread-Vergl...ier-Zahlen

Du musst zusätzlich dir in der While Schleife einen zusätzlichen Abbruch (Timeout) erzeugen.

Üblicherweise ist es so, dass die Software (Treiber oder was auch immer) einen Timeout zur Verfügung stellt.

Gruß Hubert
Hallo zusammen Smile

Vielen Dank Hubert, für deine Antwort.
Der Timeout ist eine gute Idee und könnte auch für mich interessant sein.

Mir ist klar, das die While-Schleife mit dem Vergleich beim Würfeln so nie beendet wird. Mir ging es mehr um die Herausforderung für die Frage zu illustrieren.

Worum geht es mir?
- Ist es möglich, während der Zeit bis der Timeout erreicht ist das Programm mit dem X (oben Rechts) zu beenden?
- Wie müsste die Architektur hierfür aussehen / geändert werden?

[attachment=62652]
[attachment=62653]


Aktuelle Herausforderung:
Wenn ich während der Zeit bis zum Timeout den X-Butten zum schließen drücke, passiet bis zum erreichen des Timeout nichts. Nach Ablauf des Timeouts wird dann das Programm jedoch geschlossen.
Sprich der X-Button-Click wird gecacht.
Dieses Verhalten will ich jedoch nicht.
Entweder die App soll sofort (während des Timeouts) geschlossen werden, oder aber das Clicken des X-Buttons soll ignoriert werden.

Danke für eure Unterstützung.

Viele Grüße
Christoph

[attachment=62651]
Hallo Christoph,

entgegen der NI Herangehensweise versuche ich Vorgänge, welche nur einmalig abgearbeitet werden müssen, in einer Ereignisstruktur abzuarbeiten. Dies hat für mich den Vorteil, dass ich auch einzelne Programmteile "manuell" starten und sie somit auf Funktion testen kann. Den Klick auf das Kreuzchen würde ich versuchen zu vermeiden, das kann man auch über Fehlerausgaben o.ä. abfangen, hier wieder dein Würfel. Das überarbeitete VI ist im Anhang, vielleicht hilft es ja weiter.
(13.02.2024 11:57 )tuhpon schrieb: [ -> ]- Wie müsste die Architektur hierfür aussehen / geändert werden?

Guten Morgen Christoph,

wenn dir die Hardwaresuche (wie Hubert schon erwähnt hat) einen Timeout gibt, springst du danach einmal kurz raus und fragst die Events ab um dann weiter zu suchen, spontan fällt mir da das Producer/Consumer Design ein, anbei mal kurz mit der NI Vorlage was zusammengeklickt.

Grüße Timo
Hallo Cristoph,

ich nutze für meine Applikation eine andere Struktur, die so wie ich es verstanden habe Deine Anforderungen erfüllt und ich mit der state machine die gleichen Probleme hatte:

in der äußeren gestapelten Sequenzstruktur wird Starten, Hauptprogramm und Schließen definiert.

Der Button "Exit" wird über eine Ereignisstruktur gesteuert und durch eine zu "Test ein" parallelen Schleife die ganze Zeit ausgelesen. Auch "Test ein" wird über eine while-Schleife ausgelesen, bis sie über "Exit" beendet wird. Weitere Buttons können auf die gleiche Art in parallelen Schleifen eingefügt werden.

Beim Funktionsring können mehrere Abläufe eingefügt werden, die wieder über eine gestapelte Sequenzstruktur in initialisierung, Ablauf und Aufräumen aufgeteilt werden.

Vielleicht hilft es ja. Smile
LG
Hallo Zusammen,

vielen Dank für eure Antworten.
Entschuldigt bitte die verspätete Antwort.

Ich werde aus euren Vorschlägen eine Lösung für mich erarbeiten.

Viele Grüße
Christoph
Referenz-URLs