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 

wie Initialisierungen geschickt machen?



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!

23.01.2013, 17:52
Beitrag #1

Hasenfuss Offline
LVF-Stammgast
***


Beiträge: 331
Registriert seit: Dec 2012

2012
2012
DE



wie Initialisierungen geschickt machen?
Wie macht man am geschicktesten Initialisierungen?

Ich habe jetzt eine while-Schleife und einen Eventcase dadrinnen. Bevor der Prozess beginnt, sollen erstmal Initialisierungen erfolgen, wie Zuweisung von irgendwelchen Standard-Daten, Farben, Eigenschaften von was auch immer.

Ist es in so einem Fall sinnvoll, eine Sequenz zu nehmen? Oder einfach einen zweiten Fehler-Case einführen und die Reihenfolge der Ausführung durch den Fehlercluster vorgeben? Weil ich habe mal irgendwo gelesen, dass man wenn möglich ohne Sequenzen arbeiten soll.

Meine bisherige Lösung war ein Schleifendurchlauf in einer for-Schleife, die genau einmal gemacht wird - wie in dem Bild, dass halte ich aber für schlecht und aus dem Bauch heraus würde ich die for-Schleife einfach durch einen weiteren Fehlercase ersetzen.

Vielleicht gibt es aber auch noch andere Möglichkeiten.

Ich könnte auch die Zuweisung der Ini-Daten irgendwie in der Haupt-while-Schleife machen, aber warum sollen irgendwelche Zuweisungen bei jedem Schleifendurchlauf erneut gemacht werden - das halte ich für eher ungünstig.


Angehängte Datei(en) Thumbnail(s)
   
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
Anzeige
23.01.2013, 17:57 (Dieser Beitrag wurde zuletzt bearbeitet: 23.01.2013 17:58 von Trinitatis.)
Beitrag #2

Trinitatis Offline
LVF-Guru
*****


Beiträge: 1.694
Registriert seit: May 2008

7.1 / 8.0 /2014-1, 18
2002
DE

18055
Deutschland
RE: wie Initialisierungen geschickt machen?
Hallo Hasenfuss,

was gibt es an Sequenzen (gestapelten wohlgemerkt) auszusetzen. Das mit der einmal durchlaufenden Schleife in Verbindung mit shift-Registern kann man in Sub-VIs machen, um Startwerte über die Lebenszeit der Applikation zu speichern.

Gruß, Marko
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
23.01.2013, 18:48
Beitrag #3

L@bRAT Offline
LVF-Neueinsteiger


Beiträge: 4
Registriert seit: Jan 2013

ab 2010
2010
EN

73732
Deutschland
RE: wie Initialisierungen geschickt machen?
Eine, meiner Meinung nach saubere, Lösung wäre eine Statemachine in der While-Schleife. Da kannst du dann auch evtl. Fehlerbehandlung mit reinpacken.
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
23.01.2013, 19:31
Beitrag #4

Hasenfuss Offline
LVF-Stammgast
***


Beiträge: 331
Registriert seit: Dec 2012

2012
2012
DE



RE: wie Initialisierungen geschickt machen?
(23.01.2013 18:48 )L@bRAT schrieb:  Eine, meiner Meinung nach saubere, Lösung wäre eine Statemachine in der While-Schleife. Da kannst du dann auch evtl. Fehlerbehandlung mit reinpacken.

Hmm - mag ja sein. Aber in welches Event soll man Initialisierungen bei einem Zustandsautomanten machen? Ich habe ja jetzt bereits einen Zustandsautomat, aber dort werden nur die Cases ausgeführt, die ich mit einem Ereignis gekoppelt habe.

Wenn ich jetzt einen Button mache - Initialisieren, dann könnte ich das Event bearbeiten und da die Initialisierungen machen. Alternative - es müsste ein Event geben, dass einmalig ausgeführt wird, in das kann ich die Initialisierungen reinpacken. Aber so ein Event kenne ich bis jetzt noch nicht.
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
24.01.2013, 09:19 (Dieser Beitrag wurde zuletzt bearbeitet: 24.01.2013 09:21 von GerdW.)
Beitrag #5

GerdW Offline
______________
LVF-Team

Beiträge: 17.469
Registriert seit: May 2009

LV2021
1995
DE_EN

10×××
Deutschland
RE: wie Initialisierungen geschickt machen?
Hallo Hasenfuss,

Zitat:Ich habe ja jetzt bereits einen Zustandsautomat, aber dort werden nur die Cases ausgeführt, die ich mit einem Ereignis gekoppelt habe.

Jein...
Du hast eine Event-Struktur, die auf User-Input wartet und einen Wert ausgibt, der in einem nachfolgenden Case ausgewertet wird. Eine "echte" Statemachine ist das noch nicht...

