LabVIEWForum.de - Dauerhafter, aktualisierter Signaloutput

LabVIEWForum.de

Normale Version: Dauerhafter, aktualisierter Signaloutput
Du siehst gerade eine vereinfachte Darstellung unserer Inhalte. Normale Ansicht mit richtiger Formatierung.
Seiten: 1 2
Hallo,

ich bin noch blutiger Anfänger in Labview, soll aber eine Regelung für einen Heizkessel erstellen. Mein aktuelles Problem ist, dass ich über das Frontpanel, einen Prozessparameter einstellen lassen will (In meinem Fall ist das einfach eine Zahl, die über einen Drehregler (numeric control) eingestellt werden soll), der dann vom Programm weiterverarbeitet wird. Dieser Parameter wird in einer While-schleife eingelesen, das heißt er soll jeden Schleifendurchlauf aktualisiert eingelesen werden (je nachdem welcher Wert eben gerade am Frontpanel eingestellt wird).
Jetzt habe ich den Parameter einfach über einen Tunnel in die While-Schleife geleitet, doch wenn ich das Programm starte wird lediglich der Wert der am Anfang am Frontpanel eingestellt ist an die Schleife weitergegeben. Wenn ich diesen (während dem das Programm läuft) am Drehregler ändere, passiert gar nix. Was ist denn der Sinn eines Drehreglers, wenn der Wert dann wie eine Konstante verarbeitet wird?
Ich hoffe mit kann da jemand helfen. Danke schonmal,

Malte
Hallo Malte,

LabVIEW arbeitet nach dem Datenflussprinzip...

Dein Control wird einmal vor der Schleife gelesen. Der dann gerade aktuelle Wert wird dann per Draht in die Schleife geleitet. Und innerhalb der Schleife wird nur der Wert aus dem Draht bzw. dem Tunnel gelesen: Think DATAFLOW!

Zitat:ich bin noch blutiger Anfänger in Labview
Wie man an der Schreibweise von LabVIEW sieht… Big Grin
Schau dir doch mal die Links in meiner Signatur an!
Das mit dem Dataflow Prinzip habe ich schon verstanden, aber es muss doch eine Möglichkeit geben für jeden Schleifendurchlauf den Parameter neu vom Drehregler einzulesen... oder nicht?

Grüße, Malte
Hallo Malte,

Zitat:es muss doch eine Möglichkeit geben für jeden Schleifendurchlauf den Parameter neu vom Drehregler einzulesen...
Na klar gibt es die! Aber eben durch THINK DATAFLOW!

Vergleiche mal diese beiden Pseudocodes:
Code:
Beispiel 1
Wert := Input(Drehregler)
WHILE
  do something with Wert
WEND

Beispiel 2
WHILE
  Wert := Input(Drehregler)
  do something with Wert
WEND
Und jetzt bitte überlegen, welches Beispiel du programmiert hast und welches du eigentlich haben willst…

Tipp: Wenn du etwas "in einer Schleife" erledigen willst, dann sollte sich dieses "etwas" auch in einer Schleife befinden…
Ich habe das erste Beispiel programmiert und will das zweite Beispiel realisieren. Ich schätze du deutest an, dass Labview den Drehregler in der Schleife selber haben will. Mein Problem ist dann aber noch, dass sich die While-Schleife in einem SubVI befindet, ich möchte den Drehregler aber über das Frontpanel des MainVIs bedienen. Gibt es hierfür noch einen Workaround?
Danke für deine Hilfe und Geduld,
Malte
Hallo Malte,

Zitat:Mein Problem ist dann aber noch, dass sich die While-Schleife in einem SubVI befindet, ich möchte den Drehregler aber über das Frontpanel des MainVIs bedienen.
Das hast du bisher aber noch nicht erwähnt!
Mit einem VI im Anhang wäre das alles sicher schneller gegangen…

Zitat:Ich schätze du deutest an, dass Labview den Drehregler in der Schleife selber haben will.
Und schon sind wir wieder beim Schlagwort THINK DATAFLOW! Big Grin

Zitat:Gibt es hierfür noch einen Workaround?
Ja klar, LabVIEW ist schließlich eine Programmiersprache… Big Grin
- offensichtliche Lösung: Schleife aus dem subVI entfernen…
- andere Lösung: das "subVI" nicht in der Hauptschleife deines MainVIs laufen lassen, sondern parallel dazu. Dann die Daten wie zwischen parallelen Schleifen üblich transportieren (Melder, Queues, globale Variablen, FGVs/AEs, …).

Mal was grundsätzliches: Je mehr Informationen (Bilder, VIs, Beschreibungen) du über dein Problem bereitstellst, desto treffsicherer werden die Antworten/Lösungen…
Alles klar, werde das morgen alles mal ausprobieren.
Danke für die Hilfe
Erstmal danke nochmals für die Hilfe, klappt jetzt soweit.
Es hat sich nur leider ein zweites Problem aufgetan. Den Parameter, den ich in jeder Schleife übergebe, brauche ich auch noch an anderer (früherer Stelle). Wegen des Dataflow Prinzips kann ich diesen Parameterwert ja nicht aus der erst später ablaufenden Schleife übertragen, wenn ich das probiere kommt auch der Fehler "befindet sich in einer Endlosschleife". Die beiden Prozesse bei denen ich den Parameter brauche müssen auch beide zeitlich getrennt voneinander stattfinden.
Kennt da jemand einen Ausweg?

Grüße, Malte

Anbei das Blockdiagramm, der Parameter von dem ich spreche ist der rot umkreiste Temperaturfühler, der hier erstmal als Bedienelement modelliert ist.
Hallo Malte,

Zitat:kommt auch der Fehler "befindet sich in einer Endlosschleife".
Du willst hier auf einen Wert zugreifen, der aufgrund des DATAFLOW erst zu einem späteren Zeitpunkt ermittelt wird…

So wie dein Bild aussieht, würde ich dir eine Statemachine empfehlen: die States könnten (u.a.) "Vorspülen", "Zünden", "Regeln" heißen. Dann hättest du wieder alles in einer Schleife und somit ständig Zugriff auf den Temperaturmesswert!
Aber ermittelt wird der Wert ja eigentlich nicht, das ist ja bloß ein Temperaturfühler, der während dem Prozess die Temperatur in der Brennkammer misst. Auf diesen Wert will ich dann in verschiedenen Abschnitten des Prozess zugreifen (nur halt natürlich immer den aktuellen Wert zum jeweiligen Zeitpunkt). Das kann doch eigentlich nicht so kompliziert sein oder?Blink
Gruß,
Malte
Seiten: 1 2
Referenz-URLs