Protocolos

⌘K
  1. Inicio
  2. Protocolos
  3. Protocolo Modbus
  4. MODBUS LEGACY EN PANTALLA...
  5. Modificación de variables internas

Modificación de variables internas

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ámetroValor
Dirección inicial0202h
Número de registros1
Tipo de datoUINT16 (16 bits)
AccesoEscritura (Write)
DescripciónFormato de las variables

Valores válidos (formato de variables)

ValorFormatoValor mínimoValor máximo
0Entero 16 bits con signo-32768+32767
1Entero 16 bits sin signo065535
2Entero 32 bits con signo-2147483647+2147483647
3Entero 32 bits sin signo04294967295
4Texto1 carácter8 caracteres

ℹ️ Por defecto el formato es entero de 16 bits con signo.

Ejemplo

Configurar formato de variables como UINT32
FUNC 0x10 Función
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
Pasa el ratón sobre un bloque para ver su significado.

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º RegistroDescripción
Registro 1Word bajo (16 bits)
Registro 2Word alto (16 bits)
Registro 3Posición del punto decimal
Registro 4Color 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º RegistroDescripción
Registro 1Caracteres 1 y 2
Registro 2Caracteres 3 y 4
Registro 3Caracteres 5 y 6
Registro 4Caracteres 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ámetroValor
Dirección inicial0204h
Número de registros4
Tipo de datoUINT16 (16 bits)
AccesoEscritura (Write)
DescripciónModificació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:

VariableRegistro 1Registro 2Registro 3Registro 4
A00204020502060207
B102080209020A020B
C2020C020D020E020F
D30210021102120213
Z2502680269026A026B

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

Asignar el valor entero 10489 y el color azul a la variable A
FUNC 0x10 Función
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)
Pasa el ratón sobre un bloque para ver su significado.

En este caso el valor enviado es 10489, y al tener la posición decimal 0, el valor mostrado en pantalla será 10489.

Asignar el valor decimal 3.4789 a la variable B
FUNC 0x10 Función
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)
Pasa el ratón sobre un bloque para ver su significado.

En este caso el valor enviado es 34789 y al tener la posición decimal 4, el valor mostrado en pantalla será 3.4789.

Asignar el valor entero -10489 (INT16 con signo) a la variable A
FUNC 0x10 Función
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)
Pasa el ratón sobre un bloque para ver su significado.

En este caso el valor -10489 se transmite en formato INT16 con signo, utilizando representación complemento a dos (0xD707).

Asignar el valor entero 100000 (UINT32) a la variable A
FUNC 0x10 Función
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)
Pasa el ratón sobre un bloque para ver su significado.

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.

Asignar el valor decimal -1234.5679 (INT32) a la variable C
FUNC 0x10 Función
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)
Pasa el ratón sobre un bloque para ver su significado.

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.

Asignar el texto “AB-12-YZ” (ASCII) a la variable B
FUNC 0x10 Función
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”
Pasa el ratón sobre un bloque para ver su significado.

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 decimalRepresentación HEX (INT16)
-1FFFF
-100FF9C

¿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.

ℹ️ Comportamiento operativo
  • 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.