conteggio ingressi chiusi (II soluzione)
Contare il numero degli ingressi chiusi del modulo al posto connettore 4.
In questo esercizio, allo scopo di utilizzare un’operazione di scorrimento, affrontiamo una soluzione differente rispetto a quella programmata nell’esempio precedente.
Il contatore di ingressi chiusi è ancora MB80 ed il suo valore viene ancora inizializzato a 0 all’inizio dell’OB1. MW10 rappresenta invece una maschera a 16 bit, uno solo dei quali per volta sarà ad 1. Il suo valore iniziale è 1 cioè (0000_0000_0000_0001)2, dove solo il bit 0 è vero.
Le prime tre istruzione del blocco FC4 caricano negli accumulatori i valori della maschera e della word di ingresso relativa al modulo e ne eseguono la AND bit a bit. Al primo passaggio, col valore della maschera appena visto, la AND dà risultato diverso da 0 solo se E0.0 è chiuso. Quindi il salto su zero previsto dall’istruzione successiva viene effettuato solo per ingresso aperto.
Se l’ingresso è chiuso, come fatto per l’esempio precedente, incrementiamo il byte di conteggio MB80.
In un caso o nell’altro i due percorsi di elaborazione si ricongiungono all’etichetta INC dove, dopo aver caricato la maschera in ACCU1, si provvede allo scorrimento a sinistra di una posizione. Il risultato dello scorrimento viene ritrasferito in MW10.
Il bit di maschera, dopo 16 scorrimenti, fuoriesce dall’accumulatore e viene memorizzato in A1. L’operazione successiva con bit A1=0 rimanda l’elaborazione alla prima istruzione del blocco per il test sull’ingresso successivo mentre, con A1=1 nessun salto viene eseguito e l’elaborazione del blocco termina.
LADDER |
OB1 |
FC4 |
AWL |
OB1 |
L L#0 ‘inizializzazione merker byte
T MB80 ‘di conteggio L L#1 ‘inizializzazione maschera T MW10
UC FC4
BE |
FC4 |
TEST:
L MW10 ‘controllo dell’ingresso L EW0 ‘non mascherato UW SPZ INC
L MB80 ‘l’ingresso è attivo: L L#1 ‘incremento del merker byte +I ‘di conteggio T MB80
INC: L MW10 ‘shift della maschera per SLW 1 ‘esame ingresso successivo T MW10 SPMZ TEST ‘controllo se finito
BE |