Home Soluzioni Presentazione di SmartDisplay RS485

Presentazione di SmartDisplay RS485

September 10,2022

Descrizione

I. Prefazione:

 

Smart Display è stato ampiamente utilizzato in vari campi come il controllo medico, industriale e automobilistico dopo il lancio dei prodotti. In poche parole, è un display combinato con un microcontroller, in grado di gestire il caricamento, l'impostazione, la visualizzazione e persino l'input di grafici complessi e il dispositivo esterno (ovvero l’host) può eseguire operazioni interattive con comandi semplici, quindi è estremamente adatto a varie necessità. Vari tipi di applicazioni visualizzate o controllate.

Smart Display supporta una varietà di interfacce di comunicazione. Attualmente i più comunemente usati sono CAN/CANopen, RS485/Modbus e in futuro verranno fornite altre scelte. Tra questi, RS485/Modbus è un'interfaccia di comunicazione popolare nel settore e sul mercato sono facilmente disponibili vari dispositivi RS485 a prezzi ragionevoli. La struttura della linea è semplice, purché due fili (RS485_A/RS485_B) possano comunicare e l'interfaccia di comunicazione sia solitamente presentata sotto forma di "Porta seriale" su un sistema operativo e ogni piattaforma abbia una library di funzioni di sviluppo corrispondente. Inoltre, il protocollo Modbus è abbastanza facile da capire, quindi lo utilizziamo come esempio di seguito per esperimenti e spiegazioni.

Questo articolo descriverà come controllare Smart Display dal semplice al profondo, comprenderne il principio di controllo e infine presentare come creare applicazioni multipiattaforma. Diamo il benvenuto nel mondo di Smart Display con noi a esperti di apparecchiature industriali e giocatori fai-da-te!

II. Requisiti:

 

■Smart Display_RS485

Per il test di connessione è necessario uno Smart Display che supporti l'interfaccia RS485.

■Dongle RS485

Poiché un host come PC/Raspberry Pi normalmente non dispone di una porta RS485, se necessario, possiamo utilizzare vari dongle da USB a RS485.

Types of USB to RS485 Dongle

Figura 2-1 Types of USB to RS485 Dongle

 

■Dispositivo HOST

Quando si raggiungono i requisiti di cui sopra, è possibile scegliere un ambiente di esecuzione del banco di prova come host. L'unica condizione per un dispositivo host è essere in grado di leggere e scrivere la porta seriale dell'host indipendentemente dal sistema operativo Windows, MacOS, vari Linux (incluso Raspbian per Raspberry Pi) o la piattaforma è Single Board Computer, Arduino ecc.

Creiamo un computer a scheda singola con RS485 integrato di Demo.set per comodità, che può essere utilizzato direttamente come dispositivo host come mostrato nell'immagine di seguito.

WUACLB120V0000N0NX01

Model No. WUACLB120V0000N0NX01

 

III. Test semplice per l'interfaccia di controllo:

 

■Per ottenere il codice di controllo

Per capire come collaborare in Smart con un host. In primo luogo è necessario ottenere il codice di controllo. Il modo più semplice è ottenerlo da Smart Display GUI Builder. GUI Builder è un eccellente software di supporto per Smart Display. Può aiutarci a imparare, utilizzare, progettare e visualizzare l'interfaccia utente senza dispositivo fisico hardware, progettare l'interfaccia utente senza scrivere alcun programma. Con la funzione WYSIWYG, la progettazione dell'interfaccia utente può essere eseguita trascinando o facendo clic su pulsanti o oggetti. Inoltre, è presente un simulatore integrato che condivide il codice sorgente con lo Smart Display, garantendo così lo stesso aspetto e comportamento del dispositivo fisico. Ancora meglio, è gratis!

Contact for Smart Display GUI Builder

Smart Display GUI Builder

Figura 3-1 Smart Display GUI Builder

 

Fare doppio clic su GUI Builder per eseguire l'app nel sistema operativo Windows, quindi aprire un progetto. Qui scegliamo uno Smart Display RS485 da 5" WL0F00050000FGDAASA00 e lo scenario predefinito di seguito è Veicolo. Immettere il nome del progetto, premere il pulsante Crea per creare il progetto. Se è stato creato in precedenza, è inoltre possibile selezionare il progetto direttamente dal menu a destra.

Create project

Figura 3-2 Create project

 

Quando il progetto è aperto, selezionare prima l'interfaccia

Select interface

