La task Slow è eseguita tipicamente ogni 10 mSec (E’ possibile impostare un tempo di esecuzione diverso vedi funzione SysSetTaskLpTime). Eseguendo il programma inserito nella task ogni 10 mS tutte le temporizzazioni avranno degli errori che possono arrivare ad eguagliare nel caso peggiore il tempo di esecuzione della task (10 mS).
Nel tuo caso dovendo gestire tempi di 30 mS è evidente che l’errore che ti devi aspettare è relativamente grande rispetto a quanto il tuo programma necessita e quindi l’effetto sulla gestione dell’uscita colla sarà evidente. Per risolvere il problema occorre che tutta la logica di gestione programma sia eseguita molto velocemente, almeno 10 volte più veloce dei tempi che tu devi gestire).
Per ottenere questo puoi semplicemente eseguire il programma nella task fast del sistema, questa task è eseguita di default ogni 1 mS, ma volendo usare tempi minore puoi definire il tempo di esecuzione con la funzione SysSetTaskLpTime.
Attenzione! Per avere la gestione immediata degli I/O durante l’esecuzione di un programma nella task fast, occorre acquisire gli input con la funzione SysGetPhrDI e gestire le uscite con la funzione SysSetPhrDO. Se sono sufficienti 2 I/O è preferibile utilizzare gli I/O del modulo CPU con il blocco funzione CPUModuleIO.
Allego un programma LogicLab che gestisce nella task fast il ciclo colla così come me lo hai descritto (Stampa e Download programma).