FUNCTION_BLOCK "FB_S7Verb_Data_Get"
TITLE =
VERSION : 0.1
VAR_INPUT
INIT_COM : BOOL ;
I_Adr : ANY ;
I_ID : WORD ;
I_Start : BOOL ;
END_VAR
VAR_OUTPUT
O_NDR : BOOL ;
O_Error : BOOL ;
END_VAR
VAR
PLC1_COM : STRUCT
GET_REQ : BOOL ;
GET_BUSY : BOOL ;
GET_NDR : BOOL ;
GET_ERROR : BOOL ;
GET_COM_START : BOOL ; //Pos flank
GET_STATUS : WORD ;
GET_STAT_SAVE : WORD ;
END_STRUCT ;
S_Fl_1 : BOOL ;
STAT1 : BOOL ;
S_Get_1 : "GET";
END_VAR
VAR_TEMP
T_Adr : ANY ;
END_VAR
BEGIN
NETWORK
TITLE =
L P##I_Adr;
LAR1 ;
L W [AR1,P#0.0];
T LW 0;
L W [AR1,P#2.0];
T LW 2;
L W [AR1,P#4.0];
T LW 4;
L D [AR1,P#6.0];
T LD 6;
NETWORK
TITLE =Clear GET request to start initial communication
U #INIT_COM;
R #PLC1_COM.GET_REQ;
NETWORK
TITLE =Invoke GET function
U #PLC1_COM.GET_REQ;
= L 10.0;
BLD 103;
CALL #S_Get_1 (
REQ := L 10.0,
ID := #I_ID,
NDR := #PLC1_COM.GET_NDR,
ERROR := #PLC1_COM.GET_ERROR,
STATUS := #PLC1_COM.GET_STATUS,
ADDR_1 := #T_Adr,
RD_1 := #T_Adr);
NOP 0;
NETWORK
TITLE =M_Kom_Dosier_Stoer_Kein
//Start GET function with the rising edge of the clock marker if the GET function
//is not busy
//The REQ input parameter of the GET function is triggered with a rising edge as
//long as the GET function is not completed!
//
U #I_Start;
FP #S_Fl_1;
S #PLC1_COM.GET_REQ;
U( ;
O #PLC1_COM.GET_ERROR;
O #PLC1_COM.GET_NDR;
) ;
R #PLC1_COM.GET_REQ;
NOP 0;
NETWORK
TITLE =Evaluate STATUS information of the GET function
//If ERROR occured then save STATUS!
//
U #PLC1_COM.GET_ERROR;
SPBNB _001;
L #PLC1_COM.GET_STATUS;
T #PLC1_COM.GET_STAT_SAVE;
_001: NOP 0;
NETWORK
TITLE =
U #PLC1_COM.GET_NDR;
= #O_NDR;
NETWORK
TITLE =
U #PLC1_COM.GET_ERROR;
= #O_Error;
END_FUNCTION_BLOCK
FUNCTION_BLOCK "FB_S7Verb_Data_Put"
TITLE =
VERSION : 0.1
VAR_INPUT
INIT_COM : BOOL ;
I_Adr : ANY ;
I_ID : WORD ;
I_Start : BOOL ;
END_VAR
VAR_OUTPUT
O_NDR : BOOL ;
O_Error : BOOL ;
END_VAR
VAR
PLC1_COM : STRUCT
PUT_REQ : BOOL ;
PUT_BUSY : BOOL ;
PUT_DONE : BOOL ;
PUT_ERROR : BOOL ;
PUT_COM_START : BOOL ;
PUT_STATUS : WORD ;
PUT_STAT_SAVE : WORD ;
END_STRUCT ;
S_Fl_1 : BOOL ;
S_Put_1 : "PUT";
END_VAR
VAR_TEMP
T_Adr : ANY ;
END_VAR
BEGIN
NETWORK
TITLE =
L P##I_Adr;
LAR1 ;
L W [AR1,P#0.0];
T LW 0;
L W [AR1,P#2.0];
T LW 2;
L W [AR1,P#4.0];
T LW 4;
L D [AR1,P#6.0];
T LD 6;
NETWORK
TITLE =Clear PUT request to start initial communication
U #INIT_COM;
R #PLC1_COM.PUT_REQ;
NETWORK
TITLE =Invoke PUT function
U #PLC1_COM.PUT_REQ;
= L 10.0;
BLD 103;
CALL #S_Put_1 (
REQ := L 10.0,
ID := #I_ID,
DONE := #PLC1_COM.PUT_DONE,
ERROR := #PLC1_COM.PUT_ERROR,
STATUS := #PLC1_COM.PUT_STATUS,
ADDR_1 := #T_Adr,
SD_1 := #T_Adr);
NOP 0;
NETWORK
TITLE =
//Start PUT function with the rising edge of the clock marker if the PUT function
//is not busy.
//The REQ input parameter of the PUT function is triggered with a rising edge as
//long as the PUT function is not completed!
//
U #I_Start;
FP #S_Fl_1;
S #PLC1_COM.PUT_REQ;
U( ;
O #PLC1_COM.PUT_ERROR;
O #PLC1_COM.PUT_DONE;
) ;
R #PLC1_COM.PUT_REQ;
NOP 0;
NETWORK
TITLE =Evaluate STATUS information of the PUT function
//If ERROR occured then save STATUS!
U #PLC1_COM.PUT_ERROR;
SPBNB _001;
L #PLC1_COM.PUT_STATUS;
T #PLC1_COM.PUT_STAT_SAVE;
_001: NOP 0;
NETWORK
TITLE =
U #PLC1_COM.PUT_DONE;
= #O_NDR;
NETWORK
TITLE =
U #PLC1_COM.PUT_ERROR;
= #O_Error;
END_FUNCTION_BLOCK
FUNCTION_BLOCK "FB_Com"
TITLE =
VERSION : 0.1
VAR
S_Get_PuWe : "FB_S7Verb_Data_Get";
S_Put_PuWe : "FB_S7Verb_Data_Put";
S_Get_Dosier : "FB_S7Verb_Data_Get";
S_Put_Dosier : "FB_S7Verb_Data_Put";
S_Zae : INT ;
END_VAR
VAR_TEMP
T_NDR : BOOL ;
T_Error : BOOL ;
END_VAR
BEGIN
NETWORK
TITLE =
NETWORK
TITLE =
U "M_Com_Restart";
= L 1.0;
BLD 103;
U( ;
L #S_Zae;
L 0;
==I ;
) ;
UN "E_Quitt_Opt";
= L 1.1;
BLD 103;
CALL #S_Get_PuWe (
INIT_COM := L 1.0,
I_Adr := P#DB203.DBX0.0 BYTE 38,
I_ID := W#16#1,
I_Start := L 1.1,
O_NDR := #T_NDR,
O_Error := #T_Error);
NOP 0;
NETWORK
TITLE =
U( ;
O #T_NDR;
O #T_Error;
) ;
U( ;
L #S_Zae;
L 0;
==I ;
) ;
SPBNB _001;
L #S_Zae;
L 1;
+I ;
T #S_Zae;
_001: NOP 0;
NETWORK
TITLE =
U "M_Com_Restart";
= L 1.0;
BLD 103;
U( ;
L #S_Zae;
L 1;
==I ;
) ;
UN "E_Quitt_Opt";
= L 1.1;
BLD 103;
CALL #S_Put_PuWe (
INIT_COM := L 1.0,
I_Adr := P#DB202.DBX0.0 BYTE 18,
I_ID := W#16#1,
I_Start := L 1.1,
O_NDR := #T_NDR,
O_Error := #T_Error);
NOP 0;
NETWORK
TITLE =
U( ;
O #T_NDR;
O #T_Error;
) ;
U( ;
L #S_Zae;
L 1;
==I ;
) ;
SPBNB _002;
L #S_Zae;
L 3;
+I ;
T #S_Zae;
_002: NOP 0;
NETWORK
TITLE =
U "M_Com_Restart";
= L 1.0;
BLD 103;
U( ;
L #S_Zae;
L 2;
==I ;
) ;
UN "E_Quitt_Opt";
= L 1.1;
BLD 103;
CALL #S_Get_Dosier (
INIT_COM := L 1.0,
I_Adr := P#DB205.DBX0.0 BYTE 20,
I_ID := W#16#2,
I_Start := L 1.1,
O_NDR := #T_NDR,
O_Error := #T_Error);
NOP 0;
NETWORK
TITLE =
U( ;
O #T_NDR;
O #T_Error;
) ;
U( ;
L #S_Zae;
L 2;
==I ;
) ;
SPBNB _003;
L #S_Zae;
L 1;
+I ;
T #S_Zae;
_003: NOP 0;
NETWORK
TITLE =
U "M_Com_Restart";
= L 1.0;
BLD 103;
U( ;
L #S_Zae;
L 3;
==I ;
) ;
UN "E_Quitt_Opt";
= L 1.1;
BLD 103;
CALL #S_Put_Dosier (
INIT_COM := L 1.0,
I_Adr := "DB_Senden_Dosierung".DB_Phosphat,
I_ID := W#16#2,
I_Start := L 1.1,
O_NDR := #T_NDR,
O_Error := #T_Error);
NOP 0;
NETWORK
TITLE =
U( ;
O #T_NDR;
O #T_Error;
) ;
U( ;
L #S_Zae;
L 3;
==I ;
) ;
SPBNB _004;
L #S_Zae;
L 1;
+I ;
T #S_Zae;
_004: NOP 0;
NETWORK
TITLE =
U( ;
O( ;
L #S_Zae;
L 3;
>I ;
) ;
O "M_Com_Restart";
O "E_Quitt_Opt";
) ;
SPBNB _005;
L 0;
T #S_Zae;
_005: NOP 0;
NETWORK
TITLE =
U "M_Com_Restart";
R "M_Com_Restart";
END_FUNCTION_BLOCK