-> Hier kostenlos registrieren
Grüße in die Runde,
ich bin mal wieder an einen Kunden geraten, der Mängel in der Hardware mit einer Software-Lösung beheben will. Speziell geht es um analoge Stellventile, die über PID-Regler gestellt werden.
Das Problem: Die Ventile haben sehr viel Spiel. Wenn der Regler den Stellwert erhöht, folgt das Ventil dem Stellwert gut und bewirkt dadurch eine Veränderung der Regelgröße. Wenn der Regler dann aber den Stellwert senkt, wirkt sich das leider nicht sofort auf das Ventil aus. Teilweise ist der Stellwert des Reglers um 10% gesunken, bevor das Ventil dann reagiert. Dadurch kann es zum Übersteuern des Reglers und Schwingen kommen.
Die Lösung, die der Kunde vorgeschlagen hat: Der Ausgabewert des Reglers wird nicht mehr direkt als Stellwert für das Ventil verwendet, sondern es wird ein noch zu implementierender Baustein dazwischen geschaltet. Dieser soll den Ausgabewert des Reglers überwachen. Die Richtung der ersten Änderung wird gespeichert. Wenn der Reglerausgabewert sich in die gemerkte Richtung ändert, wird der Wert unverändert an das Ventil als Stellbefehl weitergegeben. Wenn erkannt wird, dass der Reglerwert sich in die andere Richtung ändert (um eine einstellbare Differenz), soll der Ausgabewert des Reglers um einen einzugebenden Offset modifiziert werden und das Ergebnis wird dann an das Ventil weitergegeben.
Beispiel: PID-Regler möchte das Ventil öffnen. Ventil öffnet langsam. Sollwert ist erreicht. Prozess sorgt dafür, dass der Istwert den Sollwert übersteigt. Regler möchte Ventil schließen. Logik erkennt die Änderung und subtrahiert vom Sollwert den Offset (den der Kunde ermittelt hat). Dadurch soll das Spiel des Ventils ausgeglichen werden. Wenn der Istwert nun wieder unter den Sollwert fällt und der Regler mit einem Anstieg des Ausgabewerts reagiert, soll der Offset wieder entfernt werden.
Ich denke, ich muss den Reglerausgang mindestens glätten, wenn nicht gar einen Durchschnitt über die letzten Zyklen bilden. Beim zweiten Aufruf muss dann geschaut werden, in welche Richtung der Wert gerade geht, um das als Initialrichtung zu definieren.
Was haltet ihr von der Idee? Welche potentiellen Fallstricke warten auf mich? Habt ihr eventuell schon Erfahrung mit solchen Idee? Gibt es vielleicht sogar schon fertige Lösungen im Netz?
Gearbeitet wird mit TIA V19, S7-1517F.
Ich freue mich auf eure Beiträge.
Gruß, Januar
ich bin mal wieder an einen Kunden geraten, der Mängel in der Hardware mit einer Software-Lösung beheben will. Speziell geht es um analoge Stellventile, die über PID-Regler gestellt werden.
Das Problem: Die Ventile haben sehr viel Spiel. Wenn der Regler den Stellwert erhöht, folgt das Ventil dem Stellwert gut und bewirkt dadurch eine Veränderung der Regelgröße. Wenn der Regler dann aber den Stellwert senkt, wirkt sich das leider nicht sofort auf das Ventil aus. Teilweise ist der Stellwert des Reglers um 10% gesunken, bevor das Ventil dann reagiert. Dadurch kann es zum Übersteuern des Reglers und Schwingen kommen.
Die Lösung, die der Kunde vorgeschlagen hat: Der Ausgabewert des Reglers wird nicht mehr direkt als Stellwert für das Ventil verwendet, sondern es wird ein noch zu implementierender Baustein dazwischen geschaltet. Dieser soll den Ausgabewert des Reglers überwachen. Die Richtung der ersten Änderung wird gespeichert. Wenn der Reglerausgabewert sich in die gemerkte Richtung ändert, wird der Wert unverändert an das Ventil als Stellbefehl weitergegeben. Wenn erkannt wird, dass der Reglerwert sich in die andere Richtung ändert (um eine einstellbare Differenz), soll der Ausgabewert des Reglers um einen einzugebenden Offset modifiziert werden und das Ergebnis wird dann an das Ventil weitergegeben.
Beispiel: PID-Regler möchte das Ventil öffnen. Ventil öffnet langsam. Sollwert ist erreicht. Prozess sorgt dafür, dass der Istwert den Sollwert übersteigt. Regler möchte Ventil schließen. Logik erkennt die Änderung und subtrahiert vom Sollwert den Offset (den der Kunde ermittelt hat). Dadurch soll das Spiel des Ventils ausgeglichen werden. Wenn der Istwert nun wieder unter den Sollwert fällt und der Regler mit einem Anstieg des Ausgabewerts reagiert, soll der Offset wieder entfernt werden.
Ich denke, ich muss den Reglerausgang mindestens glätten, wenn nicht gar einen Durchschnitt über die letzten Zyklen bilden. Beim zweiten Aufruf muss dann geschaut werden, in welche Richtung der Wert gerade geht, um das als Initialrichtung zu definieren.
Was haltet ihr von der Idee? Welche potentiellen Fallstricke warten auf mich? Habt ihr eventuell schon Erfahrung mit solchen Idee? Gibt es vielleicht sogar schon fertige Lösungen im Netz?
Gearbeitet wird mit TIA V19, S7-1517F.
Ich freue mich auf eure Beiträge.
Gruß, Januar