COPPI & PINZI S.D.F.

VIA F.HAMMAN 51

53021 ABBADIA S.S.

SIENA

ISTRUZIONI MicroPLC D1208

Elenco di tutte le istruzioni del MicroPLC D1208

NOP

AND_POP

OR_POP

PRESET

RESET

START_PROGRAM

END_PROGRAM

PROG_STOP

PROG_RUN

ENABLE

DISABLE

MASTER

SLAVE

CPL

INC

DEC

ADD_POP

SOTT_POP

DIV_POP

MULT_POP

PUSH

POP

TX_BIN

RET

SWAP

CLR_RX

TX_RX

LOAD_RELE

LOAD_RELE_NOT

LOAD_INPUT

LOAD_INPUT_NOT

LOAD_OUT

LOAD_OUT_NOT

LOAD_TIMER

LOAD_TIMER_NOT

LOAD_COUNTER

LOAD_COUNTER_NOT

LOAD_SPEC

LOAD_SPEC_NOT

LOAD_OROL

LOAD_OROL_NOT

STORE_RELE

STORE_OUT

STORE_TIMER

STORE_COUNTER

STORE_OROL

STORE_SPEC

AND_RELE

AND_RELE_NOT

AND_INPUT

AND_INPUT_NOT

AND_OUT

AND_OUT_NOT

AND_TIMER

AND_TIMER_NOT

AND_COUNTER

AND_COUNTER_NOT

AND_SPEC

AND_SPEC_NOT

AND_OROL

AND_OROL_NOT

AND_F_UP

AND_F_DOWN

OR_RELE

OR_RELE_NOT

OR_INPUT

OR_INPUT_NOT

OR_OUT

OR_OUT_NOT

OR_TIMER

OR_TIMER_NOT

OR_COUNTER

OR_COUNTER_NOT

OR_SPEC

OR_SPEC_NOT

OR_OROL

OR_OROL_NOT

PLC_NUM

PLC_COM

SHIFT_R

SHIFT_L

ROT_R

ROT_L

DELAY

READ_INPUT

READ_OUT

READ_RELE

READ_SPEC_IN

READ_SPEC_OUT

WRITE_INPUT

WRITE_OUT

WRITE_RELE

WRITE_SPEC_IN

WRITE_SPEC_OUT

ADD_MEM

SOTT_MEM

DIV_MEM

MULT_MEM

READ_MEM

WRITE_MEM

INC_MEM

DEC_MEM

READ_IND

WRITE_IND

WAIT_RX

READ_RX

ASC_HEX

PEEK

POKE

TX_VAR

LOAD_RELE_IND

LOAD_RELE_NOT_IND

LOAD_INPUT_IND

LOAD_INPUT_NOT_IND

LOAD_OUT_IND

LOAD_OUT_NOT_IND

LOAD_TIMER_IND

LOAD_TIMER_NOT_IND

LOAD_COUNTER_IND

LOAD_COUNTER_NOT_IND

LOAD_SPEC_IND

LOAD_SPEC_NOT_IND

LOAD_OROL_IND

LOAD_OROL_NOT_IND

STORE_RELE_IND

STORE_OUT_IND

STORE_TIMER_IND

STORE_COUNTER_IND

STORE_OROL_IND

STORE_SPEC_IND

AND_RELE_IND

AND_RELE_NOT_IND

AND_INPUT_IND

AND_INPUT_NOT_IND

AND_OUT_IND

AND_OUT_NOT_IND

AND_TIMER_IND

AND_TIMER_NOT_IND

AND_COUNTER_IND

AND_COUNTER_NOT_IND

AND_SPEC_IND

AND_SPEC_NOT_IND

AND_OROL_IND

AND_OROL_NOT_IND

AND_F_UP_IND

AND_F_DOWN_IND

OR_RELE_IND

OR_RELE_NOT_IND

OR_INPUT_IND

OR_INPUT_NOT_IND

OR_OUT_IND

OR_OUT_NOT_IND

OR_TIMER_IND

OR_TIMER_NOT_IND

OR_COUNTER_IND

OR_COUNTER_NOT_IND

OR_SPEC_IND

OR_SPEC_NOT_IND

OR_OROL_IND

OR_OROL_NOT_IND

MOVE

IF_SET_JUMP

IF_RESET_JUMP

JUMP

MOVE_RELE

CALL_SUB

MOVE_SPEC_IN

MOVE_SPEC_OUT

MOVE_OUT

AND

OR

XOR

 ADD

SOTT

DIV

MULT

COPY

TX_MEM

TX_STR

IF_IND_EQ_JUMP

IF_IND_NEQ_JUMP

IF_IND_LES_JUMP

IF_IND_LEQ_JUMP

IF_IND_GEQ_JUMP

IF_IND_GTR_JUMP

IF_DAY_JUMP

MOVE_MEM

DMJNZ

MOVE_IND

ON_RX

STRCPY

SET_TIMER

SET_COUNTER

IF_EQ_JUMP

IF_NEQ_JUMP

IF_LES_JUMP

IF_LEQ_JUMP

IF_GEQ_JUMP

IF_GTR_JUMP

TEST_RX

IF_TIME_JUMP

IF_DATE_JUMP

IF_DAY_TIME_JUMP

SET_OROL

1.01 Contatti speciali

Ogni MicroPLC vi sono 64 contatti accessibili da programma che hanno funzioni associate

dedicate.

Segue tabella che specifica il tipo di funzione per tutti e 64 contatti:

Tabella 1.

Contatto Speciale Numero	Funzione

0	Contatto temporizzato, ogni decimo di secondo inverte il suo stato

1	Contatto temporizzato, ogni mezzo secondo inverte il suo stato

2	Contatto temporizzato, ogni  secondo inverte il suo stato

3	Contatto temporizzato, ogni 2 secondi inverte il suo stato

4	Contatto temporizzato, ogni 10 secondi inverte il suo stato

5	Contatto temporizzato, ogni  30 secondi inverte il suo stato

6	Contatto temporizzato, ogni minuto inverte il suo stato

7	Contatto temporizzato, ogni 5 minuti inverte il suo stato

8	Contatto temporizzato, ogni 30 minuti inverte il suo stato

9	Contatto sul primo ciclo di programma,da n.a. passa a n.c.

dopo il primo ciclo di programma

10	Contatto di stato,si inverte ogni ciclo di programma.

11	Contatto su errore di programma,da n.a. a n.c. se presente un

errore di programma

12	dopo 2,5 minuti che un microPLC non ha nessuna ricezione

da seriale per un secondo settato a 1,poi riinizia il ciclo.

13	settato sulla trasmissione seriale seriale,resettato su una

ricezione  seriale

14 	Sempre a livello logico 0

15	Sempre a livello logico 1

16	Contatto istantaneo su bobina timer 1

17	Contatto istantaneo su bobina timer 2

18	Contatto istantaneo su bobina timer 3

19	Contatto istantaneo su bobina timer 4

20	Contatto istantaneo su bobina timer 5

21	Contatto istantaneo su bobina timer 6

22	Contatto istantaneo su bobina timer 7

23	Contatto istantaneo su bobina timer 8

24	ingresso remoto 1 da plc slave n° 1

25	ingresso remoto 2 da plc slave n° 1

26	ingresso remoto 3 da plc slave n° 1

27	ingresso remoto 4 da plc slave n° 1

28	ingresso remoto 5 da plc slave n° 1

29	ingresso remoto 6 da plc slave n° 1

30	ingresso remoto 7 da plc slave n° 1

31	ingresso remoto 8 da plc slave n° 1

32	ingresso remoto 1 da plc slave n° 2

33	ingresso remoto 2 da plc slave n° 2

34	ingresso remoto 3 da plc slave n° 2

35	ingresso remoto 4 da plc slave n° 2

36	ingresso remoto 5 da plc slave n° 2

37	ingresso remoto 6 da plc slave n° 2

38	ingresso remoto 7 da plc slave n° 2

39	ingresso remoto 8 da plc slave n° 2

40	ingresso remoto 1 da plc slave n° 3

41	ingresso remoto 2 da plc slave n° 3

42	ingresso remoto 3 da plc slave n° 3

43	ingresso remoto 4 da plc slave n° 3

44	ingresso remoto 5 da plc slave n° 3

45	ingresso remoto 6 da plc slave n° 3

46	ingresso remoto 7 da plc slave n° 3

47	ingresso remoto 8 da plc slave n° 3

48	ingresso remoto 1 da plc slave n° 4

49	ingresso remoto 2 da plc slave n° 4

50	ingresso remoto 3 da plc slave n° 4

51	ingresso remoto 4 da plc slave n° 4

52	ingresso remoto 5 da plc slave n° 4

53	ingresso remoto 6 da plc slave n° 4

54	ingresso remoto 7 da plc slave n° 4

55	ingresso remoto 8 da plc slave n° 4

56	ingresso remoto 1 da plc slave n° 5

57	ingresso remoto 2 da plc slave n° 5

58	ingresso remoto 3 da plc slave n° 5

59	ingresso remoto 4 da plc slave n° 5

60	ingresso remoto 5 da plc slave n° 5

61	ingresso remoto 6 da plc slave n° 5

62	ingresso remoto 7 da plc slave n° 5

63	ingresso remoto 8 da plc slave n° 5

nota 	:

Con contatto speciale si è inteso un ingresso a cui si può associare la sola operazione di lettura.

1.02 Bobine speciali

In ogni micro PLC vi sono 128 bobine accessibili da programma che hanno funzioni associate dedicate.

Segue tabella che specifica il tipo di funzione per tutte e 64 le bobine :

Tabella 2.

bobina Speciale Numero	Funzione

0	Reset contatore numero 1

1	Reset contatore numero 2

2	Reset contatore numero 3

3	Reset contatore numero 4

4	Reset contatore numero 5

5	Reset contatore numero 6

6	Reset contatore numero 7

7	Reset contatore numero 8

8	gruppo  uscite remote plc slave 1 su uscite o su rele 	interni

9	gruppo  uscite remote plc slave 2 su uscite o su rele 	interni

10	gruppo  uscite remote plc slave 3 su uscite o su rele 	interni

11	gruppo  uscite remote plc slave 4 su uscite o su rele 	interni

12	gruppo  uscite remote plc slave 5 su uscite o su rele 	interni

13 	input slave su input o su rele interni (48-55)

14	gruppo ingressi remoti plc slave n°4 su input o su contatti 	timer

15	gruppo ingressi remoti plc slave n°5 su input o su contatti 	contatori

16	rele remoto 1 su plc slave  n° 1

17	rele remoto 2 su plc slave  n° 1

18	rele remoto 3 su plc slave  n° 1

19	rele remoto 4 su plc slave  n° 1

20	rele remoto 5 su plc slave  n° 1

21	rele remoto 6 su plc slave  n° 1

22	rele remoto 7 su plc slave  n° 1

23	rele remoto 8 su plc slave  n° 1

24	rele remoto 1 su plc slave  n° 2

25	rele remoto 2 su plc slave  n° 2

26	rele remoto 3 su plc slave  n° 2

27	rele remoto 4 su plc slave  n° 2

28	rele remoto 5 su plc slave  n° 2

29	rele remoto 6 su plc slave  n° 2

30	rele remoto 7 su plc slave  n° 2

31	rele remoto 8 su plc slave  n° 2

32	rele remoto 1 su plc slave  n° 3

33	rele remoto 2 su plc slave  n° 3

34	rele remoto 3 su plc slave  n° 3

35	rele remoto 4 su plc slave  n° 3

36	rele remoto 5 su plc slave  n° 3

37	rele remoto 6 su plc slave  n° 3

38	rele remoto 7 su plc slave  n° 3

39	rele remoto 8 su plc slave  n° 3

40	rele remoto 1 su plc slave  n° 4

41	rele remoto 2 su plc slave  n° 4

42	rele remoto 3 su plc slave  n° 4

43	rele remoto 4 su plc slave  n° 4

44	rele remoto 5 su plc slave  n° 4

45	rele remoto 6 su plc slave  n° 4

46	rele remoto 7 su plc slave  n° 4

47	rele remoto 8 su plc slave  n° 4

48	rele remoto 1 su plc slave  n° 5

49	rele remoto 2 su plc slave  n° 5

50	rele remoto 3 su plc slave  n° 5

51	rele remoto 4 su plc slave  n° 5

52	rele remoto 5 su plc slave  n° 5

53	rele remoto 6 su plc slave  n° 5

54	rele remoto 7 su plc slave  n° 5

55	rele remoto 8 su plc slave  n° 5

56	Comun. con Slave  1 impostata a sing. bit

57	Comun. con Slave  2 impostata a sing. bit

58	Comun. con Slave  3 impostata a sing. bit

59	Comun. con Slave  4 impostata a sing. bit

60	Comun. con Slave  5 impostata a sing. bit

61	risposta ritardata 1 sec per comunicazioni radio

62	non usato

63	non usato

nota:

Con bobina speciale si inteso identificare una bobina a cui si può associare solo una operazione di uscita, e senza contatti ausiliari a cui accedere.

1.03 Linguaggio di programmazione.

Come già accennato in precedenza il linguaggio di programmazione del micro PLC è dedicato a questo  scopo e fa riferimento all'uso comune degli apparati elettromeccanici e il loro uso.Il sistema di programmazionesi basa su un processore logico virtuale estremamente semplice implementato nel micro PLC e così costituito:

1)	ACCUMULATORE LOGICO	[ACC]

2)	REGISTO TEMPORANEO	[REG]

3)	CONTATORE DI PROGRAMMA	[PC]

4)	MEMORIA DI STACK (16 LIVELLI LOGICI MEMORIZZABILI )	[STACK]

5)	CONTATORE ANNIDAMENTI STACK	[CS]

6)	MEMORIA VARIABILI

Tutte le operazioni del programma passano attraverso l'accumulatore,il registro temporaneo serve

nelle operazioni di serie e parallelo di contatti e per operazioni matematiche,il program counter

registra il punto del programma sotto esame e la memoria di stack conta gli annidamenti sui paralleli con più di due contatti,serve nelle operazioni di salvataggio ripristino delle variabili.

Facendo riferimento al precedente modello di programmazione sono state implementate le istruzioni dedicate che sono di seguito illustrate:

Comando	:	NOP

valore	:	0

descrizione	:

Non esegue nessuna operazione .Può essere usata per inserire ritardi.

esempio	:

NOP

Comando	:	LOAD_RELE	nn

valore	:	1 	nn=[0..64]

descrizione	:

Carica nell'accumulatore lo stato dei contatti ausiliari normalmente aperti della bobina (rele interno) nn.

esempio	:

LOAD	1

Se la bobinadel rele  1 è eccitata l'accumulatore logico contiene lo stato 1 altrimenti  contiene lo stato logico 0.

(nn da 1 a 64)

Comando	:	LOAD_RELE_NOT	nn

valore	:	2 	nn=[0..64]

descrizione	:

Carica nell'accumulatore lo stato dei contatti ausiliari normalmente chiusi della bobina nn.

esempio	:

LOAD_RELE_NOT	1

Se la bobina 1 è eccitata l'accumulatore logico contiene lo stato 0 altrimenti  contiene lo stato logico1.

(nn da 1 a 64)

Comando	:	LOAD_INPUT	nn

valore	:	3	nn=[0..12]

descrizione	:

Carica nell'accumulatore lo stato del contatto sull'ingresso hardware nn (per nn da 1 a 12 )

esempio	:

LOAD_INPUT	4

L'accumulatore logico contiene lo stato dell'ingresso 4

Comando	:	LOAD_INPUT_NOT	nn

valore	:	4	nn=[0..12]

descrizione	:

Carica nell'accumulatore lo stato  invertito del contatto sull'ingresso hardware nn (per nn da 1 a 12)

esempio	:

LOAD_INPUT_NOT	4

L'accumulatore logico contiene lo stato  invertito dell'ingresso 4.

Comando	:	LOAD_OUT	nn

valore	:	5	nn=[0..8]

descrizione	:

Carica nell'accumulatore lo stato del contatto normalmente aperto del rele di uscita nn (per nn da 1 a 8)

In pratica se una uscita è abilitata questo contatto è chiuso.

esempio	:

LOAD_OUT	3

L'accumulatore logico contiene lo stato 1 se l'uscita hardware 3 è chiusa altrimenti contiene lo stato logico 0.

Comando	:	LOAD_OUT_NOT	nn

valore	:	6	nn=[0..8]

descrizione	:

Carica nell'accumulatore lo stato del contatto normalmente chiuso del rele di uscita nn (per nn da 1 a 8)

In pratica se una uscita è abilitata questo contatto è aperto.

esempio	:

LOAD_OUT_NOT	3

L'accumulatore logico contiene lo stato 0 se l'uscita hardware 3 è chiusa altrimenti contiene lo stato logico 1

Comando	:	LOAD_TIMER	nn

