TIA Aufheizkurven programmieren

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.
Auf den Forumbeitrag bin ich auch nur gekommen, da ich nicht gescheites im Netz gefunden hatte.
Schön das ich da mit meinem gefährlichen Halbwissen weiterhelfen konnte :D
 
Zuletzt bearbeitet:
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.)

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 ;
Könntest du kurz sagen was deine Variablen genau sind? Ich blicke da gerade nicht durch. (ist auch schon spät, habe Nachtschicht) :)
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Was hier wirklich falsch oder richtig ist, das entzieht sich unserer Kenntnis.
Da stimme ich zu, für die Umsetzung wäre es wichtig zu wissen was das Hauptkriterium ist die Aufheizzeit von 8h oder der Temperaturanstieg von 150°C/h. Beim Sintern / Trocknen des Mauerwerkes ist meistens die Aufheizgeschwindigkeit das Maß aller Dinge, abhängig vom verwendeten Material.

Wo ich mir im Moment nicht ganz sicher bin ist die eigentliche Aufgabenstellung vom TS. In seinen letzten Posts hat es den Anschein als gäbe es eine Anlage mit Kupferpanne, Gasbrenner etc. An anderer Stelle hat er etwas von einer Aufgabe für die Techniker-Zwischenprüfung geschrieben. Ich verstehe es im moment nicht so ganz was er nun wirklich braucht.
 
Da stimme ich zu, für die Umsetzung wäre es wichtig zu wissen was das Hauptkriterium...
Ich kenne 2 Aufgaben solch einer Regelung.
1. Trocknen der Ausmauerung - siehe Holzmichel
2. erwärmen von Metall
Hier wird die erste Heizphase dazu genutz um in den Ofen und das Material genug Energie einzubringen. Die Haltephase ist zum gleichmäßigen verteilen der Wärme (Kerntemperatur). Die 2. Aufheizphase ist zur Vorbereitung der Weiterververarbeitung.

@Paul
mal ein kurzer Ablauf wie wir das machen
- Energiegehalt des Erdgases feststellen
- An Hand der Belegung des Ofens (Menge, Stärke,...) wird die Aufheizgeschwindigkeit, die Haltezeit und alle anderen Knickpunkte der Kurve berechnet.
wir regeln ebenfalls über die Luftmenge. Den Lambda Wert bestimmt der Brennertyp. Danach wird der Gasregler geregelt. Unsere BCU machen "nur" Brennersteuerung (Flammenüberwachung usw.) keine Gasregelung.

Für das Aufheizen aus Raumtemperatur sind unsere Typ K Elemente völlig ungeeignet (ich denke deins auch) da die Auflösung im eigentlichen Arbeitsbereich (800 - 1200°C) viel zu ungenau wäre. Aus diesem Grund gibt es spezielle Aufheizelemnente für den unteren Temperaturbereich.
 
In einer unserer Anwendungen wird mit Biomasse auf einem Vorschubrost gefahren/gefeuert.
(In der Feuerbox kann ein erwachsener Mensch problemlos aufrecht stehen.)
Die Anfangstemperatur der Kurve liegt für die Feuerung bei 150°C und einer langsamen Kurve von 30K/h.
Ab einer Temperatur von 300°C, steigt die Kurve stärker an auf die regulären 50K/h.

Die Feuerungsregelung ist so diffizil, dass unter 150°C sowieso keinen Sinn machen würde und das Feuer wieder ausgeht.
Dann ist es auch nicht unbedingt einfach, da die Feuerung in den unteren Temperaturbereichen nur kurz in Schwachlastbetrieb geht, eine Spitze in der Temperatur auslöst und bei 20°C über Sollwert wieder in den Gluterhalt zurückfällt. Überschwinger bis +50°C keine Seltenheit.
Das heißt das Ziel ist ein möglichst wenig aggressives, starkes, aber kontrolliertes Schwanken um den Sollwert.
Wenn die Rampe weiterläuft, obwohl zu starke Untertemperatur da ist gibt es entweder extreme Überschwinger oder ein Vollfahren der Feuerung mit Material obwohl das Feuer aus ist. Diese Gefahr ist bei einem Gasbrenner natürlich überwacht.

Ansonsten habe ich einige Erfahrung bei Aufheizkurven für Thermalöl-beheizte Heißpressen, wo bei einem Aufheizvorgang z.B. nach dem Wochenende oder nach der Nachtabsenkung mal eben 20-30t massiver Stahl auf 160°C gebracht werden müssen ohne zu starken Verzug in den Pressplatten hervorzurufen.
Völlig andere Anwendung, aber die Heizkurvenberechnung bzw Logik dahinter ist sehr ähnlich. Nur das Startverhalten und die Leistungsregelung ist unterschiedlich.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
.. Die Berechnungen von Anstiegs-/Abfall-Geschwindigkeiten sehe ich eigentlich nicht als Aufgabe, die der RampenBaustein miterledigen muss...
In Anbetracht eines Sollwerteverlaufs wie im Fall 3, wäre es allerdings von Vorteil, wenn man das Ende der jeweiligen Abschnitte klar definieren kann, um im Anschluss direkt den nächsten Abschnitt zu starten. Somit kann man auch den mittleren, konstanten Verlauf über den Baustein führen. Ich würde also nacheinander entsprechende Parameterpaare als Knickpunkte vorgeben und den jeweiligen Anstieg im Programm berechnen.
  1. 12h / 600°C
  2. 6h / 600°C
  3. 9h / 1200°C
Mit dieser Funktionalität kann man die Anzahl der Stützpunkte nahezu unendlich erweitern. Aber jeden das Seine 😉.
 
Könntest du kurz sagen was deine Variablen genau sind? Ich blicke da gerade nicht durch. (ist auch schon spät, habe Nachtschicht) :)
Ja, habe ich in Beitrag #54 nachgetragen.

Nachtschicht! Und das auch noch am kürzesten Wochenende des Jahres! :cry:

PS:
Ich habe den Eindruck, dass Du noch ein wenig mit dem Begriff Zeittakt am kämpfen bist.
Was hast Du denn bisher vorgesehen, um den RampenBaustein z.B. 1-mal pro Sekunde aktiv werden zu lassen?
 
Zuletzt bearbeitet:
Da stimme ich zu, für die Umsetzung wäre es wichtig zu wissen was das Hauptkriterium ist die Aufheizzeit von 8h oder der Temperaturanstieg von 150°C/h. Beim Sintern / Trocknen des Mauerwerkes ist meistens die Aufheizgeschwindigkeit das Maß aller Dinge, abhängig vom verwendeten Material.

Wo ich mir im Moment nicht ganz sicher bin ist die eigentliche Aufgabenstellung vom TS. In seinen letzten Posts hat es den Anschein als gäbe es eine Anlage mit Kupferpanne, Gasbrenner etc. An anderer Stelle hat er etwas von einer Aufgabe für die Techniker-Zwischenprüfung geschrieben. Ich verstehe es im moment nicht so ganz was er nun wirklich braucht.
Ja das ganze ist ein Zwischenprojekt der Techniker Schule, damit dieses Projekt aber einen Praxisbezug hat wird es in den jeweiligen Unternehmen geplant Bzw. Für Unternehmen geplant. (Jeder hat ein anderes Projekt)
Bei mir im Unternehmen ist die Planung aber nur theoretisch… ich muss das nicht umbauen, mein Lehrer will aber ein laufendes Programm sehen.
Und ob die geplante Anlage jemals umgebaut wird weis auch noch keiner.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
@Paul
mal ein kurzer Ablauf wie wir das machen
- Energiegehalt des Erdgases feststellen
- An Hand der Belegung des Ofens (Menge, Stärke,...) wird die Aufheizgeschwindigkeit, die Haltezeit und alle anderen Knickpunkte der Kurve berechnet.
wir regeln ebenfalls über die Luftmenge. Den Lambda Wert bestimmt der Brennertyp. Danach wird der Gasregler geregelt. Unsere BCU machen "nur" Brennersteuerung (Flammenüberwachung usw.) keine Gasregelung.

Für das Aufheizen aus Raumtemperatur sind unsere Typ K Elemente völlig ungeeignet (ich denke deins auch) da die Auflösung im eigentlichen Arbeitsbereich (800 - 1200°C) viel zu ungenau wäre. Aus diesem Grund gibt es spezielle Aufheizelemnente für den unteren Temperaturbereich.
Entschuldige, da hatte ich mich vertan.
Die Gasregelung (Gasgemischregler) ist fest eingestellt auf 0,9 Lambda.
Die Typ-K Elemente werden bei uns eigentlich immer verwendet.
Da muss ich ehrlich sagen das mir das neu ist mit der Ungenauigkeit in der unteren Bereichen.
 
Die Typ-K Elemente werden bei uns eigentlich immer verwendet.
Da muss ich ehrlich sagen das mir das neu ist mit der Ungenauigkeit in der unteren Bereichen.
Tja, vielleicht wird diese Ungenauigkeit auch nur zu hoch berwertet? Sprichts Du nicht andererseits von ±50 K?
Nun gut, bei 0 °C ±50 K oder 50 °C ±50 K sind die Unterschiede aufgrund der Eigenschaften des Wassers schon recht augenfällig.
Aber ist das für die Aufgabe denn sooo relevant?

Könnte man für den Bereich niedriger Temperaturen vielleicht lieber auf "ErfahrungsWerte" ausweichen, statt auf die Messwerte zu vertrauen?
 
PS:
Ich habe den Eindruck, dass Du noch ein wenig mit dem Begriff Zeittakt am kämpfen bist.
Was hast Du denn bisher vorgesehen, um den RampenBaustein z.B. 1-mal pro Sekunde aktiv werden zu lassen?
Der 1s Takt wird durch einen Cyclic Interrupt erstellt. Der Baustein wird jede Sekunde aufgerufen und gibt ein Signal an die Rampe.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Tja, vielleicht wird diese Ungenauigkeit auch nur zu hoch berwertet? Sprichts Du nicht andererseits von ±50 K?
Nun gut, bei 0 °C ±50 K oder 50 °C ±50 K sind die Unterschiede aufgrund der Eigenschaften des Wassers schon recht augenfällig.
Aber ist das für die Aufgabe denn sooo relevant?

Könnte man für den Bereich niedriger Temperaturen vielleicht lieber auf "ErfahrungsWerte" ausweichen, statt auf die Messwerte zu vertrauen?
Vorgaben habe ich so gut wie keine…
Ich habe mich versucht an ähnliche bestehende Anlagen zu halten.
Die einzige Vorgabe war die Norm für Thermoprozess Anlagen.
Da geht es um Sicherheit der Gasstrecke, Ausschaltzeiten usw.
Das wird aber alles von der BCU übernommen.
Und die vorhanden Gasstrecke müsste noch erweitern werden wenn dir Anlage wirklich umgebaut werden sollte.
Die BCU überwacht also meine Gasstrecke und übernimmt dir Zündung, danach wird ein Kontakt für die Reglerfreigabe geschlossen und der Regler soll übernehmen.
Nach diesem Zeitpunkt überwacht dir BCU dann nur noch.
 
Der 1s Takt wird durch einen Cyclic Interrupt erstellt. Der Baustein wird jede Sekunde aufgerufen und gibt ein Signal an die Rampe.
D.h. es wäre eigentlich kein Problem, in diesem FC oder FB zusätzlich ein Herauf- oder HerunterZählen im SekundenTakt zu realisieren, um damit Deine Wartezeit/Haltezeit bei konstanter Temperatur zu realisieren.

Denkbar wäre dafür auch ein separater Baustein, der genauso im SekundenTakt die Zählerei durchführt.

Die BCU überwacht also meine Gasstrecke und übernimmt dir Zündung, danach wird ein Kontakt für die Reglerfreigabe geschlossen und der Regler soll übernehmen.
Nach diesem Zeitpunkt überwacht dir BCU dann nur noch.
Die ReglerFreigabe habe ich jetzt nicht verstanden. Wenn der Regler zeitweise abgeschaltet wird, wer sagt dann der BCU, dass bzw. wann sie die Zündung übernehmen soll? Arbeitet die BCU denn nicht ständig als "BefehlsEmpfänger" des Reglers?
Die ReglerFreigabe müsste dann auch auf die RampenBildung wirken, denn was soll eine fein säuberlich gebildete Rampe ausrichten, wenn der Regler, der die Rampe als Sollwert auswerten soll, nicht einsatzbereit ist?

Vorgaben habe ich so gut wie keine…
... aber doch Erwartungen, was die Anlage bei Anwendung Deines Programms können soll und Grenzen innerhalb derer die Anlage arbeiten kann.
Es macht doch z.B. wenig Sinn, TemperaturAnstiegsGeschwindigkeiten anwählen zu können, die zu erreichen der Brenner gar nicht schaffen kann.
 
Zuletzt bearbeitet:
D.h. es wäre eigentlich kein Problem, in diesem FC oder FB zusätzlich ein Herauf- oder HerunterZählen im SekundenTakt zu realisieren, um damit Deine Wartezeit/Haltezeit bei konstanter Temperatur zu realisieren.

Denkbar wäre dafür auch ein separater Baustein, der genauso im SekundenTakt die Zählerei durchführt.


Die ReglerFreigabe habe ich jetzt nicht verstanden. Wenn der Regler zeitweise abgeschaltet wird, wer sagt dann der BCU, dass bzw. wann sie die Zündung übernehmen soll? Arbeitet die BCU denn nicht ständig als "BefehlsEmpfänger" des Reglers?
Die ReglerFreigabe müsste dann auch auf die RampenBildung wirken, denn was soll eine fein säuberlich gebildete Rampe ausrichten, wenn der Regler, der die Rampe als Sollwert auswerten soll, nicht einsatzbereit ist?


... aber doch Erwartungen, was die Anlage bei Anwendung Deines Programms können soll und Grenzen innerhalb derer die Anlage arbeiten kann.
Es macht doch z.B. wenig Sinn, TemperaturAnstiegsGeschwindigkeiten anwählen zu können, die zu erreichen der Brenner gar nicht schaffen kann.
Der Cyclic Interrupt ist ein OB Baustein.

Der Brenner wird durch Eingabefelder auf dem HMI Ein/Ausgeschaltet und mit der BCU auf MIN Leistung gezündet.
Die BCU hat einen Kontakt "Regler Freigabe" der nach dem sicheren Zünden schließt und die Regelung aktivieren soll.
Also liegt bei übergabe an dem Regler des Brenners bereits mit MIN Last an.
Als Befehlsempfänger arbeit die BCU nicht... der Stellklappen Antrieb für luft hat extra einen separaten Analog-Eingang für den Regler.
Wenn die BCU allerdings auf Störung geht wird der Kontakt der regelfreigabe geöffnet und die BCU übernimmt das runterfahren (Ausschalten) des Brenners.
 
Zuletzt bearbeitet:
Der PID Regler... wo wird der platziert?
in dem Cyclic Interrupt / im OB1 oder in dem jeweiligen FB für die dazugehörige Kurve?
Den PID-Regler in gleichmässigen zeitlichen Abständen aufrufen. Das ist wichtig für den I- und den D-Anteil. Für den P-Anteil spielt das keine Rolle.
Es gibt PID-Regler, die selbständig ermitteln, in welchen zeitlichen Abständen sie aufgerufen werden und dies dann entsprechend berücksichtigen.
Für Deine Anwendung dürfte das Aufrufen im SekundenTakt allemal häufig genug sein. Sogar, wenn Du zum Testen Deine recht langen Zeiten im Zeitraffer ablaufen lässt.

Im jeweiligen FB für die dazugehörige Kurve? Wenn Du nicht mehrere Kurven gleichzeitig regeln willst/musst, sehe ich keinen Grund dafür, mehrere (Instanzen der) Regler zu beschäftigen. Pro Ofen/Brenner 1 Regler, das sollte eigentlich genügen. Mach es nicht komplizierter und unübersichtlicher als nötig!
 
Den PID-Regler in gleichmässigen zeitlichen Abständen aufrufen. Das ist wichtig für den I- und den D-Anteil. Für den P-Anteil spielt das keine Rolle.
Es gibt PID-Regler, die selbständig ermitteln, in welchen zeitlichen Abständen sie aufgerufen werden und dies dann entsprechend berücksichtigen.
Für Deine Anwendung dürfte das Aufrufen im SekundenTakt allemal häufig genug sein. Sogar, wenn Du zum Testen Deine recht langen Zeiten im Zeitraffer ablaufen lässt.
Also rufe ich dir Regler in dem Cyclic Interrupt auf Okey.
Und wahrscheinlich dann mit einem MOVE Schiebe ich die werte der 3 Kurven auf den Regler.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Also rufe ich dir Regler in dem Cyclic Interrupt auf Okey.
Ja, aber warum mehrere Regler?
Und wahrscheinlich dann mit einem MOVE Schiebe ich die werte der 3 Kurven auf den Regler.
Nein.
Der Regler hat so direkt nichts mit den Kurven zu tun - er ist nur eines der "ausführenden Organe".
Die Parameter des Reglers müssen zur RegelStrecke passen.
Du musst "die Werte" in einem Programmteil, das die Abläufe (Kurven) organisieren soll, interpretieren und dafür sorgen, dass mit Deinem RampenBaustein und dem daran angeschlossenen Regler dann aus den Werten die gewünschten Kurven entstehen.
Die Werte, die Du z.B. als Rezept verwaltest (oder als Array oder ...) und entsprechend der jeweils aktiven Kurve abrufst, musst Du irgendwie in den gewünschten Ablauf der Kurve umwandeln und die "ausführenden Organe" dann damit füttern.
So, jetzt kommt ein neuer Begriff: Schrittkette.
Es ist wahrscheinlich am einfachsten und am übersichtlichsten, wenn Du die einzelnen Phasen der Kurven in verschiedene Schritte aufteilst, die dann von der Schrittkette nacheinander abgearbeitet werden.
Z.B. Aufheizen vorbereiten, Aufheizen starten, Aufheizen überwachen, Aufheizen beenden, TemperaturHaltePhase starten, TemperaturHaltePhase überwachen, TemperaturHaltePhase beenden, nächste AufheizPeriode vorbereiten, starten, überwachen, beenden, ...
Mach Dir eine Tabelle für den umfangreichsten Ablauf, den Du realisieren willst. Die anderen, einfacheren Abläufe sind dann "abgespeckte" Versionen davon.
Überleg Dir, welche Daten Du benötigst für die einzelnen Schritte.
Die Zeilen der Tabelle sollen die Schritte sein, die Spalten sind die "Werte", die Du benötigst, um die unterschiedlichen Aufgaben pro Schritt so umzusetzen, dass die Schrittkette die entsprechenden Aufgaben an die "ausführenden Organe" ausgeben kann.
Weitere Spalten sollten beinhalten, welche Informationen/Kriterien Du in der Schrittkette abfragen willst (Ablauf einer Zeit oder 'RampenAnstieg ist beendet' oder ...)
Überleg Dir, was die einzelnen Schritte tun müssen und was sie an Informationen benötigen, um im richtigen Moment zum nächsten Schritt weiterzuschalten.
Ob Du die Parameter für Deinen Regler überhaupt ändern musst, weiss ich nicht, wahrscheinlich ja, ABER ich glaube das ist dann ein weiterer Bereich, der von der Umsetzung der Kurven (relativ?) unabhängig sein könnte.
Ich schätze mal, dass Du Kurve x für verschiedene Massen (da war mal von Kupfer in unterschiedlichen Mengen die Rede) benutzen willst und für verschiedene Massen unterschiedliche ReglerParameter nötig sein dürften. Ich weiss nicht, ob Du dafür zusätzliche, massgeschneiderte Kurven einsetzen willst. Oder, ob es vielleicht eine Vorwahl für die Masse geben soll und dann ansonsten identische/ähnliche Kurven abgefahren werden sollen.
 
Zuletzt bearbeitet:
1648577786475.png
Kennt sich damit einer aus und weis wie ich den beschalten muss?
Input_PER ist klar, dort muss Skaliert auf 27.648 mein Istwert
Setpoint muss mein Sollwert drauf als REAL

Ich habe die Hilfe schon geöffnet aber schlüssig ist mir das immer nocht nicht. einiges davon brauch ich auch garnicht und kann ich einfach weglassen, aber Output Heat werde ich ja brauchen und diese Warnungen sind ganz interessant, da verstehe ich die Hilfe aber nicht.
 
Da du keine Abkühlstrecke in deiner Regelung hast, würde dir der PID Compact auch reichen
1648620217825.png

Die Beschaltung ist ziemlich einfach:
Input oder Input_PER für den aktuellen Istwert, entweder direkt dein Istwert oder der Analogeingang.
Output oder Output_PER für dein Stellwert an deine Lüfterklappe
Die restlichen Parameter sind in der Hilfe doch gut beschrieben, was verstehst du daran speziell nicht?
 
Zurück
Oben