FB_BA_PIDControl

Der Funktionsbaustein FB_BA_PIDControl ist ein Universal-PID-Regler.
Der Regler ist intern in zwei aufeinander folgende Teile gegliedert:
- der Regler selbst, wie in den unten aufgeführten Wirkungsplänen als P-, I- und D-Anteil dargestellt mit einer Ausgangsbegrenzung (Limitation).
- einem Totbandglied (neutrale Zone), welches die Ausgangsänderungen des Reglers mit einer Hysterese beaufschlagt.
Betriebsmodus "P-Anteil vorgelagert":
(eOpMode = E_BA_PIDMode.eP1ID)

Betriebsmodus "Parallelstruktur":
(eOpMode = E_BA_PIDMode.ePID )

Wirksinn
Mit eAction = E_BA_Action.eReverse wird der Wirksinn des Reglers so umgekehrt, dass eine Regelabweichung kleiner als 0 eine Stellgrößenänderung ins Positive bewirkt. Dies wird dadurch erreicht, dass die Regelabweichung negativ berechnet wird:
eAction | fE (Regelabweichung) | Wirksinn |
---|---|---|
E_BA_Action.eDirect | fCtrlVal-fSetpoint (Istwert-Sollwert) | direkt (Kühlen) |
E_BA_Action.eReverse | fSetpoint-fCtrlVal (Sollwert-Istwert) | indirekt (Heizen) |
Passiv-Verhalten (bEn = FALSE)
Die Ausgänge werden wie folgt gesetzt:
fPresentValue | 0.0 |
Die internen Werte für den P-, I-, und D-Anteil werden auf 0 gesetzt, ebenso die Werte für den I- und D-Anteil vom vorhergehenden Zyklus. Damit wird die Stellgröße bei einem Neustart im ersten Zyklus ohne Vergangenheitswerte berechnet.
Aktiv-Verhalten (bEn = TRUE)
Im ersten Zyklus werden I- und D-Anteil wie bereits erwähnt ohne Vergangenheitswerte berechnet und frei von alten Werten aufgestartet.
Anti-Reset-Windup
Ist der I-Anteil aktiv, so sorgt der Regler dafür, dass dieser festgehalten wird, sollte der Regler Ausgang rY über die Grenzen fMinOutput oder fMaxOutput hinausgehen wollen. Innerhalb des Reglers wird in jedem Zyklus eine Vorberechnung des Regler Ausgangs gemacht.
Anti-Reset-Windup an Min Grenze
Ist die Vorberechnung kleiner als die untere Ausgangsgrenze fMinOutput, so wird der I-Anteil daran gehindert weiter zu fallen und auf den Wert des letzten PLC-Zyklus begrenzt. Ein Ansteigen des I-Anteils bleibt jedoch möglich.
Anti-Reset-Windup an Max Grenze
Ist die Vorberechnung hingegen größer als die obere Grenze fMaxOutput, so wird der I-Anteil daran gehindert weiter zu steigen und ebenfalls auf den Wert des letzten PLC-Zyklus begrenzt. In diesem Fall bleibt ein Abfallen des I-Anteiles weiter möglich.
Synchronisationen
Es gibt verschiedene Fälle in denen Regler Ausgang nicht nur begrenzt, sondern durch Manipulation des I-Anteils (wenn nicht aktiv, dann des D-Anteils bzw. des P-Anteils) auf einen neuen Wert synchronisiert werden muss. Diese Fälle sind wegen der möglichen Gleichzeitigkeit priorisiert:
Prio | Beschreibung | Bedingungen | Bemerkungen |
---|---|---|---|
1 | Synchronisation über bEnSync/fValSync | Regler freigegeben – bEn = TRUE | Ein positives Signal an bEnSync setzt den I-Anteil so, dass die Stellgröße den Wert fValSync annimmt. Diese Methode kann, wenn bEn und bEnSync gleichzeitig gesetzt werden, zum Setzen eines Initialwertes genutzt werden, von dem aus die Regelung "losläuft". Ist der I-Anteil nicht aktiv, so wird der D-Anteil entsprechend gesetzt. Zu beachten ist, dass intern nur die steigende Flanke von bEnSync ausgewertet wird, da es sich um eine Setz-Aktion handelt. Für ein erneutes Synchronisieren, etwa auf einen Übergabewert, muss am Eingang bEnSync ein erneutes TRUE-Signal angelegt werden. |
2 | Bereichssynchronisation fMinOutput | Regler freigegeben – bEn = TRUE fMinOutput <> fMinOutput_1 (letzterZyklus) fY_Test < fMinOutput | Hat sich die untere Bereichsgrenze geändert und die vorberechnete Regler Ausgabe ist nun kleiner als fMinOutput so wird auf fMinOutput synchronisiert. |
3 | Bereichssynchronisation fMaxOutput | Regler freigegeben – bEn = TRUE fMaxOutput <> fMaxOutput_1 (letzterZyklus) fY_Test > fMaxOutput | Hat sich die obere Bereichsgrenze geändert und die vorberechnete Regler Ausgabe ist nun größer als fMaxOutput, so wird auf fMaxOutput synchronisiert |
4 | Synchronisation bei Wirksinnumkehr | Regler freigegeben – bEn = TRUE eAction <> eAction_1 (letzter Zyklus) | Es wird so synchronisiert, dass der Ausgang den Wert VOR der Umkehr innehat: |
5 | Anti-Reset-Windup | Regler freigegeben – bEn = TRUE | Siehe Anti-Reset-Windup |
Neutrale Zone
Ein Wert von fNeutralZone > 0.0 gibt die Funktion der neutralen Zone (Deadband) frei. Ein Wert gleich Null deaktiviert das Totbandglied und die Werte am Eingang werden direkt durchgereicht.
Ist beim aktiven Regler die Änderung am Eingang des Gliedes in einem SPS-Zyklus im Vergleich zum vorhergehenden SPS-Zyklus kleiner als fNeutralZone / 2, so wird der Ausgang auf dem Wert des vorhergehenden Zyklus gehalten, bis die Änderung größer oder gleich fNeutralZone / 2 ist.
Durch diese Funktion sollen unnötig viele Stellimpulse vermieden werden.
Syntax
VAR_INPUT
bEn : BOOL;
fSetpoint : REAL;
fCtrlVal : REAL;
bEnSync : BOOL;
fValSync : REAL;
END_VAR
VAR_INPUT CONSTANT PERSISTENT
{attribute 'parameterCategory':='Config'}
eOpMode : E_BA_PIDMode := E_BA_PIDMode.ePID;
{attribute 'parameterCategory':='Deadband'}
fNeutralZone : REAL := 0.0;
{attribute 'parameterCategory':='Config'}
eAction : E_BA_Action := E_BA_Action.eReverse;
{attribute 'parameterCategory':='Config'}
fMinOutput : REAL := 0;
{attribute 'parameterCategory':='Config'}
fMaxOutput : REAL := 100;
{attribute 'parameterCategory':='Config'}
fProportionalConstant : REAL := 3;
{attribute 'parameterCategory':='Config'}
{attribute 'parameterUnit':= 's,ms'}
fIntegralConstant : REAL;
{attribute 'parameterCategory':='Config'}
{attribute 'parameterUnit':= 's,ms'}
fDerivativeConstant : REAL;
{attribute 'parameterCategory':='Config'}
{attribute 'parameterUnit':= 's'}
nDampConstant : UDINT;
END_VAR
VAR_OUTPUT
fPresentValue : REAL;
END_VAR
Eingänge
Name | Typ | Beschreibung |
---|---|---|
bEn | BOOL | Freigabe des Reglers |
fSetpoint | REAL | Sollwert der Regelstrecke |
fCtrlVal | REAL | Istwert der Regelstrecke |
bEnSync | BOOL | Synchronisiert den Regler auf den Wert von fValSync. |
fValSync | REAL | Synchronisationswert. Der Wert fValSync wird intern begrenzt auf Werte von fMinOutput bis fMaxOutput. |
Eingänge CONSTANT PERSISTENT
Name | Typ | Beschreibung |
---|---|---|
eOpMode | Wirkungsweise des Reglers: PID-Modus oder P-ID-Modus. | |
fNeutralZone | REAL | Totband |
eAction | Wirksinn des Reglers | |
fMinOutput | TIME | Untere Ausgabebegrenzung des Reglers [%]. Der Wert fMinOutput wird nach oben hin durch fMaxOutput begrenzt. |
fMaxOutput | TIME | Obere Ausgabebegrenzung des Reglers [%]. |
fProportionalConstant | REAL | Regler Verstärkung. Wirkt nur auf den P-Anteil. Intern begrenzt auf einen Minimalwert von 0. |
fIntegralConstant | REAL | Nachstellzeit des I-Anteiles [s,ms]. Ein Nullwert an diesem Parameter schaltet den I-Anteil ab. |
fDerivativeConstant | REAL | Vorhaltezeit des D-Anteiles [s,ms]. Ein Nullwert an diesem Parameter schaltet den D-Anteil ab. |
nDampConstant | UDINT | Dämpfungszeit des D-Anteiles [s]. |
Ausgänge
Name | Typ | Beschreibung |
---|---|---|
fPresentValue | REAL | Stellgröße. Bereich durch fYMin und fYMax eingeschränkt. |
Eigenschaften
Name | Typ | Zugriff | Beschreibung |
---|---|---|---|
AntiResetWindup | BOOL | Get | Der Regler befindet sich im Status Anti-Reset-Windup. |
ControlDeviation | REAL | Get | Regelabweichung |
IsMaxLimit | BOOL | Get | Die Regler Ausgabe fPresentValue ist an der oberen Ausgabegrenze fMaxOutput. |
IsMinLimit | BOOL | Get | Die Regler Ausgabe fPresentValue ist an der untere Ausgabegrenze fMinOutput. |
Voraussetzungen
Entwicklungsumgebung | Erforderliche SPS-Bibliothek |
---|---|
TwinCAT ab v3.1.4024.56 | Tc3_BA2 ab v5.4.2.0 |