valore	:	7	nn=[0..8]

descrizione	:

Carica nell'accumulatore lo stato del contatto  temporizzato normalmente aperto del timer nn (per nn da 1 a 8 )

esempio	:

LOAD_TIMER	3

L'accumulatore logico contiene lo stato 1 se il timer 3 è arrivato a fine conteggio altrimenti contiene lo stato logico 0.

Comando	:	LOAD_TIMER_NOT 	nn

valore	:	8	nn=[0..8]

descrizione	:

Carica nell'accumulatore lo stato del contatto  temporizzato normalmente chiuso del timer nn (per nn da 1 a  8)

esempio	:

LOAD_TIMER_NOT	3

L'accumulatore logico contiene lo stato 1 se il timer 3 èin fase di conteggio altrimenti contiene lo stato logico 0.

Comando	:	LOAD_COUNTER	nn

valore	:	9	nn=[0..8]

descrizione	:

Carica nell'accumulatore lo stato del contatto normalmente aperto del contatore nn (per nn da 1 a 8)

esempio	:

LOAD_COUNTER	3

L'accumulatore logico contiene lo stato 1 se il contatore 3 è arrivato a fine conteggio altrimenti contiene lo stato logico 0

Comando	:	LOAD_COUNTER_NOT 	nn

valore	:	10	nn=[0..8]

descrizione	:

Carica nell'accumulatore lo stato del contatto  normalmente chiuso del contatore nn (per nn da 1 a 8)

esempio	:

LOAD_COUNTER_NOT	3

L'accumulatore logico contiene lo stato 1 se il contatore 3 è in fase di conteggio altrimenti contiene lo stato logico 0.

Comando	:	LOAD_SPEC	nn

valore	:	11	nn=[0..64]

descrizione	:

Carica nell'accumulatore lo stato del contatto speciale  nn (per nn da 1 a 64 )

esempio	:

LOAD_SPEC	1

L'accumulatore logico contiene lo stato del flag ad un decimo di secondo.

Comando	:	LOAD_SPEC_NOT	nn

valore	:	12	nn=[0..64]

descrizione	:

Carica nell'accumulatore lo stato invertito  del contatto speciale  nn (per nn da 1 a 64)

esempio	:

LOAD_SPEC_NOT	1

L'accumulatore logico contiene lo stato invertito del flag ad un decimo di secondo.

Comando	:	LOAD_OROL	nn

valore	:	13	nn=[0..4]

descrizione	:

Carica nell'accumulatore lo stato del contatto dellorologio  nn (per nn da 1 a 4 )

esempio	:

LOAD_OROL	1

L'accumulatore logico contiene lo stato dellorologio numero 1.

Comando	:	LOAD_OROL_NOT	nn

valore	:	14	nn=[0..4]

descrizione	:

Carica nell'accumulatore lo stato invertito  del contatto dellorologio  nn (per nn da 1 a 4)

esempio	:

LOAD_OROL_NOT	1

L'accumulatore logico contiene lo statodel contatto normalmente chiuso dellorologio numero 1.

Comando	:	STORE_RELE	nn

valore	:	15	nn=[0..64]

descrizione	:

Scarica lo stato dell'accumulatore logico nella bobina nn (per nn da 1 a 64 ) .

Se l'accumulatore contiene lo stato logico 1 la bobina si eccita altrimenti si diseccita.

esempio	:

STORE	1

Se l'accumulatore contiene lo stato logico 1 la bobina 1 si eccita.

Comando	:	STORE_OUT	nn

valore	:	16	nn=[0..8]

descrizione	:

Scarica lo stato dell'accumulatore logico nell'uscita nn (per nn da 1 a 32 ) .

Se l'accumulatore contiene lo stato logico 1 il relè nn di uscita si eccita altrimenti si diseccita.

esempio	:

STORE_OUT	4

Se l'accumulatore contiene lo stato logico 1 l'uscita  n° 4 si eccita.

Comando	:	STORE_TIMER	nn

valore	:	17	nn=[0..8]

descrizione	:

Scarica lo stato dell'accumulatore logico nella bobina del timer nn (per nn da 1 a  8 ) .

Se l'accumulatore contiene lo stato logico 1 il timer nn inizia il conteggio della temporizzazione,altrimenti resta diseccitato.

esempio	:

STORE_TIMER	4

Se l'accumulatore contiene lo stato logico 1 il timer n° 4 inizia il conteggio.

Comando	:	STORE_COUNTER	nn

valore	:	18	nn=[0..8]

descrizione	:

Scarica lo stato dell'accumulatore logico nella bobina del contatore nn (per nn da 1 a 8 ) .

Il blocco contatore memorizza lo stato della bobina e incrementa  decrementa il suo contenuto sulle variazioni di stato.Ogni volta che si effettua questa funzione il contatore controlla se vi è variazione di stato logico rispetto allo stato precedente e quindi  se rileva una variazione (  costruisce il clock) esegue un incremento decremento.

I contatti ausiliari di uscita dei contatori non sono comandati dallo stato della bobina ma bensì dallo stato a cui si trova il contatore rispetto al conteggio e modo in cui è settato.

Per resettare i contatori sono presenti 8 bit speciali(vedi bobine speciali)

esempio	:

STORE_COUNTER	4

Comando	:	STORE_OROL	nn

valore	:	19	nn=[0..4]

descrizione	:

Scarica lo stato dell'accumulatore logico nella bobina dellorologio nn(per nn da 1 a 4).

Se lACC.0=1 lorologio inizia a funzionare.

esempio	:

STORE_OROL	1

Se l'accumulatore logico contiene uno stato logico 1 lorologio 1 inizia a funzionare.

Comando	:	STORE_SPEC	nn

valore	:	20	nn

descrizione	:

Scarica lo stato dell'accumulatore logico nella bobina speciale nn(per nn da 1 a 128).

Vedi paragrafo 1.01 per elenco bobine speciali.Operazione di uscita verso PLC slave o di settaggio parametri interni.

esempio	:

STORE_SPEC	1

Se l'accumulatore logico contiene uno stato logico 1 si ha il reset del contatore 1.

Comando	:	AND_RELE	nn

valore	:	21	nn=[0..64]

descrizione	:

Esegue la funzione di and ( serie di due contatti ) tra lo stato logico che si trovanell'accumulatore logico e i contatti ausiliari normalmente aperti del rele interno nn (per nn da 1 a 64).

Nella serie di due contatti se uno dei due è aperto (stato logico 0 ) il risultato è un contatto aperto.

Se lACC ha valore zero il processore logico non esegue questa istruzione poichè il risultato è comunque zero.

Per eseguire questo tipo di operazioni il processore logico carica nel registro temporaneo il valore che ha in memoria,esegue una istruzione di load  specifica , in questo caso l'istruzione LOAD nn, e quindi opera l'istruzione di and tra l'accumulatore e il registro temporaneo.Il risulato è nell'accumulatore .

esempio	:

AND_RELE	4

posto che :	[ACC]=1 e bobina rele 4 è eccitata si ha come risultato di AND_RELE 4 [REG]=1,[ACC]=1.

Comando	:	AND_RELE_NOT	nn

valore	:	22	nn=[0..64]

descrizione	:

Esegue la funzione di and ( serie di due contatti ) tra lo stato logico che si trovanell'accumulatore logico e i contatti ausiliari normalmente chiusi  del rele interno nn (per nn da 1 a 64).

Nella serie di due contatti se uno dei due è aperto (stato logico 0 ) il risultato è un contatto aperto.

Se lACC ha valore zero il processore logico non esegue questa istruzione poichè il risultato è comunque zero.

Per eseguire questo tipo di operazioni il processore logico carica nel registro temporaneo il valore che ha in memoria,esegue una istruzione di load invertita specifica , in questo caso l'istruzione LOAD_NOT nn, e quindi opera l'istruzione di and tra l'accumulatore e il registro temporaneo.Il risulato è nell'accumulatore .

esempio	:

AND_RELE_NOT	4

posto che :	[ACC]=1 e bobina rele 4 è eccitata si ha come risultato di AND_RELE_NOT 4 [REG]=1,[ACC]=0.

Comando	:	AND_INPUT	nn

valore	:	23	nn=[0..12]

descrizione	:

Esegue la funzione di and ( serie di due contatti ) tra lo stato logico che si trovanell'accumulatore logico e l'ingresso hardware nn (per nn da 1 a 12).

Nella serie di due contatti se uno dei due è aperto (stato logico 0 ) il risultato è un contatto aperto.

Se lACC ha valore zero il processore logico non esegue questa istruzione poichè il risultato è comunque zero.

Per eseguire questo tipo di operazioni il processore logico carica nel registro temporaneo il valore che ha in memoria,esegue una istruzione di load  specifica , in questo caso l'istruzione LOAD_INPUT nn, e quindi opera l'istruzione di and tra l'accumulatore e il registro temporaneo.Il risulato è nell'accumulatore .

esempio	:

AND_INPUT 2

posto che :	[ACC]=1 e l'ingresso 2 sia chiuso si ha come risultato di AND_INPUT 2 [REG]=1,[ACC]=1.

Comando	:	AND_INPUT_NOT	nn

valore	:	24	nn=[0..12]

descrizione	:

Esegue la funzione di and ( serie di due contatti ) tra lo stato logico che si trovanell'accumulatore logico e l'ingresso hardware invertito nn (per nn da 1 a  12).

Nella serie di due contatti se uno dei due è aperto (stato logico 0 ) il risultato è un contatto aperto.

Se lACC ha valore zero il processore logico non esegue questa istruzione poichè il risultato è comunque zero.

Per eseguire questo tipo di operazioni il processore logico carica nel registro temporaneo il valore che ha in memoria,esegue una istruzione di load  specifica , in questo caso l'istruzione LOAD_INPUT_NOT nn, e quindi opera l'istruzione di and tra l'accumulatore e il registro temporaneo.Il risulato è nell'accumulatore .

esempio	:

AND_INPUT_NOT  2

posto che :	[ACC]=1 e l'ingresso 2 sia chiuso si ha come risultato di AND_INPUT 2 [REG]=1,[ACC]=0.

Comando	:	AND_OUT	nn

valore	:	25	nn=[0..8]

descrizione	:

Esegue la funzione di and ( serie di due contatti ) tra lo stato logico che si trovanell'accumulatore logico e i contatti ausiliari normalmente aperti dell'l'uscita hardware nn (per nn da 1 a 32).

Nella serie di due contatti se uno dei due è aperto (stato logico 0 ) il risultato è un contatto aperto.

Se lACC ha valore zero il processore logico non esegue questa istruzione poichè il risultato è comunque zero.

Per eseguire questo tipo di operazioni il processore logico carica nel registro temporaneo il valore che ha in memoria,esegue una istruzione di load  specifica , in questo caso l'istruzione LOAD_OUT nn, e quindi opera l'istruzione di and tra l'accumulatore e il registro temporaneo.Il risulato è nell'accumulatore .

esempio	:

AND_OUT 2

posto che :	[ACC]=1 e l'uscita 2 sia eccitata si ha come risultato di AND_OUT 2 [REG]=1,[ACC]=1

Comando	:	AND_OUT_NOT	nn

valore	:	26	nn=[0..8]

descrizione	:

Esegue la funzione di and ( serie di due contatti ) tra lo stato logico che si trovanell'accumulatore logico e i contatti ausiliari normalmente chiusi dell'uscita hardware nn (per nn da 1 a 8).

Nella serie di due contatti se uno dei due è aperto (stato logico 0 ) il risultato è un contatto aperto.

Se lACC ha valore zero il processore logico non esegue questa istruzione poichè il risultato è comunque zero.

Per eseguire questo tipo di operazioni il processore logico carica nel registro temporaneo il valore che ha in memoria,esegue una istruzione di load  specifica , in questo caso l'istruzione LOAD_OUT_NOT nn, e quindi opera l'istruzione di and tra l'accumulatore e il registro temporaneo.Il risulato è nell'accumulatore .

esempio	:

AND_OUT_NOT  2

posto che :	[ACC]=1 e l'uscita 2 sia eccitata si ha come risultato di AND_OUT 2 [REG]=1,[ACC]=0

Comando	:	AND_TIMER	nn

valore	:	27	nn=[0..8]

descrizione	:

Esegue la funzione di and ( serie di due contatti ) tra lo stato logico che si trova nell'accumulatore logico e i contatti ausiliari normalmente aperti del timer nn (per nn da 1 a 8).

Nella serie di due contatti se uno dei due è aperto (stato logico 0 ) il risultato è un contatto aperto.

Se lACC ha valore zero il processore logico non esegue questa istruzione poichè il risultato è comunque zero.

Per eseguire questo tipo di operazioni il processore logico carica nel registro temporaneo il valore che ha in memoria,esegue una istruzione di load  specifica , in questo caso l'istruzione LOAD_TIMER nn, e quindi opera l'istruzione di and tra l'accumulatore e il registro temporaneo.Il risulato è nell'accumulatore .

esempio	:

AND_TIMER 2

posto che :	[ACC]=1 e il timer  2 sia a fine conteggioi si ha come risultato di AND_TIMER 2 [REG]=1,[ACC]=1

Comando	:	AND_TIMER_NOT	nn

valore	:	28	nn=[0..8]

descrizione	:

Esegue la funzione di and ( serie di due contatti ) tra lo stato logico che si trova nell'accumulatore logico e i contatti ausiliari normalmente chiusi del timer nn (per nn da 1 a 8).

Nella serie di due contatti se uno dei due è aperto (stato logico 0 ) il risultato è un contatto aperto.

Se lACC ha valore zero il processore logico non esegue questa istruzione poichè il risultato è comunque zero.

Per eseguire questo tipo di operazioni il processore logico carica nel registro temporaneo il valore che ha in memoria,esegue una istruzione di load  specifica , in questo caso l'istruzione LOAD_TIMER_NOT nn, e quindi opera l'istruzione di and tra l'accumulatore e il registro temporaneo.Il risulato è nell'accumulatore .

esempio	:

AND_TIMER_NOT 2

posto che :	[ACC]=1 e il timer  2 sia a fine conteggio  si ha come risultato di AND_TIMER_NOT 2 [REG]=1,[ACC]=0

Comando	:	AND_COUNTER	nn

valore	:	29	nn=[0..8]

descrizione	:

Esegue la funzione di and ( serie di due contatti ) tra lo stato logico che si trova nell'accumulatore logico e i contatti ausiliari normalmente aperti del contatore nn (per nn da 1 a 8).

Nella serie di due contatti se uno dei due è aperto (stato logico 0 ) il risultato è un contatto aperto.

Se lACC ha valore zero il processore logico non esegue questa istruzione poichè il risultato è comunque zero.

Per eseguire questo tipo di operazioni il processore logico carica nel registro temporaneo il valore che ha in memoria,esegue una istruzione di load  specifica , in questo caso l'istruzione LOAD_COUNTER nn, e quindi opera l'istruzione di and tra l'accumulatore e il registro temporaneo.Il risulato è nell'accumulatore .

esempio	:

AND_COUNTER 2

posto che :	[ACC]=1 e il contatore   2 sia a fine conteggioi si ha come risultato di AND_COUNTER 2 [REG]=1,[ACC]=1

Comando	:	AND_COUNTER_NOT	nn

valore	:	30	nn=[0..8]

descrizione	:

Esegue la funzione di and ( serie di due contatti ) tra lo stato logico che si trova nell'accumulatore logico e i contatti ausiliari normalmente chiusi del contatore nn (per nn da 1 a 8).

Nella serie di due contatti se uno dei due è aperto (stato logico 0 ) il risultato è un contatto aperto.

Se lACC ha valore zero il processore logico non esegue questa istruzione poichè il risultato è comunque zero.

Per eseguire questo tipo di operazioni il processore logico carica nel registro temporaneo il valore che ha in memoria,esegue una istruzione di load  specifica , in questo caso l'istruzione LOAD_COUNTER_NOT nn, e quindi opera l'istruzione di and tra l'accumulatore e il registro temporaneo.Il risulato è nell'accumulatore .

esempio	:

AND_COUNTER_NOT 2

posto che :	[ACC]=1 e il contatore  2 sia a fine conteggio  si ha come risultato di AND_COUNTER_NOT 2 [REG]=1,[ACC]=0

Comando	:	AND_SPEC	nn

valore	:	31	nn=[0..64]

descrizione	:

Esegue la funzione di and ( serie di due contatti ) tra lo stato logico che si trova nell'accumulatore logico e i contatti speciali nn (per nn da 1 a 64).

Nella serie di due contatti se uno dei due è aperto (stato logico 0 ) il risultato è un contatto aperto.

Se lACC ha valore zero il processore logico non esegue questa istruzione poichè il risultato è comunque zero.

