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!
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.
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.
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]"?
' 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.
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.
A few weeks of developement and testing can save a WHOLE afternoon in the library!
Anzeige
01.12.2006, 16:05 (Dieser Beitrag wurde zuletzt bearbeitet: 01.12.2006 16:08 von Lucki.)
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)