Home Soluciones Introducción a la SmartDisplay RS485

Introducción a la SmartDisplay RS485

Sep 10, 2022

Descripción

I. Prólogo:

 

La pantalla inteligente se usa ampliamente en varios ámbitos, como el médico, de control industrial y el automotriz, para después del lanzamiento de productos. Sencillamente, es una pantalla combinada con un microprocesador, que puede permitir cargar complejos gráficos, ajustes, visualización e incluso entradas y salidas de dispositivos (por ejemplo un host) y puede realizar operaciones interactivas con comandos simples, lo que lo hace apto para varias necesidades. Se visualizan y controlan diferentes tipos de aplicaciones.

La pantalla inteligente admite una gran variedad de interfaces de comunicación. En la actualidad, las más comúnmente utilizadas son CAN/CANopen, RS485/Modbus, y se ofrecerán más opciones en el futuro. Entre ellos, RS485/Modbus es una famosa interfaz de comunicación en la industria, y distintos dispositivos RS485 están disponibles en el mercado a un precio razonable. La estructura de líneas es sencilla, siempre que dos cables (RS485_A/RS485_B) puedan comunicarse. La interfaz de comunicación se presenta normalmente en forma de "Puerto de Serie" en un sistema operativo, y cada plataforma tiene un biblioteca de funciones de desarrollo correspondiente. Además, el protocolo Modbus es muy fácil de entender, por lo que lo ponemos como un ejemplo para siguientes experimentos y explicaciones.

Este artículo presentará cómo controlar la pantalla inteligente desde lo más sencillo a lo más difícil, cómo comprender su principio de control, y finalmente presentará cómo hacer aplicaciones multiplataforma. Tanto si es un experto de equipos industriales o un jugador hazlo tu mismo, ¡bienvenido con nosotros al mundo de la Pantalla Inteligente!

II. Requisitos:

 

■Pantalla Inteligente_RS485

Se requiere para la prueba de conexión una pantalla inteligente que admite la interfaz RS485.

■Llave RS485

Ya que un host como el PC/Raspberry Pi normalmente no tiene un puerto RS485, podemos utilizar varios convertidores USB a RS485 si es necesario.

Types of USB to RS485 Dongle

Figura 2-1 Types of USB to RS485 Dongle

 

■Dispositivo HOST

Cuando se alcanzan los requerimientos anteriores, entonces puede elegir un entorno de ejecución de herramienta de prueba. La única condición para un dispositivo host es ser capaz de leer y escribir en el puerto de serie del host, independientemente de si el SO es Windows, MacOS, uno de varios SO Linux (incluido Raspbian para Raspberry Pi), o si la plataforma es un ordenador monoplaca, Arduino etc.

Cuando creamos ordenadores monoplaca, tienen integrado un RS485 de Demo.set por comodidad, que puede utilizarse como un dispositivo host como se indica directamente en el dibujo a continuación.

WUACLB120V0000N0NX01

Model No. WUACLB120V0000N0NX01

 

III. Prueba simple para la interfaz de control:

 

■Obtener el código de control

Para comprender cómo colaborar en un ámbito Inteligente con un host. Primero necesitamos obtener el código de control. La forma más fácil es obtenerlo desde el GUI Builder de la pantalla inteligente. GUI Builder es un excelente asistente de software para pantalla inteligente. Éste puede ayudarnos a aprender, manejar, diseñar y mostrar al usuario una interfaz sin un dispositivo físico de hardware y diseñar una IU sin escribir ningún programa en absoluto. Con la función de WYSIWYG, se puede crear el diseño de la interfaz del usuario arrastrando o haciendo clic en los botones u objectos. Además, tiene un simulador incorporado que comparte el código de fuente con la pantalla inteligente, de este modo asegura que tenga la misma apariencia y comportamiento que el dispositivo físico. Aún mejor, ¡Es gratis!

Contact for Smart Display GUI Builder

Smart Display GUI Builder

Figura 3-1 Smart Display GUI Builder

 

Haga doble clic en GUI Builder para ejecutar la aplicación en el SO de Windows y abrir un proyecto. Aquí elegimos la pantalla inteligente RS485 de 5" WL0F00050000FGDAASA00, y el escenario por defecto a continuación es Vehículo. Introduzca el nombre del proyecto, presione el botón de Crear para crear el proyecto. Si ha sido creado anteriormente, puede también seleccionar proyecto directamente del menú de la derecha.

Create project

Figura 3-2 Create project

 

