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 

Übersichtliche Struktur und das Problem mit Events



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!

15.06.2009, 10:35
Beitrag #1

Ragdar Abwesend
LVF-Grünschnabel
*


Beiträge: 47
Registriert seit: Mar 2009

8.2
2008
kA

83022
Deutschland
Übersichtliche Struktur und das Problem mit Events
Hallo liebe Community,

ich bin an einem Projekt beschäftig, welches als Grundlage ein sehr komplexe LabVIEW Ansteuerung benötigt. Da das Programm sehr umfangreich ist / wird lege ich sehr viel Wert auf eine übersichtliche und klare Struktur. Vorallem da meine Arbeit von anderen auch nachvollzogen werden soll und eventl. eigene Änderungen dran vornehmen können.

Mein komplettes Programm besteht aus einer großen While-Loop, die solange durchlaufen wird - bis das Programm beendet wird. In der While-Loop habe ich eine Case, die die verschiedenen Programm Teile wiedergibt. Jede Case kann somit als einzelner Schritt eins Ablaufdiagramms gesehen werden - die je nach "programmierter Caseauswahl" zum nächsten Schritt springt.

Es gibt im Moment die folgenden Programmschritte:
- Initialisierung von Variablen und Daten
- Initialisierung des Frontpanels
- Verbindungsaufbau
- Hauptprogramm
- Programm beenden

Mein Programm läuft zu Beginn die oben genannten Punkte der Reihe nach durch bis "Verbindungsaufbau". Dort ist eine Event-Case die darauf wartet, dass der User entweder den Button "Connect" wählt, oder im Menü "Connect" oder je nach dem eine der anderen Optionen wie Hilfe, Programm beenden, etc.

Wurde Connect gewählt und die Verbindung wurde erfolgreich aufgebaut wird ins Hauptprogramm gesprungen. Wenn er das Programm beenden will, wird zum "Programm beenden" gesprungen.

Mein Problem dabei ist, dass ich jetzt im Haupprogramm aber wieder eine Event-Case brauche. Aber die Event-Case im Verbindungsaufbau kann ich auf Grund der ganzen Optionen auch nicht weglassen.

Und das zusammenfügen zu einem Case ist auch schwer - da ich die internen Schleifenabbrüche mit Semaphore Error verknüpft habe, der dann initialisiert ist wenn die Verbindung bereits besteht. Tritt eben dort ein Fehler auf, springt er wieder zur "Verbindung aufbauen"-Case...


Dadurch dass ich zwei Cases habe, die auch einige Events gleich haben, füllt sich zugleich bei einigen Aktionen der Event-Puffer beider Schleifen. Wenn ich dann in den Programmteil der nächsten Case komme - arbeitet er mir alle Aktionen in dem Puffer ab...

Gibts dafür eine Möglichkeit, den Event-Puffer zurückzusetzen?
Oder nach welcher Struktur arbeitet ihr - Ein Verbindungsaufbau muss bei euch ja auch immer der Fall sein. Wie handhabt ihr das auftauchen eines Fehlers und die damit verbundene Neu-Initialisierung etc..


Ich weiß viel Text, eventl ließt es wer und kann mir weiterhelfen - Vielen Dank!

MFG
Ragdar
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
15.06.2009, 15:38
Beitrag #2

abrissbirne Offline
LVF-Stammgast
***


Beiträge: 480
Registriert seit: Aug 2007

LV2009, LV2010
2007
EN

66123
Deutschland
Übersichtliche Struktur und das Problem mit Events
' schrieb:Da das Programm sehr umfangreich ist / wird lege ich sehr viel Wert auf eine übersichtliche und klare Struktur. Vorallem da meine Arbeit von anderen auch nachvollzogen werden soll und eventl. eigene Änderungen dran vornehmen können.
Das ist schonmal löblichWink

' schrieb:Mein komplettes Programm besteht aus einer großen While-Loop, die solange durchlaufen wird - bis das Programm beendet wird. In der While-Loop habe ich eine Case, die die verschiedenen Programm Teile wiedergibt. Jede Case kann somit als einzelner Schritt eins Ablaufdiagramms gesehen werden - die je nach "programmierter Caseauswahl" zum nächsten Schritt springt.

Es gibt im Moment die folgenden Programmschritte:
- Initialisierung von Variablen und Daten
- Initialisierung des Frontpanels
- Verbindungsaufbau
- Hauptprogramm
- Programm beenden

Gibts dafür eine Möglichkeit, den Event-Puffer zurückzusetzen?
Oder nach welcher Struktur arbeitet ihr - Ein Verbindungsaufbau muss bei euch ja auch immer der Fall sein.
Toplevel VI (ist das VI dessen Frontpanel der User zu Gesicht bekommt) --> Producer-Consumer-Architektur
Sub VI's --> Statemachines
Damit hast du eine übersichtliche, gut lesbare und leicht zu erweiternde Anwendung. Allerdings hast du das nicht von heute auf morgen drauf. Es bedarf einer gewissen einarbeitungszeit, die sich aber allemal auszahlen wird.

' schrieb:Wie handhabt ihr das auftauchen eines Fehlers und die damit verbundene Neu-Initialisierung etc..
Ganz einfach mit einem Errorhandler. Das musst du schon selbst machen. LV ist Datenfluss orientiert d.h. am Ende des Datenstroms kannst du schön nach Fehelern ausschau halten. Wie du welchen Fehler behandelst bleibt dir überlassen. Bei mir geht das von einer einfachen Warnmeldung bis hin zum Beenden der Applikation.

Gruß, abrissbirne
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
16.06.2009, 07:16
Beitrag #3

TSC Offline
LVF-Team
LVF-Team

Beiträge: 1.882
Registriert seit: Sep 2008

LV 2018 SP1
2008
EN

52379
Deutschland
Übersichtliche Struktur und das Problem mit Events
' schrieb:...
Wie du welchen Fehler behandelst bleibt dir überlassen. Bei mir geht das von einer einfachen Warnmeldung bis hin zum Beenden der Applikation.
...

Ich lösche manche Fehler auch einfach ohne Warnmeldung (der User muss nicht jeden Scheiß mitbekommen!!). Grundsätzlich habe ich in meinen Programmen eine Errorline die von Anfang bis Ende durchgezogen ist. An kritischen Punkten baue ich ein SubVI (Errorhandler) ein. Falls ein Fehler auftritt, und er bekannt ist, wird er entsprechend behandelt. Ist er unbekannt, wird er bis zum nächsten Errorhandler durchgereicht. das Programm ist dann so ausgelegt, dass nichts mehr getan wird, wenn ein unbekannter fehler auftritt.

LG
Torsten

"Über Fragen, die ich nicht beantworten kann, zerbreche ich mir nicht den Kopf!" (Konrad Zuse)
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
17.06.2009, 07:00 (Dieser Beitrag wurde zuletzt bearbeitet: 17.06.2009 07:02 von Lucki.)
Beitrag #4

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

Beiträge: 7.699
Registriert seit: Mar 2006

LV 2016-18 prof.
1995
DE

01108
Deutschland
Übersichtliche Struktur und das Problem mit Events
Will nur noch anmerken, daß NI ausdrücklich vor der Verwendung mehrerer Eventstrukturen innerhalb einer While-Schleife warnt.
Ob man den Event-Puiffer zurücksetzen kann, weiß ich jetzt nicht, aber auf jeden Fall kann man Ereignisse auch dynamisch konfigurieren. Sie lassen sich dann an-und abmelden, so daß Ereignisse, die im Moment nicht gewünscht sind, gar nicht erst auftreten.

Aber untersuche doch mal diese Konfiguration mit nur einer State-Machine und nur einer Event-Struktur:

Große While-Schleife
Darin ebenso große. dh. fast die ganze Fläche beanspruchende Event-Struktur.
Das gesamte Programm mit State-machine befindet sich im Timeout der Eventstruktur mit den Zuständen
- Initialisierung von Variablen und Daten
- Initialisierung des Frontpanels
- Verbindungsaufbau
- Hauptprogramm Case A
- Hauptprogramm Case B
- Hauptprogramm Case C
- Hauptprogramm Case D
- Hauptprogramm Case E
- Programm beenden
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
  Frage zur Architektur: Statemachine und Wait for Events tuhpon 6 4.496 18.03.2024 16:14
Letzter Beitrag: tuhpon
  Event Struktur Problem ache 9 5.112 17.09.2020 14:10
Letzter Beitrag: jg
  Bedienelemente bündeln zum Auslösen eines Events Marcusius 12 9.306 03.09.2019 17:24
Letzter Beitrag: Marcusius
  Mausrad bei Events/Casestrukturen Schwand 1 3.822 20.09.2016 08:30
Letzter Beitrag: Schwand
  Dynamische Events programmatisch auslösen AMueller 6 7.042 22.04.2016 07:43
Letzter Beitrag: GerdW
  Eventstruktur mit 2 Events Großer_Stein 3 4.212 11.06.2015 10:11
Letzter Beitrag: Großer_Stein

Gehe zu: