PID-Regeler selbst programmieren

S

Stefan77

Guest
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo

Ich soll für eine S7-300 einen PID-Regler selber programmieren, also nicht den vorhandenen Siemens Baustein verwenden.
Den P-Anteil habe ich hinbekommen, habe meine Probleme beim I- und D-Anteil. Da ich Anfänger in der SPS-Programmierung bin.



Für den I-und D-Anteil benötige ich mehre Messwerte aus dem Eingang die ich in einem Datenbaustein abspeichern müsste, gleichzeitig benötige ich aber auch immer noch einen aktuellen Wert.


Nachfolgend noch das bereits vorhandene Programm

[L PEW 288 -- Eingabe istwert
ITD
DTR
T DB 35 DBD20 -- Istwert

// Sollwert ermitteln
L 3.000000e+000 // Sollwert
L 4,608000e+000 // Umrechnungsfaktor
*R
T DB 35 DBR6 -- Sollwert

// Soll-Ist
L DB 35 DBR6
L DB35 DBD20
-R
T DB 35 DBD2 -- Regeldifferenz


// Differenz*Verstärkung
L DB 35 DBD2 -- Regeldifferenz
L -- Verstärkung
*R
RND
T PAW 290 -- Stellgrösse]


Ich hoffe Ihr könnt mir helfen

Gruß Stefan
 
Für den I-Zweig addierst du die Regeldifferenz zu einer Summe. Diese mußt du im DB hinterlegen oder als IN/OUT-Variable von Aufruf zu Aufruf "weiterreichen".
Die Summe multiplizierst Du mit deinem Faktor KI und addierst das Ergebnis zur Stellgröße.
Beim D-Zweig gibt es zwei Möglichkeiten:
Du speicherst den Wert des Istwertes oder den der Regeldifferenz bei jedem Aufruf, um im nächsten Aufruf die Änderung IstwertNeu-IstwertAlt. bzw. RegeldifferenzNeu-RegeldifferenzAlt bilden zu können.
Die Änderung multiplizierst Du mit deinem Faktor KD und addierst das Ergebnis zur Stellgröße.
Der Unterschied bei Verwendung von Istwert oder Regeldifferenz liegt darin, wie dein Regler auf Sollwertänderungen reagiert: Nimmst du die Regeldifferenz, so macht die Stellgröße bei einer Sollwertändrung einen heftigen "Ausschlag". Dies ist manchmal unerwünscht.
Noch 3 Dinge:
1) Beim 1. Aufruf des Reglers hast du ja noch keine "alte" Regeldifferenz oder Istwert gespeichert. Um einen heftigen "Ausschlag" zu vermeiden, kannst du die D-Berechnung beim 1.Aufruf überspringen.
2) Wenn durch bestimmte Umstände die Stellgröße keinen Einfluß hat (z.B. Maschine aus), summiert sich die Summe im I-Zweig immer weiter auf "wind up". Das führt zu merkwürdigem Anlaufverhalten. Es ist üblich, dem Regler ein Freigabe-Bit mitzugeben. Ist es 0, so wird die I-Summe auf 0 gesetzt. Überspringst du die D-Berechnung im 1.Aufruf, so kannst du mit der Freigabe auch den Merker für 1.Aufruf wieder setzen, um das bei jedem 1.Aufruf nach Freigbe zu tun.
3.) Bei analogen Reglern ist meist garantiert, daß das Speicherglied im I-Zweig nur einen gewissen Wert annehmen kann, z.B. ein Kondensator nur bis zur Versorgungnsspannung geladen werden kann. Die Gleitkommazahl der Summe kann aber auch beim laufenden Regler über alle Grenzen wachsen, wenn der Sollwert trotz maximaler oder minimaler Stellgröße nicht erreicht wird, z.B. eine Heizleistung einfach nicht reicht. Würde im Fall der Heizung dann ein Fenster geschlossen und die Leistung reicht wieder, so würde bis zum Abbau der riesigen I-Summe mit "voller Pulle" geheizt. Daher ist es sinnvol die I-Summe so zu begrenzen, daß das Produkt I-Summe*KI nicht größer als ca. 0.5 bis 10*maximalWert der Stellgröße werden kann. Entsprechendes gilt für das Minimum.
 
Hallo,
in der Praxis verwendet man häufig den fertigen Baustein, getestet, daher wird wahrscheinlich ein Fehler nur an der Beschaltung liegen. Für Sonderaufgaben kann es schon mal sein, dass man selbst war entwickelt. Daher tippe ich mal auf eine Aufgabe vom Pauker oder Prof. 8)

:idea: Ganz wichtig, ist, dass Du ein festes Zeitraster hast, in dem der Baustein aufgerufen wird.

:idea: Nachdem Dein Baustein läuft, würde ich ihn als FB umschreiben und ihn somit parametrierbar machen. Dann hast DU einen "universellen BAustein"
 
Hallo Heinz,

ich würde gerne den fertigen Baustein einsetzen, da es aber eine Aufgabe für die Schule ist komme ich da nicht dran vorbei den selbst zu programmieren.

Gruß Stefan
 
Stefan77 schrieb:
Der PID-Regler soll für eine Druckregelung eingesetzt werden.
Reglerbausteinaufruf alle 100 ms.

Ich habe so einen Baustein mal geschrieben, dass war so zu ner Zeit, da gab es den Siemens noch nicht, oder ich habe es einfach noch nicht gemerkt, das es ihn gibt.

Vorteil: Sehr schnell, da nur das nötigste berechnet wurde

Nachteil: Es können Probleme auftreten, an die man nicht gedacht hat und die sehr schwer zu finden sind, da leider die Strecken nicht so mitspielen, wie man es gerne hätte , um Fehler zu lokalisieren.

Dieser Baustein läuft bis heute noch in den Anlagen und wird auch noch bei den neuen mit eingebaut, aber, noch mal würde ich das nicht machen, sondern einen der fertigen nehmen. Die sind dokumentiert, vor kurzem habe ich diese kaskadiert, als Bsp.

pt
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo plc_tippser


Ich komme bei der Berechnung des I -Anteils nicht weiter.
Bekomme die Regeldifferenz für den Datenbaustein nicht aufsummiert und die weitere Berechnung ist mir nicht so vertraut, da es dort mehrere Möglichkeiten gibt Trapezregel, Rechteckregel usw.
wie funktioniert das in Deinem Programm.

Gruß Stefan
 
Hallo,
bei berthel-online.de hab ich so etwas schon für s5 gesehen s7? aber s5 sollte leicht auf s7 portiert werden können.

Thomas
 
Zurück
Oben