FB_ConstantLightControlEco
Der Baustein FB_ConstantLightControlEco() dient zur Konstantlichtregelung.
Durch zyklisches Auf- und Abdimmen wird versucht, auf einen vorgegebenen Sollwert zu regeln. Die Dynamik der Regelung wird durch eine Totzeit (tDeadTime) sowie der Schrittweite (nStepSize) bestimmt. Die Totzeit legt die Wartezeit zwischen den einzelnen Auf- bzw. Abstufungen der Stellgröße um die eingestellte Schrittweite fest. Je kleiner die Totzeit, desto schneller wird nachgeregelt. Eine frei definierbare Hysterese (nHysteresis) verhindert ein ständiges Schwingen um den Sollwert. Liegt der Istwert im Bereich der Hysterese um den Sollwert, so wird die Helligkeit der Lampen nicht verändert.
Ist die eingestellte Schrittweite nStepSize zu groß bzw. die Hysterese nHysteresis zu klein gewählt, kann es passieren, dass der Hysteresebereich nicht "getroffen" wird. Dieses lässt sich nicht durch den Baustein verhindern, da die Lichtleistung nLightLevel nur im physikalischen Zusammenhang mit aufgenommenen Licht-Istwert, nActualLevel, steht. |
VAR_INPUT
bEnable : BOOL;
bOn : BOOL;
bOff : BOOL;
bToggle : BOOL;
nSetpointValue : UINT := 16000;
nActualValue : UINT;
nHysteresis : UINT := 100;
nMaxLevel : UINT := 32767;
nMinLevel : UINT := 3276;
nStepSize : UINT := 10;
tDeadTime : TIME := t#50ms;
nOptions : DWORD;
bEnable: Schaltet den Baustein frei. Ist dieser Eingang auf FALSE, so sind die Eingänge bOn, bOff und bToogle gesperrt. Die Stellgröße bleibt unverändert.
bOn: Schaltet die angesprochenen Geräte auf nMaxLevel und aktiviert die Konstantlichtregelung.
bOff: Schaltet die angesprochenen Geräte aus und deaktiviert die Konstantlichtregelung.
bToggle: Je nach Zustand des Referenzgerätes wird die Beleuchtung ein- oder ausgeschaltet.
nSetpointValue: An diesem Eingang wird der Sollwert vorgegeben.
nActualValue: An diesem Eingang wird der Istwert angelegt.
nHysteresis: Regelhysterese um den Sollwert. Liegt der Istwert innerhalb dieses Bereiches, so werden die Stellgrößen der Lampen nicht verändert.
nMaxLevel: Maximalwert der Stellgröße an nLightLevel.
nMinLevel: Minmalwert der Stellgröße an nLightLevel. Soll dieser Wert durch einen Abdimmvorgang unterschritten werden, so wird nLightLevel direkt auf "0" gesetzt. Andersherum, wenn bei aktiver Regelung nLightLevel auf "0" steht beginnt der Aufdimmvorgang direkt bei diesem Wert.
nStepSize: Schrittweite mit der die Stellgröße nLightLevel verändert wird.
tDeadTime: Totzeit zwischen den einzelnen Auf- bzw. Abstufungen der Stellgröße.
nOptions: Derzeit ohne Verwendung. Reserviert für zukünftige Erweiterungen.
VAR_OUTPUT
nDeviation : INT;
bControllerIsActive : BOOL;
bBusy : BOOL;
bError : BOOL;
nErrorId : UDINT;
nDeviation: Aktuelle Regelabweichung (Sollwert - Istwert).
bControllerIsActive: Dieser Ausgang wird gesetzt, sobald die Regelung aktiviert wurde.
bBusy: Bei aktiviertem Baustein ist dieser Ausgang immer dann aktiv, wenn Änderungen der Stellgröße erfolgen.
bError: Dieser Ausgang wird auf TRUE geschaltet, wenn bei der Ausführung eines Befehls ein Fehler aufgetreten ist. Der befehlsspezifische Fehlercode ist in nErrorId enthalten. Wird durch das Ausführen eines Befehls an den Eingängen auf FALSE zurückgesetzt.
nErrorId: Enthält den befehlsspezifischen Fehlercode des zuletzt ausgeführten Befehls. Wird durch das Ausführen eines Befehls an den Eingängen auf 0 zurückgesetzt. Siehe Fehlercodes.
VAR_IN_OUT
nLightLevel : UINT;
nLightLevel: Ausgabe-Stellgröße des Bausteines und Verweis auf den Lichtausgangswert. Dieser Wert ist deshalb als IN-Out-Variable definiert, weil der Funktionsbaustein den Lichtwert zum einen ausliest und zum anderen beschreibt.
Ablaufdiagramm
Folgendes Diagramm soll verdeutlichen, wie die Regelung im normalen Ablauf verhält:
Die Regelung wird zunächst durch ein TRUE-Signal am Eingang bEnable frei geschaltet. Bei der darauffolgenden positiven Flanke an bOn wird nLightLevel erst auf den Maximalwert gesteuert. Dies beeinflußt auch den gemessenen Lichtwert nActualValue, welcher ansteigt, so dass ein Abdimmen erforderlich wird. nLightLevel wird nun schrittweise reduziert, bis sich der gemessene Lichtwert nActualValue im Hysteresebereich um den Sollwert befindet (nSetpointValue - 0.5*nHysteresis < x < nSetpointValue + 0.5*nHysteresis).
fällt dann beispielsweise der gemessene Lichtwert, etwa durch Bewölkung außen, so steuert die Regelung durch schrittweises Aufdimmen dagegen, bis der Lichtwert wieder im Hystereseband liegt.
Wird die Schrittweite nStepSize zu groß bzw. die Hysterese zu klein gewählt kann es zu einer Oszillation um den Sollwert kommen. Dadurch dass die Hysterese klein gegenüber den Sprüngen ist, wird der Hysteresebereich ständig verfehlt: