TIA Temperatur Rampe

batindeko

Level-2
Beiträge
106
Reaktionspunkte
0
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo,

ich muss bei einer Anlage mit Heizelemente von Typ K die Soll-Temperatur so definieren, dass Sie auf 700°C mit einer Aufheizrate von 1 Kelvin/Minute aufgeheizt wird.
Ich weiß, dass ich eine Art Rampe dafür benötige. Aber ich habe keine Erfahrung wie ich so eine Rampe in der SPS programmieren soll.
 
eine Möglichkeit:
Wenn Du Deinen Prozess startest, speichert Du die aktuelle Ist-Temperatur als "aktuellen Sollwert". Solange Dein Endsollwert davon abweicht, addierst Du jede Minute ein Grad dazu (oder ziehst es ab, wenn zu hoch).
 
Er meint sicherlich, dass du dir einen Baustein baust, der den Vorgabe-Sollwert für deinen Regler im Minuten-Takt erhöht.
Damit das allerdings funktioniert muss der Regler dem auch folgen können - da sehe ich ggf. ein Problem ...
 
meinst du etwa ein Taktgeber bzw. Taktmerker der jede Minute die Addition macht?
batindeko fragte nach Möglichkeiten, eine Rampe zu programmieren. Das ist eine recht einfach programmierbare Möglichkeit. Sie erzeugt kleine Treppenstufen, die bei solchen Heizungen aber vernachlässigbar sein dürften.

Was seine Heizung kann, war sein Thema (noch) nicht.
 
Du musst dir als Sollwert für den Regler oder für deine Ein/Aus-Steuerung eine Zwischenvariable erzeugen.

Start Heizung -> speichere Isttemperatur
Isttemperatur << Solltemperatur -> Start Rampenfahrt
-> Isttemperatur als Temp Rampe setzen
Temp Rampe >= Solltemperatur -> Ende Rampenfahrt

Rampenfahrt aktiv: Sollwert Regler := Temp Rampe
Rampenfahrt nicht aktiv: Sollwert Regler := Solltemperatur
 
Moin,

erst einmal trennst du intern in der Heizungslogik zwischen externen & internen Sollwert.
Der externe Sollwert ist das was du als Eingabe bekommst, Rezept oder ähnliches.
Der interne Sollwert ist der durch die Rampe begrenzte Wert bzw. der Sollwert, der auch auf einen Regler wirkt.

Zum realisieren der Rampe würde ich zwei Varianten in den Hut werfen:

"LGF_LimRateOfChange" aus der Siemens-LGF Bibliothek.
https://support.industry.siemens.co...l)-und-simatic-s7-1200-s7-1500?dti=0&lc=de-WW
Ist ein Rampenbaustein, Rest erklärt die Bibliotheksdoku.

Selbstbau
Mit solchen Konstrukten laufen die meisten Industrieöfen, da man hier einfacher Spezialfunktionen unterbringen kann.
Beim Einschalten der Heizung setzt du "interner Sollwert" per Flanke auf den Istwert.
Anschließend inkrementierst du in einem Takt deiner Wahl (minütlich, sekündlich, ...) den "internen Sollwert" in Richtung "externer Sollwert".
Also im Prinzip das was bereits genannt wurde.


Mach dir unbedingt auch noch Gedanken darüber wie du Abweichungen abfangen willst/musst.
Wenn deine Heizung beim Start erstmal nicht heizt weil gestört/defekt & bis zur Reparatur die Sollwertrampe schon weggelaufen ist, kann das zu sehr unschönen Istwertsprüngen führen.
Gemauerte Industrie-Öfen mit neuer Ausmauerung neigen beispielsweise zum Platzen der Mauerung wenn das Wasser nicht sanft genag ausgedampft wird.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Das trägt jetzt nur bedingt zur Lösung bei, aber trotzdem.
Die Frage ist ja auch, soll der Sollwert einfach mit 1°C/Minute erhöht werden oder soll der Istwert des Ofens beim Heizen um 1°C/Minute steigen. Letzteres bedingt, das man vermutlich die Parameter des Reglers ständig anpassen muss. Ich habe mal für einen Kunden gearbeitet der, unter anderem, Öfen zur thermischen Behandlung von Wafern hergestellt hat. Bei diesen musste der tatsächliche Temperaturanstieg geregelt werden. Hier konnten die bei Beckhoff vorhandenen Regler nicht verwendet werden, sondern es kam eine selbtsgeschriebene externe Software zum Einsatz, die mehrere PWM-Bausteine für die Ansteuerung mehrerer Heizungen per ADS mit Sollwerten versorgte. Das Ganze war sehr komplex.
 
Was ich zum Thema "Selbstbau" noch unterschlagen habe:
Du muss, je nach geforderter Genauigkeit die Zykluszeit der SPS berücksichtigen wenn dein Rampenbaustein im zyklischen Programm läuft.
Wenn dein Inkrementier-Puls auf TRUE geht, liegt immer ein minimaler Zeitraum zwischen dem tatsächlichen Trigger-Zeitpunkt und der Bearbeitung deines Rampen-Codes.
Das ist nicht viel, summiert sich aber schnell.

Sagen wir als worst case:
Zykluszeit ca. 40ms
Inkrementieren jede Sekunde => 3600 mal je Stunde
=> 40ms * 3600 = 144000ms = 2,4min Abweichung je Stunde Rampenlaufzeit

Das ist natürlich etwas extrem gerechnet, sollte aber bedacht werden, je nach dem was man anstellen will.
Für halbwegs genaue Rampen daher einen Weckalarm-OB nutzen.
Ich hab beispielsweise meinen "normalen" Logik-Code für die Heizungen im zyklischen Programm & im Weckalarm-OB läuft lediglich je Heizzone ein PID-Regler & ein kleiner Rampen-FC, der sich nur um das Inkrementieren kümmert.

Das trägt jetzt nur bedingt zur Lösung bei, aber trotzdem.
Die Frage ist ja auch, soll der Sollwert einfach mit 1°C/Minute erhöht werden oder soll der Istwert des Ofens beim Heizen um 1°C/Minute steigen. Letzteres bedingt, das man vermutlich die Parameter des Reglers ständig anpassen muss. Ich habe mal für einen Kunden gearbeitet der, unter anderem, Öfen zur thermischen Behandlung von Wafern hergestellt hat. Bei diesen musste der tatsächliche Temperaturanstieg geregelt werden. Hier konnten die bei Beckhoff vorhandenen Regler nicht verwendet werden, sondern es kam eine selbtsgeschriebene externe Software zum Einsatz, die mehrere PWM-Bausteine für die Ansteuerung mehrerer Heizungen per ADS mit Sollwerten versorgte. Das Ganze war sehr komplex.
Kenne ich :D
Das wäre dann aber noch ein Ausflug in den Bereich der prädiktiven & selbstlernenden Regler.
Sehe ich eher als "Klären bei Aufstellung der Anforderungen".
Für die Frage nach "Wie Rampe?" wäre das etwas abschweifend []~( ̄▽ ̄)~*

Wobei uns @batindeko ggf. noch etwas mit Details zu seinem Vorhaben erhellen könnte
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Wobei bei der kontinuierlichen Addition (zumindest bei Real Werten) sich ein Rundungsfehler aufaddieren kann. Ich bevorzuge in einem solchen Fall den Startwert abzuspeichern und gleichzeitig einen Timer zu starten. Soll Ausgang ist dann Soll Start + (Timer Laufzeit * Gradient). Da wird dann der Sollwert mit viel kleineren Stufen erhöht. Wenn es eine träge Heizung ist müssen aber PID Werte am Ende der Rampe umgeschaltet werden. Der Regler kann ja nicht im Voraus wissen wann die Sollwertänderung aufhört.
 
hier ist meine progammierte Rampe in scl: muss ich ja noch was berücksichtigen
Code:
sollwert: In real;
takt_1s:  In bool;
schritt:  In real;
ausgangswert: Out  real;

//######static
rampe_hoch : bool;
rampe_runter : bool;
ausgangswert_temp : real;
schritt_temp : real;

//##########################
rampe_hoch := false;
rampe_runter := false;
ausgangswert_temp := 0;
schritt := schritt_temp := 1/60;

rampe_hoch := sollwert > ausgangswert_temp;
rampe_runter := sollwert < ausgangswert_temp;


if rampe_hoch and takt_1s then
ausgangswert_temp:= ausgangswert_temp + 1/60 ;
end_if;
if rampe_runter and takt_1s then
ausgangswert_temp:= ausgangswert_temp - 1/60 ;
end_if;

 ausgangswert := ausgangswert_temp;
 
Zuletzt bearbeitet:
So auf die schnelle:
Takt_1s ist hoffentlich eine Flanke
ausgangswert_temp muss noch versorgt werden
rampe_rauf/runter müssen noch irgendwo zurückgesetzt werden.
Du meinst wahrscheinlich "ausgangswert := ausgangswert_temp;"
 
So auf die schnelle:
Takt_1s ist hoffentlich eine Flanke
ausgangswert_temp muss noch versorgt werden
rampe_rauf/runter müssen noch irgendwo zurückgesetzt werden.
Du meinst wahrscheinlich "ausgangswert := ausgangswert_temp;"
ich habe ein Taktmerker eingesetzt der soll hier bei positive und negative flanke addieren bzw. subtrahieren
ausgangswert_temp muss noch versorgt werden
der defaultwert ist null
rampe_rauf/runter müssen noch irgendwo zurückgesetzt werden.
Ja hast du recht.
Du meinst wahrscheinlich "ausgangswert := ausgangswert_temp;"
gerade geändert
 
Zurück
Oben