L’iterazione sui membri di una struttura dati è possibile solo se tutti i membri della struttura sono dello stesso tipo, nel tuo caso mi sembra di capire che sono tutti UDINT quindi è sicuramente possibile iterare.
Per gestire le temporizazzioni si utilizza il valore di tempo di sistema ritornato dalla funzione SysGetSysTime, è un un UDINT che si incrementa ogni uS, al valore massimo esegue overflow a zero, non è possibile quindi effettuare comparazioni dirette con il tempo di riferimento ma occorre sempre eseguire la differenza. Nel seguente esempio viene attivato Timeout se l’ingresso Di00M00 rimane attivo per più di un secondo.
IF NOT(Di00M00) THEN TimeBf:=SysGetSysTime(TRUE);
ELSE IF ((SysGetSysTime(TRUE)-TimeBf) >= 1000000) THEN Timeout:=TRUE; END_IF;
END_IF;
Ho realizzato il programma TimerStruct che illustra l’utilizzo di una struttura di timers dove utilizzo una struttura dati che contiene tutti i tempi di riferimento per mostrare come eseguire un ciclo FOR di iterazione (Ecco la stampa del programma ed il programma sorgente).