Home Soluções Introdução ao SmartDisplay RS485

Introdução ao SmartDisplay RS485

Sep 10, 2022

Descrição

I. Prefácio::

 

O Display Inteligente foi amplamente utilizado em vários campos como o controle, médico, industrial e automotivo depois do lançamento dos produtos. Em poucas palavras, é um display combinado com um microcontrolador, capaz de gerenciar o carregamento, a definição, a visualização e inclusive a entrada de gráficos complexos e o dispositivo externo (isto é, host) pode realizar operações interativas com comandos simples, deste modo, é muito adequado para várias exigências. Vários tipos de aplicações exibidas ou controladas.

O Smart Display suporta uma variedade de interfaces de comunicação. Atualmente, os mais usados comumente são CAN/CANopen, RS485/Modbus e mais escolhas serão fornecidas no futuro. Entre elas, o RS485/Modbus é uma interface de comunicação popular na indústria, e vários dispositivos RS485 a preços razoáveis encontram-se facilmente disponíveis no mercado. A estrutura da linha é simples, à medida que dois fios (RS485_A/RS485_B) podem comunicar e a interface de comunicação é geralmente apresentada na forma de “Porta Serial” em um sistema operacional, e cada plataforma tem uma biblioteca de funções de desenvolvimento correspondente. Além disso, o protocolo Modbus é bastante fácil de compreender, assim o colocamos como exemplo em seguida dos experimentos e explicações.

Este artigo informará como controlar o Smart Display do simples ao mais extenso, entender seu princípio de controle e finalmente introduzir como criar aplicações multiplataforma. Seja um especialista em equipamento industrial ou um jogador independente, bem vindo ao mundo do Smart Display conosco!

II. Requisitos:

 

■Smart Display_RS485

Um Smart Display que suporta a interface RS485 é exigido para o teste de conexão.

■Dongle RS485

Assim como um host, como PC/Raspberry Pi normalmente não tem porta RS485, podemos utilizar vários USB para o dongle RS485, se necessário.

Types of USB to RS485 Dongle

Figura 2-1 Types of USB to RS485 Dongle

 

■Dispositivo HOST

Quando se alcançam os requisitos acima, é possível escolher um ambiente de execução do banco de testes, como um Host. A única condição para um dispositivo host é ser capaz de ler e registrar a porta serial de host independente do sistema operacional ser Windows, MacOS, vários Linux (incluindo Raspbian para Raspberry Pi), ou a plataforma é Single Board Computer, Arduino etc.

Criamos computadores de placa única com RS485 incorporado de Demo.set por conveniência, que pode ser usado diretamente como dispositivo host como na foto abaixo.

WUACLB120V0000N0NX01

Model No. WUACLB120V0000N0NX01

 

III. Teste simples para a interface de controle:

 

■Obtenha o código de controle

Para entender como colaborar em Smart com um host. Em primeiro lugar, temos que obter o código de controle. O modo mais fácil é obtê-lo por GUI Builder do Smart Display. O GUI Builder é um excelente software de suporte para o Smart Display. Ele pode nos ajudar a aprender, operar, projetar e visualizar a interface do usuário sem dispositivo físico de hardware, projetar a interface do usuário sem registrar qualquer programa. Com a característica WYSIWYG, o projeto da interface do usuário pode ser realizado arrastando ou clicando nos botões ou objetos. Além disso, existe um simulador incorporado que compartilha o código fonte com Smart Display, garantindo assim a mesma aparência e comportamento de um dispositivo físico. Ainda melhor, é gratuito!

Contact for Smart Display GUI Builder

Smart Display GUI Builder

Figura 3-1 Smart Display GUI Builder

 

Fazer um clique duplo em GUI Builder para executar o app no Sistema Operacional de Windows, abrir um projeto. Aqui escolhemos o Smart Display 5" RS485 WL0F00050000FGDAASA00, e o cenário padrão abaixo é o Veículo. Inserir o nome do projeto, pressionar o botão Criar para criar o projeto. Se tiver sido criado antes, pode-se também selecionar o projeto diretamente no menu à direita.

Create project

Figura 3-2 Create project

 

Quando o projeto é aberto, selecionar a interface primeiro

Select interface

Figura 3-3 Select interface

 

Set interface parameters

Figura 3-4 Set interface parameters

 

Selecionar RS485 para a Interface e a Porta RS485 do host deve ser definida como porta atual da porta conectada para o dongle RS485. Em caso de dúvidas, é possível controlar o nome da porta no administrador do dispositivo (desconectá-lo repetidamente e ver se ele desaparece ou mostra qual é visualizado). A taxa de transmissão pode manter o valor padrão de 115200.

Com Port display of device administrator

Figura 3-5 Com Port display of device administrator

 

Todavia, se não existir ainda o dispositivo Smart Display RS485, não importa, até que a interface seleciona RS485, a Porta RS485 pode ser ignorada no momento, porque agora utilizaremos só o simulador e não nos conectaremos ao dispositivo Smart display praticamente.

Fazer um clique no Simulador/Simulador com GUI para ser executado:

To run Simulator

Figura 3-6 To run Simulator

 

Depois da execução, você pode ver a tela de simulação, os itens de controle de cada objeto; e o registro de dados de comunicação no lado direito da tela. Modificar o valor de qualquer objeto para ver o conteúdo do comando por consequência:

Change the content of the object and the control code

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

 

Cada ação verá dois comandos TX/RX, porque o dispositivo de display (mesmo se atualmente é um emulador) enviará de volta o mesmo comando como reconhecimento depois de receber o comando para indicar que foi recebido.

Registramos diversos valores diferentes para diferentes objetos e a passagem seguinte pode ser usada para controlar o dispositivo físico.

Control code

Tabela 3-1 Control code

■Conexão com fio:

O RS485 usa o par diferencial para transmitir e receber sinais, de modo que até estes dois fios possam ser conectados, mesmo o fio terra não é necessário. O nome da linha de sinal de RS485 é A/B, basta segui-lo (A conecta A, B conecta B).

RS485 wire connection

Figura 3-8 RS485 wire connection

 

Como um host pode transmitir códigos de controle por si mesmo? Desde que possa fazer registros em uma porta serial. Todavia, existem duas coisas a ter em mente, antes de proceder com os testes.

1. Desde que os nomes das Portas de Com. em diferentes sistemas operacionais sejam diferentes, verificar e confirmar antes do teste. Para exemplos, a seguinte tabela:

Serial port names for various operating systems

Tabela 3-2 Serial port names for various operating systems

 

2. A permissão da Porta de Com. de alguns sistemas operacionais não está aberta de modo padrão. Deve ser definido antes de usá-lo. Tomando Linux/Ubuntu como um exemplo, se o nome da Porta de Com. é ttyUSB0, execute-o apenas no terminal:

sudo chmod 666 /dev/ttyUSB0

 

Abaixo, são fornecidos dois métodos de teste:

■Controle do Terminal da Porta Serial

Usar o software do terminal da porta serial que suporta a entrada hexadecimal e inserir diretamente o código de controle hexadecimal depois da conexão:

Send Control Codes with Terminal Program

Figura 3-9 Send Control Codes with Terminal Program

 

Se for normal, você deve ser capaz de ver se os objetos no dispositivo agem de acordo com diversos códigos de controle.

Mas este método só é usado para teste se a conexão obtém um êxito positivo e não é muito conveniente na aplicação prática. Para obter os melhores resultados, deve ser realizado através do programa. E em qual linguagem? De fato, podemos, vamos tentar em primeiro lugar, com a linguagem popular de programação de multiplataforma python.

■Usar python

Os seguintes programas são executados usando o python3. A estrutura do programa é bastante simples, basta registrar diretamente na porta serial três conjuntos de códigos de controle a cada um segundo, de modo que o instrumento no dispositivo continua a girar.

 

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)

O código de fonte python pode ser executado em uma variedade de plataformas, de modo que a porta serial é nomeada corretamente, ele deve operar corretamente com o banco de teste da conexão apropriado.

Todavia, estes códigos de controle fixos como exemplo, não devem estar alinhados com as aplicações práticas, assim precisamos entender o conteúdo destas instruções para fornecer-lhes plena execução.

IV. Análise do código de controle

 

■Análise comparativa

Compare os comandos com diferentes valores para o mesmo objeto:

Table

Não é difícil descobrir que a parte azul é o valor do objeto que definimos.

Compara diferentes objetos, o mesmo comando de valor:

Table

A parte azul se refere obviamente a qualquer tipo de índice ou endereço do objeto.

No que se refere aos dados dos últimos dois bytes, parece que não existem regras. O que estas mensagens significam? Vamos explicar em seguida.

■Análise do código de controle

De fato, o conteúdo destes 8 bytes é a acima chamada mensagem de Modbus. Use simplesmente uma imagem para ilustrar o significado de cada campo:

Control code example description

Figura 4-1 Control code example description

 

ID
Cada dispositivo Modbus deve ter um código de identificação. O código de identificação do Smart Display é 0x7B = 123

Fun (Código de Função)
Código de função, indicando a proposta desta mensagem, por exemplo, 06 aqui é o Registro de Escrita Única, que também registra um valor para o local especificado.

Endereço de Registro
O endereço de registro, que é o destino a ser registrado (isto é, o endereço do objeto).

Dados
O que registrar (isto é, o valor do objeto)

CRC
O resultado do CRC (Cyclic Redundancy Check) nos primeiros 6 bytes é usado para verificar se existe um erro nos dados durante o processo de transmissão.

Você tem alguns conceitos? Se deseja saber mais, você deve olhar o que é Modbus.

V. Introdução ao Modbus

 

■Protocolo de Modbus

O protocolo Modbus é atualmente um formato de dados. Basicamente, ele define o conteúdo de comunicação de uma arquitetura master-slave. Como é só a definição da estrutura dos dados, pode se comunicar por várias interfaces físicas, como RS232, RS422, RS485 e mesmo a rede.

Como na Internet já estão presentes muitos documentos didáticos e explicativos, o Modbus não será descrito aqui em detalhes. De fato, assim que você conhecer alguns conceitos, poderá usar o Modbus livremente.

■Modelo conceitual

O Modbus considera a transmissão dos dados como um acesso de “Registro”. Cada dispositivo deve definir seu próprio tipo de registro e endereço para referência externa. A assim chamada transmissão de dados para o dispositivo é registrar no registro especificado, e ler os dados é ler o registro especificado, o que é simples e claro. E ainda, o valor armazenado em cada registro de endereços é de 16-bits.

■Código de função

De acordo com as características de dados, o Modbus define diversos métodos de leitura e registro, que são especificados pelo código de função na mensagem.

Modbus Function Codes

Tabela 5-1 Modbus Function Codes

 

Para os programas de controle Smart Display, o mais comumente usado é 06: Registro simples de escrita (registro com valor de 16-bits) e registros de manutenção de leitura (leitura do valor de registros múltiplos).

■CRC

Os últimos 2 bytes parecem a parte mais misteriosa, na realizada não é difícil. É só um CRC (Cyclic Redundancy Check) para garantir os dados de comunicação. Não temos necessariamente estudar a fundo o seu princípio (mas, na realidade, é só uma busca de tabelas e uma operação de bit, e no final se obtém um código de controle a 16 bit), à medida que se compreenda como usá-lo.

VI. Controle dos objetos do Smart Display

 

Como mencionado anteriormente, cada Modbus precisa definir o tipo e o endereço do registro, e agora discutiremos este assunto.

■Classificação do registro

Os registros Smart Display podem ser subdivididos aproximadamente nas três categorias:

1.)Informações no dispositivo (por ex. versão, nome do dispositivo, etc.)
Usa 04: Ler os Registros de Entrada de leitura. Estes dados serão modificados só quando o firmware é atualizado, geralmente assim que é conectado, para obter os parâmetros de características do dispositivo.

2.)Propriedades do objeto (por ex. tipo, posição, etc.)
Usa 03: Leitura de Manutenção dos Registros/16: Escrever Registros Múltiplos para ler e registrar. Estes dados afetam a aparência de objetos e, geralmente, não mudam fora da fase de projeto. Para mudar o conteúdo, o Smart Display deve ser temporariamente desligado, antes de poder atualizá-lo.

3.)Valores do Objeto (valores que o objeto representa, como RPM, ligado ou desligado, percentagem, etc., variam de objeto a objeto)
Este é o elemento principal de modificação na operação. Cada elemento usa um valor de 16-bit, de modo que é definido com 06: Escrever Registro Único.

Em seguida, é uma lista organizada destes registros:

