FB_DALIV2Sequencer
Funktionsblock zur Realisierung von Lichtsequenzen mit bis zu 50 Stützpunkten.
Kernstück dieses Funktionsblockes ist ein Rampenbaustein, der einzelne, in einer Tabelle definierte Helligkeitswerte in einer einstellbaren Zeit anfährt und auf diesem Helligkeitswert dann eine ebenfalls definierbare Zeit verweilt. Nach dem Verweilen wird dann der nächste Wert angefahren. Die Tabelle arrSequenceTable besteht, wie bereits erwähnt, aus 50 Einträgen mit den Werten für nTargetValue (Zielwert), tRampTime (Zeit zum Erreichen des Zielwertes) und tProlongTime (Verweilzeit auf dem Zielwert). Es ist nicht zwingend notwendig, alle 50 Werte zu nutzen. Ein 0-Eintrag aller 3 Werte markiert das Ende einer Sequenz. Darüber hinaus ist es mit dem Eingang nStartIndex möglich, eine Lichtsequenz an jeder beliebigen Stelle der Tabelle beginnen zu lassen. Dadurch lassen sich auch innerhalb der 50 Einträge mehrere verschiedene Lichtsequenzen programmieren, die untereinander jeweils durch 0-Eintrags-Elemente getrennt sind:
Sequenz 1 beispielsweise sieht im zeitlichen Verlauf folgendermaßen aus (nStartIndex=1, nOptions.bit0=TRUE, Erläuterung siehe unten):
Darüber hinaus lässt sich der Baustein "normal" ein- und ausschalten (Ein: Maximalwert der Lampen, Aus: 0) sowie über den Eingang bToggle zwischen "Ein" und "Aus" hin- und herschalten. Alle Befehlseingänge sind jedoch nur dann aktiv, wenn der Eingang bEnable auf TRUE steht. Wird er zurück auf FALSE gesetzt, so werden keine Befehle mehr angenommen und der Lichtwert behält seinen aktuellen Zustand - auch aus einer Rampenfahrt heraus.
Dieser Baustein basiert, wie eingangs erwähnt, auf dem FB_DALIV2Ramp. Der Rampenbaustein versucht die eingestellte Rampenzeit so genau wie möglich abzubilden. Dennoch ist es notwendig einmalig, wie zyklisch Daten aus dem DALI-Vorschaltgeräten abzufragen, was je nach eingestellter PLC-Zykluszeit unterschiedlich dauert. Daher sind Ungenauigkeiten in der Rampenzeit nicht ausgeschlossen. |
VAR_INPUT
bEnable : BOOL := TRUE;
bOn : BOOL;
bOff : BOOL;
bToggle : BOOL;
bStart : BOOL;
nStartIndex : USINT := 0;
arrSequenceTable : ARRAY [1..nMaxSequenceValues] OF ST_DALIV2SequenceTable;
nOptions : DWORD := 0;
nAddr : BYTE := 0;
eAddrType : E_DALIV2AddrType := eDALIV2AddrTypeShort;
nMasterDevAddr : BYTE := 0;
tCycleActualLevelMasterDev : TIME := t#0s;
bEnable: Solange dieser Eingang auf TRUE steht, sind die Eingänge bOn, bOff, bToggle und bStart aktiv. Ein negativer Zustand deaktiviert die Eingänge und setzt den Baustein zurück.
bOn: Eine steigende Flanke schaltet nActualLevelMasterDevice direkt auf den Maximalwert .
bOff: Eine steigende Flanke schaltet nActualLevelMasterDevice unmittelbar auf "0".
bToggle: Schaltet den Lichtzustand zwischen An (Maximalwert) und Aus (0) jeweils hin und her.
bStart: Eine positive Flanke startet eine Lichtsequenz ab dem unter nStartIndex definierten Anfang.
nStartIndex: Siehe bStart.
arrSequenceTable: Lichtwert-Tabelle mit den dazugehörigen Rampen- und Verweilzeiten.
nOptions: Parametriereingang. Die Setzen (bzw. Nicht-Setzen) der einzelnen Bits dieser Variablen vom Typ DWORD hat folgende Wirkung:
Bit | Beschreibung |
---|---|
0 | nicht gesetzt: Der Baustein stoppt nach Ablauf einer Sequenz seine Aktivität. Eine erneute positive Flanke an bStart wäre für einen Sequenz-Neustart nötig. |
1..31 | -- reserviert für zukünftige Optionen -- |
nAddr: Adresse des Einzelgerätes bei Einzelansteuerung oder der Gruppe bei Gruppenansteuerung.
nMasterDevAddr: Adresse des Master-Gerätes bei Gruppen- und Sammelschaltungen.
eAddrType: Kurzadresse, Gruppenadresse oder Sammelruf (Broadcast).
tCycleActualLevelMasterDev: Zykluszeit, mit der im Hintergrund der aktuelle Istwert (ACTUAL DIM LEVEL) ausgelesen wird. Damit das Ansteuern der Lampen nicht gestört wird, wird das Auslesen immer in der niedrigsten Priorität durchgeführt. Wird der Wert auf 0 gesetzt, so wird das Auslesen gesperrt.
VAR_OUTPUT
nActualLevelMasterDev : BYTE;
nActualIndex : USINT;
bLight : BOOL;
bSequenceActive : BOOL;
bBusy : BOOL;
bError : BOOL;
nErrorId : UDINT;
nActualLevelMasterDev: Aktueller Ausgabewert des Master-Gerätes (bei eAddrType = eAddrTypeShort immer des jeweilig angesprochenen Gerätes).
nActualIndex : Verweis auf das aktuelle Element in der Sequenz-Tabelle. Ist eine Sequenz beendet (bSequenceActive = FALSE , s.u.) wird dieser Ausgang zu "0".
bLight: Dieser Ausgang ist solange gesetzt, wie nActualLevelMasterDev größer als "0" ist.
bSequenceActive : Bei Abarbeitung einer Sequenz wird dieser Ausgang auf TRUE gesetzt.
bBusy: Dieser Ausgang ist immer dann aktiv, solange eine Befehlsabarbeitung (bOn, bOff, bToggle oder Rampenfahrt) aktiv ist.
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 spezifischen 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
stCommandBuffer : ST_DALIV2CommandBuffer;
stCommandBuffer: Verweis auf die interne Struktur zur Kommunikation mit den Bausteinen FB_DALIV2Communication() (KL6811) oder FB_KL6821Communication() (KL6821).