Instrumentación y Automatización

Modbus TCP entre PLC, ProSoft y DCS: guía práctica para entender READ, WRITE y Exposed Addresses

Una guía técnica, clara y aplicada al módulo ProSoft
MVI69E-MBTCP y a la integración con un DCS Honeywell

En una integración Modbus entre un PLC, un módulo ProSoft y un DCS,
las palabras READ y WRITE pueden parecer sencillas. Sin embargo, suelen producir confusión porque su significado cambia según el equipo desde el cual se describe la
operación.

Un registro llamado Write[350] dentro del entorno PLC–ProSoft puede ser leído por el DCS. Asimismo, un dato originado en un analizador Modbus puede almacenarse en el ProSoft, utilizarse en el PLC y después exponerse nuevamente al DCS. No existe contradicción: cada nombre corresponde a una interfaz y una perspectiva diferentes.

Este artículo desarrolla el flujo completo, desde los principios básicos hasta la preparación de una lista de señales Modbus para integración con un DCS.

Idea fundamental: en Modbus, la operación READ o
WRITE la define el cliente/maestro que inicia la transacción. El
servidor/esclavo responde. Los nombres internos Read[] y
Write[] de un módulo no sustituyen esta regla.

1. Cliente/servidor y maestro/esclavo

En Modbus TCP se utilizan normalmente los términos Client y Server. En documentación tradicional también se emplean Master y Slave:

Terminología actual Terminología tradicional Función
Client Master Inicia las solicitudes READ o WRITE
Server Slave Responde a las solicitudes recibidas

La comunicación siempre la inicia el Client/Master:

  1. El cliente envía una solicitud READ o WRITE.
  2. El servidor procesa la solicitud.
  3. El servidor devuelve los datos solicitados o una confirmación.

Un servidor Modbus convencional no envía datos espontáneamente al
cliente. Si una variable cambia en el servidor, el cliente conoce el
nuevo valor cuando vuelve a consultar el registro mediante su
polling.

2. ¿Qué significa READ?

READ significa que el cliente necesita obtener un dato almacenado en
el servidor.

Ejemplo: el PLC dispone del estado cerrado de una válvula y el DCS
necesita mostrarlo al operador.

  1. El estado Valve Closed = 1 queda disponible en la base
    de datos del ProSoft.
  2. El DCS actúa como Modbus TCP Client.
  3. El ProSoft actúa como Modbus TCP Server.
  4. El DCS solicita el registro correspondiente mediante READ.
  5. El ProSoft responde con el valor.
  6. El DCS actualiza la indicación de la pantalla.
Equipo Rol Acción
DCS Client/Master Ejecuta READ
ProSoft Server/Slave Responde con el dato
Dirección de información ProSoft → DCS Estado o medición

El ProSoft no necesita ejecutar un WRITE hacia el DCS para entregar
el estado. El DCS obtiene el valor mediante polling.

3. ¿Qué significa WRITE?

WRITE significa que el cliente quiere modificar un Coil o Holding
Register del servidor.

En una arquitectura donde el DCS es el cliente y el ProSoft es el
servidor, el DCS utiliza WRITE para enviar, por ejemplo:

  • un setpoint;
  • un comando Start/Stop;
  • una orden Open/Close;
  • un reset;
  • una selección de modo;
  • un parámetro cuya modificación esté autorizada.

El DCS no debería escribir un estado físico real como
Valve Closed. Ese estado debe provenir de la realimentación
del proceso. El DCS escribe la orden; el PLC ejecuta la lógica y
devuelve por otro punto el estado o la confirmación.

Información Operación típica del DCS
Estado de válvula READ
Variable de proceso READ
Alarma del PLC READ
Setpoint hacia el PLC WRITE
Comando de apertura o cierre WRITE
Reset de alarma WRITE

👉 Solicita AQUI tu guia practica completa

4. ¿Puede un servidor escribirle a un cliente?

No mientras conserve únicamente el rol de Server/Slave. El servidor
no inicia transacciones Modbus.

Para que un ProSoft escriba en un DCS, deben cumplirse
simultáneamente estas condiciones:

  • el ProSoft debe operar como Client/Master para esa conexión;
  • el DCS debe ofrecer una interfaz Modbus Server/Slave;
  • el DCS debe exponer registros escribibles;
  • la red debe permitir la conexión entre ambos equipos.

Si el DCS está configurado únicamente como Client/Master, el ProSoft
no puede enviarle un WRITE espontáneo. En esa arquitectura, el ProSoft
publica el dato y el DCS lo lee.

5. Capacidad del MVI69E-MBTCP

El ProSoft MVI69E-MBTCP puede trabajar como:

  • Modbus TCP Client;
  • Modbus TCP Server;
  • Client y Server simultáneamente.

Esto permite que el mismo módulo responda a las lecturas del DCS y,
paralelamente, inicie lecturas o escrituras hacia analizadores,
medidores, válvulas u otros servidores Modbus TCP.

Según el manual del fabricante, el módulo admite múltiples conexiones
Client y listas de comandos. En su configuración Enhanced se pueden
definir hasta 10 conexiones Client con hasta 16 comandos por conexión.
Debe verificarse siempre el firmware, el modo de operación y la revisión
aplicable al proyecto.

El equipo posee una sola interfaz Ethernet de aplicación/diagnóstico.
Por ello tiene una dirección IP, una máscara y un gateway. Puede
comunicarse con varias IP mediante el mismo puerto, pero no constituye
varias interfaces físicas independientes.

Comunicación con varias
subredes

El módulo puede atender al DCS y comunicarse con dos dispositivos
ubicados en otras subredes si existe enrutamiento:

Comunicación Rol del ProSoft Equipo remoto Operación
DCS lee datos de proceso Server DCS Client El DCS ejecuta READ
Setpoint hacia válvula 1 Client Válvula 1 Server ProSoft ejecuta WRITE
Setpoint hacia válvula 2 Client Válvula 2 Server ProSoft ejecuta WRITE

Si las redes están físicamente aisladas y no existe un router,
firewall o switch Layer 3 que permita el tráfico, un único puerto no
puede alcanzarlas. En ese caso se necesita una arquitectura de red
adicional o más interfaces/gateways.

6. Tipos de registros Modbus

Área Modbus Notación tradicional Lectura Escritura Uso típico
Coils 0xxxx Comandos booleanos
Discrete Inputs 1xxxx No Estados digitales
Input Registers 3xxxx No Mediciones de solo lectura
Holding Registers 4xxxx Variables, Words, parámetros y setpoints

Funciones frecuentes:

Function Code Operación
FC01 Read Coils
FC02 Read Discrete Inputs
FC03 Read Holding Registers
FC04 Read Input Registers
FC05 Write Single Coil
FC06 Write Single Holding Register
FC15 Write Multiple Coils
FC16 Write Multiple Holding Registers

Un Holding Register puede ser leído y escrito. Sin embargo, las
transacciones no ocurren literalmente en el mismo instante: el servidor
las procesa en el orden en que llegan. Si dos clientes escriben el mismo
registro, normalmente prevalece la última escritura procesada. Por eso
debe existir un único propietario de escritura.

7. No confundir operación Modbus con áreas Read[] y Write[]

Esta es la distinción más importante en una integración con
ProSoft.

Perspectiva Modbus ProSoft–DCS

  • DCS READ: el DCS obtiene un valor del ProSoft.
  • DCS WRITE: el DCS modifica un registro del ProSoft.

Perspectiva PLC–ProSoft

  • Read[n]: área que el PLC lee desde el módulo, según la
    convención/configuración del proveedor.
  • Write[n]: área que el PLC escribe hacia el módulo.

Por ello, un dato ubicado en Write[350] puede ser leído
por el DCS. El término Write describe cómo llegó el dato
desde el PLC al ProSoft; no obliga al DCS a ejecutar WRITE.

