LabVIEWForum.de
Verschachtelte und parallele Schleifen gleichzeitig beenden - Druckversion

+- LabVIEWForum.de (https://www.labviewforum.de)
+-- Forum: LabVIEW (/Forum-LabVIEW)
+--- Forum: LabVIEW Allgemein (/Forum-LabVIEW-Allgemein)
+--- Thema: Verschachtelte und parallele Schleifen gleichzeitig beenden (/Thread-Verschachtelte-und-parallele-Schleifen-gleichzeitig-beenden)



Verschachtelte und parallele Schleifen gleichzeitig beenden - Rayid - 11.11.2016 20:03

Hallo liebe Community,

bei diesem Beitrag geht es um gleichzeitiges beenden von verschachtelten und parallel laufenden Schleifen.

Erstmal zum Programm.

Bei diesem Programm geht es darum einen Elektromotor gegen eine Bremse laufen zu lassen. Dabei wird der Motor gestartet anschliesend die Bremse bestromt, eine Zykluszeit der Motor laufen gelassen und dann gestoppt und die Pausenzeit abgewartet.
Es laufen mehrere Zyklen hintereinander ab welche der User in der Tabelle eingeben bzw. definieren kann. Sobald man dann auf Start drückt läuft das Programm alle Zyklen durch und beginnt die Sequenz dann so oft von neu wie der User definiert hat.

Dabei laufen mehrere Schleifen hintereinander ab und auch manche parallel.
Ich will sozusagen es möglich machen das sobald der User den Start/Stop button umlegt (also auf stop) das der dauerlauf abbricht, der Motor gestoppt, der Strom von der Bremse genommen wird und man den lauf des Elektromotors neu starten kann.

Ich arbeite schon mit lokalen Variablen und habe zich sachen damit probiert aber irgendwie bekomm ich es net hin weil sobald ich auf abbrechen drücke während der Motor läuft funktioniert es einwandfrei. Das programm geht in die äußerste Schleife zurück und ich kann von neu starten. Drücke ich aber Pause während der Motor sich gerade in der Pausenzeit befindet startet er noch einmal und das programm bleibt dann genau kurz bevor die bremse bestromt wird hängen. Der Motor läuft dann nur noch ohne last Dauerhaft mit der Drehzahl des nächst definierten Zyklusses. Der Start/Stop hebel ist dann komplett ohne funktion und das Programm macht nicht mehr weiter.

Ich will das jedesmal wenn ich stop gedrückt wird alles beendet wird und wieder in der äußersten Schleife die Zyklen neu gestartet werden kann. Die VI befindet sich im Anhang.

Gleich vorrab ich bin völligst der Anfänger und habe mir alles selber über das internet ohne irgendwelche Kurse oder Hilfe beigebracht und hatte auch nur wenig zeit dafür, da ich leider zeitdruck habe. Deswegen nehmt rücksicht und seit nett Big Grin

Danke schonmal allen glühenden Köpfen im vorraus Big Grin


RE: Verschachtelte und parallele Schleifen gleichzeitig beenden - jg - 11.11.2016 22:31

Wir hatten ja schon einmal das Thema "State-Machine", damit wäre dein VI wesentlich übersichtlicher und einfacher abzubrechen.

Speziell zu deinem VI: THINK Dataflow, wenn du erst am Ende der äußeren For-Loop den Status deines Start/Stopp Schalter auswerten willst, dann musst du das auch so programmieren.

Gruß, Jens


RE: Verschachtelte und parallele Schleifen gleichzeitig beenden - Rayid - 12.11.2016 00:36

Ja genau das will ich aber verstehe einfach nicht wie. Mein Taster läuft ja in der While Schleife und ich weis einfach nicht wie ich es hinbekomme das er auch in der bzw. nach der Pausenzeit abbricht BahnBahn

Könntest du deine Antwort etwas genauer schildern? Oder einprogrammieren was du genau meinst?
Der einfache satz hat mir jetzt nicht viel gebracht.

Gruß


RE: Verschachtelte und parallele Schleifen gleichzeitig beenden - jg - 12.11.2016 07:26

(12.11.2016 00:36 )Rayid schrieb:  Könntest du deine Antwort etwas genauer schildern? Oder einprogrammieren was du genau meinst?
Mist, habe gestern die falsche Version hochgeladen:
[attachment=56892]
Gruß, Jens


RE: Verschachtelte und parallele Schleifen gleichzeitig beenden - IchSelbst - 12.11.2016 13:42

(11.11.2016 22:31 )jg schrieb:  Wir hatten ja schon einmal das Thema "State-Machine", damit wäre dein VI wesentlich übersichtlicher und einfacher abzubrechen.

Damit der Hinweis von JG noch deutlicher wird, sag ich auch noch mal:

Einen Ablauf mit verschachtelten und/oder sequenziellen Schleifen durchzuführen, ist Im Allgemeinen die unprofessionellste, also schlechteste aller Möglichkeiten. Eine Schrittkette ist normalerweise die bessere Lösung.

Es mag zwar sein, das die erste Möglichkeit leichter zu programmieren ist als eine Schrittkette - aber was Debugging angeht und Erweiterbarkeit ist eine Schrittkette unschlagbar. Dabei ist es ganz einfach, eine Schrittkette zu programmieren: Du brauchst nur einen strict-typisierten private Datensatz, der alle(!) laufenden Daten (also auch die Schleifenzähler etc. samt aktuellem Schritt STATE) enthält. Ferner eine STATE-Sequenz in einer While-Schleife. STATE selbst ist ein strict-typisierter Enumerator. Mit in die While-Schleife sequenziert zur Statemachine kannst du weitere Funktionen integrieren - zum Beispiel einen Abbruch nach jedem einzelnen Schritt ...


RE: Verschachtelte und parallele Schleifen gleichzeitig beenden - Rayid - 14.11.2016 07:48

Hallo und schönen Montag,

habe mich mal hingehockt am Sonntag und das Programm umgeschrieben auf eine State maschine. Komme heute warscheinlich nicht zum testen aber sollte so eigentlich funktionieren.

Es fehlt nurnoch das abwarten auf das vorgegeben Drehmoment bevor die Zeit beginnt aber das krieg ich auch noch hin sollte kein Problem darstellen (Vorerst gesagt 2hands)

Möchte gerne noch eine Ratschlag von euch einholen.
Ich würde jetzt gerne genau dieses Programm auf einem kleinen PC oder Microcontroller laufen lassen. Sozusagen auf Ihn dieses Labviewprogramm draufspielen und dann alleine selbständig laufen lassen nachdem man auf Start gedrückt hat.

Ich habe überlegt ein Raspberry pi 3 zu verwenden. Bei Ihm könnte ich dann per USB einfach die befehle rausschicken und das System laufen lassen zusätzlich noch über USB messdaten einlesen. Natürlich gibt es noch andere Varianten von National Instruments, Arduino, etc etc. (habe im internet mehrere möglichkeiten gesehen mit verschiedensten microcontrollern oder kleinPC's) aber ich will sozusagen so einfach und günstig wie möglich bleiben, da das System auch später von einem Bediener schnell erlernt und selber programmiert und bedient werden soll. Raspberry erschien mir sehr simple zu verstehen und umzusetzten.

Habt ihr da vielleicht irgendwelche empfehlungen für mich?
Sry falls diese anfrage im falschen bereich landet aber habe gedacht ist einfacher zu verstehen wenn oben gleich mein Programm ist Smile

Grüßer Rayid


RE: Verschachtelte und parallele Schleifen gleichzeitig beenden - GerdW - 14.11.2016 08:24

Hallo Rayid,

wenn man dein VI öffnet, bekommt man das hier geboten:
[attachment=56894](5 lokale Variablen von "Zyklus" - von denen keine einzige benötigt wird!)
Was genau an "THINK DATAFLOW!" hast du nicht verstanden? Hmm

Ersetze nach Möglichkeit ALLE lokalen Variablen durch Drähte! Vermeide RaceConditions!
Nutze Schieberegister!
Lerne LabVIEW anhand der vielen kostenlosen Angebote von NI!
Bitte keine Bezeichnungen von Terminals im BD ausblenden! (Wenn dein Label zu lang ist: kurzes prägnantes Label benutzen und im FP einen Untertitel/Caption benutzen!)
(Ein paar Stichworte: Gerade Drähte, AutoCleanup, StyleGuide…)