■Input Registers

Smart Display Input Registers

Tabela 6-1 Smart Display Input Registers

 

■Holding Registers

Smart Display Holding Registers

Tabela 6-2 Smart Display Holding Registers

 

Os primeiros Smart Display suporta só 10 objetos, assim a faixa do widgetID é 0 - 9 (incluído). A nova versão do firmware foi estendido a 64, mas o método de endereçamento, que não será discutido aqui.

Com estes dados (embora não completo, mas suficiente para o momento), podemos embalar as instruções de controle e enviá-las ao Smart Display para controle. No que se refere a como embalar e como adicionar o código CRC, será explicado nos capítulos seguintes.

VII. Interface do Usuário

 

Para colocar o Smart Display na aplicação prática, uma interface homem-máquina adequada (especialmente, a Interface Gráfica do Usuário) é ainda necessária para maximizar sua eficácia. No momento, existem muitas escolhas para a plataforma de desenvolvido da multiplataforma GUI e aqui utilizamos Qt para implementá-la.

Muitas pessoas pensam que Qt é apenas uma biblioteca GUI, mas de fato é uma estrutura de desenvolvimento bastante completo. Se a aplicação é implementada totalmente pela sua biblioteca de classes, o projeto pode ser facilmente levado para outras plataformas (PC/Windows, Mac/MacOS, Raspberry Pi/Raspbian, Android, iOS, Embedded, etc.) com pequenas modificações. O programa é um instrumento de desenvolvimento de software que vale a pena investir na aprendizagem.

A versão mais recente de Qt, na realidade, já suporta a biblioteca de classes Modbus. Mas, aqui, para fins exemplificativos e para facilitar a todos a reescritura em outros idiomas, implementamos ainda este programa de teste da leitura e registro da porta serial mais elementar.

Além de fornecer a função de seleção da porta serial e de transmissão do código de controle utilizado no exemplo anterior, este exemplo fornece ainda uma alavanca horizontal na interface dos usuários da janela do app, que pode definir o valor do objeto especificado. Se você escolhe COM para a porta serial, lembre-se de preencher o número atual.

A imagem seguinte mostra a tela de execução deste programa no Raspberry Pi e Ubuntu. O programa não precisa de forma alguma ser modificado.

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

 

■Operação CRC

A operação CRC, na realidade, não é complicada. Provavelmente, é como sob os códigos com 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
};

Nem todos os códigos são listados aqui. Existem informações completas em github que os usuários podem fazer o download sozinhos, se interessados na programação, neste artigo sabemos só como operar com o formato dos dados.

■Embalagem dos dados

A seguir, temos a função chave que calcula o código de controle de acordo com a Interface Usuário e envia-a ao 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 você já está familiarizado com o Qt, o código acima não deve ser difícil de entender. Se você não o conhece, dedique um tempo para estudá-lo, alguns de seus conceitos são na realidade bastante bons e vale a pena estudá-los em profundidade. Depois de se familiarizar com ele, é uma boa escolha para o desenvolvimento de aplicações multiplataforma ou para a prototipagem rápida de um sistema.

VIII. Exemplo avançado

 

O exemplo anterior é só para uma definição do valor do objeto. Existe um programa de aplicação SmartDisplayConsole de exemplo mais completo para os leitores interessados em aprender mais a esse respeito. A seguinte imagem é a tela de execução no Raspberry Pi:

SmartDisplayConsole screen on Raspberry Pi

Figura 8-1 SmartDisplayConsole screen on Raspberry Pi

 

Existe uma URL github no fim do artigo e todos são enviados a consultas e estudar juntos.

IX. Conclusão

 

Explicamos cada fase de controle do Smart Display e também fornece uma variedade de métodos de controle. Usando este conhecimento e a rica imaginação, acredito que podem ser suscitadas diversas faíscas e podem ser produzidos diversos produtos. Vamos criar juntos um futuro melhor com Smart Display!

X. Referências

 

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

Tem perguntas sobre as soluções de displays para a sua empresa? Entre em contato conosco!

Assinar

Receba e-mails sobre novas atualizações da Winstar

Entre em contato conosco

Preço/Ficha de dados/Consulta geral

Suporte técnico

Entre em contato conosco para qualquer informação técnica

go top
Contato
close