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.
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?