FUNCTION_BLOCK "FB1_Kommunikation"
{ S7_Optimized_Access := 'FALSE' }
VERSION : 0.1
VAR
"TCON_STATUS" : Word;
"TCON_FP_ERROR" : Bool;
"TCON_ERROR" : Bool;
"TCON_CONN_REQ" : Bool;
"TCON_DONE" : Bool;
"TCON_BUSY" : Bool;
"TCON_STATUS_SAV" : Word;
"TCON_CONNECTED" : Bool;
"TRCV_NDR" : Bool;
"TRCV_BUSY" : Bool;
"TRCV_STATUS" : Word;
"TRCV_RCVD_LEN" : Int;
"TRCV_STATUS_SAV" : Word;
"SEND_REQ_I" : Bool;
"SEND_REQ" : Bool;
"SEND_REQ_P" : Bool;
"SEND_DONE" : Bool;
"SEND_BUSY" : Bool;
"SEND_ERROR" : Bool;
"SEND_STATUS_SAV" : Word;
"SEND_STATUS" : Word;
"DISCONNECT" : Bool;
"TRCV_ERROR" : Bool;
"TRCV_RCVD_LEN_SAV" : Int;
END_VAR
BEGIN
NETWORK
TITLE = Störung Kommunikation zur Sicherheitssteuerung nicht aufgebaut
AN "DB6_PNOZ_multi_ETH".VInp_23;
A "Logisch 0";
L S5T#20S;
SE "EVERZ Kommunikation zur Sicherheitssteuerung nicht aufgebaut";
NETWORK
TITLE = Verbindungsanfrage bei Erfolg quittieren
A(;
A "Logisch 1";
S #TCON_CONN_REQ;
A #TCON_DONE;
R #TCON_CONN_REQ;
A #TCON_CONN_REQ;
);
NOT;
= #TCON_CONNECTED;
NETWORK
TITLE = Kommunikation beim Anlauf zurücksetzen
O "Anlaufmerker";
O "EVERZ Kommunikation zur Sicherheitssteuerung nicht aufgebaut";
R #TCON_CONN_REQ;
R #TCON_DONE;
R #DISCONNECT;
R #SEND_REQ;
R #TCON_CONNECTED;
NETWORK
TITLE = Verbindung aufbauen
// - Wird einmalig aufgebaut
A #TCON_CONN_REQ;
= %L0.0;
BLD 103;
AN #TCON_CONNECTED;
JNB Label_0;
CALL TCON, "TCON_DB"
{con_type := 'Any', id_type := 'Word'}
( REQ := %L0.0 ,
ID := W#16#0004 ,
DONE := #TCON_DONE ,
BUSY := #TCON_BUSY ,
ERROR := #TCON_ERROR ,
STATUS := #TCON_STATUS ,
CONNECT := P#DB20.DBX0.0 BYTE 64 );
Label_0: NOP 0;
NETWORK
TITLE = Verbindungsstatus retten
A #TCON_ERROR;
JNB Label_1;
L #TCON_STATUS;
T #TCON_STATUS_SAV;
Label_1: NOP 0;
NETWORK
TITLE = Daten senden
A #SEND_REQ;
= %L0.0;
BLD 103;
A #TCON_CONNECTED;
JNB Label_2;
CALL TSEND, "TSEND_DB"
{ptr_type := 'Any', value_type := 'Int', id_type := 'Word'}
( REQ := %L0.0 ,
ID := W#16#0004 ,
LEN := 30 ,
DONE := #SEND_DONE ,
BUSY := #SEND_BUSY ,
ERROR := #SEND_ERROR ,
STATUS := #SEND_STATUS ,
DATA := P#DB6.DBX30.0 BYTE 30 );
Label_2: NOP 0;
NETWORK
TITLE = Daten senden - Auftragsanstoß
A "Taktmerker";
AN #SEND_BUSY;
S #SEND_REQ_I;
A(;
O #SEND_DONE;
O #SEND_ERROR;
);
R #SEND_REQ_I;
A #SEND_REQ_I;
= #SEND_REQ;
NETWORK
TITLE = Daten senden - Status retten
A #SEND_ERROR;
JNB Label_3;
L #SEND_STATUS;
T #SEND_STATUS_SAV;
Label_3: NOP 0;
NETWORK
TITLE = Verbindung trennen bei Sendefehler
//Nicht verwendet!
L #SEND_STATUS_SAV;
L W#16#80C4;
==I;
= #DISCONNECT;
NETWORK
TITLE = Sendefehler - Status zurücksetzen
A(;
L #SEND_STATUS_SAV;
L W#16#80C4;
==I;
);
JNB Label_4;
L W#16#0000;
T #SEND_STATUS_SAV;
Label_4: NOP 0;
NETWORK
TITLE = Daten empfangen
A #TCON_CONNECTED;
= %L0.0;
BLD 103;
A #TCON_CONNECTED;
JNB Label_5;
CALL TRCV, "TRCV_DB"
{ptr_type := 'Any', value_type := 'Int', id_type := 'Word'}
( EN_R := %L0.0 ,
ID := W#16#0004 ,
NDR := #TRCV_NDR ,
BUSY := #TRCV_BUSY ,
ERROR := #TRCV_ERROR ,
STATUS := #TRCV_STATUS ,
RCVD_LEN := #TRCV_RCVD_LEN ,
DATA := P#DB6.DBX0.0 BYTE 30 );
Label_5: NOP 0;
NETWORK
TITLE = Länge des empfangenen Telegramms retten
A #TRCV_NDR;
JNB Label_6;
L #TRCV_RCVD_LEN;
T #TRCV_RCVD_LEN_SAV;
Label_6: NOP 0;
NETWORK
TITLE = Daten empfangen - Status retten
A #TRCV_ERROR;
JNB Label_7;
L #TRCV_STATUS;
T #TRCV_STATUS_SAV;
Label_7: NOP 0;
NETWORK
TITLE = Header setzen
L B#16#05;
T "DB6_PNOZ_multi_ETH".Header_OByte0;
L B#16#15;
T "DB6_PNOZ_multi_ETH".Header_OByte1;
L B#16#00;
T "DB6_PNOZ_multi_ETH".Header_OByte2;
L B#16#19;
T "DB6_PNOZ_multi_ETH".Header_OByte3;
L B#16#53;
T "DB6_PNOZ_multi_ETH".Header_OByte4;
L B#16#00;
T "DB6_PNOZ_multi_ETH".Header_OByte5;
L B#16#00;
T "DB6_PNOZ_multi_ETH".Header_OByte6;
L B#16#00;
T "DB6_PNOZ_multi_ETH".Header_OByte7;
L B#16#10;
T "DB6_PNOZ_multi_ETH".E_Checksum_21;
NETWORK
TITLE = Checksumme vergleichen
L "DB6_PNOZ_multi_ETH".Header_OByte4;
T "Checksumme PNOZ Multi";
L "DB6_PNOZ_multi_ETH".Header_OByte5;
+I;
T "Checksumme PNOZ Multi";
L "DB6_PNOZ_multi_ETH".Header_OByte6;
+I;
T "Checksumme PNOZ Multi";
L "DB6_PNOZ_multi_ETH".Header_OByte7;
+I;
T "Checksumme PNOZ Multi";
L %DB6.DBB38;
+I;
T "Checksumme PNOZ Multi";
L %DB6.DBB39;
+I;
T "Checksumme PNOZ Multi";
L %DB6.DBB40;
+I;
T "Checksumme PNOZ Multi";
L "DB6_PNOZ_multi_ETH".LED;
+I;
T "Checksumme PNOZ Multi";
L "DB6_PNOZ_multi_ETH".Request_Table_Nr;
+I;
T "Checksumme PNOZ Multi";
L "DB6_PNOZ_multi_ETH".Request_Segment_Nr;
+I;
T "Checksumme PNOZ Multi";
L "DB6_PNOZ_multi_ETH".Segment_Byte0;
+I;
T "Checksumme PNOZ Multi";
L "DB6_PNOZ_multi_ETH".Segment_Byte1;
+I;
T "Checksumme PNOZ Multi";
L "DB6_PNOZ_multi_ETH".Segment_Byte2;
+I;
T "Checksumme PNOZ Multi";
L "DB6_PNOZ_multi_ETH".Segment_Byte3;
+I;
T "Checksumme PNOZ Multi";
L "DB6_PNOZ_multi_ETH".Segment_Byte4;
+I;
T "Checksumme PNOZ Multi";
L "DB6_PNOZ_multi_ETH".Segment_Byte5;
+I;
T "Checksumme PNOZ Multi";
L "DB6_PNOZ_multi_ETH".Segment_Byte6;
+I;
T "Checksumme PNOZ Multi";
L "DB6_PNOZ_multi_ETH".Segment_Byte7;
+I;
T "Checksumme PNOZ Multi";
L "DB6_PNOZ_multi_ETH".Segment_Byte8;
+I;
T "Checksumme PNOZ Multi";
L "DB6_PNOZ_multi_ETH".Segment_Byte9;
+I;
T "Checksumme PNOZ Multi";
L "DB6_PNOZ_multi_ETH".Segment_Byte10;
+I;
T "Checksumme PNOZ Multi";
L "DB6_PNOZ_multi_ETH".Segment_Byte11;
+I;
T "Checksumme PNOZ Multi";
L "DB6_PNOZ_multi_ETH".Segment_Byte12;
+I;
T "Checksumme PNOZ Multi";
L "DB6_PNOZ_multi_ETH".reserviert;
+I;
T "Checksumme PNOZ Multi";
L B#16#00;
L "Checksumme PNOZ Multi";
-I;
T "Checksumme PNOZ Multi";
T "DB6_PNOZ_multi_ETH".A_Checksum_1;
NETWORK
TITLE =
A "Logisch 1";
= "DB6_PNOZ_multi_ETH".VOutp_00;
END_FUNCTION_BLOCK