Per eseguire questo tipo di operazioni il processore logico carica nel registro temporaneo il valore che ha in memoria,esegue una istruzione di load  specifica , in questo caso l'istruzione LOAD_SPEC nn, e quindi opera l'istruzione di and tra l'accumulatore e il registro temporaneo.Il risulato è nell'accumulatore .

esempio	:

AND_SPEC 2

posto che :	[ACC]=1 e contatto speciale 2 sia a chiuso si ha come risultato di AND_SPEC 2 [REG]=1,[ACC]=1

Comando	:	AND_SPEC_NOT	nn

valore	:	32	nn=[0..64]

descrizione	:

Esegue la funzione di and ( serie di due contatti ) tra lo stato logico che si trova nell'accumulatore logico e l'inverso del contatti specialie nn (per nn da 1 a  64).

Nella serie di due contatti se uno dei due è aperto (stato logico 0 ) il risultato è un contatto aperto.

Se lACC ha valore zero il processore logico non esegue questa istruzione poichè il risultato è comunque zero.

Per eseguire questo tipo di operazioni il processore logico carica nel registro temporaneo il valore che ha in memoria,esegue una istruzione di load  specifica , in questo caso l'istruzione LOAD_SPEC_NOT nn, e quindi opera l'istruzione di and tra l'accumulatore e il registro temporaneo.Il risulato è nell'accumulatore .

esempio	:

AND_SPEC_NOT 2

posto che :	[ACC]=1 eil contatto speciale 2 sia a chiuso si ha come risultato di AND_SPEC_NOT 2 [REG]=1,[ACC]=0

Comando	:	AND_OROL	nn

valore	:	33	nn=[0..4]

descrizione	:

Esegue la funzione di and ( serie di due contatti ) tra lo stato logico che si trova nell'accumulatore logico e i contatti di uscita dellorologio  nn (per nn da 1 a 4).

Nella serie di due contatti se uno dei due è aperto (stato logico 0 ) il risultato è un contatto aperto.

Se lACC ha valore zero il processore logico non esegue questa istruzione poichè il risultato è comunque zero.

Per eseguire questo tipo di operazioni il processore logico carica nel registro temporaneo il valore che ha in memoria,esegue una istruzione di load  specifica , in questo caso l'istruzione LOAD_OROL nn, e quindi opera l'istruzione di and tra l'accumulatore e il registro temporaneo.Il risulato è nell'accumulatore .

esempio	:

AND_OROL 2

posto che :	[ACC]=1 e contatto di uscite dellorologio  2 sia a chiuso si ha come risultato di AND_OROL  2 [REG]=1,[ACC]=1

Comando	:	AND_OROL_NOT	nn

valore	:	34	nn=[0..4]

descrizione	:

Esegue la funzione di and ( serie di due contatti ) tra lo stato logico che si trova nell'accumulatore logico e il contatto normalmente chiuso dellorologio nn(per nn da 1 a 4).

Nella serie di due contatti se uno dei due è aperto (stato logico 0 ) il risultato è un contatto aperto.

Se lACC ha valore zero il processore logico non esegue questa istruzione poichè il risultato è comunque zero.

Per eseguire questo tipo di operazioni il processore logico carica nel registro temporaneo il valore che ha in memoria,esegue una istruzione di load  specifica , in questo caso l'istruzione LOAD_OROL_NOT nn, e quindi opera l'istruzione di and tra l'accumulatore e il registro temporaneo.Il risulato è nell'accumulatore .

esempio	:

AND_SPEC_NOT 2

posto che :	[ACC]=1 e il contatto di uscita dellorologio 2  sia a chiuso si ha come risultato di AND_SPEC_NOT 2 [REG]=1,[ACC]=0

Comando	:	AND_F_UP	nn

valore	:	35	nn=[0..8]

descrizione	:

Esegue la funzione di and ( serie di due contatti ) tra lo stato logico che si trova nell'accumulatore logico e il rivelatore di fronte di salita  nn (per nn da 1 a 4).

Nella serie di due contatti se uno dei due è aperto (stato logico 0 ) il risultato è un contatto aperto.

Se lACC ha valore zero il processore logico non esegue questa istruzione poichè il risultato è comunque zero.

esempio	:

AND_F_UP  2

posto che :	[ACC]=1 e è presente un fronte di salita il risultato di AND_F_UP  2 [REG]=1,[ACC]=1

Comando	:	AND_F_DOWN	nn

valore	:	36	nn=[0..8]

descrizione	:

Esegue la funzione di and ( serie di due contatti ) tra lo stato logico che si trova nell'accumulatore logico e il rilevatore di fronti in dcesa nn( per nnda 1 a 8)

Nella serie di due contatti se uno dei due è aperto (stato logico 0 ) il risultato è un contatto aperto.

Se lACC ha valore zero il processore logico non esegue questa istruzione poichè il risultato è comunque zero.

esempio	:

AND_F_DOWN  2

posto che :	[ACC]=1 e siamo in presenza di un fronte in discesa il risultato della operazione AND_F_DOWN 2 [REG]=1,[ACC]=1

Comando	:	AND_POP

valore	:	37

descrizione	:

Esegue la funzione di and ( serie di due contatti ) tra lo stato logico che si trova nell'accumulatore logico e lo stato logico posto nella prima memoria disponibile di stack.

esempio	:

AND_POP

posto che :	[ACC]=1 e in stack sia memorizzato lo statlo logico 0 si ha come risultato a una istruzione AND_POP   [ACC]=0

Comando	:	OR_RELE	nn

valore	:	38	nn=[0..64]

descrizione	:

Esegue la funzione di or( parallelo di due contatti ) tra lo stato logico che si trovanell'accumulatore logico e i contatti ausiliari normalmente aperti del rele interno nn (per nn da 1 a   64).

Nel parallelo di due contatti se uno dei due è chiuso (stato logico 1 ) il risultato è un contatto chiuso.

Per eseguire questo tipo di operazioni il processore logico carica nel registro temporaneo il valore che ha in memoria,esegue una istruzione di load  specifica , in questo caso l'istruzione LOAD_RELE nn, e quindi opera l'istruzione di or tra l'accumulatore e il registro temporaneo.Il risulato è nell'accumulatore .

esempio	:

OR_RELE	4

posto che :	[ACC]=1 e bobina rele 4 è eccitata si ha come risultato di OR_RELE 4 [REG]=1,[ACC]=1.

Comando	:	OR_RELE_NOT	nn

valore	:	39	nn=[0..64]

descrizione	:

Esegue la funzione di or( parallelo di due contatti ) tra lo stato logico che si trovanell'accumulatore logico e i contatti ausiliari normalmente chiusi  del rele interno nn (per nn da 1 a  64).

Nel parallelo di due contatti se uno dei due è chiuso (stato logico 1 ) il risultato è un contatto chiuso.

Per eseguire questo tipo di operazioni il processore logico carica nel registro temporaneo il valore che ha in memoria,esegue una istruzione di load invertita specifica , in questo caso l'istruzione LOAD_NOT nn, e quindi opera l'istruzione di or tra l'accumulatore e il registro temporaneo.Il risulato è nell'accumulatore .

esempio	:

OR_RELE_NOT	4

posto che :	[ACC]=1 e bobina rele 4 è eccitata si ha come risultato di OR_RELE_NOT 4 [REG]=1,[ACC]=0.

Comando	:	OR_INPUT	nn

valore	:	40	nn=[0..12]

descrizione	:

Esegue la funzione di or( parallelo di due contatti )  tra lo stato logico che si trovanell'accumulatore logico e l'ingresso hardware nn (per nn da 1 a  12).

Nel parallelo di due contatti se uno dei due è chiuso (stato logico 1 ) il risultato è un contatto chiuso.

Per eseguire questo tipo di operazioni il processore logico carica nel registro temporaneo il valore che ha in memoria,esegue una istruzione di load  specifica , in questo caso l'istruzione LOAD_INPUT nn, e quindi opera l'istruzione di OR tra l'accumulatore e il registro temporaneo.Il risulato è nell'accumulatore .

esempio	:

OR_INPUT 2

posto che :	[ACC]=1 e l'ingresso 2 sia chiuso si ha come risultato di OR_INPUT 2 [REG]=1,[ACC]=1.

Comando	:	OR_INPUT_NOT	nn

valore	:	41	nn=[0..12]

descrizione	:

Esegue la funzione di or( parallelo di due contatti )  tra lo stato logico che si trovanell'accumulatore logico e l'ingresso hardware invertito nn (per nn da 1 a  32).

Nel parallelo di due contatti se uno dei due è chiuso (stato logico 1 ) il risultato è un contatto chiuso.

Per eseguire questo tipo di operazioni il processore logico carica nel registro temporaneo il valore che ha in memoria,esegue una istruzione di load  specifica , in questo caso l'istruzione LOAD_INPUT_NOT nn, e quindi opera l'istruzione di OR tra l'accumulatore e il registro temporaneo.Il risulato è nell'accumulatore .

esempio	:

OR_INPUT_NOT  2

posto che :	[ACC]=1 e l'ingresso 2 sia chiuso si ha come risultato di OR_INPUT 2 [REG]=1,[ACC]=0.

Comando	:	OR_OUT	nn

valore	:	42	nn=[0..8]

descrizione	:

Esegue la funzione di or( parallelo di due contatti )  tra lo stato logico che si trovanell'accumulatore logico e i contatti ausiliari normalmente aperti dell'l'uscita hardware nn (per nn da 1 a 8).

Nel parallelo di due contatti se uno dei due è chiuso (stato logico 1 ) il risultato è un contatto chiuso.

Per eseguire questo tipo di operazioni il processore logico carica nel registro temporaneo il valore che ha in memoria,esegue una istruzione di load  specifica , in questo caso l'istruzione LOAD_OUT nn, e quindi opera l'istruzione di OR tra l'accumulatore e il registro temporaneo.Il risulato è nell'accumulatore .

esempio	:

OR_OUT 2

posto che :	[ACC]=1 e l'uscita 2 sia eccitata si ha come risultato di OR_OUT 2 [REG]=1,[ACC]=1

Comando	:	OR_OUT_NOT	nn

valore	:	43	nn=[0..8]

descrizione	:

Esegue la funzione di or( parallelo di due contatti )  tra lo stato logico che si trovanell'accumulatore logico e i contatti ausiliari normalmente chiusi dell'uscita hardware nn (per nn da 1 a   8).

Nel parallelo di due contatti se uno dei due è chiuso (stato logico 1 ) il risultato è un contatto chiuso.

Per eseguire questo tipo di operazioni il processore logico carica nel registro temporaneo il valore che ha in memoria,esegue una istruzione di load  specifica , in questo caso l'istruzione LOAD_OUT_NOT nn, e quindi opera l'istruzione di OR tra l'accumulatore e il registro temporaneo.Il risulato è nell'accumulatore .

esempio	:

OR_OUT_NOT  2

posto che :	[ACC]=1 e l'uscita 2 sia eccitata si ha come risultato di OR_OUT 2 [REG]=1,[ACC]=0

Comando	:	OR_TIMER	nn

valore	:	44	nn=[0..8]

descrizione	:

Esegue la funzione di or( parallelo di due contatti )  tra lo stato logico che si trova nell'accumulatore logico e i contatti ausiliari normalmente aperti del timer nn (per nn da 1 a 8).

Nel parallelo di due contatti se uno dei due è chiuso (stato logico 1 ) il risultato è un contatto chiuso.

Per eseguire questo tipo di operazioni il processore logico carica nel registro temporaneo il valore che ha in memoria,esegue una istruzione di load  specifica , in questo caso l'istruzione LOAD_TIMER nn, e quindi opera l'istruzione di OR  tra l'accumulatore e il registro temporaneo.Il risulato è nell'accumulatore .

esempio	:

OR_TIMER 2

posto che :	[ACC]=1 e il timer  2 sia a fine conteggioi si ha come risultato di OR_TIMER 2 [REG]=1,[ACC]=1

Comando	:	OR_TIMER_NOT	nn

valore	:	45	nn=[0..8]

descrizione	:

Esegue la funzione di or( parallelo di due contatti )  tra lo stato logico che si trova nell'accumulatore logico e i contatti ausiliari normalmente chiusi del timer nn (per nn da 1 a  8).

Nel parallelo di due contatti se uno dei due è chiuso (stato logico 1 ) il risultato è un contatto chiuso.

Per eseguire questo tipo di operazioni il processore logico carica nel registro temporaneo il valore che ha in memoria,esegue una istruzione di load  specifica , in questo caso l'istruzione LOAD_TIMER_NOT nn, e quindi opera l'istruzione di OR tra l'accumulatore e il registro temporaneo.Il risulato è nell'accumulatore .

esempio	:

OR_TIMER_NOT 2

posto che :	[ACC]=1 e il timer  2 sia a fine conteggio  si ha come risultato di OR_TIMER_NOT 2 [REG]=1,[ACC]=0

Comando	:	OR_COUNTER	nn

valore	:	46	nn=[0..8]

descrizione	:

Esegue la funzione di or( parallelo di due contatti ) tra lo stato logico che si trova nell'accumulatore logico e i contatti ausiliari normalmente aperti del contatore nn (per nn da 1 a 8).

Nel parallelo di due contatti se uno dei due è chiuso (stato logico 1 ) il risultato è un contatto chiuso.

Per eseguire questo tipo di operazioni il processore logico carica nel registro temporaneo il valore che ha in memoria,esegue una istruzione di load  specifica , in questo caso l'istruzione LOAD_COUNTER nn, e quindi opera l'istruzione di OR tra l'accumulatore e il registro temporaneo.Il risulato è nell'accumulatore .

esempio	:

OR_COUNTER 2

posto che :	[ACC]=1 e il contatore   2 sia a fine conteggioi si ha come risultato di OR_COUNTER 2 [REG]=1,[ACC]=1

Comando	:	OR_COUNTER_NOT	nn

valore	:	47	nn=[0..8]

descrizione	:

Esegue la funzione di or( parallelo di due contatti )  tra lo stato logico che si trova nell'accumulatore logico e i contatti ausiliari normalmente chiusi del contatore nn (per nn da 1 a 8).

Nel parallelo di due contatti se uno dei due è chiuso (stato logico 1 ) il risultato è un contatto chiuso.

Per eseguire questo tipo di operazioni il processore logico carica nel registro temporaneo il valore che ha in memoria,esegue una istruzione di load  specifica , in questo caso l'istruzione LOAD_COUNTER_NOT nn, e quindi opera l'istruzione di OR tra l'accumulatore e il registro temporaneo.Il risulato è nell'accumulatore .

esempio	:

OR_COUNTER_NOT 2

posto che :	[ACC]=1 e il contatore  2 sia a fine conteggio  si ha come risultato di OR_COUNTER_NOT 2 [REG]=1,[ACC]=0

Comando	:	OR_SPEC	nn

valore	:	48	nn=[0..64]

descrizione	:

Esegue la funzione di or( parallelo di due contatti )  tra lo stato logico che si trova nell'accumulatore logico e i contatti speciali nn (per nn da 1 a  64).

Nel parallelo di due contatti se uno dei due è chiuso (stato logico 1 ) il risultato è un contatto chiuso.

Per eseguire questo tipo di operazioni il processore logico carica nel registro temporaneo il valore che ha in memoria,esegue una istruzione di load  specifica , in questo caso l'istruzione LOAD_SPEC nn, e quindi opera l'istruzione di OR tra l'accumulatore e il registro temporaneo.Il risulato è nell'accumulatore .

esempio	:

OR_SPEC 2

posto che :	[ACC]=1 e contatto speciale 2 sia a chiuso si ha come risultato di OR_SPEC 2 [REG]=1,[ACC]=1

Comando	:	OR_SPEC_NOT	nn

valore	:	49	nn=[0..64]

descrizione	:

Esegue la funzione di or( parallelo di due contatti )  tra lo stato logico che si trova nell'accumulatore logico e l'inverso del contatti specialie nn (per nn da 1 a  64).

Nel parallelo di due contatti se uno dei due è chiuso (stato logico 1 ) il risultato è un contatto chiuso.

Per eseguire questo tipo di operazioni il processore logico carica nel registro temporaneo il valore che ha in memoria,esegue una istruzione di load  specifica , in questo caso l'istruzione LOAD_SPEC_NOT nn, e quindi opera l'istruzione di OR tra l'accumulatore e il registro temporaneo.Il risulato è nell'accumulatore .

esempio	:

OR_SPEC_NOT 2

posto che :	[ACC]=1 eil contatto speciale 2 sia a chiuso si ha come risultato di OR_SPEC_NOT 2 [REG]=1,[ACC]=0

Comando	:	OR_OROL	nn

valore	:	50	nn=[0..4]

descrizione	:

Esegue la funzione di or( parallelo di due contatti ) tra lo stato logico che si trova nell'accumulatore logico e i contatti ausiliari normalmente aperti dellorologio nn (per nn da 1 a 4).

Nel parallelo di due contatti se uno dei due è chiuso (stato logico 1 ) il risultato è un contatto chiuso.

Per eseguire questo tipo di operazioni il processore logico carica nel registro temporaneo il valore che ha in memoria,esegue una istruzione di load  specifica , in questo caso l'istruzione LOAD_OROL  nn, e quindi opera l'istruzione di OR tra l'accumulatore e il registro temporaneo.Il risulato è nell'accumulatore .

esempio	:

OR_OROL  2

posto che :	[ACC]=1 e lorologio   2 sia chiuso si ha come risultato di OR_OROL  2 [REG]=1,[ACC]=1

Comando	:	OR_OROL_NOT	nn

valore	:	51	nn=[0..4]

descrizione	:

Esegue la funzione di or( parallelo di due contatti )  tra lo stato logico che si trova nell'accumulatore logico e i contatti ausiliari normalmente chiusi dellorologio nn (per nn da 1 a 4).

Nel parallelo di due contatti se uno dei due è chiuso (stato logico 1 ) il risultato è un contatto chiuso.

Per eseguire questo tipo di operazioni il processore logico carica nel registro temporaneo il valore che ha in memoria,esegue una istruzione di load  specifica , in questo caso l'istruzione LOAD_OROL_NOT nn, e quindi opera l'istruzione di OR tra l'accumulatore e il registro temporaneo.Il risulato è nell'accumulatore .

esempio	:

OR_OROL_NOT 2

posto che :	[ACC]=1 e lorologio  2 sia chiuso  si ha come risultato di OR_OROL_NOT  2  [REG]=1,[ACC]=1

Comando	:	OR_POP

valore	:	52

descrizione	:

Esegue la funzione di or( parallelo di due contatti )  tra lo stato logico che si trova nell'accumulatore logico e lo stato logico posto nella prima memoria disponibile di stack.

esempio	:

OR_POP

posto che :	[ACC]=1 e in stack sia memorizzato lo statlo logico 0 si ha come risultato a una istruzione OR_POP   [ACC]=1

Comando	:	SET_TIMER	nn,modo,valore

valore	:	53 	nn=[1...8] modo=[1..4] valore=16 bit

descrizione	:

Con questo comando si presetta il timer nn(per nn da 1 a 8) nel modo di funzionamento  (da 1=decimi di secondo a 4=ore ) al valore di conteggio (da 1 a 65535);

Normalmente questa istruzione viene usata in testa ai programmi per settare il  modo di funzionamento del timer nn,infatti una reimpostazione all'interno di un programma fa ripartire il timer da zero.

esempio	:

SET_TIMER 1,1,200

Imposta il timer n° 1 a un tempo di 200 secondi.

Comando	:	SET_COUNTER	nn,modo,valore

valore	:	54	nn=[1..8] modo=[1..4] valore=16 bit

descrizione	:

Con questo comando si presetta il contatore nn(per nn da 1 a 8 ) nel modo di funzionamento  (1=conta su,2=conta giù,3 autoincremento su,4= autoincremento giù ) al valore di conteggio (da 1 a 65535);

Normalmente questa istruzione viene usata in testa ai programmi per settare il  modo di funzionamento del contatore nn,infatti una reimpostazione all'interno di un programma fa ripartire il contatore da zero.

L'impostazione in modo autoincremento serve per estendere il funzionamento dei contatori come timer ,infatti sapendo che l'incremento avviene ogni 20 millisecondi si possono inpostare tempi da 20 millisecondi a circa un'ora , con precisione di una unita della scala

esempio	:

SET_COUNTER 1,1,200

Imposta il counter n° 1 in modo conta su e preset di 200.

Comando	:	SET_OROL 	nn,modo,dato1,dato2.dato3,dato4

valore	:	54	nn=[1..4] modo=[1..6] valore=16 bit

descrizione	:

Con questo comando si presetta il contatore nn(per nn da 1 a 4 ) nel modo di funzionamento (1..6):

1:su ora(start) e minuti (start)

2:su ora(dato1) minuti(dato2) start ora(dato3) e minuti(dato4) stop

3:su ora(dato1) minuti(dato2) giorno(dato3) mese(dato4) start

4:su giorno(dato1) mese(dato2) start

5:su giorno settimana(dato1) start

6:su giorno settimana(dato1) start su giorno settimana(dato2) stop

Normalmente questa istruzione viene usata in testa ai programmi per settare il  modo di funzionamento dellorologio nn.

Il contatto di uscitaorologio si chiude quando la condizione su cui è impostato è vera

esempio	:

SET_OROL 1,1,20,30,0,0

Imposta lorologio n°1 per attesa accenzione alle 20,30

Il contatto di uscita degli orologi è tamponato contro la mancanza di rete

Comando	:	RESET

valore	:	55

descrizione	:

Inposta il valore logico 0 nell'accumulatore

esempio	:

RESET

dopo l'istruzione preset [ACC]=0.

Comando	:	PRESET

valore	:	56

descrizione	:

Inposta il valore logico 1 nell'accumulatore

esempio	:

PRESET

dopo l'istruzione preset [ACC]=1.

Comando	:	MOVE	val

valore	:	57

descrizione	:

carica nellaccumulatore il valore a 16bit val

esempio	:

MOVE	4096,

ACC=4096

Comando	:	START_PROGRAM

valore	:	58

descrizione	:

Imposta l'indirizzo di rientro dalla scansione di programma.In programmi semplici è presente una sola istruzione di start_program,mentre per programmi più complessi si può impostare più rientri di programma onde separatre i vari processi da collegare eventualmente con l'istruzione di jump.

Nellistruzione START_PROGRAM vengono letti l ingressi hardware

esempio	:

START_PROGRAM

dopo l'istruzione start_program viene immagazinato il valore contenuto nel [PC].

Comando	:	END_PROGRAM

valore	:	59

descrizione	:

Con listruzione END_PROGRAM il PLC prima di saltare allindirizzo di rientro dato dallultimo START_PROGRAM scrive le uscite hardware e calcola il tempo di scansione

Comando	:	PROG_STOP

valore	:	60

descrizione	:

Forza il PLC da modo RUN a modo stop

esempio	:

PROG_STOP

dopo l'istruzione il  PLC è in stop.

Comando	:	PROG_RUN

valore	:	61

descrizione	:

Forza il PLC da modo RUN a modo RUN  reimpostando tutti i blocchi interni sersibili

alla ripartenza.questi blocchi sono i primi 32 rele ,i contatti e le bibine speciali, fronti

contatori e timer,ingressi e uscite.

esempio	:

PROG_RUN

dopo l'istruzione il  rientra in run con tutti i blocchi funzionali sopra descritti a zero

Comando	:	IF_SET_JUMP 	addr

valore	:	62

descrizione	:

Se l'accumulatore logico contiene un uno si esegue il salto all'indirizzo addr (16 bit ).

Condizione di salto per stato logico vero.

esempio	:

IF_SET_JUMP	100

posto che:

[ACC]=1 e [PC]=20 dopo if_set_jump si ha [ACC]=1 [PC]=100.

Comando	:	IF_RESET_JUMP 	addr

valore	:	63

descrizione	:

Se l'accumulatore logico contiene zero si esegue il salto all'indirizzo addr (16 bit).

Condizione di salto per stato logico falso

esempio	:

IF_RESET_JUMP	100

posto che:

[ACC]=0 e [PC]=20 dopo if_reset_jump si ha [ACC]=0 [PC]=100.

Comando	:	IF_EQ_JUMP	val,addr

valore	:	64

descrizione	:

Se il contenuto dell'accumulatore è uguale a val (16 bit) allora si salta allindirizzo addr(16 bit)

esempio	:

IF_EQ_JUMP	1200,246

Se ACC==1200 PC=247

Comando	:	IF_NEQ_JUMP	val,addr

valore	:	65

descrizione	:

Se il contenuto dell'accumulatore è diverso a val (16 bit) allora si salta allindirizzo addr(16 bit)

esempio	:

IF_NEQ_JUMP	1200,246

Se ACC!=1200 PC=247

Comando	:	IF_LES_JUMP	val,addr

valore	:	66

descrizione	:

Se il contenuto dell'accumulatore è minore di  val(16bit)  salta ad addr(16bit).

esempio	:

IF_LES_JUMP	4580,320

Se ACC<4580  PC=320.

Comando	:	IF_LEQ_JUMP	val,addr

valore	:	67

descrizione	:

Se il contenuto dell'accumulatore è minore o uguale a  val(16bit)  salta ad addr(16bit)

esempio	:

IF_LEQ_JUMP	3480,320

Se ACC=<3480  PC=320.

Comando	:	IF_GEQ_JUMP	val,addr

valore	:	68

descrizione	:

Se il contenuto dell'accumulatore è maggiore o uguale di  val(16bit))  salta ad addr(16bit)

esempio	:

IF_GEQ_JUMP	9999,320

Se ACC>=9999  PC=320.

Comando	:	IF_GTR_JUMP	num,addr

valore	:	69

descrizione	:

Se il contenuto dell'accumulatore è maggiore  di  val(16bit)  salta ad addr(16bit)

esempio	:

IF_GTR_JUMP	10,320

Se ACC>10  PC=320.

Comando	:	IF_IND_EQ_JUMP	val,addr

valore	:	70

descrizione	:

Se il contenuto dell'accumulatore è uguale al conenuto della memoria num(8bit)  salta ad addr(16bit)

esempio	:

IF_I_EQ_JUMP	10,320

Se ACC=mem[10] allora  PC=320.

Comando	:	IF_IND_NEQ_JUMP	val,addr

valore	:	71

descrizione	:

Se il contenuto dell'accumulatore è diverso al conenuto della memoria num(8bit)  salta ad addr(16bit)

esempio	:

IF_I_NEQ_JUMP	10,320

Se ACC!=mem[10] allora  PC=320.

Comando	:	IF_IND_LES_JUMP	num,addr

valore	:	72

descrizione	:

Se il contenuto dell'accumulatore è minore del  conenuto della memoria num(8bit) salta ad addr(16bit).

esempio	:

IF_I_LES_JUMP	10,320

Se ACC<mem[10] allora  PC=320.

Comando	:	IF_IND_LEQ_JUMP	num,addr

valore	:	73

descrizione	:

Se il contenuto dell'accumulatore è minore o uguale del  conenuto della memoria num(8bit)  salta ad addr(16bit)

esempio	:

IF_I_LEQ_JUMP	10,320

Se ACC=<mem[10] allora  PC=320.

Comando	:	IF_IND_GEQ_JUMP	num,addr

valore	:	74

descrizione	:

Se il contenuto dell'accumulatore è maggiore o uguale del  conenuto della memoria num(8bit)  salta ad addr(16bit)

esempio	:

IF_I_GEQ_JUMP	10,320

Se ACC>=mem[10] allora  PC=320.

Comando	:	IF_IND_GTR_JUMP	num,addr

valore	:	75

descrizione	:

Se il contenuto dell'accumulatore è maggiore del  conenuto della memoria num(8bit)  salta ad addr(16bit)

esempio	:

IF_I_GTR_JUMP	10,320

Se ACC>mem[10] PC=320

Comando	:	JUMP 	addr

valore	:	76

descrizione	:

Si esegue il salto all'indirizzo addr(16bit)

Salto incondizionato a una parte di programma.

esempio	:

JUMP	100

[PC]=20 dopo jump si ha [PC]=100.

Comando	:	ENABLE

valore	:	77

descrizione	:

Abilita le uscite.Imposta il flag di stato delle uscite in modo che queste siano attive.

esempio	:

ENABLE

Comando	:	DISABLE

valore	:	78

descrizione	:

Disabilita le uscite.Imposta il flag di stato delle uscite in modo che queste siano attive.

esempio	:

DISABLE

Comando	:	MASTER

valore	:	79

descrizione	:

Imposto il modo di funzionamento del PLC in modo MASTER.

esempio	:

MASTER

Comando	:	SLAVE

valore	:	80

descrizione	:

Imposto il modo di funzionamento del PLC in modo SLAVE.

esempio	:

SLAVE

Comando	:	PLC_NUM	nn

valore	:	81	nn=[0..255]

descrizione	:

Imposta il numero di PLC al valore NN per NN da 0 a 255;

esempio	:

PLC_NUM	15

Comando	:	PLC_COM	nn

valore	:	82	nn[1..8]

descrizione	:

Imposta ila velocità di comunicazione seriale del  PLC al valore NN per NN da 600 a 57600baud.

1	600 baud

2	1200 baud

3	2400 baud

4	4800 baud

5	9600 baud

6	19200 baud

7	28800 baud

8	57600 baud

esempio	:

PLC_COM	6

Imposta la velocità di conunicazione seriale a 19200 baud.

Comando	:	IF_TIME_JUMP	ore,min,sec,addr

valore	:	83

descrizione	:

Se l'orologio di sistema ha il solito valore in ore,min,sec il processore logico salta all'indirizzo addr(16bit)

esempio	:

IF_TIME_JUMP	12,30,00,300

se sono le 12:30:00 [PC]=300 .

Comando	:	IF_DAY_JUMP	giorno,addr

valore	:	84

descrizione	:

Se l'orologio di sistema ha il solito valore in giorno il processore logico salta all'indirizzo

addr(16bit)

Il campo giorno ha valore 1 per lunedi ...7 per domenica.

esempio	:

IF_DAY_JUMP	3,300

se è mercoledì  [PC]=300 .

Comando	:	IF_DATE_JUMP	giorno,mese,anno,addr

valore	:	85

descrizione	:

Se l'orologio di sistema ha il solito valore in giorno ,mese,anno il processore logico salta all'indirizzo addr(16bit)

esempio	:

IF_DATE_JUMP	25,12,94,300

se è Natale   [PC]=300 .

Comando	:IF_DAY_TIME_JUMP	giorno,ora,min,sec,addr

valore	:	86

descrizione	:

Se l'orologio di sistema ha il solito valore in giorno ,ora,min,sec il processore logico salta all'indirizzo addr(16bit)

Il campo giorno ha valore 1 per lunedi ...7 per domenica.

esempio	:

IF_DAY_TIME_JUMP	4,12,00,00,300

se è mercoledì  alle 12:0:0  [PC]=300 .

Comando	:	SHIFT_R 	nn

valore	:	87

descrizione	:

Esegue lo shift a destra dello accumulatore di nn posizioni.

esempio	:

SHIFT_R	1

Se ACC=0x22 dopo SHIFT_R  1  ACC=0x11

Comando	:	SHIFT_L	nn

valore	:	88

descrizione	:

Esegue lo shift a sinsira  dello accumulatore di nn posizioni.

esempio	:

SHIFT_L	1

Se ACC=0x22 dopo SHIFT_L  1   ACC=0x44

Comando	:	ROT_R 	nn

valore	:	89

descrizione	:

Esegue la rotazione a destra dello accumulatore di nn posizioni.

esempio	:

ROT_R	1

Se ACC=0x22 dopo ROT_R  1  ACC=0x11

Comando	:	ROT_L	nn

valore	:	90

descrizione	:

Esegue la rotazione  a sinsira  dello accumulatore di nn posizioni.

esempio	:

ROT_L	1

Se ACC=0x22 dopo ROT_L  1   ACC=0x44

Comando	:	MOVE_RELE 	nn,val

valore	:	91

descrizione	:

Imposta nel blocco di rele nn il valore val.Con val si intende un valore intero ad 8 bit.

I rele sono divisi nei seguenti blocchi:

Relè	blocco

1..8	1

9..16	2

17..24	3

25..32	4

33..40	5

41..48	6

49..56	7

57..64	8

esempio	:

MOVE_RELE	2,34

Poichè 34=00100010 saranno ad uno i relè 10 e 14.

Comando	:	MOVE_SPEC_IN	nn,val

valore	:	92

descrizione	:

Imposta nel blocco di contatti  speciali di ingresso  nn il valore val.Con val si intende un valore intero ad 8 bit.

I contatti speciali di ingresso  sono divisi nei seguenti blocchi:

Cont. Spec	blocco

0..7	1

8..15	2

16..23	3

24..31	4

32..39	5

40..47	6

48..55	7

56..63	8

esempio	:

MOVE_SPEC_IN	2,32

Poichè 32=00100000 sarà ad uno il relè speciale di ingresso   14.

Comando	:	MOVE_SPEC_OUT	nn,val

valore	:	93

descrizione	:

Imposta nel blocco di rele speciali di uscita  nn il valore val.Con val si intende un valore intero ad 8 bit.

I rele speciali di uscita  sono divisi nei seguenti blocchi:

Relè Spec.	blocco

0..7	1

8..15	2

16..23	3

24..31	4

32..39	5

40..47	6

48..55	7

56..63	8

esempio	:

MOVE_SPEC_OUT 	2,32

Poichè 32=00100000 sarà ad uno il relè speciale di uscita  14.

Comando	:	MOVE_OUT 	nn,val

