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 internosRead[]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:
- El cliente envía una solicitud READ o WRITE.
- El servidor procesa la solicitud.
- 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.
- El estado
Valve Closed = 1queda disponible en la base
de datos del ProSoft. - El DCS actúa como Modbus TCP Client.
- El ProSoft actúa como Modbus TCP Server.
- El DCS solicita el registro correspondiente mediante READ.
- El ProSoft responde con el valor.
- 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 |
Sí | Sí | Comandos booleanos |
| Discrete Inputs | 1xxxx |
Sí | No | Estados digitales |
| Input Registers | 3xxxx |
Sí | No | Mediciones de solo lectura |
| Holding Registers | 4xxxx |
Sí | Sí | 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
internoWrite[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:
- El PLC actualiza
Write[350]. - El ProSoft publica el contenido en
4X2350. - El DCS envía
FC03 READ 4X2350. - 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:
- Definir un único propietario de escritura por registro.
- Separar comandos de estados.
- Separar setpoint solicitado de setpoint activo.
- No superponer valores de 32 bits.
- Agrupar direcciones contiguas para optimizar el polling.
- Reservar espacio para crecimiento.
- Documentar base de direccionamiento, Function Code y Unit ID.
- 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:
- Operación del DCS: READ para obtener información;
WRITE para enviar comandos o parámetros. - Rol del ProSoft: Server frente al DCS y, cuando sea
necesario, Client frente a analizadores u otros dispositivos. - Á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.
