Commutazione di un uscita con un ingresso
Nel progetto toggle sono proposte sei diverse soluzioni per commutare il valore di un'uscita usando un solo ingresso. Il progetto è interessante perché mostra come esistano varie soluzioni - non sempre semplici - per risolvere un problema apparentemente banale e per introdurre i linguaggi FUP e SCL alternativi al KOP (ladder).
Soluzioni
Ogni soluzione è proposta in una diversa FC.
FUP
Usa il linguaggio di programmazione grafico FUP (che non usiamo mai) per realizzare una soluzione che sfrutti la funzione logica XOR. Il blocco P
rileva il fronte dell'ingresso, il blocco x
fa lo XOR col valore precedente (l'uscita è 1 se il valore precedente è 0 ed è zero se il valore precedente è 1) e il blocco =
assegna il valore all'uscita.
JUMP
Questa soluzione in ladder usa l'istruzione di salto JMPN
che salta all'etichetta (label) “STOP” se il risultato logico combinatorio (RLO, result of logic operation) vale 0. In assenza del fronte non c'è il toggle del valore altrimenti il segmento 2 commuta il valore dell'uscita. E' necessario usare il merker di sistema Firstscan
per impostare un valore iniziale dell'uscita.
LAD1
Questa soluzione in ladder/KOP usa una variabile di appoggio TMP per commutare l'uscita. In corrispondenza del fronte
- quando KM1 è 0 TMP setta KM1
- quando è 1 TMP vale zero e resetta KM1
LAD2
Questa soluzione è simile a quella di LAD3 ma genera un impulso sul fronte dell'ingresso senza usare il contatto -|P|-
ma usando un merker di appoggio FP_SB3. Naturalmente è più comodo usare l'istruzione apposita ma è interessante saper che c'è un'alternativa.
LAD3
Forse è la soluzione più semplice e non è nemmeno necessaria una spiegazione. Si osservi che la funzione svolta dai quattro contatti non è altro che la funzione logica XOR (la prima forma canonica della sua tabella della verità infatti è `bar(A)B + A bar(B)`)
SCL
Usando l'SCL, un linguaggio testuale strutturato simule al C o al Pascal, la soluzione è semplice: si sfrutta la variabile di stato pressed
e si confrontano i valori per negare il valore dell'uscita.