FUNCTION_BLOCK "FB_SSCCAI"
{ S7_Optimized_Access := 'TRUE' }
VERSION : 0.1
   VAR_INPUT 
      udt_LetzteMessung : "udt_SSCCMeasurement";
   END_VAR

   VAR_IN_OUT 
      udt_SSCC : Array[0..9] of "udt_SSCCMeasurement";
      xInOutClear : Bool;
   END_VAR

   VAR 
      Lrtrig_S_SchiebenUm1 {InstructionName := 'R_TRIG'; LibVersion := '1.0'; S7_SetPoint := 'False'} : R_TRIG;
      Li_S_IndexSchieberegister { S7_SetPoint := 'True'} : Int;
   END_VAR

   VAR_TEMP 
      udt_SSCC_leer : Array[0..9] of "udt_SSCCMeasurement";
   END_VAR


BEGIN
	REGION Info
	(* ------------------------------------------------------------------------------------------------
	   Modulname    : FB_LaengenmessungAI
	   Date         : 20.10.2025              
	   Author       : Kannler Thomas / Automated-Intelligence
	   Info         : FB für die Visualisierung der letzten 10 Messungen
	                              
	   ChangeLog:   : 
	   ---------------------------------------------------------------------------------------------- *)
	END_REGION
	
	REGION Flankenauswertung
	    #Lrtrig_S_SchiebenUm1(CLK:=#udt_LetzteMessung <> #udt_SSCC[0]);
	    
	END_REGION
	
	REGION Schieberegister
	    IF #Lrtrig_S_SchiebenUm1.Q THEN
	        // Von vorne nach hinten schieben: 8 -> 9, 7 -> 8, 6 -> 7, ..., 0 -> 1
	        FOR #Li_S_IndexSchieberegister := 9 TO 1 BY -1 DO
	            #udt_SSCC[#Li_S_IndexSchieberegister] := #udt_SSCC[#Li_S_IndexSchieberegister - 1];
	        END_FOR;
	        
	        // Neuen Datensatz vorne an Index 0 speichern
	        #udt_SSCC[0] := #udt_LetzteMessung;
	    END_IF;
	END_REGION
	
	REGION Liste leeren
	    IF #xInOutClear THEN
	        #xInOutClear := FALSE;
	        #udt_SSCC := #udt_SSCC_leer;
	    END_IF;
	END_REGION
	
END_FUNCTION_BLOCK

