Per curiosità ho analizzato il problema ed ho eseguito il calcolo del tempo di esecuzione del tuo programma, ho inserito in testa al tuo programma il salvataggio del tempo di sistema, ed in coda il calcolo del tempo di esecuzione.
VAR
TimeBf : UDINT; (* Time buffer (uS) *)
ExTime : UDINT; (* Tempo di esecuzione (uS) *)
MaxTime : UDINT; (* Massimo tempo di esecuzione (uS) *)
END_VAR
TimeBf:=SysGetSysTime(TRUE);
...
Programma cliente di cui calcolare tempo esecuzione.
...
ExTime:=SysGetSysTime(TRUE)-TimeBf;
IF (ExTime > MaxTime) THEN MaxTime:=ExTime; END_IF;
Il tempo di esecuzione è di 315uS con un massimo di 320uS quindi occupa un terzo del tempo di task (1mS), infatti gira senza problemi. Ora visto che tu lamentavi il problema immagino avessi ridotto il tempo di esecuzione della task Fast, o che avessi altro codice da eseguire.
Nota: Tutto il tempo è necessario per accedere alla scheda periferica di lettura encoder, se commento la riga di codice che esegue la lettura il tempo necessario per eseguire il programma passa a 7uS.