Figura 3-3 Select interface

 

Set interface parameters

Figura 3-4 Set interface parameters

 

Selezionare RS485 per l'interfaccia e la porta RS485 dell'host deve essere impostata come porta effettiva della porta collegata per il dongle RS485. In caso di dubbi, è possibile controllare il nome della porta nell'amministratore del dispositivo (scollegarlo ripetutamente e vedere che scompare o mostra quale è visualizzato). Il baud rate può mantenere il valore predefinito di 115200.

Com Port display of device administrator

Figura 3-5 Com Port display of device administrator

 

Tuttavia, se non esiste ancora un dispositivo Smart Display RS485, non importa. Fintanto che l'interfaccia seleziona RS485, la porta RS485 può essere ignorata per ora, perché al momento utilizzeremo solo il simulatore e non ci collegheremo praticamente allo Smart display.

Fare clic su Simulatore/Simulatore con GUI per eseguire:

To run Simulator

Figura 3-6 To run Simulator

 

Dopo l'esecuzione, è possibile vedere la schermata di simulazione, gli elementi di controllo di ciascun oggetto e il record dei dati di comunicazione sul lato destro dello schermo. Modificare il valore di qualsiasi oggetto per vedere il contenuto del comando di conseguenza:

Change the content of the object and the control code

Figura 3-7 Change the content of the object and the control code

 

Ogni azione vedrà due comandi TX/RX, perché il display (anche se ora è effettivamente un emulatore) restituirà lo stesso comando come conferma dopo aver ricevuto il comando per indicare che è stato ricevuto.

Registriamo diversi valori per oggetti diversi e il passaggio successivo può essere utilizzato per controllare il dispositivo fisico.

Control code

Table 3-1 Control code

■Collegamento cablato:

RS485 utilizza la coppia differenziale per trasmettere e ricevere segnali, quindi fintanto che questi due fili possono essere collegati, anche il filo di terra non è necessario. Il nome della linea di segnale di RS485 è A/B, basta seguirlo (A collega A, B collega B).

RS485 wire connection

Figura 3-8 RS485 wire connection

 

In che modo un host può trasmettere i codici di controllo da se stesso? Finché può scrivere su una porta seriale. Tuttavia, vi sono due elementi da tenere a mente prima di procedere con i test.

1. Poiché i nomi delle porte Com su diversi sistemi operativi sono diversi, controllare e confermare prima del test. A titolo esemplificativo la seguente tabella:

Serial port names for various operating systems

Table 3-2 Serial port names for various operating systems

 

2. L'autorizzazione della porta Com di alcuni sistemi operativi non è aperta per impostazione predefinita. Deve essere impostato prima di utilizzarlo. Prendendo Linux/Ubuntu come esempio, se il nome della porta Com è ttyUSB0, basta eseguirlo nel terminale:

sudo chmod 666 /dev/ttyUSB0

 

Di seguito vengono forniti due metodi di prova:

■Controllo del terminale della porta seriale

Utilizzare il software del terminale della porta seriale che supporta l'input esadecimale e inserire direttamente il codice di controllo esadecimale dopo la connessione:

Send Control Codes with Terminal Program

Figura 3-9 Send Control Codes with Terminal Program

 

Se è normale, si dovrebbe essere in grado di vedere che gli oggetti sul dispositivo agiscono secondo diversi codici di controllo.

Tuttavia, questo metodo viene utilizzato solo per verificare se la connessione ha esito positivo e non è molto conveniente nell'applicazione pratica. Per ottenere i migliori risultati, deve essere fatto attraverso il programma. Per quanto riguarda il linguaggio? In effetti, possiamo, proviamo prima con il popolare linguaggio di programmazione multipiattaforma python.

■Uso di python

I seguenti programmi vengono eseguiti utilizzando python3. La struttura del programma è abbastanza semplice, basta scrivere direttamente nella porta seriale tre serie di codici di controllo ogni secondo, in modo che lo strumento sul dispositivo continui a ruotare.
 

import serial
from time import sleep

"""
The name of Com Port varies according to the operating system, For example:
Raspberry Pi: /dev/ttyUSBn (e.g. /dev/ttyUSB0)
Windows: COMn (e.g. COM22)
"""
# Raspberry Pi / Rasbian
# COM_PORT = '/dev/ttyUSB0'
COM_PORT = 'COM22'

v000 = bytes.fromhex('7B06000600006251')
v050 = bytes.fromhex('7B0600060032E384')
v100 = bytes.fromhex('7B060006006463BA')

ser = serial.Serial(COM_PORT, 115200)
while True:
ser.write(v000)
sleep(1.0)
ser.write(v050)
sleep(1.0)
ser.write(v100)
sleep(1.0)
ser.write(v050)
sleep(1.0)

Il codice sorgente di python può essere eseguito su una varietà di piattaforme, quindi finché la porta seriale è nominata correttamente, dovrebbe funzionare correttamente con il banco di prova della connessione appropriato.

Tuttavia, questi codici di controllo fissi come esempio non devono essere in linea con le applicazioni pratiche, quindi abbiamo bisogno di comprendere il contenuto di queste istruzioni per dar loro pieno gioco.

IV. Analisi del codice di controllo

 

■Analisi comparativa

Confrontare i comandi con valori diversi per lo stesso oggetto:

Table

Non è difficile scoprire che la parte blu è il valore dell'oggetto che abbiamo impostato.

Confrontare oggetti diversi, lo stesso comando di valore:

Table

La parte blu si riferisce ovviamente a qualche tipo di indice o indirizzo dell'oggetto.

Per quanto riguarda i dati degli ultimi due byte, sembra che non vi siano regole. Ma cosa significano quei messaggi? Li spieghiamo do seguito.

■Analisi del codice di controllo

In effetti, il contenuto di questi 8 byte è il cosiddetto messaggio Modbus. Usare semplicemente un'immagine per illustrare il significato di ogni campo:

Control code example description

Figura 4-1 Control code example description

 

ID
Ogni dispositivo Modbus deve avere un codice identificativo. Il codice identificativo di Smart Display è 0x7B = 123

Fun(codice funzione)
Codice funzione, che indica lo scopo di questo messaggio, ad esempio, 06 qui è Scrittura di un singolo registro, che scrive anche un valore nella posizione specificata.

Indirizzo registro
L'indirizzo del registro, che è la destinazione su cui scrivere (ovvero l'indirizzo dell'oggetto).

Dati
Cosa scrivere (ovvero il valore dell'oggetto)

CRC
Il risultato del CRC (Cyclic Redundancy Check) sui primi 6 byte viene utilizzato per verificare se vi è un errore nei dati durante il processo di trasmissione.

Si ha qualche concetto? Per ulteriori informazioni, guardare cos'è Modbus.

V. Introduzione a Modbus

 

■Protocollo Modbus

Il protocollo Modbus è in realtà un formato dati. Fondamentalmente definisce il contenuto di comunicazione di un'architettura master-slave. Poiché è solo la definizione della struttura dei dati, può comunicare attraverso varie interfacce fisiche, come RS232, RS422, RS485 e persino la rete.

Poiché su Internet sono già presenti molti documenti didattici ed esplicativi, Modbus non verrà qui descritto in dettaglio. Infatti, purché si conoscano alcuni concetti, è possibile utilizzare Modbus liberamente.

■Modello concettuale

Modbus considera la trasmissione dei dati come un accesso "Registro". Ogni dispositivo deve definire il proprio tipo di registro e indirizzo per riferimento esterno. La cosiddetta trasmissione di dati al dispositivo consiste nello scrivere nel registro specificato, mentre leggere i dati consiste nel leggere il registro specificato, che è semplice e chiaro. Inoltre, il valore memorizzato in ciascun registro indirizzi è di 16 bit.

■Codice funzione

In base alle caratteristiche dei dati, Modbus definisce diversi metodi di lettura e scrittura, specificati dal codice funzione nel messaggio.

Modbus Function Codes

Table 5-1 Modbus Function Codes

 

Per i programmi di controllo Smart Display, i più comunemente usati sono 06: Scrittura di un singolo registro (scrive un valore a 16 bit) e Lettura del registro di holding (legge il valore di più registri).

■CRC

Gli ultimi 2 byte sembrano la parte più misteriosa, in realtà non è difficile. È solo un CRC (Cyclic Redundancy Check) per garantire i dati di comunicazione. Non dobbiamo necessariamente studiare a fondo il suo principio (ma in realtà è solo una ricerca di tabelle e un'operazione di bit, e alla fine si ottiene un codice di controllo a 16 bit), purché si capisca come usarlo.

VI. Controllo degli oggetti di Smart Display

 

Come accennato in precedenza, ogni Modbus deve definire il tipo e l'indirizzo del registro. Ora tratteremo questo argomento.

■Classificazione del registro

I registri Smart Display possono essere suddivisi approssimativamente in tre categorie:

1.)Informazioni sul dispositivo (ad es. versione, nome del dispositivo, ecc.)
Usare 04: Lettura del registro di ingresso da leggere. Questi dati verranno modificati solo quando il firmware viene aggiornato, solitamente appena connesso, per ottenere i parametri caratteristici del dispositivo.

2.)Proprietà dell'oggetto (ad es. tipo, posizione, ecc.)
Usare 03: Lettura del registro di holding/16: Scrittura di vari registri da leggere e scrivere. Questi dati influiscono sull'aspetto degli oggetti e di solito non cambiano al di fuori della fase di progettazione. Per modificare il contenuto, Smart Display deve essere temporaneamente spento prima di poterlo aggiornare.

3.)Valori dell’oggetto (i valori che l'oggetto rappresenta, come RPM, acceso o spento, percentuale, ecc., variano da oggetto a oggetto) Questo è il principale elemento di modifica dell'operazione. Ogni elemento utilizza un valore a 16 bit, quindi è impostato con 06: Scrittura di un singolo registro.

Di seguito è riportato un elenco organizzato di questi registri:

■Input Registers

Smart Display Input Registers

Table 6-1 Smart Display Input Registers

 

■Holding Registers

Smart Display Holding Registers

Table 6-2 Smart Display Holding Registers

 

I primi Smart Display supportano solo 10 oggetti, quindi l'intervallo widgetID è 0 ~ 9 (incluso). La nuova versione del firmware è stata estesa a 64, ma è stato modificato il metodo di indirizzamento, che non verrà discusso qui.

Con questi dati (sebbene non completi, ma sufficienti per ora), possiamo comprimere le istruzioni di controllo e inviarle a Smart Display per il controllo. Per quanto riguarda il modo in cui comprimere e aggiungere il codice CRC, verrà spiegato nei capitoli seguenti.

VII. Interfaccia utente

 

Per mettere Smart Display in un'applicazione pratica, è ancora necessaria un'interfaccia uomo-macchina adatta (in particolare Graphics User Interface, GUI) per ottimizzarne l'efficacia. Al momento, vi sono molte opzioni per la piattaforma di sviluppo della GUI multipiattaforma e qui utilizziamo Qt per implementarla.

Molti ritengono che Qt sia solo una library GUI, ma in realtà è un framework di sviluppo abbastanza completo. Se l'applicazione è implementata interamente attraverso la sua library di classi, il progetto può essere facilmente portato su altre piattaforme (PC/Windows, Mac/MacOS, Raspberry Pi/Raspbian, Android, iOS, Embedded, ecc.) con poche modifiche. Il programma è uno strumento di sviluppo software su cui vale la pena investire nell'apprendimento.

La versione più recente di Qt in realtà supporta già la library di classi Modbus. Tuttavia qui, a scopo illustrativo e per facilitare a tutti la riscrittura in altri linguaggi, implementiamo ancora questo programma di test dalla lettura e scrittura della porta seriale più elementare.

Oltre a fornire la funzione di selezione della porta seriale e di trasmissione del codice di controllo utilizzato nell'esempio precedente, questo esempio fornisce inoltre una leva orizzontale nell'interfaccia utente della finestra dell'app, che può impostare il valore dell'oggetto specificato. Se si sceglie COM come porta seriale, ricordare di inserire il numero effettivo.

L'immagine seguente mostra la schermata di esecuzione di questo programma su Raspberry Pi e Ubuntu. Il programma non ha alcun bisogno di essere modificato.

Set WidgetValue screen on Raspberry Pi

Figura 7-1 Set WidgetValue screen on Raspberry Pi

 

Set WidgetValuet screen on Ubuntu

Figura 7-2 Set WidgetValuet screen on Ubuntu

 

■Operazione CRC

L'operazione CRC in realtà non è complicata. Probabilmente è come i codici seguenti con Qt:

QByteArray SetWidgetValue::calculateCRC(QByteArray data)
{
uint16_t crc = 0xFFFF;
for(int idx = 0; idx < data.length(); idx++)
{
uint8_t i = (uint8_t)crc ^ data[idx];
crc >>= 8;
crc ^= crcTable[i];
}
QByteArray ba;
ba.append(char(crc & 0xFF));
ba.append(char(crc >> 8));
return ba;
}

The contents of crcTable[] are:

const uint16_t crcTable[] =
{
0X0000, 0XC0C1, 0XC181, 0X0140, 0XC301, 0X03C0, 0X0280, 0XC241,
0XC601, 0X06C0, 0X0780, 0XC741, 0X0500, 0XC5C1, 0XC481, 0X0440,
0XCC01, 0X0CC0, 0X0D80, 0XCD41, 0X0F00, 0XCFC1, 0XCE81, 0X0E40,
0X0A00, 0XCAC1, 0XCB81, 0X0B40, 0XC901, 0X09C0, 0X0880, 0XC841,
. . .
0X8801, 0X48C0, 0X4980, 0X8941, 0X4B00, 0X8BC1, 0X8A81, 0X4A40,
0X4E00, 0X8EC1, 0X8F81, 0X4F40, 0X8D01, 0X4DC0, 0X4C80, 0X8C41,
0X4400, 0X84C1, 0X8581, 0X4540, 0X8701, 0X47C0, 0X4680, 0X8641,
0X8201, 0X42C0, 0X4380, 0X8341, 0X4100, 0X81C1, 0X8081, 0X4040
};

Non tutti i codici sono elencati qui. Sono disponibili informazioni complete in github che gli utenti possono scaricare da soli se interessati alla programmazione. In questo articolo sappiamo solo come operare con il formato dei dati.

■Compressione dei dati

Di seguito è riportata la funzione principale che calcola il codice di controllo in base all'interfaccia utente e lo invia allo Smart Display:

void SetWidgetValue::on_sbValue_valueChanged(int value)
{
int id = ui->edWidgetID->text().toInt();
sendWidgetValue(id, value);
ui->lbValue->setText(QString::number(value));
}

void SetWidgetValue::sendWidgetValue(int id, int value)
{
QByteArray msg;
uint16_t addr = (uint16_t)(id * 100 + 6);
msg.append(deviceID);
msg.append(writeSingleRegister);
msg.append((uint8_t)addr >> 8);
msg.append((uint8_t)addr & 0xFF);
msg.append((uint8_t)value >> 8);
msg.append((uint8_t)value & 0xFF);
QByteArray msgToSend = msg.append(calculateCRC(msg));
writeSerialPortData(msgToSend);
}

Se si ha già familiarità con Qt, il codice sopra non dovrebbe essere difficile da capire. Se non lo si conosce, dedicare qualche istante a studiarlo. Alcuni dei suoi concetti sono in realtà abbastanza interessanti e vale la pena studiarli a fondo. Dopo aver acquisito familiarità con esso, è una buona scelta per lo sviluppo di applicazioni multipiattaforma o per la prototipazione rapida di un sistema.

VIII. Esempio avanzato

 

L'esempio precedente è solo per un'impostazione del valore dell'oggetto. È disponibile un programma applicativo SmartDisplayConsole di esempio più completo per i lettori interessati a saperne di più. L'immagine seguente è la schermata di esecuzione su Raspberry Pi:

SmartDisplayConsole screen on Raspberry Pi

Figura 8-1 SmartDisplayConsole screen on Raspberry Pi

 

È presente un URL github alla fine dell'articolo e tutti sono invitati a fare riferimento e studiare insieme.

IX. Conclusione

 

Abbiamo spiegato ogni fase del controllo di Smart Display e abbiamo fornito anche una varietà di metodi di controllo. Usando queste conoscenze e la ricca immaginazione, credo si possano scatenare varie scintille e si possano produrre prodotti più diversi. Creiamo insieme un futuro migliore con Smart Display!

X. Riferimenti

 

Serial Terminal Basics
https://learn.sparkfun.com/tutorials/terminal-basics/command-line-windows-mac-linux

Modbus
https://www.modbustools.com/modbus.html
https://www.modbusdriver.com/doc/mbusmaster.net/modbus.htm

XI. Sample source code

 

GettingStartedWithSmartDisplay
https://github.com/Smart-Display-Series/GettingStartedWithSmartDisplay.git

SmartDisplayConsole
https://github.com/Smart-Display-Series/SmartDisplayConsole.git

Qualche domanda sulle soluzioni di visualizzazione per la propria azienda? Contatti!

Iscrizione

Ricevere e-mail sugli aggiornamenti delle notizie da Winstar

Contatti

Prezzo/Scheda tecnica/Richiesta generale

Supporto tecnico

Si prega di contattarci per qualsiasi informazione tecnica

go top
Contatti
close