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 

Problem Ereignisstruktur



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!

09.12.2010, 17:29 (Dieser Beitrag wurde zuletzt bearbeitet: 15.02.2011 13:35 von Dennis.Moser.)
Beitrag #1

cuber1 Offline
LVF-Gelegenheitsschreiber
**


Beiträge: 59
Registriert seit: Oct 2009

2009
2009
kA

71634
Deutschland
Problem Ereignisstruktur
Pünktlich zum Feierabend treten wiedermal Probleme auf Huh;

hat jemand a) ne Idee, wie man es lösen kann?
und b) warum dies so ist?

Ich hab eine State-Maschine in der 2 Eventstrukturen in unterschiedlichen Cases stecken. (siehe Programm in Anhang)

Wenn ich nun das Array im Programm beim ersten mal antippe funktioniert es Problem los. Beim zweiten mal passiert dann einfach gar nichts mehr.
Wieso und wie ist dies behebar?

Und das zweite Problem, wenn ich den Knopf "nächster Zustand" drücke, dann geht er zwar in den nächsten Zustand aber er springt auch gleich noch in den allernächsten.
Oder anders formuliert, offenbar liest Labview den Befehl aus, wechselt in den neuen Zustand liest hier nochmal aus und setzt erst dann den Knopf wieder zurück.
(Hab es bereits über einen EEigenschaftsknoten gemacht, den er zunächst ausliest, dann den entsprechenden Code durchführt, anschließend die Werte über den Eigenschaftsknoten wieder zurück setzt und dann erst in den nächsten Zustand springt. Das kann doch aber nicht die schönste Lösung sein?)

Wäre super wenn mir jemand ein paar Tips geben könnte.

Euch einen schönen Feierabend.


Angehängte Datei(en)
2009 .vi  Ereignis_LV_2009.vi (Größe: 15,48 KB / Downloads: 374)
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
Anzeige
09.12.2010, 18:51
Beitrag #2

Y-P Offline
☻ᴥᴥᴥ☻ᴥᴥᴥ☻
LVF-Team

Beiträge: 12.612
Registriert seit: Feb 2006

Developer Suite Core -> LabVIEW 2015 Prof.
2006
EN

71083
Deutschland
Problem Ereignisstruktur
Es wird dringend davon abgeraten, 2 Eventstrukturen in einem VI zu verwenden.
Ändere das mal ab, dann sollte es tun.

Gruß Markus

--------------------------------------------------------------------------
Bitte stellt mir keine Fragen über PM, dafür ist das Forum da - andere haben vielleicht auch Interesse an der Antwort !!
--------------------------------------------------------------------------
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
10.12.2010, 08:20
Beitrag #3

cuber1 Offline
LVF-Gelegenheitsschreiber
**


Beiträge: 59
Registriert seit: Oct 2009

2009
2009
kA

71634
Deutschland
Problem Ereignisstruktur
Hi Y-P;

wusste ich doch irgendsowas mal gelesen zu haben :-).
Theoretisch müsste es doch aber funktionieren, weil doch durch den Case vorgegeben ist, in welchem Zustand er sich gerade befindet. So dass nur jeweils ein Evet ausführbar ist.
Warum geht es dennoch nicht?

Un wie verhält es sich mit dem zurückschalten? (Wenn man auf den nächsten Zustand drückt, wird der Zustand ja erst ausgelesen, dann springt er in die nächste Whileschleife, wo die Taste immernoch gedrückt ist. (Wertänderung (zur Ausführung des Events) wird zwar dann nicht anerkannt, aber sie steht immernoch auf True, dann wird erst zurück gesetzt.)

Hm, dann muss ich mir wohl doch eine komplett andere Programmstruktur überlegen.. Dry
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
10.12.2010, 08:21
Beitrag #4

Y-P Offline
☻ᴥᴥᴥ☻ᴥᴥᴥ☻
LVF-Team

Beiträge: 12.612
Registriert seit: Feb 2006

Developer Suite Core -> LabVIEW 2015 Prof.
2006
EN

71083
Deutschland
Problem Ereignisstruktur
So sieht's aus. Big Grin

Gruß Markus

' schrieb:Hm, dann muss ich mir wohl doch eine komplett andere Programmstruktur überlegen.. Dry

--------------------------------------------------------------------------
Bitte stellt mir keine Fragen über PM, dafür ist das Forum da - andere haben vielleicht auch Interesse an der Antwort !!
--------------------------------------------------------------------------
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
10.12.2010, 08:52
Beitrag #5

GerdW Offline
______________
LVF-Team

Beiträge: 17.465
Registriert seit: May 2009

LV2021
1995
DE_EN

10×××
Deutschland
Problem Ereignisstruktur
Hallo,

Zitat:Theoretisch müsste es doch aber funktionieren, weil doch durch den Case vorgegeben ist, in welchem Zustand er sich gerade befindet. So dass nur jeweils ein Evet ausführbar ist.
Warum geht es dennoch nicht?

Du gibst nur vor, welche Eventstruktur überhaupt zum Zuge kommt. Wenn jetzt aber ein Event für die andere Struktur auftritt, blockiert diese Struktur dein Programm, da sie das Event abarbeiten will, aber nicht darf...

Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
10.12.2010, 09:47
Beitrag #6

Lucki Offline
Tech.Exp.2.Klasse
LVF-Team

Beiträge: 7.699
Registriert seit: Mar 2006

LV 2016-18 prof.
1995
DE

01108
Deutschland
Problem Ereignisstruktur
NI ist etwas weniger streng und empfiehlt nur, nicht zwei Eventstrukturen in der gleichen Schleife zu verwenden - bei Dir ist aber auch das der Fall. Das eigentlich Tödliche ist vor allem der unendlich lange Timeout bei beiden Eventstrukturen. Das Programm kann nur jeweils an einer der beiden Strukturen auf ein Ereignisse warten. Das Programm könnte nur dann notdürftig funktionieren, wenn die Ereignisse immer streng alternierend an Struktur 1 /Struktur 2 eintreffen würden, aber wer kann das garantieren?
Bei der Ereignisstruktur entstehen dadurch manchmal Mißverständnisse, das sie mit einem Interrupt gleichgesetzt wird. Der entscheidende Unterschied ist aber: Ein Interrupt unterbricht das Programm an einer beliebigen Stelle. Ein Ereignis wird hingegen nur ausgeführt, wenn in dem datenflußorientierten LV-Programm die Eventstruktur an der Reihe ist ausgeführt zu werden. Die Verwechslung mit einem Interrupt führt dann zu eine falschen Erwartungshaltung bezüglich des Funktionierens - so auch hier.
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
Anzeige
10.12.2010, 16:55 (Dieser Beitrag wurde zuletzt bearbeitet: 15.02.2011 13:35 von Dennis.Moser.)
Beitrag #7

cuber1 Offline
LVF-Gelegenheitsschreiber
**


Beiträge: 59
Registriert seit: Oct 2009

2009
2009
kA

71634
Deutschland
Problem Ereignisstruktur
Solangsam glaub ich es zu verstehen :-)
Dennoch muss ich nochmal nachhaken….

Die Eventstruktur wird also immer ausgeführt egal wo sie ist? (D.h. der Eventstruktur ist es egal in welchem Case sie ist.) Das Event wird registriert und solange gespeichert bis man in das jeweilige Case eintritt?

Das würde dann auch das kleine Programm im Anhang erklären.

Zum Programm:
Über den Sinn oder Unsinn lässt sich streiten, um was es mir geht ist:
Wenn ich Zufallszahlen mit Start erzeuge und anschließend auf Stop drücke, geht er in den Zustand Meldung wo eine Meldung auftaucht. (Er arbeitet nun den Case also ab.) Aber nach der Abarbeitung des Cases wird Stop nicht sofort wieder zurück gesetzt, so dass die Eventstruktur das Stop auch nochmal verarbeitet und somit eine zweite Meldungen hintereinander auftaucht. Erst dann wird Stop wieder zurückgesetzt.

Hab ich das mit der Eventstruktur richtig verstanden, dass das Event registriert wird egal wo es auftritt?
Und welche Möglichkeit gibt es das im Programm beschrieben Verhalten zu ändern?
(Die Möglichkeit die mir einfallen würde, wäre über den Eigenschaftsknoten „manuell“ das Stop bereits im Case wieder zurückzusetzen.)


Angehängte Datei(en)
2009 .vi  eventstruktur_2_LV_2009.vi (Größe: 13,51 KB / Downloads: 275)
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
11.12.2010, 15:57
Beitrag #8

Lucki Offline
Tech.Exp.2.Klasse
LVF-Team

Beiträge: 7.699
Registriert seit: Mar 2006

LV 2016-18 prof.
1995
DE

01108
Deutschland
Problem Ereignisstruktur
' schrieb:Die Eventstruktur wird also immer ausgeführt egal wo sie ist? (D.h. der Eventstruktur ist es egal in welchem Case sie ist.) Das Event wird registriert und solange gespeichert bis man in das jeweilige Case eintritt?
Also nochmal: Ein Ereignis wird immer vorgemerkt, egal an welcher Stelle sich das Programm gerade befindet. Kommt es zu mehreren Ereignissen, ohne daß das Ereignis behandelt wurde, dann kommen die vorgemerkten Ereignisse in eine Warteschlange. Ist schließlich die Ereignsnisstruktur mit der Ausführung an der Reihe, dann wird nur ein Ereignis behandelt, und zwar das welches am länsten gewartet hat. Damit die Queue nicht immer länger wird, sollte die Ereignisstruktur also öfter aufgerufen werden als Ereignisse hinzukommen.

Fast jedes Programm besteht fast ausschließlich auf Warten auf irgendetwas. Wenn irgendwo im Programm ein Wait ist, oder ein Warten auf Daten, dann verzögert sich entsprechend die Ereignisbehandlung. Ereignisse werden hingegen sofort behandelt, wenn das Warten ein Warten auf den Timeout an der Ereignisstruktur ist. Jedes Warten im Programm sollte also möglichst so programmiert sein, daß es ein Warten an der Ereignisstruktur ist.

Selbst das Warten auf Daten, seriell oder DAQmx, kann man so konfigurieren, daß z.B nicht DAQmx-Read selbst auf die Daten wartet, sondern daß an der Ereignisstruktur gewartet wird, bis ein benutzerdefiniertes Ereignis "gewünschte Daten stehen im Empfangsbuffer bereit" eintrifft. Wenn das Ereignis eintrifft, werden die Daten ohne Warten gelesen - sie sind ja schon da. Der Vorteil ist offensichtlich: Das Warten von DAQmx Read ist kaum unterbrechber, ebensowenig wie die Wait-Funktion. Das Programm ist in dieser Zeit für den Benutzereingriff tot. Ein Warten an der Ereignisstruktur kann hingegen durch jedes Ereignis, also Stop usw., unterbrochen werden.

Dieselbe Problematik wie mit Waits an den falschen Stelle hat man auch bei mehreren Ereignisstrukturen in einer Programmschleife. Das Programm kann nur an einer der beiden Strukturen auf ein Ereignis warten. Ein Ereignis in der anderen Struktur kann erst behandelt werden, nachdem in der ersten Struktur entweder ein Ereignis eingetroffen ist oder der Timeout überschritten wurde. (Eine besondere "Gemeinheit" von NI ist, daß eine nicht angeschlossenen Zeit ein Timeout von Unendlich ist)
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
13.12.2010, 08:27
Beitrag #9

cuber1 Offline
LVF-Gelegenheitsschreiber
**


Beiträge: 59
Registriert seit: Oct 2009

2009
2009
kA

71634
Deutschland
Problem Ereignisstruktur
vielen Dank Lucki für die ausführliche Erklärung, dann ist es tatsächlich so wie ich es mir gedacht habe :-)

Damit muss die Programmstruktur komplett überarbeitet werdenDry, denn zweimal auf die selbe Frage zu antworten kann nicht die Lösung sein Rolleyes

Danke auch an alle anderen für die Erklrärungen!
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
13.12.2010, 09:11 (Dieser Beitrag wurde zuletzt bearbeitet: 15.02.2011 13:36 von Dennis.Moser.)
Beitrag #10

Lucki Offline
Tech.Exp.2.Klasse
LVF-Team

Beiträge: 7.699
Registriert seit: Mar 2006

LV 2016-18 prof.
1995
DE

01108
Deutschland
Problem Ereignisstruktur
Und weil Du dich so schön bedankst und lernwillig bist, hier noch ein Vorschlag zur Vereinfachung Deines VIs:
Lv09_img2
2009 .vi  eventstruktur_2_LV_2009.vi (Größe: 8,35 KB / Downloads: 392)
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
Antwort schreiben 


Möglicherweise verwandte Themen...
Themen Verfasser Antworten Views Letzter Beitrag
  Serielle Ereignisstruktur-Variablen in Ereignisstruktur übergeben Hummingbird 15 15.592 02.11.2011 16:13
Letzter Beitrag: Hummingbird
  Problem mit Ereignisstruktur und Cluster !? CarstenH 12 11.508 23.05.2011 09:30
Letzter Beitrag: CarstenH
  Problem mit Ereignisstruktur devilsdoormat 10 9.146 18.10.2010 20:30
Letzter Beitrag: jg
  Problem mit While Schleife und Ereignisstruktur Poncho 1 3.767 07.05.2008 21:16
Letzter Beitrag: IchSelbst

Gehe zu: