luci sequenziali a barra

Costruire un sequenziatore a 8 canali che preveda il seguente schema di accensione.

 sequenziatore
 sequenziatore2

L’effetto ottico, se le lampade sono disposte in linea verticale, così come i LED del modulo del PLC, è quello di un progressivo riempimento della barra dovuto a fonti luminose che compaiono in alto e man mano scendono fino ad occupare l’ultima posizione libera, cioè spenta. Una volta illuminata tutta la barra il ciclo riparte spegnendo le lampade e ricominciando il riempimento.

La sequenza è sufficientemente più complicata della precedente da spingerci a trovare una soluzione diversa, più funzionale e, magari, più versatile. Quella prevista utilizza un blocco dati per memorizzare le combinazioni di accensione della sequenza. Ogni data word contiene nel byte basso il codice di accensione delle lampade. L’ultima word contiene il dato (FFFF)16 che funge da terminatore di sequenza con le modalità che vedremo tra poco.

Il cuore del programma è costituito dal blocco FB10 che viene richiamato ogni 2 decimi di secondo e che provvedere a leggere i dati ed inviarli al modulo di uscita. Vediamo come.

MW100 costituisce il puntatore alla data word attuale. Il suo valore iniziale è 0. Il gruppo di istruzioni all’etichetta READ, successivo all’apertura del DB20, carica dapprima il valore (FFFF)16 in accumulatore, quindi il valore della data word corrente utilizzando un’istruzione indicizzata, e confronta i due valori: se diversi l’elaborazione continua trasferendo il contenuto di ACCU1, il dato della sequenza, al modulo 2 di uscita. In seguito, dopo l’incrementato del valore del puntatore, si ritorna al blocco chiamante cosicché, quando nuovamente richiamato FB4, la data word caricata sarà quella successiva.

Se il valore letto è invece uguale a (FFFF)16, l’elaborazione continua dapprima all’etichetta INIT dove si provvede all’azzeramento dell’indice per il ritorno all’inizio sequenza, quindi all’etichetta READ per la nuova lettura della prima combinazione della sequenza, DW0.

AWL
OB1   (Principale)
 awl
OB100 (Inizializzazione)
 awl2
FC10  (Accensione luci)
 awl4
DB20  (Dati per la sequenza)
      (VEDI AWL)

AWL

OB1   (Principale)

      UN    T0                   ‘chiamata a tempo del FB10

      CC    FC10

      UN    T0                   ‘base tempi da 0.2 secondi

      L     W#16#0020

      SA    T0

      BE

OB100 (Inizializzazione)

      L   0                      ‘reinizializzazione indice

      T   MW100

      BE

FC10  (Accensione luci)

      AUF   DB20                 ‘apertura blocco dati

READ: L     W#16#FFFF            ‘caricamento codice fine ciclo

      L     DBW[MW100]           ‘lettura del dato corrente

      ==I                        ‘e controllo se fine ciclo

      SPB   INIT

      T     AB4                  ‘accensione lampade

      L     MW100                ‘incremento dell’indice

      INC   2

      T     MW100

      BEA

INIT: L     0                    ‘reinizializzazione indice

      T     MW100

      SPA   READ

      BE

DB20  (Dati per la sequenza)

  0.0 WORD  2#0000_0000_0000_0000 ‘Dati del ciclo

  2.0 WORD  2#0000_0000_0000_0001 ‘

  4.0 WORD  2#0000_0000_0000_0010 ‘

  6.0 WORD  2#0000_0000_0000_0100 ‘

  8.0 WORD  2#0000_0000_0000_1000 ‘

 10.0 WORD  2#0000_0000_0001_0000 ‘

 12.0 WORD  2#0000_0000_0010_0000 ‘

 14.0 WORD  2#0000_0000_0100_0000 ‘

 16.0 WORD  2#0000_0000_1000_0000 ‘

 18.0 WORD  2#0000_0000_1000_0001 ‘

 20.0 WORD  2#0000_0000_1000_0010 ‘

 22.0 WORD  2#0000_0000_1000_0100 ‘

 24.0 WORD  2#0000_0000_1000_1000 ‘

 26.0 WORD  2#0000_0000_1001_0000 ‘

 28.0 WORD  2#0000_0000_1010_0000 ‘

 30.0 WORD  2#0000_0000_1100_0000 ‘

 32.0 WORD  2#0000_0000_1100_0001 ‘

 34.0 WORD  2#0000_0000_1100_0010 ‘

 36.0 WORD  2#0000_0000_1100_0100 ‘

 38.0 WORD  2#0000_0000_1100_1000 ‘

 40.0 WORD  2#0000_0000_1101_0000 ‘

 42.0 WORD  2#0000_0000_1110_0000 ‘

 44.0 WORD  2#0000_0000_1110_0001 ‘

 46.0 WORD  2#0000_0000_1110_0010 ‘

 48.0 WORD  2#0000_0000_1110_0100 ‘

 50.0 WORD  2#0000_0000_1110_1000 ‘

 52.0 WORD  2#0000_0000_1111_0000 ‘

 54.0 WORD  2#0000_0000_1111_0001 ‘

 56.0 WORD  2#0000_0000_1111_0010 ‘

 58.0 WORD  2#0000_0000_1111_0100 ‘

 60.0 WORD  2#0000_0000_1111_1000 ‘

 62.0 WORD  2#0000_0000_1111_1001 ‘

 64.0 WORD  2#0000_0000_1111_1010 ‘

 66.0 WORD  2#0000_0000_1111_1100 ‘

 68.0 WORD  2#0000_0000_1111_1101 ‘

 70.0 WORD  2#0000_0000_1111_1110 ‘

 72.0 WORD  2#0000_0000_1111_1111 ‘

 74.0 WORD  W#16#FFFF             ‘Terminatore di ciclo

^