FB_MaximumDemandController

FB_MaximumDemandController 1:

Baustein zur Spitzenlastoptimierung, der durch Ab-/ Zuschaltung von bis zu acht Verbrauchern die Einhaltung der eingestellten Leistungsgrenze realisiert. Die Verbraucher können entsprechend ihrer Leistung und Priorität so abgeschaltet werden, dass keine Störungen des Produktionsablaufs entstehen.

Zur Erkennung der einzelnen Messzyklen wird von dem Energieversorgungsunternehmen (EVU) ein Synchronimpuls geliefert. Dieser gibt den Beginn eines neuen Messzyklus an und muss auf den Eingang bPeriodPulse aufgeschaltet werden. Die Erfassung der Ist-Leistung erfolgt über die Zählerklemme KL1501.

Der Baustein arbeitet mit einer festen Messperiodenzeit von 15 Minuten. Überschreitet der Synchronimpuls die 16-Minuten-Grenze, so wird der Ausgang bEmergencySignal gesetzt.

Zu Beginn jeder Messperiode werden alle Verbraucher zugeschaltet. Innerhalb der Messperiode erfolgt bei drohender Überschreitung der Leistungsgrenze (fAgreedPower) nacheinander eine Abschaltung der Verbraucher. Ist die Gefahr der Lastüberschreitung nicht mehr gegeben, werden die Verbraucher wieder eingeschaltet.

Über eine Eingangsvariable können Besonderheiten, wie minimale Einschaltzeit, minimale Ausschaltzeit oder maximale Ausschaltzeit festgelegt werden. Ebenfalls kann die Priorität der einzelnen Verbraucher bestimmt werden. Verbraucher mit einer niedrigen Priorität werden vor Verbrauchern mit einer hohen Priorität abgeschaltet.

FB_MaximumDemandController 2:

VAR_INPUT

bStart              : BOOL;
fMeterConstant      : LREAL;
fAgreedPower        : LREAL;
bPeriodPulse        : BOOL;
arrLoadParameter    : ARRAY[1..8] OF ST_MDCLoadParameters;     

bStart: Über eine positive Flanke an diesem Eingang wird der Baustein aktiviert.

fMeterConstant: Zählerkonstante [Impulse / kWh].

fAgreedPower: Dies ist die vereinbarte Leistungsgrenze, die im Betriebsfall nach Möglichkeit nicht überschritten werden darf [kW].

bPeriodPulse: Synchronimpuls, der vom Energieversorgungsunternehmen (EVU) gesendet wird. Mit diesem Impuls wird das Messintervall gestartet.

arrLoadParameter: Parameterstruktur des jeweiligen Verbrauchers (siehe ST_MDCLoadParameters).

VAR_OUTPUT

arrLoad               : ARRAY[1..8] OF BOOL;
fAgreedEnergy         : LREAL;
fInstantaneousEnergy  : LREAL;
fActualEnergy         : LREAL;
tRemainingTime        : TIME;
fLastPeriodEnergy     : LREAL;
bEmergencySignal      : BOOL;
bError                : BOOL;
nErrorId              : UDINT;

arrLoad: Ist ein Array vom Datentyp BOOL; eingeschaltete Verbraucher sind TRUE.

fAgreedEnergy: Vereinbarter Energieverbrauch [kWh].

fInstantaneousEnergy: momentaner Energieverbrauch [kWh] bezogen auf einen Integrationszeitraum von 15s (interner Messintervall).

fActualEnergy: Zum "jetzigen" betrachteten Zeitpunkt der Messperiode verbrauchte Energie.

tRemainingTime: Restzeit bis zum nächsten Messintervall.

fLastPeriodEnergy: Sollleistung aus der vorhergegangenen Messperiode [kWh].

bEmergencySignal: Der Ausgang wird gesetzt sobald die vorgegebene Energie überschritten wird.

bError: Dieser Ausgang wird auf TRUE geschaltet, wenn bei der Ausführung eines Befehls ein Fehler aufgetreten ist.

nErrorId: Enthält den Fehlercode.

VAR_IN_OUT

stInDataKL1501      : ST_MDCInDataKL1501;
stOutDataKL1501     : ST_MDCOutDataKL1501;

stInDataKL1501: Verknüpft mit der KL1501 (siehe ST_MDCInDataKL1501).

stOutDataKL1501: Verknüpft mit der KL1501 (siehe ST_MDCOutDataKL1502).

Beispiel

