FB_EnOceanReceive

FB_EnOceanReceive 功能块是一个接收单元，它收集EnOcean-transmitters 所发送的数据并放入 stEnOceanReceivedData 的结构中，再由功能块 FB_EnOceanPTM100 与 FB_EnOceanSTM100 进行分析。相关例程在这2个功能块的相关文档中。

VAR_INPUT

bEnable               :  BOOL;

bEnable: :输入端的高电平将功能模块置于工作状态。在输入端为低电平时，模块不进入工作状态。

VAR_OUTPUT

bError                :  BOOL;
nErrorId              :  UDINT;
stEnOceanReceivedData :  ST_EnOceanReceivedData;

bError: 如果这个功能块处于错误工作状态，这个输出端将置于TRUE。

nErrorId: 描述错误，详见Errorcodes.

stEnOceanReceivedData:接收到的信息传入EnOcean接收器 FB_EnOceanReceive 。信息被以 ST_EnOceanReceivedData 的结构形式组成。

VAR_IN_OUT

stEnOceanInData       :  ST_EnOceanInData;
stEnOceanOutData      :  ST_EnOceanOutData;

stEnOceanInData: 输入端信号映射的结构，用于通讯。

stEnOceanOutData: 输出端信号映射的结构，用于通讯。


FB_EnOceanPTM100

功能模块 FB_EnOceanPTM100 分析由EnOcean PTM100-型发射模块发送，由 FB_EnOceanReceive 接收元件接收并传送过来的 易于操作的指令。 每一个EnOcean PTM100-型发射模块都需要一一对应的 FB_EnOceanPTM100 功能模块对其发送的信息进行分析。

区别于PTM200- 和PTM250-模块的的是， PTM100只可以同时按一个按钮。 另外， PTM100-型模块最多可以设置8个按钮，而非4个。

VAR_INPUT

bEnable               :  BOOL;
tWatchdog             :  TIME;
nTransmitterId        :  UDINT;
stEnOceanReceivedData :  ST_EnOceanReceivedData;

bEnable:在输入端出现高电平时，功能模块进入工作状态。在输入端为低电平时，模块不进入工作状态，且所有输出端都被置为0或 FALSE.

tWatchdog: 每隔一段时间，stEnOceanReceivedData输入端的信息会被更新。如果输入的时间被置为t#0s，则看门狗不起作用。

nTransmitterId: EnOcean-Transmitter的ID在此变量中存储

stEnOceanReceivedData: 接收到的信息传入EnOcean接收器 FB_EnOceanReceive ，并以 ST_EnOceanReceivedData 的结构形式写入。

VAR_OUTPUT

bSwitches             :  ARRAY[0..7] OF BOOL;
bError                :  BOOL;
nErrorId              :  UDINT;

bSwitches: 该8维数组包含了发射端中按键状态的实时信息

bError: 若功能块出错，则输出被置于TRUE。

nErrorId: 描述错误，详见 Errorcodes.

以下例子描述了该功能块应如何使用：

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);

fbEnOceanPTM100_2(  bEnable := NOT fbEnOceanReceive.bError AND fbEnOceanReceive.bEnable,
                    nTransmitterId := 16#000000C5,
                    tWatchdog:=t#0s,
                    stEnOceanReceivedData := fbEnOceanReceive.stEnOceanReceivedData);

bSwitches1	:= fbEnOceanPTM100_1.bSwitches;

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];

在这个程序中，2个感应模块被监视——一个为ID16#000000C4另一个为16#000000C5。 每一个发射端都有一个独立的功能块 FB_EnOceanSTM100 例程——这2个元件从原有的接收器 FB_EnOceanReceive 得到信息。只要接收器在正常工作状态， 这2个元件都是可用的（输入端 bEnable 高电平）。第一个发射端的4个开关被赋值到相同型号BOOL型数组 bSwitches1 ，其中第2个发射端被赋值到不同型号的BOOL型变量 (bSwitches2_1...bSwitches2_4) ——2种方案都可行。

In continuous function chart editor (CFC) this example would look like the following:


FB_EnOceanPTM200

功能模块 FB_EnOceanPTM200 分析由EnOcean PTM200-型或者PTM250型发射模块发送，由 FB_EnOceanReceive 接收元件接收并传送过来的 易于操作的指令。特别强调的是，每一个EnOcean PTM200-型发射模块都需要一一对应的 FB_EnOceanPTM200 功能模块对其发送的信息进行分析。

不同于PTM100-型模块最多可以同时按2个按钮，PTM200-型模块最多可以有4个按钮，而非8个。

VAR_INPUT

bEnable               :  BOOL;
tWatchdog             :  TIME;
nTransmitterId        :  UDINT;
stEnOceanReceivedData :  ST_EnOceanReceivedData;

bEnable: 在输入端出现高电平时，功能模块进入工作状态。在输入端为低电平时，模块不进入工作状态，且所有输出端都被置为0或 FALSE.

tWatchdog: 每隔一段时间，stEnOceanReceivedData输入端的信息会被更新。如果输入的时间被置为t#0s，则看门狗不起作用。

nTransmitterId: .EnOcean-Transmitter的ID在此变量中存储

stEnOceanReceivedData: 接收到的信息传入EnOcean接收器

FB_EnOceanReceive ，并以 ST_EnOceanReceivedData 的结构形式写入。

VAR_OUTPUT

bSwitches             :  ARRAY[0..3] OF BOOL;
bError                :  BOOL;
nErrorId              :  UDINT;

bSwitches: 该4维数组包含了发射端中按键状态的真实信息

bError:若功能块处于出错状态，则输出被置于TRUE。

nErrorId:描述错误，详见 Errorcodes.

以下例子描述了该功能块应如何使用：

PROGRAM MAIN
VAR
   fbEnOceanReceive  	: FB_EnOceanReceive;
   fbEnOceanPTM200_1 	: FB_EnOceanPTM200;
   fbEnOceanPTM200_2 	: FB_EnOceanPTM200;
   bSwitches1 		: ARRAY [0..3] OF BOOL;
   bSwitches2_1 		: BOOL;
   bSwitches2_2 		: BOOL;
   bSwitches2_3 		: BOOL;
   bSwitches2_4 		: BOOL;
END_VAR

fbEnOceanReceive(   bEnable := TRUE,
                    stEnOceanInData  := stEnOceanInData,
                    stEnOceanOutData :=stEnOceanOutData);

fbEnOceanPTM200_1(  bEnable := NOT fbEnOceanReceive.bError AND fbEnOceanReceive.bEnable,
                    nTransmitterId := 16#000000C6,
          tWatchdog:=t#0s,
                    stEnOceanReceivedData := fbEnOceanReceive.stEnOceanReceivedData);

fbEnOceanPTM200_2(  bEnable := NOT fbEnOceanReceive.bError AND fbEnOceanReceive.bEnable,
                    nTransmitterId := 16#000000C7,
                    tWatchdog:=t#0s,
                    stEnOceanReceivedData := fbEnOceanReceive.stEnOceanReceivedData);

bSwitches1	:= fbEnOceanPTM200_1.bSwitches;

bSwitches2_1 	:= fbEnOceanPTM200_2.bSwitches[0];
bSwitches2_2 	:= fbEnOceanPTM200_2.bSwitches[1];
bSwitches2_3	:= fbEnOceanPTM200_2.bSwitches[2];
bSwitches2_4	:= fbEnOceanPTM200_2.bSwitches[3];

在此程序中，2个发射模块(PTM200/PTM250) 被监视 ——一个ID为 16#000000C6 ，另一个ID为16#000000C7。每一个发射端都有一个独立的功能块 FB_EnOceanSTM200 例程，这2个元件从原有的接收器 FB_EnOceanReceive 得到信息。只要接收器在正常工作状态，这2个元件都是可用的（输入端 bEnable 高电平）。第一个发射端的4个开关被赋值到相同型号BOOL型数组 bSwitches1 ，第2个发射端被赋值到不同BOOL型变量 (bSwitches2_1...bSwitches2_4) ——2种方案都可行。

在CFC编辑器下的示例可以在下面的页面找到： FB_EnOceanPTM100.


FB_EnOceanSTM100

请使用最新产品FB_EnOceanSTM100Generic 模块

功能模块 FB_EnOceanSTM100 分析由EnOcean PTM100-型发射模块发送，由 FB_EnOceanReceive 接收元件接收并传送过来的 易于操作的指令。特别强调的是，每一个EnOcean STM100-型发射模块都需要一一对应的 FB_EnOceanSTM100 功能模块对其发送的信息进行分析。

VAR_INPUT

bEnable               :  BOOL;
tWatchdogTime         :  TIME;
nTransmitterId        :  UDINT;
stEnOceanReceivedData :  ST_EnOceanReceivedData;

bEnable: 在输入端出现高电平时，功能模块进入工作状态。在输入端为低电平时，模块不进入工作状态，且所有输出端都被置为0或 FALSE.

tWatchdog: 每隔一段时间，stEnOceanReceivedData输入端的信息会被更新。如果输入的时间被置为t#0s，则看门狗不起作用。

nTransmitterId: .EnOcean-Transmitter的ID在此变量中存储

stEnOceanReceivedData: 接收到的信息传入EnOcean接收器

FB_EnOceanReceive ，并以 ST_EnOceanReceivedData 的结构形式写入。

VAR_OUTPUT

eEnOceanRotarySwitch  :  E_EnOceanRotarySwitch;
nSetpoint             :  INT;
nTemperature          :  INT;
bPresentSwitch        :  BOOL;
bLearnSwitch          :  BOOL;
bError                :  BOOL;
nErrorId              :  UDINT;

eEnOceanRotarySwitch: 这个输出端描述了在发射模块上旋转开关的状态，状态信息以 E_EnOceanRotarySwitch 类型的枚举法表示：
eEnOceanRotarySwitchStep0 = switch is set to „0“,
eEnOceanRotarySwitchStep1 = switch is set to „1“,
eEnOceanRotarySwitchStep2 = switch is set to „2“,
eEnOceanRotarySwitchStep3 = switch is set to „3“,
eEnOceanRotarySwitchAuto = switch is set to „Auto“,

nSetpoint: 在发射端上的定位点的数值变化可以从这个输出变量读出。范围从-100到100。

nTemperature: 所测量的温度的精度为0.1摄氏度。温度的上下极限值是0摄氏度和40摄氏度。 如果功能块处于看门狗出错状态下，所测温度将会被自动设定为850摄氏度。

bPresentSwitch: 如果在发射端上的按钮被按下，则此输出端为TRUE。

bLearnSwitch: 如果在发射端上的 bLearnSwitch 开关被按下，则此输出端为TRUE。

bError: 若功能块处于出错状态，则输出被置于TRUE。

nErrorId: 描述错误，详见 Errorcodes.

以下例子描述了该功能块应如何使用：

PROGRAM MAIN
VAR
   fbEnOceanReceive    	: FB_EnOceanReceive;
   fbEnOceanSTM100_1   	: FB_EnOceanSTM100;
   fbEnOceanSTM100_2	: FB_EnOceanSTM100;
   nTemperature            	: ARRAY [1..2] OF INT;
   nSetpoint              	: ARRAY [1..2] OF INT;
   nStateRotarySwitch 	: ARRAY [1..2] OF E_EnOceanRotarySwitch;
   bPresentSwitch     	: ARRAY [1..2] OF BOOL;
END_VAR

fbEnOceanReceive(   bEnable := TRUE,
                    stEnOceanInData := stEnOceanInData,
                    stEnOceanOutData := stEnOceanOutData);

fbEnOceanSTM100_1(  bEnable := NOT fbEnOceanReceive.bError AND fbEnOceanReceive.bEnable,
                    nTransmitterId := 16#000000C4,
                    tWatchdog:=t#1h,
                    stEnOceanReceivedData := fbEnOceanReceive.stEnOceanReceivedData);

fbEnOceanSTM100_2(  bEnable := NOT fbEnOceanReceive.bError AND fbEnOceanReceive.bEnable,
                    nTransmitterId := 16#000000C5,
                    tWatchdog:=t#0s,
                    stEnOceanReceivedData := fbEnOceanReceive.stEnOceanReceivedData);

nTemperature[1]           := fbEnOceanSTM100_1.nTemperature;
nSetpoint[1]              := fbEnOceanSTM100_1.nSetpoint;
nStateRotarySwitch[1]     := fbEnOceanSTM100_1.eEnOceanRotarySwitch;
bPresentSwitch[1]         := fbEnOceanSTM100_1.bPresentSwitch;

nTemperature[2]           := fbEnOceanSTM100_2.nTemperature;
nSetpoint[2]              := fbEnOceanSTM100_2.nSetpoint;
nStateRotarySwitch[2]     := fbEnOceanSTM100_2.eEnOceanRotarySwitch;
bPresentSwitch[2]         := fbEnOceanSTM100_2.bPresentSwitch;

在这个程序中，2个传感器模块被监视——一个ID为I16#000000C4， 另一个ID为 16#000000C5。每一个发射端拥有各自的功能块FB_EnOceanSTM100 -——这2个元件从原有的接收器 FB_EnOceanReceive 得到信息。只要接收器在正常工作状态，这2个元件都是可用的（输入端 bEnable 高电平）。 第一个发射端被看门狗模块监视，信息每小时更新一次。 第二个发射端没有被看门狗模块监视。FB_EnOceanSTM100 输出端的控制信号被存储到程序的变量中以便其他的使用。

In continuous function chart editor (CFC) this example would look like the following:


FB_EnOceanSTM100Generic

功能模块 FB_EnOceanSTM100 分析由EnOcean PTM100-型发射模块发送，由FB_EnOceanReceive 接收元件接收并传送过来的 易于操作的指令。 特别强调的是，每一个EnOcean STM100-型发射模块都需要一一对应的 FB_EnOceanSTM100 功能模块对其发送的信息进行分析。

VAR_INPUT

bEnable               :  BOOL;
tWatchdogTime         :  TIME;
nTransmitterId        :  UDINT;
stEnOceanReceivedData :  ST_EnOceanReceivedData;

bEnable:在输入端出现高电平时，功能模块进入工作状态。在输入端为低电平时，模块不进入工作状态，且所有输出端都被置为0或 FALSE.

tWatchdog: 每隔一段时间，stEnOceanReceivedData输入端的信息会被更新。如果输入的时间被置为t#0s，则看门狗不起作用。

nTransmitterId: EnOcean-Transmitter的ID在此变量中存储

stEnOceanReceivedData: 接收到的信息传入EnOcean接收器

FB_EnOceanReceive ，并以 ST_EnOceanReceivedData 的结构形式写入。TcPlcLibEnOcean_StructEnOceanReceivedData.htm

VAR_OUTPUT

nDataBytes            :  ARRAY [0..3] OF BYTE;
bError                :  BOOL;
nErrorId              :  UDINT;

nDataBytes: 该4维数组包含了STM100-型模块的数据。制造商可以根据不同需求规定该输出数据表达的内容。

bError: 若功能块处于出错状态，则输出被置于TRUE。

nErrorId: 描述错误，详见 Errorcodes.

以下例子描述了该功能块应如何使用：

PROGRAM MAIN
VAR
   fbEnOceanReceive    	: FB_EnOceanReceive;
   fbEnOceanSTM100_1   	: FB_EnOceanSTM100Generic;
   fbEnOceanSTM100_2	: FB_EnOceanSTM100Generic;
   nTemperature            	: ARRAY [1..2] OF INT;
   nSetpoint              	: ARRAY [1..2] OF INT;
   nStateRotarySwitch 	: ARRAY [1..2] OF E_EnOceanRotarySwitch;
   bPresentSwitch     	: ARRAY [1..2] OF BOOL;
END_VAR

fbEnOceanReceive(   bEnable := TRUE,
                    stEnOceanInData := stEnOceanInData,
                    stEnOceanOutData := stEnOceanOutData);

fbEnOceanSTM100_1(  bEnable := NOT fbEnOceanReceive.bError AND fbEnOceanReceive.bEnable,
                    nTransmitterId := 16#000000C4,
                    tWatchdog:=t#1h,
                    stEnOceanReceivedData := fbEnOceanReceive.stEnOceanReceivedData);

fbEnOceanSTM100_2(  bEnable := NOT fbEnOceanReceive.bError AND fbEnOceanReceive.bEnable,
                    nTransmitterId := 16#000000C5,
                    tWatchdog:=t#0s,
                    stEnOceanReceivedData := fbEnOceanReceive.stEnOceanReceivedData);

nTemperature[1]           := fbEnOceanSTM100_1.nDataBytes[0];
nSetpoint[1]              := fbEnOceanSTM100_1.nDataBytes[1];
nStateRotarySwitch[1]     := fbEnOceanSTM100_1.nDataBytes[2];
bPresentSwitch[1]         := fbEnOceanSTM100_1.nDataBytes[3];

nTemperature[2]           := fbEnOceanSTM100_2.nDataBytes[0];
nSetpoint[2]              := fbEnOceanSTM100_2.nDataBytes[1];
nStateRotarySwitch[2]     := fbEnOceanSTM100_2.nDataBytes[2];
bPresentSwitch[2]         := fbEnOceanSTM100_2.nDataBytes[3];

在这个程序中，2个感应模块被监视，其中一个ID为16#000000C4，另一个为16#000000C5。每一个发射端都有一个独立的功能块 FB_EnOcean100Generic 实例，这2个元件从原有的接收器 FB_EnOceanReceive 得到信息。只要接收器在正常工作状态，这2个元件都是可用的（输入端 bEnable 高电平）。第一个发射端由看门狗功能块监视，信息每小时更新一次。而第2个发射端不受看门狗模块监视。FB_EnOcean100Generic输出端的控制信号被存储到程序的变量中以便其他的使用。必须把输出的控制信号与实际的环境控制的要求在数值上进行一一对应。通常传感器数据表中，有关数据转换的内容占的比重更多一些。


FB_EnOceanSTM250

功能模块 FB_EnOceanSTM250 分析由EnOcean PTM100-型发射模块发送，由FB_EnOceanReceive 接收元件接收并传送过来的 易于操作的指令。特别强调的是，每一个EnOcean STM250-型发射模块都需要一一对应的 FB_EnOceanSTM250 功能模块对其发送的信息进行分析。

VAR_INPUT

bEnable               :  BOOL;
tWatchdogTime         :  TIME;
nTransmitterId        :  UDINT;
stEnOceanReceivedData :  ST_EnOceanReceivedData;

bEnable: 在输入端出现高电平时，功能模块进入工作状态。在输入端为低电平时，模块不进入工作状态，且所有输出端都被置为0或 FALSE.

tWatchdog: 每隔一段时间，stEnOceanReceivedData输入端的信息会被更新。如果输入的时间被置为t#0s，则看门狗不起作用。

nTransmitterId: EnOcean-Transmitter的ID在此变量中存储

stEnOceanReceivedData: 接收到的信息传入EnOcean接收器

FB_EnOceanReceive ，并以 ST_EnOceanReceivedData 的结构形式写入。

VAR_OUTPUT

bState                :  BOOL;
bLearn                :  BOOL;
bError                :  BOOL;
nErrorId              :  UDINT;

bState:如果STM250-型状发射模块连接的弹簧继电器闭合，那么输出端为TRUE。

bLearn: 如果在STM250-型发射模块上的 bLearn 开关被按下，那么按下的时间段内输出为FALSE。

bError: 若功能块处于出错状态，则输出置于TRUE。

nErrorId: 描述错误，详见 Errorcodes.

以下例子描述了该功能块应如何使用：

PROGRAM MAIN
VAR
    fbEnOceanReceive        : FB_EnOceanReceive;
    fbEnOceanSTM250         : FB_EnOceanSTM250;
    bState                  : BOOL;
    bLearn                  : BOOL;
END_VAR

fbEnOceanReceive(   bEnable := TRUE,
                    stEnOceanInData := stEnOceanInData,
                    stEnOceanOutData := stEnOceanOutData);

fbEnOceanSTM250(    bEnable := NOT fbEnOceanReceive.bError AND fbEnOceanReceive.bEnable,
                    nTransmitterId := 16#000008CA,
                    tWatchdog:=t#0s,
                    stEnOceanReceivedData := fbEnOceanReceive.stEnOceanReceivedData);

bState      := fbEnOceanSTM250.bState;
bLearn      := fbEnOceanSTM250.bLearn;

在这个程序中一个ID为16#000000C4 的EnOcean STM250-型模块被监视。每一个发射端都有一个独立的功能块 FB_EnOceanSTM250 例程。这2个元件从原有的接收器 FB_EnOceanReceive 得到信息。只要接收器在正常工作状态，这2个元件都是可用的（输入端 bEnable 高电平）。

发射端由看门狗功能块监视，信息每小时更新一次。FB_EnOceanSTM250 输出端的控制信号被存储到程序的变量中以便其他的使用。


TwinCAT PLC Library: Serial Communication EnOcean BC

Appendix

ST_EnOceanInData

TYPE ST_EnOceanInData :
STRUCT
  nStatus : BYTE;
  nData   : ARRAY[0..10] OF BYTE;
END_STRUCT
END_TYPE


Appendix

ST_EnOceanOutData

TYPE ST_EnOceanOutData :
STRUCT
  nCtrl : BYTE;
  nData : ARRAY[0..10] OF BYTE;
END_STRUCT
END_TYPE


Appendix

ST_EnOceanReceivedData

TYPE ST_EnOceanReceivedData :
STRUCT
  bReceived          : BOOL;
  nLength            : BYTE;
  eEnOceanSensorType : E_EnOceanSensorType;
  nData              : ARRAY[0..3] OF BYTE;
  nStatus            : BYTE;
  nTransmitterId     : UDINT;
END_STRUCT
END_TYPE


Appendix

E_EnOceanRotarySwitch

TYPE E_EnOceanRotarySwitch :
(
  eEnOceanRotarySwitchStep0 := 0,
  eEnOceanRotarySwitchStep1 := 1,
  eEnOceanRotarySwitchStep2 := 2,
  eEnOceanRotarySwitchStep3 := 3,
  eEnOceanRotarySwitchAuto  := 4
);
END_TYPE


Appendix

E_EnOceanSensorType

TYPE E_EnOceanSensorType :
(
  eEnOceanSensorTypePTM      := 5,
  eEnOceanSensorTypeSTM1Byte := 6,
  eEnOceanSensorTypeSTM4Byte := 7,
  eEnOceanSensorTypeCTM      := 8
);
END_TYPE


FB_EnOceanErrorcodes

附录

错误代码

值 (hex) | 描述
0x0000 | 无错
0x0001 | 校准和错误
0x0002 | 看门狗错误
0x0003 | 缓冲区溢出 (在 KL6023中)
0x0004 | 未收到数据