Anti-Wind-Up-Maßname bei einem I-Regler

Zuviel Werbung?
-> Hier kostenlos registrieren
So, jetzt habe ich mal wieder ein bisschen mehr Zeit.

Bei mir twitterts eigentlich mehr PI-PI-PI als PD. Aber ich habe meist auch nur mit einfachen Regelungen zu tun (Druck, Temperatur, Position/hydr.Achse). Die Regelung um die es dem TE hier geht ist vermutlich viel komplexer. Feldstärke und Spannung können ja nur unterlagerte Regelgrößen von etwas anderen sein. Von daher ist es völlig sinnlos für uns, über ein genaues Regelverhalten nach zu denken. Wen es interessiert, eine Diskussion über den wundervollen D-Anteil hatten wir z.Bsp. hier schon einmal: Ungenaueigkeit PID-Regelbaustein S7-1200.


Ich begrenze prinzipiell wie folgt:
- P auf -100..+100;
- I auf 0..(100-P);
- Y auf 0..100; // Y := P + I + D


Der TE macht es vermutlich anders. Er friert seinen I-Anteil ein, in dem er die Regelabweichung zur Berechnung des I-Anteils auf Null setzt. Und zwar dann, wenn Y>=100% ist. So habe ich es verstanden und so könnte es auch bedingt funktionieren. Allerdings nur so lange, wie der I-Anteil<100 ist. Ansonsten bleibt der Regler in der Kältestarre. Und das wird das Problem sein. Wenn man nicht die Regelabweichung manipuliert, was ohnehin weder schön noch nachvollziehbar ist, sondern den I-Anteil ganz einfach begrenzt, ist das Problem gelöst.

Und nein Heinileini, ich werde nicht erklären, warum der I-Anteil sinnloserweise auf 100% ansteigen kann und die ganze schöne Regelung zunichte macht :ROFLMAO: .
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Nur mal so als Zwischenfrage, die Nomenklatur ist doch etwas anders oder?
Der I-Anteil an sich ist ja nur eine Zeit (Nachstellzeit Tn) oder ein Faktor (Ki) je nachdem wie die Einheiten halt gebraucht werden.
Die Anti Windup Funktion begrenzt die Summe die vom Integrator aufsummiert wird.

Wenn man sich die Implementierung (Pseudocode) eines solchen PI-Reglers ansieht wird das schnell klar (leicht verändert aus Wikipedia):

Code:
previous_error = 0
integral = 0
loop:
  error = setpoint - measured_value
  integral = integral + error * dt
  output = Kp * error + Ki * integral
  previous_error = error
  wait(dt)
  goto loop

Hier ist Ki der I-Anteil und integral die Summe die durch den Anti Wind Up begrenzt werden sollte...
Oder?
Schöne Grüße
S.
 
Code:
previous_error = 0
integral = 0
loop:
  error = setpoint - measured_value  [B]// error: RegelAbweichung; setpoint: SollWert; measured_value: IstWert[/B]
  integral = integral + error * dt
  output = Kp * error + Ki * integral [B]// Kp * error ==> P-Anteil; Ki * integral ==> I-Anteil[/B]
  previous_error = error
  wait(dt)
  goto loop
Hier ist Ki der I-Anteil und integral die Summe die durch den Anti Wind Up begrenzt werden sollte...
Ki ==> ProportionalitätsFaktor ("Verstärkung") für den I-Anteil.
Von einer Begrenzung ist in dem obigen Code nichts zu sehen.
 
Nö eh nicht, hier ist auch kein Anti-Windup dabei
Wollte das nur beschreiben, denn hier sieht man gut den Unterschied zwischen I-Anteil und Integralsumme
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Nö eh nicht, hier ist auch kein Anti-Windup dabei
Wollte das nur beschreiben, denn hier sieht man gut den Unterschied zwischen I-Anteil und Integralsumme

Das Codebeispiel aus Wikipedia ist nicht schlecht. Ich stör mich nur jedesmal an der Übersetzung error für Regeldifferenz.
 
Zurück
Oben