FUNCTION_BLOCK FB_Measure_Pulse VAR_INPUT Signal :BOOL;//Signal A (Rising / Falling Edge detection) END_VAR VAR_OUTPUT Delta :TIME;//Time measured END_VAR VAR Sample_On : TIME;//Time Sampled when Signal is on Sample_Off : TIME;//Time Sampled when signal is off Edge_On : BOOL;//Edge Trigger (Rising) Edge_Off : BOOL;//Edge Trigger (Falling) END_VAR code: IF Signal AND (NOT Edge_On) THEN //Rising Edge of signal Sample_On := TIME(); //Edge_On := TRUE; Edge_On := TRUE ; Edge_Off := FALSE; END_IF; IF (NOT Signal) AND (NOT Edge_Off) THEN Sample_Off := TIME(); //Edge_Off := TRUE; Edge_Off := TRUE; END_IF; IF (Edge_On AND Edge_Off) THEN //Delta := TIME_TO_DINT(Change of output format , to your use); Delta := Sample_Off - Sample_On; //Value in time format Edge_On := FALSE; END_IF;