INFO: Dieses Forum nutzt Cookies...
Cookies sind für den Betrieb des Forums unverzichtbar. Mit der Nutzung des Forums erklärst Du dich damit einverstanden, dass wir Cookies verwenden.

Es wird in jedem Fall ein Cookie gesetzt um diesen Hinweis nicht mehr zu erhalten. Desweiteren setzen wir Google Adsense und Google Analytics ein.


Antwort schreiben 

Auf Benutzereingabe in einer State-Machine warten, ohne diese zu blockieren



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!

08.05.2015, 16:21 (Dieser Beitrag wurde zuletzt bearbeitet: 08.05.2015 16:22 von Gigantbohne.)
Beitrag #1

Gigantbohne Offline
LVF-Neueinsteiger


Beiträge: 9
Registriert seit: Sep 2014

2014 student edition
2014
DE


Deutschland
Auf Benutzereingabe in einer State-Machine warten, ohne diese zu blockieren
Guten Tag,

bisher habe ich leider keine Lösung für mein Problem finden können, da viele Ansätze auf Event-Cases oder globalen Variablen basieren. Da dies allerdings für mich nicht in Frage kommt bzw. ich diese Lösungen nur ungern benutzen möchte, frage ich hier erstmal nach.

Nun aber zur Beschreibung:

Vereinfacht gesagt, kann man mit meinem Programm nach Interfaces scannen, ein Protokoll für jedes Interface auswählen und dann Daten von den Interfaces abholen.
Diese Funktionalität ist mit einer state-machine realisiert. Die Protokollauswahl geschieht in einem Sub-VI.

Soweit so gut, nun zum Problem:

Das Sub-VI für die Protokollauswahl soll nicht warten, bis der Benutzer dort "DONE" gedrückt hat, sondern solange nichts gedrückt wurde "FALSE" ausgeben. Dieses "FALSE" wird dann im Haupt-VI ausgewertet, damit weitere cases folgen können und das Programm nicht festhängt. Diese Funktionalität ist erwünscht, um z.B. von den Interfaces kommende Daten parallel zu sammeln, während Protokolle im Sub-VI geändert oder Interfaces abgewählt werden (Protokoll = "none").

Mein Lösungsansatz:

Das Sub-VI für die Protokollauswahl beinhaltet ebenfalls eine state-machine, welche von außen gesteuert werden kann. Die cases sehen wie folgt aus:

1. - FP öffnen, Interfaces inkl. der Protokolle in Auswahlliste schreiben
2. - done gedrückt ? NEIN: "FALSE" ausgeben | JA: Protokollauswahl schreiben, "TRUE" ausgeben, FP schließen & VI schließen

Das Haupt-VI wertet das "TRUE/FALSE" aus und bestimmt so den nächsten case für das Sub-VI und seine eigenen nächsten cases. Solange "DONE" im Sub-VI also nicht gedrückt wurde, schreibt das Haupt-VI wieder den Befehl für case 2, sodass das Sub-VI beim nächsten Durchlauf wieder dort landet und schaut, ob der Benutzer nun "DONE" gedrückt hat. Währenddessen macht jedoch das Haupt-VI weiter seine Aufgaben. Das Sub-VI soll solange also offen bleiben, quasi wie ein Dialog.

Problem ist, dass das Sub-VI jedes Mal neu gestartet wird, wenn aus meiner Haupt-state-machine der state für das Sub-VI übergeben wird. Ich habe das mit einem Zähler im Sub-VI überprüft. So wird mein Case 1 natürlich nur einmal aufgerufen, danach landet das Sub-VI stets in Case 2, bis man "DONE" drückt. Die Auswahlliste wird also nur beim ersten Durchlauf beschrieben, danach ist sie immer leer. Außerdem flackert es natürlich wie sau.

Vielleicht klappt es garnicht so, wie ich denke und bei jeder Übergabe des cases für das Sub-VI wird es automatisch neu aufgerufen ?! Habe schon sämtliche Dinge in den VI-Settings ausprobiert, aber irgendwie hilft alles nischt. Sad

Ich hoffe, dass ich mein Problem einigermaßen verständlich schildern konnte. Bilder hochladen kann ich leider nicht, sonst würde ich das tun.

Mit sonnigem Gruß,
Gigantbohne
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
Anzeige
30
Antwort schreiben 


Nachrichten in diesem Thema
Auf Benutzereingabe in einer State-Machine warten, ohne diese zu blockieren - Gigantbohne - 08.05.2015 16:21

Möglicherweise verwandte Themen...
Themen Verfasser Antworten Views Letzter Beitrag
  Machine learning Hubert R. 3 2.521 29.08.2023 10:10
Letzter Beitrag: Hubert R.
  Programm beenden State Machine simcum 3 3.431 17.10.2020 20:57
Letzter Beitrag: BNT
  woher kommt diese Meldung? gottfried 2 2.943 14.09.2020 14:48
Letzter Beitrag: gottfried
  Wie auf abgearbeitete Queue warten mez15 11 8.075 28.09.2017 13:02
Letzter Beitrag: TR61
  Queued State Machine: IDLE Optimierung ALuehmann 3 4.929 14.02.2017 14:00
Letzter Beitrag: HVo
  State machine und Typdefinition meta_ir 4 4.448 09.01.2017 12:47
Letzter Beitrag: meta_ir

Gehe zu: