TIA OB Zykluszeiten bei PID_Temp

meikelneit

Level-2
Beiträge
151
Reaktionspunkte
1
Zuviel Werbung?
-> Hier kostenlos registrieren
Schönen guten Tag,

ich habe ein Problem mit einer Warnung des PID_TEMP FB's. Ich habe die Warnung anstehen 16#00000020.

Mit der Beschreibung:
Die Abtastzeit des PID-Algorithmus wird durch die Zykluszeit des aufrufenden OB begrenzt.
Um bessere Ergebnisse zu erzielen, verwenden Sie kürzere Zykluszeiten des OB.

Der FB_PID_Temp selbst wird in einem Interrupt OB (100ms) aufgerufen. "CPU Zykluszeit ~ 6,5ms"
Die PWM zur Steuerung des Heizelements wird mit einem FB_Pulsgen in einem Interrupt OB(10ms) aufgerufen erzeugt.

Wir nutzen TIA17, die CPU ist eine 1517 TF-3 PN/DP.

Ich würde gerne wissen was die Fehlermeldung mir genau sagt, und wie man die Aufrufzeiten der Interrupt OBs ermittelt, vor Ort kann mir das niemand sagen.
Die Werte wurde wohl aus Erfahrung so verwendet.

Mit freundlichem Gruß
Meikelneit
 
Gibts an dem PID_Temp nen Eingang, wo Du die Zykluszeit vom Weckalarm antragen musst?

In welchem OB rufst Du den auf? Ist das wirklich nen Weckalarm?
 
Die Regelung wirkt auf mich im Regelverhalten auch merkwürdig.

Die Regelgröße wird nur im Bereich 0 - 6% ausgesteuert. (rote Linie)
Ist die Heizung eventuell Maßlos überdimensioniert?

Unbenannt.PNG

Beim aufwärmen schwingt das System bei einem Sollwert von 370°C bis 450°C über, und regelt sich dann in Wellen langsam herab auf den Sollwert.

PS: Der Rückgabewert kommt direkt von einem PT100, welcher 5mm hinter der Heizung sitzt.
 
Zuletzt bearbeitet:
Was ist denn ein "Interrupt OB"? 🤔
Cyclic interrupt (OB30)

Ja es handelt sich um einen Luftstrom zum Heizen eines Ofens.
Ich habe jetzt 2 Themen hier rein geworfe, im Grunde würde ich gerne erstmal verstehen warum 100ms. Oder ist das bei dem trägen System eh erstmal unwichtig?

Und was wäre die maßnahme um die Warnung 16#00000020 zu beheben?
 
Ein Luftstrom ist kein träges System - das siehst du ja schon an dem von dir geschilderten Überschwingverhalten.
Ich weiß gar nicht, ob ein PID-Regler hier der richtige Ansatz ist ... oder ob ein stink-normaler 2-Punkt-Regler diese Aufgabe nicht sehr viel besser bewältigen kann (bei Luftstrom habe ich es immer so gemacht).
In jedem Fall brauchst du hier aber eine kurze Zyklus-(Reaktions-)Zeit ...
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Ich finde das Überschwingen eigentlich sehr träge, wenn der Sollwert bei 370 liegt und der Wert noch 80°C weiter steigt, oder nicht?


Das Prinzip ist hier halt der PID, wer das entschieden bzw. warum kann ich nicht sagen.
Ich bin mir aber auch sicher das die Autokalibrierung das Gewicht des Differenzialteils auf 0.0 gestellt hat, also arbeitet das ganze eigentlich wie ein PI Regler.
 
Ich würde den D-Anteil mal auschalten, weil die Strecke freudig genug ist, den HLM Reglerausgang mal runter stellen auf z.B. 20%.

Und ja, nicht auszuschließen dass die Heizung überdimensioniert ist. Vllt. wird es besser wenn ihr dann mal mit Last/Produkt fahrt.

VG
 
Was ist denn ein "Interrupt OB"? 🤔
Eigentlich ist jeder OB, der den OB1 unterbricht, ein Interrupt-OB. Die einen tun es in einem vorgegebenen ZeitTakt (SiemensSlang: WeckAlarm), die anderen bei Änderung von Zuständen an bestimmten (Hardware-)Eingängen.
Aber Du hattest ja zu Recht gezielt nach WeckAlarm gefragt und mit der Antwort wurde keinerlei Aufklärung geliefert.

Und was wäre die maßnahme um die Warnung 16#00000020 zu beheben?
Den PID in kürzeren zeitlichen Abständen aufrufen.
Könnte es sein, dass der PID z.Z. "bedingt", also nicht garantiert bei jedem OB30-Durchlauf aufgerufen wird?

Ich wundere mich schon ein wenig über die FehlerMeldung. Wie kann ein PID, der zu selten aufgerufen wird, überhaupt die verlässliche Diagnose stellen, dass er in zu grossen zeitlichen Abständen aufgerufen wird? Wesentlich einfacher zu diagnostizieren dürfte der Fall sein, wenn ein Regler in unnötig kurzen Abständen aufgerufen wird.
Beim aufwärmen schwingt das System bei einem Sollwert von 370°C bis 450°C über, und regelt sich dann in Wellen langsam herab auf den Sollwert.
Mein Verdacht: zu viel I-Anteil, zu wenig D-Anteil.

PS:
Warum hast Du in Beitrag #4 im Bildchen die Beschriftung der ZeitAchse unkenntlich gemacht? Willst Du unsere GlasKugeln testen? ;)
 
Zuletzt bearbeitet:
Zuviel Werbung?
-> Hier kostenlos registrieren
Der FB_PID_Temp selbst wird in einem Interrupt OB (100ms) aufgerufen. "CPU Zykluszeit ~ 6,5ms"
Die PWM zur Steuerung des Heizelements wird mit einem FB_Pulsgen in einem Interrupt OB(10ms) aufgerufen erzeugt.
Ich nehme an "FB_Pulsgen" ist ein selbstbau?
Was macht der genau?
Hochskalieren der Pulse auf gewisse mindest Puls/Pausen-Zeiten?
Gibt es einen Grund wieso nicht der interne PWM-Generator des PID_Temp verwendet wird?
Hast du "Output-Heat" vom PID_Temp mal mit dem tatsächlichen Pulsverhältnis an deine Heizung verglichen?
Die Regelgröße wird nur im Bereich 0 - 6% ausgesteuert. (rote Linie)
Ist die Heizung eventuell Maßlos überdimensioniert?

Anhang anzeigen 72758
Überdimensioniert (und zwar nicht nur ein bisschen) oder sehr ungünstige Sensorposition.
Im Prinzip steht genau das in der Warnmeldung.
ich habe ein Problem mit einer Warnung des PID_TEMP FB's. Ich habe die Warnung anstehen 16#00000020.

Mit der Beschreibung:
Die Abtastzeit des PID-Algorithmus wird durch die Zykluszeit des aufrufenden OB begrenzt.
Um bessere Ergebnisse zu erzielen, verwenden Sie kürzere Zykluszeiten des OB.
PID_Temp ist ein zeitdiskreter Regler, was unterm Strich heißt:
Der Ausgangswert (Stellgrad) wird nur in gewissen Zeitabständen, in den PID-Parametern als "Abtastzeit des PID-Algorithmus" bezeichnet, neu berechnet. I
n unserem Fall immer ein ganzes vielfaches der Zykluszeit deines Cyclic Interupt OBs.
Während der Optimierung der Regelparameter wird ermittelt in welchem Zeitabstand die schnellste Reaktion deiner Regelstrecke zu erwarten ist & die Abtastzeit entsprechend eingestellt.
Ich habe z.B. sehr Träge Ofenanlagen, Rufe meine Regler mit einem 500ms Interupt auf & bekomme normalerweise Abtastzeiten von ca. 5 Sekunden.
Heißt: Mein PID_Temp wird alle 500ms berechnet, der PID-Ausgangswert bekommt aber nur alle 10 Aufrufe eine Neuberechnung.
Diese "Zwischenaufrufe" sind für Sekundärfunktionen des PID_Temp relevant, siehe z.B. "PWM-Begrenzung" in der TIA-Hilfe.

Der FB_PID_Temp selbst wird in einem Interrupt OB (100ms) aufgerufen. "CPU Zykluszeit ~ 6,5ms"
In deinem Fall Beträgt die Abtastzeit minimal 100ms, also bei jedem Aufruf.

Die Warnung bedeutet, dass er eine Abtastzeit < Interupt-Zeit (=> 100ms) verwenden will.
Das sieht man auch sehr schön an deinem Trace.
Zwischen zwei Aufrufen ändert sich der Istwert so stark, dass er mit dem Anpassen des Stellgrads gar nicht mehr hinterher kommt.
Siehe auch Tooltip des entsprehcenden Parameters.
1699510552702.png

Ich habe jetzt 2 Themen hier rein geworfe, im Grunde würde ich gerne erstmal verstehen warum 100ms. Oder ist das bei dem trägen System eh erstmal unwichtig?
100ms sind für träge Systeme ein üblicher Startwert.
Ist im Normalfall immer ausreichend & entlastet den zyklischen Betrieb ausreichend.
Solange deine Aufruftakt <= Abtastzeit PID-Algoritmus bleibt, kannst du den zyklischen Interupt auch verlängern um Rechenkapazität zu sparen.
In deinem Fall ist deine Strecke deutlich weniger Träge als 100ms.
=> damit Aufruftakt > Abtastzeit PID
=> Dramaaaaaa

Und was wäre die maßnahme um die Warnung 16#00000020 zu beheben?
- Trägeit deines Systems erhöhen
- Aufruftakt des PID_Temp verringern. z.B. 10ms => Prüfen was die Warnung macht & was die Selbstoptimierung als "Abtastzeit PID" ausspuckt. Im Prinzip das, was @Heinileini bereits vorgeschlagen hat.

Und prüf auch mal wo dein Sensor und wo die Heizung tatsächlich sitzen.
So "extrem schnelle" Reaktionen kenne ich von Heizungen eigentlich nicht.
Kann es sein, dass der Sensor vllt. direkt mit der Oberfläche des Heizstabs kontakt hat?
 
Und prüf auch mal wo dein Sensor und wo die Heizung tatsächlich sitzen.
So "extrem schnelle" Reaktionen kenne ich von Heizungen eigentlich nicht.
Kann es sein, dass der Sensor vllt. direkt mit der Oberfläche des Heizstabs kontakt hat?
Naja ... für eine Heizung, bei der der Fühler direkt im Luftstrom sitzt kenne ich dieses Verhalten schon, Es ist etwas anderes wenn man mit dem Luftstrom heizt, aber eher am Objekt selbst misst um das es letztlich geht ...
 
Danke für die vielen Beiträge.

Folgende Maßnahmen haben jetzt zu einem besseren Verhalten der Regelkaskade geführt. Ich unterscheide 2 Phasen, aufwärmen und den aufgeheizten Ofen.

Beim Aufheizen der Durchluftheizung limitiere ich die maximale Ausgangsleistung auf 75%, das reicht um die Arbeitstemperatur von 400°C zu erreichen und hat nach erneuter Optimierung ein sehr gutes und stabiles Ergebnis geliefert.

Das massive Überschwingen hatte eine triviale Ursache. Wir haben eine geschlossene Zirkulation der Luft im System, so das die zur Heizung zugeführte Luft sich langsam erwärmt. Dabei wurde die Regeloptimierung bei kaltem (ca. 20°C) Ofen durchgeführt, wobei natürlich bei einer größeren Temperaturdifferentz die Heizung mehr Energie zuführen muss, als im aufgeheizten (etwa 170°C) Zustand, Zulufttemperatur vor Heizung dann ca. 130°C.

Also habe ich nochmal eine weitere Optimierung bei aufgeheiztem System gemacht und die beiden Regelparametersätze getrennt gespeichert. Im Prozess tausche ich diese Paramtersätze bedingt gegeneinander aus. Das Aufheizen dauert etwa 1std bis alle Wärmekapazitäten auf Temperatur sind.
Damit hat sich das Überschwingen massiv verbessert.

Dazu habe ich alle Parametersätze jetzt mit der Einstellung der Regler der Regelstrecke als PI_Regler durchgeführt.

Der Pulsgenerator ist der der normale Siemens FB_PULSEGEN.
 
Zurück
Oben