Regelung im SPS-Zyklus ohne OB35-Aufruf

Hartmut Lux

Level-1
Beiträge
68
Reaktionspunkte
77
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo Leute,

da mir die Siemens-Regler für die S7 nie so recht gefallen haben, hab ich mir einen eigenen Baustein geschrieben mit folgenden Merkmalen:

- PIDT1 verhalten, Aufruf im normalen Programmzyklus,
- kaum bemerkbare Zykluszeitbeeinflussung und keine sporadischen
Erhöhungen wie beim OB35-Aufruf durch interne Berechnung der

Aufrufzykluszeit :cool:
- Bidirektional Stoßfreie Hand-/Automatikumschaltung
- Verzögerung für D-Anteil Parametrierbar
- einfache, deutschsprachige Schnittstelle;)
- Ausgänge: *Analog,
*positiv Pulsbreitenmoduliert, Genauigkeit wie CPU-Zykluszeit
*negativ Pulsbreitenmoduliert, Genauigkeit wie CPU-Zykluszeit
Alle werden einmalig pro CPU-Zyklus aktualisiert, sind daher feinstufig:
z.B. CPU-Zyklus 20ms u. Grundtakt 1s:Genauigkeit Pulsbreitenmoduliert 2%,
bei Pulssegen im OB35 mit 100ms wären es nur 10%!
- Möglichkeit der Abschaltung von P-, I- und D-Anteil (bei I und D durch setzen auf 0)
- geringer Speicherbedarf: FB 1000Byte und pro Instanz-DB bzw. Regler

132Byte d.h. viele Regler u. kleine CPU - kein Thema:cool:
- auf selten genutzte Überwachungen für Grenzwerte wurde Verzichtet, da bei Bedarf einfach zu programmieren.

Der Aufruf sieht wie folgt aus

CALL "PID_Regler" , "DB_PID"
Sollwert :=
Istwert :=
P_Verstaerkung :=
I_Tn_s :=
D_Tv_s :=
DT1_Verzoegerung_s :=
P_Anteil_ein :=
Regler_Hand :=
Y_max :=
Y_min :=
Impulsabstand_ms :=
Impulsmindestdauer_ms :=
Y_Analog :=
Y_Impuls_Positivbereich :=
Y_Impuls_Negativbereich :=
Handstellwert :=

Was haltet Ihr davon, besteht Interesse, was haltet Ihr generell von den Siemens-Reglerbausteinen?
 
Ich denke schon, daß Interesse besteht, wenn die einzelnen Parameter noch kurz erläutert sind, werden das einige mal ausprobieren wollen.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Kurz zu den Parametern und dem Regler

Klassischer Regler, Integrator ist sehr genau durch Trapezintegration,
interne Messung der Zykluszeit dient als Abtastbasis, Aufrufdifferenz von mehr als 2s (z.B. nach Spannungsausfall) führt Automatisch zum Reglerneustart

P_Verstaerkung := Verstäkungsfaktor (gain)
I_Tn_s := Nachstellzeit (integration time)
D_Tv_s := Vorhaltzeit (derivation time)
DT1_Verzoegerung_s := PT1-Verzögerung für D-Anteil zur Rauschunterdrückung
P_Anteil_ein := wenn false dient P-Verstärkung nur zur Berechnung von Tn bzw. Tv, der Regler kann also auch als nackter Integrator arbeiten
Regler_Hand := wenn "true" ist Y=Handstellwert
Y_max := Obergrenze Stellbereich
Y_min := Untergrenze Stellbereich
Impulsabstand_ms := Grunzyklus der Pulsbreitenmodulation
Impulsmindestdauer_ms := Mindestimpulsdauer (zum schonen der Stellglieder z.B. bei Klappensteuerung auf/Zu)
Y_Analog := Stellwert, Reglerausgang
Y_Impuls_Positivbereich := Pulsbreitenmodulierter Ausgang, positiv wirkend
Y_Impuls_Negativbereich := Pulsbreitenmodulierter Ausgang negativ wirkend
Handstellwert := inout-Realwert für Hand, wird bei Regler_Hand:="false" geschrieben, bei Regler Hand:="True" gelesen und zum Ausgang durchgeschaltet (setzt zeitgleich den Intgrator auf den "stoßfreien" Startwert)
 
Zuletzt bearbeitet:
Hi

Hört sich gut an ;)


Ist dein PID als Seriell Additiv System programmiert ?

Wie Parametriesiert du z.b. NUR P-Regler ?


Programmiersprache ? AWL ? SCL ?




Karl
 
Programmiert ist der Baustein in AWL. P-, I- und D-Anteil werden seperat berechnet und Später zusammenaddiert (bessere Beobachtbarkeit und Nutzung der Trapezintegration möglich).

P-Regler: D-Antei auf 0 (ganz normal) und I-Anteil auf 0 (Null wäre auch nicht definiert, weil unendliche Steigung des Ausgangsignals bei Regelabweichung).
 
Zuletzt bearbeitet:
Zuviel Werbung?
-> Hier kostenlos registrieren
Hi

Hört sich gut an, kann man den testen ?


