TIA PID Compact regelt zu langsam?

LLP

Level-1
Beiträge
3
Reaktionspunkte
1
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo zusammen,
unsere Aufgabe ist es mit Hilfe eines PID Regler eine hydraulische Linearachse zu verfahren, die über ein proportional Ventil gesteuert wird.
Die Sprungantwort bzw. Rechtecksignal lassen wir von einem Funktionsgenerator erzeugen, es stellt unseren Sollwert dar. Die in der Linearachse verbaute Wegemessung liefert unseren Istwert. Die Stellgröße soll an das Proportionalventil gegeben werden. Alles drei können wir uns über ein Oszilloskop anzeigen lassen. Hier fällt auf, dass die Regelung für unsere Anwendung zu langsam ist, da das Ventil nur ca. alle 250ms schaltet. Vorherige Test haben allerdings gezeigt, dass das Ventil dies eigentlich schneller kann, weswegen wir unseren Fehler irgendwo in der Regelung vermuten. Zum umrechnen des Sollwertes verwenden wir zunächst die Bausteine NormX und ScaleX. Der Weckalarm des PID Compact ist so gering wie möglich eingestellt.
Hat jemand vielleicht eine Idee was unser Problem lösen könnte, wir sind leider absolut keine Profis mit dem TIA Portal und über jede Hilfe dankbar.
LG LLP
 
Die Sprungantwort bzw. Rechtecksignal lassen wir von einem Funktionsgenerator erzeugen, es stellt unseren Sollwert dar.
Rechtecksignal heißt dann 0 & 1 oder reden wir von einem Weg, der z.B. zwischen Soll=100mm und 300mm hin und her springt.
Und dem die Linearachse folgen soll.

Die Stellgröße soll an das Proportionalventil gegeben werden
....
Hier fällt auf, dass die Regelung für unsere Anwendung zu langsam ist, da das Ventil nur ca. alle 250ms schaltet
Proportionalventil heißt normalerweise, dass ich einen Öffnungsgrad/Winkel von 0-100% vorgebe.
Was meinst du mit "schaltet"?
Zu langsam ist ein sehr dehnbarer Begriff. Über welchen Zeitrahmen reden wir? Sekunden? Milisekunden?

..., weswegen wir unseren Fehler irgendwo in der Regelung vermuten.
Naja...es ist selten der Regler schuld. PIDs funktionieren selten nach dem Motto "go random Bullshit" (╯‵□′)╯︵┻━┻
Zum umrechnen des Sollwertes verwenden wir zunächst die Bausteine NormX und ScaleX.
Was genau rechnest du in was genau um?
Mach am besten mal eine Skizze von deinem Aufbau & welche Information in welcher Einheit von wo kommt.

Der Weckalarm des PID Compact ist so gering wie möglich eingestellt.
Das ist in Zahlen wie viele Mikrosekunden?

....wir sind keine Profis mit dem TIA Portal und über jede Hilfe dankbar.
Wir helfen gerne, allerdings wäre auch die Strukturierung und der Informationsgehalt eurer Fragen auch noch etwas ausbaufähig.

Mal von Anfang an:
- Welche TIA-Version?
- welche Steuerung? (incl. Firmware)
- welche I/O-Baugruppen?
- Was genau (typ) für ein Ventil?
- Könntest du eine Skizze deines Problems machen? Am besten ein Screenshot des Hydraulik-Schemas.
- Was sind die Anforderungen an Geschwindigkeit & Genauigkeit der Positionierung? Darf das Ding überschwingen, etc.
- Gibt es ein Blockschaltbild für die Anwendung? Bzw. hat man sich daruber bereits Gedanken gemacht?
- Auf welcher Basis habt ihr euch für einen PID-Regler entschieden?
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Ich würde mal die Hardwarekomponenten prüfen was diese für Aktualisierungszeiten haben, ob die Karten am Rückwandbus hängen oder über Profinet angeschlossen sind, wie schnell der Istwert eingelesen wird.

Z.B. bekomme ich bei ET200SP High feature Baugruppen, welche ich für schnelle Regelungen einsetze, am Rückwandbus schneller die Werte gelesen und geschrieben als über Profinet, wodurch ich die Regelung schärfer einstellen kann.

Gruß
 
Hier fällt auf, dass die Regelung für unsere Anwendung zu langsam ist, da das Ventil nur ca. alle 250ms schaltet.
Der Weckalarm des PID Compact ist so gering wie möglich eingestellt.
Wenn der Regler auf einem anderen OB aufgerufen wird als das Ventil sollte man auf die Zykluszeiten beider OB´s schauen 250ms scheint mir ein recht hoher Wert für den Weckalarm. Wie ist denn nun der CPU Type?
 
Hallo zusammen,
...Hier fällt auf, dass die Regelung für unsere Anwendung zu langsam ist, da das Ventil nur ca. alle 250ms schaltet....
Hallo,

wir hatten seinerzeit auch eine Problem bei einer Inbetriebnahme, der PID war angeblich zu langsam und das Stellglied vom Kunden natürlich korrekt parametriert. Wie auch sonst :oops:
Wir sind so zur Lösung gekommen: Sprung direkt auf das Stellglied geben ohne Regler und die Sprungantwort tracen.
Ergebnis: Sprung auf Sollwert wurde mit minimaler Verzögerung ausgeführt, Sprung auf 0 mit extremer Verzögerung, mehrere s
Fazit: das Stellglied war falsch parametriert.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Ergebnis: Sprung auf Sollwert wurde mit minimaler Verzögerung ausgeführt, Sprung auf 0 mit extremer Verzögerung, mehrere s
Meinst Du damit folgendes?
Sprung auf Sollwert <> 0 wurde mit minimaler Verzögerung ausgeführt,
Sprung auf Sollwert = 0 mit extremer Verzögerung, mehrere s.

Worum geht es bei der Regelung? Heizen / Kühlen?
Z.B. einerseits nur aktives Heizen und hierbei unverzügliche Reaktion und
andererseits nur "passives" Kühlen durch Wärmeverlust an Umgebung und hierbei nur langsame Reaktion?
 
Mit 250ms Reglertakt kann man vielleicht einen Öltanker regeln, aber doch keine Linearachse, egal wie die verfahren wird.
 
Vielen Dank für eure Antworten. Wir sind jetzt wieder im Labor und können unsere Fragen genauer ausführen.

Zur Hardware:

Wir arbeiten mit:

SIMATIC S7-1500
PM 190W 120/230VAC (6EP 1333-4BA00)
CPU 1516-3 PN/DP (6ES7 516-3AN02-0AB0)
AI 8xU/I/RTD/TC ST (6ES7 531-7KF00-0AB0)
AQ 4xU/I ST (6ES7 532-5HD00-0AB0)

TIA Portal V16

Das Proportionalventil ist von der Firma MOOG ("direktgesteuertes Servoventil Typ D633-121")


- Was sind die Anforderungen an Geschwindigkeit & Genauigkeit der Positionierung? Darf das Ding überschwingen, etc.
Die Anforderungen sind durch eine analoge PID-Reglerkarte (Festo) vorgegeben, an dessen Geschwindigkeit und Genauigkeit wir uns orientieren sollen. Unsere vorgegebene Aufgabe ist es, diese bisher analoge Regelung nun mit Hilfe einer SPS zu realisieren.

Rechtecksignal heißt dann 0 & 1 oder reden wir von einem Weg, der z.B. zwischen Soll=100mm und 300mm hin und her springt.
Und dem die Linearachse folgen soll.
Wir meinen damit einen Weg dem die Linearachse folgen soll.
Was genau rechnest du in was genau um?
Der Funktionsgenerator gibt eine Rechteckfunktion in Spannung aus. Dieses analoge Signal wird von der SPS ja direkt in ein digitales Signal umgewandelt und in Inkrementen angegeben (16 bit / 0-32768 bzw. der Nennbereich ist 0-27648). Über den Norm_X wandeln wir die Inkremente in eine Gleitpunktzahl und über Scale_X skalieren wir diese Gleitpunktzahl in Prozent, da der PID-Compact den Sollwert in Prozent benötigt.

Kann hier eventuell unser Fehler liegen, falls diese Umwandlung zu lange dauert? Gäbe es Alternativen?

Proportionalventil heißt normalerweise, dass ich einen Öffnungsgrad/Winkel von 0-100% vorgebe.
Was meinst du mit "schaltet"?
Wir meinten damit, dass das Ventil nur alle 250ms angesteuert wird. Dies konnten wir mit Hilfe des Oszilloskop feststellen. (Siehe Bild im Anhang)
Das ist in Zahlen wie viele Mikrosekunden?
Der Zeittakt des Weckalarms ist zur Zeit bei 1000 Mikrosekunden.

