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).
Ogni soluzione è proposta in una diversa FC.
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.
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.
Questa soluzione in ladder/KOP usa una variabile di appoggio TMP per commutare l'uscita. In corrispondenza del fronte
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.
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)`)
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.