(* @NESTEDCOMMENTS := 'Yes' *) (* @PATH := '\/TEMP' *) (* @OBJECTFLAGS := '0, 8' *) (* @SYMFILEFLAGS := '2048' *) FUNCTION_BLOCK FB_BECKHOFF_EL5101_INC VAR_INPUT E_InfoData_AdsAddr_port AT%I* : INT; E_InfoData_State AT%I* : INT; E_CounterValue AT%I* : UINT; UEboReferenzieren : BOOL; UErSkalierung : REAL; UErRefWertMm : REAL; END_VAR VAR_OUTPUT A_SetCounter AT%Q* : BOOL; A_SetCounterValue AT%Q* : UINT; UAboReferenziert : BOOL; UArWert: REAL; END_VAR VAR pfReferenzieren : R_TRIG; END_VAR (* @END_DECLARATION := '0' *) (***************************************************) (** Beckhoff EL5101 Incremental Encoder Interface **) (***************************************************) a_Referenzieren(); UArWert := E_CounterValue / UErSkalierung; END_FUNCTION_BLOCK ACTION a_Referenzieren: pfReferenzieren(clk:= UEboReferenzieren AND E_InfoData_State = 8 (* Op *) ); UEboReferenzieren := FALSE; A_SetCounter := 0; (* z.B. RefWertMm = 432 Skalierung = 25 => 10800 *) A_SetCounterValue := REAL_TO_UINT(UErRefWertMm * UErSkalierung); (* TODO: Andere Typen? *) IF pfReferenzieren.Q THEN A_SetCounter := 1; UAboReferenziert := TRUE; END_IF END_ACTION