Descripción
Este artículo describe la modificación de variables extendidas mediante Modbus, disponible a partir de la versión de firmware 15.7 de las pantallas LED.
Si su equipo dispone de una versión de firmware anterior, debe consultar el apartado Modbus Legacy, donde se describe el funcionamiento del protocolo en versiones anteriores.
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 nuevamente el programa completo, lo que agiliza la comunicación y aporta mayor dinamismo a los programas.
Las variables pueden representar distintos tipos de información, entre ellos:
- Valores numéricos (enteros, con o sin signo y con posición decimal)
- Valores en coma flotante
- Valores alfanuméricos (texto)
- Gráficos de estados
- Barras de progreso
- Porcentajes
Identificación de las variables
Las 26 variables internas se identifican mediante las letras A a Z.
Para facilitar el cálculo de direcciones dentro del mapa Modbus, cada variable se asocia también a un índice numérico.
| A | B | C | D | E | F | G | H | I | J | K | L | M | N | O | P | Q | R | S | T | U | V | W | X | Y | Z |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 |
Espacio de registros
El espacio de registros reservado para la modificación directa de variables corresponde al rango:
0x0000 – 0x0FFF
Este rango permite asignar directamente el valor de una variable mediante escritura en los registros Modbus correspondientes.
Dentro de este espacio de direcciones, una misma variable puede modificarse utilizando distintos formatos de datos. Cada formato dispone de su propio bloque de registros dentro de este rango.
Formatos soportados
Las variables pueden transmitirse utilizando los siguientes formatos de datos:
- UINT16
- INT16
- UINT16 + posición del punto decimal (en adelante UINT16+P)
- INT16 + posición del punto decimal (en adelante INT16+P)
- UINT32
- INT32
- UINT32 + posición del punto decimal (en adelante UINT32+P)
- INT32 + posición del punto decimal (en adelante INT32+P)
- FLOAT32
- FLOAT64
- STRING
Cada uno de estos formatos utiliza un bloque específico de direcciones dentro del rango 0x0000 – 0x0FFF, así como un número determinado de registros Modbus por variable.
Todos los formatos comparten una estructura general de registros, donde el primer registro corresponde siempre al color de la variable.
Estructura general de los registros
En todos los formatos de transmisión, el primer registro asociado a cada variable corresponde al color intrínseco de la variable.
Los registros siguientes contienen el valor de la variable o parámetros adicionales según el formato utilizado.
Códigos de color
El registro de color permite definir el color propio de la variable.
| Código | Color |
|---|---|
| 0 | Sin color |
| 1 | Rojo |
| 2 | Verde |
| 3 | Ámbar |
| 4 | Azul |
| 5 | Magenta |
| 6 | Cyan |
| 7 | Blanco |
| 8 | Color del texto precedente |
| 9 | Sin cambio de color |
Existen tres posibles fuentes de color para una variable:
- Color definido por umbrales
- Color intrínseco de la variable
- Color del texto precedente
La prioridad de aplicación es la indicada en el orden anterior. En el apartado FAQs encontrará una explicación más detallada.
Descripción y mapas de registros según formatos
A continuación se describe cada uno de los formatos soportados, junto con su estructura de registros y el mapa de direcciones de las variables.
UINT16
Este formato permite transmitir valores enteros sin signo de 16 bits.
Cada variable utiliza 2 registros Modbus consecutivos:
- Registro 1 → Color de la variable
- Registro 2 → Valor numérico
El valor se transmite en formato UINT16, con un rango válido de 0 a 65535.
Mapa de registros
| Variable | Color | Valor |
|---|---|---|
| A | 0x0000 | 0x0001 |
| B | 0x0002 | 0x0003 |
| C | 0x0004 | 0x0005 |
| D | 0x0006 | 0x0007 |
| … | … | … |
| Z | 0x0032 | 0x0033 |
Todos los valores se expresan en hexadecimal.
Cálculo de direcciones
La dirección base (registro Color) de una variable puede calcularse mediante la siguiente expresión:
Dirección base = 0000h + (Índice de variable × 2)
Donde:
- 0000h corresponde a la dirección inicial del formato UINT16
- Índice de variable corresponde al valor mostrado en la tabla de identificación de variables
- 2 corresponde al número de registros utilizados por cada variable en este formato
A partir de la dirección base:
- +0 → Color
- +1 → Valor
También puede utilizar la calculadora de direcciones incluida más adelante.
Ejemplos
Write Multiple Registers (0x10) ADDR 0x00 0x00 Dirección inicial
0x0000 (Registro Color de la variable A) REGS 0x00 0x02 Nº registros
0x0002 (Color + Valor) LEN 0x04 Nº bytes
0x04 (4 bytes de datos) DATA 0x00 0x04 0x28 0xF9 Datos
Registro Color → 0x0004 (color azul)
Registro Valor → 0x28F9 (10489)
–
Write Multiple Registers (0x10) ADDR 0x00 0x02 Dirección inicial
0x0002 (Registro Color de la variable B) REGS 0x00 0x02 Nº registros
0x0002 (Color + Valor) LEN 0x04 Nº bytes
0x04 (4 bytes de datos) DATA 0x00 0x09 0x13 0x88 Datos
Registro Color → 0x0009 (sin cambio de color)
Registro Valor → 0x1388 (5000)
INT16
Este formato permite transmitir valores enteros con signo de 16 bits.
Cada variable utiliza 2 registros Modbus consecutivos:
- Registro 1 → Color de la variable
- Registro 2 → Valor numérico
El valor se transmite en formato INT16, utilizando representación en complemento a dos para los números negativos. El rango válido es de −32768 a 32767.
Mapa de registros
| Variable | Color | Valor |
|---|---|---|
| A | 0x0100 | 0x0101 |
| B | 0x0102 | 0x0103 |
| C | 0x0104 | 0x0105 |
| D | 0x0106 | 0x0107 |
| … | … | … |
| Z | 0x0132 | 0x0133 |
Todos los valores se expresan en hexadecimal.
Cálculo de direcciones
La dirección base (registro Color) de una variable puede calcularse mediante la siguiente expresión:
Dirección base = 0100h + (Índice de variable × 2)
Donde:
- 0100h corresponde a la dirección inicial del formato INT16
- Índice de variable corresponde al valor mostrado en la tabla de identificación de variables
- 2 corresponde al número de registros utilizados por cada variable en este formato
A partir de la dirección base:
- +0 → Color
- +1 → Valor
También puede utilizar la calculadora de direcciones incluida más adelante.
Ejemplos
Write Multiple Registers (0x10) ADDR 0x01 0x00 Dirección inicial
0x0100 (Registro Color de la variable A) REGS 0x00 0x02 Nº registros
0x0002 (Color + Valor) LEN 0x04 Nº bytes
0x04 (4 bytes de datos) DATA 0x00 0x04 0x28 0xF9 Datos
Registro Color → 0x0004 (azul)
Registro Valor → 0x28F9 (10489)
–
Write Multiple Registers (0x10) ADDR 0x01 0x00 Dirección inicial
0x0100 (Registro Color de la variable A) REGS 0x00 0x02 Nº registros
0x0002 (Color + Valor) LEN 0x04 Nº bytes
0x04 (4 bytes de datos) DATA 0x00 0x09 0xD7 0x07 Datos
Registro Color → 0x0009 (sin cambio de color)
Registro Valor → 0xD707 (-10489 en complemento a dos)
UINT16+P
Este formato permite transmitir valores enteros sin signo de 16 bits con posición decimal.
Cada variable utiliza 3 registros Modbus consecutivos:
- Registro 1 → Color de la variable
- Registro 2 → Valor numérico (parte entera antes de aplicar el decimal)
- Registro 3 → Número de dígitos situados tras la coma decimal
El valor mostrado se obtiene aplicando la siguiente expresión:
Valor mostrado = Valor transmitido / 10^decimales
Mapa de registros
| Variable | Color | Valor | Decimales |
|---|---|---|---|
| A | 0x0200 | 0x0201 | 0x0202 |
| B | 0x0203 | 0x0204 | 0x0205 |
| C | 0x0206 | 0x0207 | 0x0208 |
| D | 0x0209 | 0x020A | 0x020B |
| … | … | … | … |
| Z | 0x024B | 0x024C | 0x024D |
Todos los valores se expresan en hexadecimal.
Cálculo de direcciones
La dirección base (registro Color) de una variable puede calcularse mediante la siguiente expresión:
Dirección base = 0200h + (Índice de variable × 3)
Donde:
- 0200h corresponde a la dirección inicial del formato UINT16+P
- Índice de variable corresponde al valor mostrado en la tabla de identificación de variables
- 3 corresponde al número de registros utilizados por cada variable en este formato
A partir de la dirección base:
- +0 → Color
- +1 → Valor
- +2 → Posición decimal
También puede utilizar la calculadora de direcciones incluida más adelante.
Ejemplos
Write Multiple Registers (0x10) ADDR 0x02 0x00 Dirección inicial
0x0200 (Registro Color de la variable A) REGS 0x00 0x03 Nº registros
0x0003 (Color + Valor + Decimales) LEN 0x06 Nº bytes
0x06 (6 bytes de datos) DATA 0x00 0x02 0x87 0xE5 0x00 0x04 Datos
Registro Color → 0x0002 (verde)
Registro Valor → 0x87E5 (34789)
Registro Decimales → 0x0004
Valor mostrado = 34789 / 10^4 = 3.4789
–
Write Multiple Registers (0x10) ADDR 0x02 0x03 Dirección inicial
0x0203 (Registro Color de la variable B) REGS 0x00 0x03 Nº registros
0x0003 (Color + Valor + Decimales) LEN 0x06 Nº bytes
0x06 (6 bytes de datos) DATA 0x00 0x09 0x00 0x7D 0x00 0x01 Datos
Registro Color → 0x0009 (sin cambio de color)
Registro Valor → 0x007D (125)
Registro Decimales → 0x0001
Valor mostrado = 125 / 10^1 = 12.5
INT16+P
Este formato permite transmitir valores enteros con signo de 16 bits con posición decimal.
Cada variable utiliza 3 registros Modbus consecutivos:
- Registro 1 → Color de la variable
- Registro 2 → Valor numérico (parte entera antes de aplicar el decimal)
- Registro 3 → Número de dígitos situados tras la coma decimal
El valor se transmite en formato INT16, utilizando representación en complemento a dos para los números negativos.
El valor mostrado se obtiene aplicando la siguiente expresión:
Valor mostrado = Valor transmitido / 10^decimales
Mapa de registros
| Variable | Color | Valor | Decimales |
|---|---|---|---|
| A | 0x0300 | 0x0301 | 0x0302 |
| B | 0x0303 | 0x0304 | 0x0305 |
| C | 0x0306 | 0x0307 | 0x0308 |
| D | 0x0309 | 0x030A | 0x030B |
| … | … | … | … |
| Z | 0x034B | 0x034C | 0x034D |
Todos los valores se expresan en hexadecimal.
Cálculo de direcciones
La dirección base (registro Color) de una variable puede calcularse mediante la siguiente expresión:
Dirección base = 0300h + (Índice de variable × 3)
Donde:
- 0300h corresponde a la dirección inicial del formato INT16+P
- Índice de variable corresponde al valor mostrado en la tabla de identificación de variables
- 3 corresponde al número de registros utilizados por cada variable en este formato
A partir de la dirección base:
- +0 → Color
- +1 → Valor
- +2 → Posición decimal
También puede utilizar la calculadora de direcciones incluida más adelante.
Ejemplos
Write Multiple Registers (0x10) ADDR 0x03 0x00 Dirección inicial
0x0300 (Registro Color de la variable A) REGS 0x00 0x03 Nº registros
0x0003 (Color + Valor + Decimales) LEN 0x06 Nº bytes
0x06 (6 bytes de datos) DATA 0x00 0x06 0xD7 0x07 0x00 0x02 Datos
Registro Color → 0x0006 (cyan)
Registro Valor → 0xD707 (-10489)
Registro Decimales → 0x0002
Valor mostrado = -10489 / 10^2 = -104.89
–
Write Multiple Registers (0x10) ADDR 0x03 0x03 Dirección inicial
0x0303 (Registro Color de la variable B) REGS 0x00 0x03 Nº registros
0x0003 (Color + Valor + Decimales) LEN 0x06 Nº bytes
0x06 (6 bytes de datos) DATA 0x00 0x09 0x01 0x27 0x00 0x02 Datos
Registro Color → 0x0009 (sin cambio de color)
Registro Valor → 0x0127 (295)
Registro Decimales → 0x0002
Valor mostrado = 295 / 10^2 = 2.95
UINT32
Este formato permite transmitir valores enteros sin signo de 32 bits.
Cada variable utiliza 3 registros Modbus consecutivos:
- Registro 1 → Color de la variable
- Registro 2 → Word bajo (16 bits menos significativos)
- Registro 3 → Word alto (16 bits más significativos)
El valor se transmite en formato UINT32, dividido en dos registros de 16 bits. El rango válido es de 0 a 4 294 967 295.
Mapa de registros
| Variable | Color | Word bajo | Word alto |
|---|---|---|---|
| A | 0x0400 | 0x0401 | 0x0402 |
| B | 0x0403 | 0x0404 | 0x0405 |
| C | 0x0406 | 0x0407 | 0x0408 |
| D | 0x0409 | 0x040A | 0x040B |
| … | … | … | … |
| Z | 0x044B | 0x044C | 0x044D |
Todos los valores se expresan en hexadecimal.
Cálculo de direcciones
La dirección base (registro Color) de una variable puede calcularse mediante la siguiente expresión:
Dirección base = 0400h + (Índice de variable × 3)
Donde:
- 0400h corresponde a la dirección inicial del formato UINT32
- Índice de variable corresponde al valor mostrado en la tabla de identificación de variables
- 3 corresponde al número de registros utilizados por cada variable en este formato
A partir de la dirección base:
- +0 → Color
- +1 → Valor (Word bajo)
- +2 → Valor (Word alto)
También puede utilizar la calculadora de direcciones incluida más adelante.
Ejemplos
Write Multiple Registers (0x10) ADDR 0x04 0x00 Dirección inicial
0x0400 (Registro Color de la variable A) REGS 0x00 0x03 Nº registros
0x0003 (Color + Word bajo + Word alto) LEN 0x06 Nº bytes
0x06 (6 bytes de datos) DATA 0x00 0x04 0x86 0xA0 0x00 0x01 Datos
Registro Color → 0x0004 (azul)
Word bajo → 0x86A0
Word alto → 0x0001
Valor = 0x0001 86A0 = 100000
–
Write Multiple Registers (0x10) ADDR 0x04 0x03 Dirección inicial
0x0403 (Registro Color de la variable B) REGS 0x00 0x03 Nº registros
0x0003 (Color + Word bajo + Word alto) LEN 0x06 Nº bytes
0x06 (6 bytes de datos) DATA 0x00 0x09 0x05 0xB8 0x00 0x01 Datos
Registro Color → 0x0009 (sin cambio de color)
Word bajo → 0x05B8
Word alto → 0x0001
Valor = 0x0001 05B8 = 67000
INT32
Este formato permite transmitir valores enteros con signo de 32 bits.
Cada variable utiliza 3 registros Modbus consecutivos:
- Registro 1 → Color de la variable
- Registro 2 → Word bajo (16 bits menos significativos)
- Registro 3 → Word alto (16 bits más significativos)
El valor se transmite en formato INT32, utilizando representación en complemento a dos de 32 bits. El rango válido es de −2 147 483 648 a 2 147 483 647.
Mapa de registros
| Variable | Color | Word bajo | Word alto |
|---|---|---|---|
| A | 0x0500 | 0x0501 | 0x0502 |
| B | 0x0503 | 0x0504 | 0x0505 |
| C | 0x0506 | 0x0507 | 0x0508 |
| D | 0x0509 | 0x050A | 0x050B |
| … | … | … | … |
| Z | 0x054B | 0x054C | 0x054D |
Todos los valores se expresan en hexadecimal.
Cálculo de direcciones
La dirección base (registro Color) de una variable puede calcularse mediante la siguiente expresión:
Dirección base = 0500h + (Índice de variable × 3)
Donde:
- 0500h corresponde a la dirección inicial del formato INT32
- Índice de variable corresponde al valor mostrado en la tabla de identificación de variables
- 3 corresponde al número de registros utilizados por cada variable en este formato
A partir de la dirección base:
- +0 → Color
- +1 → Valor (Word bajo)
- +2 → Valor (Word alto)
También puede utilizar la calculadora de direcciones incluida más adelante.
Ejemplos
Write Multiple Registers (0x10) ADDR 0x05 0x00 Dirección inicial
0x0500 (Registro Color de la variable A) REGS 0x00 0x03 Nº registros
0x0003 (Color + Word bajo + Word alto) LEN 0x06 Nº bytes
0x06 (6 bytes de datos) DATA 0x00 0x01 0x1D 0xC0 0xFF 0xFE Datos
Registro Color → 0x0001 (rojo)
Word bajo → 0x1DC0
Word alto → 0xFFFE
Valor = 0xFFFE1DC0 = -123456
–
Write Multiple Registers (0x10) ADDR 0x05 0x03 Dirección inicial
0x0503 (Registro Color de la variable B) REGS 0x00 0x03 Nº registros
0x0003 (Color + Word bajo + Word alto) LEN 0x06 Nº bytes
0x06 (6 bytes de datos) DATA 0x00 0x09 0xD0 0x90 0x00 0x03 Datos
Registro Color → 0x0009 (sin cambio de color)
Word bajo → 0xD090
Word alto → 0x0003
Valor = 0x0003D090 = 250000
UINT32+P
Este formato permite transmitir valores enteros sin signo de 32 bits con posición decimal.
Cada variable utiliza 4 registros Modbus consecutivos:
- Registro 1 → Color de la variable
- Registro 2 → Word bajo (16 bits menos significativos)
- Registro 3 → Word alto (16 bits más significativos)
- Registro 4 → Número de dígitos situados tras la coma decimal
El valor mostrado se obtiene aplicando la siguiente expresión:
Valor mostrado = Valor transmitido / 10^decimales
Mapa de registros
| Variable | Color | Word bajo | Word alto | Decimales |
|---|---|---|---|---|
| A | 0x0600 | 0x0601 | 0x0602 | 0x0603 |
| B | 0x0604 | 0x0605 | 0x0606 | 0x0607 |
| C | 0x0608 | 0x0609 | 0x060A | 0x060B |
| D | 0x060C | 0x060D | 0x060E | 0x060F |
| … | … | … | … | … |
| Z | 0x0664 | 0x0665 | 0x0666 | 0x0667 |
Todos los valores se expresan en hexadecimal.
Cálculo de direcciones
La dirección base (registro Color) de una variable puede calcularse mediante la siguiente expresión:
Dirección base = 0600h + (Índice de variable × 4)
Donde:
- 0600h corresponde a la dirección inicial del formato UINT32+P
- Índice de variable corresponde al valor mostrado en la tabla de identificación de variables
- 4 corresponde al número de registros utilizados por cada variable en este formato
A partir de la dirección base:
- +0 → Color
- +1 → Valor (Word bajo)
- +2 → Valor (Word alto)
- +3 → Posición decimal
También puede utilizar la calculadora de direcciones incluida más adelante.
Ejemplos
Write Multiple Registers (0x10) ADDR 0x06 0x00 Dirección inicial
0x0600 (Registro Color de la variable A) REGS 0x00 0x04 Nº registros
0x0004 (Color + Word bajo + Word alto + Decimales) LEN 0x08 Nº bytes
0x08 (8 bytes de datos) DATA 0x00 0x02 0xCD 0x15 0x07 0x5B 0x00 0x02 Datos
Registro Color → 0x0002 (verde)
Word bajo → 0xCD15
Word alto → 0x075B
Registro Decimales → 0x0002
Valor entero transmitido = 123456789 (0x075BCD15)
Valor mostrado = 123456789 / 10^2 = 1234567.89
–
Write Multiple Registers (0x10) ADDR 0x06 0x04 Dirección inicial
0x0604 (Registro Color de la variable B) REGS 0x00 0x04 Nº registros
0x0004 (Color + Word bajo + Word alto + Decimales) LEN 0x08 Nº bytes
0x08 (8 bytes de datos) DATA 0x00 0x09 0x05 0xB8 0x00 0x01 0x00 0x00 Datos
Registro Color → 0x0009 (sin cambio de color)
Word bajo → 0x05B8
Word alto → 0x0001
Registro Decimales → 0x0000
Valor = 0x000105B8 = 67000
Valor mostrado = 67000 / 10^0 = 67000
INT32+P
Este formato permite transmitir valores enteros con signo de 32 bits con posición decimal.
Cada variable utiliza 4 registros Modbus consecutivos:
- Registro 1 → Color de la variable
- Registro 2 → Word bajo (16 bits menos significativos)
- Registro 3 → Word alto (16 bits más significativos)
- Registro 4 → Número de dígitos situados tras la coma decimal
El valor se transmite en formato INT32, utilizando representación en complemento a dos de 32 bits.
El valor mostrado se obtiene aplicando la siguiente expresión:
Valor mostrado = Valor transmitido / 10^decimales
Mapa de registros
| Variable | Color | Word bajo | Word alto | Decimales |
|---|---|---|---|---|
| A | 0x0700 | 0x0701 | 0x0702 | 0x0703 |
| B | 0x0704 | 0x0705 | 0x0706 | 0x0707 |
| C | 0x0708 | 0x0709 | 0x070A | 0x070B |
| D | 0x070C | 0x070D | 0x070E | 0x070F |
| … | … | … | … | … |
| Z | 0x0764 | 0x0765 | 0x0766 | 0x0767 |
Todos los valores se expresan en hexadecimal.
Cálculo de direcciones
La dirección base (registro Color) de una variable puede calcularse mediante la siguiente expresión:
Dirección base = 0700h + (Índice de variable × 4)
Donde:
- 0700h corresponde a la dirección inicial del formato INT32+P
- Índice de variable corresponde al valor mostrado en la tabla de identificación de variables
- 4 corresponde al número de registros utilizados por cada variable en este formato
A partir de la dirección base:
- +0 → Color
- +1 → Valor (Word bajo)
- +2 → Valor (Word alto)
- +3 → Posición decimal
También puede utilizar la calculadora de direcciones incluida más adelante.
Ejemplos
Write Multiple Registers (0x10) ADDR 0x07 0x00 Dirección inicial
0x0700 (Registro Color de la variable A) REGS 0x00 0x04 Nº registros
0x0004 (Color + Word bajo + Word alto + Decimales) LEN 0x08 Nº bytes
0x08 (8 bytes de datos) DATA 0x00 0x05 0x9E 0xB1 0xFF 0x43 0x00 0x04 Datos
Registro Color → 0x0005 (magenta)
Word bajo → 0x9EB1
Word alto → 0xFF43
Registro Decimales → 0x0004
Valor entero transmitido = -12345679
Valor mostrado = -12345679 / 10^4 = -1234.5679
–
Write Multiple Registers (0x10) ADDR 0x07 0x04 Dirección inicial
0x0704 (Registro Color de la variable B) REGS 0x00 0x04 Nº registros
0x0004 (Color + Word bajo + Word alto + Decimales) LEN 0x08 Nº bytes
0x08 (8 bytes de datos) DATA 0x00 0x09 0xD0 0xC2 0x00 0x03 0x00 0x02 Datos
Registro Color → 0x0009 (sin cambio de color)
Word bajo → 0xD0C2
Word alto → 0x0003
Registro Decimales → 0x0002
Valor entero transmitido = 250050
Valor mostrado = 250050 / 10^2 = 2500.50
FLOAT32
Este formato permite transmitir valores numéricos en coma flotante de 32 bits.
Cada variable utiliza 3 registros Modbus consecutivos:
- Registro 1 → Color de la variable
- Registro 2 → Word bajo (16 bits menos significativos)
- Registro 3 → Word alto (16 bits más significativos)
El valor se transmite utilizando el estándar IEEE-754 de 32 bits (FLOAT32).
Mapa de registros
| Variable | Color | Word bajo | Word alto |
|---|---|---|---|
| A | 0x0800 | 0x0801 | 0x0802 |
| B | 0x0803 | 0x0804 | 0x0805 |
| C | 0x0806 | 0x0807 | 0x0808 |
| D | 0x0809 | 0x080A | 0x080B |
| … | … | … | … |
| Z | 0x084B | 0x084C | 0x084D |
Todos los valores se expresan en hexadecimal.
Cálculo de direcciones
La dirección base (registro Color) de una variable puede calcularse mediante la siguiente expresión:
Dirección base = 0800h + (Índice de variable × 3)
Donde:
- 0800h corresponde a la dirección inicial del formato FLOAT32
- Índice de variable corresponde al valor mostrado en la tabla de identificación de variables
- 3 corresponde al número de registros utilizados por cada variable en este formato
A partir de la dirección base:
- +0 → Color
- +1 → Valor (Word bajo)
- +2 → Valor (Word alto)
También puede utilizar la calculadora de direcciones incluida más adelante.
Ejemplos
Write Multiple Registers (0x10) ADDR 0x08 0x00 Dirección inicial
0x0800 (Registro Color de la variable A) REGS 0x00 0x03 Nº registros
0x0003 (Color + Word bajo + Word alto) LEN 0x06 Nº bytes
0x06 (6 bytes de datos) DATA 0x00 0x02 0x0F 0xD0 0x40 0x49 Datos
Registro Color → 0x0002 (verde)
Word bajo → 0x0FD0
Word alto → 0x4049
FLOAT32 (IEEE-754) = 0x40490FD0 → 3.14159
–
Write Multiple Registers (0x10) ADDR 0x08 0x03 Dirección inicial
0x0803 (Registro Color de la variable B) REGS 0x00 0x03 Nº registros
0x0003 (Color + Word bajo + Word alto) LEN 0x06 Nº bytes
0x06 (6 bytes de datos) DATA 0x00 0x09 0x00 0x00 0xC1 0x48 Datos
Registro Color → 0x0009 (sin cambio de color)
Word bajo → 0x0000
Word alto → 0xC148
FLOAT32 (IEEE-754) = 0xC1480000 → -12.5
FLOAT64
Este formato permite transmitir valores numéricos en coma flotante de 64 bits.
Cada variable utiliza 5 registros Modbus consecutivos:
- Registro 1 → Color de la variable
- Registro 2 → Word 1 (16 bits menos significativos)
- Registro 3 → Word 2
- Registro 4 → Word 3
- Registro 5 → Word 4 (16 bits más significativos)
El valor se transmite utilizando el estándar IEEE-754 de 64 bits (FLOAT64).
Mapa de registros
| Variable | Color | Word 1 | Word 2 | Word 3 | Word 4 |
|---|---|---|---|---|---|
| A | 0x0900 | 0x0901 | 0x0902 | 0x0903 | 0x0904 |
| B | 0x0905 | 0x0906 | 0x0907 | 0x0908 | 0x0909 |
| C | 0x090A | 0x090B | 0x090C | 0x090D | 0x090E |
| D | 0x090F | 0x0910 | 0x0911 | 0x0912 | 0x0913 |
| … | … | … | … | … | … |
| Z | 0x097D | 0x097E | 0x097F | 0x0980 | 0x0981 |
Todos los valores se expresan en hexadecimal.
Cálculo de direcciones
La dirección base (registro Color) de una variable puede calcularse mediante la siguiente expresión:
Dirección base = 0900h + (Índice de variable × 5)
Donde:
- 0900h corresponde a la dirección inicial del formato FLOAT64
- Índice de variable corresponde al valor mostrado en la tabla de identificación de variables
- 5 corresponde al número de registros utilizados por cada variable en este formato
A partir de la dirección base:
- +0 → Color
- +1 → Valor (Word 1)
- +2 → Valor (Word 2)
- +3 → Valor (Word 3)
- +4 → Valor (Word 4)
También puede utilizar la calculadora de direcciones incluida más adelante.
Ejemplos
Write Multiple Registers (0x10) ADDR 0x09 0x00 Dirección inicial
0x0900 (Registro Color de la variable A) REGS 0x00 0x05 Nº registros
0x0005 (Color + 4 registros de valor FLOAT64) LEN 0x0A Nº bytes
0x0A (10 bytes de datos) DATA 0x00 0x06 0xBE 0x77 0x1A 0x9F 0xDD 0x2F 0x40 0x5E Datos
Registro Color → 0x0006 (cyan)
Word 1 (LSW) → 0xBE77
Word 2 → 0x1A9F
Word 3 → 0xDD2F
Word 4 (MSW) → 0x405E
FLOAT64 (IEEE-754) = 0x405EDD2F1A9FBE77 → 123.456
–
Write Multiple Registers (0x10) ADDR 0x09 0x05 Dirección inicial
0x0905 (Registro Color de la variable B) REGS 0x00 0x05 Nº registros
0x0005 (Color + 4 registros de valor FLOAT64) LEN 0x0A Nº bytes
0x0A (10 bytes de datos) DATA 0x00 0x09 0x00 0x00 0x00 0x00 0x00 0x00 0xBF 0xE8 Datos
Registro Color → 0x0009 (sin cambio de color)
Word 1 (LSW) → 0x0000
Word 2 → 0x0000
Word 3 → 0x0000
Word 4 (MSW) → 0xBFE8
FLOAT64 (IEEE-754) = 0xBFE8000000000000 → -0.75
STRING
Este formato permite transmitir valores alfanuméricos (texto).
Cada variable utiliza 15 registros Modbus consecutivos:
- Registro 1 → Color de la variable
- Registros 2 a 15 → Texto codificado en ASCII
Cada registro de texto almacena dos caracteres ASCII, donde:
- Byte alto → primer carácter ASCII
- Byte bajo → segundo carácter ASCII
De este modo, cada variable puede almacenar hasta 28 caracteres de texto.
Mapa de registros
| Variable | Color | Texto (14 registros) |
|---|---|---|
| A | 0x0A00 | 0x0A01 – 0x0A0E |
| B | 0x0A0F | 0x0A10 – 0x0A1D |
| C | 0x0A1E | 0x0A1F – 0x0A2C |
| D | 0x0A2D | 0x0A2E – 0x0A3B |
| … | … | … |
| Z | 0x0B77 | 0x0B78 – 0x0B85 |
Todos los valores se expresan en hexadecimal.
Cálculo de direcciones
La dirección base (registro Color) de una variable puede calcularse mediante la siguiente expresión:
Dirección base = 0A00h + (Índice de variable × 15)
Donde:
- 0A00h corresponde a la dirección inicial del formato STRING
- Índice de variable corresponde al valor mostrado en la tabla de identificación de variables
- 15 corresponde al número de registros utilizados por cada variable en este formato
A partir de la dirección base:
- +0 → Color
- +1 .. 14 → Valor
También puede utilizar la calculadora de direcciones incluida más adelante.
Ejemplos
Write Multiple Registers (0x10) ADDR 0x0A 0x00 Dirección inicial
0x0A00 (Registro Color de la variable A) REGS 0x00 0x04 Nº registros
0x000F (Color + 4 registros de texto) LEN 0x08 Nº bytes
0x08 (8 bytes de datos) DATA 0x000x07 0x410x42 0x2D0x31 0x320x2D 0x590x5A Datos
Registro Color → 0x0007 (blanco)
Texto → ASCII (2 caracteres por registro, byte alto primero)
“AB-12-YZ”
–
Write Multiple Registers (0x10) ADDR 0x0A 0x0F Dirección inicial
0x0A0F (Registro Color de la variable B) REGS 0x00 0x0F Nº registros
0x000F (Color + 14 registros de texto) LEN 0x1E Nº bytes
0x1E (30 bytes de datos) DATA 0x000x09 0x480x45 0x4C0x4C 0x4F0x00 0x000x00 0x000x00 0x000x00 0x000x00 0x000x00 0x000x00 0x000x00 0x000x00 0x000x00 0x000x00 0x000x00 0x000x00 0x000x00 Datos
Registro Color → 0x0009 (sin cambio de color)
Texto → “HELLO” (ASCII) + terminador/padding 0x00
Resumen direcciones según formato
| Formato | Dirección inicial | Dirección final |
|---|---|---|
| UINT16 | 0x0000 | 0x00FF |
| INT16 | 0x0100 | 0x01FF |
| UINT16+P | 0x0200 | 0x02FF |
| INT16+P | 0x0300 | 0x03FF |
| UINT32 | 0x0400 | 0x04FF |
| INT32 | 0x0500 | 0x05FF |
| UINT32+P | 0x0600 | 0x06FF |
| INT32+P | 0x0700 | 0x07FF |
| FLOAT32 | 0x0800 | 0x08FF |
| FLOAT64 | 0x0900 | 0x09FF |
| STRING | 0x0A00 | 0x0AFF |
Resumen número registros según formato
| Formato | Nº de registros | Estructura |
|---|---|---|
| UINT16 | 2 | Color + Valor |
| INT16 | 2 | Color + Valor |
| UINT16+P | 3 | Color + Valor + Decimales |
| INT16+P | 3 | Color + Valor + Decimales |
| UINT32 | 3 | Color + Word bajo + Word alto |
| INT32 | 3 | Color + Word bajo + Word alto |
| UINT32+P | 4 | Color + Word bajo + Word alto + Decimales |
| INT32+P | 4 | Color + Word bajo + Word alto + Decimales |
| FLOAT32 | 3 | Color + Word bajo + Word alto |
| FLOAT64 | 5 | Color + 4 registros de valor |
| STRING | 15 | Color + 14 registros de texto |
- Cada submapa reserva un bloque de 256 registros Modbus (0x100 direcciones), aunque el número real de registros utilizados depende del formato de datos de cada variable.
- Esto permite organizar el mapa de memoria de forma estructurada y facilita la transmisión de múltiples variables dentro de una misma trama Modbus.
Tabla general de direcciones base según variable y formato
| Formato | A | B | C | D | … | Z |
|---|---|---|---|---|---|---|
| UINT16 | 0x0000 | 0x0002 | 0x0004 | 0x0006 | … | 0x0032 |
| INT16 | 0x0100 | 0x0102 | 0x0104 | 0x0106 | … | 0x0132 |
| UINT16+P | 0x0200 | 0x0203 | 0x0206 | 0x0209 | … | 0x024B |
| INT16+P | 0x0300 | 0x0303 | 0x0306 | 0x0309 | … | 0x034B |
| UINT32 | 0x0400 | 0x0403 | 0x0406 | 0x0409 | … | 0x044B |
| INT32 | 0x0500 | 0x0503 | 0x0506 | 0x0509 | … | 0x054B |
| UINT32+P | 0x0600 | 0x0604 | 0x0608 | 0x060C | … | 0x0664 |
| INT32+P | 0x0700 | 0x0704 | 0x0708 | 0x070C | … | 0x0764 |
| FLOAT32 | 0x0800 | 0x0803 | 0x0806 | 0x0809 | … | 0x084B |
| FLOAT64 | 0x0900 | 0x0905 | 0x090A | 0x090F | … | 0x097D |
| STRING | 0x0A00 | 0x0A0F | 0x0A1E | 0x0A2D | … | 0x0B77 |
Calculadora de direcciones base según variable y formato
FAQs
¿Es obligatorio escribir todos los registros asociados a una variable?
No. Aunque únicamente puede omitirse el registro de color. Los demás registros asociados al valor (incluidos los correspondientes a la posición del punto decimal, si aplica) deben transmitirse conjuntamente para garantizar que el valor se interprete correctamente.
¿Qué función Modbus debe utilizarse para escribir variables?
Las variables pueden escribirse mediante la función 0x10 – Write Multiple Registers.
Como no es obligatorio escribir todos los registros asociados a una variable, también puede utilizarse la función 0x06 – Write Single Register, siempre que el formato utilizado requiera un único registro (por ejemplo, UINT16 o INT16).
Para formatos que utilicen varios registros, debe utilizarse obligatoriamente la función 0x10 – Write Multiple Registers.
¿Puedo escribir varias variables en una misma trama Modbus?
Sí. Siempre que los registros sean contiguos dentro del mapa de memoria, pueden transmitirse en una única trama.
¿Pueden leerse las variables mediante Modbus?
Sí. Puede utilizar la función 0x03 – Read Holding Registers para obtener el valor de las variables.
Es posible leer el bloque completo de registros de una variable o únicamente algunos registros individuales. También pueden leerse varias variables de forma simultánea; sin embargo, las lecturas deben realizarse siempre sobre bloques contiguos de registros. No es posible, por ejemplo, leer una variable completa y solo una parte de la siguiente dentro de la misma petición.
¿Es necesario utilizar siempre el mismo formato para una variable?
No, siempre que no se alterne entre formatos numéricos y alfanuméricos. Si se envía un valor numérico utilizando a una variable declarada como alfanumérica (o viceversa), el resultado mostrado en pantalla puede ser incorrecto o impredecible.
En cualquier caso, no se recomienda alternar entre formatos de forma habitual, para evitar comportamientos no previstos durante la integración.
¿En el formato STRING, qué ocurre si el texto es más corto que el espacio disponible?
Nada. Los registros restantes pueden rellenarse con 0x0000 o simplemente no transmitirse.
Debe tenerse en cuenta que cada escritura de una variable en formato STRING sobrescribe completamente el contenido anterior. Por ejemplo, si en una transmisión se envía «ABCDEF» y en la siguiente «GH», los nuevos caracteres reemplazarán el contenido anterior de la variable.
También es importante considerar que cada registro almacena dos caracteres ASCII. Si se transmite un número impar de caracteres (por ejemplo, 5), el segundo byte del último registro debe rellenarse con 0x00.
¿Es posible escribir solo una parte de un valor de 32 o 64 bits?
No. Los formatos que utilizan varios registros para escribir un valor deben escribirse completamente dentro de una misma trama Modbus utilizando la función 0x10 – Write Multiple Registers.
¿Qué ocurre si no se escribe el registro de color?
Si el registro de color no se actualiza, la variable mantendrá el color previamente configurado o el definido en el programa.
¿Qué significa color umbral, color intrínseco y color del texto que precede?
El color de una variable puede definirse en tres niveles diferentes:
- Color definido por umbrales
Cuando se declara una variable en el software de edición Dynamic 3, es posible definir umbrales asociados a los colores rojo, ámbar y verde, de forma similar a un semáforo. Si se configuran umbrales de color, estos tienen prioridad máxima y el color de la variable no podrá modificarse manualmente mediante Modbus. - Color intrínseco de la variable
Es el color definido en el primer registro de la variable dentro del mapa Modbus. Este color puede modificarse en cualquier momento escribiendo el valor correspondiente en dicho registro. - Color del texto precedente
Las variables no tienen un color definido por defecto. Si no se han configurado umbrales ni se ha escrito el registro de color, la variable adoptará el color del texto en el que se encuentra dentro del programa.
¿Qué ocurre si se escribe una variable que no está utilizada en el programa?
La variable se actualizará correctamente en memoria, pero no se mostrará en pantalla si no está siendo utilizada en el programa activo.
¿Existe una frecuencia máxima recomendada para actualizar las variables?
No existe una limitación estricta. Sin embargo, se recomienda evitar frecuencias de actualización excesivas para no saturar la comunicación Modbus ni afectar al refresco de pantalla o a la gestión interna del contenido.
Como recomendación general, no se aconseja superar las 2 actualizaciones por segundo.
