Per gestire valori di quota con valori superiori a 16 bits, occorre gestire il contagiri dell’encoder, in pratica ad ogni roll-over della lettura quota encoder occorre aggiungere o sottrarre il valore di 65536.
Attualmente non vi è un FB specifico, ma ne ho realizzato uno appositamente per questa richiesta, il FB oltre a gestire il contagiri, permette anche di effettuare su comando logico il preset di un valore di quota. Riporto il sorgente ST del blocco funzione ed il programma completo per il download.
VAR_INPUT
Preset : BOOL; { DE:”Preset command” }
EQuote : UINT; { DE:”Encoder quote” }
PQuote : UDINT; { DE:”Preset quote” }
END_VAR
VAR_OUTPUT
Quote : UDINT; { DE:”Quote” }
END_VAR
VAR
QMemo : UINT; { DE:”Quote memo” }
Space : INT; { DE:”Spazio percorso” }
END_VAR
{ CODE:ST }
(* Calcolo spazio percorso in tacche. *)
Space:=TO_INT(EQuote-QMemo); (* Spazio percorso *)
QMemo:=EQuote; (* Quote memo *)
IF (Space > 16#4000) THEN Space:=0-Space; END_IF;
(* Comando preset, su attivazione quota è impostata al valore di preset. *)
IF (Preset) THEN Space:=0; Quote:=PQuote; END_IF;
Quote:=Quote+TO_UDINT(Space); (* Quote *)