TIA Aufheizkurven programmieren

Zuviel Werbung?
-> Hier kostenlos registrieren
Ja der Gedanke gefällt mir,
Versuche ich mal umzusetzen heute Abend auf Nachtschicht.
Danke.

Das einzige wo ich noch Gedanklich hänge ist die Kurve 3…
Den ersten Anstieg würde ich so machen wie den von Kurve 1 aber wie halte ich den macht das Sinn da mit timern zu arbeiten?
 
Wenn du immer feste Zeiten hast kannst du natürlich Timer nehmen.
Ansonsten kannst du dir aus den Taktmerkern einen SekundenImpuls generieren oder du nimmst deinen Sekundentakt aus dem Zeit-OB, den hochzählen und mit deiner Zeitvorgabe vergleichen, dann bist du flexibel.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Vielleicht sollte man den jeweiligen Antstieg in dem Funktionsbaustein berechnen. Man übergibt also als Parameter die vorgegebene Endtemperatur, die Starttemperatur (bzw. den aktuellen Istwert) und die Zeitdauer, so wie ein Startsignal. Beim Start berechnet man aus diesen jeweiligen Werten den Anstieg. Nur so kann die aktuelle Starttemperatur berücksichtigt werden. Auf diese Art und Weise kann man mit dem FB beliebige Rampen nacheinander ausführen (Fall 3). Einen konstanten Sollwert (Fall 2) kann man im Prinzip auch als Rampe ansehen, nur halt mit dem Anstieg Null.

Ach ja, wenn man zig tausendmal einen kleinen Wert aufaddiert, muss man bedenken, dass die Größenordnungen von Summe und Summand nicht zu weit auseinander driften dürfen, sonst klappt das irgendwann nicht mehr mit der Strichrechnung. Also, je nach Steuerung bausteinintern ein möglichst breites Datenformat verwenden. Oder ggf. die Abtastzeit vergrößern, was wiederum den Summanden vergrößert. Bei den genannten Zahlenwerten wird es bei sekündlicher Berechnung mit Real vermutlich gerade noch funktionieren.
 
Zuletzt bearbeitet:
Wenn ihr das so schreibt verstehe ich wohl was bezweckt werden soll…
Aber ich hab grad nicht irgendwie ansatzweise ne Idee wie ich das umsetzen kann.
Wenn du immer feste Zeiten hast kannst du natürlich Timer nehmen.
Ansonsten kannst du dir aus den Taktmerkern einen SekundenImpuls generieren oder du nimmst deinen Sekundentakt aus dem Zeit-OB, den hochzählen und mit deiner Zeitvorgabe vergleichen, dann bist du flexibel.
wie meinst du das mit dem Taktmerker? Wie bekomme ich denn da den Anstieg?
 
wie meinst du das mit dem Taktmerker? Wie bekomme ich denn da den Anstieg?
Einen Zeittakt in irgendeiner Form benutzt Du ja sowieso, weil er für die Bildung der Rampen nötig ist.
Denselben Takt könntest Du mitzählen während der Zeit, in der Du den TemperaturWert konstant halten willst und die Wartezeit beenden, sobald die geforderte Anzahl Sekunden, Minuten oder was auch immer, erreicht ist.
 
Nur so kann die aktuelle Starttemperatur berücksichtigt werden. Auf diese Art und Weise kann man mit dem FB beliebige Rampen nacheinander ausführen (Fall 3).
Wenn der RampenBaustein immer aktiv ist und bleibt und die Regelung selbst auch, dann hat man eigentlich keine StartZeitpunkte, an denen der Rampenwert mit der aktuellen (Ist-)Temperatur synchronisiert werden muss. Dafür sollte die Kombination aus RampenBildung für die SollwertVorgabe und Regler sorgen, allerdings vorausgesetzt, dass eine aktive Ausführung einer "Kurve" nicht vorzeitig abgebrochen wird.

Eine "echte" StartSituation mit SynchronisationsBedarf liegt eigentlich nur bei einer Aktivierung des Reglers oder bei einem Abbruch eines Aufheiz-/Abkühl-Vorgangs vor. Ein Abbruch einer TemperaturHaltePeriode dürfte gänzlich unktritisch sein (ausser für die Werkstücke - sofern das Aufheizen und TemperaturHalten kein Selbstzweck sein soll).
Der Vorgang des Abkühlens wird bisher in diesem Thread ziemlich ignoriert und folglich auch die Frage, bei welchen AnfangsTemperaturen die Kurven/Abläufe einsetzen dürfen/sollen/müssen.

