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 

While-Schleife sofort beenden ?



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!

04.10.2019, 10:19 (Dieser Beitrag wurde zuletzt bearbeitet: 04.10.2019 10:22 von GerdW.)
Beitrag #11

GerdW Offline
______________
LVF-Team

Beiträge: 17.469
Registriert seit: May 2009

LV2021
1995
DE_EN

10×××
Deutschland
RE: While-Schleife sofort beenden ?
Hallo Robert,

Zitat:Mein vi, RSM-New-01 hab ich nun mal drangehängt. Bitte spottet nicht all zu viel über meine Fehler ;-)
Hier wird nicht (oder nur sehr selten) "gespottet".
Aber berechtigte Kritik solltest du schon annehmen können!

Zum VI:
   
Der Ausschnitt zeigt typische Anfängerfehler, die vom fehlenden "THINK DATAFLOW" zeugen!
Warum musst du lokale Variablen verwenden, wenn die Terminals der entsprechenden Indicators ungenutzt im Blockdiagramm rumliegen???
Tipp: IndexArray kann von allein den Index hochzählen und startet dabei automatisch mit Null. Da brauchst du in deinem Fall keine Konstanten anschließen…

   
Andere Fehler:
Warum heißen die Anschlüsse "error out", wenn dort eindeutig ein Errorwire hineingeht?
Warum iterieren die Schleifen genau einmal? Dann sind sie überflüssig!
Warum verwendest du nicht den Errorwire, um die Funktionen zu sequenzieren? (THINK DATAFLOW!)
Warum verwendest du stattdessen den Ausgang des Iterators der ersten/oberen Schleife, um damit die zweite Schleife zu sequenzieren? (Das scheinst du mit allen Schleifen darunter auch zu machen…)

Verwende eine Statemachine mit klar definierten States (z.B. das, was in den einzelnen Schleifen steckt)! Rufe die States in der richtigen Reihenfolge auf: du brauchst exakt eine While-Loop mit einer Case-Struktur drin!
Alle lokalen Variablen in den "States"/Schleifen können dann direkt durch die Terminals ersetzt werden…

   
Dieser Teil mit den boolschen Verknüpfungen wird dann der Teil der Statemachine, in der die Logik steckt, mit der der nächste State ausgewählt wird:
Code:
IF stateX AND/OR BedingungY THEN
  stateY
ELSE
  stateZ
ENDIF

Bitte nutze die ganzen Einsteigerkurse, die NI so anbietet…

Allgemeines, auch zu Statemachines:
- Daten sinnvoll in Clustern bündeln, z.B. diese ganzen Referenzen
- Cluster (und Enums) immer typdefinieren!
- Daten speichert man in Drähten und Schieberegistern!
- Erstelle sinnvolle subVIs
- Bündele alles in einem LabVIEW-Projekt und einem Projektordner auf der Festplatte…

Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
Anzeige
04.10.2019, 10:55
Beitrag #12

RobertRoth Offline
LVF-Neueinsteiger


Beiträge: 9
Registriert seit: Oct 2019

19
2019
DE



RE: While-Schleife sofort beenden ?
Ich danke Dir viel mals, GerdW, Du hast mir in vieler Hinsicht geholfen.

Nun werde ich mir dran setzet und das ganze Program neu kreieren. Vermutlich werde ich not 1000 Fragen haben und bin Froh, wenn ich wieder auf das Forum zurückgreifen kann :-)

Ich denke, ich werde mich so mitte nächste Woche melden. Mal schauen, wie weit ich dann bin und ob ich alles richtig verstanden habe.

Noch mals vielen Dank für Eure Hilfe.

Grüessli
Robi...
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
04.10.2019, 13:38 (Dieser Beitrag wurde zuletzt bearbeitet: 04.10.2019 13:46 von stefan1312.)
Beitrag #13

stefan1312 Offline
LVF-Grünschnabel
*


Beiträge: 29
Registriert seit: May 2015

17
-
EN


Deutschland
RE: While-Schleife sofort beenden ?
Hallo!

Hätte mir dein Programm auch angesehen.. hab aber leider nur eine LV 2017 Version!
Speichere dein Programm einfach als ältere Version ab, dann kann ich dir vl auch die ein oder anderen Tipps geben