Ich würde mal die Hardwarekomponenten prüfen was diese für Aktualisierungszeiten haben, ob die Karten am Rückwandbus hängen oder über Profinet angeschlossen sind, wie schnell der Istwert eingelesen wird.

Z.B. bekomme ich bei ET200SP High feature Baugruppen, welche ich für schnelle Regelungen einsetze, am Rückwandbus schneller die Werte gelesen und geschrieben als über Profinet, wodurch ich die Regelung schärfer einstellen kann.

Gruß
Die Zykluszeiten der Ein- und Ausgangskarte haben wir uns aus den Datenblättern erschlossen.
Zykluszeit der Eingangskarte sollte ca. bei 18ms liegen (2 aktivierte Kanäle mit Spannungsmessung, keine Offsetkalibrierung, keine Drahtbruchüberwachung)
Zykluszeit der Ausgangskarte laut Datenblatt 3,2 ms.

Die gemessene Zykluszeit der CPU (über Online&Diagnose) liegt bei 1-7ms.

Die Karten sind über einen Rückwandbus miteinander verbunden.

Hallo,

wir hatten seinerzeit auch eine Problem bei einer Inbetriebnahme, der PID war angeblich zu langsam und das Stellglied vom Kunden natürlich korrekt parametriert. Wie auch sonst :oops:
Wir sind so zur Lösung gekommen: Sprung direkt auf das Stellglied geben ohne Regler und die Sprungantwort tracen.
Ergebnis: Sprung auf Sollwert wurde mit minimaler Verzögerung ausgeführt, Sprung auf 0 mit extremer Verzögerung, mehrere s
Fazit: das Stellglied war falsch parametriert.
Da wir mit unserer analogen Reglerkarte den gleichen Aufbau testen konnten, können wir eigentlich ausschließen, dass es an unserem Stellglied liegt.



Hier haben wir noch einen Screenshot vom Oszilloskop.
Grün ist der Funktionsgenerator mit dem Rechtecksignal (Sollwert)
Blau ist die Wegemessung der Achse (Istwert)
Rosa ist die Ansteuerung des Proportionalventils (Stellgröße)

Oszilloskop.jpg
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Wahrscheinlich liegt der Sinn der Übung genau darin, zu erkennen, dass mit einer analogen Reglerkarte eine sehr viel höhere Regelgüte erreichbar ist, als es durch einen diskret arbeitender PID-Regler jemals möglich wäre. Der diskret arbeitende PID-Regler wird durch endliche Zyklus- und Wandlungszeiten mehr oder weniger ausgebremst. Im Übrigen ist es auch wenig sinnvoll, den Regler in kürzeren Zyklen auf zu rufen, als die Aktualisierung der E/As, bzw. der gesamten Regelstrecke erfolgt. Hier sind bezüglich der Dynamik Grenzen gesetzt.

Wie habt ihr den PID-Regler optimiert? Vielleicht kann man über die Parameter noch etwas heraus holen? Kennt ihr die Regler-Parameter die an der Festo-Reglerkarte eingestellt sind?
 
Zuletzt bearbeitet:
Du schreibst das du den Fehler in der Regelung vermutest.
Dann zeig uns doch bitte mal wie ihr die Regelung macht.
Habt ihr einen PID von Siemens genommen, oder was eigenes geschrieben?
Da ihr den Regler in 1 ms aufruft sollte der ja schnell genug neue Werte liefern.
Könnte aber an der Reglereinstellung liegen ob dieser das auch macht.

Wich würde die Ausgangskarte dann auch mit dem Interrupt OB verschalten und nicht auf Automatic belassen
1710497899255.png
 
Solltet ihr den PIC_COMPACT benutzt haben kann es sein das ihr nur jeden x ten Zyklus rechnet weshalb ihr nur alle 250 ms einen neuen Wert erhaltet.

1710498273114.png
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Moin,

wie sehr doch ein Trace die Fragen klären kann...
im Oszi ist zu erkennen das die Achse in 500ms von min nach max oder umgekehr läuft. Sollwert wird erreicht.
Das erscheint alles stimmig.
Der Regler gibt alle 250ms einen neuen Wert an das Ventil. Hier sehe auch ich den Flaschenhals wie der TE in seinem Eingangspost.
Kann der Sollwert auf 200% gesetzt werden und so die Steiheit erhöhen aber nur auf 100% Output begrenzt werden?
Was für mich noch nicht erkennbar ist: wie schnell kann die Achse überhaupt verfahren werden?
 
