A scopo didattico ecco il sorgente ST di un nuovo FB che prevede anche il preset, l’ho chiamato CTUPreset.
IF (CU AND NOT CUMemo) THEN
IF (CV < PV) THEN CV:=CV+1; END_IF;
END_IF;
CUMemo:=CU; (* CU status memo *)
IF P THEN CV:=Preset; END_IF; (* Preset command *)
IF R THEN CV:=0; END_IF; (* Reset command *)
Q:=(CV >= PV); (* Output management *)
Come vedi ho aggiunto due ingressi P (BOOL) e Preset (UDINT) che permettono su comando di presettare il valore in uscita. Inoltre già che ho modificato ho anche modificato le variabili di conteggio in UDINT, in questo modo il counter può contare fino a 4294967295.
Allego stampa e progetto sorgente, come vedi nel programma LD al primo loop forzo il preset del CTU con la variabile Pieces che è anche la variabile valorizzata con il valore CV del CTU. Naturalmente questa variabile andrà allocata in una zona RETAIN.