valore	:	94

descrizione	:

Imposta  le uscite del blocco nn al valore val. Con val si intende un valore intero ad 8 bit.

per blocco si intende:

blocco	output

1	1..8

esempio	:

MOVE_OUT 	1,128

Accende l'uscita 8.

Comando	:	DELAY	val

valore	:	95

descrizione	:

Congela il programma  per un tempo pari a val(8bit) decimi di secondo.

esempio	:

DELAY	10

Blocca l'esecuzione del programma per un secondo

Comando	:	READ_INNPUT	nn

valore	:	96

descrizione	:

Carica nell'accumulatore il byte  che rappresenta lo stato degli 8 ingressi identificati dal blocco nn

blocco	input

1	1..8

2	9..17

esempio	:

READ_IN 	1

se input 1e 2 sono a 1 e gli  altri a zero ACC=3;

Comando	:	READ_OUT	nn

valore	:	97

descrizione	:

Carica nell'accumulatore il byte  che rappresenta lo stato delle 8 uscite definite dal blocco nn

blocco	output

1	1..8

esempio	:

READ_OU

se le uscite 1e 2 sono a 1 e le  altre a zerto ACC=3;

Comando	:	READ_RELE	nn

valore	:	98

descrizione	:

Carica nell'accumulatore il byte  che rappresenta lo stato del blocco dei rele nn.

I rele sono divisi nei seguenti blocchi:

Relè	blocco

1..8	1

9..16	2

17..24	3

25..32	4

33..40	5

41..48	6

49..56	7

57..64	8

esempio	:

READ_RE 1

se rele 1,2,3,4 sono a 1 e 5,6,7,8 sono a zero ACC=15.

Comando	:	READ_SPEC_IN	nn

valore	:	99

descrizione	:

Carica nell'accumulatore il byte  che rappresenta lo stato del blocco dei rele speciali di ingresso nn.

I rele speciali di ingresso sono divisi nei seguenti blocchi:

Relè	blocco

0..7	1

8..15	2

16..23	3

24..31	4

32..39	5

40..47	6

48..55	7

56..63	8

esempio	:

READ_SPEC_IN 1

se rele speciali di ingresso  1,2,3,4 sono a 1 e 5,6,7,8 sono a zero ACC=15.

Comando	:	READ_SPEC_OUT	nn

valore	:	100

descrizione	:

Carica nell'accumulatore il byte  che rappresenta lo stato del blocco dei rele speciali di uscita nn.

I rele speciali di uscita sono divisi nei seguenti blocchi:

Relè	blocco

0..7	1

8..15	2

16..23	3

24..31	4

32..39	5

40..47	6

48..55	7

56..63	8

esempio	:

READ_SPEC_OUT 1

se rele speciali di uscita 1,2,3,4 sono a 1 e 5,6,7,8 sono a zero ACC=15.

Comando	:	WRITE_INPUT	nn

valore	:	101

descrizione	:

Pone il contenuto dell'accumulatore nei registro di lettura degli ingressi definito dal blocco

nn.

Imposta per 20 millisecondi  tutti gli otto ingressi  al valore indicato dall'accumulatore

blocco	input

1	1..8

9..17

esempio	:

WRITE_INPUT	1

se ACC=3 solo ingresso 1 e 2 a 1 per 20 millisecondi;

Comando	:	WRITE_OUT	nn

valore	:	102

descrizione	:

Pone il contenuto dell'accumulatore nel registro dello stato delle uscite definito

dal blocco nn.

Tutte le 8 uscite vengono impostate contemporaneamente ed immediatamente.

blocco	output

1	1..8

2	9..17

esempio	:

WRITE_OUTPUT   1

se ACC=3 solo le uscite 1 e 2 a 1 con WRITE_OUTPUT;

Comando	:	WRITE_RELE	 nn

valore	:	103

descrizione	:

Pone il contenuto dell'accumulatore nel blocco nn dei rele interni.

I rele interni  sono divisi nei seguenti blocchi:

Relè	blocco

1..8	1

9..16	2

17..24	3

25..32	4

33..40	5

41..48	6

49..56	7

57..64	8

esempio	:

WRITE_RELE 	1

se ACC=3 solo i relè interni  1 e 2 a 1 con WRITE_RELE 1;

Comando	:	WRITE_SPEC_IN	 nn

valore	:	104

descrizione	:

Pone il contenuto dell'accumulatore nel blocco nn dei rele speciali di ingresso

I rele speciali di ingresso sono divisi nei seguenti blocchi:

Relè	blocco

0..7	1

8..15	2

16..23	3

24..31	4

32..39	5

40..47	6

48..55	7

56..63	8

esempio	:

WRITE_S_IN 	1

se ACC=3 solo i relè speciali di ingresso  1 e 2 a 1 con WRITE_S_IN 1;

Comando	:	WRITE_SPEC_OUT  	 nn

valore	:	105

descrizione	:

Pone il contenuto dell'accumulatore nel blocco nn dei rele speciali di uscita

I rele speciali di uscita sono divisi nei seguenti blocchi:

Relè	blocco

0..7	1

8..15	2

16..23	3

24..31	4

32..39	5

40..47	6

48..55	7

56..63	8

esempio	:

WRITE_S_OUT 	1

se ACC=3 solo i relè speciali di uscita  1 e 2 a 1 con WRITE_SPEC_IN 1;

Comando	:	AND	val

valore	:	106

descrizione	:

Esegue l'operazione di and logico sull''accumulatore  a 16 bit.

esempio	:

AND	128

se ACC=255 dopo AND 128 ACC=128;

Comando	:	OR	val

valore	:	107

descrizione	:

Esegue l'operazione di OR  logico sull''accumulatore a 16 bit

esempio	:

OR	128

se ACC=64 dopo OR  128 ACC=192;

Comando	:	XOR	val

valore	:	108

descrizione	:

Esegue l'operazione di XOR  logico sull''accumulatore  a 16 bit

esempio	:

XOR	128

se ACC=64 dopo XOR  128 ACC=255;

Comando	:	CPL

valore	:	109

descrizione	:

Esegue il complemento dei bit dell'accumulatore a 16 bit

esempio	:

CPL

se ACC=128  dopo CPL   ACC=127;

Comando	:	INC

valore	:	110

descrizione	:

Incrementa di una unità il valore dell'accumulatore a 16 bit

nota:

L'accumulatore logico ha ampiezza di 16 bit .Non sono emulati  flag di stato per cui eventuali  riporti sono irrimediabilmente persi.Tutte le operazioni matematiche inserite nella programmazione sono da intendersi a completamento delle operazioni logiche.

esempio	:

INC

se ACC=255  dopo INC   ACC=256;

Comando	:	DEC

valore	:	111

descrizione	:

Decrementa di una unità il valore dell'accumulatore a 16 bit

nota:

L'accumulatore logico ha ampiezza di 16 bit .Non sono emulati  flag di stato per cui eventuali  riporti sono irrimediabilmente persi.Tutte le operazioni matematiche inserite nella programmazione sono da intendersi a completamento delle operazioni logiche.

esempio	:

DEC

se ACC=0  dopo DEC   ACC=-32768;

Comando	:	ADD	val

valore	:	112

descrizione	:

Somma all'accumulatore il valore ad 16 bit val.

esempio	:

ADD	1234

se ACC=1521  dopo ADD 1234   ACC=2755;

Comando	:	SOTT	val

valore	:	113

descrizione	:

Sottrae  all'accumulatore il valore ad 16 bit val.

esempio	:

SOTT	12

se ACC=15  dopo SOTT 12   ACC=3;

Comando	:	DIV	val

valore	:	114

descrizione	:

Divide il contenuto  dell'accumulatore con il valore ad 16 bit val.

se il divisore è zero viene impostato lerrore di divisione e la divisione non viene effettuata

esempio	:

DIV	4

se ACC=32  dopo DIV 4   ACC=8;

Comando	:	MULT	val

valore	:	115

descrizione	:

Moltiplica il contenuto  dell'accumulatore con il valore ad 16 bit val.

esempio	:

MULT 	4

se ACC=32  dopo MULT 4   ACC=128;

Comando	:	ADD_MEM	nn

valore	:	116

descrizione	:

Somma all'accumulatore il valore ad 16 bit del contenuto della memoria nn

esempio	:

ADD_MEM	1

se ACC=1521 e MEM[1]=10 dopo ADD_MEM 1   ACC=1531;

Comando	:	SOTT_MEM	nn

valore	:	117

descrizione	:

Sottrae  all'accumulatore il valore ad 16 bit del contenuto della memoria nn

esempio	:

SOT_MEM  3

se ACC=15 e MEM[3]=-25 dopo SOTT _MEM  3   ACC=-10;

Comando	:	DIV_MEM	nn

valore	:	118

descrizione	:

Divide il contenuto  dell'accumulatore con il valore ad 16 bit del contenuto della memoria

se il divisore è zero viene impostato lerrore di divisione e la divisione non viene effettuata

esempio	:

DIV_MEM	3

se ACC=32  e  MEM[3] =4 dopo DIV _MEM  3   ACC=8;

Comando	:	MULT_MEM	nn

valore	:	119

descrizione	:

Moltiplica il contenuto  dell'accumulatore con il valore ad 16 bit del contenuto della memoria nn

esempio	:

MULT_MEM	4

se ACC=32  e MEM[4]=4 dopo MULT_MEM 4   ACC=128;

Comando	:	ADD_POP

valore	:	120

descrizione	:

Somma all'accumulatore il valore ad 16 bit  dello stack.

esempio	:

ADD_POP

se ACC=15  e STACK[CS]=19  dopo ADD_POP  ACC=34;

Comando	:	SOTT_POP

valore	:	121

descrizione	:

Sottrae  all'accumulatore il valore ad 16 bit  dello stack

esempio	:

SOTT_POP

se ACC=15 STACK[CS]=12  dopo SOTT_POP   ACC=3;

Comando	:	DIV_POP

valore	:	122

descrizione	:

Divide il contenuto  dell'accumulatore con il valore ad 8 bit dello stack

esempio	:

DIV_POP

se ACC=32  e STACK[CS]=6 dopo DIV_POP   ACC=5;

Comando	:	MULT_POP

valore	:	123

descrizione	:

Moltiplica il contenuto  dell'accumulatore con il valore ad 8 bit dello stack

esempio	:

MULT _POP

se ACC=32  e STACK[CS]= 4 dopo MULT_POP   ACC=128;

Comando	:	MOVE_MEM	nn,val

valore	:	124

descrizione	:

Imposta il valore a 16 bit val nella memoria nn

esempio	:

MOVE_MEM	2,34

la locazione di memoria 2 contiene il valore 34.

Comando	:	READ_MEM	nn

valore	:	125

descrizione	:

Pone nell'accumulatore il contenuto della locazione di memoria addr.

esempio	:

READ_MEM	2

Se la locazione di memoria 2 contiene il valore 34,ACC=34.

Comando	:	WRITE_MEM	nn

valore	:	126

descrizione	:

Pone  nella locazione di memoria nn il contenuto  dell'accumulatore

esempio	:

WRITE_MEM	2

Se ACC=34 la locazione di memoria 2 contiene il valore 34.

Comando	:	INC_MEM	nn

valore	:	126

descrizione	:

Incrementa il contenuto della memoria a 16 bit

esempio	:

INC_MEM	2

Se la locazione di memoria 2 contiene il valore 34,dopo INC_MEM 2 contiene 35

Comando	:	DEC_MEM	nn

valore	:	127

Decrementa il contenuto della memoria a 16 bit

esempio	:

DEC_MEM	2

Se la locazione di memoria 2 contiene il valore 34,dopo DEC_MEM 2 contiene 33

Comando	:	DMJNZ	nn,.addr

valore	:	128

Decrementa il contenuto della memoria nn e salta ad addr se il risultato è diverso da zero

esempio	:

DMJNZ	2,12345

Se la locazione di memoria 2 contiene il valore 34 e PC=100,dopo DMJNZ  2,1234

la memoria 2 contiene 33 e PC=104

Comando	:	READ_IND  nn

valore	:	129

descrizione	:

Legge il contenuto della memoria puntata dal contenuto della memoria NN

esempio	:

READ_I	14

Se MEM(14)=9 e MEM(9)=1000 dopo READ_IND ACC=1000 ( ACC=MEM(MEM(9)))

Comando	:	WRITE_IND  nn

valore	:	130

descrizione	:

Scrive il contenuto dell'accumulatore nella  memoria puntata dal contenuto della memoria NN

esempio	:

WRITE_I	14

Se MEM(14)=8 e ACC=7 dopo WRITE_IND MEM(8)=7 ( MEM(MEM(8))=ACC)

Comando	:	MOVE_IND  nn,val

valore	:	131

descrizione	:

Scrive il valore val nella  memoria puntata dal contenuto della memoria NN

esempio	:

MOVE_IND	14,1000

Se MEM(14)=8 dopo MOVE_IND 14,1000 MEM(8)=1000

Comando	:	COPY  dest,srg

valore	:	132

descrizione	:

Scrive il contenuto della memoria srg nella memoria destinazione

esempio	:

COPY 10,1

Se MEM(1)=2 con COPY 1,10 MEM(10)=2

Comando	:	PUSH

valore	:	133

descrizione	:

Salva il contenuto a 16 bit dellACC sullo stack.Incrementa il registro degli annidamenti

se si è superato il numero massimo degli annidamenti viene impostato un errore di stack

esempio	:

PUSH

Se ACC=100 e CS=4 dopo PUSH ACC=100 CS=5

Comando	:	POP

valore	:	134

descrizione	:

Ripristina il contenuto a 16 bit dellACC dallo stack.Decrementa il registro degli annidamenti Se il registro degli annidamenti è minore di zero viene  impostato un errore di stack

esempio	:

POP

Se ACC=100 e CS=4 e STACK [4]=2457 dopo POP ACC=2457 CS=3

Comando	:	TX_BIN

valore	:	135

descrizione	:

Trasmissione seriale in modo ascii del contenuto dell'accumulatore a 8 bit espesso in numero binario.

Questo comando usa la velocità di comunicazione del PLC , eventualmente si può reimpostare tramite il comando PLC_COM.

Trasmette il campo :

  b b b b b b b b

dove:

b	bit a 0 o 1 ( da destra il più significativo)

nota:

Nel MicroPLC la comunicazione seriale viene effettuata a interrupt e l'istruzione TX_BIN viene eseguita velocemente appoggiando i dati di uscita nel buffer apposito.

Se si pone l'istruzione nel programma direttamente si otterrra nel terminale una serie continua di stringhe senza inoltre riuscire ad reinserire la comunicazione anche con il programma  sim96.exe.

Si consiglia quindi di associare la comunicazione ad un bit e azzerarlo dopo subito  eseguita l'istruzione ,oppure a tempo usando un timer o l'orologio parziale.

Nel caso non si riuscisse a reimpostare la comunicazione tra il microPLC e simula.exe effettuare le seguenti operazioni:

Spegnere il microPLC.

Mandare in esecuzione il programma sim96.exe.

Impostare con il sim96.exe il numero di scheda e la velocita di comunicazione.

Accendere il MicroPlc.

Se si istaura la comunicazione avete 15 secondi per impostare lo stop programma del

microPLC.

esempio	:

.

.

PLC_NUM	3

PLC_COM	9600

READ_INPUT

TX_BIN

.Su un terminale posto a 9600 baud  compare

0 0 0 0 0 0 1 1

solo se gli ingressi 1 e 2 sono chiusi

Comando	:	TX_MEM	addr,len

valore	:	136

descrizione	:

Trasmette il contenuto della memoria addr fino ad addr+len.

Le memorie sono a 16 bit e contengono ognuna 2 caratteri

Questo comando usa la velocità di comunicazione del PLC , eventualmente si può reimpostare tramite il comando PLC_COM.

esempio	:

TX_MEM	1,5

se nella memoria 1..5 vi è una stringa valida questa sarà trasmessa

Comando	:	TX_VAR   f

valore	:	137

descrizione	:

Trasmissione seriale in modo ascii del contenuto dell'accumulatore a 16 bit espesso in numero decimale con numero di caratteri dato da f(1..4)

Questo comando usa la velocità di comunicazione del PLC , eventualmente si può reimpostare tramite il comando PLC_COM.

con	f

1	formattazione 0..9

2	formattazione 0..99

3	formattazione 0..999

4	formattazione 0..9999

nota:

Nel MicroPLC la comunicazione seriale viene effettuata a interrupt e l'istruzione TX_VAR viene eseguita velocemente appoggiando i dati di uscita nel buffer apposito.

Se si pone l'istruzione nel programma direttamente si otterrra nel terminale una serie continua di stringhe senza inoltre riuscire ad reinserire la comunicazione anche con il programma  sim96.exe.