Ach ja, hat er auch ein AWU falls ja, Typ 5 ?


(AWU --> Anti Wind Up Verfahren )
(Typ 5 Neuberechnung des I-Anteils bei "Regler-Max-Anschlag")


Karl
 
Der I-Anteil ist intern auf y-min/y_max begrenzt. Kann in Sonderfällen editiert werden da ich den Baustein bislang nicht geschützt habe. Bin daran interessiert, daß eventuell noch existente Fehler durch Zusammenarbeit eliminiert werden (habe Ihn aber selber schon als PI-Regler ohne Probleme im Einsatz).

Ich kann ihn Dir gerne zusenden, Weitergabe aber, außer für eigene Anlagen-Programme, bitte nur mit meinem Einverständnis.

Es gibt ihn in 2 Varianten: für die S7-300 unter Nutzung der Funtion SFC1 zur Zykluszeitberechnung und für die S7-400 unter Nutzung des SFC64 (da nur bei der 400-er Steuerung mit 1ms Auflösung und ein Stellen des Datums bei dieser Funktion kein Reglerreset bewirkt).
 
Hat jemand jetzt schon Regler von Hartmut Lux im Einsatz??? Würd mich mal interesieren??? Wäre schön wenn jemand mal ein Feedback gibt.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo Bender, wenn Du möchtest sende ich ihn Dir zum testen zu. Das Programm ist von der Schnittstelle her einfach zu händeln und der Regler läuft robust. Laß mir einfach Deine Mailadresse zukommen.

Bislang ist das Interesse im Forum mäßig weil viele Forumteilnehmer die Problematik der Siemens-Regler (viel Speicherplatz, sporadische Zykluszeitspitzen durch OB-Aufruf und sehr grobe Pulsbreitenmodulation) noch nicht kennen.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
2 Anmerkungen

Anti Wind Up sollte meiner Meinung nach einsetzen, wenn der Reglerausgang ymin/ymax erreicht hat. Eine Begrenzung nur des I-Anteils ist nicht ganz korrekt.

Ist die Berechnung mittels Trapezformel noch korrekt wenn die Zykluszeiten variieren?

achso, welche Reglerstruktur hast genommen?

ich hatte auch schon mal überlegt, mir n PI-Regler selber zu schreiben, hauptsächlich um mehrere Regler in ne S7-300 reinzukriegen. Aber aus Zeitmangel vertagt :)

cu,
ducati
 

Anhänge

  • PIDstruktur.gif
    PIDstruktur.gif
    3,3 KB · Aufrufe: 65
Hallo Hartmut Lux.

Würde in auch gerne Testen. Hört sich von der Schnittstelle recht viel versprechend an. Die Siemens PID Regler haben mir teilweise viel zu viele Einstellungen, die ich bei meinen Anlagen bis jetzt noch nicht gebraucht habe.

E-Mail: wittmann_h@web.de
 
Hallo ducati,

dei Reglersrtucktur entspricht der von Dir aufgezeichneten.

Sowohl I-Anteil als auch Reglerausgang sind intern auf Y-min/Y-Max begrenzt. Falls der Integrator auf Y-Max/Min steht beginnt sich der Reglerausgang, bei Vorzeichenwechsel der Regelabweichung, mit I-Anteil (Beschleunigt durch P-Anteil) von Vollausschlag lagsam wieder abzubauen.

Berechnung der Fläche eines Trapezes: ((Rechte_Seite+Linke_Seite)/2)*Breite, die Breite wird ja gemessen.

Meine Grüde für das Schreiben diesen Bausteines sind ähnlich die Deiner Gedanken, aber auch weil mir Siemens Pulssegen viel zu grobe Sprünge Liefert, mir die Sporadischen Zykluszeitspitzen im SPS-Programm überhaupt nicht passen. Ein Regler im Zyklus arbeitet unterm Strich schneller und genauer (da die Programmzeilen öfter bearbeitet werden).
 
Zuletzt bearbeitet:
Zuviel Werbung?
-> Hier kostenlos registrieren
Hi,

Beim optimalen Anti Wind Up wird der Integrator nicht gestoppt wenn der I-Anteil ymax erreicht hat, sondern wenn der gesamte Reglerausgang ymax erreicht hat, was durch den dazuaddierten P-Anteil ja eher eintritt. Des Weiteren gibts dann noch ausgefeiltere Anti Wind Ups siehe z.B. hier:

http://www.eit.uni-kl.de/litz/lehre...labor - Versuch 6.pdf#search=""anti wind up""

ab Seite 23,

Ansonsten wäre eine weitere schöne Zusatzfunktion die Ansteuermöglichkeit von sogenannten integrierenden Stellgliedern, ähnlich "CONT_S", also z.B. für Ventilantriebe mit 2 binären Eingängen für Auffahren bzw. Zufahren. Evtl. auch in einem zusätzlichen FB der "hinter" den Regler-FB geschaltet wird. Das würde ich z.B. öfter benötigen als die Pulsweitenmodulation Pulsegen.


cu, ducati
 
Hallo ducati,


(Tread 12 --> Bilder Reglerstruckturen)

Beide Reglerstruckturen sind NICHT gleich !


