FB_EnOceanPTM100
Der Funktionsbaustein FB_EnOceanPTM100() gibt eine anwenderfreundliche Auswertung über den Zustand eines EnOcean PTM100-Moduls. Hierzu ist die Verwendung des Funktionsblocks FB_EnOceanReceive() notwendig.
Im Unterschied zum PTM200- und PTM250-Modul, kann beim PTM100-Modul nur ein Taster gleichzeitig gedrückt werden. Des Weiteren unterstützt das PTM100-Modul acht, statt vier Taster.
Wichtig ist, dass zu jedem verwendeten Tasten-Modul eine neue Instanz dieses Bausteines angelegt werden muss.
VAR_INPUT
bEnable : BOOL := FALSE;
tWatchdog : TIME;
nTransmitterId : UDINT;
stEnOceanReceivedData : ST_EnOceanReceivedData;
bEnable: Ein positives Signal an diesem Eingang setzt den Baustein aktiv. Bei einem negativen Signal am bEnable Eingang wird im Baustein keine Funktion ausgeführt und alle Ausgänge werden auf 0 bzw. FALSE gesetzt.
tWatchdog: Überwachungszeit. Innerhalb dieser Zeit müssen neue Informationen über den Eingang stEnOceanReceivedData in diesen Baustein gelangen. Ist diese Zeit auf t#0s gesetzt, so ist die Watchdog-Funktion inaktiv.
nTransmitterId: ID des EnOcean-Modules, auf den der Baustein reagieren soll.
stEnOceanReceivedData: Informationen und notwendige Verbindung zum EnOcean-Empfangsbaustein FB_EnOceanReceive(). Diese Informationen sind in einer Struktur des Typs ST_EnOceanReceivedData hinterlegt.
VAR_OUTPUT
bSwitches : ARRAY [0..7] OF BOOL;
bError : BOOL := FALSE;
nErrorId : UDINT := 0;
bSwitches: Dieses Feld von 8 boolschen Werten beschreibt die Zustände der 8 Taster auf dem Taster-Modul.
bError: Der Ausgang wird TRUE sobald ein Fehler auftritt. Dieser Fehler wird über die Variable nErrorId beschrieben.
nErrorId: Beschreibt die Art des Fehlers (siehe Fehlercodes).
Anhand des folgenden Programmbeispiels soll die Funktionsweise des Bausteines näher beschrieben werden:
PROGRAM MAIN
VAR
fbEnOceanReceive : FB_EnOceanReceive;
fbEnOceanPTM100_1 : FB_EnOceanPTM100;
fbEnOceanPTM100_2 : FB_EnOceanPTM100;
bSwitches1 : ARRAY [0..7] OF BOOL;
bSwitches2_1 : BOOL;
bSwitches2_2 : BOOL;
bSwitches2_3 : BOOL;
bSwitches2_4 : BOOL;
bSwitches2_5 : BOOL;
bSwitches2_6 : BOOL;
bSwitches2_7 : BOOL;
bSwitches2_8 : BOOL;
END_VAR
fbEnOceanReceive(bEnable := TRUE,
stEnOceanInData := stEnOceanInData,
stEnOceanOutData := stEnOceanOutData);
fbEnOceanPTM100_1(bEnable := NOT fbEnOceanReceive.bError AND fbEnOceanReceive.bEnable,
nTransmitterId := 16#000000C4,
tWatchdog := t#0s,
stEnOceanReceivedData := fbEnOceanReceive.stEnOceanReceivedData);
bSwitches1 := fbEnOceanPTM100_1.bSwitches;
fbEnOceanPTM100_2(bEnable := NOT fbEnOceanReceive.bError AND fbEnOceanReceive.bEnable,
nTransmitterId := 16#000000C5,
tWatchdog := t#0s,
stEnOceanReceivedData := fbEnOceanReceive.stEnOceanReceivedData);
bSwitches2_1 := fbEnOceanPTM100_2.bSwitches[0];
bSwitches2_3 := fbEnOceanPTM100_2.bSwitches[1];
bSwitches2_6 := fbEnOceanPTM100_2.bSwitches[2];
bSwitches2_5 := fbEnOceanPTM100_2.bSwitches[3];
bSwitches2_8 := fbEnOceanPTM100_2.bSwitches[4];
bSwitches2_2 := fbEnOceanPTM100_2.bSwitches[5];
bSwitches2_7 := fbEnOceanPTM100_2.bSwitches[6];
bSwitches2_4 := fbEnOceanPTM100_2.bSwitches[7];
In diesem Beispielprogramm werden 2 Sendemodule (PTM100) abgefragt, ein Sendemodul mit der Transmitter-Id 16#C4 und ein anderes mit der Transmitter-Id 16#C5. Für beide Sendemodule wurde jeweils ein Funktionsbaustein FB_EnOceanPTM100() angelegt. Beide Funktionsbausteine erhalten ihre Informationen von einem vorangeschalteten Empfängerbaustein FB_EnOceanReceive() und sind nur dann aktiv (Eingang bEnable), wenn der Empfängerbaustein aktiv und nicht in Störung ist. Die Taster des ersten Sendemoduls werden zur weiteren Auswertung einem gleich großen bool´schen Array bSwitches1 zugeordnet, während die Taster des zweiten Sendemodules einzelnen boolschen Variablen bSwitches2_1 bis bSwitches2_8 zugewiesen werden - beide Möglichkeiten sind denkbar.
Im freigrafischen Funktionsplanedito (CFC) würde dasselbe Beispiel folgendermaßen aussehen, wobei die Variablendeklaration die gleiche wie beim oben aufgeführten Beispiel ist: