Vai al contenuto

Eseguire iterazione (Ciclo FOR) su membri struttura

Home Forum Programmazione IEC 61131 (LogicLab) Eseguire iterazione (Ciclo FOR) su membri struttura

Stai visualizzando 2 post - dal 1 a 2 (di 2 totali)
  • Autore
    Post
  • #35973
    Anonimo
    Inattivo

    In un mio programma utilizzo una struttura dati per gestire delle temporizzazioni, ogni membro della struttura è una variabile UDINT che contiene il tempo di riferimento per la temporizzazione.

    Volendo eseguire un ciclo FOR su tutti i membri della struttura come posso fare ?

    #39455
    Sergio Bertana
    Amministratore del forum

    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).

Stai visualizzando 2 post - dal 1 a 2 (di 2 totali)
  • Devi essere connesso per rispondere a questo topic.