freccia.gif (877 bytes)  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 nell’uscita (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 l’operazione è 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 nell’uscita 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.
La riproduzione parziale o totale dei contenuti di questo sito è vietata. I marchi esposti o menzionati sono proprietà dei rispettivi intestatari.