Und schick vl die anderen VI`s auf die du zugreifst auch mit ( bzw erstelle gleich ein Projekt ) damit
man sich den ganzen Code anschauen kann Wink

Am Anfang hatte ich auch unendlich viele Fragen also nur zu (und es werden iwie immer mehr *gg)
Habe als Abschlussarbeit an der Uni ein für mich "riesiges" Projekt als BSC Arbeit bekommen..
Nach vielen Rückschlägen, läufts mittlerweile ganz gut Cool

Durfte dabei viele Fehler machen, die hätte ich einen Ansprechpartner gehabt.. man womöglich
vermeiden hätte können.

Also stell deine Fragen ;D ( und falls du hier im Forum antworten liest wie ... du bist zu faul für.. usw. das musst du doch wissen..)
in meinen Augen habe solche Leute einfach keinen Platz in einem Forum.. ( da diese offensichtlich nicht weiterhelfen wollen oder die
Weisheit mit dem Löffel gefressen haben )

Wissen is das einzige Gut das sich vermehrt wenn man es teilt Wink also los gehts!

Auf alle Fälle viel Erfolg beim Programmaufbau !

LG
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
04.10.2019, 14:15
Beitrag #14

stefan1312 Offline
LVF-Grünschnabel
*


Beiträge: 29
Registriert seit: May 2015

17
-
EN


Deutschland
RE: While-Schleife sofort beenden ?
Kleines Programm im Anhang: Zustandsautomat ("ausgebremst durch Zeitfunktion")

Mit Typdefinierter Enum-Konstante


Beschrifteter Schleife

Hätte eine Frage zu deinem Programm:

Was wolltest du denn mit der Querverbindung zwischen den beiden While Schleifen erreichen ?, dass diese
nacheinader ausgeführt werden?


Angehängte Datei(en)
0.0 .rar  Zustandsautomat_LV2017.rar (Größe: 13,07 KB / Downloads: 156)
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
04.10.2019, 14:42
Beitrag #15

RobertRoth Offline
LVF-Neueinsteiger


Beiträge: 9
Registriert seit: Oct 2019

19
2019
DE



RE: While-Schleife sofort beenden ?
Sali stefan1312,

bin schon fleissig am Case programieren. zur Zeit hab ich mid den alten Sub-vi's noch probleme, wird aner schon gehen.
Hab Dir mal die RSM100.rar angehängt, ist mein altes Programm aber gespeichert in LV2017

RSM Gen2.rar ist nun das heute angefangene Kunstwerk.

Ja, ich weis, es ist noch kein Meister vom Himmel gefallen und meist muss man in den Foren nicht nur mit Kritik rechnen, sondern man wird oft auch beleidigt. Dies muss nicht sein und ich muss sagen, bes jetzt fühle ich mich sehr wohl hier im LVF. Dafür ein riesen Dank an alle, die so hilfsbereit sind :-)

Schönes Weekend
Robi...


Angehängte Datei(en)
0.0 .rar  RSM100.rar (Größe: 73,74 KB / Downloads: 159)

0.0 .rar  RSM Gen2.rar (Größe: 151,44 KB / Downloads: 146)
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
04.10.2019, 15:04 (Dieser Beitrag wurde zuletzt bearbeitet: 04.10.2019 15:20 von GerdW.)
Beitrag #16

GerdW Offline
______________
LVF-Team

Beiträge: 17.469
Registriert seit: May 2009

LV2021
1995
DE_EN

10×××
Deutschland
RE: While-Schleife sofort beenden ?
Hallo Robert,

Zitat:zur Zeit hab ich mid den alten Sub-vi's noch probleme,
Ich habe mal exemplarisch Referenzfahrt2 geöffnet und leicht bearbeitet:
   
Durchgeführte und noch nötige Änderungen:
- unsinnige zweite While-Loop entfernt: nutze den Error-Wire für den DATAFLOW!
- wieso war "Numerisch" ein float-Wert, wenn du hier nur einen I32 bekommst? Warum hat dieses Control keinen aussagekräftigen Namen, wie z.B. "Current position"?
- wieso hieß der "error in" bei dir noch "error out"?
- wieso gibt es keinen "error out"?
- was passiert, wenn es bei "BrickletIO16V2/GetValue" einen Fehler gibt? Antwort: dann wird die Schleife NIEMALS enden! Ergo: Es fehlt Errorhandling!
- Muss der Stepper wirklich mehrfach gestartet werden, bis du den richtigen Wert vom IO bekommst? Würde es nicht ausreichen, den Stepper einmal vor der Schleife zu starten?
- Muss die Schleife so schnell wie möglich arbeiten?
- Das VI hat noch kein aussagekräftiges Icon. (LabVIEW-Hilfe -> StyleGuide)
- Es fehlen Kommentare im Blockdiagramm, ebenso in der VI-Beschreibung. (LabVIEW-Hilfe -> StyleGuide)
- Für die Anschlüsse im ConnectorPane gibt es einen Standard: Referenzen links/rechts oben, ErrorIO links/rechts unten. Schau dir mal die LabVIEW-eigenen Funktionen an… (LabVIEW-Hilfe -> StyleGuide)

Problem im HauptVI:
Du öffnest eine IPConnection und nutzt diese dann, um diese ganzen Bricks anzusprechen. Dann startest du deine Statemachine. Bis hier ist noch alles ok.
Aber: Parallel zur Statemachine schließt du die Referenz auf ein Relay und auf die IPConnection: ist das gewollt? Ist das ok?
(Auch hier: THINK DATAFLOW!)
Einfache Lösung des Problems: erstelle einen State, in dem alle Referenzen initialisiert werden. Und einen State, wo alles ordentlich geschlossen wird.
Der eine State wird als erstes aufgerufen, der andere als letzer…

Zum subVI "Referenzfahrt1":
   
- Ich habe mal die Rechnung mittendrin angepasst. Was du vorher hattest, nennt man Rube-Goldberg…
- Auch hier wird der Stepper ständig neu gestartet: soll das so sein?
- Reagiert der Stepper sinnvoll, wenn er so schnell auch wieder disabled wird?
- Auch diese Schleife läuft noch so schnell es nur geht…
Edit:
   
Habe meinen eigenen Rube-Goldberg noch entfernt…

Zum BrickletIO:
Du scheinst sehr oft und in vielen Schleifen und evtl. öfter nur auf einzelne Bits dieses BrickIOs zuzugreifen. Ich halte es deshalb für sinnvoll, diesen IO in einer parallelen Schleife zu lesen und den aktuellen Status der IO-Bits in einer globalen Variablen/Notifier/FGV (aka AE) abzulegen. Jede andere Schleife kann dann den jeweils aktuellen Status dort abfragen, ohne dass ständig die Hardware mit Abfragen bombardiert wird.
(Ich bin ein großer Freund von parallel laufenden VIs, die sich um jeweils eine Hardware kümmern: ein VI für digitale IO, eines für Analog-In, eines für Analog-out, usw. Alle legen ihren Status in global erreichbaren Datenstrukturen ab und bekommen ihre Befehle (falls nötig) per Queue. Eine Statemachine kümmert sich dann nur noch um Verwaltungskram und "Abläufe", aber nicht direkt um Hardware-Zugriffe…)

Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
Anzeige
09.10.2019, 11:06
Beitrag #17

RobertRoth Offline
LVF-Neueinsteiger


Beiträge: 9
Registriert seit: Oct 2019

19
2019
DE



RE: While-Schleife sofort beenden ?
Sali GerdW

Danke für Deine Bemühungen und Deine ausführlichen Fragen.
Generell kann ich wohl die Fragen mit einer Antwort beantworten: Ich bin Anfänger. Denke aber, dass dies zu einfach ist.
Viele Sachen wurden von LV mir auch vorgegeben und ich hab mir wohl zu wenig Gedanken gemacht, ob dies förmlich korrekt ist. Es lief ja :-). So z.B. thema Error In/out, Float-I32, etc.

Das Error-Handling habe ich bislang noch nicht ganz begriffen. Werde mich da auch noch reinhängen müssen.

Was die ganze Beschriftung, Icon und Anordnungen anbelangt (StyleGuide), hatte ich bislang noch nicht für so wichtig empfunden. Ich beschrifte dies, was ich für nötig halte. Wenn das Programm dann mal fertig ist, dann wird es noch mals überarbeitet und sauber beschriftet, dass ein anderer auch weis, wo was ist. Ich finde diesen Weg für mich, einen Anfänger, sinfoll, da ich auch diese Steuerung nun schon zu vierten Mal angefangen habe. Auch ein Sauberer Ablauf ist für mich momentan fast unmöglich, da ich immer noch versuchen muss, wie etwas geht und so siet meine Struktur sehr schnell wie ein Flicketepich aus. Hat aber den Vorteil, dass ich lernen kann und es auch nicht schlimm ist, wenn ich mal was verwerfe und von neuem beginne.

Zitat:Du öffnest eine IPConnection und nutzt diese dann, um diese ganzen Bricks anzusprechen. Dann startest du deine Statemachine. Bis hier ist noch alles ok.
Aber: Parallel zur Statemachine schließt du die Referenz auf ein Relay und auf die IPConnection: ist das gewollt? Ist das ok?
Da ich ja mit Brick's und Bricklet's von Tinkerforge arbeite, habe ich die Vorlagen von dort genommen und so begonnen, mit LV zu programieren.

Und auch die Rube-Goldberg Maschine, die ich vermutlich noch in 1000 anderen Stellen habe, zeigt, dass ich noch nicht genau weis, welche Elemente ich wie und wo einsetzen muss.

Status meiner neuen Programmierung:
Ich bin ja immer noch dran, an der Verschachtelung meines Programmes. Scheitere aber schon am Anfang. Das SubVI Referenzfahrt2.vi läuft im Case nicht. Im alten Program, in der While-Schleife, hat es gut funktioniert. Nun bekomme ich einen Fehler:
Zitat:Fehler 1172 bei Methodenknoten System.Reflection.TargetInvocationException: Ein Aufrufziel hat einen Ausnahmefehler verursacht.
Inner Exception: Tinkerforge.TimeoutException: Did not receive response in time for function ID 2
Die Display-Steuerung.vi läuft aber.


Ich hoffe, dass ich dieses Forum nicht überstrapaziere und mit meinen AnfängerFragen Euch zu lasten falle. Dennoch bin ich überaus dankbar, für dieses Forum und jedes hilfsbereite Mitglied.
Danke für die Hilefe und liebe Grüsse
Robi...


Angehängte Datei(en)
0.0 .rar  RSM Gen2.rar (Größe: 164,87 KB / Downloads: 166)
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
21.10.2019, 11:00 (Dieser Beitrag wurde zuletzt bearbeitet: 21.10.2019 11:02 von RobertRoth.)
Beitrag #18

RobertRoth Offline
LVF-Neueinsteiger


Beiträge: 9
Registriert seit: Oct 2019

19
2019
DE



RE: While-Schleife sofort beenden ?
Hallo Forum,

Die Programierung mit meiner State-Machine zieht sich noch etwas in die Länge.

Nun habe ich aber die Lösung für mein Grundproblem gefunden. In der State-Machine kann ich die "Schlaufen" sofort beenden.
Somit werde ich diesen Beitrag als erledigt anschauen.

Ich danke für die super Unterstützung auch über das eigentliche Thema hinaus.

Grüsse
Robi...
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
  Asynchrone VIs mit Event Struktur sofort beenden Kiesch 4 9.749 26.04.2024 10:29
Letzter Beitrag: Kiesch
  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
  Schleife sofort beenden mprocket 9 7.421 19.01.2018 23:26
Letzter Beitrag: mprocket
  While Schleife durchläuft ein zweites mal nach beenden p4tti 5 5.302 15.09.2016 10:34
Letzter Beitrag: jg
  Schleife nach Pop-Up beenden TDO 6 6.350 16.02.2016 09:59
Letzter Beitrag: TDO
  While Schleife mit Mausklick beenden eincremerle 3 3.990 10.11.2015 07:53
Letzter Beitrag: eincremerle

Who read this thread?
1 User(s) read this thread:
Minako

Gehe zu: