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!
18.11.2014, 01:26 (Dieser Beitrag wurde zuletzt bearbeitet: 18.11.2014 07:23 von jg.)
ich hab folgendes Problem: ich möchte ein DC-Gerät fernsteuern, ich habe das geschafft bis ein kleines Problem.
mein Programm sollte das Gerät so steuern, dass es sich nach einer bestimmten Zeit ein- und ausschalten.
Z.B. 5 min an, 10 Sec aus, 3 min an ...usw.
Also das läuft schon gut ..aber wenn ich diese Zeiten festlege und das Programm läuft, kann ich dann das Programm nicht mehr beenden (wenn dann nur mit dem Stop-Button).
meine Frage:
kann ich irgendwie die Flache Sequenzstruktur mit einem Bedienelement beenden ??
Oder kann man diese bestimmten Zeiten anderes programmieren, dass es ,wie ich beschrieben hab, funktioniert ??
unten ist mein Programm...vllt kann einer von euch mir dabei helfen.
1) Verwende eine State-Machine (Zustandsautomat) als Programmstruktur anstatt einer Flat Sequence
2) Anstatt z.B. 1x 50 Sekunden zu warten, warte 500x 100 ms, dann kannst du jederzeit unterbrechen
Gruß, Jens
P.S.: Anhänge bitte in Zukunft in Übereinstimmung mit den LVF-Regeln hier im Forum hochladen.
P.P.S.: Wozu musst du dauernd in einer While-Schleife dein Gerät so schnell es geht immer wieder anschalten. Langt das nicht einmal?
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!
Wenn man einen Vorgang entweder nach einer verstrichenen Zeit, oder gegebenenfalls vorher mit einem Knopf beenden will, so eignet sich dafür die Wartefunktion nicht - außer man zerhäckselt die Wartezeit in kleine Häppchen, wie von Jens vorgeschlagen.
Ich nehmen dafür immer das VI "verstrichene Zeit". Es ist zwar eigentlich ein Express-VI, läßt ich aber auch als kleines Symbol darstellen, so dass das keiner merkt.
In die etwas andere Programmmierung muß man sich allerdings erst einarbeiten. Denn das VI "verstrichene Zeit" wartet selbst überhaupt nicht, es gibt bei Aufruf nur den boolschen Wert aus, ob die voreingestellte Wartezeit schon verstrichen ist oder nicht. Man muß es also ständig pollen - was aber innerhalb einer Schleife sowieso der Fall ist.
Die Empfehlung auf Umstellung in eine state-machine gilt aber weiterhin. Mir ging es hier nur um das Teilproblem, wie man diesen einen Case beendet
(18.11.2014 07:30 )jg schrieb: P.P.S.: Wozu musst du dauernd in einer While-Schleife dein Gerät so schnell es geht immer wieder anschalten. Langt das nicht einmal?
Hallo Jens,
vielen Dank für deinen Tipp.
Ich beschäftige mich seit kurzer Zeit mit Labview, deswegen habe ich nicht so viele Erfahrungen
- eigentlich reicht es nur einmal anzuschalten, ich hab es bloß mit While-Schleife gemacht, damit ich wie gesagt die Flache Seq. beenden kann, was mir eigentlich nicht geholfen hat.
ich werde mein Programm so änderen, wie du vorgeschlagen hast ...
P.S: ich hänge meinen Programm und du kannt dir das angucken.
du näherst dich einer (vollständigen) Statemachine an. Weiter so!
Zitat:Es klappt aber nicht
Das ist kein Fehler, wie er von LabVIEW ausgegeben wird. Kannst du das mal genauer beschreiben?
Zitat:vllt das ma korrigieren
Willst du jetzt Rechtschreib-Tipps haben?
Zitat:oder einen Tipp geben ?
- Verknüpfe deinen STOPP-Button mittels einer OR-Funktion mit dem Stop-Flag aus deiner "Statemachine"!
- Da du in jedem State eine Wartezeit hast, kannst du die Wartefunktion aus der Case-Struktur herausnehmen und nach der Case-Struktur aufrufen. Aus jedem State wird dann die abzuwartende Wartezeit ausgegeben… (Allgemeiner Tipp: wenn man gleiche Code-Sequenzen innerhalb mehrerer Cases ausführt, kann man diesen Code (meist) auch nach der Struktur platzieren. Vorteil: Code ist nur einmal vorhanden…)
(18.11.2014 15:38 )GerdW schrieb: Das ist kein Fehler, wie er von LabVIEW ausgegeben wird. Kannst du das mal genauer beschreiben?
Hallo GerdW,
danke erstmal für deine Mühe.
Also das Programm läuft sehr gut, bis auf dieses kleines Problem
...ich versuche dir zu erklären
Also wenn ich die Wartezeiten festlege z.B. (10 min AN, 1 min AUS ..usw), dann kann ich wärend diese Zeiten das Programm nicht mehr beenden...Es läuft bis diese Wartezeiten vergehen
Und das will ich ja beheben.
ich versuche jetzt deinen Tipp nachzugehen und ma gucken
siehe Beitrag #2 und #3 weiter oben. Die beschreiben die Lösung…
Hallo GerdW,
es ist mir nicht gelungen, diese Beschreibung zu realisieren
ich kann leider die Wartezeit nicht kurzer machen, wie Jens beschrieben hat ( Anstatt z.B. 1x 50 Sekunden zu warten, warte 500x 100 ms)
vllt kannst du mir dazu noch einen Tipp geben ? ...ich bin ja LabVIEW-Anfänger.
Wie schon gesagt:
- Warteschleife nach dem State
- Schleife, die ein kleines Intervall mehrfach wartet
- FOR-Loop mit Abbruchbedingung (gibt es die schon in LV8.6? Ist wirklich eine sehr alte LV-Version…)
- OR-Verknüpfung mit allgemeiner Abbruchbedingung