FUNCTION_BLOCK "Befehl_PUT_INT"{ S7_Optimized_Access := 'FALSE' }
AUTHOR : VoR
FAMILY : Kom
VERSION : 0.3
//Baustein sendet einen Integer Befehl zur Partnerstation. Einmalig.
VAR_INPUT
ID : Word; // VerbindungsID zum Partner
END_VAR
VAR_IN_OUT
Befehl : Int;
Adresse : Int;
Datenbaustein : Int;
END_VAR
VAR
PUT_Instance {OriginalPartName := 'PUT_SFB_PART'; LibVersion := '1.3'} : PUT;
BSEND_LEN : Word;
Anypoint : "ANY_POINTER";
send : Bool;
save_status_Put : Word;
Angsttimer {OriginalPartName := 'IEC_TIMER'; LibVersion := '1.0'} : TON_TIME;
END_VAR
VAR_TEMP
index : Int;
SndADDR : Remote;
pSndADDR AT SndADDR : "ANY_POINTER";
END_VAR
VAR CONSTANT
"Null" : Word := 16#0000;
Anzahl : Int := 2;
END_VAR
BEGIN
IF (#Befehl <> 0) AND (#Datenbaustein <> 0) THEN
#send := true;
END_IF;
#pSndADDR := #Anypoint; // in Temp kopieren für überlagerung um Startwerte zu setzen
#pSndADDR.Anzahl_Werte := 1;
#pSndADDR.Startadresse := 16#8400_0000 OR SHL(IN := INT_TO_DWORD(#Adresse), N := 3);
#pSndADDR.DB_Nr := #Datenbaustein;
#PUT_Instance(REQ := #send,
ID := #ID,
ADDR_1 := #SndADDR,
SD_1 := #Befehl);
IF #PUT_Instance.ERROR THEN
#save_status_Put := #PUT_Instance.STATUS;
END_IF;
IF #PUT_Instance.DONE OR #PUT_Instance.ERROR OR #Angsttimer.Q THEN
#send := false;
#Befehl := 0;
END_IF;
#Angsttimer(IN := #send,
PT := t#1s);
END_FUNCTION_BLOCK