PID-Regler mit Rückführung

Schipani

Level-1
Beiträge
2
Reaktionspunkte
0
Zuviel Werbung?
-> Hier kostenlos registrieren
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
 
Ä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...
 
Zuletzt bearbeitet:
[


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.
 
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
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Hello. Try this workaround:
Code:
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

Code:
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
 
Zurück
Oben