Descripción
Las pantallas LED disponen de 26 variables internas que pueden utilizarse dentro de los programas para mostrar valores dinámicos.
Esto permite modificar una parte concreta del contenido mostrado sin necesidad de transmitir el programa completo nuevamente, lo que agiliza la comunicación y aporta mayor dinamismo a los programas.
Cada variable puede representar:
- Valores numéricos (enteros con o sin signo)
- Valores alfanuméricos (texto de hasta 8 caracteres)
Las variables se identifican mediante las letras de la A a la Z (sin incluir la Ñ).
Formato de las variables
Antes de modificar el valor de una variable es necesario definir su formato, indicando si se trata de un valor numérico (con o sin signo, de 16 o 32 bits) o alfanumérico.
El formato de las variables se establece mediante el registro Modbus 0202h.
Registro Modbus asociado (formato de variables)
| Parámetro | Valor |
|---|---|
| Dirección inicial | 0202h |
| Número de registros | 1 |
| Tipo de dato | UINT16 (16 bits) |
| Acceso | Escritura (Write) |
| Descripción | Formato de las variables |
Valores válidos (formato de variables)
| Valor | Formato | Valor mínimo | Valor máximo |
|---|---|---|---|
| 0 | Entero 16 bits con signo | -32768 | +32767 |
| 1 | Entero 16 bits sin signo | 0 | 65535 |
| 2 | Entero 32 bits con signo | -2147483647 | +2147483647 |
| 3 | Entero 32 bits sin signo | 0 | 4294967295 |
| 4 | Texto | 1 carácter | 8 caracteres |
ℹ️ Por defecto el formato es entero de 16 bits con signo.
Ejemplo
Write Multiple Registers (0x10) ADDR 0x02 0x02 Dirección inicial
0x0202 (0202h) REGS 0x00 0x01 Nº registros
0x0001 (1 registro) LEN 0x02 Nº bytes
0x02 (2 bytes de datos) DATA 0x00 0x03 Datos (UINT16)
00 03 → 3
Modificación de variables
Cada variable dispone de 4 registros Modbus asociados. El comportamiento de estos registros depende del formato de la variable previamente configurado en el registro 0202h.
Variables numéricas
Cuando el formato configurado es numérico, los registros asociados a cada variable tienen el siguiente significado:
| Nº Registro | Descripción |
|---|---|
| Registro 1 | Word bajo (16 bits) |
| Registro 2 | Word alto (16 bits) |
| Registro 3 | Posición del punto decimal |
| Registro 4 | Color de la variable |
- El Registro 2 solo se utiliza cuando el formato es 32 bits.
- El Registro 3 permite definir la posición del punto decimal del valor mostrado.
Variables alfanuméricas
Cuando el formato configurado es alfanumérico, los 4 registros asociados contienen los caracteres del texto a mostrar.
Cada registro almacena dos caracteres ASCII:
| Nº Registro | Descripción |
|---|---|
| Registro 1 | Caracteres 1 y 2 |
| Registro 2 | Caracteres 3 y 4 |
| Registro 3 | Caracteres 5 y 6 |
| Registro 4 | Caracteres 7 y 8 |
De este modo, cada variable puede almacenar un texto de hasta 8 caracteres.
ℹ️ Las variables alfanuméricas no permiten el cambio de color como las variables numéricas.
Registro Modbus asociado (modificación de variables)
| Parámetro | Valor |
|---|---|
| Dirección inicial | 0204h |
| Número de registros | 4 |
| Tipo de dato | UINT16 (16 bits) |
| Acceso | Escritura (Write) |
| Descripción | Modificación del valor de las variables |
Direcciones de registros de las variables
Como cada variable dispone de 4 registros Modbus consecutivos, a continuación se muestra la correspondencia entre cada variable y sus registros asociados:
| Variable | Nº | Registro 1 | Registro 2 | Registro 3 | Registro 4 |
|---|---|---|---|---|---|
| A | 0 | 0204 | 0205 | 0206 | 0207 |
| B | 1 | 0208 | 0209 | 020A | 020B |
| C | 2 | 020C | 020D | 020E | 020F |
| D | 3 | 0210 | 0211 | 0212 | 0213 |
| … | … | … | … | … | … |
| Z | 25 | 0268 | 0269 | 026A | 026B |
Todos los valores se expresan en hexadecimal.
Considerando que el número de variable corresponde a A=0 hasta Z=25, la dirección base de cada variable puede calcularse mediante la siguiente expresión:
Dirección base = 0204h + (Nº de variable × 4)
| Variable | Word bajo | Word alto | Posición punto | Color |
|---|---|---|---|---|
Ejemplos
Write Multiple Registers (0x10) ADDR 0x02 0x04 Dirección inicial
0x0204 (Registro 1 de la variable A) REGS 0x00 0x04 Nº registros
0x0004 (Registro 1, Registro 2, Registro 3, Registro 4) LEN 0x08 Nº bytes
0x08 (8 bytes de datos) DATA 0x28 0xF9 0x00 0x00 0x00 0x00 0x00 0x04 Datos
Registro 1 → 0x28F9 (10489)
Registro 2 → 0x0000
Registro 3 → 0x0000 (sin decimales)
Registro 4 → 0x0004 (color azul)
En este caso el valor enviado es 10489, y al tener la posición decimal 0, el valor mostrado en pantalla será 10489.
Write Multiple Registers (0x10) ADDR 0x02 0x08 Dirección inicial
0x0208 (Registro 1 de la variable B) REGS 0x00 0x03 Nº registros
0x0003 (Registro 1, Registro 2, Registro 3) LEN 0x06 Nº bytes
0x06 (6 bytes de datos) DATA 0x87 0xE5 0x00 0x00 0x00 0x04 Datos
Registro 1 → 0x87E5 (34789)
Registro 2 → 0x0000
Registro 3 → 0x0004 (4 decimales)
En este caso el valor enviado es 34789 y al tener la posición decimal 4, el valor mostrado en pantalla será 3.4789.
Write Multiple Registers (0x10) ADDR 0x02 0x04 Dirección inicial
0x0204 (Registro 1 de la variable A) REGS 0x00 0x03 Nº registros
0x0003 (Registro 1, Registro 2, Registro 3) LEN 0x06 Nº bytes
0x06 (6 bytes de datos) DATA 0xD7 0x07 0x00 0x00 0x00 0x00 Datos
Registro 1 → 0xD707 (-10489)
Registro 2 → 0x0000
Registro 3 → 0x0000 (sin decimales)
En este caso el valor -10489 se transmite en formato INT16 con signo, utilizando representación complemento a dos (0xD707).
Write Multiple Registers (0x10) ADDR 0x02 0x04 Dirección inicial
0x0204 (Registro 1 de la variable A) REGS 0x00 0x03 Nº registros
0x0003 (Registro 1, Registro 2, Registro 3) LEN 0x06 Nº bytes
0x06 (6 bytes de datos) DATA 0x86 0xA0 0x00 0x01 0x00 0x00 Datos
Registro 1 → 0x86A0 (Word bajo)
Registro 2 → 0x0001 (Word alto)
Registro 3 → 0x0000 (sin decimales)
En este caso el valor 100000 (0x000186A0) se transmite utilizando dos registros de datos, correspondientes al Word bajo ( Registro 1) y Word alto (Registro 2) del valor de 32 bits.
Write Multiple Registers (0x10) ADDR 0x02 0x0C Dirección inicial
0x020C (Registro 1 de la variable C) REGS 0x00 0x03 Nº registros
0x0003 (Registro 1, Registro 2, Registro 3) LEN 0x06 Nº bytes
0x06 (6 bytes de datos) DATA 0x9E 0xB1 0xFF 0x43 0x00 0x04 Datos
Registro 1 → 0x9EB1 (Word bajo)
Registro 2 → 0xFF43 (Word alto)
Registro 3 → 0x0004 (4 decimales)
En este caso el valor -1234.5679 se transmite como -12345679 (INT32). El registro Registro 3 = 4 indica que el valor debe mostrarse con 4 posiciones decimales.
Write Multiple Registers (0x10) ADDR 0x02 0x08 Dirección inicial
0x0208 (Registro 1 de la variable B) REGS 0x00 0x04 Nº registros
0x0004 (4 registros → 8 caracteres) LEN 0x08 Nº bytes
0x08 (8 bytes de datos) DATA 0x41 0x42 0x2D 0x31 0x32 0x2D 0x59 0x5A Datos (ASCII)
41 42 2D 31 32 2D 59 5A → “AB-12-YZ”
En este caso se asigna el texto “AB-12-YZ” a la variable B.
FAQs
¿Es necesario configurar el formato de las variables antes de escribir un valor?
Sí. Antes de escribir el valor de una variable es necesario definir su formato mediante el registro 0202h.
Si el formato configurado no corresponde con el tipo de datos enviados (por ejemplo, enviar texto cuando el formato es numérico), el resultado mostrado en pantalla puede ser incorrecto o impredecible.
¿Es necesario configurar el formato de las variables cada vez?
Sí, al arrancar el equipo debe configurarse el formato mediante el registro 0202h, ya que esta configuración no se almacena en memoria no volátil.
Una vez configurado tras el arranque, no es necesario reescribirlo en cada actualización de variables, siempre que no se cambie el tipo de dato que se va a enviar
¿Puedo utilizar una variable numérica y otra alfanumérica?
Si, aunque no de forma simultánea “sin intervención”.
El registro 0202h define el formato de interpretación y, cuando se cambia (por ejemplo, de numérico a texto), el dispositivo interpretará las variables según el último formato configurado.
Si necesitas alternar entre valores numéricos y alfanuméricos, deberás reescribir 0202h cada vez que cambies de formato antes de enviar los registros de la variable correspondiente.
¿Es necesario escribir los 4 registros de una variable?
Para valores numéricos es necesario escribir los tres primeros registros (Registro 1, Registro 2 y Registro 3).
En caso contrario, la variable no se actualizará correctamente.
El cuarto registro solo debe escribirse si se desea modificar el color de la variable.
Para texto, pueden escribirse de 1 a 4 registros, dependiendo de la longitud de la cadena.
Si el texto contiene menos de 8 caracteres, la cadena deberá finalizar con un carácter NULL (0x00).
¿Qué ocurre si se envía un valor de 32 bits cuando el formato está configurado como 16 bits?
El sistema únicamente interpretará el primer registro de datos (Registro 1), ignorando el resto.
¿Cómo se representan los números negativos?
Los valores numéricos con signo se transmiten utilizando la representación complemento a dos, tal como es habitual en sistemas de 16 y 32 bits.
Por ejemplo:
| Valor decimal | Representación HEX (INT16) |
|---|---|
| -1 | FFFF |
| -100 | FF9C |
¿Se pueden escribir varias variables en una sola trama Modbus?
Sí. Utilizando la función Write Multiple Registers (0x10) es posible escribir registros consecutivos, lo que permite modificar varias variables en una única operación si sus direcciones son consecutivas.
- Puede consultar la tabla de códigos de colores en el apartado «Especificación de Script de Pantallas LED».
- La longitud máxima de la variable, así como el número de decimales, también se especifica en el apartado «Especificación de Script de Pantallas LED». Es necesario que tanto la declaración de la variable como los valores y decimales que se transmiten coincidan para evitar comportamientos erróneos.