Cuando el proyecto está abierto, seleccione la interfaz primero

Select interface

Figura 3-3 Select interface

 

Set interface parameters

Figura 3-4 Set interface parameters

 

Seleccione RS485 para la interfaz, y el puerto del host RS485 debe estar establecido como el puerto real del puerto conectado para el convertidor RS485. Si tiene alguna duda, puede comprobar el nombre del puerto en el administrador del dispositivo (desconectar repetidamente y mire si éste desaparece o se muestra). La velocidad de transmisión puede mantener el valor por defecto de 115200.

Com Port display of device administrator

Figura 3-5 Com Port display of device administrator

 

Sin embargo, si no hay un dispositivo RS485 de pantalla inteligente todavía, no importa, en cuanto la interfaz seleccione RS485, el puerto RS485 se puede ignorar de momento, porque por el momento vamos a utilizar el simulador y no conectaremos la pantalla inteligente en la práctica.

Haga clic en Simulador/Simulador con GUI para ejecutar:

To run Simulator

Figura 3-6 To run Simulator

 

Después de ejecutar, puede ver la pantalla del simulador, los elementos de control de cada objeto; y el registro de los datos de comunicación en el lado derecho de la pantalla. Cambie el valor de cualquier objeto para ver el correspondiente contenido del comando:

Change the content of the object and the control code

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

 

Cada acción tendrá dos comandos TX/RX, porque el dispositivo de pantalla (incluso si es actualmente un emulador) enviará de vuelta el mismo comando como reconocimiento después de recibir el comando para indicar que ha sido recibido.

Grabamos varios y diferentes valores para diferentes objetos y el próximo paso puede utilizarse para controlar el dispositivo físico.

Control code

Tabla 3-1 Control code

■Conexión por cable:

La RS485 utiliza pares diferenciales para transmitir y recibir señales, y por lo tanto, siempre que estos dos cables se puedan conectar, ni siquiera un cable a tierra es necesario. El nombre de la línea de la señal de la RS485 es A/B, sólo hay que seguirla (A conecta con A, B conecta con B).

RS485 wire connection

Figura 3-8 RS485 wire connection

 

¿Cómo puede un host transmitir los códigos de control desde sí mismo? Siempre que pueda escribir un puerto de serie. Sin embargo, hay dos temas que tener en cuenta antes de continuar la prueba.

1. Ya que los nombres de los puertos de comunicación en diferentes sistemas operativos son diferentes, compruebe y confirme antes de realizar la prueba. Como ejemplos, le mostramos la siguiente tabla:

Serial port names for various operating systems

Tabla 3-2 Serial port names for various operating systems

 

2. El permiso del puerto de comunicación de algunos sistemas operativos no está abierto por defecto. Debe establecerse antes de utilizarlo. Tomando Linux/Ubuntu como un ejemplo, si el nombre del puerto de comunicación es ttyUSB0, simplemente ejecútelo en el terminal:

sudo chmod 666 /dev/ttyUSB0

 

A continuación se muestran dos métodos de prueba:

■Control del terminal de mando del puerto de serie

Utilice el software de un terminal del puerto de serie que admite la entrada hexadecimal, e introduzca el código de control hexadecimal directamente después de conectar:

Send Control Codes with Terminal Program

Figura 3-9 Send Control Codes with Terminal Program

 

Si es normal, debería ser capaz de ver que los objetos del dispositivo respondan según los códigos de control

Pero este método de prueba se utiliza solamente en el caso de que la conexión es satisfactoria, y no es muy apropiado en la aplicación práctica. Para conseguir los mejores resultados, tiene que realizarse a través del programa. ¿Y en cuánto al idioma? En efecto, podemos, inténtelo primero con Python, el lenguaje de programación multiplataforma.

■Utilizar python

Los siguientes programas se ejecutan utilizando python3. La estructura del programa es muy sencilla; simplemente escriba directamente tres grupos de códigos de control en el puerto de serie cada segundo, de forma que el instrumento del dispositivo continúa rotando.

 

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)

El código de fuente de Python se puede ejecutar en una gran variedad de plataformas, así que si el puerto de serie es nombrado correctamente, funciona bien con la correcta herramienta de prueba de conexión.

Sin embargo, estos códigos de control fijos, para poner un ejemplo, no deben estar en línea con aplicaciones prácticas, por lo que necesitamos comprender el contenido de estas instrucciones para ofrecer un completo desempeño del producto.

IV. Análisis del código de control

 

■Análisis comparativo

Compare comandos con diferentes valores para un mismo objeto:

Table

No es difícil detectar que la parte azul es el valor del objeto que establecemos.

Compare diferentes objetos con el mismo comando de valor:

Table

La parte azul obviamente se refiere a algún tipo de índice o dirección del objeto.

En cuanto a los datos de los dos últimos bytes, parece que no hay reglas. ¿Qué significan esos mensajes? Se explican a continuación.

■Análisis del código de control

En efecto, el contenido de estos 8 bytes es el llamado mensaje Modbus. Simplemente utiliza una imagen para ilustrar el significado de cada campo:

Control code example description

Figura 4-1 Control code example description

 

ID
Cada dispositivo Modbus debe tener un código de identificación. El código de identificación de la pantalla inteligente es 0x7B = 123

Fun (Código de función)
El código de función indica el propósito de este mensaje, por ejemplo, 06 aquí es el registro único de escritura, que también escribe un valor en el lugar establecido.

Dirección de registro
La dirección de registro, que es el destino en el que se va a escribir (es decir, la dirección del objeto).

Datos
Qué escribir (es decir, el valor del objeto)

CRC
El resultado de CRC (Comprobación de Redundancia Cíclica) en los primeros 6 bytes se utiliza para comprobar si hay un error en los datos durante el proceso de transmisión.

¿Tiene algunas nociones básicas? Si quiere saber más, debe mirar lo que es Modbus.

V. Introducción de Modbus

 

■Protocolo de Modbus

El protocolo de Modbus es en realidad un formato de datos. Define básicamente el contenido de comunicación de la arquitectura maestro-esclavo. Ya que es solamente la definición de la estructura de datos, puede comunicar a través de varias interfaces físicas, como la RS232, RS422, RS485, e incluso la red.

Ya que hay varios documentos explicativos en el internet, Modbus no se describirá aquí en detalle. En efecto, siempre y cuando sepa algunos conceptos, puede utilizar Modbus libremente.

■Modelo conceptual

Modbus considera la transmisión de datos como acceso de "Registro". Cada dispositivo debe definir su propio tipo de registro y dirección para referencias externas. La llamada transmisión de datos al dispositivo es escribir al registro específico, y leer los datos es leer el registro específico, que es simple y claro. Además, el valor guardado en cada registro de dirección es de 16 bits.

■Código de función

Según las características de los datos, Modbus define varios métodos de lectura y escritura, que son específicos por el código de función en el mensaje.

Modbus Function Codes

Tabla 5-1 Modbus Function Codes

 

Para programas de control de pantalla inteligente, el más utilizado es 06: Escribe registros únicos (escribe un valor de 16 bits) y lee registros de retención (lee el valor de los múltiples registros).

■CRC

Los últimos 2 bytes parecen la parte más misteriosa, pero no es difícil. Es solamente una CRC (Comprobación de Redundancia Cíclica) para asegurar los datos de comunicación. No tenemos que estudiar necesariamente este principio en profundidad (pero en efecto, es solamente un acceso a una tabla y una operación bit, y finalmente se obtiene un código de comprobación de 16 bits), siempre y cuando comprendamos cómo utilizarlo.

VI. Objetos de control de la Pantalla Inteligente

 

Como se ha mencionado anteriormente, cada Modbus necesita definir el tipo y dirección del registro, y ahora vamos a tratar este tema.

■Clasificación del registro

El registro de pantalla inteligente se puede dividir en aproximadamente tres categorías:

1.)Información del dispositivo (por ejemplo, versión, nombre del dispositivo, etc.).
Uso 04: Leer registros de entrada para leer. Estos datos solamente se cambiarán cuando el firmware está actualizado, normalmente cuando está conectado, para obtener los parámetros de las características del dispositivo.

2.)Propiedades del objeto (por ejemplo tipo, situación, etc.)
Uso 03: Leer registros de retención /16: Escribir múltiples registros para leer y escribir. Estos datos afectan a la apariencia de los objetos y normalmente no cambian el estado de diseño externo. Para cambiar el contenido, la pantalla inteligente se debe apagar temporalmente antes de poder actualizarse.

3.)Valores de objeto (los valores que representa el objeto, como RPM, encender o apagar, porcentaje, etc., varían de objeto a objeto)
Éste es el principal tipo de cambio en la operación. Cada elemento utiliza un valor de 16 bits, por lo que se establece con 06: Registro único de escritura.

La siguiente lista es una organización de los registros:

■Input Registers

Smart Display Input Registers

Tabla 6-1 Smart Display Input Registers

 

■Holding Registers

Smart Display Holding Registers

Tabla 6-2 Smart Display Holding Registers

 

La primera pantalla inteligente admite solamente 10 objetos, por lo que el rango de ID de la miniaplicación es de 0 ~ 9 (inclusivo). La nueva versión del firmware se ha ampliado a 64, pero los métodos de direccionamiento se han cambiado, los cuáles no se van a tratar aquí.

Con estos datos (aunque no completos, pero suficientes por ahora), podemos empaquetar las instrucciones de control y enviarlas a la pantalla inteligente para el control. En el siguiente capítulo se explica cómo empaquetar y añadir el código CRC.

VII. Interfaz del usuario

 

Para utilizar la pantalla inteligente para una aplicación práctica, una adecuada interfaz máquina-humano (en especial una interfaz gráfica de usuario, GUI) es necesaria para maximizar su eficacia. En la actualidad, hay muchas elecciones para la plataforma de desarrollo GUI multiplataforma y utilizamos Qt para implementarla aquí.

Mucha gente piensa que Qt es solamente una biblioteca de GUI, pero de hecho es un marco de desarrollo bastante completo. Si la aplicación se implementa por completo a través de su biblioteca de clases, el proyecto se puede portar fácilmente a otras plataformas (PC/Windows, Mac/MacOS, Raspberry Pi/Raspbian, Android, iOS, Embedded, etc.) con unas pequeñas modificaciones. El programa es una herramienta de software de desarrollo sobre la que vale la pena aprender.

En realidad la versión más reciente de Qt ya admite la biblioteca de clase de Modbus. Pero para fines ilustrativos, y para facilitar a todo el mundo reescribir en otros idiomas, aún implementamos este programa de prueba desde la lectura y escritura del puerto de serie más básica.

Además para mejorar la función de seleccionar el puerto de serie y transmitir el código de control utilizado en el ejemplo anterior, este ejemplo además proporciona una palanca horizontal en la interfaz de los usuarios de la ventana de la aplicación, que puede establecer el valor del objeto especificado. Si elige COM para el puerto de serie, recuerde rellenar el número real.

La siguiente imagen muestra la pantalla de ejecución de este programa en Raspberry Pi y Ubuntu. El programa no necesita modificarse en absoluto.

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

 

■Operación CRC

En realidad la operación CRC no es complicada. Probablemente sea como los siguientes códigos 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
};

No todos los códigos están enumerados aquí. Hay información completa en github que los usuarios pueden descargar ellos mismos si están interesados en la programación; en este artículo solamente vamos a indicar cómo operar con el formato de datos..

■Paquete de datos

Lo siguiente es la función clave que calcula el código de control según el IU y lo envía a la pantalla inteligente:

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);
}

Si está familiarizado con Qt, el siguiente código no es difícil de comprender. Si no está familiarizado con él, tome un momento para estudiarlo; algunos de estos conceptos son bastante buenos y vale la pena estudiarlos en profundidad. Después de familiarizarse con Qt, es buena opción para desarrollar aplicaciones multiplataforma o para realizar un prototipo rápido de un sistema.

VIII. Ejemplo avanzado

 

El anterior ejemplo es solamente para el ajuste del valor del objeto. Hay un ejemplo más completo en el programa de aplicación SmartDisplayConsole para lectores interesados en aprender más sobre este tema. La siguiente imagen es la pantalla de ejecución de Raspberry Pi:

SmartDisplayConsole screen on Raspberry Pi

Figura 8-1 SmartDisplayConsole screen on Raspberry Pi

 

Hay una URL de github al final del artículo,a disposición de todos para consultarla y estudiarla juntos.

IX. Conclusiones

 

Hemos explicado cada paso de control de la pantalla inteligente, y también proporcionado una variedad de métodos de control. Utilizando este conocimiento y abundante inventiva, se pueden despertar varias chispas y se pueden producir más y diversos productos. ¡Creemos juntos un futuro mejor con la pantalla inteligente!

X. Referencias

 

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

¿Tiene preguntas sobre soluciones de pantallas para su negocio? Contacte con nosotros!

Subscribirse

Reciba correos electrónicos sobre nuevas actualizaciones de Winstar

Contacte con nosotros

Precio/Ficha técnica/Consulta general

Soporte técnico

Contacte con nosotros para cualquier información técnica

go top
Contacto
close