Protocolos

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

Modificación de variables internas

Descripción

⚠️ Variables extendidas (Firmware ≥ 15.7)
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.

ABCDEFGHIJKLMNOPQRSTUVWXYZ
012345678910111213141516171819202122232425

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ódigoColor
0Sin color
1Rojo
2Verde
3Ámbar
4Azul
5Magenta
6Cyan
7Blanco
8Color del texto precedente
9Sin cambio de color

Existen tres posibles fuentes de color para una variable:

  1. Color definido por umbrales
  2. Color intrínseco de la variable
  3. 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

VariableColorValor
A0x00000x0001
B0x00020x0003
C0x00040x0005
D0x00060x0007
Z0x00320x0033

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

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

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

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

VariableColorValor
A0x01000x0101
B0x01020x0103
C0x01040x0105
D0x01060x0107
Z0x01320x0133

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

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

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

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

VariableColorValorDecimales
A0x02000x02010x0202
B0x02030x02040x0205
C0x02060x02070x0208
D0x02090x020A0x020B
Z0x024B0x024C0x024D

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

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

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

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

VariableColorValorDecimales
A0x03000x03010x0302
B0x03030x03040x0305
C0x03060x03070x0308
D0x03090x030A0x030B
Z0x034B0x034C0x034D

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

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

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

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

VariableColorWord bajoWord alto
A0x04000x04010x0402
B0x04030x04040x0405
C0x04060x04070x0408
D0x04090x040A0x040B
Z0x044B0x044C0x044D

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

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

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

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

VariableColorWord bajoWord alto
A0x05000x05010x0502
B0x05030x05040x0505
C0x05060x05070x0508
D0x05090x050A0x050B
Z0x054B0x054C0x054D

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

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

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

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

VariableColorWord bajoWord altoDecimales
A0x06000x06010x06020x0603
B0x06040x06050x06060x0607
C0x06080x06090x060A0x060B
D0x060C0x060D0x060E0x060F
Z0x06640x06650x06660x0667

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

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

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

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

VariableColorWord bajoWord altoDecimales
A0x07000x07010x07020x0703
B0x07040x07050x07060x0707
C0x07080x07090x070A0x070B
D0x070C0x070D0x070E0x070F
Z0x07640x07650x07660x0767

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

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

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

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

VariableColorWord bajoWord alto
A0x08000x08010x0802
B0x08030x08040x0805
C0x08060x08070x0808
D0x08090x080A0x080B
Z0x084B0x084C0x084D

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

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

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

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

VariableColorWord 1Word 2Word 3Word 4
A0x09000x09010x09020x09030x0904
B0x09050x09060x09070x09080x0909
C0x090A0x090B0x090C0x090D0x090E
D0x090F0x09100x09110x09120x0913
Z0x097D0x097E0x097F0x09800x0981

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

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

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

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

VariableColorTexto (14 registros)
A0x0A000x0A01 – 0x0A0E
B0x0A0F0x0A10 – 0x0A1D
C0x0A1E0x0A1F – 0x0A2C
D0x0A2D0x0A2E – 0x0A3B
Z0x0B770x0B78 – 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

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

Asignar el texto “HELLO” a la variable B (sin cambio de color)
FUNC 0x10 Función
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
Pasa el ratón sobre un bloque para ver su significado.

Resumen direcciones según formato

FormatoDirección inicialDirección final
UINT160x00000x00FF
INT160x01000x01FF
UINT16+P0x02000x02FF
INT16+P0x03000x03FF
UINT320x04000x04FF
INT320x05000x05FF
UINT32+P0x06000x06FF
INT32+P0x07000x07FF
FLOAT320x08000x08FF
FLOAT640x09000x09FF
STRING0x0A000x0AFF

Resumen número registros según formato

FormatoNº de registrosEstructura
UINT162Color + Valor
INT162Color + Valor
UINT16+P3Color + Valor + Decimales
INT16+P3Color + Valor + Decimales
UINT323Color + Word bajo + Word alto
INT323Color + Word bajo + Word alto
UINT32+P4Color + Word bajo + Word alto + Decimales
INT32+P4Color + Word bajo + Word alto + Decimales
FLOAT323Color + Word bajo + Word alto
FLOAT645Color + 4 registros de valor
STRING15Color + 14 registros de texto

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

FormatoABCDZ
UINT160x00000x00020x00040x00060x0032
INT160x01000x01020x01040x01060x0132
UINT16+P0x02000x02030x02060x02090x024B
INT16+P0x03000x03030x03060x03090x034B
UINT320x04000x04030x04060x04090x044B
INT320x05000x05030x05060x05090x054B
UINT32+P0x06000x06040x06080x060C0x0664
INT32+P0x07000x07040x07080x070C0x0764
FLOAT320x08000x08030x08060x08090x084B
FLOAT640x09000x09050x090A0x090F0x097D
STRING0x0A000x0A0F0x0A1E0x0A2D0x0B77

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.