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 

2 Ereignisse in einer Case-Struktur



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.09.2008, 15:33
Beitrag #1

Svendner Offline
LVF-Grünschnabel
*


Beiträge: 13
Registriert seit: Aug 2008

8.2.1
2008
de

52399
Deutschland
2 Ereignisse in einer Case-Struktur
Hallo zusammen!

Folgende Situation:

Ich habe ein Programm mit verschiedenen Funktionen (möchte jetzt nicht zu weit ausholen, welche das alles sind). Mann kann Buttons drücken, sich in dem Programm als User einloggen und dann andere Buttons drücken.

Programmiertechnisch habe ich eine While-Schleife, in der sich eine Case-Struktur befindet. Das eine Case Unterdiagramm stellt den "nicht eingeloggten" Bereich dar, das andere den "eingeloggten" Bereich. In beiden Case Unterdiagrammen befindet sich jeweils eine Ereignisstruktur für die Buttons. Das funktioniert soweit ganz gut.
Ein einziger Button soll in beiden Bereichen (sprich im nicht - und im eingeloggten Bereich) bedienbar sein und verursacht Probleme.

Wenn ich den Button zwei mal drücke, wird das Ereignis zwei mal ausgeführt. Wechsle ich in den eingeloggten Bereicht, also ins andere Case Unterdiagramm wird ohne den Knopf zu drücken das Ereignis wieder zwei mal ausgeführt.
Jetzt besteht die Frage, warum die Wertänderung (in meinem Beispiel 2 mal) nicht 'gelöscht' wird, sondern von der zweiten Ereignisstruktur 'gemerkt' wird, obwohl diese ja nicht läuft.

Ich habe die Umstellung auf andere auslösende Ereignisse schon ausprobiert, aber mit nur geringem Erfolg. Entweder funktioniert das Ein- oder das Ausloggen ohne diesen Fehler, aber nicht beides fehlerfrei.

Vielleicht kann einer von euch mir weiterhelfen.Wink

Gruß
Sven
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
08.09.2008, 15:38
Beitrag #2

eg Offline
LVF-SeniorMod


Beiträge: 3.868
Registriert seit: Nov 2005

2016
2003
kA

66111
Deutschland
2 Ereignisse in einer Case-Struktur
Die Ereignisse werden in so vielen Puffern gespeichert, wie du Event Diagramme in deinem BD hast, egal ob laufend oder nicht. Du solltest dein Prog so umbauen, dass du nur eine Eventstruktur insgesamt hast.

Webseite des Benutzers besuchen Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
08.09.2008, 16:28 (Dieser Beitrag wurde zuletzt bearbeitet: 08.09.2008 16:28 von Lucki.)
Beitrag #3

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

Beiträge: 7.699
Registriert seit: Mar 2006

LV 2016-18 prof.
1995
DE

01108
Deutschland
2 Ereignisse in einer Case-Struktur
' schrieb:. Du solltest dein Prog so umbauen, dass du nur eine Eventstruktur insgesamt hast.
.. und wenn Du damit nicht klar kommst das VI posten
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
09.09.2008, 08:27 (Dieser Beitrag wurde zuletzt bearbeitet: 09.09.2008 08:28 von Svendner.)
Beitrag #4

Svendner Offline
LVF-Grünschnabel
*


Beiträge: 13
Registriert seit: Aug 2008

8.2.1
2008
de

52399
Deutschland
2 Ereignisse in einer Case-Struktur
Moin,

danke für die schnelle Antwort!!
Da das VI 1,5 MB groß ist, wird aus dem posten nichts ;-) . Aufgrund der Größe kann ich auch nicht eine Eventstruktur daraus machen.

Besteht die Möglichkeit Events in den Puffern zu löschen?

Ansonsten ist mir gestern Abend noch die Idee gekommen, dass man den Button zwei mal setzt (der Zweite direkt darüber) und je nach Eventstruktur den einen oder anderen unsichtbar stellt. Ist zwar ne Mogelpackung, aber dürfte funktionieren.

Gruß
Sven
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
09.09.2008, 09:14
Beitrag #5

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

Beiträge: 7.699
Registriert seit: Mar 2006

LV 2016-18 prof.
1995
DE

01108
Deutschland
2 Ereignisse in einer Case-Struktur
Mehrere Ereignisstrukturen sollte man zwar möglichst vermeiden, vor allem in ein und derselben While-Schleife. Es ist ja nicht möglich, daß das Programm sich in beiden Ereignisstrukturen zugleich im Wartezustan auf ein Ereignis befinden kann.
Wirklich tödlich ist es, wenn eine - oder sogar beide - Schleifen keinen Timout angeschlossen haben. Dann tritt ein Blockade ein.
Aber wenn schon mehrere Ereignisstrukturen (in einer Hauptschleife) , dann ein möglichst kurzes timeout für beide Ereignsistrukturen, denn während des Wartens auf das timout wird immer die andere Schleife blockiert.

Ein Ereignis zu löschen seh ich kein Grund. Man kann ja in dem betreffenden Ereiggniscase eine Casestruktur einbauen, und wenn das Ereignis nichts bewirken soll, dann wird eben ein leerer Case ausgeführt.

Was spricht eigentlich dagegen, daß Du eine Kopie deines VIs für Demonstratinszecke so weit abspeckst, daß die Funkion auf das hier angefragte Problem reduziert ist? Deine "Mogelpackung" ist garantiert unnötig, da gibt es bessere und ganz einfache Lösungen - aber nicht ohne Dein VI zu sehen.
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
12.09.2008, 06:27
Beitrag #6

Svendner Offline
LVF-Grünschnabel
*


Beiträge: 13
Registriert seit: Aug 2008

8.2.1
2008
de

52399
Deutschland
2 Ereignisse in einer Case-Struktur
Hallo Lucki!

Vielen Dank für deine Antwort.
Ich bin im moment sehr unter Zeitdruck. Das Programm auf die relevanten Funktionen abzuspecken dauert einfach zu lang... Da gibt es so viele SubVIs und Zusammenhänge (wie z.B. wichtige Benutzerereignisse), dass ich das Programm nicht "mal eben" reduzieren kann. Ich hatte auch kurz angefangen, die entsprechende Funktion schnell provisorisch als neues VI zu programmieren, aber auch das zeigt sich als sehr (zu) zeitaufwendig.

Trotzdem danke ich dir, dass du drüber geguckt hättest!

Sollte doch etwas Zeit ergeben, werde ich das Ganze hier reinstellen. Denn prinzipiell wäre ich natürlich auch für eine saubere Programmierung.


Grüße und schönes Wochenende!

Sven
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
Anzeige
24.09.2008, 15:32
Beitrag #7

Svendner Offline
LVF-Grünschnabel
*


Beiträge: 13
Registriert seit: Aug 2008

8.2.1
2008
de

52399
Deutschland
2 Ereignisse in einer Case-Struktur
' schrieb:Mehrere Ereignisstrukturen sollte man zwar möglichst vermeiden, vor allem in ein und derselben While-Schleife. Es ist ja nicht möglich, daß das Programm sich in beiden Ereignisstrukturen zugleich im Wartezustan auf ein Ereignis befinden kann.
Wirklich tödlich ist es, wenn eine - oder sogar beide - Schleifen keinen Timout angeschlossen haben. Dann tritt ein Blockade ein.
Aber wenn schon mehrere Ereignisstrukturen (in einer Hauptschleife) , dann ein möglichst kurzes timeout für beide Ereignsistrukturen, denn während des Wartens auf das timout wird immer die andere Schleife blockiert.

Ein Ereignis zu löschen seh ich kein Grund. Man kann ja in dem betreffenden Ereiggniscase eine Casestruktur einbauen, und wenn das Ereignis nichts bewirken soll, dann wird eben ein leerer Case ausgeführt.

Was spricht eigentlich dagegen, daß Du eine Kopie deines VIs für Demonstratinszecke so weit abspeckst, daß die Funkion auf das hier angefragte Problem reduziert ist? Deine "Mogelpackung" ist garantiert unnötig, da gibt es bessere und ganz einfache Lösungen - aber nicht ohne Dein VI zu sehen.


Hallo Lucki,

hier ist mein VI.

So funktioniert es:

Durch den Play-Button kann man sich als User einloggen (Einlog-Funktion habe ich natürlich gelöscht) und durch den Stop-Button wieder ausloggen. Das Problem verursacht der Button links neben dem Play-Button.
Zur Verdeutlichung der Ausführung des "Problem-Button" erscheint nach Drücken eine Meldung.

Und jetzt nochmal zum Problem:
Wenn ich den "Problem-Button" drei Mal drücke und mich danach einlogge (der Play-Button), wird nochmal drei Mal der Problem-Button Ereignis ausgeführt.
Umgekehrt vom eingeloggten in den ausgeloggten Bereich das Gleiche.

Das VI ist in LabVIEW 8.2.1 erstellt worden.

Vielen Dank für deine Hilfe schon im voraus!

Gruß
Sven


Angehängte Datei(en)
Sonstige .zip  2_Ereignisse_Problem.zip (Größe: 163,82 KB / Downloads: 210)
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
24.09.2008, 19:29
Beitrag #8

jg Offline
CLA & CLED
LVF-Team

Beiträge: 15.864
Registriert seit: Jun 2005

20xx / 8.x
1999
EN

Franken...
Deutschland
2 Ereignisse in einer Case-Struktur
1. Ich weiss ja nicht, wie groß dein Monitor ist (ich sitz hier ja auch schon vor einem 22"), aber dein BD ist einfach VIEL zu groß, zwar aufgeräumt (dafür Lob), aber VIEL zu groß. Wenn ich mit der Maus wie verrückt scrollen und schieben muss, um zu sehen, wo die Strukturen starten und aufhören, dann ist was falsch. Und da werde ich auch nicht weiteranalysieren und exakte Verbesserungsvorschläge liefern.

2. Es bleibt dabei, 2 Event-Strukturen innerhalb derselben While-Schleife, und dann auch noch 2 Event-Strukturen, die auf dasselbe Event (also denselben Mausklick) reagieren sollen, das führt halt nun mal zu seltsamen Reaktionen. Deshalb wird ja auch von NI selbst in der Hilfe von der mehrfachen Verwendung der Event-Struktur innerhalb eines Events dringend abgeraten! Und man kann es auf jeden Fall anders machen. Aber da sind wir wieder bei Punkt 1, dein BD ist mir zu unübersichtlich, um Änderungen vorzuschlagen.

Gruß, Jens

Wer die erhabene Weisheit der Mathematik tadelt, nährt sich von Verwirrung. (Leonardo da Vinci)

!! BITTE !! stellt mir keine Fragen über PM, dafür ist das Forum da - andere haben vielleicht auch Interesse an der Antwort!

Einführende Links zu LabVIEW, s. GerdWs Signatur.
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
25.09.2008, 05:50 (Dieser Beitrag wurde zuletzt bearbeitet: 25.09.2008 05:51 von Achim.)
Beitrag #9

Achim Offline
*****
*****


Beiträge: 4.223
Registriert seit: Nov 2005

20xx
2000
EN

978xx
Deutschland
2 Ereignisse in einer Case-Struktur
' schrieb:1. Ich weiss ja nicht, wie groß dein Monitor ist (ich sitz hier ja auch schon vor einem 22"), aber dein BD ist einfach VIEL zu groß, zwar aufgeräumt (dafür Lob), aber VIEL zu groß. Wenn ich mit der Maus wie verrückt scrollen und schieben muss, um zu sehen, wo die Strukturen starten und aufhören, dann ist was falsch. Und da werde ich auch nicht weiteranalysieren und exakte Verbesserungsvorschläge liefern.

...und dann ist ja in den verschiedenen Frames auch kaum was drin...

Was mir allerdings ganz gut gefällt, ist die Bedienoberfläche! Sieht schick aus! Aber auc hier eine Kritik: Bei den vielen Tabs geht die Übersicht genauso verloren wie in den Weiten deines Blockdiagramms!

"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)
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
25.09.2008, 07:42
Beitrag #10

Svendner Offline
LVF-Grünschnabel
*


Beiträge: 13
Registriert seit: Aug 2008

8.2.1
2008
de

52399
Deutschland
2 Ereignisse in einer Case-Struktur
Hallo,

das Haupt-VI habe ich nicht selber erstellt, sondern ein erfahrener (!) LabVIEW Programmierer. Ich habe das VI lediglich übernommen und soll es optimieren ;-) .
In den einzelnen Strukturen ist kaum etwas enthalten, da ich alles rausgelöscht habe (ursprüngliche Größe 1,55 MB). Sonst wäre es noch unübersichtlicher.
Die Größe des Haupt-VI zu verändern, würde auch den Rahmen meiner Abschlussarbeit sprengen ;-) .

Die Kritik mit der Größe des VIs kann ich vollkommen verstehen und da in den einzelnen Strukturen kaum etwas enthalten ist, werde ich heute Nachmittag eine etwas übersichtlichere Version reinstellen. Wenn man den ganzen Tag damit arbeitet, vergisst man leider, dass die Struktur für Dritte nicht übersichtlich ist. Ich bitte also um Nachsicht ;-) .

Zum Aufbau des VIs sei noch gesagt, dass eigentlich nur Unterdiagramm 2 der gestapelte Sequenz von Interesse ist (Gestapelte Sequenz 0 bis 1 sind lediglich Initialisierungen). Der Case "Voreinstellung" stellt den ausgeloggten Bereich dar (mit der einen Ereignisstruktur) und der Case "gestartet" den eingeloggte Bereich (mit der zweiten Ereignisstruktur). Um von den eingeloggten Bereich den den ausgeloggten Bereich zu kommen, wird der Case "Stop" noch ausgeführt. Der Case "Exit" dient nur zum beeden des Programms.

Grüße

Sven
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
  Case-Struktur: Angegebener Case nicht vorhanden braendy 10 6.835 02.02.2021 15:05
Letzter Beitrag: Lucki
  Case Struktur 2 Schleifendurchläufe verzögert True setzen aber sofort auf False bachatero18 4 5.700 07.11.2020 14:08
Letzter Beitrag: Martin.Henz
  CAN Nachrichten in Array verarbeiten und aus Case Struktur weiterverarbeiten Tomate27 4 4.557 17.07.2020 13:30
Letzter Beitrag: Tomate27
  Steuerung, Case-Struktur pixie_2 4 4.129 16.04.2020 14:30
Letzter Beitrag: GerdW
  Kopplung zweier Ereignisse TTT 4 4.533 25.07.2018 15:49
Letzter Beitrag: TTT
  Event Case Ignoriert Tastendruck wenn in Gegenwart eines anderen "Leeren" Event Case Ksanto 8 8.260 23.10.2017 09:08
Letzter Beitrag: Ksanto

Gehe zu: