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: 
- Seriale RS232  
- WiFi/HTTP  
- WiFi/MQTT, home assistant  
- RS485 ModBus 
 
 
 
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) 
esempio modbus 
 
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 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. 
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 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) 
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 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. 
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 
 
 
8888-Display (Home) - 8888 Seriale - 8888 WiFi/Http - 8888 WiFi/MQTT -  8888 ModBus - forum di 8888 - contattaci... 
 
 
Manuale collegamento e comandi Seriali RS232 per 8888-Display 
Manuale collegamento e comandi ModBus per 8888-Display RS485 ModBus 
Manuale collegamento e comandi WiFi/HTTP per 8888-Display 
Manuale collegamento e comandi WiFi/MQTT per 8888-Display MQTT 
 
Manuale collegamento e comandi WiFi HTTP e MQTT per DoorOpen/DoorSwitch 
Manuale collegamento e comandi WiFi HTTP e MQTT per WaterOpen 
Manuale collegamento e comandi WiFi HTTP e MQTT per NumeroInCoda e Multicoda 
Manuale collegamento e comandi WiFi HTTP e MQTT per Orologio/SuperClock/MegaClock 
 
Manuale con il formato dei dati inviati via HTTP per TXtemp TXsoil TXloop e TXdata 
Manuale con il formato dei dati inviati via HTTP per RXTXeasy 
Manuale con il formato dei dati inviati via HTTP per ModBusEasy 
 
Home page - Soluzioni Semplici - Home - L'hardware di VisualVision 
VV Automazione Domotica MQTT 
(C) 2024 VisualVision - Soluzioni Semplici 
Hardware e software professionale e facile da usare, dal 1996