FB_BACnet_PidControl
PID Regelbaustein in Parallelanordnung (Kp wirkt nicht auf I- und D-Anteil). Der Regelbaustein dient als Basis für das Objekt "LOOP" (FB_BACnet_Loop).
Blockdiagramm
Verwendung
Der Regelbaustein muss zyklisch im SPS Programm aufgerufen werden. Dabei ist zu beachten, dass die Zykluszeit des Aufruf am Eingang fCtrlCycleTime möglichst genau übergeben wird. Die Zykluszeit kann z.B. aus der globalen Struktur "SystemTaskInfoArr" ermittelt werden. Unter Beispiel ist eine mögliche Beschaltung des Regler dargestellt.
VAR_INPUT
fSetpoint : REAL; (* setpoint value *)
fPresentValue : REAL; (* actual value *)
bReset : BOOL; (* reset flag *)
fCtrlCycleTime : REAL; (* controller cycle time in seconds [s] *)
fBias : REAL; (* bias also active when reset is set to 1 *)
fKp : REAL; (* proportional gain Kp (P) *)
fKi : REAL; (* integral gain Ki (I) *)
fKd : REAL; (* derivative gain Kd (D) *)
fMaxOutput : REAL;
fMinOutput : REAL;
fSetpoint: Sollwerteingabe (z.B. Temperaturvorgabe eines Raumes in [°C])
fPresentValue: Istwert (z.B. Raumisttemperatur in [°C])
bReset: Setzt den Regler zurück, die Ausgabe wird für die Dauer auf fBias gesetzt und durch fMaxOutput und fMinOutput begrenzt.
Wenn fMinOutput z.B. auf 5% gesetzt ist und fBias auf 0%, dann ist die Ausgabe fY für die Dauer des Reset auf 5% gestellt! |
fCtrlCycleTime: Zykluszeit mit der der Regler aufgerufen wird in Sekunden [s].
fBias: Ausgabe-Offset. Dieser Wert wird mit der Ausgabe verrechnet und die Einheit muss der Einheit der Stellgröße entsprechen (z.B. Heizleistung in [%]).
fKp: Verstärkungsfaktor P. Die Regeldifferenz wird mit P multipliziert und auf die Ausgabe addiert (Ausgabe verhält sich proportional zur Eingabeabweichung).
fKi: Integralverstärkung I. Die Regeldifferenz wird unter Berücksichtigung der Zykluszeit mit I multipliziert, mit dem vorherigen Ergebnis summiert und auf die Ausgabe addiert (Hohe Regelabweichung = schnell steigende Ausgabe).
fKd: Differenzialverstärkung D. Die Regeldifferenz wird mit der vorherigen Reglerdifferenz verrechnen, das Ergebnis unter Berücksichtigung der Zykluszeit mit D multipliziert und auf die Ausgabe addiert (Starkes Reglerschwanken = starke Reaktion).
fMaxOutput: Obere Begrenzung des Ausgabewerts fY. Die Einheit muss der Einheit der Stellgröße entsprechen (z.B. Heizleistung maximal 90%).
fMinOutput: Untere Begrenzung des Ausgabewerts fY. Die Einheit muss der Einheit der Stellgröße entsprechen (z.B. Heizleistung minimal 5%).
VAR_OUTPUT
fY : REAL; (* controller output command *)
nErrorStatus : UINT; (* controller error output (0: no error; >0:error) *)
fY: Stellgröße (z.B. Heizleistung in [%]).
nErrorStatus: Fehlerstatus (0 = kein Fehler, 1 = ungültige Parameter, 2 = ungültige Zykluszeit). Fehlermeldungen müssen nicht quittiert werden.
Beispiel
Anmerkung zu P = 10 --> Bei z.B. 1 K Temperaturdifferenz ergibt sich 10% Heizleistung
Anmerkung zu I = 0.01 --> Bei z.B. 1 K Temperaturdifferenz ergibt sich 0.01% Heizleistungsanstieg pro Sekunde
Anmerkung zu D = 0 --> Kein D-Anteil.