Regla práctica: el DCS no necesita conocer el nombre
interno Write[350]. Necesita la IP del ProSoft, la Exposed
Address, el Function Code, el tipo de dato y la longitud.

8. Exposed Address: la dirección que ve el DCS

La Exposed Address es la dirección Modbus publicada por el Server ProSoft para que un cliente externo pueda acceder al dato.

Ejemplo:

Elemento Valor
Ubicación interna Write[350]
Exposed Address 4X2350
Operación del DCS READ
Function Code FC03

La configuración del punto en el DCS sería conceptualmente:

Parámetro Valor
Remote device ProSoft MVI69E-MBTCP
Remote IP xxx.xxx.xxx.xxx
TCP port 502
DCS role Client/Master
Operation READ
Function Code FC03
Exposed Address 4X2350
Numeric Data Type Según la señal
Length 1, 2 o más registros

El DCS no se configura para leer el texto Write[350]. Se
configura para leer el Holding Register expuesto como
4X2350 en la IP del ProSoft.

¿Quieres aprender mucho mas? 👉Solicita la guia completa aqui

9. Convención preliminar del proveedor CEMS

Para el caso analizado, el proveedor definió una separación de 2000
registros:

[ Read[n] \rightarrow 4X(n) ]

[ Write[n] \rightarrow 4X(2000+n) ]

Ejemplos:

Área interna Cálculo Exposed Address
Read[400] 400 4X0400
Write[0] 2000 + 0 4X2000
Write[350] 2000 + 350 4X2350
Write[400] 2000 + 400 4X2400

Con una numeración iniciada en cero y 2000 posiciones asignadas, el
primer bloque preliminar sería 4X0000–4X1999; el segundo comenzaría en 4X2000.

Esta separación no es una regla universal de Modbus. Es una convención de configuración del proveedor/proyecto y debe quedar confirmada en la documentación oficial.

¿Cómo lee el DCS un registro Write[350]?

Si Write[350] se expone como 4X2350, el DCS
configura una operación READ sobre 4X2350:

  1. El PLC actualiza Write[350].
  2. El ProSoft publica el contenido en 4X2350.
  3. El DCS envía FC03 READ 4X2350.
  4. El ProSoft devuelve el valor.

Si Write[350] fuera un comando destinado al PLC, la operación principal del DCS podría ser WRITE. Leer esa dirección devolvería el valor almacenado, pero no necesariamente confirmaría que el proceso ejecutó el comando. Para confirmar la acción se necesita un registro independiente de status o readback.

10. Caso completo: analizador de NOx, PLC y DCS

Considérese un analizador CEMS de NOx con rango de 0–100 ppm:

  • el analizador es Modbus Server;
  • el ProSoft es Client frente al analizador;
  • el PLC utiliza la medición en un bloque de cálculo;
  • el DCS necesita el resultado calculado;
  • el ProSoft es Server frente al DCS.

Etapa 1: analizador → ProSoft

El ProSoft ejecuta periódicamente READ sobre el registro del
analizador. Si la concentración es un float de 32 bits, puede ocupar dos
Input Registers consecutivos y utilizar FC04.

Cliente Servidor Operación Resultado
ProSoft Analizador READ, por ejemplo FC04 Concentración NOx

Etapa 2: ProSoft → PLC

El dato se transfiere por el backplane al PLC. El programa debe
verificar:

  • calidad de comunicación;
  • rango válido;
  • falla del analizador;
  • calibración o mantenimiento;
  • escalamiento;
  • byte order y word order.

Etapa 3: cálculo en el PLC

El PLC calcula, por ejemplo, un valor corregido de NOx. La medición
original y el resultado calculado deben mantenerse en variables
diferentes.

Etapa 4: PLC → ProSoft

El resultado se coloca en una ubicación destinada a datos producidos
por el PLC. Si se utiliza la convención del proveedor, podría quedar en
Write[350–351] y exponerse como
4X2350–4X2351.

