FB_EnOceanPTM100

FB_EnOceanPTM100 1:

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:

FB_EnOceanPTM100 2: