FUNCTION_BLOCK FB201
// Bausteinparameter
VAR_INPUT
// Eingangsparameter
IN_Scanner_Ergebniss: STRING [64];
IN_Scanner_Ein: BOOL;
IN_Scanner_Ergeb_Akt:BOOL;
IN_Stoerung_Qitt:BOOL;
Stationsnummer:INT;
TCP_CONNECTED:BOOL;
TCP_Verbindung:WORD;
END_VAR
VAR_IN_OUT
// Durchgangsparameter
IO_Text_Fehlermeldung:STRING[64];
IN_iTAC_Senden:BOOL;
IO_iTAC_IO:BOOL;
IO_iTAC_NIO:BOOL;
IO_iTac_Fehlermeldung:BOOL;
END_VAR
VAR_OUTPUT
// Ausgangsparameter
O_Busy:BOOL;
O_Done:BOOL;
END_VAR
VAR_TEMP
// temporäre Variablen
test:ANY;
END_VAR
VAR
// statische Variablen
VAR_Text_Fehlermeldung:STRING[64];
iTAC_DMC_String:STRING[64];
Rueckmeldung_iTAC:STRING[64];
iTAC_DMC_String_Teil1:String[64];
iTAC_DMC_String_Teil2:String[64];
iTAC_IO:BOOL;
iTAC_NIO:BOOL;
iTAC_Fehlermeldung:BOOL;
Stationsnummer_Konst:ARRAY[1..4]OF STRING[64];
Stationsnummer_STRING:STRING[64];
IO_Ergebniss:INT;
NIO_Ergebniss:INT;
Send:FB63;
FP_Send_Start :BOOL;
input_FP_Start_Send:BOOL;
Send_Start:BOOL;
Send_Done:BOOL;
Send_Busy:BOOL;
Send_Error:BOOL;
Send_Status:WORD;
Recive:FB64;
FP_Recive_Start :BOOL;
input_FP_Start_Resive:BOOL;
Recive_Start:BOOL;
Recive_NDR:BOOL;
Recive_Busy:BOOL;
Recive_Error:BOOL;
Recive_Status:WORD;
Recive_LEN:INT;
Schrittkette:INT;
Abfrage_Recive_LEN:INT;
I:INT;
NIO_Suchstring:ARRAY [1..5]OF STRING[2];
at_str_Send AT iTAC_DMC_String : STRUCT // AT-Sicht auf die Variable "str"
max_length : BYTE; // Maximale-Länge des Strings
act_length : BYTE; // Aktuelle Länge des Strings
chars: ARRAY [1..64] OF CHAR; // Die einzelnen Zeichen
END_STRUCT;
at_str_Recive AT Rueckmeldung_iTAC : STRUCT // AT-Sicht auf die Variable "str"
max_length : BYTE; // Maximale-Länge des Strings
act_length : BYTE; // Aktuelle Länge des Strings
chars: ARRAY [1..64] OF CHAR; // Die einzelnen Zeichen
END_STRUCT;
HM_Ablauf:STRUCT
Send_Daten_Gesendet:BOOL;
Send_Daten_Error:BOOL;
Recive_Daten_Empfangen:BOOL;
Recive_Daten_Error:BOOL;
END_STRUCT;
END_VAR
//STRING INIT
//Rueckmeldung_iTAC:='1234567890123456789012345678901234567890123456789012345678901234';
// iTAC_DMC_String:= ' ';
// Vorgaben Rückmeldungen
Stationsnummer_Konst[1]:='01;';
Stationsnummer_Konst[2]:='02;';
Stationsnummer_Konst[3]:='03;';
Stationsnummer_Konst[4]:='04;';
//Vorbelegung NIO_Suchstring
NIO_Suchstring[1]:='1;';
NIO_Suchstring[2]:='2;';
NIO_Suchstring[3]:='3;';
NIO_Suchstring[4]:='4;';
NIO_Suchstring[5]:='9;';
// Stationnummer auswerten
Stationsnummer_STRING:=Stationsnummer_Konst[Stationsnummer];
IF NOT IN_Scanner_Ein AND IN_Scanner_Ergeb_Akt THEN
// iTAC STRING zusammensetzten
iTAC_DMC_String_Teil1:=CONCAT(IN1 := '' // IN: STRING
,IN2 :=Stationsnummer_Konst[Stationsnummer] // IN: STRING
); // STRING
iTAC_DMC_String_Teil2:=CONCAT(IN1 := iTAC_DMC_String_Teil1 // IN: STRING
,IN2 :=IN_Scanner_Ergebniss // IN: STRING
); // STRING
iTAC_DMC_String:=CONCAT(IN1 := iTAC_DMC_String_Teil2 // IN: STRING
,IN2 :='$r$l'
); // STRING
END_IF;
IF IN_iTAC_Senden AND NOT O_Busy AND NOT IO_iTac_Fehlermeldung THEN
Schrittkette:=1;
END_IF;
CASE Schrittkette OF
0 : O_Busy:=False;
input_FP_Start_Send := false;
FP_Send_Start:= false;
input_FP_Start_Resive:= false;
FP_Recive_Start:=false;
Send_Start:=false;
Recive_Start:=false;
IO_Ergebniss:=0;
NIO_Ergebniss:=0;
;
1 : IF TCP_CONNECTED THEN
// impuls beim OFF-ON
input_FP_Start_Send := True;
Send_Start := input_FP_Start_Send AND NOT FP_Send_Start ;
FP_Send_Start := input_FP_Start_Send ;
input_FP_Start_Resive := True;
Recive_Start := input_FP_Start_Resive AND NOT FP_Recive_Start ;
FP_Recive_Start := input_FP_Start_Resive ;
O_Busy:=true;
O_Done:=false;
IN_iTAC_Senden:=false;
Schrittkette:=3;
END_IF;;
3 : IF HM_Ablauf.Send_Daten_Gesendet THEn
input_FP_Start_Send := false;
FP_Send_Start:= false;
HM_Ablauf.Send_Daten_Gesendet:=false;
Schrittkette:=10;
END_IF;;
IF HM_Ablauf.Send_Daten_Error THEN
input_FP_Start_Send := false;
FP_Send_Start:= false;
HM_Ablauf.Send_Daten_Error:=false;
Schrittkette:=0;
END_IF;;
10 : IF HM_Ablauf.Recive_Daten_Empfangen THEN
input_FP_Start_Resive:= false;
FP_Recive_Start:=false;
HM_Ablauf.Recive_Daten_Empfangen:=false;
Schrittkette:=15;
END_IF;;
IF HM_Ablauf.Recive_Daten_Error THEN
input_FP_Start_Resive:= false;
FP_Recive_Start:=false;
HM_Ablauf.Recive_Daten_Error:=false;
Schrittkette:=0;
END_IF;;
15 : IO_Ergebniss:= FIND(IN1 := Rueckmeldung_iTAC // IN: STRING
,IN2 := '0;OK;' // IN: STRING
); // INT
IF IO_Ergebniss <>8 THEN
FOR I := 1 TO 5 BY 1 DO
NIO_Ergebniss:= FIND(IN1 := Rueckmeldung_iTAC // IN: STRING
,IN2 := NIO_Suchstring[I] // IN: STRING
); // INT
IF NIO_Ergebniss <>0 THEN
EXIT;
END_IF;
;
END_FOR;
END_IF;
IF IO_Ergebniss=8 OR NIO_Ergebniss <>0 THEN
Schrittkette:=20;
END_IF;
20 : IF IO_Ergebniss = 8 THEN
iTAC_IO:=true;
iTAC_NIO:=False; // Anweisungsteil_IF
Schrittkette:=25;
END_IF;
IF NIO_Ergebniss <>0 THEN
iTAC_IO:=false;
iTAC_NIO:=true; // Anweisungsteil_IF
iTAC_Fehlermeldung:=true;
VAR_Text_Fehlermeldung:= DELETE(IN := Rueckmeldung_iTAC // IN: STRING
,L :=NIO_Ergebniss // IN: INT
,P :=1 // IN: INT
); // STRING
Schrittkette:=25;
END_IF;;
25 : IF iTAC_IO OR iTAC_NIO AND NOT iTAC_Fehlermeldung THEN
O_Busy:=false;
O_Done:=true;
Schrittkette:=0;
//Leerstring Eintragen 1234567890123456789012345678901234567890123456789012345678901234
Rueckmeldung_iTAC:=' ';
END_IF;;
END_CASE;
// Störung Itac Qittieren
IF iTAC_Fehlermeldung AND IN_Stoerung_Qitt THEN
iTAC_Fehlermeldung:=false;
//Leerstring Eintragen 1234567890123456789012345678901234567890123456789012345678901234
VAR_Text_Fehlermeldung:=' ';
END_IF;
// INOUt Schnittstelle Beschreiben
IO_iTAC_IO:=iTAC_IO;
IO_iTAC_NIO:=iTAC_NIO;
IO_iTac_Fehlermeldung:=iTAC_Fehlermeldung;
IO_Text_Fehlermeldung:=VAR_Text_Fehlermeldung;
// Aufruft Tsend Bausteine
Send(REQ := Send_Start // IN: BOOL
,ID :=TCP_Verbindung // IN: WORD
,LEN := 64 // IN: INT
,DATA :=at_str_Send.chars);// INOUT: ANY
Send_Done:= Send.DONE; // OUT: BOOL
Send_Busy:= Send.BUSY; // OUT: BOOL
Send_Error:= Send.ERROR; // OUT: BOOL
Send_Status:= Send.STATUS; // OUT: WORD
// at_str_Send.max_length :=64;
// at_str_Send.act_length :=64;
IF Send_Done THEN
HM_Ablauf.Send_Daten_Gesendet:=true;
END_IF;
IF Send_Error THEN
HM_Ablauf.Send_Daten_Error:=true;
END_IF;
// Aufruft TResive Bausteine
Recive(EN_R :=Recive_Start // IN: BOOL
,ID :=TCP_Verbindung // IN: WORD
,LEN :=0 // IN: INT
,DATA :=at_str_Recive.chars // INOUT: ANY
);
Recive_NDR := Recive.NDR; // OUT: BOOL
Recive_Busy := Recive.BUSY; // OUT: BOOL
Recive_Error := Recive.ERROR; // OUT: BOOL
Recive_Status:= Recive.STATUS; // OUT: WORD
Recive_LEN:= Recive.RCVD_LEN; // OUT: INT
at_str_Recive.max_length :=64;
at_str_Recive.act_length :=64;
IF Recive_NDR THEN
HM_Ablauf.Recive_Daten_Empfangen:=true;
END_IF;
IF Recive_Error THEN
HM_Ablauf.Recive_Daten_Error:=true;
END_IF;
IF Recive_LEN <> 0 THEN
Abfrage_Recive_LEN:=Recive_LEN;
END_IF;
END_FUNCTION_BLOCK