Etapa 5: ProSoft → DCS

El DCS ejecuta FC03 desde la dirección inicial 4X2350,
solicita dos registros y los interpreta como
32bit_Real.

Tramo Client/Master Server/Slave Operación
Analizador → ProSoft ProSoft Analizador ProSoft READ
ProSoft ↔︎ PLC Intercambio por backplane Transferencia interna
Resultado → DCS DCS ProSoft DCS READ

El origen del dato es indiferente para el DCS. Puede provenir del
PLC, de un analizador o de otro servidor consultado por el ProSoft. Si
está correctamente almacenado y publicado mediante una Exposed Address,
el DCS puede leerlo.

11. Tipos numéricos para Honeywell

Según la lista de opciones analizada para Honeywell:

Dato Numeric Data Type Honeywell Registros
Flag individual como Coil/Status N/A Según configuración
Word de 16 bits con flags empaquetados N/A 1
Entero sin signo de 16 bits 16bit_Uint 1
Entero con signo de 16 bits 16bit_Sint 1
Entero sin signo de 32 bits 32bit_Uint 2
Entero con signo de 32 bits 32bit_Sint 2
Float IEEE 754 32bit_Real 2

Packed Boolean Word

Si 4X2350 contiene 16 estados empaquetados, Honeywell
debe leer un Holding Register completo mediante FC03 y descomponerlo en
bits.

Registro Bit Señal de ejemplo
4X2350 0 Analyzer Healthy
4X2350 1 Analyzer Fault
4X2350 2 Calibration Active
4X2350 3 Maintenance Mode
4X2350 4–15 Definidos o reservados

En este caso el tipo Honeywell es N/A, porque el Word no
se interpreta como un valor numérico de 0 a 65535, sino como flags. Se
utilizaría 16bit_Uint solamente si el Word representara
realmente un número sin signo.

Float de 32 bits

Un 32bit_Real ocupa dos registros consecutivos:

Señal Dirección inicial Direcciones ocupadas Tipo
NOx calculado 4X2350 4X2350–4X2351 32bit_Real

El siguiente dato independiente debe comenzar en 4X2352.
También debe documentarse el orden de bytes/palabras: ABCD,
BADC, CDAB o DCBA.

12. ¿Puede un mismo registro leerse y escribirse?

Sí, si es un Coil o Holding Register y el servidor lo permite. No
obstante:

  • READ y WRITE son transacciones separadas;
  • una lectura puede devolver el valor anterior o el nuevo según el
    orden de procesamiento;
  • dos escritores producen un conflicto de propiedad;
  • leer el valor escrito no equivale necesariamente a comprobar la
    acción física.

Para una válvula o un lazo de control conviene separar:

Variable Dirección
Setpoint solicitado DCS → PLC
Setpoint activo validado PLC → DCS
Variable de proceso PLC → DCS
Comando DCS → PLC
Estado/readback PLC → DCS

13. División recomendada del mapa Modbus

La división exacta depende del proyecto, pero es recomendable separar
por dirección, propiedad y tipo de dato:

Rango de ejemplo Contenido Acceso del DCS
4X0000–4X0999 Datos recibidos de analizadores/equipos READ
4X1000–4X1999 Diagnósticos o reserva READ
4X2000–4X2199 Packed status Words del PLC READ
4X2200–4X2399 Variables analógicas/resultados READ
4X2400–4X2499 Alarmas, calidad y watchdog READ
Rango acordado separado Comandos y setpoints WRITE/READ
Rango acordado separado Confirmaciones y readback READ

Este ejemplo debe ajustarse al mapa real del proveedor. Sus
principios sí son generales:

  1. Definir un único propietario de escritura por registro.
  2. Separar comandos de estados.
  3. Separar setpoint solicitado de setpoint activo.
  4. No superponer valores de 32 bits.
  5. Agrupar direcciones contiguas para optimizar el polling.
  6. Reservar espacio para crecimiento.
  7. Documentar base de direccionamiento, Function Code y Unit ID.
  8. Incluir calidad, watchdog y fallas de comunicación.

14. Direccionamiento base 0 y base 1

La misma posición lógica puede presentarse de distintas maneras:

Convención Representación posible
Notación del proyecto 4X2350
Referencia completa Posiblemente 42350
Offset base 0 Posiblemente 2350
Offset ajustado Posiblemente 2349

No deben seleccionarse estas alternativas arbitrariamente. La
documentación preliminar puede conservar exactamente la notación del
proveedor, por ejemplo 4X2350, y después confirmar qué
valor debe introducirse en el driver Honeywell.

El punto debe probarse durante FAT/SAT con valores conocidos y
cambios controlados.

15. Estructura recomendada para la spreadsheet de señales

Una lista de comunicación clara debería incluir, como mínimo:

Columna Contenido
Signal Tag Identificación del punto
Description Descripción funcional
Source Device Equipo que origina el dato
Remote IP IP del servidor Modbus
DCS Operation READ o WRITE desde la perspectiva del DCS
ProSoft Area Read[n] o Write[n], si aplica
Internal Index Índice interno
Exposed Address Dirección publicada, por ejemplo 4X2350
Function Code FC03, FC04, FC06, FC16, etc.
Numeric Data Type N/A, 16bit_Uint, 32bit_Real,
etc.
Length Cantidad de registros
Bit Number Para packed flags
Scaling/Engineering Unit Escala y unidad
Byte/Word Order Orden de representación
Poll Rate Frecuencia de consulta
Validity/Quality Criterio de validez
Remarks Notas y confirmaciones pendientes

Evitar una columna genérica llamada solamente
Read/Write. Es preferible usar nombres explícitos:

  • DCS Operation;
  • PLC–ProSoft Data Direction;
  • ProSoft Client Command;
  • Signal Direction.

16. Lista de comprobación antes de cerrar la integración

  • Confirmar IP, máscara, gateway y puerto TCP 502.
  • Confirmar Client/Server para cada enlace.
  • Confirmar Unit ID cuando corresponda.
  • Confirmar Exposed Address de cada señal.
  • Confirmar direccionamiento base 0/base 1.
  • Confirmar Function Code.
  • Confirmar tipo numérico y cantidad de registros.
  • Confirmar byte order y word order.
  • Confirmar bit mapping de Packed Words.
  • Confirmar escala, unidades y rango.
  • Confirmar polling y timeout.
  • Confirmar watchdog y calidad de datos.
  • Confirmar comportamiento ante pérdida de comunicación.
  • Confirmar un único propietario de escritura.
  • Separar comando, confirmación y estado físico.
  • Validar todas las señales durante FAT/SAT.
  • Incorporar el mapa definitivo a una revisión oficial del
    proveedor.

17. Conclusiones

Para interpretar correctamente una integración Modbus deben
mantenerse separadas tres perspectivas:

  1. Operación del DCS: READ para obtener información;
    WRITE para enviar comandos o parámetros.
  2. Rol del ProSoft: Server frente al DCS y, cuando sea
    necesario, Client frente a analizadores u otros dispositivos.
  3. Áreas internas PLC–ProSoft: Read[] y
    Write[], cuyos nombres no determinan por sí solos la
    operación del DCS.

Si una variable está almacenada en el ProSoft y posee una Exposed
Address, el DCS puede leerla independientemente de que se haya originado
en el PLC, en un analizador o en otro dispositivo. Para un dato ubicado
en Write[350] y expuesto como 4X2350, el DCS
se configura para leer el Holding Register 4X2350 mediante
FC03 desde la IP del ProSoft.

La claridad del mapa depende de documentar siempre quién
inicia la operación, qué dirección ve cada equipo, cómo se representa el
dato y quién tiene autoridad para escribirlo
.


📩 Recibe los próximos artículos en tu correo