LabVIEWForum.de - Noch immer Probleme mit Temperatur-Vergleichsschleife

LabVIEWForum.de

Normale Version: Noch immer Probleme mit Temperatur-Vergleichsschleife
Du siehst gerade eine vereinfachte Darstellung unserer Inhalte. Normale Ansicht mit richtiger Formatierung.
Seiten: 1 2
Hallo zusammen,

ich hatte mich vor ein paar Tagen schon einmal an das Forum gewendet (vgl. link), Kvasir hatte mir auch mit einer Möglichkeit geholfen, einen eingestellten Temperaturwert mit einer oberen bzw. unteren Schranke zu vergleichen.

link --> http://www.LabVIEWforum.de/index.php?showtopic=2755

Das Teilprogramm schaut jetzt so aus: [attachment=2399]

Leider hängt das Programm in der Vergleichsschleife fest. Ich weiß nicht, woran es liegt. Kann mir jemand helfen?

Viele Grüße

M.
Hi M.,

mach doch auf der Schleife nen Breakpoint, mach dann die Highlighting-Funktion (Lampe) an und schau dir in der Schleife an, was passiert! Wenn Sie hängt, wird wohl der Zähler nicht inkrementiert und nie "5" erreicht, dh nie abgebrochen! Warum wird aber nicht hochgezählt? Das solltest du mit der Lampe sehen! Wahrscheinlich ist der Wert nie "In Range", vieleicht weil bei dieser Funktion nur der untere Wert "inklusive" ist!

Kleiner Tipp: Mach doch in den Optionen mal ein Häkchen, damit über Abzweigungen Punkte angezeigt werden! Dann lassen sich Abzweigungen von Kreuzungen unterscheiden!

Gruss
Achim
Hallo Achim,

die Schleife funktioniert jetzt, tut aber noch immer nicht das, was sie soll. Der Plan ist folgender:
1. Temperatursollwert wird aus einer Datei ausgelesen und an den Temperaturcontroller übergeben
2. Das Programm empfängt den ersten Istwert der Temperatur
3. Vergleichsschleife: Befindet sich die Isttemperatur innerhalb des definierten Intervalls um die Solltemperatur herum? Nein --> Nächste Isttemperatur wird gemessen
Ja --> Fünfmaliger Vergleich der Isttemp. mit der Solltemp.
Liegen alle fünf Messwerte innerhalb der Schranken ---> nächste Sequenz wird gestartet (Aufnahme einer Strom-Spannungs-Kennlinie)
Liegt einer (oder mehrere) der Messwerte außerhalb der Schranken --> nächster Temp.-wert wird aufgenommen u.s.w.

Von der Realisierung des Planes bin ich aber noch immer weit entfernt...

Gruß
Marvin
Die Schleife selbst zum Vergleichen der Temperaturwerte hatte schon gepasst, so wie du sie hattest.

Dein Problem ist ein anderes.

Deine Messwerte stecken in einem Mehrdimensionalen Array. Ganz außen hast du scheint es eine For Schleife, die pro Durchlauf nur eine Dimension betrachtet.
Dann indizierst du den übrigbleibenden 1D-Array nochmal.
Was dir dann übrigbleibt ist nur noch ein Wert (= eine Temperatur).

Mit diesem einen Messwert gehst du dann zum Vergleich. Das kann natürlich nicht funktionieren, weil du ja immer den gleichen Messwert betrachtest.

Ich bin mir nicht sicher, ob das schon genügt (sehe ja nicht dein ganzen Programm), aber probier doch mal das Indizieren weg zu lassen und dafür bei der Vergleichsschleife Indizierung zu aktivieren.

Grüße
Hi Marvin,

so sollte das gehen, oder? Allerdings ist ne Schleife ("weiterer Code") in ner Schleife nicht so doll, die kann nämlich u.U. nicht mehr abgebrochen werden! Du könntest zwar ne globale Variable (T/F) da rein legen und mit dem äußeren Stop verknüpfen, aber das ist auch nicht das Wahre! Am besten baut man sich da ne State Machine und springt von "Auslesen" nach "Vergleichen" bei 5x TRUE in den State "weiterer Code" bzw. bei FALSE in wieder nach "Auslesen" usw.

Gruss & Schönes WoE

Feierabend!
A.

PS: Ich hoffe du kannst es öffnen, ich hab nämlich grad nur die V8.0 als Evaluierung hier...


Ach, ich mach noch ein Bildchen...
Hallo Kvasir,

der Temperaturwert, den Du meinst ist der Sollwert. Dieser wird dann mit dem Istwert verglichen (Feld "Kelvin-Reading"). Ich muß mir die Temperaturwerte einzeln aus einer Datei holen und stabilisieren. Dann wird bei der aktuellen Temperatur eine Strom-Spannungs-Kennlinie gefahren. Ist diese aufgenommen, wird eine neue Temperatur angesteuert usw.
Ich weiß nicht genau, was Du mit Aktivierung der Indizierung in der Vergleichsschleife meinst... Hmm. Ist auch schwierig zu erläutern.. Mein Temperaturfile ist eine Datei mit Werten in einer Spalte, die Zeilen sind jeweils mit einem "end of line" abgeschlossen. Das ist die einzige Möglichkeit, die mir eingefallen ist, um die Werte einzeln einzulesen.
Kannst Du mir Deine Idee etwas genauer erläutern? Ich bin für jeden Tipp dankbar, weil LabVIEW-Neuling. An diesem Programm hab ich schon eine ganze Weile gesessen und jetzt sehe ich den Wald vor lauter Bäumen nicht mehr. Zur Not schicke ich mal das ganze Programm. Das wird aber erst nach dem 5. Juli was, weil am 1. Juli heirate ich erst einmal! Es hat also noch ein wenig Zeit. Trotzdem danke im Voraus und bis später!

