LabVIEWForum.de - Problem mit while Schleifen

LabVIEWForum.de

Normale Version: Problem mit while Schleifen
Du siehst gerade eine vereinfachte Darstellung unserer Inhalte. Normale Ansicht mit richtiger Formatierung.
Hallo,
ich habe folgendes Problem:
Aus einem Temperaturschrank soll mittels LabVIEW jede Sekunde ein Temperaturwert ausgelesen werden und u.a. als Graph dargestellt werden. Der Schrank lässt sich regeln, d.h. es ist eine gewünschte Temperatur einzugeben, die dann erreicht wird. Die Temperatur schwingt sich jedoch ein und wenn die Temperatur 1 Minute lang im Bereich +/- 1 °C pendelt, gilt es als eingeschwungen.

Um das zu realisiern, wird eine While Schleife eingesetzt, die jede Sekunde einen Temp. Wert liest. In der While Schleife ist eine Case Struktur, die eine Verzögerung beinhaltet. Wird eine Variable in der While Schleife true, so startet die Verzögerung. Jetzt setzt aber die äußere Schleife aus, da ja zuerst die Case Anweisung mit der Minute abgearbeitet wird. Das bedeutet, die Messung wird für diese Zeit ausgesetzt und wenn die Case Struktur abgearbeitet ist, geht die Messung im gewünschten Sekundentakt weiter.
Das Ziel ist eine kontinuierliche Messung. Die While Schleife müsste parallel und völlig unabhängig zum restlichen Programmablauf laufen.

Wie ist das zu realisieren?

Viele Grüße
Hallo,

wenn ich das richtig verstanden habe ist in dem TRUE-Case ein Wait enthalten.
Hier solltest Du besser mit der Funktion Tick Count (ms) arbeiten, damit kannst Du solange die ms zählen bis die Minute voll ist ohne das ganze VI für diese Zeit zu stoppen.

Gruß,
Marko
Du willst also zwei parallele unabhängige While-Schleifen realisieren?

Gruss
' schrieb:Hallo,

wenn ich das richtig verstanden habe ist in dem TRUE-Case ein Wait enthalten.
Hier solltest Du besser mit der Funktion Tick Count (ms) arbeiten, damit kannst Du solange die ms zählen bis die Minute voll ist ohne das ganze VI für diese Zeit zu stoppen.

Gruß,
Marko

Ja, sieht schon sehr gut aus.
Ist das "Wait until next multiple [ms]"?

grüße
' schrieb:Ist das "Wait until next multiple [ms]"?
grüße

Nein wie oben bereits erwähnt heisst die Funktion "Tick Count (ms)".
Das ist die erste Funktion in der Timing Palette.
Schau Dir mal das Beispiel zu der Funktion an.

Gruß,
Marko
So wie Marko würde ich das auch machen, wenn ich dein Problem richtig verstanden habe.

Will nur noch erwähnen, dass es prinzipiell ja kein Problem ist 2 Schleifen einfach parallel laufen zu lassen. Daten zwischen den Schleifen kannst du dann mit lok. Variablen, Queues, Melder, ... austauschen.

In deinem Beispiel würden dann 2 Schleifen laufen. Sobald deine Variable true wird schickt ein Melder ein Signal an Schleife 2, die dann eine Minute abzählt und anschließend per Melder wieder ein Signal retour schickt.

Wenn es aber wirklich nur um das Abwarten der Minute geht, dann ist Markos Weg viel einfacher und unkomplizierter.
Leute, machts doch nicht unnötig kompliziert. Für dieses einfache Problem braucht man weder mehrere Schleifen noch eine "eingebaute Verzögerung". Man braucht nur einen Zähler in der Meßschleife, realisiert mit einem Shift-Register. Jeder Messwert, der sich außerhalb der Toleranz befindet, setzt den Zähler auf Null zurück. Jeder Meßwert in der Toleranz inkrementiert den Zähler um 1. Wenn irgendwann der Zähler die Zahl 60 schafft, dann bedeutet das, daß in den letzten 60sec keine Toleranzüberschreitung stattgefunden hat. Dann ist der eingeschwungene Zustand erreicht.
(Ein "richtiger" Programmierer machts natürlich umgekehrt: Zähler immer auf 60 setzen und countdown bis 0)
Referenz-URLs