Programmazione | aggiornato a Novembre 1999 |
|
Il modello di programmazione è stato già esposto in parte durante la spiegazione del funzionamento del circuito, qundi qui verrà integrata. Come elemento programmato mi verrebbe da dire, ma è un esempio forse un pò tirato per i capelli, che questo PLC è una macchina di Harward. Questo tipo di modello calza bene se non fosse che questo controllore non possiede memoria se non il buffer di uscita.
Istruzione | Nome | Descrizione | Operazione simbolica |
NOP | Nessuna operazione | - | |
END IF | Fine di un blocco condizionale | - | |
INCC | Incrementa C | C=C+1 | |
DECC | Decrementa C * | C=C-1 | |
LOADC | Carica il selettore in C * | C=Selettore | |
START | Avvia il timer | - | |
LOADT | Carica il selettore in T * | T=Selettore | |
LDX | Scrive il selettore in X | X=Mux(Selettore) | |
LDY | Scrive R nelluscita (selettore) | Y=DMux(Selettore) | |
IF | Inizio blocco condizionale * | - | |
END | Fine programma | - | |
NOP | Nessuna Operazione | - | |
AND | R=X AND Mux(selettore) | - | |
OR | R=X OR Mux(selettore) | - | |
NOT | R=NOT Mux(selettore) | - | |
XOR | R=X XOR Mux(selettore) | - | |
L "*" significa che loperazione è condizionata dal valore logico del (selettore) |
ESEMPIO, "Espletazione di una funzione Booleana in codice macchina"
La funzione da prendere in considerazione è la seguente.
Y5=X0 XOR (X3 OR NOT (X1 AND X7)
Il programma in codice macchina si tramuta ne seguente.
Selettore = 1, CK O ; Salvo in O X1
Selettore = 7, AND ; Faccio un AND tra O (X1) e il selettore (X7)
Selettore = 8, NOT ; Nego R che contiene il risultato precedente
Selettore = 3, OR ; Faccio un OR tra R e X3
Selettore = 0, XOR ; Faccio uno XOR tra R e XO
Selettore = 5, CK Y ; Passo R nelluscita in Y5
Esempio, "Conteggio"
Il problema da risolvere è quello di un sistema di conteggio che conta -1 se si chiude X0. Quando X0 è stato chiuso 5 volte viene portato a 1 Y1.
IF [NOT(Y0)] THEN
LOADC(5)
Y0=NOT(Y0)
END IF
DEC=X0
Y1=NOT(NOT(C))
Y0=NOT(C)
Codice macchina.
Selettore = B, NOT ; Porto in R la negazione si Y0
Selettore = 8, CK IF ; Entro nel blocco IF nel caso R sia 1
Selettore = 5, LOADC ; Carico in C 5
Selettore = B, NOT ; Nego R
Selettore = B, CK Y ; Poto R in Y0
Selettore = X, CLR IF ; Fine del blocco IF
Selettore = 0, INC ; Se X0 e chiuso allora incremento C
Selettore = C, NOT ; Posto in R la negazione di Y1
Selettore = 8, NOT ; Porto in R la negazione di R
Selettore = C, CK Y ; Porto R in uscita Y1
Selettore = 9, NOT ; Nego C
Selettore = B, CK Y ; Porto R in uscita Y0
ESEMPIO, "TIMER"
Qui il problema da risolvere è quello di ritardare di 10 secondi il trasferimento in uscita del segnale di partenza X0. Non fornisco il codice macchina perché è desumibile dai precedenti esempi.
IF [NOT(Y0)] THEN
LOADT(A)
Y0=NOT(Y0)
END IF
START=X0
Y1=T
IF [T] THEN
Y0=NOT(Y0)
END IF
|
||
|
Contenuti originali sono
copyright 2000-2002 Alessandro Cappelloza. Tutti i diritti riservati -
copyright © Porzillo Soft Inc. 2000-2002. |