03.07.2006, 18:03
(Dieser Beitrag wurde zuletzt bearbeitet: 03.07.2006 18:04 von Teutates.)
Beitrag #1
|
|
|
03.07.2006, 18:08
Beitrag #2
|
cb
LVF-SeniorMod
Beiträge: 1.731
Registriert seit: Feb 2006
2018SP1
2001
EN
40xxx
Deutschland
|
Eventstruktur Frage
' schrieb:Angenommen ich habe eine Eventstruktur mit diversen Events bezogen auf Buttons usw...
Nun belege ich einen Eventcase zum Beispiel Messung starten mit einem Button dafür und es wird eine
Whileloop initialisiert wie kann ich jetzt trotzdem in diesem Falle im Event die Whileloop durch Benutzerinteraktion abbrechen. Problem ist das die Benutzerschnittstellen erst nach Ende des Eventcases abgefragt werden.
So wie im Bild mit der Property Node gehts ja schon mal nicht weil keine Abfrage des Buttons möglich ist
das macht man am besten mit einer State-Machine, die durch eine Q gesteuert wird und 2 parallelen While-Schleifen. In der einen while-Schleife werden die Buttons über die Event-Struktur abgefragt, in der 2. While-Schleife werden die States aus der Queue abgearbeitet:
|
|
|
03.07.2006, 19:34
Beitrag #3
|
Teutates
LVF-Gelegenheitsschreiber
Beiträge: 73
Registriert seit: Nov 2004
7.1 Developer Suite inkl. Vision
2004
kA
Deutschland
|
Eventstruktur Frage
Danke schon mal für die Antwort, kannst Du mir ein ganz simples Beispiel geben hab noch nie in der Art was programmiert mit Warteschlangen falls Du Zeit hast. Keine Ahnung so in der Art die eine Whileloop addiert immer eins dazu und der Wert wird angezeigt die Andere fragt den Button Stop ab oder so in Art.
Um den Rest gehts die Sache zu synchronisieren. Wenn nicht auch kein Ding muss ich mich dann mal reinfuchsen.
' schrieb:das macht man am besten mit einer State-Machine, die durch eine Q gesteuert wird und 2 parallelen While-Schleifen. In der einen while-Schleife werden die Buttons über die Event-Struktur abgefragt, in der 2. While-Schleife werden die States aus der Queue abgearbeitet:
|
|
|
03.07.2006, 20:17
Beitrag #4
|
Lucki
Tech.Exp.2.Klasse
Beiträge: 7.699
Registriert seit: Mar 2006
LV 2016-18 prof.
1995
DE
01108
Deutschland
|
Eventstruktur Frage
' schrieb:Problem ist das die Benutzerschnittstellen erst nach Ende des Eventcases abgefragt werden.
Falsch: Das ist nur dann der Fall, wenn Du im Bearbeitunsmenue für das betreffende Ereignis das Häkchen "Frontpanel bis zum Ausführen des Ereignis Case sperren" gesetzt hast. Standardmäßig ist das der Fall. Also einfach das Häckchen wegnehmen und alles läuft so wie Du es Dir wünschst.
|
|
|
03.07.2006, 21:26
Beitrag #5
|
cb
LVF-SeniorMod
Beiträge: 1.731
Registriert seit: Feb 2006
2018SP1
2001
EN
40xxx
Deutschland
|
Eventstruktur Frage
' schrieb:Danke schon mal für die Antwort, kannst Du mir ein ganz simples Beispiel geben hab noch nie in der Art was programmiert mit Warteschlangen falls Du Zeit hast. Keine Ahnung so in der Art die eine Whileloop addiert immer eins dazu und der Wert wird angezeigt die Andere fragt den Button Stop ab oder so in Art.
Um den Rest gehts die Sache zu synchronisieren. Wenn nicht auch kein Ding muss ich mich dann mal reinfuchsen.
ich hab dir mal eine ganz einfache State-Machine erstellt, die auf Queues (String) basiert. In der oberen While-Schleife läuft die Event-Struktur, die jedesmal etwas in die Q schiebt, wenn ein Event eintritt. In der unteren While-Schleife wird die Q ausgelesen und wenn die Case-Struktur mit dem String was anfangen kann, die entsprechende Aktion ausgeführt.
In dem Beispiel läuft das so: du drückst auf den STOP-Button, die Eventstruktur merkt das und schiebt den String "Stop" in die Q. In der unteren While-Schleife wird der String aus der Q rausgeholt und "verarbeitet", sprich im Case "Stop" wird die untere While-Schleife ebenfalls angehalten.
|
|
|
03.07.2006, 22:35
Beitrag #6
|
Teutates
LVF-Gelegenheitsschreiber
Beiträge: 73
Registriert seit: Nov 2004
7.1 Developer Suite inkl. Vision
2004
kA
Deutschland
|
Eventstruktur Frage
Thanks an alle , werd das mal testen
Gruß
T.
' schrieb:ich hab dir mal eine ganz einfache State-Machine erstellt, die auf Queues (String) basiert. In der oberen While-Schleife läuft die Event-Struktur, die jedesmal etwas in die Q schiebt, wenn ein Event eintritt. In der unteren While-Schleife wird die Q ausgelesen und wenn die Case-Struktur mit dem String was anfangen kann, die entsprechende Aktion ausgeführt.
In dem Beispiel läuft das so: du drückst auf den STOP-Button, die Eventstruktur merkt das und schiebt den String "Stop" in die Q. In der unteren While-Schleife wird der String aus der Q rausgeholt und "verarbeitet", sprich im Case "Stop" wird die untere While-Schleife ebenfalls angehalten.
[attachment=28414:attachment]
|
|
|
04.07.2006, 12:28
Beitrag #7
|
Achim
*****
Beiträge: 4.223
Registriert seit: Nov 2005
20xx
2000
EN
978xx
Deutschland
|
Eventstruktur Frage
Hi,
das mit der State Machine ist gut! Allerdings sollte man hier keine Strings verwenden, da besteht immer die Gefahr, dass man Schreibfehler macht. Besser wäre es, hier ein Enum als strikte Typdefinition zu erstellen, in dem die unterschiedlichen States ("Cases") definiert werden. Dieses Enum kann man dann direkt an eine Casestruktur anschließen, und es werden dann automatisch die erforderlichen Cases benannt. Mit einem Rechtsklick kann man dann auf der Struktur "Add Case for every value" alle definierten Fälle erzeugen. Ändert man dann den Namen eines Cases im TypDef, wird automatisch auch der entsprechende Case aktualisiert!
Die Enums kann man wie von i2dx gezeigt über ne Queue schicken, aber auch ein Schieberegister in ner Schleife funktioniert. Dann muss man das alles ein klein wenig anders aufbauen, aber man spart sich eine zweite Schleife. Aber das ist alles Geschmackssache...;-)
Gruss
Achim
"Is there some mightier sage, of whom we have yet to learn?"
"Opportunity is missed by most people because it is dressed in overalls and looks like work." (Thomas Edison)
|
|
|
05.07.2006, 09:11
(Dieser Beitrag wurde zuletzt bearbeitet: 05.07.2006 09:13 von Lucki.)
Beitrag #8
|
|
|
| |