TIA PID Regler unbedingt mit Interrupt?

Credofire

Level-1
Beiträge
640
Reaktionspunkte
35
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo,

ich habe einen Wert den ich etwas regeln möchte. Ich habe nun in den ganzen Tutorials gesehen, das der regler immer in einen Interupt gepackt wurde. Da mein Regler aber nur sehr selten einen Wert bekommt, bezogen auf die Zykluszeit, bin ich nicht sicher ob das mit dem Interupt dann nötig ist. Ich brauche ja keine Auswertung in jedem Zyklus.
Ich habe einen Hydraulikzylinder und gebe die Schrittweite über den errechneten Durchfluss mit der Pumpendrehzahl vor. Das funktioniert bislang so leidlich und die Länge stimmt einigermaßen. Da ich aber weder einen Durchflusssensor noch ein richtiges Wegmesssystem habe, bleibt mir nur der Rückgriff über Hub und gezählte Schritte offen um die Schrittlänge zu regeln. Die Abweichung beträgt so ca. 10% nach unten. Das heist dann Leitungsverluste und Wirkungsgrad der Pumpe usw. nehme ich an.
Nund die Fragen:
1. macht das wirklich Sinn den regler in einen Interupt zu packen
2. hättet ihr einen anderen Ansatz den ich verfolgen könnte?

Ich weis, das es nicht wirklich genau werden kann, aber ich brauche wenigstens irgendwie wenigstens ansatzweise eine Möglichkeit der Regelung.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Für einen PID / PI / PD ist es notwendig, entweder die genaue Zeit zwischen den Regleraufrufen zu ermitteln oder den Regler zeitlich äqidistant aufzurufen.
Aber ein Regler ist nur ein Regler mit einer Rückführung der Regelgröße. Ohne ein solches ist es nur ein Steuern.
 
Ich habe es bei sehr langsamen Regelstrecken schonmal so gemacht, dass ich den Regler mit einer z.B. 5 Sekunden Taktflanke getriggert im OB1 Zyklus aufgerufen habe.
Beim Kunden hat sich dann jemand beschwert, dass man das doch so nicht machen würde, das gehört in den OB35. Ich habe ihm dann gesagt, wenn er mir belegen kann, dass meine Vorgehensweise einen signifikanten Einfluss auf die Regelgüte hat, dann programmiere ich ihm alle Regler um. Dann war Ruhe.
 
Ich bekomme ja den Trigger quasi von der vorderen Endlage. Wenn diese erreicht ist, errechnet das Programm den Vorschub, und diesen Wert will ich als Rückführung für den Regler nehmen.
Bei den großen Maschinen die wir bauen ist es schöner, da haben wir ein Wegmessystem verbaut.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Wenn du eine konstante Zykluszeit und langsame Regelstrecken (z.B. Temperatur) hast, dann kannst den Regler auch in den OB1.
Wie oft dein Regler einen Wert bekommt, ist eigentlich nicht das Thema, Wenn du aber z.B. Positionieren willst und vernünftige Rampen brauchst, dann ist der Aufruf über einen Alarm-OB deutlich besser.

Gruß
Dieter
 
PID-Regler unbedingt mit Interrupt ? Eindeutig Ja !
Einen PID-Regler sollte man immer in einem Zeit-OB aufrufen und diese Zeit auch am Parameter CYCLE angeben, sonst rechnet der Regelalgorithmus schlicht und einfach falsch (zumindest der I- und D-Anteil, da hier die Abtastzeit einfließt).
Natürlich funktioniert ein langsamer Regler auch mit einer Taktflanke im OB1. Aber warum tut man sowas ? Richtig machen kostet doch nix. Man sollte auch nicht glauben, daß eine langsame Regelstrecke durch eine große Abtastzeit besser zu regeln wäre - siehe Abtasttheorem.


Ein Kollege hat mal einen "langsamen" Niveauregler im OB1 platziert und auch noch 3 Sek. am Parameter CYCLE eingetragen. Der Regler hat dann komplett falsche Werte ausgespuckt, weil der Baustein nach wenigen Millisekunden wieder aufgerufen wurde, der Regelalgorithmus aber so gerechnet hat als wären schon 3 Sek. vergangen (d.h. bei einer Zykluszeit von 10ms wurde die Zeit mit dem Faktor 300 falsch gerechnet). Weil die Zykluszeit auch nicht konstant war (z.B. durch Kommunikationsaufträge) hat die Regelung dann komplett gesponnen.


Gruß
Reiner
 
Zuviel Werbung?
-> Hier kostenlos registrieren
PID-Regler unbedingt mit Interrupt ? Eindeutig Ja !
Einen PID-Regler sollte man immer in einem Zeit-OB aufrufen und diese Zeit auch am Parameter CYCLE angeben, sonst rechnet der Regelalgorithmus schlicht und einfach falsch (zumindest der I- und D-Anteil, da hier die Abtastzeit einfließt).
Ein Kollege hat mal einen "langsamen" Niveauregler im OB1 platziert und auch noch 3 Sek. am Parameter CYCLE eingetragen. Der Regler hat dann komplett falsche Werte ausgespuckt, weil der Baustein nach wenigen Millisekunden wieder aufgerufen wurde,
Was hat denn eine komplett fehlerhafte Anwendung des Bausteins damit zu tun ob der Aufruf außerhalb innerhalb eines Interrupts passieren muss oder nicht?

Der Regler muss lediglich in möglichst konstanten und vor allem dem Regler bekannten Zeitintervallen aufgerufen werden.
Das wir natürlich von einem Interrupt gefördert. Ein muss ist dieser deshalb aber noch lange nicht.
Natürlich funktioniert ein langsamer Regler auch mit einer Taktflanke im OB1. Aber warum tut man sowas ? Richtig machen kostet doch nix.
Hängt oft vom Mengengerüst und der Regelstecke ab.
Wenn man große Anzahlen (50+) von Reglern hat möchte man die oft nicht einzeln im OB35 programmieren und beschalten.
Wir haben öfters ganze Regelkreise (mit mehreren Reglern - für z.B. Klimakammern) fertig in einer Multiinstanz verpackt, die dann nur mehr aufgerufen und parametriert werden.

Des weiteren gibt es hier im Forum (von mir auch) oft den Wunsch, den Regler programm-strukturell an der entsprechenden Stelle (Anlage/Subablage/Zelle/etc.) im Code zu platzieren, zu der er auch gehört und diesen nicht in einen anderen Baustein auslagern zu müssen.
Gründe für die Fragen gibt es also.

Diese "einfachen" Regler können dann sehr wohl ohne Interrupt, aber eben per Timer und mit tatsächlich gemessener Aufrufzeit am CYCLE aufgerufen werden. Im Endeffekt kommt man, mit einem Regler und Intervall von T#1s, welcher dann aber eben wegen der Zykluszeit einmal mit T#1s5ms und einmal mit T#1s35ms aufgerufen wird, dafür aber die korrekte Zeit am CYLCE bekommt und somit seine I/D-Parameter durchaus korrekt berechnen kann, auch auf eine ausreichende Regelgüte. Im Endeffekt ist bei so einer Regelung oft von außen kein Unterschied zu einem T#1s-Interrupt-Aufruf zu erkennen.

Wenn man ehrlich ist, hat der Regler im OB35 oft auch keine konstante Aufrufzeit mehr.
Hab's zwar nie gemessen aber CONT_C wird bei Reset wahrscheinlich eine kürzere Code-Laufzeit als während des Beitriebs haben.
Wenn man dann wieder 50+ Regler im OB35 rechnet, einmal sind 30 auf Reset und einmal laufen alle, inklusive eigenem Code dazwischen der oft noch viel weniger konstant ist, kann es sein dass dies für den der letzten Regler schon ein paar Millisekunden Schwankung bedeutet.

Was für den CONT_C zählt ist ausschließlich das er ausreichend oft, ausreichend konstant aber eben mit bekannter Zeit zwischen den Aufrufen, aufgerufen wird. Wie man das erreicht ist jedem seine Sache.

PS: Heißt nicht das ich selbst Regler niemals in Interrupts aufrufe, aber eben nicht immer... ;)
 
Zuletzt bearbeitet:
Zurück
Oben