Der linke Regler entspricht einem Additv-System.
Der rechte Regler einem Seriall Additiv-System (Siemens Regler FB41)


Auf dem rechten Bild sollte mann noch das "Kp-Rechteck" mit Kr=1 über das "1/Tn" darübersetzen.
(Läst sich leichter "lesen".


Karl
 
Hallo ducati,

(Tread 12 --> Bilder Reglerstruckturen)

Beide Reglerstruckturen sind NICHT gleich !

Karl


Hi,

sie sind ungleich in dem Sinne, dass sie anders programmiert werden.
Aber dadurch dass in den "Kästchen" andere Koeffizienten drin stehen, können beide Strukturen ineinander umgerechnet werden. Mit den drunter stehenden Formeln.
Wenn die Koeffizienten richtig umgerechnet eingesetzt werden, ist die Funktion der beiden Strukturen identisch.

Warum soll sich das mit nem zusätzlichen P-Glied (Kr=1) besser lesen lassen ?

cu, ducati
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo Hartmut

Ich habe mir deinen Regler angesehen.
(Nur Grob überflogen, Funktion NICHT getestet)



Im Netzwerk 1 wird enorm viel Rechenzeit vergeudet, die genaue
Anzahl der millisekunden (Systemzeit) zu berechen.
Ein möglicher überlauf wird auch berechnet/berücksichtigt.

Frage: Wozu benötigt du diese hohe "Auflösung" , bei einer Differenz grösser 2 Sekunden erzeugt du einen Regler-Reset.

Vorschlag: Auflösung nur soweithin berechnen wie nötig.



- Der Baustein hat KEINE möglichkeit zum Reseten (Grundstellung)



Da bin ich bereits bei Punkt 3

Netzwerk 7 Bei Aufrufunterschieden grösser 2 Sekunden erzeugst du einen "reset".

Mein Vorschlag, du baust einen Übergabeparameter ein, der z.b. Reset (bool) heißt. Beim Neuanlauf durch den Wiederanlauf-OB setzt du diesen auf 1 (reseten) .



Am Anti-Winds-up müsste noch gearbeitet werden.
(Momentan Begrenzung)


Dem PWM würde ich separat in einen Baustein setzen.






Ergo: Grosses Lob, die Richtung ist SEHR gut.
Einige Design-Veränderungen dann ist er einsetzbar.


Frage: Programierung in SCL ist nicht angedacht ?
Hintergrund: Verwendung durch geringe änderungen
auch für Wago-PLC . . .



Karl
 
Hallo Ducati

Vereinbarung:
Ti = Integrierzeit;
Td =Differenzierzeit = Kd = Differenzierbeiwert;
T1 =Verzögerungszeit




Linker Regler: (Seriell Aditiv)
y(t)=Kr (1 + 1/Ti t + Td/T1 e –t/T1)
y(t)=Kr (1+ t/Tn+ Tv/ T1 e –t/T1 ) mit

Wobei die:

Nachstellzeit Tn= Ti
Integrierbeiwert Ki = 1/Ti = 1/Tn
Vorhaltzeit Tv = Td = Kd





Rechter Regler: (Additiv)

y(t)=Kr + 1/Ti t + Td/T1 e –t/T1
y(t)=Kr [1+ 1/(Kr*Ti)* t + Td/Kr * 1/ T1 e –t/T1 ]
y(t)=Kr [1+ t/Tn+ Tv/ T1 e –t/T1 ] mit

Wobei die:
Nachstellzeit Tn = Kr *Ti
Integrierbeiwert Ki = 1/Ti = Kr/Tn

Vorhaltzeit Tv = Td /Kr = Kd/Kr


Karl
 
Hallo Hartmut


Wie "ducati" schon erwähnte gibt es verschiedene "Anti-Winds-Ups"



Typ 1: ohne Anti Wind Up

Typ 2: AWH (Anti Wind Halt): Erreicht das I- System die Übersteuerung, dann wird es abgeschaltet.

Typ 3: AWT (Anti Wind Tracking)
Das Ausmaß der Übersteuerung wird derart rückgekoppelt (Tracking) auf das I- System , um das I- System wieder aus der Übersteuerung zu regeln.

Typ 4: AWA (Anti Wind Adaptiv) : Das I- System wird erst unterhalb einer Schwelle sw von e eingeschaltet. Oberhalb der Schwelle wird nur ein P System verwendet.
Für e < sw I System eingeschaltet.
Für e > sw I System ausgeschaltet.

Typ 5: AWR (Anti Wind Reset):Am Ende des PI Algorithmus wird geprüft ob das PI System übersteuert. Falls dies er Fall ist, wird der Anteil des I- Systems so berechnet, daß das PI- System gerade an der Übersteuerungsgrenze ist.



Du verwendest etwa Typ 2. Je höher der "Typ" ist, dessto mehr Programieraufwand hast du.
Der Regler wird jedoch bei "Regleranschlag/Übersteuerung" stabiler, ein Einschwingen minimiert.

Im Worst-Case kann der Regler sogar eine Dauerschwingung verursachen.


Karl
 
Zurück
Oben