VAR_GLOBAL
  arrLoadParameters      AT %MB100 : ARRAY[1..8] OF ST_MDCLoadParameters;

  (* KL1002 *)
  bPeriodPulse       AT %IX6.0 : BOOL;

  (* KL1501*)
  stInDataKL1501     AT %IB0 : ST_MDCInDataKL1501;
  stOutDataKL1501    AT %QB0 : ST_MDCOutDataKL1501;

  (* KL2404 *)
  bLoadOut1          AT %QX6.0 : BOOL;
  bLoadOut2          AT %QX6.1 : BOOL;
  bLoadOut3          AT %QX6.2 : BOOL;
  bLoadOut4          AT %QX6.3 : BOOL;

  (* KL2404 *)
  bLoadOut5          AT %QX6.4 : BOOL;
  bLoadOut6          AT %QX6.5 : BOOL;
  bLoadOut7          AT %QX6.6 : BOOL;
  bEmergencySignal       AT %QX6.7 : BOOL;
END_VAR

PROGRAM MAIN
VAR
  fbMaximumDemandController : FB_MaximumDemandController;
END_VAR

arrLoadParameters[1].bConnected := TRUE;
arrLoadParameters[1].nDegreeOfPriority := 1;
arrLoadParameters[1].tMINPowerOnTime := t#60s;
arrLoadParameters[1].tMINPowerOffTime := t#120s;
arrLoadParameters[1].tMAXPowerOffTime := t#600s;

arrLoadParameters[2].bConnected := TRUE;
arrLoadParameters[2].nDegreeOfPriority := 2;
arrLoadParameters[2].tMINPowerOnTime := t#60s;
arrLoadParameters[2].tMINPowerOffTime := t#120s;
arrLoadParameters[2].tMAXPowerOffTime := t#600s;

arrLoadParameters[3].bConnected := TRUE;
arrLoadParameters[3].nDegreeOfPriority := 3;
arrLoadParameters[3].tMINPowerOnTime := t#60s;
arrLoadParameters[3].tMINPowerOffTime := t#120s;
arrLoadParameters[3].tMAXPowerOffTime := t#300s;

arrLoadParameters[4].bConnected := TRUE;
arrLoadParameters[4].nDegreeOfPriority := 4;
arrLoadParameters[4].tMINPowerOnTime := t#20s;
arrLoadParameters[4].tMINPowerOffTime := t#30s;
arrLoadParameters[4].tMAXPowerOffTime := t#8m;

arrLoadParameters[5].bConnected := TRUE;
arrLoadParameters[5].nDegreeOfPriority := 5;
arrLoadParameters[5].tMINPowerOnTime := t#20s;
arrLoadParameters[5].tMINPowerOffTime := t#50s;
arrLoadParameters[5].tMAXPowerOffTime := t#20m;

arrLoadParameters[6].bConnected := TRUE;
arrLoadParameters[6].nDegreeOfPriority := 6;
arrLoadParameters[6].tMINPowerOnTime := t#30s;
arrLoadParameters[6].tMINPowerOffTime := t#1m;
arrLoadParameters[6].tMAXPowerOffTime := t#1m;

arrLoadParameters[7].bConnected := TRUE;
arrLoadParameters[7].nDegreeOfPriority := 7;
arrLoadParameters[7].tMINPowerOnTime := t#0s;
arrLoadParameters[7].tMINPowerOffTime := t#0s;
arrLoadParameters[7].tMAXPowerOffTime := t#1m;

arrLoadParameters[8].bConnected := FALSE;

fbMaximumDemandController(bStart := TRUE,
              fMeterConstant := 20000,
              fAgreedPower := 600,
              bPeriodPulse := bPeriodPulse,
              arrLoadParameters := arrLoadParameters,
              stInDataKL1501 := stInDataKL1501,
              stOutDataKL1501 := stOutDataKL1501);

bLoadOut1 := fbMaximumDemandController.arrLoad[1];
bLoadOut2 := fbMaximumDemandController.arrLoad[2];
bLoadOut3 := fbMaximumDemandController.arrLoad[3];
bLoadOut4 := fbMaximumDemandController.arrLoad[4];
bLoadOut5 := fbMaximumDemandController.arrLoad[5];
bLoadOut6 := fbMaximumDemandController.arrLoad[6];
bLoadOut7 := fbMaximumDemandController.arrLoad[7];
bEmergencySignal := fbMaximumDemandController.bEmergencySignal;

Voraussetzungen

Entwicklungsumgebung

Erforderliche SPS-Bibliothek

TwinCAT ab v3.1.4020.32

Tc2_BABasic ab v3.1.0.0