Manuale collegamento e comandi ModBus per 8888-Display RS485 ModBus
|
Il display modello
8888-Display RS485 ModBus può essere comandato
tramite interfaccia ModBus RS485 nel modo che spieghiamo nel seguito, con classiche stringhe di bytes ModBus. ModBus è un bus molto usato per applicazioni professionali, e
dovunque ci sia un'applicazione che usa ModBus ed ha bisogno di un display grande, si può piazzare 8888-Display, e bastano davvero poche istruzioni per visualizzare un messaggio o un numero (una misura, una temperatura, ecc).
Riepilogo veloce, 8888-Display può venire comandato tramite:
Collegamento fisico RS485 ModBus
Per il collegamento RS485 vanno usati i segnali A, B, collegabili per es. a connettori Dupont su stampato nella versione RAW, disponibili con connettore o spinotto in altre versioni. In alcune versioni è disponibile un connettore con morsetti a viti con cui si può fornire anche 5V e GND (l'assorbimento massimo di 8888-Display è <1A).
Bisogna poi controllare che il settaggio di velocità in BAUD sia uguale sia per il vostro dispositivo che trasmette su RS485 (PLC, Raspberry, Arduino, PC Windows, Mac, eccetera) sia per 8888-Display. Un'eventuale configurazione della velocità in baud di 8888-Display si fa collegandosi al wifi interno (wfeasy.com) + al sito web interno (wfeasy.com) e scegliendo dal menù a tendina.
Comandi per ModBus RTU
Generalmente ogni comando ModBus in standard RTU (comandi binari) è una stringa di bytes che incomincia avendo come primo Byte l'
indirizzo del dispositivo Modbus (l'indirizzo di default di
8888-Display è 01, e si può cambiare nell'interfaccia WiFi), come secondo Byte la
funzione richiesta, quindi prosegue con altri numeri oppure un testo in caratteri ASCII, e termina con un CRC di due bytes il cui calcolo è determinato dallo standard Modbus (calcolo del CRC online qui; nell'interfaccia WiFi si può anche fare eventualmente in modo che 8888-Display ignori il CRC).
Ricordiamo che per lo standard ModBus due comandi ModBus consecutivi devono essere separati a un tempo pari ad almeno 3.5 char (dove un char è 11bit; quindi per es. a 19200 baud sono 38.5 * 0.052ms = 2ms ).
Forniamo due modi per comandare 8888-Display: l'
uso di registri tramite le funzioni standard 06h (write) e 10h (multi-write), e l'uso della più semplice
funzione 11h (cmd) che scimmiotta il funzionamento che abbiamo scelto per i
comandi seriali.
Nota che nel menù "Impostazioni" di
8888-Display c'è una utility che permette di "calcolare" automaticamente i bytes Hex da mandare per i comandi 11,12 e 4 (visualizzazione/scroll scritta e luminosità).
Funzione 11h (uso semplificato comandi)
Per comodità, illustriamo subito la Funzione ModBus 11h in cui sono implementati (come sottofunzione) tutti i comandi standard di 8888-Display nello stesso standard da noi usato per il seriale. Questo sistema è molto più comodo e veloce anche per il programmatore.
Nota che in tutti gli esempi,
8888-Display è in configurazione di default con indirizzo di dispositivo ModBus "slave" numero 01.
Per la funzione 11h si manderà un frame ModBus costruito così:
IndirizzoDispositivo / 11h / StringaDiComandoComePerSeriale / CRC(l,h)
01 11 \1287BA\n CRC
Visualizza 87BA sul display.
Volendo scrivere per semplicità tutto in HEX e calcolando anche il CRC ModBus, la stringa da inviare via ModBus dal dispositivo master per visualizzare 87BA sul display sarebbe:
01 11 0C 38 37 42 41 0A 3F F8
id fn \12 8 7 B A \n CrcL CrcH
Esempio usando una Chiavetta MODBUS per PC che era su COM16 (ricordiamo che nel menù di servizio c'è una Utility con un box per avere direttamente l'HexAscii per una qualunque scritta)
RISPOSTA PER 11h
La risposta è nel formato:
IndirizzoDispositivo / 11h / 00 / CRC(l,h)
Esempio con 8888-Display (id=01) che risponde tutto OK:
01 11 00 2C 50
id fn 00 CrcL CrcH
COMANDI PER 11h (COME PER SERIALE)
Comando 12 (#12 o \12)
Visualizza sul display la stringa, facendo scrolling se la lunghezza della stringa è maggiore dei caratteri disponibili. La stringa è max 250 caratteri.
Esempi:
\128765\n
Visualizza 8765
\12Ciao belli\n
(ovvero 01 11 0C 4369616F 20 62656C6C69 0A FBBD per dispositivo con id=1)
Visualizza Ciao belli facendo scrolling continuativo
\12@Ciao belli!\n
Visualizza Ciao belli! facendo scrolling una sola volta
Comando 11 (#11 o \11)
Visualizza sul display la stringa, facendo scrolling se la lunghezza della stringa è maggiore dei caratteri disponibili, una sola volta, poi ritorna a mostrare quello che stava mostrando precedentemente. La stringa è max 252 caratteri.
Esempi:
\11Ciao belli!\n
Visualizza Ciao belli! facendo scrolling e poi ritorna a fare quello che stava facendo prima
Comando 2 (#2 o \2)
Visualizza sul display un timer in secondi.centesimi, partendo dal centesimo fornito in input.
Esempi:
\20\n
(01 11 02 30 0A 293B x id=1); fa partire e visualizza un timer partendo da 00.00
\212\n
(01 11 02 31 32 0A 38D9 x id=1); fa partire e visualizza un timer partendo da 00.12
\2s\n
(01 11 02 73 0A 180B x id=1); stoppa il timer al tempo raggiunto.
Comando 3 (#3 o \3)
Mette il display in modalità orologio, settando l'ora.
Esempi:
\31230\n
(01 11 03 31 32 33 30 0A 9781 x id=1); fa partire l'orologio alle 12.30 e d'ora in avanti visualizza l'orologio.
Comando 4 (#4 o \4)
Setta la luminosità (o la luminosità max), generalmente da 0 a 100
Esempi:
\490\n
Setta la luminosità (o luminosità max) a 90.
\425\n
(01 11 04 32 35 0A CA61 x id=1); setta la luminosità (o luminosità max) a 25.
\4a\n
Attiva il controllo automatico della luminosità.
\4d\n
Disattiva il controllo automatico della luminosità.
Comando 5 (#5 o \5)
Setta la velocità dello scrolling in centesimi di secondo (default 25; minimo 5; passo 5)
Esempi:
\540\n
Setta lo scrolling a 40 centesimi di secondo.
Funzione 06h (scrittura singolo registro; usare per controlli)
Ricordiamo che in alternativa a 06h si possono usare i comandi nella funzione 11h.
Nota che in tutti gli esempi seguenti
8888-Display è in configurazione di default con indirizzo di dispositivo ModBus "slave" numero 01.
RISPOSTA PER 6h
Se OK, la risposta è una ripetizione del comando che avete inviato, identica.
The normal response is an echo of the query, returned after the contents have been written.
Se c'è un errore la risposta è come per 11h nel formato:
IndirizzoDispositivo / 06 / codice_errore / CRC(l,h)
Comandi 06h: Registro 1
Cambia l'identificatore / l'indirizzo slave di
8888-Display RS485 ModBus dal valore corrente (default è 01) al valore scritto nel Registro 1.
Esempio:
3
01 06 0001 0003 980B
id fn reg1 new-id CRC
Si cambia l'indirizzo ModBus di 8888-Display a 3.
Per questa volta dettagliamo anche:
id: The current Slave Address
fn: The Function Code 6 (Preset Single Register)
reg1: The number of the register to be set, 1
new-id: The value of the new Slave Address we want to write, 3
CRC: The CRC (cyclic redundancy check) for error checking
Comandi 06h: Registro 2
Visualizza sul display un timer in secondi.centesimi, partendo dal centesimo fornito in input.
Esempi:
0
01 06 0002 0000 280A
id fn reg2 timer CRC
Fa partire e visualizza un timer partendo da 00.00
12
01 06 0002 0012 A807
id fn reg2 timer CRC
Fa partire e visualizza un timer partendo da 00.12
FFFF (uso questo come valore speciale per Stop)
01 06 0002 FFFF 29BA
id fn reg2 stop CRC
Stoppa il timer al tempo raggiunto.
Comandi 06h: Registro 3
Mette il display in modalità orologio, settando l'ora.
Esempi:
12.30 (in hex è 12=>0C 30=>1E)
01 06 0003 0C 1E FCC2
id fn reg3 hour minute CRC
Fa partire l'orologio alle 12.30 e d'ora in avanti visualizza l'orologio.
Comandi 06h: Registro 4
Setta la luminosità (o la luminosità max in caso di luminosità variabile), generalmente da 0 a 100
Esempi:
18 (che in hex è 12)
01 06 0004 0012 4806
id fn reg3 brightness CRC
Setta la luminosità (o il max se variabile) a 18.
FF01..FFFF (valore moltiplicatore on)
01 06 0004 FFxx xxxx
id fn reg3 brightness CRC
Attiva il controllo automatico della luminosità (1 fa il "buio" più luminoso, 255 meno luminoso)
FF00 (valore speciale off)
01 06 0004 FF00 89FB
id fn reg3 brightness CRC
Disattiva il controllo automatico della luminosità.
Comandi 06h: Registro 5
Setta la velocità dello scrolling in centesimi di secondo (default 25; minimo 5; passo 5 anche se si può settare qualsiasi numero)
Esempi:
40 (che in hex è 28)
01 06 0005 0028 99D5
id fn reg3 speed CRC
Setta lo scrolling a 40 centesimi di secondo.
Funzione 10h (scrittura registri multipli; usare per vis numeri e stringhe)
Ricordiamo che in alternativa a 10h si possono usare i comandi nella funzione 11h.
Se il registro è 100h la funzione è invece come per #11.
Dal momento che i registri sono a 16bit la stringa dovrà essere "pari"; basterà aggiungere \n per far diventare pari una stringa dispari, in altre parole per scrivere "12abc" si invierà "12abc\n"
Esempi:
12ABC
01 10 0100 0003 06 31 32 41 42 43 0A DA86
id fn regs len2 len 1 2 A B C \n CRC
Scrive sullo schermo "12ABC" (se lo schermo è meno di 5 caratteri ne farà lo scrolling; una sola volta perché 100h corrisponde alla funzione #11).
Notare che il comando massimo ModBus è 255 bytes, quindi la stringa max è 246 bytes (len2=123 - 007Bh; len=246 -F6h)
id: The Slave Address
fn: The Function Code 16 (Preset Multiple Registers, 10 hex = 16 )
regs: The Data Address of the first register for "show string", that must be 100h
len2: Lenght of the string that must be even / 2 (12abc+'\n' -> 6 bytes)
len: Lenght (1 byte)
1 2 a b c \n: The string, we added \n to fill the space and make the string even
CRC: The CRC (cyclic redundancy check) for error checking.
RISPOSTA PER 10h
Non è normalmente necessario darsi pena di interpretare la risposta, comunque la risposta è nel formato
IndirizzoDispositivo / 10h / 0100 / 0003 / CRC(l,h)
Esempio con 8888-Display (id=01) che risponde tutto OK:
01 10 0100 0003 xx yy
id fn regs regn CrcL CrcH
id: The Slave Address
fn: The Function Code 16 (Preset Multiple Registers, 10 hex = 16 )
regs: The Data Address of the first register 100h
regn: The number of registers written (string lenght/2)
CRC: The CRC (cyclic redundancy check) for error checking.
Se c'è un errore la risposta è come per 11h (ma con 10h) nel formato:
IndirizzoDispositivo / 10 / codice_errore / CRC(l,h)
Codici di errore:
101 [e] illegal function (only functions 11h, 06h and 10h are available),
102 [f] illegal register address (functions are ok only for certain uses)
103 [g] illegal data value / error using function
104 [h] bad CRC
Hardware e software professionale e facile da usare, dal 1996