Si consiglia quindi di associare la comunicazione ad un bit e azzerarlo dopo subito  eseguita l'istruzione ,oppure a tempo usando un timer o l'orologio parziale.

Nel caso non si riuscisse a reimpostare la comunicazione tra il microPLC e simula.exe effettuare le seguenti operazioni:

Spegnere il microPLC.

Mandare in esecuzione il programma sim96.exe.

Impostare con il sim96.exe il numero di scheda e la velocita di comunicazione.

Accendere il MicroPlc.

Se si istaura la comunicazione avete 15 secondi per impostare lo stop programma del

microPLC.

esempio	:

TX_VAR	3

Se ACC=123      dopo TX_VAR compare su un terminale collegato 123

Comando	:	TX_STR	addr

valore	:	138

descrizione	:

Trasmette il contenuto della memoria  di programma addr fino a che non incontra il carattere 0.

Poiche il buffere di uscita seriale a 40 byte di lunghezza per trasmettere stringhe più ampie bisogna spezzarle.In questo comando come in tutti gli altri TX... l'ultimo carattere trasmesso è sempre '\r'(Carriage Return);

Questo comando usa la velocità di comunicazione del PLC , eventualmente si può reimpostare tramite il comando PLC_COM.

nota:

Nel MicroPLC la comunicazione seriale viene effettuata a interrupt e l'istruzione TX_STR viene eseguita velocemente appoggiando i dati di uscita nel buffer apposito.

Se si pone l'istruzione nel programma direttamente si otterrra in uscita  una serie continua di caratteri senza  riuscire ad reinserire la comunicazione anche con il programma  sim96.exe.

Si consiglia quindi di associare la comunicazione ad un bit e azzerarlo dopo subito  eseguita l'istruzione ,oppure a tempo usando un timer o l'orologio parziale.

Nel caso non si riuscisse a reimpostare la comunicazione tra il microPLC e sim96.exe effettuare le seguenti operazioni:

Spegnere il microPLC.

Mandare in esecuzione il programma simula.exe.

Impostare con il simula.exe il numero di scheda e la velocita di comunicazione.

Accendere il MicroPlc.

Se si istaura la comunicazione avete 30 secondi per impostare lo stop programma del

microPLC.

esempio	:

.PLC_COM	9600

TX_TESTO	.str1

str1

def_testo	"questa e' una stringa "

Su un terminale posto a 9600 baud  compare

questa e' una stringa

Comando	:	 CALL_SUB	addr

valore	:	139

descrizione	:

il processore salva l'indirizzo di rientro sullo stack e salta alla locazione addr.

nota:

Il MicroPLC ha solo 16 locazioni di stack per cui non si possono annidare più di otto

chiamate a subroutine a patto di non impegnare lo stack per altre funzioni.

Visto comunque  il campo operativo della macchina riteniamo più che sufficenti tali dimensioni.

esempio	:

CALL_SUB	.nibble_to_num	..

.nibble_to_num

AND	15	; maschero parte bassa accumulatore

ADD	48	;trasformo da '0' a '9'

RET

converte la parte bassa del contenuto dell'accumulatore nel carattere corrispondente

da 0 a 9.

Comando	:	RET

valore	:	140

descrizione	:

Riprende il contenuto delle ultime due locazioni dello stack e le imposta nel contatore di programma.

nota:

Questa istruzione va usata per rientrare da una chiamata a subroutine effettuata con SUB.

Il rientro da subroutine può essere comunque reindirizzato sostituendo l'indirizzo di rientro sullo stack con POP e PUSH

esempio	:

SUB	.nibble_to_h_num

..

.nibble_to_h_num

AND	240	; maschero parte alta accumulatore

SHIFT_R	4

ADD	48	;trasformo da '0' a '9'

RETURN

converte la parte bassa del contenuto dell'accumulatore nel carattere corrispondente

da 0 a 9.

Comando	:	SWAP

valore	:	141

descrizione	:

Scambia il contenuto dell'accumulatore con quello del registro temporaneo

nota:

Questa istruzione viene usata nelle operazioni matematiche,oppure per salvare un dato senza inpegnare lo stack

esempio	:

SWAP

Se ACC=9 e REG=10 con SWAP ACC=10 e REG=9

Comando	:	CLR_RX

valore	:	142

descrizione	:

Resetta il buffer secondario di ricezione seriale.

Nel microPlc la ricezione seriale viene effettuata nel seguente modo:

Vi sono due buffer di ricezione di cui uno per la ricezione in modo binario secondo il prototcollo definito

nel capitolo "comunicazione Seriale" ed uno per la ricezione da programma.

Mentre nel caso della ricezione binaria , pensa a tutto il software del monitor interno e quindi

controlla il carattere di start, la lunghezza messaggio,la checksum etc,il buffer per la ricezione

seriale da programma viene riempito da tutti i caratteri che arrivano in sequenza (per un massimo di 24 bites),dopo di che tutti i successivi caratteri vengono persi.Con clear_rx  si svuota completamente

il buffer di ricezione secondario.

esempio	:

.CLR_RX

Comando	:	WAIT_RX	nn

valore	:	143

descrizione	:

Apetta che nel buffer secondario seriale vi siamo nn caratteri, o che sia trascorso più di 10 secondi nell'attesa di un carattere.

Wait_Rx congela  la scansione del programma e attende che siano stati ricevuti nn  caratteri.

