Drehzahlregelung mit einem PID-Regler

in dieses Forum kommt alles, was mit speicherprogrammierbaren Steuerungen zu tun hat
Antworten
kelmi
Null-Leiter
Beiträge: 3
Registriert: Mittwoch 7. Oktober 2020, 13:36

Drehzahlregelung mit einem PID-Regler

Beitrag von kelmi »

Hallo zusammen,

für die folgende Aufgabenstellung habe ich Verzweifel, ob meine Lösung im Anhang korrekt ist oder doch korrigiert werden soll.

Hier die Aufgabenstellung:

Die Drehzahl eines Gleichstrommotors mit Fremderregung soll mit einem P-Regler geregelt werden.
Die Drehzahl n hängt von der Erregerspannung Ue und dem Lastmoment ML nach folgender Beziehung ab.

n / % = 5000 / (Ue / V) - 1082 * (ML / Nm) / (Ue / V) 2.

In dieser Gleichung wurden die physikalischen Variablen durch deren jeweilige physikalische Einheit dividiert, wodurch alle Summanden dimensionslos wurden.

Die Dynamik der Rotationsmasse aus Anker und angeschlossener Last kann durch ein PT1-Verhalten mit T1 = 5 s beschrieben werden. Eine zweite Verzögerung 1. Ordnung muss man wegen der elektrischen Eigenschaft aus Induktivität der Ankerwicklung und ihres ohmschen Widerstandes ansetzen. Diese Zeitkonstante wird hier mit T2 = 1 s angenommen.

In dem Funktionsbaustein "Motor" muss nun diese Dynamik realisiert werden. Dazu müssen neben den beiden Zeitkonstanten die Zykluszeit "Zyklus" (in s) und das boolesche Signal "Run" zum ein- und ausschalten der Dynamik vorgegeben werden. Zeigen Sie hier den Deklarationsteil und den Rumpf des in SCL programmierten FB
"Motor"

FUNCTION_BLOCK Motor
VAR_INPUT
Ue: REAL; (* Erregerspannung in V *)
ML: REAL; (* Lastmoment in Nm *)
Run: BOOL;
Zyklus: REAL;
END_VAR
VAR_OUTPUT
n: REAL; (* Drehzahl in % *)
END_VAR
VAR
nst: REAL;
DB_Mein_PT1_1: Mein_PT1;
DB_Mein_PT1_2: Mein_PT1;

END_VAR

==================================================================

IF Ue > 0.0 THEN
nst := 5000 / Ue - 1082 * ML / (Ue * Ue);
DB_Mein_PT1_1(Run:=Run, Xe:=nst, T1:=5, Zyklus:=Zyklus);
DB_Mein_PT1_2(Run:=Run, Xe:=DB_Mein_PT1_1.Xa, T1:=1, Zyklus:=Zyklus);
n := DB_Mein_PT1_2.Xa;
END_IF;
IF n > 100.0 THEN n := 100.0;
ELSIF n < 0.0 THEN n := 0.0;
END_IF;

Wäre das so korrekt ?

Vielen Dank für die Unterstützung
Benutzeravatar
Elt-Onkel
Null-Leiter
Beiträge: 7727
Registriert: Donnerstag 25. März 2004, 01:08
Kontaktdaten:

Re: Drehzahlregelung mit einem PID-Regler

Beitrag von Elt-Onkel »

Moin Kelmi,

dürfen wir Dich etwas näher kennenlernen ?

In welchem Kontext steht die Aufgabe ?

Berufsschule ?
Studium ?
- E-Technik ?
- Maschinenbau ?


...
kelmi
Null-Leiter
Beiträge: 3
Registriert: Mittwoch 7. Oktober 2020, 13:36

Re: Drehzahlregelung mit einem PID-Regler

Beitrag von kelmi »

Hallo Elt-Onkel,

ich mache momentan einen Lehrgang in der SPS-Technik in 9 Lehrbriefe. Aktuell bin ich beim 7. Lehrbrief und habe in diesem einige Schwierigkeiten bekommen. Aus diesem Grund habe die Aufgabenstellung in diesem Forum gepostet in der Hoffnung, Unterstützung von Euch zu bekommen.
kelmi
Null-Leiter
Beiträge: 3
Registriert: Mittwoch 7. Oktober 2020, 13:36

Re: Drehzahlregelung mit einem PID-Regler

Beitrag von kelmi »

Hat jemand eine Idee ?
Benutzeravatar
Wulff
Null-Leiter
Beiträge: 979
Registriert: Freitag 2. Mai 2014, 17:34

Re: Drehzahlregelung mit einem PID-Regler

Beitrag von Wulff »

VIelleicht bist du in einem "echten" SPS-Forum besser aufgehoben. Hier spielt sich in dem Unterforum fast nichts ab....
Benutzeravatar
Tobi P.
Beiträge: 1906
Registriert: Sonntag 18. November 2007, 13:46
Wohnort: 41516 Grevenbroich

Re: Drehzahlregelung mit einem PID-Regler

Beitrag von Tobi P. »

Moin,

ich würde dir ebenfalls raten es mal hier zu versuchen:

http://www.sps-forum.de

Die Kollegen dort machen den ganzen Tag lang nichts anderes als SPSen zu programmieren. Hier musst du den meisten eher erst mal erklären was SCL (in das ich mich, TIA sei dank, auch gerade erst reinfuchse) ist :)


Gruß Tobi
Antworten