Manuale collegamento e comandi ModBus per 8888-Display RS485 ModBus
 
Il display modello 8888-Display RS485 ModBus può essere comandato tramite interfaccia ModBus in modo molto semplice. 
Seriale - WiFi - RS485 ModBus 
 
Collegamento fisico RS485 ModBus 
Per il collegamento RS485 vanno usati i segnali A, B, su stampato nella versione RAW, disponibili con connettore nelle 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) e 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
 
 
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 
 
RISPOSTA PER 11h 
La risposta è nel formato: 
IndirizzoDispositivo / 11h / 00 / CRC(l,h) 
Al terzo byte, al posto di 00 ci può essere un eventuale codice di errore
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 511 
Esempi: 
\4230\n 
Setta la luminosità (o luminosità max) a 230. 
\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. 
Nell'implementazione ModBus standard si prevede l'uso della funzione 06h per la scrittura di singoli registri analogici/analog a 16bit, noi prevediamo registri singoli praticamente identici ai comandi seriali. 
Nota che in tutti gli esempi, 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) 
Il terzo byte è il codice di errore
 
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: 
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: 
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 511 
Esempi: 
230 (che in hex è E6) 
01 06 0004 00E6       4981 
id fn reg3 brightness CRC 
Setta la luminosità (o il max se variabile) a 230. 
Altro esempio: 01 06 0004 0012 4806 per luminosità 18 (12hex). 
 
FFFF (valore speciale on) 
01 06 0004 FFFF       C9BB 
id fn reg3 brightness CRC 
Attiva il controllo automatico della luminosità. 
 
FFFE (valore speciale off) 
01 06 0004 FFFE       087B 
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. 
Nell'implementazione ModBus standard si prevede l'uso della funzione 10h per la scrittura multipla in sequenza degli stessi registri a 16bit, Display supporta la funzione 10h solo ed esclusivamente per scrivere una stringa sul display a partire dal registro 200h (in modo simile alla funzione #12 esaminata qui sopra, nei Comandi per 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) 
Il terzo byte è il codice di errore
 
 
ERRORI 
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 
 
 
Manuale collegamento e comandi seriali per 8888-Display 
Manuale collegamento e comandi WiFi per 8888-Display 
Manuale collegamento e comandi ModBus per 8888-Display RS485 ModBus (sei qui!) 
 
8888-Display per Raspberry Arduino ESP (pagina principale) 
 
Home page - Soluzioni Semplici - Home - L'hardware di VisualVision 
(C) 2020 VisualVision