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!
Ich versuche, einen Thermostaten (Lauda ProLine) anzusteuern. Einmal mit einem von der Zeit abhängigem Temperaturwert, aber auch einmal mit einem vom Benutzer selber anzugebendem Wert. Ersteres ist so realisiert wie hier beschrieben, zweiteres soll über eine Eingabe auf dem Frontpanel passieren.
Ich habe versucht, das folgendermaßen zu realisieren:
In der Temp_verlauf_init.vi werden die Steuerwerte ausgelesen und bereitgestellt. Der Thermostat wird initialisiert.
Das, was da jeweils bei rauskommt, geht in eine Case-Struktur, in der dann jeweils die sub.vis liegen für den Verlauf oder das manuelle Festlegen.
Jetzt meine Probleme:
1. Die Verlaufssteuerung funktioniert nur dann, wenn ich sie von Anfang an angestellt habe. Genau das, also dass die Automatik von Anfang an läuft, soll aber vermieden werden. Genauso funktioniert die manuelle Festlegung nur "ab Anfang", und dann auch nur mit genau einem Wert.
2. Die Ausgabe zeigt bestenfalls nur einen stationären Wert an, im Normalfall aber gar keinen. Ich habe den Verdacht, dass das daran hängt, dass ich die aus einer Schleife rausgebe, weiß aber nicht, wie ich das anders machen kann.
Zitat:Die Verlaufssteuerung funktioniert nur dann, wenn ich sie von Anfang an angestellt habe
Das könnte daran liegen, dass diese Vorgabe sofort nach Start des VIs abgefragt wird, ohne dem Benutzer jemals die Möglichkeit zu geben, diesen Wert zu ändern. THINK DATFLOW!
Zitat:Die Ausgabe zeigt bestenfalls nur einen stationären Wert an, im Normalfall aber gar keinen
Welche "Ausgabe" meinst du? Welcher Indicator in welchem VI?
Da fehlen leider so viele subVIs, dass man schnell den Überblick verliert, wovon du da eigentlich redest...
ad 1:
Badusch. Jop. Der Wert wird vor allem genau einmal abgefragt, wenn ich mich grade nicht ganz irre..
ad 2:
Seh ich ein. Ich werde jetzt mal schauen, ob meine Idee von heute morgen funktioniert und wenn nicht reiche ich nochmal eine um die Lauda-.vis bereinigte Version nach, die das Prinzip abbildet..
22.12.2011, 15:27 (Dieser Beitrag wurde zuletzt bearbeitet: 22.12.2011 15:34 von narrentanz.)
Ein paar meiner Probleme haben sich jetzt tatsächlich durch intensives Nachdenken über dataflow gelöst.
Dafür habe ich jetzt ein anderes Problem, nämlich Werteweitergabe zwischen Schleifen.
Ich habe mal alles, was Lauda-.vis umfasst rausgeworfen. Initialisierung und Schließen des Thermostats funktioniert, die Ansteuerung an sich auch.
In der Init-Verlauf-beschrifteten .vi werden die Steuerwerte eingelesen, in der Verlauf-aus-beschrifteten sollen die Werte aufbereitet werden um Laufzeitabhängig rauszugehen. Den Wert, der da raus geht, muss in die Konfig-.vi in der Mitte. Ich kriege aber so nichtmals irgendeinen Wert (außer null) rein..
[edit]
Temperaturverlauf3.txt als Input-Beispiel hinzugefügt.
(22.12.2011 15:27 )narrentanz schrieb: Ich habe mal alles, was Lauda-.vis umfasst rausgeworfen. Initialisierung und Schließen des Thermostats funktioniert, die Ansteuerung an sich auch.
In der Init-Verlauf-beschrifteten .vi werden die Steuerwerte eingelesen, in der Verlauf-aus-beschrifteten sollen die Werte aufbereitet werden um Laufzeitabhängig rauszugehen. Den Wert, der da raus geht, muss in die Konfig-.vi in der Mitte. Ich kriege aber so nichtmals irgendeinen Wert (außer null) rein..
Du hast hier ein sehr schönes Beispiel einer Race-Condition! Deine lokale Variable "Wert" wird ausgelesen bevor sie einen Wert erhalten hat -> Defaultwert welcher 0 ist.
Das VI "Temp_Verlauf_aus_Fs.vi" verwendest du falsch! Das VI wartet nämlich jedes Mal die im Txt-File definierte Zeit bevor ein Wert in den Ausgang geschrieben wird... Dieser Wert wird erst beim letzten Durchlauf (wenn das VI beendet wird) übertragen! Wichtige Tatsache im DATAFLOW!
Die einfachste Lösung des ganzen wäre, wenn du deinen Code in das "Temp_Verlauf_aus_Fs.vi" verschiebst und dort bei jedem Schleifendurchlauf den Wert überträgst.
Genau so hatte ich das auch schonmal gehabt, und so tats auch. Mir gehts aber speziell dadrum, dass ich zwischen "aus Verlauf" und "von Hand einstellen" umschalten kann.
Das Producer-Consumer Design-Pattern werde ich mir mal anschauen, Danke für den Tipp.
(22.12.2011 17:54 )narrentanz schrieb: Genau so hatte ich das auch schonmal gehabt, und so tats auch. Mir gehts aber speziell dadrum, dass ich zwischen "aus Verlauf" und "von Hand einstellen" umschalten kann.
Das Producer-Consumer Design-Pattern werde ich mir mal anschauen, Danke für den Tipp.
Die Frage ist natürlich wie du das Umschalten handhaben willst
Willst du:
a) Den Ablauf aus der Text-Datei durchlaufen lassen bis alle Anweisungen durch sind?
b) Den Ablauf aus der Text-Datei unterbrechen und beim Wechsel von neuem starten?
c) Den Ablauf aus der Text-Datei unterbrechen und beim Wechsel an der letzten Stelle fortsetzten?
Je nach dem wofür du dich entscheidest gibt es unterschiedliche Lösungsansätze Aber das Producer-Consumer Pattern wird dir mit grosser Wahrscheindlichkeit viele Probleme automatisch lösen
Irgendwie bin ich zu doof, das Producer-Consumer Design-Pattern in den Beispielen zu finden? Hat das in der deutschen Version irgendeinen komplett un-intuitiv übersetzten Namen?
Ansonsten, was das Umschalten angeht: Das Ziel ist, Anfangs mit einem gegebenen Wert zu starten und dann auf den Verlauf umzuschalten. Aus dem Verlauf wieder rauszuschalten ist (zumindest aktuell noch) nicht nötig. Es soll halt möglich sein, erstmal "in Ruhe" alle Temperatursensoren zu checken etc., bevor die eigendliche Messung über dem Verlauf gestartet wird...
(09.01.2012 15:17 )narrentanz schrieb: Irgendwie bin ich zu doof, das Producer-Consumer Design-Pattern in den Beispielen zu finden? Hat das in der deutschen Version irgendeinen komplett un-intuitiv übersetzten Namen?
Das Producer/Consumer-Template gibts unter Datei»Neu
Beste Grüße,
NWO
9 von 10 Stimmen in meinem Kopf sagen: Ich bin nicht verrückt,
die andere summt die Melodie von Tetris.
NI schrieb:To use the abort button is like using a tree to stop a car!