Se durante l'attesa dei caratteri si riceve il carattere 0x10 (\n') o 0x13 (\r') il microPLC lo interpreta

come fine linea e riazzera il contatore dei caratteri ricevuti.

esempio	:

.CLEAR_RX

WAIT_RX	5

Comando	:	TEST_RX	addr str,addr vero

valore	:	144

descrizione	:

Confronta la stringa contenuta all'indirizzo addr str con il contenuto del buffer secondario di ricezione seriale.Nel caso che il confronto dia un riasultato vero il flusso del programma passa all'indirizzo addr vero

esempio	:

.

CLEAR_RX

WAIT_RX	5

TEST_RX	.input,.tx_input

.input

DEF_TESTO	"INPUT"

Comando	:	TX_RX

valore	:	145

descrizione	:

Trasmette  via seriale il contenuto del buffer secondario di ricezione seriale.Permette

quindi di implementare il full duplex.

esempio	:

.CLEAR_RX

WAIT_RX	5

TEST_RX	.input,.tx_input

.

.

.tx_input

TX_RX

.

.input

DEF_TESTO	"INPUT"

Comando	:	ON_RX      dato,addr vero

valore	:	146

descrizione	:

Salta all'indirizzo addr vero se si riceve il carattere dato.ON_RX permette uno pseudo interrupt software

per poter eseguire in parallelo ad un programma in esecuzione, la ricezione seriale impostata dall'utente.

In pratica ON_RX testa ad ogni scansione di programma se è stato ricevuto il carattere definito in dato

e quindi se è stato ricevuto passa all'indirizzo specificato,chiaramente se i tempi di scansione sono molto elevati la risposta a questo comando è lenta.

esempio	:

ON_RX	255,.tx_rx

..

..

.tx_rx

TEST_RX	.input,.tx_input

.

.

.input

DEF_TESTO	"INPUT"

Comando	:	READ_RX	nn

valore	:	147

descrizione	:

Legge il byte numero nn dal buffer secondario di ricezione seriale.Serve essenzialmente per ricevere dati tramite un protocollo utente via seriale.

Il valore del bite nn  passa nei primi 8 bit dell'accumulatore.

esempio	:

READ_RX 	18

Comando	:	STRCPY 	addr1,addr

valore	:	149

descrizione	:

Copia la stringa dalla memoria di programma addr alla memoria variabili addr1

Questo comando è usato come formattatore di stringhe infatti si può copiare una stringa in memoria variabili, modificare le locazioni che interessano e trasmettere il risultato ottenuto con TX_MEM

Se la stringa definita ad addr1   è piu lunga di 40 bytes viene troncata.

esempio	:

.

STRCPY	.str1,0

.

.st1

def_testo	"tempo di funzionamento =         \n"

Comando	:    	 ASC_HEX   nn

valore	:	150

descrizione	:

converte il contenuto ASCII della memoria nn in formato esadecimale e lo pone nell'accumulatore

esempio	:

ASC_HEX	1

se MEM[1]=90 ACC=90

Comando	:	PEEK nn

valore	:	151

descrizione	:

Legge il byte puntato dalla memoria nn e lo pone bei primi 8 bit dellaccumulatore .Il precedente contenuto dell'accumulatore passa nel registro temporaneo.

esempio	:

PEEK	8

Se MEM[8]=540 legge il contenuto della locazione di memoria programma numero 540

Comando	:	POKE nn

valore	:	152

descrizione	:

Scrive il byte all'indirizzo puntato dal contenuto della memoria nn  con il valore a 8 bit contenuto dall'accumulatore.

Non viene modificato ne il contenuto dell'accumulatore ne il contenuto del registro temporaneo.

esempio	:

POKE	8

Se MEM[8]=540 ACC=100 il contenuto della locazione di memoria programma numero 540  diviene 100.

Comando	:	LOAD_RELE_IND	nn

valore	:	153

descrizione	:

Carica nell'accumulatore lo stato dei contatti ausiliari normalmente aperti del rele interno dato dal contenuto della memoria nn.

esempio	:

vedere la corrispondente istruzione diretta

Comando	:	LOAD_RELE_NOT_IND	nn

valore	:	154

descrizione	:

Carica nell'accumulatore lo stato dei contatti ausiliari normalmente chiusi della bobina

dato dal contenuto della memoria nn

esempio	:

vedere la corrispondente istruzione diretta

Comando	:	LOAD_INPUT_IND	nn

valore	:	155

descrizione	:

Carica nell'accumulatore lo stato del contatto sull'ingresso hardware dato dal  contenuto della memoria nn

esempio	:

vedere la corrispondente istruzione diretta

Comando	:	LOAD_INPUT_NOT_IND	nn

valore	:	156

descrizione	:

Carica nell'accumulatore lo stato  invertito del contatto sull'ingresso hardware dato dal  contenuto della memoria nn

esempio	:

vedere la corrispondente istruzione diretta

Comando	:	LOAD_OUT_IND	nn

valore	:	157

descrizione	:

Carica nell'accumulatore lo stato del contatto normalmente aperto del rele di uscita dato dal  contenuto della memoria nn

esempio	:

vedere la corrispondente istruzione diretta

Comando	:	LOAD_OUT_NOT_IND	nn

valore	:	158

descrizione	:

Carica nell'accumulatore lo stato del contatto normalmente chiuso del rele di uscita dato dal  contenuto della memoria nn

esempio	:

vedere la corrispondente istruzione diretta

Comando	:	LOAD_TIMER_IND	nn

valore	:	159

descrizione	:

Carica nell'accumulatore lo stato del contatto  temporizzato normalmente aperto del timer dato dal  contenuto della memoria nn

esempio	:

vedere la corrispondente istruzione diretta

Comando	:	LOAD_TIMER_NOT_IND	nn

valore	:	160

descrizione	:

Carica nell'accumulatore lo stato del contatto  temporizzato normalmente chiuso del timer dato dal  contenuto della memoria nn

esempio	:

vedere la corrispondente istruzione diretta

Comando	:	LOAD_COUNTER_IND	nn

valore	:	161

descrizione	:

Carica nell'accumulatore lo stato del contatto normalmente aperto del contatore dato dal  contenuto della memoria nn

esempio	:

vedere la corrispondente istruzione diretta

Comando	:	LOAD_COUNTER_NOT_IND 	nn

valore	:	162

descrizione	:

Carica nell'accumulatore lo stato del contatto  normalmente chiuso del contatore dato dal  contenuto della memoria nn

esempio	:

vedere la corrispondente istruzione diretta

Comando	:	LOAD_SPEC_IND	nn

valore	:	163

descrizione	:

Carica nell'accumulatore lo stato del contatto speciale dato dal  contenuto della memoria nn

esempio	:

vedere la corrispondente istruzione diretta

Comando	:	LOAD_SPEC_NOT_IND	nn

valore	:	164

descrizione	:

Carica nell'accumulatore lo stato invertito  del contatto speciale dato dal  contenuto della memoria nn

esempio	:

vedere la corrispondente istruzione diretta

Comando	:	LOAD_OROL_IND	nn

valore	:	165

descrizione	:

Carica nell'accumulatore lo stato del contatto dellorologio dato dal  contenuto della memoria nn

esempio	:

vedere la corrispondente istruzione diretta

Comando	:	LOAD_OROL_NOT_IND	nn

valore	:	166

descrizione	:

Carica nell'accumulatore lo stato invertito  del contatto dellorologio dato dal  contenuto della memoria nn

esempio	:

vedere la corrispondente istruzione diretta

Comando	:	STORE_RELE_IND	nn

valore	:	167

descrizione	:

Scarica lo stato dell'accumulatore logico nella bobina dato dal  contenuto della memoria nn

esempio	:

vedere la corrispondente istruzione diretta

Comando	:	STORE_OUT_IND	nn

valore	:	168

descrizione	:

Scarica lo stato dell'accumulatore logico nell'uscita dato dal  contenuto della memoria nn

esempio	:

vedere la corrispondente istruzione diretta

Comando	:	STORE_TIMER_IND	nn

valore	:	169

descrizione	:

Scarica lo stato dell'accumulatore logico nella bobina del timer dato dal  contenuto della memoria nn

esempio	:

vedere la corrispondente istruzione diretta

Comando	:	STORE_COUNTER_IND	nn

valore	:	170

descrizione	:

Scarica lo stato dell'accumulatore logico nella bobina del contatore dato dal  contenuto della memoria nn

esempio	:

vedere la corrispondente istruzione diretta

Comando	:	STORE_OROL_IND	nn

valore	:	171

descrizione	:

Scarica lo stato dell'accumulatore logico nella bobina dellorologio dato dal  contenuto della memoria nn

esempio	:

vedere la corrispondente istruzione diretta

Comando	:	STORE_SPEC_IND	nn

valore	:	172

descrizione	:

Scarica lo stato dell'accumulatore logico nella bobina speciale dato dal  contenuto della memoria nn

esempio	:

vedere la corrispondente istruzione diretta

Comando	:	AND_RELE_IND	nn

valore	:	173

descrizione	:

Esegue la funzione di and ( serie di due contatti ) tra lo stato logico che si trovanell'accumulatore logico e i contatti ausiliari normalmente aperti del rele interno dato dal  contenuto della memoria nn

esempio	:

vedere la corrispondente istruzione diretta

Comando	:	AND_RELE_NOT_IND	nn

valore	:	174

descrizione	:

Esegue la funzione di and ( serie di due contatti ) tra lo stato logico che si trovanell'accumulatore logico e i contatti ausiliari normalmente chiusi  del rele interno dato dal  contenuto della memoria nn

esempio	:

vedere la corrispondente istruzione diretta

Comando	:	AND_INPUT_IND	nn

valore	:	175

descrizione	:

Esegue la funzione di and ( serie di due contatti ) tra lo stato logico che si trovanell'accumulatore logico e l'ingresso hardware dato dal  contenuto della memoria nn

esempio	:

vedere la corrispondente istruzione diretta

Comando	:	AND_INPUT_NOT_IND	nn

valore	:	176

descrizione	:

Esegue la funzione di and ( serie di due contatti ) tra lo stato logico che si trovanell'accumulatore logico e l'ingresso hardware invertito dato dal  contenuto della memoria nn

esempio	:

vedere la corrispondente istruzione diretta

Comando	:	AND_OUT_IND	nn

valore	:	177

descrizione	:

Esegue la funzione di and ( serie di due contatti ) tra lo stato logico che si trovanell'accumulatore logico e i contatti ausiliari normalmente aperti dell'l'uscita hardware dato dal  contenuto della memoria nn

esempio	:

vedere la corrispondente istruzione diretta

Comando	:	AND_OUT_NOT_IND	nn

valore	:	178

descrizione	:

Esegue la funzione di and ( serie di due contatti ) tra lo stato logico che si trovanell'accumulatore logico e i contatti ausiliari normalmente chiusi dell'uscita hardware dato dal  contenuto della memoria nn

esempio	:

vedere la corrispondente istruzione diretta

Comando	:	AND_TIMER_IND	nn

valore	:	179

descrizione	:

Esegue la funzione di and ( serie di due contatti ) tra lo stato logico che si trova nell'accumulatore logico e i contatti ausiliari normalmente aperti del timer dato dal  contenuto della memoria nn

esempio	:

vedere la corrispondente istruzione diretta

Comando	:	AND_TIMER_NOT_IND	nn

valore	:	180

descrizione	:

Esegue la funzione di and ( serie di due contatti ) tra lo stato logico che si trova nell'accumulatore logico e i contatti ausiliari normalmente chiusi del timer dato dal  contenuto della memoria nn

esempio	:

vedere la corrispondente istruzione diretta

Comando	:	AND_COUNTER_IND	nn

valore	:	181

descrizione	:

Esegue la funzione di and ( serie di due contatti ) tra lo stato logico che si trova nell'accumulatore logico e i contatti ausiliari normalmente aperti del contatore dato dal  contenuto della memoria nn

esempio	:

vedere la corrispondente istruzione diretta

Comando	:	AND_COUNTER_NOT_IND	nn

valore	:	182

descrizione	:

Esegue la funzione di and ( serie di due contatti ) tra lo stato logico che si trova nell'accumulatore logico e i contatti ausiliari normalmente chiusi del contatore dato dal  contenuto della memoria nn

esempio	:

vedere la corrispondente istruzione diretta

Comando	:	AND_SPEC_IND	nn

valore	:	183

descrizione	:

Esegue la funzione di and ( serie di due contatti ) tra lo stato logico che si trova nell'accumulatore logico e i contatti speciali dato dal  contenuto della memoria nn

esempio	:

vedere la corrispondente istruzione diretta

Comando	:	AND_SPEC_NOT_IND	nn

valore	:	184

descrizione	:

Esegue la funzione di and ( serie di due contatti ) tra lo stato logico che si trova nell'accumulatore logico e l'inverso del contatti specialie dato dal  contenuto della memoria nn

esempio	:

vedere la corrispondente istruzione diretta

Comando	:	AND_OROL_IND	nn

valore	:	185

descrizione	:

Esegue la funzione di and ( serie di due contatti ) tra lo stato logico che si trova nell'accumulatore logico e i contatti di uscita dellorologio dato dal  contenuto della memoria nn

esempio	:

vedere la corrispondente istruzione diretta

Comando	:	AND_OROL_NOT_IND	nn

valore	:	186

descrizione	:

Esegue la funzione di and ( serie di due contatti ) tra lo stato logico che si trova nell'accumulatore logico e il contatto normalmente chiuso dellorologio dato dal  contenuto della memoria nn

esempio	:

vedere la corrispondente istruzione diretta

Comando	:	AND_F_UP_IND	nn

valore	:	187

descrizione	:

Esegue la funzione di and ( serie di due contatti ) tra lo stato logico che si trova nell'accumulatore logico e il rivelatore di fronte di salita dato dal  contenuto della memoria nn

esempio	:

vedere la corrispondente istruzione diretta

Comando	:	AND_F_DOWN_IND	nn

valore	:	188

descrizione	:

Esegue la funzione di and ( serie di due contatti ) tra lo stato logico che si trova nell'accumulatore logico e il rilevatore di fronti in dcesa dato dal  contenuto della memoria nn

esempio	:

vedere la corrispondente istruzione diretta

Comando	:	OR_RELE_IND	nn

valore	:	189

descrizione	:

Esegue la funzione di or( parallelo di due contatti ) tra lo stato logico che si trovanell'accumulatore logico e i contatti ausiliari normalmente aperti del rele interno dato

dal  contenuto della memoria nn

esempio	:

vedere la corrispondente istruzione diretta

Comando	:	OR_RELE_NOT_IND	nn

valore	:	190

descrizione	:

Esegue la funzione di or( parallelo di due contatti ) tra lo stato logico che si trovanell'accumulatore logico e i contatti ausiliari normalmente chiusi  del rele interno dato dal  contenuto della memoria nn

esempio	:

vedere la corrispondente istruzione diretta

Comando	:	OR_INPUT_IND	nn

valore	:	191

descrizione	:

Esegue la funzione di or( parallelo di due contatti )  tra lo stato logico che si trovanell'accumulatore logico e l'ingresso hardware dato dal  contenuto della memoria nn

esempio	:

vedere la corrispondente istruzione diretta

Comando	:	OR_INPUT_NOT_IND	nn

valore	:	192

descrizione	:

Esegue la funzione di or( parallelo di due contatti )  tra lo stato logico che si trovanell'accumulatore logico e l'ingresso hardware invertito dato dal  contenuto della memoria nn

esempio	:

vedere la corrispondente istruzione diretta

Comando	:	OR_OUT_IND	nn

valore	:	193

descrizione	:

Esegue la funzione di or( parallelo di due contatti )  tra lo stato logico che si trovanell'accumulatore logico e i contatti ausiliari normalmente aperti dell'l'uscita hardware dato dal  contenuto della memoria nn

esempio	:

vedere la corrispondente istruzione diretta

Comando	:	OR_OUT_NOT_IND	nn

valore	:	194

descrizione	:

Esegue la funzione di or( parallelo di due contatti )  tra lo stato logico che si trovanell'accumulatore logico e i contatti ausiliari normalmente chiusi dell'uscita hardware dato dal  contenuto della memoria nn

esempio	:

vedere la corrispondente istruzione diretta

Comando	:	OR_TIMER_IND	nn

valore	:	195

descrizione	:

Esegue la funzione di or( parallelo di due contatti )  tra lo stato logico che si trova nell'accumulatore logico e i contatti ausiliari normalmente aperti del timer dato dal  contenuto della memoria nn

esempio	:

vedere la corrispondente istruzione diretta

Comando	:	OR_TIMER_NOT_IND	nn

valore	:	196

descrizione	:

Esegue la funzione di or( parallelo di due contatti )  tra lo stato logico che si trova nell'accumulatore logico e i contatti ausiliari normalmente chiusi del timer dato dal  contenuto della memoria nn

esempio	:

vedere la corrispondente istruzione diretta

Comando	:	OR_COUNTER_IND	nn

valore	:	197

descrizione	:

Esegue la funzione di or( parallelo di due contatti ) tra lo stato logico che si trova nell'accumulatore logico e i contatti ausiliari normalmente aperti del contatore dato dal  contenuto della memoria nn

esempio	:

vedere la corrispondente istruzione diretta

Comando	:	OR_COUNTER_NOT_IND	nn

valore	:	198

descrizione	:

Esegue la funzione di or( parallelo di due contatti )  tra lo stato logico che si trova nell'accumulatore logico e i contatti ausiliari normalmente chiusi del contatore dato dal  contenuto della memoria nn

esempio	:

vedere la corrispondente istruzione diretta

Comando	:	OR_SPEC_IND	nn

valore	:	199

descrizione	:

Esegue la funzione di or( parallelo di due contatti )  tra lo stato logico che si trova nell'accumulatore logico e i contatti speciali dato dal  contenuto della memoria nn

esempio	:

vedere la corrispondente istruzione diretta

Comando	:	OR_SPEC_NOT_IND	nn

valore	:	200

descrizione	:

Esegue la funzione di or( parallelo di due contatti )  tra lo stato logico che si trova nell'accumulatore logico e l'inverso del contatti specialie dato dal  contenuto della memoria nn

esempio	:

vedere la corrispondente istruzione diretta

Comando	:	OR_OROL_IND	nn

valore	:	201

descrizione	:

Esegue la funzione di or( parallelo di due contatti ) tra lo stato logico che si trova nell'accumulatore logico e i contatti ausiliari normalmente aperti dellorologio dato dal  contenuto della memoria nn

esempio	:

vedere la corrispondente istruzione diretta

Comando	:	OR_OROL_NOT_IND	nn

valore	:	202

descrizione	:

Esegue la funzione di or( parallelo di due contatti )  tra lo stato logico che si trova nell'accumulatore logico e i contatti ausiliari normalmente chiusi dellorologio dato dal  contenuto della memoria nn

esempio	:

vedere la corrispondente istruzione dirett.

1.08	Mappa di memoria.

Tramite i comandi Peek  e Poke   si può interagire direttamente con il programma interno del microPLC.

Mentre con Peek si legge una qualsiasi memoria di programma e di sitema, con poke si scrive.

Di seguito è riportata la mappa di memoria per il microPLC a 8k ram e 8 canali analogici

area programma 0..700

Addr	Len	Spiegazione
700	80	40 variabili di memoria a 16 bit   MEM[0]...MEM[39]
780	11	Orologio di sistema: decimi,(sec,min,ore non da orologio), secondi,minuti,ore,anno,mese,giorno,giorno settimanale
791	40	timer 1,8:impostazione (16bit),valore(16bit),,modo
831	20	orologi 1..4:dato1..dato4,mode
851	40	contattori  1..8 impostazione (16bit),valore(16bit),,modo
891	1	Fronti di salita
892	1	Fronti di discesa
893	2	input 1,input 2
895	1	bobine uscite
896	1	bobine timer
897	1	bobine contatori
898	1	bobine orologio
899	8	bobine rele 1..64
907	8	bobine speciali di ingresso
915	8	bobine speciali di uscita
923	1	numero di plc
924	1	velocità di comunicazione seriale
925	1	stato plc
926	1	modo del plc
927	3	firma run stop trace
930	2	indirizzo rientro per start program
932	1	errori
933	1	Trimming orologio da 0 a 7 default  4
934	36	buffer ricezione seriale
973	54	buffer trasmissione seriale
1.09 	ESEMPI

Vengono di seguito riportati gli esempi dati a corredo del MicroPLCD1208

TRASMISSIONE SERIALE

;****************************************************************

;

;	ESEMPIO FUNZIONAMENTO COMANDI TRASMISSIONE

;	(C&P	96	ECOPLC)

;

;****************************************************************

#label	trasm

#label	str_1

#label	str_2

plc_num	1

plc_com	6

enable

slave

start_program

load_input	1	;input 1 trasmetto

and_f_up	1	;solo una volta

if_set_jump	 .trasm

end_program

.trasm

preset

write_out	1	;cts modem

tx_str	.str_1	;trasmetto la stringa

move	1	;trasmetto un carattere

tx_var	1

tx_str	.str_2	;trasmetto la stringa	separatore

move	10	; tx 2

tx_var	2

tx_str	.str_2	;trasmetto la stringa	separatore

move	100

tx_var	3

tx_str	.str_2	;trasmetto la stringa	separatore

move	1000

tx_var	4

tx_str	.str_2	;trasmetto la stringa	separatore

reset

write_out	1	;CTS modem

end_program

.str_1

def_testo "Esempio di trasmissione seriale da plc \n\r\t"

.str_2

def_testo "\n\r\t"

CENTRALINA DI ALLARME

;****************************************************************************

;	CENTALINA ALLARMI:

;	8 allarmi con tacitazione e test lampade

;	INPUT 	1..8	ingressi allarme

;	OUTPUT	1..8         uscite allarme

;	INPUT	9	pulsante tacitazione

;	INPUT	10	test funzionale

;FUNZIONAMENTO::

;	INPUT	OUTPUT	TACITAZIONE	TEST

;	0	0	0	0

;	1	1	0	0

;	0	0..1..0..1	0	0

;	x	0	1	x

;	x	0..1..0..1	0	1

;***************************************************************************************************

#label	scansione	;indirizzo di rientro per scansione ingressi

plc_num	1;plc numero 1

plc_com	8;plc comunicazione 57,6k

enable	;ingressi abilitati

slave	;modo slave

start_program	;lettura hardware ingressi

;inizizione variabili

move_mem	10,8

;start loop scansione allarmi

.scansione

load_input	10	;siamo in test

push

load_input_ind	10	;input 8..1

or_rele_ind	10	;uscite 8..1 cattura

or_pop	;in test ?

and_input_not	9	;tacitazione

store_rele_ind	10	;cattura impulso su rele 8..1

load_rele_ind	10	;segnale catturato

and_spec	1	;in serie a lampeggio

or_input_ind	10	;segnale presente,uscita fissa

and_input_not	9	;tacitazione

store_out_ind	10	;segnalazione su uscita 8..1

dmjnz	10,.scansione	;repeati su mememoria

;fine loop scansione

end_program	;scrittura hardware uscite

CENTRALINA DI ALLARME+TX SERIALE

;*******************************************************************************************************************

;CENTALINA ALLARMI + MONITORAGGIO SERIALE:

; MONITORAGGIO SERIALE::

;	1	TRASMISSIONE STATO CENTRALINA ALLA RICEZIONE

;	DEL CARATTERE SER_CAR

;	1	stringa di allarme per ogni ingresso

;********************************************************************************************************************

#label	scansall	;indirizzo di rientro per scansione ingressi all.

#label	scanstx	;indirizzo di rientro per scansione ingressi trasm.

#label	trasm	;indirizzo trasmissione seriale

#label	test	;indirizzo test funzinale

#label	test_str	;indirizzo test funzionale stringa

#label	str_1	;indirizzo 1° stringa allarme

#label	str_2	;indirizzo 2° stringa allarme

#label	str_3	;indirizzo 3° stringa allarme

#label	str_4	;indirizzo 4° stringa allarme

#label	str_5	;indirizzo 5° stringa allarme

#label	str_6	;indirizzo 6° stringa allarme

#label	str_7	;indirizzo 7° stringa allarme

#label	str_8	;indirizzo 8° stringa allarme

#label	str_9	;indirizzo 9° stringa allarme

#label	allarme1	;indirizzo trasmissione allarme 1

#label	allarme2	;indirizzo trasmissione allarme 2

#label	allarme3	;indirizzo trasmissione allarme 3

#label	allarme4	;indirizzo trasmissione allarme 4

#label	allarme5	;indirizzo trasmissione allarme 5

#label	allarme6	;indirizzo trasmissione allarme 6

#label	allarme7	;indirizzo trasmissione allarme 7

#label	allarme8	;indirizzo trasmissione allarme 8

#label	allarme9	;indirizzo trasmissione allarme 9

#label	rientro1	;rientro da trasmissione stringa 1

#label	rientro2	;rientro da trasmissione stringa 2

#label	rientro3	;rientro da trasmissione stringa 3

#label	rientro4	;rientro da trasmissione stringa 4

#label	rientro5	;rientro da trasmissione stringa 5

#label	rientro6	;rientro da trasmissione stringa 6

#label	rientro7	;rientro da trasmissione stringa 7

#define	SER_CAR	49	;carattere '1' pre risposta da centralina 1 etc

plc_num	1

plc_com	6	;19200 baud

enable

slave

set_timer	1,2,5	;timer 1 test lampade 5 secondi

start_program	;lettura hardware ingressi

clr_rx	;reset ricezione

on_rx	SER_CAR,.trasm	;vai a trasm se rx carattere SER_CAR

;test lampade max 5 secondi

load_input	10	; test

or_rele	10	;cattura test funzionale

and_input_not	9	;tacitazione

and_timer_not	1	;fine test funzionale 5 sec

store_rele	10	;memorizzo per stato test

store_timer	1	;partenza timer fine test

;inizizione variabili loop

move_mem	10,9

;start loop scansione ingressi 8..->..1

.scansall

load_input_ind	10	;input 8..1

or_rele_ind	10	;uscite 8..1 cattura

and_input_not	9	;tacitazione

store_rele_ind	10	;cattura impulso su rele 8..1

load_rele_ind	10	;segnale catturato

and_spec	1	;in serie a lampeggio

or_input_ind	10	;segnale sempre presente,uscita fissa

and_input_not	9	;tacitazione

or_rele	10	;test funzionale

store_out_ind	10	;segnalazione su uscita 8..1

dmjnz	10,.scansall	;repeati su mem10

;fine loop scansione

end_program	;scrittura hardware uscite

.trasm

load_rele	10	; in test funzionale

if_set_jump	.test

read_rele	1

if_reset_jump	.allarme9

load_rele	1

if_set_jump	.allarme1	;scansione allarme	1

.rientro1

load_rele	2

if_set_jump	.allarme2	;scansione allarme	2

.rientro2

load_rele	3

if_set_jump	.allarme3	;scansione allarme	3

.rientro3

load_rele	4

if_set_jump	.allarme4	;scansione allarme	4

.rientro4

load_rele	5

if_set_jump	.allarme5	;scansione allarme	5

.rientro5

load_rele	6

if_set_jump	.allarme6	;scansione allarme	6

.rientro6

load_rele	7

if_set_jump	.allarme7	;scansione allarme	7

.rientro7

load_rele	8

if_set_jump	.allarme8	;scansione allarme	8

end_program	;se fine scansione

.test

tx_str	.test_str

end_program	;blocco scansione allarmi

.allarme9

tx_str	.str_9

end_program	;nessuna allarme

.allarme1

tx_str	.str_1

jump	.rientro1

.allarme2

tx_str	.str_2

jump	.rientro2

.allarme3

tx_str	.str_3

jump	.rientro3

.allarme4

tx_str	.str_4

jump	.rientro4

.allarme5

tx_str	.str_5

jump	.rientro5

.allarme6

tx_str	.str_6

jump	.rientro6

.allarme7

tx_str	.str_7

jump	.rientro7

.allarme8

tx_str	.str_8

end_program

.test_str

def_testo	"	ALLARMI::	IN TEST FUNZIONALE\n\r"

.str_1

def_testo	"	ALLARME::	INTERRUTTORE MAGNETOTERMICO SERVIZI\n\r"

.str_2

def_testo	"	ALLARME::	INTERRUTTORE MAGNETOTERMICO POTENZA\n\r"

.str_3

def_testo	"	ALLARME::	DIFFERENZIALE SERVIZI\n\r"

.str_4

def_testo	"	ALLARME::	DIFFERENZIALE POTENZA\n\r"

.str_5

def_testo	"	ALLARME::	MAX TEMPERATURA TRASFORMATORE SERVIZI\n\r"

.str_6

def_testo	"	ALLARME::	MAX TEMPERATURA TRASFORMATORE POTENZA\n\r"

.str_7

def_testo	"	ALLARME::	RELE GAS TRASFORMATORE SERVIZI\n\r"

.str_8

def_testo	"	ALLARME::	RELE GAS TRASFORMATORE POTENZA\n\r"

.str_9

def_testo	"	ALLARMI::	NESSUN ALLARME E' PRESENTE\n\r"

FUNZIONAMENTO OROLOGI

;***************************************************************

;	ESEMPIO FUNZIONAMENTO OROLOGI

;	(C&P	96	ECOPLC)

;

;	OROLOGIO	N°1	:

;	MODO	1	:START ORA

;	PARAMETRI	2	:ORA MINUTI

;	per un minuto orologio in off poi sempre spento

;

;	OROLOGIO	N°2	:

;	MODO	1	:START ORA STOP ORA

;	PARAMETRI	2	:ORA MINUTI ORA MINUTI

;	orologio in on all'ora di start in off all'ora di stop

;	in caso di mancanza di tensione tra start e stop

;	si perde lo stato di on

;

;	OROLOGIO	N°3	:

;	MODO	1	:START ORA E DATA

;	PARAMETRI	2	:ORA MINUTI GIORNO MESE

;	orologio on all'ora del giorno forza a off per giorno

;	diverso da quello impostato o per mancanza di rete

;

;	OROLOGIO	N°4	:

;	MODO	1	:DATA START DATA STOP

;	PARAMETRI	2	:GIORNO MESE GIORNO MESE

;	orologio a on per tutto il giorno di start

;	orologio a off per turro il giorno di stop

;	stato memorizzato per giorni diversi da start e stop

;***************************************************************

plc_num	1

plc_com	6

enable

slave

set_orol	1,1,8,30,0,0	;orologio 1 start alla ore 08:30

set_orol	2,2,8,30,18,00  	;orologio 2 start 08:30 stop 18:00

set_orol	3,3,8,30,10,12	;orologio 3 start 08.30 del 10/12

set_orol	4,4,10,06,12,7	:orologio 4 start 10/06 stop 12/7

start_program

preset

store_orol	1	;in funzione gli orologi

store_orol	2

store_orol	3

store_orol	4

load_orol	2

and_orol	4

store_out	1	;out 1 On dalle 08:30 alle 118:00 del

;10/06 al 12/7

end_program

DATA  RECORDER

;****************************************************************

;	ESEMPIO FUNZIONAMENTO PEEK e POKE

;	(C&P	96	ECOPLC)

;

;	PEEK E POKE COME AMPLIAMENTO DELLE ISTRUZIONI

;	PER MANIPOLAZIONE MEMORIA INTERNA PLC

;	ATTENZIONE QUESTI COMANDI SONO COMPLETAMENTE

;	LIBERI DA VINCOLI DEL SISTEMA OPERATIVO E

;	DEVE ESSERE CURA DEL PROGRAMMATORE NON ANDARE A

;	INTERAGIRE CON VARIABILI INTERNE CHE POSSONO

;	PORTARE AL MALFUNZIONAMENTO DELLA MACCHINA

;	Il seguente esempio mostra come si puo usare il ecoplc

;	come data logger.

;	Ogni variazione dell'ingresso viene memorizzata e immagazzi

;	nata in memoria.

;	Si è abilitata la ricezione seriale per poter scaricare

;	da terminale le registrazioni eseguite

;	Una uscita viene usata per interdire le comunicazioni (CTS)

;	da modem quando si è in fase di memorizzazione

;	Il buffer è organizzato nella memoria interna di programma

;	e viene gestito tramite i comandi PEEK e POKE.In questo

;	modo si ottiene una traccia storica di 500 record in fornmato

;	circolare ,ovvero si perde sempre la registrazione piu

;	vecchia

;****************************************************************

#label	record

#label	no_record

#label	circola

#label	next_char

#label	abs_rec

#label	trasm

#label	retrasm

#label	skip

#label	str_1

#label	str_2

#label	str_3

#label	str_4

#label	str_5

#label	retry_rec

#label	retry_res

#define	BASEREC	400

#define	BASEREC+1	401

#define	LENREC	150

#define	LENREC-1	149

#define	REC	550

#define	REC+1	551

plc_num	1

plc_com	6

enable

slave

move_mem	10,BASEREC  ;indirizzo partenza memorizzazione

move_mem	20,0	;controllo variazione input

start_program

clr_rx	;reset ricezione

on_rx	'>',.trasm	;alla ricezione di > risposta

reset

store_out	1

read_input	1

if_ind_eq_jump	20,.skip

write_mem	20	;memorizzo nuovo stato

preset

store_out	1	;cts	modem

jump	.record	;registro

.skip

end_program

.record

read_mem	10

if_gtr_jump	REC,.circola

.abs_rec

read_input	1	;prendo l'ingresso memorizzato

poke	10	;scrittura a addr contenuto da mem 10

inc_mem	10

end_program

.circola

move_mem	11,BASEREC     ;indirizzo destinazione

move_mem	12,BASEREC+1  ;indirizzo sorgente

.next_char

peek	12	;leggo sorgente

poke	11	;scrivo destinazioen

inc_mem	12	;nuovo puntatore

inc_mem	11	;nuovo puntatore

read_mem	12	;controllo bordo array

if_gtr_jump	REC,.retry_rec

jump	.next_char

.retry_rec

move_mem	10,REC+1

jump	.abs_rec

.trasm

;trasmette il contenuto dei record

;ricerca record validi

preset

write_out	1	;cts	modem subito

read_mem	10	;numero di record

sott	LENREC

if_leq_jump	0,.no_record

write_mem	13  	;numero record validi / 2

move_mem	14,0	;indice record

move_mem	15,0	;indice record

.retrasm

tx_str	.str_1

read_mem	14

tx_var	3	;trasmetto numero di record

tx_str	.str_3

peek	15	;leggo input 1

tx_bin	;trasmetto record in forma binaria

tx_str	.str_2

peek	15

tx_var	3

inc_mem	15

inc_mem	14

tx_str	.str_4

dmjnz	13,.retrasm

;reset registrazioni

read_mem	10

sott	LENREC-1

write_mem	12	     ;numero record validi+1

move_mem	11,BASEREC  ;base array

.retry_res

reset

poke	11	;scrivo destinazioen

inc_mem	11	;nuovo puntatore

dmjnz	12,.retry_res

move_mem	10,BASEREC

move_mem	20,0

end_program

.no_record

tx_str	.str_5

read_mem	10

tx_var	3

tx_str	.str_4

end_program

.str_1

DEF_TESTO	"RECORD N°  :"

.str_2

DEF_TESTO	"  ("

.str_3

DEF_TESTO	" INGRESSO 1..8:: "

.str_4

DEF_TESTO	" )\n\r"

.str_5

DEF_TESTO	"NON CI SONO RECORD INDICE A = ("

RICEZIONE SERIALE

;****************************************************************

;

;	ESEMPIO FUNZIONAMENTO COMANDI RICEZIONE SERIALE

;	(C&P	96	ECOPLC)

;

;	per testare il seguente programma usare il terminale di window

;	impostando due tasti funzione con i caratteri >001r >001d

;	>001a

;****************************************************************

#label	trasm

#label	str_1

#label	str_2

#label	str_3

#label	str_4

#label	str_5

#label	str_6

#label	str_7

#label	str_8

#label	str_9

#label	str_10

#label	str_11

#label	str_12

#label	str_13

#label	str_14

#label	str_15

#label	str_16

#label	str_17

#label	str_18

#label	str_19

#label	txora

#label	txdata

#label	txall

plc_num	1

plc_com	6

enable

slave

start_program

reset

write_out	1	;CTS

clr_rx	;reset buffer secondario ricezione

on_rx	'>',.trasm	;aspetto carattre start ricezione

end_program

.trasm	;routine ricezione seriale

preset

write_out	1	;CTS

wait_rx 	4	;aspetto 4 caratteri o max 1 secondo

;il carattere di on_rx ('>') è gia scartato

test_rx	.str_1,.txora	;trasmetto l'ora

test_rx	.str_2,.txdata	;trasmetto la data

test_rx	.str_10,.txall	;trasmetto tutto

end_program

.txora

tx_str	.str_1	;che scheda risponde

tx_str	.str_3

move_mem	10,783	;leggo ora

peek	10

tx_var	2

tx_str	.str_4

dec_mem	10

peek	10

tx_var	2

tx_str	.str_5

dec_mem	10

peek	10

tx_var	2

tx_str	.str_6

end_program

.txdata

tx_str	.str_2	;che scheda risponde

tx_str	.str_7

move_mem	10,786

peek	10

tx_var	2

tx_str	.str_8

dec_mem	10

peek	10

tx_var	2

tx_str	.str_9

dec_mem	10

peek	10

tx_var	2

tx_str	.str_6

end_program

.txall

tx_str	.str_10	;che scheda risponde

tx_str	.str_6

tx_str	.str_11

move_mem	10,780

tx_str	.str_13

peek	10

tx_var	2

tx_str	.str_6

tx_str	.str_14

inc_mem	10

peek	10

tx_var	2

tx_str	.str_6

tx_str	.str_15

inc_mem	10

peek	10

tx_var	2

tx_str	.str_6

tx_str	.str_16

inc_mem	10

peek	10

tx_var	2

tx_str	.str_6

tx_str	.str_17

inc_mem	10

peek	10

tx_var	2

tx_str	.str_6

tx_str	.str_18

inc_mem	10

peek	10

tx_var	2

tx_str	.str_6

tx_str	.str_19

inc_mem	10

peek	10

tx_var	2

tx_str	.str_6

end_program

.str_1

def_testo	"001r"	;lettura ora da scheda 1

.str_2

def_testo	"001d"	;lettura data da scheda 1

.str_3

def_testo	"\n\rORE=  "

.str_4

def_testo	"\tMINUTI=  "

.str_5

def_testo	"\tSECONDI=  "

.str_6

def_testo	"\n\r"

.str_7

def_testo	"\n\rGIORNO=  "

.str_8

def_testo	"\tMESE=  "

.str_9

def_testo	"\tANNO=  "

.str_10

def_testo	"001a"	;lettura all

.str_11

def_testo	"OROLOGIO DI SISTEMA PLC 001\n\r"

.str_12

def_testo	"DECIMI\t=\t"

.str_13

def_testo	"SECONDI\t=\t"

.str_14

def_testo	"MINUTI\t=\t"

.str_15

def_testo	"ORE\t=\t"

.str_16

def_testo	"ANNO\t=\t"

.str_17

def_testo	"MESE\t=\t"

.str_18

def_testo	"GIORNO\t=\t"

.str_19

def_testo	"NUM.GIORNO\t=\t"

TIMER

;****************************************************************

;	ESEMPIO FUNZIONAMENTO TIMER

;	(C&P	96	ECOPLC)

;

;	TIMER	1	:

;	IMPOSTAZIONE	:	DECIMI DI SECONDO

;	TIMER	2	:

;	IMPOSTAZIONE	:	SECONDI

;	TIMER	3

;	IMPOSTAZIONE	:	MINUTI

;	TIMER	4

;	IMPOSTAZIONE	:	ORE

;	TEMPORIZZAZIONI dell esempio:

;	       5/10sec

;	I1:___--------------------------------------------------

;	O1:___--------------------------------------------------

;	O2:________---------------------------------------------

;	O3:___-----_____________________________________________

;	O4:__________________________5sec___________------------

;	O5:_______________//_________5min___________------------

;	O6:_______________//_________1ora___________------------

;****************************************************************

plc_num	1

plc_com	6

enable

slave

set_timer	1,1,5	;timer	1 a 5 decimi di secondo

set_timer	2,2,5	;timer 	2 a 5 secondi

set_timer	3,4,5	;timer 	2 a 5 minuti

set_timer	4,8,1	;timer 	2 a 1 ora

start_program

load_input	1	;abilito start timer 1..4 con input

store_timer	1

store_timer	2

store_timer	3

store_timer	4

;timer 1 bobina istantanea

 	load_spec	16

store_out	1

;timer 1 all'eccitazione

load_timer	1	;N.A. timer 	1

store_out	2

;timer 1 alla diseccitazione

load_timer_not	1	;N.C. timer	1

and_spec	16	;serie bobina istantanea

store_out	3

;gli altri timer

load_timer	2

store_out	4

load_timer	3

store_out	5

load_timer	4

store_out	6

end_program

FRONTI DI SALITA E FRONTI DI DISCESA

;****************************************************************

;

;	ESEMPIO FUNZIONAMENTO COMANDI FRONTI

;	(C&P	96	ECOPLC)

;

;	con fronte di salita e di discesa si intende un

;	interblocco sulla variazione di stato (in salita o in

;	discesa appunto) e non sullo stato

;	L'esempio è stato rallentato con i delay per vedere

;	l'effetto sulla uscita 2 altrimenti non visibile

;****************************************************************

plc_num	1

plc_com	6

enable

slave

start_program

;senza fronte

load_input	1	;prendo ingresso 1

store_out	1	;nell'uscita 	1

;fronte in salita

load_input	1	;prendo ingresso 1

and_f_up	1	; serie su fronte

store_out	2	;si accende solo alla

;fronte di discesa

load_input	1	;prendo ingresso 1

and_f_down	1	;serie su fronte

store_out	3	;si accende solo alla

delay	10	;solo per debug

end_program

CONTATORI

;****************************************************************

;	ESEMPIO FUNZIONAMENTO CONTATORI

;	(C&P	96	ECOPLC)

;

;	CONTATORE	1	:

;	IMPOSTAZIONE	:	CONTA IN SU

;	CONTATORE	2	:

;	IMPOSTAZIONE	:	CONTA IN GIU'

;	CONTATORE	3	:

;	IMPOSTAZIONE	:	AUTOCONTA IN SU

;	CONTATORE	4	:

;	IMPOSTAZIONE	:	AUTIOCONTA IN GIU'

;	CONTATORE	5	:

;	IMPOSTAZIONE	:CONTA GIU CON BLOCCO

;	CONTATORE	6	:

;	IMPOSTAZIONE	:AUTOCONTA IN GIU CON BLOCCO

;

; I contatori in automatico funzionano come contaimpulsi alla

; frequenza di 50hz quando sono abilitati,per cui i contatori 3,4

; dopo un secondo in abilitazione vanno in on.

; I contatori confrontatno il valore come numero con segno da

; 32768 a -32767 cio' comporta la differenza sostanzile di

; funzionamento	 tra il tipo conta su e il tipo conta giu'.

; Il primo rimane a On da momento in cui arriva il conteggio

; al valore impostato fin a 32768,il secondo mantiene on solo

; per il tempo in cui il valore è zero

; Si deve ovviare alla perdita di stato per conteggio,mettendo

; in serie alla abilitazione del contatore il suo contatto

; N.C.

; I Contatori inAutoincremento servono come generatori di clock o

; timer a risoluzione 20 millisecondi

;****************************************************************

plc_num	1

plc_com	6

enable

slave

set_timer	1,1,5	;timer 1,2 rate generatore 5 decimi

set_timer	2,1,5	;timer 1,2 rate generatore 5 decimi

set_counter	1,1,50	;contatore 1 conta su 50

set_counter	2,2,50	;contatore 2 conta giu 50

set_counter	3,4,50	;contatore 3 conta autosu 50

set_counter	4,8,50	;contatore 4 conta autogiu 50

set_counter	5,2,50	;contatore 5 conta giu 50 interbloco

set_counter	6,8,50	;contatore 6 conta autogiu 50 interblocco

start_program

load_input	1	;flip-flop 5 decimi

and_timer_not	2	;generatore impulsi per contatori

store_timer	1

load_timer	1

store_timer	2

load_timer	1

store_counter	1	;contatore 1 on dopo 50 inpulsi

store_counter	2	;contatore 2 on dopo 50 inpulsi

store_counter	3	;contatore 1 on dopo 2 impulsi

store_counter	4	;contatore 1 on dopo 2 impulsi

load_timer	1

and_counter_not	5

store_counter	5	;blocco a conteggio arrivato

load_timer	1

and_counter_not	6

store_counter	6	;blocco a conteggio arrivato

load_counter	1

store_out	1

load_counter	2

store_out	2

load_counter	3

store_out	3

load_counter	4

store_out	4

load_counter	5

store_out	5

load_counter	6

store_out	6

end_program