Die Anforderungen sind durch eine analoge PID-Reglerkarte (Festo) vorgegeben, an dessen Geschwindigkeit und Genauigkeit wir uns orientieren sollen. Unsere vorgegebene Aufgabe ist es, diese bisher analoge Regelung nun mit Hilfe einer SPS zu realisieren.
Von der Karte gibt es doch bestimmt ein Blockschaltbild oder einen Schaltplan (✿◠‿◠)
Habt ihr euch schon angeschaut ob das was der Analog-Regler intern veranstaltet passend zu dem Blockschaltbild des PID_Compact? (findest du in der TIA-Hilfe des Reglers)
Ist das analoge evtl. nen unterlagerter Regelkreis, wie bei einem Servoantrieb?
Also ein Regelkreis, der sich auf die Position bezieht & ein zweiter Regelkreis "darunter", der aufgrund der Positionsdifferenz die Geschwindigkeit/den Ventil-Öffnungswinkel regelt.

Der Funktionsgenerator gibt eine Rechteckfunktion in Spannung aus. Dieses analoge Signal wird von der SPS ja direkt in ein digitales Signal umgewandelt und in Inkrementen angegeben (16 bit / 0-32768 bzw. der Nennbereich ist 0-27648). Über den Norm_X wandeln wir die Inkremente in eine Gleitpunktzahl und über Scale_X skalieren wir diese Gleitpunktzahl in Prozent, da der PID-Compact den Sollwert in Prozent benötigt
Du kannst dem Regler übrigens auch so ziemlich jede andere physische Größe übergeben.
Der Mathematik des PID-Algorithmus ist die Einheit ziemlich egal.
1710501796725.png
Das sollte für deine Problemstellung zwar irrelevant sein, macht es aber einfacher, wenn man %-Werte nicht erst in konkrete Positionen umrechnen muss.

Kann hier eventuell unser Fehler liegen, falls diese Umwandlung zu lange dauert? Gäbe es Alternativen?
Die Zykluszeiten der Ein- und Ausgangskarte haben wir uns aus den Datenblättern erschlossen.
Zykluszeit der Eingangskarte sollte ca. bei 18ms liegen (2 aktivierte Kanäle mit Spannungsmessung, keine Offsetkalibrierung, keine Drahtbruchüberwachung)

Überprüf mal die Konfiguration des Analogeingangs.
Die Wandlungszeit des Analogwerts findest du im Gerätehandbuch, genauso wie viele Wandlungszyklen mit der Glättung gemeint sind.
Der Screenshot ist von einer anderen AI-Karte als deiner, Prinzip ist aber identisch.
Ne nicht ganz so schnelle Karte + Glättung kann dir die tatsächliche Zeit bis dein physischer Eingangswert auch tatsächlich im Peripheriewert ankommt ganz entspannt in den Sekunden-Bereich drücken.
1710502192276.png


Hier haben wir noch einen Screenshot vom Oszilloskop.
Grün ist der Funktionsgenerator mit dem Rechtecksignal (Sollwert)
Blau ist die Wegemessung der Achse (Istwert)
Rosa ist die Ansteuerung des Proportionalventils (Stellgröße)
Mach mal paralell dazu einen Trace von den Signalen.
Dann siehst du wie sich die Werte aus Sicht des SPS-Programms verhalten.
Hilft evtl beim Einschätzen ob das Verhalten vom SPS-Programm oder der Hardware kommt.
Als Aufzeichnungspunkt den Interrupt-OB des Reglers nehmen!

1710502522194.png

Der Zeittakt des Weckalarms ist zur Zeit bei 1000 Mikrosekunden.

Die gemessene Zykluszeit der CPU (über Online&Diagnose) liegt bei 1-7ms.
Damit ist das "normale", zyklische Programm gemeint.
Der Interrupt-OB in dem du die Regler aufrufst, macht immer die 1000 Mikrosekunden.

Wir meinten damit, dass das Ventil nur alle 250ms angesteuert wird. Dies konnten wir mit Hilfe des Oszilloskop feststellen. (Siehe Bild im Anhang)
Das der Ausgabewert vom PID_Compact nur alle 250ms aktualisiert wird riecht tatsächlich etwas nach der Abtastzeit des PID-Algorithmus, wie @DOD666 bereits erwähnt hat.
Beschreibung zu diesem Parameter Siehe TIA-Hilfe (F1 ist dein Freund).
Kannst du mal deine PID-Parameter posten?
Oder am besten gleich die Bausteinquelle des PID_Compact.
Rechtsklich auf das Technologieobjekt => Quelle aus Baustein generieren.
Wird dann als .db-Datei gespeichert, kannst du aber als normales Textfile öffnen.

Der diskret arbeitende PID-Regler wird durch endliche Zyklus- und Wandlungszeiten mehr oder weniger ausgebremst.
Prinzipiell korrekt, allerdings habe ich in der Praxis noch keine Positionieranwendung gesehen, die betreffend Zykluszeit in dieses Limit gerannt wäre.
Und für den Rest gibts FPGA-Module.
Dann reden wir aber eher über die Regelung von Lasertechnik, Halbleiterproduktion, etc.

Im Übrigen ist es auch wenig sinnvoll, den Regler in kürzeren Zyklen auf zu rufen, als die Aktualisierung der E/As, bzw. der gesamten Regelstrecke erfolgt.
Zustimmung.

Wich würde die Ausgangskarte dann auch mit dem Interrupt OB verschalten und nicht auf Automatic belassen
Auch ein Punkt.
Habt ihr berücksichtigt, dass die Peripherie-Daten/Prozessabbild nur bei jedem Aufruf des zugehörigen OBs aktualisiert werden?
Gilt für Ein- und Ausgänge.
Bei 1-7ms Zykluszeit sollte das zwar keine 250ms Verzögerung geben, aber im Endeffekt ist der 1ms Interrupt worst case bei 7ms Zykluszeit dann 7 Mal durchgelaufen, bevor der Regler überhaupt neue Daten bekommen hat.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Vielen Dank für eure ausführlichen Hilfen und Lösungsvorschläge! Die Regelung regelt jetzt fast wie die analoge Reglerkarte und wir hoffen, dass dies zur Abgabe reicht.

Maßgeblich hierfür war vermutlich das Verschalten der E/A-Karten mit dem Interrupt OB. Die Abtastzeit des PID-Algorithmus haben wir zusätzlich auf 5 Mikrosekunden gesetzt. Die Glättung war von Anfang an ausgeschaltet, aber danke für den Tipp.

Kann uns jemand eventuell erklären, was genau diese Verschaltung der Karten mit dem Interrupt OB bewirkt?
 
Die E/A-Signale, die normalerweise im Programm verwendet werden, sind im Normalfall nicht die elektrischen Signale, die zu dem exakten Zeitpunkt der Programmbearbeitung an den Karten anstehen. Ein normaler SPS-Zyklus sieht so aus, dass die CPU den Zustand der Eingangsbaugruppen kontrolliert und in einen Zwischenspeicher packt (das sogenannte Prozessabbild der Eingänge). Dann wird der OB1 aufgerufen und alles mögliche an Programm wird abgearbeitet. Dabei werden auch die Signale gebildet, die die SPS an den Ausgangsbaugruppen ausgeben will. Das wird ebenfalls in den Zwischenspeicher (Prozessabbild der Ausgänge) gepackt. Wenn die CPU den Zyklus beendet hat, wird das Prozessabbild der Ausgänge auf die Ausgangskarten kopiert und die Signale werden von der CPU in die reale Welt geschickt.

Wenn du jetzt aber deine Ausgänge im Weck-OB bildest, werden die Werte für die Ausgangskarten sehr viel schneller gebildet als sie in die reale Welt kommen. Du änderst zwar mit der Geschwindigkeit deines Reglers die Signale, aber wirklich ausgegeben werden die nur am Ende von OB1. Als Beispiel könntest du dir vorstellen, dass du zwar deine Abschlussarbeit beliebig oft ändern kannst, aber wirklich zählen tut es erst, wenn du auf "Drucken" klickst.
Wenn du die Ausgangskarte aber an deinen Interrupt-OB verschaltest, wird der Signalzustand der Ausgänge auch mit dem Ende des Interrupt-OBs geändert. Der Zeitpunkt, an dem das Prozessabbild der Ausgänge in die reale Welt rausgeschickt wird, wird also an den Interrupt-OB angepasst und ist nun nicht mehr von OB1 abhängig.
 
Zurück
Oben