Vorschlag für dein gezeigtes VI:
- Erstelle in der While-Loop ein Schieberegister (SR) für den Case/State.
- Initialisiere dieses SR mit "Init".
- Führe in der While-Loop als erstes (!) die Case-Struktur aus, die den State auswertet
- Erst danach kommt die Event-Struktur zum Zuge, die wiederum den nächsten State ausgibt und an das SR weiterreicht...

Zitat:es müsste ein Event geben, dass einmalig ausgeführt wird, in das kann ich die Initialisierungen reinpacken. Aber so ein Event kenne ich bis jetzt noch nicht.
Es gibt User-defined Events (und Beispiele dazu im Examplefinder) als auch per "Value signaling"-Propertynode ausgelöste Events. Erstelle dir ein (evtl. unsichtbares) Control namens Init und löse für dieses per Propertynode ein ValueChange-Event aus...

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

Hasenfuss Offline
LVF-Stammgast
***


Beiträge: 331
Registriert seit: Dec 2012

2012
2012
DE



RE: wie Initialisierungen geschickt machen?
Danke für Eure Beiträge.

Habe also jetzt das mal etwas abgewandelt, und eine whileSchleife mit Schieberegister gemacht. Daran hängt auch ein enum. Der erste Wert im Schieberegister wird durch das enum mit Init vorgegeben, dann wird der Init-Case ausgeführt. Dort kann ich dann jegliche Art von Initialisierungen machen.

Jetzt will ich als aller erstes ein Event auslösen, dass auf einen Stopp-Button reagiert und dann dazu führt, dass der Stopp-Case (auch ein Wert in dem enum) ausgeführt wird.

Dazu habe ich nun innerhalb der while-Schleife ein Ereignis-Case eingebaut. Time-Out ist vorhanden und wurde auf -1 gesetzt, dann der Ereignis-Case, der auf den Button reagiert. Nun msste ich wie in dem zweiten Bild den Inhalt des Ereignieses auch mit in den Schieberegister mit reinbringen.

Was hab ich jetzt gemacht - jetzt habe ich praktisch einen Mischmasch erzeugt - es könnten weitere Zustände durch die case-Struktur vorgegeben werden und in dem Ansatz nun auch noch parallel dazu durch den Ereignis-Case. Kann man so "gemischt" arbeiten oder geht das garnicht bzw. sollte man entweder nur "von case zu case-basiert" arbeiten oder nur von event-case zu auswerte-case?

Was ich nun auch nicht weis - würde die while-Schleife weiterarbeiten oder stoppen, so lange bis der Ereignis-Case abgearbeitet ist, da ja der timeout-ereignis-case bei -1 in dem Beispiel gesetzt ist?

In einem Buch habe ich gerade noch eine andere Variante gesehen. Dort ist der Event-Case in einer separaten while-Schleife untergebracht. Dann wird mit einer Queue gearbeitet - mit der Queue könnte ich wahrscheinlich das Problem lösen, was ich in dem aktuellen Beispiel hab, wo ich die beiden Pfeile gezeichnet habe - nämlich wie ich nun die beiden Signalstränge miteinander koppele, damit auch das Ereignis-case dann in dem auswerte-Case abgearbeitet wird.

Würdet ihr jetzt einen Zustandsautomaten, der auch auf Events reagieren soll zu einem parallen "normalen" case in einem Zustandsautomaten realisieren? In dem "normalen" case hab ich noch einen Datenstrom an einen Schieberegister gekoppelt, mit dem ich dann noch irgendetwas machen kann - irgendwelche Werte von Zustand zu Zustand durchreichen oder so?


Angehängte Datei(en) Thumbnail(s)
           
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
Anzeige
25.01.2013, 14:03
Beitrag #7

GerdW Offline
______________
LVF-Team

Beiträge: 17.469
Registriert seit: May 2009

LV2021
1995
DE_EN

10×××
Deutschland
RE: wie Initialisierungen geschickt machen?
Hallo Hasenfuss,

Zitat:Was ich nun auch nicht weis - würde die while-Schleife weiterarbeiten oder stoppen, so lange bis der Ereignis-Case abgearbeitet ist, da ja der timeout-ereignis-case bei -1 in dem Beispiel gesetzt ist?
Ersten sieht man das sehr gut beim Debugging mit aktiviertem Highlighting und zweitens gilt immer noch der DATAFLOW!

Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
30
Antwort schreiben 


Möglicherweise verwandte Themen...
Themen Verfasser Antworten Views Letzter Beitrag
  doppelte while-Schleife geschickt beenden Hasenfuss 5 6.219 08.04.2013 21:40
Letzter Beitrag: Hasenfuss
  2D Array geschickt verwalten Honeygirl24 7 5.710 16.07.2010 10:25
Letzter Beitrag: jg
  VI übersichtlicher machen Bertl 2 3.606 14.04.2006 08:45
Letzter Beitrag: Lucki
  Aus U16 iI16 machen Benno 1 3.683 20.09.2005 15:25
Letzter Beitrag: marker

Gehe zu: