FUNCTION_BLOCK "FB_I-Device_ReceiveCarrier"
{ S7_Optimized_Access := 'TRUE' }
VERSION : 0.1
   VAR_INPUT 
      xInReq : Bool;   // Neue Daten von Sender
      stInData : "stCarrier";   // Daten von Sender
      xInReset : Bool;
   END_VAR

   VAR_OUTPUT 
      xOutNewData : Bool;   // Neue Daten empfangen
      stOutData : "stCarrier";   // Die neuen Daten
   END_VAR

   VAR_IN_OUT 
      xInOutAck : Bool;   // Ack an Sender
   END_VAR

   VAR 
      xReqOld : Bool;   // Flanke
   END_VAR

   VAR_TEMP 
      stDataEmpty : "stCarrier";
   END_VAR


BEGIN
	IF #xInReset THEN
	    #xOutNewData := FALSE;
	    #xInOutAck := FALSE;
	    #stOutData := #stDataEmpty;
	    #xReqOld := FALSE;
	END_IF;
	
	#xOutNewData := FALSE; //1 Zyklus
	
	IF #xInReq AND NOT #xReqOld THEN //Neue Daten von Sender
	    #stOutData := #stInData; //Daten raus schreiben
	    #xInOutAck := TRUE; //bestätigen
	    #xOutNewData := TRUE; //Neue Daten erhalten für weitere Auswertung, 1 Zyklus
	END_IF;
	
	IF NOT #xInReq AND #xInOutAck THEN //Handshake
	    #xInOutAck := FALSE;
	END_IF;
	
	#xReqOld := #xInReq;
END_FUNCTION_BLOCK