Die Berechnungen von Anstiegs-/Abfall-Geschwindigkeiten sehe ich eigentlich nicht als Aufgabe, die der RampenBaustein miterledigen muss.
Da spielen sicherlich Aspekte eine Rolle, die durch die Ausführung der Anlage beeinflusst werden und technologische Apekte, die damit zu tun haben, warum bestimmte Zeiten und bestimmte Anstiegs-/Abfall-Geschwindigkeiten eingehalten/angestrebt werden sollen.

Rezepturen zur Vorgabe von TemperaturVerläufen sind selbstverständlich denkbar. Dabei dürfte die Umsetzung der Rezeptur aber dennoch die Einhaltung von Anstiegs-/Abfall-Geschwindigkeiten und Wartezeiten erfordern, die im Detail durch Rampen und Zeiten realisiert werden.
 
Ach ja, wenn man zig tausendmal einen kleinen Wert aufaddiert, muss man bedenken, dass die Größenordnungen von Summe und Summand nicht zu weit auseinander driften dürfen, sonst klappt das irgendwann nicht mehr mit der Strichrechnung. Also, je nach Steuerung bausteinintern ein möglichst breites Datenformat verwenden. Oder ggf. die Abtastzeit vergrößern, was wiederum den Summanden vergrößert. Bei den genannten Zahlenwerten wird es bei sekündlicher Berechnung mit Real vermutlich gerade noch funktionieren.
Wieso sollte die Addition nicht mehr klappen? Er hätte maximal 28.800 Additionen, wenn er von 0°C auf 1200°C in 8h erwärmt.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Wenn ihr das so schreibt verstehe ich wohl was bezweckt werden soll…
Aber ich hab grad nicht irgendwie ansatzweise ne Idee wie ich das umsetzen kann.

wie meinst du das mit dem Taktmerker? Wie bekomme ich denn da den Anstieg?
Die Systemtaktmerker, zu aktivieren in der Hardwarkonfiguration deiner CPU. Mit dem Taktmerker von 1sec wird dann der Impuls generiert mit dem du deine Haltezeit hochzählen kannst. Die Taktmerker bilden dir nicht deine Rampe. Dein Anstieg ist deine Addition von z.B. 0,0417/Sek.
 
Synchronisation auf die Isttemperatur mache ich immer in Abhängigkeit eines zweiten oder dritten Temperaturdifferenz-Grenzwertes.
Wenn die Isttemperatur z.B. 5°C unter dem Sollwert/Rampe liegt stoppt das Ansteigen der Rampe bis zum wieder aufholen.
Wenn Temp-Ist 20°C unter dem Sollwert/Rampe oder 100°C unter dem Sollwert/Fix liegt, wird die Rampe aktiviert und die Solltemperatur der Rampe mit der Isttemperatur abgeglichen.
Dann hat sich die "Startphase" praktisch erledigt und eine mögliche Störung, Materialmangel, etc während des Aufheizens setzt die Rampe gezielt zurück.
 
Eine "echte" StartSituation mit SynchronisationsBedarf liegt eigentlich nur bei einer Aktivierung des Reglers oder bei einem Abbruch eines Aufheiz-/Abkühl-Vorgangs vor. Ein Abbruch einer TemperaturHaltePeriode dürfte gänzlich unktritisch sein (ausser für die Werkstücke - sofern das Aufheizen und TemperaturHalten kein Selbstzweck sein soll).
Der Vorgang des Abkühlens wird bisher in diesem Thread ziemlich ignoriert und folglich auch die Frage, bei welchen AnfangsTemperaturen die Kurven/Abläufe einsetzen dürfen/sollen/müssen.

Typischerweise ist das Selbstzweck der Feuerung zur gezielten Erwärmung des Schamotts im Ofen.
Der Schamott muss gleichmäßig durchwärmt werden, damit sich die Temperatur der Außenschicht nicht zu stark vom Inneren entfernt. Ansonsten hat man plattenförmige Ablösungen an der Ausmauerung = stark erhöhter Verschleiß.

Diese Haltephasen kenne ich aber nur beim ersten Aufheizen einer Feuerung, damit eventuell vorhandene Feuchte im Mauerwerk durch das Ausmauern gezielt entweichen kann. Nach dem ersten Mal Durchlaufen eines solchen Zyklus hat sich das dann erledigt, dann muss man nur noch für das Wiederaufheizen nach einer Revision die gewünschte Rampe einhalten.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Wenn der RampenBaustein immer aktiv ist und bleibt und die Regelung selbst auch, dann hat man eigentlich keine StartZeitpunkte, an denen der Rampenwert mit der aktuellen (Ist-)Temperatur synchronisiert werden muss..
Zu einem bestimmten Zeitpunkt wird die Rampe gestartet. Zu diesem Zeitpunkt liegt die Isttemperatur bei beispielsweise 43°C. Acht Stunden später sollen 1200°C erreicht werden. Somit muss in acht Stunden der Sollwert um 1157°C ansteigen. Das wären 0,04017361°C/s. Bei anderen Starttemperaturen läge der Anstieg entsprechend anders. schwimmer redet in #40 davon, beim Start den Sollwert mit dem Istwert zu initialisieren, was auch richtig ist, berücksichtigt das aber nicht bei der Berechnung seines Anstiegs. Dadurch wird der Endwert bereits deutlich vor den acht Stunden erreicht. Das ist genau so falsch, wie wenn man von 0°C Starttemperatur ausgeht.


Wieso sollte die Addition nicht mehr klappen? Er hätte maximal 28.800 Additionen, wenn er von 0°C auf 1200°C in 8h erwärmt.
Ich schrieb ja, dass es bei diesem Zahlenbeispiel wahrscheinlich noch in Ordnung ist. Du weißt aber, was ich meine? Bei der Strichrechnung werden die Exponenten beider Summanden auf den selben Wert gebracht, bevor die Matissen addiert/subtrahiert werden. Liegen diese Exponenten zu weit auseinander, so werden immer mehr Stellen des kleineren Summanden abgeschnitten. Dadurch entstehen Ungenauigkeiten, die bei fortlaufenden Addition zunehmend größer werden. Das spitzt sich so weit zu, bis der kleinere Summand zu Null wird. Ich hoffe, ich habe es in der Kurzfassung richtig erklärt. Ansonsten kann man es an entsprechender Stelle nachlesen.
 
Noch ein paar Randbemerkungen
Ist dein Temperaturfühler geignet Temperaturen von 20°C bis 1200°C zu erfassen?
Du sprichst in #1 von Regelung der Luftklappe. Daraus schließe ich es handelt sich um einen Gas- oder Ölbrenner. In diesem Fall benötigst du noch einen Gas/Öl Regler der nach Lamda nachgeführt wird.
 
Dadurch wird der Endwert bereits deutlich vor den acht Stunden erreicht. Das ist genau so falsch, wie wenn man von 0°C Starttemperatur ausgeht.
Was hier wirklich falsch oder richtig ist, das entzieht sich unserer Kenntnis.
Ist es richtig, die AnstiegsGeschwindigkeit genau einzuhalten oder ist es richtiger, die Dauer der Aufheizung genau einzuhalten?
Oder wäre es noch viel richtiger, einen bestimmten "KomproMix" aus beiden Anforderungen zu finden?
Oder muss die StartTemperatur immer reproduzierbar dieselbe sein? Das scheint mir alles nicht Gegenstand der Aufgabenstellung zu sein.
Aber es kann nicht schaden, bei der Umsetzung der Aufgabe auch solche Aspekte im Auge zu behalten. Desto flexibler und leichter anzupassen dürfte der gefundene Lösungsweg dadurch werden.

Wenn man erfährt, worauf es ankommt, kann man die Parameter für die RampenBildung entsprechend berechnen.

Ich sehe es aber nach wie vor nicht als Aufgabe eines RampenBausteins, selbst die Parameter zu ermitteln/manipulieren, passend zu irgendwelchen beliebig festzulegenden Szenarios.
Wer das gerne/unbedingt möchte, darf aber gerne diesen Weg beschreiten. Vielleicht fehlt ja in der ProgrammBibliothek noch eine eierlegende Wollmilchsau zu diesem Thema.

Um die Möglichkeit, einen Startwert für den Rampenwert zu übernehmen, könnte man den RampenBaustein problemlos erweitern, ohne ihn zu verkomplizieren. Z.B.:
Code:
IF ixIstwertUebernehmen THEN     // Istwert-Übernahme
    iorSetRmp := irIstwert ;
ELSIF irSetpIn > iorSetRmp THEN  // Ansteigen des Sollwertes
    iorSetRmp := MIN(IN1:=iorSetRmp + irPosGrd, IN2:=MIN(IN1:=irMaxVal, IN2:=irSetpIn)) ;
ELSIF irSetpIn < iorSetRmp THEN  // Abfallen des Sollwertes
    irSetRmp := MAX(IN1:=iorSetRmp + irNegGrd, IN2:=MAX(IN1:=irMinVal, IN2:=irSetpIn)) ;
END_IF;
Zeile 1 und 2 sind hinzu gekommen. In der nächsten Zeile wurde IF in ELSIF geändert.

Edit (2022-03-26 11:15):
'ixIstwertUebernehmen' ist eine BOOLesche InputVariable, die am Baustein prametiret wird.
Solange an diesen Eingang 'TRUE' angelegt wird, wird 'iorSetRmp := irIstwert ;' ausgeführt und damit ein weiterer Eingang des Bausteins, nämlich 'irIstwert' direkt auf die IN_OUT-Variable 'iorSetRmp' (das RampenSignal an den Regler) kopiert.
Ist 'ixIstwertUebernehmen' 'FALSE', so wird 'iorSetRmp' vom Istwert "abgekoppelt" und enthält dann stattdessen den aktuellen Wert für die Rampe.

Zugabe für die Berechnung eines fehlenden Parameters für die Rampe:
Code:
// wahlweise 1 von 4 Werten aus den 3 anderen berechnen
IF ixCalcStartVal THEN
    iorStartVal := iorEndValue - iorGradient * iorDuration ;
ELSIF ixCalcEndValue THEN
    iorEndValue := iorStartVal + iorGradient * iorDuration ;
ELSIF ixCalcGradient THEN
    iorGradient := (iorEndValue - iorStartVal) / iorDuration ;
ELSIF ixCalcDuration THEN
    iorDuration := (iorEndValue - iorStartVal) / iorGradient ;
END_IF ;

Edit (2022-03-26 11:30):
Mit den BOOLeschen InputVariablen 'ixCalcStartVal', 'ixCalcEndValue', 'ixCalcGradient' und 'ixCalcDuration' sagt man, welche der 4 verschiedenen Berechnungen ausgeführt werden soll. Ist keine dieser Variablen 'TRUE', so tut der Baustein nichts.
Ist 1 der Variablen 'TRUE', so wird die entsprechende Berechnung ausgeführt.
Normalerweise sollten nicht mehrere der 4 Variablen gleichzeitig 'TRUE' sein. Ist dies trotzdem der Fall, so wird trotzdem nur 1 der 4 Berechnungen ausgeführt. Welche dies ist, darüber entscheidet die Reihenfolge, in der die Variablen abgefragt werden. Die erste Bedingung, die erfüllt ist, erhält den Zuschlag.
Aber, wie gesagt, der Normalfall ist "NichtsTun" (alle 4 Bits 'FALSE') bzw. in Ausnahmefällen 1 der 4 Bits ist 'TRUE' und es soll die so gewählte Berechnung ausgeführt werden und man sollte tunlichst vermeiden, dass 2 oder mehr der Bits gleichzeitig zu 'TRUE' gemacht werden.
Vermeiden nur deshalb, damit man noch den Überblick behält.
Sooo, die 4 Berechnungen sollten eigentlich gut lesbar und verständlich sein.
'iorStartVal' ist der Startwert, der aus dem Endwert, der Steigung und der Dauer berechnet wird.
'iorEndValue' ist der Endwert, der aus dem Startwert, der Steigung und der Dauer berechnet wird.
'iorGradient' ist die Steigung, die aus dem Endwert, dem Startwert und der Dauer berechnet wird.
'iorDuration' ist die Dauer, die aus dem Endwert, dem Startwert und der Steigung berechnet wird.
Damit kann man aus 3 der 4 Variablen die jeweils fehlende berechnen. Z.B. die Dauer aus Anfangs- und Endwert der Temperatur sowie der Steigung.
 
Zuletzt bearbeitet:
Zuviel Werbung?
-> Hier kostenlos registrieren
(offtopic) wenn ich überlege wieviel Zeit meine Kollegen und ich schon irgendwelchen Heizern, Trocknern und Klimatisierern Beistand leisten mussten, es ging um Tage und Wochen. Möge ein jeder Heizer, Trockner und Klimatisierer diesen Thread lesen. Alle werden froh sein.
 
Der Vorgang des Abkühlens wird bisher in diesem Thread ziemlich ignoriert und folglich auch die Frage, bei welchen AnfangsTemperaturen die Kurven/Abläufe einsetzen dürfen/sollen/müssen.
Abkühlen muss der Ofen nicht... die Rampe soll gehalten werden und muss bei erreichen des Endwertes ein Signal abgeben.
Eigendlich ist der Ofen eine Transportpfanne in einer Kupfergießerei.
Bei 1200°C wird die Pfanne mittels Kran entnommen und dann wird Kupfer transportiert.
Nach beenden dieses vorganges wird die Pfanne wieder abgestellt und entwerder Kurve 2 gestartet damit die Pfanne heiß bleibt oder sie kann einfach abkühlen und wird mit Kurve 1 wieder bei bedarf erhitzt.
Kurve 3 ist lediglich zum trocknen der Mauerung nach Instandsetzung von speziellen Ofenmaurern.
 
Die Systemtaktmerker, zu aktivieren in der Hardwarkonfiguration deiner CPU. Mit dem Taktmerker von 1sec wird dann der Impuls generiert mit dem du deine Haltezeit hochzählen kannst. Die Taktmerker bilden dir nicht deine Rampe. Dein Anstieg ist deine Addition von z.B. 0,0417/Sek.
Also gibt es Systemtaktmerker die ich nutzen kann als Haltezeit? die haben aber mit dem Takt den ich generiert habe nichts zu tun? Die wären dann so zu sagen nur puffer.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Synchronisation auf die Isttemperatur mache ich immer in Abhängigkeit eines zweiten oder dritten Temperaturdifferenz-Grenzwertes.
Wenn die Isttemperatur z.B. 5°C unter dem Sollwert/Rampe liegt stoppt das Ansteigen der Rampe bis zum wieder aufholen.
Wenn Temp-Ist 20°C unter dem Sollwert/Rampe oder 100°C unter dem Sollwert/Fix liegt, wird die Rampe aktiviert und die Solltemperatur der Rampe mit der Isttemperatur abgeglichen.
Dann hat sich die "Startphase" praktisch erledigt und eine mögliche Störung, Materialmangel, etc während des Aufheizens setzt die Rampe gezielt zurück.
Es ist bekanntlich so das der Brenner wahrscheinlich sowieso eine zu hohe MIN Leistung hat. Es wird wahrscheinlich so sein das der Brenner ca. als MIN um die 200°C in dem Heizraum bringt. Dies sollte meiner Rampe aber eigentlich egal sein und nur meine SollwertKurve betreffen.
Die Abweichung die die Regelung haben darf sind 50°C + und 50°C - dem Sollwert.
 
Typischerweise ist das Selbstzweck der Feuerung zur gezielten Erwärmung des Schamotts im Ofen.
Der Schamott muss gleichmäßig durchwärmt werden, damit sich die Temperatur der Außenschicht nicht zu stark vom Inneren entfernt. Ansonsten hat man plattenförmige Ablösungen an der Ausmauerung = stark erhöhter Verschleiß.

Diese Haltephasen kenne ich aber nur beim ersten Aufheizen einer Feuerung, damit eventuell vorhandene Feuchte im Mauerwerk durch das Ausmauern gezielt entweichen kann. Nach dem ersten Mal Durchlaufen eines solchen Zyklus hat sich das dann erledigt, dann muss man nur noch für das Wiederaufheizen nach einer Revision die gewünschte Rampe einhalten.
Genau so ist es :)
 
Noch ein paar Randbemerkungen
Ist dein Temperaturfühler geignet Temperaturen von 20°C bis 1200°C zu erfassen?
Du sprichst in #1 von Regelung der Luftklappe. Daraus schließe ich es handelt sich um einen Gas- oder Ölbrenner. In diesem Fall benötigst du noch einen Gas/Öl Regler der nach Lamda nachgeführt wird.
Ja genau es ist ein Gas-Brenner.
Ne der Gasregler wird mithilfe einer BCU= Burning Control Unit von Kromschröder abgedeckt. Diese BCU deckt alles was Gas und Sicherheit angeht ab.
Ich möchte wirklcih lediglich die Leistung über die Luftklappen des Brenners Steuern.
 
Zurück
Oben