# PID-Regler mit Rückführung



## Schipani (1 März 2017)

Hallo zusammen,

existiert in irgendeiner Wago- oder Oscat-Bibliothek ein Funktionsbaustein "PID-Regler mit Rückführung"?

Hintergrund:

in älteren HKL-Anlagen mit Hardware-Reglern (PMA-Phillips) wird die Stellung des Stellventils (0-10V = 0-100 % Öffnung)
im Regler als Eingang verarbeitet. fast alle Stellantriebe haben einen solchen Ausgang.
damit werden Reglerschwingungen deutlich reduziert.

beim Umbau dieser Anlagen auf SPS mit dem Standard-PID-Regler ist der Zeitaufwand für das Einregulieren relativ hoch.

in der HVAC_02 glaube ich, einmal einen solchen Regler (PID_AUF) gesehen zu haben,

finde aber den Downloadpfad nicht mehr.

mfg
Thomas


----------



## weißnix_ (1 März 2017)

Ähm, Du benötigst zwei Regler: Der eine berechnet aus der Raumtemperaturdifferenz (PI(D)) die Ventilsollstellung (Sollwert für den zweiten!) und der zweite regelt die Stellung des Ventils (PI).
Damit kannst Du aus den Standardbausteinen was bauen.
Damit wird die Raumisttemp. auf den ersten Regler zurückgeführt und die Ventiliststellung auf den zweiten...


----------



## Tiktal (1 März 2017)

Hallo Thomas,

dann nimm doch die WAGO Building_HVAC_03_d Lib. Gibts auf der WAGO Seite.
Die haben unterschiedlichste PID Regler drin.

GRuß

Onno


----------



## Schipani (1 März 2017)

[


ich habe die Bibliotheken HVAC_01 und 03 bereits durchforstet, die _02 kann ich im Netz nicht mehr finden. hat jemand noch einen Link?


den Versuch mit der Kaskade werde ich durchführen.


----------



## Tiktal (2 März 2017)

Vielleicht verstehe ich Dich ja falsch.
Aber in der HVAC_01 gibt es einen BAustein, heißt: Fb_COntrol_PID-Adv. Der macht doch was Du brauchst, oder?
Habe leider auch nur die 01 und die 03. 

Gruß

Onno


----------



## Dennis2004 (12 Mai 2017)

Hello. Try this workaround:

```
PROGRAM PLC_PRG
VAR

    PIDControllerInstance:FbPIDController;
    ConfigPIDControllerInstance: typConfigPIDController := (
        xDummy:=FALSE,
        xChangeInDirection:=FALSE,
        xPresetOn:=FALSE,
        xPresetOff:=FALSE,
        rPresetValueOn:=100,
        rPresetValueOff:=0,
        tCycleTime:=T#100ms,
        rOutputMin:=0,
        rOutputMax:=100,
        rDeadZone:=0.2,
        rKp:=10,
        rTn:=60,
        rTd:=0.001);

    RampInstance:FbRamp;
    ConfigRampInstance: typConfigRamp := (
        rStepRangeUp:=100,
        rStepRangeDown:=100,
        tTimeBase:=T#150s);

    SETPOINT: REAL :=25;
    ACTUAL: REAL :=25;

    preal: POINTER TO REAL;
END_VAR
```


```
PIDControllerInstance(
    xEnable:= TRUE,
    rReferenceValue:= SETPOINT,
    rActualValue:= ACTUAL,
    xManualOperation:= , 
    rManualValue:= , 
    typConfigPIDController:= ConfigPIDControllerInstance,
    rY=> , 
    wY=> ,
    rDifference=> , 
    xMaxLimitReached=> , 
    xMinLimitReached=> ); (*usual PID-controller*)

RampInstance(
    xEnable:= TRUE,
    rInput:= PIDControllerInstance.rY,
    typConfigRamp:= ConfigRampInstance,
    rOutput=> ,
    xActive=> ); (*Valve speed limit*)

IF     RampInstance.xActive(*modify PID output only when needed*)
    AND RampInstance.CycleTime<>t#0ms (*This is essential! - without this line speed will be limited to 0*)
THEN
    preal:=ADR(PIDControllerInstance.rY); (*grab PID's accumulated value*)
    preal^:=RampInstance.rOutput; (*substitute it with speed-limited one*)
END_IF
```


----------



## Benjamin-K (15 Mai 2017)

http://www.wago.de/appnoteadmin/libraries23/Libraries_BA/public/zz_Previous_Version.zip


----------

