PLC con interfaccia USB
prima parte: hardware | seconda parte: programmazione PLC |
Progetto pubblicato sulla rivista Fare Elettronica |
E
la naturale evoluzione del mini PLC pubblicato qualche anno fa e
arricchito di nuove potenzialità tra cui un interfaccia USB in
grado di inviare al PC lo stato di tutte le funzioni implementate
dal PLC e visualizzate in ununica schermata.
E passato molto tempo
dallarticolo di Fare Elettronica pubblicato nel numero
220/221 di nove anni fa e nuove esigenze di tipo tecnico/pratiche
si sono nel frattempo accumulate e ci hanno obbligato ad
integrarle al vecchio progetto in modo da risolvere tutti quei
problemi che incontravamo nelle varie applicazioni. È stato
questo il motivo che ci ha spinto a riprogettare il tutto
sfruttando lormai collaudata serie PIC18 di Microchip. In
particolare la scelta è caduta su modello che integra
linterfaccia USB di tipo device più famoso, il PIC18F4450.
Ovviamente non ci siamo fermati all'aspetto hardware
dell'interfaccia USB, abbiamo realizzato un programma in Visual
Basic in grado di visualizzare lo stato e i valori di tutte le
funzioni del PLC raggruppate in un'unica pagina. Prima di
addentrarci nelle nuove funzioni del progetto, vediamo
raggruppate tutte le caratteristiche.
16 ingressi virtuali (10
reali)
16 uscite virtuali (12
reali)
16 marker
8 timer da 1-250 secondi o
minuti
4 contatori 1-65000 e peso
programmabile da 1-100
4 ingressi analogici
interfaccia USB
Le differenze con il
modello precedente sono notevoli. Innanzitutto il linguaggio di
programmazione è lANSI C e come ambiente di sviluppo
abbiamo scelto Mikroc di Mikroelektronika il quale, nonostante la
complessità del programma, risulta meno ostico e più leggibile
rispetto allassembler. Anche lo scambio di informazioni con
il PC attraverso lUSB utilizza la libreria integrata di
Mikroc, molto semplice da usare e di facile comprensione anche
per chi ha poca esperienza del bus.
Il numero delle ingressi
delle uscite è aumentato rispetto al vecchio progetto, sono
gestibili fino a 16 ingressi e 16 uscite anche se la mancanza del
numero sufficiente di piedini del micro ne limitano il numero a
10 ingressi e 12 uscite. Per chi vuole sperimentare con modelli
di PIC dotati di 64 o più piedini, può sfruttare lintera
potenzialità del progetto, oppure studiare uninterfaccia
seriale dotata di Shift Register con il CMOS 4094 o i TTL 74HC595
ecc., in pratica vanno modificati solo le due funzioni di
aggiornamento ingressi e uscite, a tal scopo vi invitiamo alla
lettura della sezione descrittiva del firmware.
Le altre due novità sono
la presenza di 4 contatori e 4 ingressi analogici. Mentre gli
ingressi analogici devono essere scelti al posto degli ingressi
digitali indirizzati da I0 a I3, i contatori
possono essere attivati con qualsiasi ingresso.
Come potete osservare si
tratta di caratteristiche di tutto rispetto e sono state studiate
per impieghi anche al di fuori dell'ambiente domestico, limitati
solo dalla fantasia del lettore. Infatti è un progetto che ben
si adatta ad applicazioni limitative rispetto all'utilizzo come
PLC, ad esempio se abbiamo la necessità di sostituire
provvisoriamente un termostato, applicando una sonda termica ad
uno degli ingressi analogici con uscita normalizzata 0-10 Volt e
poche semplici righe di programmazione, abbiamo realizzato in
poco tempo uno strumento in grado di risolvere il problema in
maniera immediata.
Proseguendo con gli esempi,
potremo avere bisogno di accendere sequenzialmente tutta una
serie di dispositivi, a questo problema possono venirci in aiuto
i timer del PLC e qualche riga di programma che metta in
relazione ogni timer con unuscita e avremmo risolto
brillantemente il problema.
Se dovete controllare e
numerare dei contenitori che scorrono su una rulliera è
sufficiente applicare una fotocellula in grado di intercettare il
passaggio dei contenitori collegandone l'uscita ad uno degli
ingressi del PLC, oppure nel caso sorgano dei dubbi sulla
metratura di un impianto di trattamento del tessuto o qualsiasi
materiale che scorra attraverso dei rulli e volete tenerlo sotto
controllo per un certo periodo, installate un sensore induttivo
in prossimità di uno dei cilindri solidali al passaggio del
materiale in modo da inviare un impulso in un qualsiasi ingresso
del PLC ad ogni giro completo del cilindro.
Per questo e per tutte le
altre applicazioni vedremo come risolverle con poche righe di
programma quando descriveremo la sintassi corretta di
programmazione.
Come avrete certamente
intuito si tratta di un progetto che si adatta ad un'infinità di
applicazioni diverse e, nonostante i suoi limiti, non mancherà
di dare soddisfazione a chi si cimenterà nella realizzazione.
SCHEMA ELETTRICO
La complessità dello schema elettrico è data dal gran
numero dei componenti che lo compongono, in realtà sono tutti
stadi ripetitivi che possiamo suddividere in ingressi analogici,
ingressi digitali, uscite, visualizzazione e programmazione
comprendenti pulsanti e display, microcontrollore, alimentatore.
Gli ingressi analogici si differenziano da quelli
digitali unicamente dalla presenza del quadruplo amplificatore
operazionale MCP6024 la cui scelta è dettata dalla
caratteristica rail-to-rail che lo rende idoneo a misurare
tensioni in maniera molto precisa anche quando queste si trovano
all'estremità superiore o inferiore della tensione di
alimentazione delloperazionale. Per semplicità prendiamo
in esame l'ingresso I0 confidando sul fatto che gli altri
ingressi presentano la stessa logica di funzionamento. Il segnale
in tensione da 0 a 10 Volt viene applicato al morsetto 1 di X2.
La presenza della resistenza R1 da 10 KO in serie all'ingresso e
della resistenza sempre da 10 KO della rete resistiva RR1 divide
per due la tensione applicata al pin 3 di U2. Il diodo zener DZ1
da 5,6V limita la tensione al suo valore di breakdown
salvaguardando l'ingresso di U2 da tensioni dannose per
integrato. L'uscita di U2 limitata a 5 Volt massimi viene
applicata al pin 2 di U1, che corrisponde a RA0 del PIC18F4450
configurato come ingresso analogico solo nel tempo necessario ad
analizzare l'eventuale stringa che richieda tale ingresso come
analogico, per il restante tempo come ingresso digitale.
In questo modo i primi 4 ingressi possono essere
utilizzati indifferentemente come ingressi analogici o digitali.
Il funzionamento dei restanti ingressi, solo come digitale, è
del tutto identico. Una resistenza in serie all'ingresso limita
la tensione, mentre un'altra resistenza collegata come pull-down
mantiene il piedino del PIC a massa quando non viene applicata
una tensione in ingresso. Il diodo zener limita la tensione ad un
valore non superiore ai 5,5 Volt, massima tensione tollerata dal
PIC. Per lo zener è accettato qualsiasi valore tra 4 e 5,1 Volt
e la tensione applicata ai morsetti di X2 e X3 può andare da 12
a 30 Volt riferito alla massa. Per semplificare la stesura del
circuito stampato e per la disposizione interna del PIC di AN0,
AN1, AN2, AN3 sono state scelte le porte RA e RE per rilevare lo
stato delle ingressi per un totale di 10 pins disponibili.
Contrariamente agli ingressi, per le uscite si è fatto
uso di una copia di integrati specializzati per questo tipo di
applicazione, vedi U3 e U4 di tipo ULN2803, compatibile con una
marea di sigle diverse tra loro equivalenti. Il loro compito è
quello di disaccoppiare le uscite del PIC dai carichi applicati
alle morsettiere X4, X5 e X6. L'unica nota negativa di questi
buffer di potenza è il comune che invece di essere la massa è
il positivo di alimentazione. Esistono dei driver con le
uscite idonee a sopportare carichi con la massa comune come
UDN2981A, ma sono difficili da trovare e piuttosto costosi.
Nonostante lutilizzo di questi componenti avrebbe
avvicinato il nostro progetto allo standard dei PLC, abbiamo dato
maggiore peso alla economicità complessiva della scheda finale.
L'alimentazione delle uscite viene applicata al morsetto
5 di X5 e può assumere qualsiasi tensione tra 5 e 30V e sarà la
stessa degli utilizzatori. Per esempio se colleghiamo alle uscite
due relè, un'elettrovalvola e una lampada, dovranno presentare
tutti la stessa tensione di lavoro e lo stesso valore di tensione
andrà applicato al morsetto 5 di X5 di potenza sufficiente ad
alimentare i utilizzatori. U3 e U4 consentono un prelievo di 300
mA per ogni uscita.
In questo caso sono state sfruttate la porta RB completa
e il nible più significativo di RD, per un totale di dodici
uscite.
Lo stadio di visualizzazione e programmazione comprende
il display, il classico modello LCD da 2 righe per 16 caratteri e
da quattro pulsanti. Al fine di risparmiare i piedini del
microcontrollore, i quattro pulsanti sono collegati con la stessa
linea dati del LCD. Il collegamento del LCD è quello classico a
4 bit, mentre la regolazione del contrasto viene impostato in
maniera fissa dal hardware tramite le due resistenze R14 e R15.
Tale soluzione può sembrare azzardata in quanto risulterà
difficile regolare il contrasto quando lLCD maturerà
qualche anno di funzionamento continuo, del resto l'esperienza ci
ha insegnato che i trimmer, in particolare i modelli economici,
col tempo possono dare problemi rendendo impossibile la lettura
del display.
Facciamo notare la presenza di TR1 che alimenta la
retroilluminazione del display solo se richiesta o in fase di
programmazione.
Sul microcontrollore U1 c'e ben poco da dire, il quarzo
XT1 da 4 MHz assieme ai condensatori C5 e C6 assicurano un clock
preciso, il PLL interno del PIC eleva la frequenza di lavoro a 48
MHz.
Il condensatore C7 funge da stabilizzatore al regolatore
interno da 3,3V.
L'alimentazione adottata è quella classica il cui
componente principale U5 è un comune regolatore di tipo 7805 che
fornisce la giusta tensione a U1 e U2. La tensione di
alimentazione è collegata alla morsettiera X1 e il diodo D1 è
un semplice ma efficace sistema di protezione contro l'inversione
di polarità. È consigliabile montare U5 su un dissipatore di
calore poiché quando la retroilluminazione è inserita, scalda
parecchio.
La scheda può essere alimentata direttamente dalla
presa USB, anche se la presenza del diodo D2 abbassa la tensione
di lavoro a poco più di 4 Volt rendendo di fatto poco leggibile
il display LCD e imprima un errore durante l'eventuale lettura
degli ingressi analogici in quanto il micro calcola il rapporto
bit/Volt ipotizzando una tensione di alimentazione, quindi di
riferimento, di 5 Volt.
MONTAGGIO
La scheda di montaggio proposta misura 109 x 71 mm ed è
una semplice mono faccia facilmente costruibile con gli strumenti
disponibili dall'hobbista. Nulla vieta il montaggio in breadboard
soprattutto in una prima fase di testaggio del circuito e capire
se può essere utile per un'eventuale applicazione.
Per coloro che optano per la costruzione della scheda
con il circuito stampato proposto, consigliamo prima di tutto il
montaggio dei numerosi ponticelli, scotto necessario per evitare
uno stampato più complesso a doppia faccia. In particolare i due
ponticelli tra P4 e P5 si trovano parzialmente sotto U1 e
risulterebbe difficile la loro collocazione dopo avere montato lo
zoccolo di U1. Continuate con il montaggio degli altri componenti
radenti allo stampato, ricordo che gli zener da DZ1 a DZ4 devono
avere un valore di 5,6 Volt mentre per gli altri potete usare
quello che avete nel cassetto, vanno bene valori tra 4 e 5,1
Volt. La rete resistiva RR1 è facilmente reperibile anche nel
surplus e deve avere un valore di 10 K? altrimenti potreste
ottenere risultati sbagliati nel caso abbiate la necessità di
sperimentare con gli ingressi analogici.
Consigliamo caldamente l'uso degli zoccoli per gli
integrati e del connettore per il display, permettono una facile
e veloce sostituzione in caso di necessità e il loro riclicaggio
in altri progetti. Per quanto riguarda la presa USB J1, si tratta
del modello B a montaggio orizzontale. Non pensate di
sostituirlo con un modello a montaggio verticale poiché i
ponticelli e U1 non vi concederanno lo spazio necessario per
l'installazione, a meno che non lo collegate con quattro fili
volanti. Potete sostituire il tutto con una presa di tipo
A e relativo cordoncino recuperato da un mouse
guasto, collegando i fili originariamente collegati al mouse
direttamente allo stampato del PLC. Normalmente la colorazione
dei quattro fili del cordoncino che avete a disposizione prevede
il rosso come positivo, il nero come GND, il verde come D+ ed
infine il bianco come D-.
Come abbiamo anticipato in altra parte
dellarticolo, il classico trimmer di regolazione del
contrasto del display è stato sostituito da due resistenze.
Potrebbe essere necessario ritoccare il valore di una resistenza
nel caso sia difficoltosa la visualizzazione del LCD. In
particolare diminuendo il valore di R15 il contrasto aumenta e
viceversa.
Prima di infilare gli integrati nei zoccoli, conviene alimentare la scheda con una tensione non superiore ai 12 Volt seguendo la giusta polarità alla morsettiera X1. Con un tester controllate che la tensione in uscita al regolatore U5 sia di 5 Volt. Se la tensione misurata è precisa e stabile, togliete tensione e montate gli integrati nei relativi zoccoli e il display nel proprio connettore e ridate tensione. Se tutto procede per il meglio, il display deve indicare per circa due secondi la scritta Fare Elettronica e quindi la pagina iniziale con lo stato delle ingressi e delle uscite.
I 0123456789abcd
Ovviamente, per orrenere
ciò, il micro deve essere programmato con il file PLC_USB_V10.hex
scaricabile dal sito della rivista alla sezione download.
Con uno spezzone di filo di rame collegate uno qualsiasi
delle ingressi al positivo di alimentazione di almeno 12 Volt,
per esempio la stessa alimentazione della scheda. Il display
tramuta in asterisco il relativo numero d'ingresso. Nell'esempio
sotto riportato è stato collegato l'ingresso I3.
Possiamo a questo punto
provare con gli altri ingressi, senza ottenere nessun tipo di
variazione sul uscite in quanto non è stato ancora inserita
nessuna stringa di programma.
Possiamo però a familiarizzare con il nostro progetto premendo il pulsante P2 (DOWN) e visualizzare lo stato dei 16 Marker.
M 01234567
89abcdef
Il pulsante P2 ci permette di navigare all'interno di una funzione, mentre il P1 di cambiare funzione.
Una fase successiva è quella di visualizzare lo stato dei timer premendo brevemente il pulsante P1. La prima pagina ci mostra i timer da T0 a T3
T0:__0< T1:__0<
T2:__0< T3:__0<
mentre premendo P2 cambiamo pagina del LCD e vedere lo stato dei restanti timer da T4 a T7.
T4:__0< T5:__0<
T6:__0< T7:__0<
Proseguiamo con il pulsante
P1 e vedere i quattro contatori raggruppati in un'unica pagina.
C0:____0 C1:____0
l'ultima funzione riguarda gli ingressi analogici,
anch'essi raggruppati in un'unica pagina.
A0:_0,00 A1:_0,00
Terminata la spiegazione sulla sezione visualizzatrice,
vediamo brevemente come entrare nella fase di programmazione.
Essendo l'argomento piuttosto complesso e articolato, rimandiamo
al prossimo articolo tutti i chiarimenti del caso.
Per entrare nella fase di programmazione, è sufficiente
premere e tenere premuto il pulsante P3 (SET) per circa 3
secondi. La fase di programmazione ci viene segnalata dal LCD
mostrandoci una stringa vuota il cui numero è successivo
all'ultima stringa in memoria. Nel nostro caso, essendo la
memoria di programma vuota, ci mostrerà la stringa numero #00
navigare all'interno della stringa è molto semplice, i
pulsanti P1 e P2 incrementano o decrementano il valore
evidenziato, il P3 cambia campo, infine il pulsante P4 ci
permette di ritornare alla fase operativa in qualsiasi momento.
A titolo informativo, durante la fase di programmazione,
è possibile cancellare o una o più stringhe di programma o
l'intera area di memoria e ricominciare da capo.
L'ultima funzione che analizzeremo in queste pagine
riguarda la gestione della retroilluminazione del display LCD,
che seppure di secondaria importanza può risultare utile in
certe applicazioni. A tale funzione si accede premendo e tenendo
premuto, il pulsante P4 per circa 3 secondi. La pagina della
funzione è la seguente
Gest.retroil.LCD
Quando richiesto
e le opzioni disponibili, premendo il pulsante P1, sono
Quando richiesto
Sempre acceso
Sempre spento
Quando richiesto accende la
retroilluminazione unicamente nel caso venga premuto un qualsiasi
pulsante e la mantiene attiva per una quindicina di secondi dopo
di che la spegne. Inoltre la mantiene accesa durante tutta la
fase di programmazione e la gestione della retroilluminazione.
L'opzione Sempre accesa la mantiene costantemente
accesa, mentre Sempre spenta ne impedisce in
qualsiasi modo l'accensione. Premendo pulsante P4 ritorniamo alla
fase operativa.
Generalmente la prima soluzione contribuisce ad ottenere
il giusto compromesso tra praticità e risparmio energetico, la
seconda può essere utile nel contribuire ad ottenere la migliore
visibilità di alcuni parametri visualizzati dal display
soprattutto durante il primo avviamento di un'automazione ed
infine la terza per migliorare il consumo di corrente del PLC
alimentato a batterie, per esempio in un'applicazione la qui
alimentazione deriva dal fotovoltaico ad isola o comunque da
batteria.
Un'ultima annotazione importante, durante la fase di
programmazione e di gestione della retroilluminazione, il PLC non
elabora nessuna stringa.
Come potrete intuire sia il
programma interprete che quello di gestione delle varie funzioni
del PLC è piuttosto complesso, vediamo di chiarirne il
funzionamento.
Iniziamo con la gestione
della programmazione delle stringhe e concentriamo la nostra
attenzione sul file Program.h. Le due funzioni
principali a cui dobbiamo porre la massima attenzione sono Stringa_program
(riga_program); e Program ();.
Mentre la prima serve esclusivamente a visualizzare la stringa in
processo sul LCD, la seconda ha il compito di gestire
completamente la modifica della stringa visualizzata. Sia la
parte numerica, come il numero di stringa o l'indirizzo
delloperando, che quell'informativa come il tipo di
operando o l'operazione, vengono gestiti ugualmente come registri
numerici. A seconda della posizione nella stringa questi vengono
visualizzati come numeri o come simboli ripresi da apposite
tabelle.
Per incrementare o
decrementare ciascun registro, è stata implementata un'apposita
funzione Gest_campi (value, min_value, max_value);
i cui argomenti sono appunto il valore minimo (min_value)
e quello massimo (max_value) del registro da modificare (value).
La funzione restituisce il parametro (value) incrementato
o decrementato di una unità a seconda del pulsante premuto.
La disposizione degli
operandi all'interno della stringa dipendono dal tipo di operando
e non hanno la stessa posizione, sorgono quindi problemi per la
visualizzazione sul LCD. Si è fatto uso quindi di 4 mappe
selezionate dal tipo del primo operando o dall'operazione tra
operandi. Per la precisione se il primo operando è un
configuratore di contatore (simbolo P) la mappa
selezionata sarà campo_C_LCD[ ] = {0,3,5,7,13};,
se ingresso analogico (simbolo A) campo_A_LCD[
] = {0,3,4,6,8,13,14,15};, del caso di operazione tra
operandi di tipo Timer (simbolo T), la mappa in
lavoro sarà campo_T_LCD[ ] = {0,3,4,5,7,8,10,14};.
In tutti gli altri casi sarà presa in considerazione la mappa
campo_D_LCD[ ] = {0,3,4,5,7,9,10,11,13,14,15};.
In tutti i casi, i valori assegnati rappresentano il numero di
colonna della prima riga del LCD (campo da cambiare).
Ogni stringa salvata occupa 4
byte di memoria EEPROM. Anche in questo caso sorgono delle
differenze sostanziali tra un'operazione logica, la gestione di
un timer, la configurazione di contatore e un'operazione di tipo
analogico. Rimandiamo alla tabella 1 com'è stata
risolta la disposizione dei vari elementi della stringa
all'interno dei 4 byte salvati in memoria.
L'altro file importantissimo
è ExecutePLC.c che si occupa dell'esecuzione delle
stringhe memorizzate. La funzione principale è Execute
(); e la logica di funzionamento è quella di analisi
sequenziale delle stringhe. Di questo dovete tenerne ben conto
durante la stesura dei programmi, in quanto per alcune istruzioni
l'ordinamento gerarchico è molto importante. Di questo ne
parleremo ampiamente nel prossimo numero quando spiegheremo come
si programma il PLC, per ora concentriamoci su come il micro
interpreta le stringhe.
La prima stringa eseguita è
la numero 00 mentre l'ultima è quella indicata dalla locazione
di memoria EEPROM 0x00, nel firmware definita col nome di
TOP. La prima operazione compiuta prima
dell'esecuzione delle stringhe, è l'aggiornamento degli
ingressi, mentre l'ultima operazione, dopo la scansione di tutte
le stringhe residenti in EEPROM, è l'aggiornamento delle uscite.
Ogni stringa caricata dalla
memoria viene analizzata alla stessa stregua della sua
programmazione, sarà il primo operando a stabilire il proseguo
dell'analisi. Se ad esempio la stringa da analizzare è la
seguente
L'operazione tra bit può
essere di tipo And, Or oppure Timer. In questo caso ovviamente
non si tratta di un'operazione tra bit ma la richiesta di
inizializzazione e partenza di un timer, a questo provvede la
funzione exec_Timer ();. Una volta raggiunto il tempo impostato
viene settato il relativo bit del registro di immagine dei timer
e gestito dal PIC come un ingresso o un'uscita qualsiasi. La
chiamata delle funzioni in grado di rilevare lo stato del bit dei
registri delle immagini sono le seguenti
Ingressi: operando_x =
Acquis_Input (oper_addr_x);
Uscite: operando_x =
Acquis_Out (oper_addr_x);
Marker: operando_x =
Acquis_Marker (oper_addr_x);
Timer: operando_x =
Acquis_Timer (oper_addr_x);
Contatori: operando_x =
Acquis_Cont (oper_addr_x);
In tutte le funzioni
ritornano lo stato del bit puntato dall'argomento del relativo
registro immagine.
La richiesta di
configurazione di contatore o un'operazione che includa un
ingresso analogico, richiedono una procedura più semplice. Nel
primo caso la funzione chiamante Config_contatore
(oper_addr_1); configura il contatore il cui numero è
definito dall'argomento e abilita il conteggio, nel secondo caso
la funzione exec_analogica (oper_addr_1);
parametrizza l'ingresso puntato dall'argomento in analogico,
esegue la conversione e condiziona il segnale in modo da poterlo
confrontare con quello contenuto nella stringa.
Nel caso l'applicazione
richieda un numero diverso di ingressi e uscite di quelli
disponibili o per qualche motivo avete sostituito il
microcontrollore che dispone di porte diverse, vi potrà essere
utile modificare le funzioni che trasferiscono le immagini degli
ingressi e delle uscite a ingressi e uscite reali. Si tratta
rispettivamente di Read_Input (); e Aggiorna_Uscite
(); e il loro funzionamento è talmente ovvio da non
meritare alcun commento. Per quanto concerne il bit del registro
delle immagini delle uscite non utilizzati perché superiori a
quelli disponibili fisicamente, possono essere usati come Marker.
Due parole per le funzioni che aggiornano le immagini delle uscite (Aggiorna_imm_out ();) ed quelle dei marker (Aggiorna_imm_Marker ();). Sono leggermente complesse e permettono la gestione dei diversi tipi di operazione sulle uscite o sui marker.
Analizzatate tutte le stringhe disponibili memoria, l'attenzione si sposta sulla funzione main(); la quale legge lo stato dei pulsanti e richiama la funzione di visualizzazione dei dati sul LCD (MainPageLCD ();).
|
TABELLA 1: DISPOSIZIONE ELEMENTI DELLA
STRINGA SALVATA IN EEPROM OPERAZIONI TRA BIT Byte 4: 0000.0000
Operando 1
| | |_______Indirizzo (0-f)
| |___________Tipo operando: 0=I, 1=Q, 2=M, 3=T, 4=C,
5=A, 6=P
|_____________Inversione bit: 0=. (no NOT), 1=! (NOT) Byte 3: 0000.0000
Operazione + tipo uscita
| | | |______Operazione:
0=&, 1=|, 2=T
| | |________(libero)
| |____________Tipo uscita: 0==, 1=S, 2=R,
3=C
|______________(libero) Byte 2: 0000.0000
Operando 2
| | |_______Indirizzo (0-f)
| |___________Tipo operando: 0=I, 1=Q, 2=M, 3=T, 4=C, 5=A
|_____________Inversione bit: 0=. (no NOT), 1=! (NOT) Byte 1: 0000.0000
operando uscita
| | |_______Indirizzo (0-f)
| |___________Tipo operando: 0=Q, 1=M, 2=C
|_____________(libero) TIMER Byte 4: 0000.0000
Operando
| | |_______Indirizzo (0-f)
| |___________Tipo operando: 0=I, 1=Q, 2=M, 3=T, 4=C
|_____________Inversione bit: 0=. (no NOT), 1=! (NOT) Byte 3: 0000.0000
Operazione
| | | |______Operazione:
2=T
| | |________Scala tempo:
0=sec, 1=min
| |____________(libero)
|______________(libero) Byte 2: 0000.0000
Timer
| | |_______Indirizzo Timer
(0-7)
| |___________(libero)
|_____________(libero) Byte 1: 0000.0000
Tempo
|_____________Tempo: (1-250 sec/min) CONFIGURA CONTATORE Byte 4: 0000.0000
Contatore
| | |_______Indirizzo (0-3)
| |___________Tipo operando: 6=P
|_____________(libero) Byte 3: 0000.0000
Imposta valore contatore (MSB)
|___________H (1-65000) Byte 2: 0000.0000
Imposta valore contatore (LSB)
|___________L Byte 1: 0000.0000
Incremento (peso)
|___________Valore da incrementare (1-100) INGRESSO ANALOGICO Byte 4: 0000.0000
Operando
| | |_______Indirizzo (0-3)
| |___________Tipo operando: 5=A
|_____________(libero) Byte 3: 0000.0000
Operazione + tipo uscita+ operando uscita
| | | | |_______Indirizzo operando uscita
| | | |_________Operazione: 0=>,
1=<
| | |___________Tipo uscita: 0=S, 1=R
| |_____________Tipo operando uscita: 0=Q, 1=M
|_______________(libero) Byte 2: 0000.0000
Valore analogico per confronto (MSB)
|___________H Byte 1: 0000.0000
Valore analogico per confronto (LSB)
|___________L Legenda: ·
OPERANDI: I = ingresso digitale, Q = uscita, M = marker,
T = timer, C = contatore, A = ingresso analogico, P =
configuratore del contatore. ·
OPERAZIONE: & = AND, | = OR, ! = NOT, T = Timer ·
OPERAZIONE USCITA: = stessa logica, S = Set,
R = Reset, C = Complementa bit ·
ANALOGICA: > = maggiore di, < = minore di
|