LabVIEWForum.de - beenden von Flache Sequenzstruktur

LabVIEWForum.de

Normale Version: beenden von Flache Sequenzstruktur
Du siehst gerade eine vereinfachte Darstellung unserer Inhalte. Normale Ansicht mit richtiger Formatierung.
Seiten: 1 2 3
Hallo Zusammen,

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.

für jeden Tipp bin ich sehr dankbar.

[attachment=51362]

Edit jg: externer Bildlink gelöscht
Die Standardantwort auf deine Probleme lautet:

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?
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 Sad

- 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.

vielen Dank nochmal

Gruß

mido

[attachment=51366]
Hallo Jens,

ich hab das programm so geändert, wie du vorgeschlagen hast . Es klappt aber nicht Sad
vllt mache ich wieder was falsches Undecided

kannst du mir vllt das ma korrigieren oder einen Tipp geben ??

Danke dir im Voraus


Mido


[attachment=51369]
Hallo Mido,

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? Smile

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…)

Außerdem:
Profil_ergaenzen
(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 Sad
...ich versuche dir zu erklären Tongue
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 Undecided
Und das will ich ja beheben.

ich versuche jetzt deinen Tipp nachzugehen und ma gucken Smile

gruß

Mido


P.S.: ich werde mein Profil ergänzen Tongue
Hallo Mido,

siehe Beitrag #2 und #3 weiter oben. Die beschreiben die Lösung…
(18.11.2014 16:04 )GerdW schrieb: [ -> ]Hallo Mido,

siehe Beitrag #2 und #3 weiter oben. Die beschreiben die Lösung…

Hallo GerdW,

es ist mir nicht gelungen, diese Beschreibung zu realisieren Sad
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.

Danke dir im voraus



Gruß
mido



[attachment=51378]
Hallo Mido,

hier mal die quick&dirty-Variante:
[attachment=51379]

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
Seiten: 1 2 3
Referenz-URLs