FB_DALIV2Sequencer

FB_DALIV2Sequencer 1:

Funktionsbaustein zur Realisierung von Lichtsequenzen mit bis zu 50 Stützpunkten.

Kernstück dieses Funktionsbausteines 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:

FB_DALIV2Sequencer 2:

Sequenz 1 beispielsweise sieht im zeitlichen Verlauf folgendermaßen aus (nStartIndex=1, nOptions.bit0=TRUE, Erläuterung siehe unten):

FB_DALIV2Sequencer 3:

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 (siehe ST_DALIV2SequenceTable).

nOptions: Parametriereingang. Das 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.
gesetzt: Nach Ablauf einer Sequenz läuft der Baustein automatisch an der an nStartIndex definierten Stelle weiter.

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) (siehe E_DALIV2AddrType).

tCycleActualLevelMasterDev: Zykluszeit, mit der im Hintergrund der aktuelle Istwertausgelesen wird (siehe ACTUAL DIM LEVEL). 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_KL6811Communication() (KL6811) oder FB_KL6821Communication() (KL6821).

Voraussetzungen

Entwicklungsumgebung

erforderliche SPS-Bibliothek

TwinCAT ab v3.1.4020.14

Tc2_DALI ab v3.4.3.0