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 alle zusammen,
Da ich ein Neuling in LV bin, hoffe ich, dass ihr mir sagen könnt, ob das überhaupt möglich ist und mir gegebenfalls ein paar Lösungstipps geben könnten.
Ich will zwei VI’s verbinden bzw. abhängig voneinander machen. Dabei lese ich mit VISA mittels eines Thermoelement-Modul Temperaturen aus. Vereinfacht würde ich das über das Modbus Serial Example Master.vi machen, wo mir die Temperaturen ausgegeben werden.
Zusätzlich wird ein Julabo Thermostat F32 MA über ein firmeneigenes VI gesteuert, wo man die Settemperatur per Hand einstellen kann. Beide funktionieren einzeln auch.
Nun möchte ich die beiden verbinden. Die Settemperatur soll sich in Abhängigkeit von der Thermoelement-Temperatur selbstständig ändern. Wenn die Thermoelement-Temperatur steigt, soll sich die Settemperatur selbstständig verringern gegebenfalls andersrum.
ZB. im Temperaturbereich der Thermoelemente von 20-30 soll die Settemperatur 40 betragen.
Bei einem Temperaturbereich von 30-40 soll sich die Settemperatur veringern.
Wenn ich das richtig verstanden habe, möchtest du zwischen 2 VIs kommunizieren. Das macht man im Normalfall über Melder oder Queues oder im einfachsten Fall mit globalen Variablen.
Hallo Markus,
wo ist den die Änderung der Settemperatur?
In dem VI beeinflusst die Settemp. ein unbekanntes VI aber nur wenn die Settemp. sich geändert hat.
Wo ist der Einfluss des Thermoelements?
Die Änderung der Settemperatur geschieht normalerweise über das FP per Handeingabe.
Ich glaube, wenn ich das gesamte System kurz erkläre wird es deutlicher. Ich habe eine Prüfkammer, in der eine konstante Temperatur hergestellt werden soll.
Geheizt bzw gekühlt wird die Kammer über ein Julabo Wärmeumwälzthermostat, welches durch einen Schlauch (liegt in der Prüfkammer) warmes Wasser pumpt.
Leider hat dieses Thermostat keinen externen Temperaturfühler.
Zusätzlich ist ein Thermoelement in der Kammer angebracht, welches über ein Modul die Temperaturen mir ausgibt.
Theoretisch könnte ich bei erreichter Prüfkammertemperatur per Hand die Settemperatur des Thermostats herunterstellen. Jedoch wäre das sehr umständlich.
Eine Art Beziehung wäre am einfachsten.
Sprich:
wenn die Kammertemperatur über 38 °C steigt, dann verringere die Settemperatur von 80 °C auf 75°C
Ab 39 °C Kammertemperatur, von 75°C auf 70°C. Und so weiter. Eine Art Regler, wo ich eine Tabelle erstelle. Temperaturbereiche des Thermoelements welches eine zugehörige Settemperatur besitzt.
Die Frage ist, ob das generell möglich ist, und wie ich das klügsten hinbekomme.
Zitat:Eine Art Beziehung wäre am einfachsten. Sprich: wenn die Kammertemperatur über 38 °C steigt, dann verringere die Settemperatur von 80 °C auf 75°C
Ab 39 °C Kammertemperatur, von 75°C auf 70°C. Und so weiter. Eine Art Regler, wo ich eine Tabelle erstelle. Temperaturbereiche des Thermoelements welches eine zugehörige Settemperatur besitzt.
Die Frage ist, ob das generell möglich ist, und wie ich das klügsten hinbekomme.
Einfach einen PID-Regler benutzen, der den Sollwert an die Regelgröße anpasst…
Alle Funktionen in eine Schleife packen:
- Messwertabfrage von deinem Thermoelement
- Messwert und Sollwert in den PID-Regler
- mit passenden Gain-Werten erzegt der PID-Regler einen Stellwert
- den Stellwert an deinen Thermostaten ausgeben
Julabo besitzt schon einen hauseigenen PID-Regler. Jedoch ist der normalerweise nur für Geräte, die einen externen Temperatursensor besitzen. Theoretisch könnte man den ja benutzen. Nur das sich das Programm die externe Temperatur von dem Reading Register vom MB Serial Example Master von dem Thermoelement nimmt.
Jedoch weiß ich echt nicht, wie man das am einfachsten macht. Theoretisch könnte man ja in dem Julabo Programm sowieso die Reading Input Register auslesen lassen und die externe Temperaturabfrage direkt beziehen oder?
Ich hänge jetzt schon länger an dem Problem. Jedoch funktioniert es immer noch nicht richtig. Ich habe die beiden VI's mal hochgeladen in der Hoffnung, dass ihr mir sagen könnt, wo mein Denkfehler liegt.
Über die Temperaturmessung.vi lasse ich mir die Temperaturen in DBL-Werten ausgeben. Davon soll einer der DBL-Werte( untere Raumtemperatur) an den Port von dem Julabo-Umwälzthermostat übergeben werden. Das Thermostat wird dabei von dem AdvancedProgram.vi gesteuert, wo ein PID-Regler dabei ist. Bei dem AdvancedProgram.vi wird normalerweise die externe Temperatur über das interne Get ExternalTemp.vi über einen Temperatursensor ausgelesen, der bei diesem Julabo-Gerät aber nicht verfügbar ist.
Nun habe ich versucht, durch ersetzen des Get ExternalTemp.vi einfach das Problem zu umgehen, und den externen DBL-Wert einzuspeisen. Jedoch wird wir immer ein Fehler bei dem Get ControlMode.vi angezeigt. Da liegt das Problem, dass man entscheiden soll ob das Thermostat über die interne oder externe Temperatur geregelt werden soll. Der Fehler liegt daran, dass es aus einem Port nur liest und somit ja ein Fehler auftritt.
Auch der Versuch komplett die Get ControlMode.vi herauszulassen um nur die Möglichkeit über die externe Temperatur zu regeln hat nicht funktioniert.
Ich bin echt am verzweifeln. Hoffe ihr könnt mir Tipps geben. Wäre schön zu wissen, ob das überhaupt funktionieren kann oder ich die ganze Arbeit umsonst mache
10.10.2017, 15:34 (Dieser Beitrag wurde zuletzt bearbeitet: 10.10.2017 15:35 von Freddy.)
Hallo Markus,
ein unschöne Programmierung ist in einem VI zwei Ereignisstrukturen zu haben (Einbindung externer Temp.vi).
Der zweite Punkt, die zweite (oben) Ereignisstruktur starte erst, wenn die Untere beendet wurde. Da wird die Kontrolle der Ereignisse etwas schwierig. Außerdem wird nur der letzte Wert übergeben. Warum dann eine Timeout Funktion? Du berechnest alle x Sekunden und nimmst dann doch nur den letzten Wert.
Der Timeout wurde mit einer nummerischen Eingabe belegt. Du musst aber dann die Zahl vor belegen, sonst sind das 0 Sekunden. Ich meine ein etwas zu schneller Timout.
Danke schon mal für den Tipp. Wenn ich es in eine Ereignisstruktur mache, läuft es wesentlich besser
Ich hänge trotzdem noch daran, die externe Raumtemperatur in das Julabo Programm zu integrieren.
Das Problem müsste in dem unter VI liegen. Dabei wird die Temperatur in Get ExternalTemp1.vi mit dem Befehl in_pv_02 angefordert und über den PT100-Sensor ausgemessen (ReadfromComPort1.vi) und an das Thermostat übergeben. Nun die Frage ob ich die über mein Thermoelement gemessene Temperatur (untere Temperatur.vi) an den Thermostat anstatt der selbst ausgelesenen Bytes übertragen kann?
Ich hänge mal die 3 VI's an in der Hoffnung jemand kann mir helfen
Zitat:Dabei wird die Temperatur in Get ExternalTemp1.vi mit dem Befehl in_pv_02 angefordert und über den PT100-Sensor ausgemessen (ReadfromComPort1.vi)
???
In GetExternalTemp wird ein Temperaturwert vom Julabo gelesen, im ReadFromComPort wird auch ein Wert gelesen.
In beiden VIs wird ein Wert gelesen - wie hängen die beiden zusammen?
Zitat:und an das Thermostat übergeben.
Wo genau geschieht das?
Zitat:Nun die Frage ob ich die über mein Thermoelement gemessene Temperatur (untere Temperatur.vi) an den Thermostat anstatt der selbst ausgelesenen Bytes übertragen kann?
Wahrscheinlich! Leider sieht man nirgends, wo du einen der beiden Messwerte an den Thermostat sendest…
Soweit ich sehe, hast du in "UntereTemperatur" doch schon ein Event, um Daten an dein Gerät zu schicken: würde es denn nicht sinnvoll sein, hier die passenden Werte zu versenden?
Ob dein Thermostat diese Werte akzeptiert und verarbeitet, sollte im zugehörigen Manual stehen: einfach mal lesen!