Gruß Marvin


Hi Achim,

leider kann ich Dein vi nicht öffnen. wird von LV6 nicht unterstützt. Aber danke für das Bildsche. Vielleicht kann ich das Problem mit Deiner Hilfe und mit der Hilfe von Kvasir doch noch irgendwie lösen. Wie gesagt, ich kann mich erst ab 5.Juli wieder mit meinen Temperaturen beschäftigen, weil Heirat ist erstmal wichtiger. Und schöner!

Vielen Dank erstmal und bis denne

Marvin
Hi Marvin

na dann erstmal herzliche Glückwünsche zur Heirat. Verstehe ich, dass dir das wichtiger ist als LabVIEW Probleme Smile

Du hast natürlich recht. Den Wert den ich gezeigt habe ist der Sollwert. Hatte zu schnell drübergeschaut. Das Problem hatte ich allerdings richtig erkannt. Du gehst mit einem einzelnen Messwert in die Schleife. In der Schleife wird dann immer nur dieser eine Wert überprüft.
Das heißt die Schleife läuft entweder 5x (Wert innerhalb der Grenzen) oder ewig (Wert außerhalb der Grenzen).

2 prinzipielle Möglichkeiten fallen mir ein dein Problem zu lösen.

- Du nimmst einen ganzen Array von Messwerten auf und schickst den dann in die Schleife, wo du bei jedem Durchlauf einen Wert davon überprüfst.

- Du machst deine Messung innerhalb der Schleife und nimmst pro Durchlauf einen Wert auf.

Die erste Variante ist die, die Achim gut beschrieben hat. Für was du dich entscheidest dürfte bei deinem Programm eigentlich egal sein. Ich vermute mal, dass 2tere Variante weniger Aufwand beim umschreiben bedeutet.

Ev. genügt es schon deine Mess-Vi's einfach mit in die Schleife zu packen.

Schönes Wochenende noch
Hi Marvin,

ich hoffe, du kannst die VI's öffnen...ich hab sie ursprünglich in LV8.0 erstellt und dann bis LV6.1 nach unten konvertiert...

Ich hab da mal deinen Ablauf in ne Art State Machine umgewandelt, natürlich stark vereinfacht! Kopier dir die Dateien alle in einen Ordner, mit Ausnahme der "dummytemperature.txt" (die gehört nach C:datenfilesin). Vielleicht kannst du damit ja was anfangen!

Gruss
Achim

PS: Ebenfalls alles Gute zur Hochzeit! Am 4. bzw. 19. August bin ich auch dran...;-)


[attachment=2482]
Hallo zusammen,

frisch verheiratet aus dem Urlaub zurück...Wink
Eure Tipps waren klasse, die Vergleichsschleife steht jetzt und funktioniert. Danke nochmal für eure Mühe und eure Ideen!
Ich habe noch ein anderes Problem, mit dem ich mich schwer tue:
Zur Ansteuerung der Solltemperatur nutzt der Temperaturcontroller ein Tripel von variablen Termen, sogenannte PID´s (P= proportional, I= integral, D= derivative). Diese Terme steuern das Heizverhalten des Systems. Der Kryostat wird ständig mit flüssigem Stickstoff versorgt und der Temperaturcontroller versucht durch Gegenheizen den Sollwert einzustellen. Nun sind diese PID´s aber temperaturabhängig, weil die Probe eine Wärmekapazität besitzt und das Heizverhalten bei zB 77K ein anderes sein muß als bei zB 200K. Die passenden PID´s für verschiedenen Temperaturbereiche habe ich schon experimentell ermittelt:
T = 77K...130K --> P= 800, I= 300, D= 5
T = 130K...200K --> P= 500, I= 250, D= 3
T = 200K... Raumtemp. --> P= 300, I= 150, D= 2
Die PID´s werden dem Controller wie im Bildschä gezeigt übergeben (steht dort als gain, reset, rate)

[attachment=2523]

Ich bin jetzt am knobeln, wie ich diese Werte temperaturabhängig einlesen kann. Der Sollwert müsste mit der oberen und unteren Schranke des ersten T-Intervalls (77K...130K) verglichen werden. Liegt er im Intervall --> PID´s übergeben. Liegt er nicht drinnen, Vergleich mit nächstem Intervall u.s.w.
Was ich versucht habe, funktioniert alles nicht wiklich. Kann mir jemand helfen?

Viele Grüße von marvin
Hi Marvin,

nochmals herzlichen Glückwunsch!

Schau dir mal das VI an...

Gruss
Achim


PS: Das TransposeArray im VI hätte man sich sparen können, wenn ich die Werte gleich anders herum eingegeben hätte...

[attachment=2525]


PPS: Ach, Mist, du hast ja nur LV6...hier die Bilder!


[attachment=2526][attachment=2527]

In der CaseStruktur gibt es die Cases 1 (0), 2 (1), 4 (2)!
Seiten: 1 2
Referenz-URLs