Protocolo Modbus, OPC Server e InfeLink

Comunicación Industrial y SCADA

Diagrama de arquitectura industrial
Figura 1: Arquitectura de comunicación industrial

Contenido del Curso:

  • 1. Protocolo Modbus - Definición, Datagramas ASCII y RTU, RS485 y TCP/IP
  • 2. Servidor OPC y KepServerEX - Configuración de canales, dispositivos y tags
  • 3. Software InfeLink - Creación de interfaces HMI y animaciones

1. Protocolo Modbus

Definición:

Modbus es un protocolo de comunicación serial desarrollado por Modicon (ahora Schneider Electric) en 1979 para su uso con controladores lógicos programables (PLCs). Se ha convertido en el protocolo estándar de facto en la industria para la comunicación entre dispositivos electrónicos.

Características Principales:

Arquitectura Maestro-Esclavo Modbus
Figura 2: Arquitectura Maestro-Esclavo del protocolo Modbus

Ejemplo de Aplicación:

En una planta de tratamiento de agua, un PLC maestro (Modbus Master) puede leer datos de múltiples dispositivos esclavos:

1.1 Datagrama Modbus ASCII

Modbus ASCII:

En el modo ASCII, los mensajes se transmiten como caracteres ASCII legibles. Cada byte de información se envía como dos caracteres ASCII hexadecimales. Es más lento que RTU pero más fácil de depurar.

Estructura del Frame ASCII:

Campo Tamaño Descripción Ejemplo
Start 1 caracter Dos puntos (:) 3A (hex)
Address 2 caracteres Dirección del esclavo (00-FF) 01
Function 2 caracteres Código de función 03 (Leer registros)
Data N caracteres Datos de la solicitud 006B0003
LRC 2 caracteres Longituditudinal Redundancy Check 8E
End 2 caracteres CR LF (0D 0A) 0D 0A

Ejemplo Práctico - Lectura de Registros:

Mensaje de solicitud (Master → Slave): :01 03 00 6B 00 03 8E [CR][LF] Desglose: : = Inicio de mensaje ASCII 01 = Dirección del esclavo (1) 03 = Función 03 (Leer registros de holding) 00 6B = Dirección inicial del registro (107 en decimal) 00 03 = Cantidad de registros a leer (3 registros) 8E = LRC (checksum) [CR][LF] = Fin del mensaje Respuesta del esclavo: :01 03 06 02 2B 00 00 00 64 F9 [CR][LF] Desglose: : = Inicio 01 = Dirección del esclavo 03 = Función 06 = Número de bytes de datos (6 bytes = 3 registros × 2 bytes) 02 2B = Valor del registro 107 (555 en decimal) 00 00 = Valor del registro 108 (0) 00 64 = Valor del registro 109 (100 en decimal) F9 = LRC [CR][LF] = Fin del mensaje
Estructura frame Modbus ASCII
Figura 3: Estructura detallada de un frame Modbus ASCII

1.2 Datagrama Modbus RTU

Modbus RTU (Remote Terminal Unit):

El modo RTU transmite datos en formato binario compacto. Es el modo más eficiente y comúnmente utilizado en aplicaciones industriales. Cada byte se transmite como 8 bits, logrando mayor velocidad que ASCII.

Estructura del Frame RTU:

Campo Tamaño Descripción Ejemplo (Hex)
Address 1 byte Dirección del esclavo (0-247) 01
Function Code 1 byte Código de función (1-255) 03
Data N bytes Datos de la solicitud/respuesta 00 6B 00 03
CRC 2 bytes Cyclic Redundancy Check (16 bits) 78 52

Ejemplo Práctico - Escritura de Registro:

Solicitud de escritura de un solo registro (Función 06): [01] [06] [00 01] [FF FF] [98 4A] | | | | | | | | | └─ CRC16 | | | └────────── Valor a escribir (65535) | | └────────────────── Dirección del registro (1) | └─────────────────────── Función 06 (Preset Single Register) └──────────────────────────── Dirección del esclavo (1) Respuesta del esclavo (eco de la solicitud): [01] [06] [00 01] [FF FF] [98 4A] Solicitud de lectura múltiple (Función 03): [01] [03] [00 00] [00 0A] [C4 0B] | | | | | | | | | └─ CRC16 | | | └────────── Cantidad de registros (10) | | └────────────────── Dirección inicial (0) | └─────────────────────── Función 03 (Read Holding Registers) └──────────────────────────── Dirección del esclavo (1) Respuesta: [01] [03] [14] [00 01] [00 02] [00 03]...[CRC] | └──────────────────────┘ └─ 20 bytes de datos (10 registros × 2 bytes)

Cálculo del CRC16:

El CRC (Cyclic Redundancy Check) es un código de detección de errores de 16 bits. Se calcula sobre todos los bytes del mensaje excepto el propio CRC.

Algoritmo CRC16 Modbus:

  1. Inicializar registro CRC en 0xFFFF
  2. Para cada byte del mensaje:
    • XOR el byte con el byte bajo del CRC
    • Realizar 8 desplazamientos a la derecha
    • Si el bit desplazado es 1, XOR con 0xA001
  3. El resultado final es el CRC (byte bajo primero, luego byte alto)
Comparación ASCII vs RTU
Figura 4: Comparación de eficiencia entre Modbus ASCII y RTU

1.3 Códigos de Función Modbus

Funciones Principales:

Código Nombre Descripción Ejemplo de Uso
01 Read Coils Leer bobinas (discretas de salida) Leer estado de relés
02 Read Discrete Inputs Leer entradas discretas Leer sensores digitales
03 Read Holding Registers Leer registros de retención (16-bit) Leer valores analógicos, setpoints
04 Read Input Registers Leer registros de entrada Leer mediciones de sensores
05 Write Single Coil Escribir una bobina individual Activar/desactivar un relé
06 Write Single Register Escribir un registro individual Modificar un setpoint
15 Write Multiple Coils Escribir múltiples bobinas Controlar varias salidas
16 Write Multiple Registers Escribir múltiples registros Configurar varios parámetros

Ejemplo Detallado - Función 03 (Lectura):

Solicitud: Leer 5 registros comenzando desde la dirección 100 Dirección del esclavo: 0x01 Función: 0x03 Dirección inicial: 0x0064 (100 en decimal) Cantidad de registros: 0x0005 Frame completo (hex): 01 03 00 64 00 05 C5 38 └─────┘ CRC16 Respuesta esperada: 01 03 0A [00 01] [00 02] [00 03] [00 04] [00 05] CRC └──────────────────────────────────────┘ 10 bytes de datos (5 registros × 2 bytes) Valores leídos: Registro 100 = 0x0001 (1) Registro 101 = 0x0002 (2) Registro 102 = 0x0003 (3) Registro 103 = 0x0004 (4) Registro 104 = 0x0005 (5)

⚠️ Códigos de Error:

Si un esclavo no puede procesar una solicitud, responde con el código de función + 0x80 y un código de excepción:

1.4 Modbus sobre RS485

RS485 (Recommended Standard 485):

RS485 es un estándar de capa física que define las características eléctricas de drivers y receptores para comunicaciones seriales balanceadas. Es la interfaz física más común para Modbus RTU/ASCII.

Características de RS485:

Topología de red RS485
Figura 5: Topología de red Modbus RS485 con múltiples esclavos

Configuración Típica RS485:

1

Cableado:

  • Cable par trenzado blindado
  • Conexión: A (+) y B (-)
  • Blindaje conectado a tierra en un solo punto
  • Topología en bus lineal (no estrella)
2

Terminación:

  • Resistencia de 120Ω en ambos extremos del bus
  • Evitar reflexiones de señal
  • Necesaria en distancias > 1 metro

Ejemplo de Configuración de Parámetros:

Parámetros de comunicación típicos para Modbus RTU/ASCII/RS485: Baud Rate: 9600, 19200, 38400, 57600, 115200 bps Data Bits: 8 bits Parity: None, Even, Odd Stop Bits: 1 o 2 bits Flow Control: Ninguno (típicamente) Configuración más común: 9600-8-N-1 (9600 bps, 8 bits de datos, sin paridad, 1 bit de parada) Tiempos de silencio (Inter-frame gap): - Entre caracteres: 1.5 caracteres (mínimo) - Entre mensajes: 3.5 caracteres (mínimo) A 9600 bps: - 1 bit = 104.17 μs - 3.5 caracteres = 3.5 × 11 bits × 104.17 μs = 4.01 ms

⚠️ Consideraciones Importantes:

1.5 Modbus TCP/IP sobre Ethernet

Modbus TCP/IP:

Modbus TCP es la adaptación del protocolo Modbus para redes Ethernet TCP/IP. Elimina el CRC (usando el checksum de TCP) y agrega un encabezado MBAP (Modbus Application Protocol) de 7 bytes.

Ventajas de Modbus TCP:

Estructura del Frame Modbus TCP:

Campo MBAP Tamaño Descripción
Transaction ID 2 bytes Identificador de transacción (para emparejar request/response)
Protocol ID 2 bytes Identificador de protocolo (0 = Modbus)
Length 2 bytes Longitud del mensaje restante (bytes siguientes)
Unit ID 1 byte Dirección del esclavo (similar a Modbus serial)
Function Code + Data N bytes PDU Modbus estándar (sin CRC)

Ejemplo de Comunicación Modbus TCP:

Solicitud TCP (Master → Slave, puerto 502): Encabezado MBAP: Transaction ID: 00 01 (Identificador de transacción 1) Protocol ID: 00 00 (Modbus) Length: 00 06 (6 bytes siguen) Unit ID: 01 (Esclavo 1) PDU Modbus: Function Code: 03 (Read Holding Registers) Start Address: 00 64 (Registro 100) Quantity: 00 0A (10 registros) Frame completo (hex): 00 01 00 00 00 06 01 03 00 64 00 0A Respuesta del esclavo: 00 01 00 00 00 17 01 03 14 [datos...] └───── 23 bytes siguen (1 byte Unit ID + 1 byte byte count + 20 bytes de datos)
Arquitectura Modbus TCP/IP
Figura 6: Arquitectura de red Modbus TCP/IP con switch Ethernet

Comparación: Modbus RTU vs Modbus TCP

Característica Modbus RTU (RS485) Modbus TCP/IP
Medio físico Cable par trenzado Ethernet (CAT5/6, fibra)
Velocidad máxima ~10 Mbps 10/100/1000 Mbps
Distancia 1200 m Ilimitada (vía routers)
Nodos máximos 32 (sin repetidores) Sin límite práctico
Detección de errores CRC16 TCP checksum
Puerto N/A 502 (TCP)
Costo Bajo Medio (requiere switches)

2. Servidor OPC - Concepto General

¿Qué es OPC?

OPC (OLE for Process Control) es un estándar de interoperabilidad industrial que permite la comunicación entre dispositivos de hardware de diferentes fabricantes y aplicaciones de software (HMI, SCADA, MES, ERP). Actualmente evolucionó a OPC UA (Unified Architecture).

Problema que resuelve OPC:

Arquitectura OPC Server
Figura 7: Arquitectura cliente-servidor OPC

Sin OPC (Problema):

Con OPC (Solución):

Componentes de OPC:

Componente Función Ejemplo
OPC Server Traduce el protocolo del dispositivo a formato OPC estándar KepServerEX, Matrikon, Prosys
OPC Client Aplicación que consume datos del servidor OPC InfeLink, WinCC, Ignition, Excel
OPC DA Data Access - Acceso a datos en tiempo real Lectura/escritura de tags
OPC HDA Historical Data Access - Datos históricos Tendencias, reportes
OPC UA Unified Architecture - Versión moderna multiplataforma Seguridad, IoT, Cloud

Ejemplo de Aplicación:

En una planta industrial con:

Sin OPC: InfeLink necesita 3 drivers diferentes, el MES necesita 3 drivers diferentes = 6 drivers

Con OPC: 1 servidor OPC con 3 drivers, InfeLink y MES se conectan al servidor OPC = 3 drivers + 2 clientes OPC

2.1 KepServerEX - Software OPC Server

KepServerEX:

Es el servidor OPC líder en la industria desarrollado por Kepware (ahora parte de PTC). Proporciona conectividad a más de 150 protocolos industriales diferentes, incluyendo Modbus, Siemens, Allen-Bradley, OPC UA, MQTT, y muchos más.

Características Principales:

Interfaz KepServerEX
Figura 8: Interfaz principal de KEPServerEX Configuration

Jerarquía de Configuración en KepServer:

  1. Channel (Canal): Define el medio de comunicación (puerto serial, Ethernet, etc.)
    • Ejemplo: "Modbus_ASCII_Channel" - Puerto COM1, 9600 baud
  2. Device (Dispositivo): Representa un dispositivo físico en el canal
    • Ejemplo: "PLC_Delta_01" - Dirección Modbus 1
  3. Tag (Etiqueta): Variable individual dentro del dispositivo
    • Ejemplo: "Temperatura_Tanque1" - Registro 40001

2.2 Creación de Canal en Comunicación Serial (Modbus ASCII)

Procedimiento Paso a Paso:

1

Abrir KEPServerEX Configuration

  • Ejecutar "KEPServerEX Configuration" desde el menú Inicio
  • Si es la primera vez, se abrirá el asistente de configuración
  • O hacer clic derecho en "Project" → "New" → "Channel"
2

Seleccionar Driver

  • En la ventana "Channel Properties", hacer clic en "Driver"
  • Buscar y seleccionar: "Modbus ASCII Serial"
  • Hacer clic en "Next"
Selección driver Modbus ASCII
Figura 9: Selección del driver Modbus ASCII Serial
3

Configurar Parámetros del Canal

Channel Properties:

Parámetro Valor Típico Descripción
Name Modbus_ASCII_RS485 Nombre descriptivo del canal
Diagnostics Enable Habilitar diagnósticos para troubleshooting
Serial Port COM1 Puerto serial físico o virtual
Baud Rate 9600 Velocidad de comunicación (debe coincidir con dispositivos)
Data Bits 7 u 8 Bits de datos (ASCII a veces usa 7, pero 8 es común)
Parity Even Paridad: Even es común en ASCII, pero depende del dispositivo
Stop Bits 1 o 2 Bits de parada
Flow Control None Control de flujo (típicamente None para RS485)
Response Timeout 1000 ms Tiempo máximo de espera por respuesta
Inter-Frame Delay 50 ms Retraso entre frames
4

Configuración Avanzada (Opcional)

  • Virtual Network: Dejar en "None" para configuración básica
  • Write Optimizations:
    • "Write all values for all tags" - Escribe todos los valores
    • "Write only the most current value for each tag" - Optimizado (recomendado)
  • Non-Normalized Device Addresses: Habilitar si se usan direcciones en formato hexadecimal
5

Finalizar Configuración

  • Hacer clic en "Finish" o "OK"
  • El canal aparecerá en el árbol del proyecto
  • Verificar que el estado sea "Connected" (verde)

Ejemplo de Configuración Completa (ASCII):

Canal: Modbus_ASCII_Principal ├─ Driver: Modbus ASCII Serial ├─ Puerto: COM3 ├─ Baud Rate: 9600 ├─ Data Bits: 7 ├─ Parity: Even ├─ Stop Bits: 1 ├─ Flow Control: None ├─ Response Timeout: 1000 ms ├─ Inter-Frame Delay: 50 ms ├─ Retry Attempts: 3 └─ Diagnostics: Enabled Estado: ✓ Connected Comunicación: OK (Formato ASCII con LRC)

⚠️ Verificaciones Importantes:

2.3 Creación de Dispositivo en Comunicación Serial

Procedimiento Detallado:

1

Agregar Nuevo Dispositivo

  • En el árbol del proyecto, hacer clic derecho sobre el canal creado
  • Seleccionar "New" → "Device"
  • O usar el botón "Add Device" en la barra de herramientas
2

Configurar Propiedades del Dispositivo

Device Properties:

Parámetro Valor Descripción
Name PLC_Delta_01 Nombre identificador del dispositivo
ID 1 Dirección Modbus del esclavo (1-247)
Model Modbus Modelo del dispositivo (genérico o específico)
Driver Modbus ASCII Heredado del canal
3

Configuración Específica Modbus

  • Frame Type: ASCII (seleccionado en el canal)
  • Byte Order:
    • "AB CD" - Big Endian (más común en Modbus)
    • "CD AB" - Little Endian
    • "BA DC" - Byte swap
    • "DC BA" - Byte and word swap
  • Register Addressing:
    • "0-based" - Dirección base 0 (0-65535)
    • "1-based" - Dirección base 1 (1-65536)
4

Parámetros de Comunicación

Parámetro Valor Recomendado
Connect/Disconnect on Demand No (mantener conexión permanente)
Scan on Demand No (scan continuo)
Scan Mode "Read all values on demand" o "Respect tag-specified scan rate"
Request Timeout 1000 ms
Failover Timeout 3000 ms
Retries 3 intentos
5

Configuración de Tags Dinámicos (Opcional)

Para dispositivos que soportan auto-descubrimiento:

  • Habilitar "Dynamic Tags"
  • Configurar rango de direcciones a escanear
  • Especificar tipo de datos esperado
6

Verificar Conexión

  • Hacer clic en "OK" para guardar
  • El dispositivo aparecerá bajo el canal en el árbol
  • El icono debe mostrarse en verde (Connected)
  • Si está en rojo, verificar:
    • Dirección del esclavo
    • Cableado RS485
    • Parámetros de comunicación (Paridad/Stop bits)
    • Energización del dispositivo
Configuración de dispositivo
Figura 10: Ventana de configuración de propiedades del dispositivo

Ejemplo - Múltiples Dispositivos:

Canal: Modbus_ASCII_RS485 │ ├─ Device: PLC_Delta_Tanque1 │ └─ ID: 1 │ ├─ Device: PLC_Delta_Tanque2 │ └─ ID: 2 │ ├─ Device: Medidor_Flujo │ └─ ID: 3 │ ├─ Device: Variador_Bomba │ └─ ID: 4 │ └─ Device: Controlador_Temperatura └─ ID: 5 Cada dispositivo tiene su propia dirección Modbus única (1-5) Todos comparten el mismo canal físico RS485

2.4 Delta PLC - Direcciones Modbus

Mapeo de Memoria Delta PLC:

Los PLCs Delta DVP series usan un sistema de direccionamiento específico que debe mapearse a direcciones Modbus estándar. Cada tipo de memoria (bobinas, registros) tiene un rango y dirección Modbus correspondiente.

Tabla de Direcciones Modbus para Delta DVP:

Dispositivo Rango Delta Tipo Dirección Hex Dirección Modbus (Dec) Función Modbus
X (Entradas) X0-X377 Bit 0000-00FF 1-256 02 (Read Discrete Inputs)
Y (Salidas) Y0-Y377 Bit 0100-01FF 1-256 01 (Read Coils)
M (Auxiliares) M0-M4095 Bit 0200-0FFF 1-4096 01 (Read Coils)
S (Pasos) S0-S1023 Bit 0000-03FF 1-1024 01/02 (Read Coils/Inputs)
D (Datos) D0-D9999 Word (16-bit) 1000-3FFF 40001-410000 03/04 (Read Registers)
T (Temporizadores) T0-T255 Word 0400-04FF 40001-400256 03 (Read Holding Registers)
C (Contadores) C0-C255 Word 0500-05FF 40001-400256 03 (Read Holding Registers)

Ejemplos Prácticos de Direccionamiento:

Ejemplo 1 - Leer entrada digital X0:
  • Dispositivo: X0
  • Tipo: Bit de entrada
  • Dirección Modbus: 1 (o 00001)
  • Función: 02 (Read Discrete Inputs)
  • Tag en KepServer: PLC_Delta_01.X0
Ejemplo 2 - Escribir salida Y5:
  • Dispositivo: Y5
  • Tipo: Bobina de salida
  • Dirección Modbus: 6 (Y0=1, Y1=2, ... Y5=6)
  • Función: 05 (Write Single Coil)
  • Tag en KepServer: PLC_Delta_01.Y5
Ejemplo 3 - Leer registro D100:
  • Dispositivo: D100
  • Tipo: Registro de datos (16-bit)
  • Dirección Modbus: 40101 (D0=40001, D100=40001+100)
  • Función: 03 (Read Holding Registers)
  • Tag en KepServer: PLC_Delta_01.D100
Ejemplo 4 - Leer valor de temporizador T10:
  • Dispositivo: T10
  • Tipo: Registro de temporizador
  • Dirección Modbus: 40011 (T0=40001, T10=40001+10)
  • Función: 03 (Read Holding Registers)
  • Tag en KepServer: PLC_Delta_01.T10

Fórmulas de Conversión:

Para registros D (Datos): Dirección Modbus = 40001 + Número de registro D Ejemplo: D500 → 40001 + 500 = 40501 Para bobinas M (Auxiliares): Dirección Modbus = 1 + Número de M Ejemplo: M100 → 1 + 100 = 101 Para entradas X: Dirección Modbus = 1 + Valor decimal de X Ejemplo: X10 → 1 + 8 (X0-X7=0-7, X10=8) = 9 Para salidas Y: Dirección Modbus = 1 + Valor decimal de Y Ejemplo: Y12 → 1 + 10 = 11 Nota: X e Y usan numeración octal en Delta PLC X0-X7, X10-X17, X20-X27... (no existe X8 ni X9)
Tabla mapeo Delta Modbus
Figura 11: Tabla completa de mapeo de direcciones Delta a Modbus

2.5 Creación de Tags en KepServer

Procedimiento para Crear Tags:

1

Acceder al Dispositivo

  • En el árbol del proyecto, expandir el canal
  • Expandir el dispositivo (ej. "PLC_Delta_01")
  • Hacer clic derecho sobre "Device" → "New" → "Tag"
2

Configurar Propiedades del Tag

Propiedad Valor Descripción
Name Temperatura_Tanque1 Nombre descriptivo del tag
Address D100 Dirección en formato Delta (o 40101 en Modbus)
Data Type Word Tipo de dato: Boolean, Short, Word, Long, Float, etc.
Access Read/Write Solo lectura o lectura/escritura
Scan Rate 1000 ms Frecuencia de actualización
Description Temperatura del tanque 1 en °C Descripción del propósito del tag
3

Configuración Avanzada del Tag

Scaling (Escalado):
  • Raw Low: 0 (valor mínimo del PLC)
  • Raw High: 1000 (valor máximo del PLC)
  • Scaled Low: 0.0 (valor en ingeniería mínimo)
  • Scaled High: 100.0 (valor en ingeniería máximo)
  • Formula: Scaled = (Raw - RawLow) × (ScaledHigh - ScaledLow) / (RawHigh - RawLow) + ScaledLow
Alarmas (Opcional):
  • High Limit: 80.0 °C
  • Low Limit: 10.0 °C
  • High-High Limit: 90.0 °C (crítico)

Ejemplo Completo - Creación de Múltiples Tags:

Dispositivo: PLC_Delta_01 Tags de Entradas Digitales: ├─ Tag: Sensor_Nivel_Alto │ ├─ Address: X0 │ ├─ Data Type: Boolean │ └─ Description: Sensor de nivel alto del tanque │ ├─ Tag: Sensor_Nivel_Bajo │ ├─ Address: X1 │ ├─ Data Type: Boolean │ └─ Description: Sensor de nivel bajo del tanque │ └─ Tag: Bomba_Activa ├─ Address: X2 ├─ Data Type: Boolean └─ Description: Feedback de bomba encendida Tags de Salidas Digitales: ├─ Tag: Control_Bomba │ ├─ Address: Y0 │ ├─ Data Type: Boolean │ ├─ Access: Read/Write │ └─ Description: Control de encendido de bomba │ └─ Tag: Alarma_Sonora ├─ Address: Y1 ├─ Data Type: Boolean ├─ Access: Read/Write └─ Description: Activación de alarma sonora Tags de Registros Analógicos: ├─ Tag: Temperatura_Tanque │ ├─ Address: D100 │ ├─ Data Type: Word │ ├─ Scaling: 0-1000 → 0.0-100.0 °C │ └─ Description: Temperatura del tanque principal │ ├─ Tag: Presion_Sistema │ ├─ Address: D101 │ ├─ Data Type: Word │ ├─ Scaling: 0-4095 → 0.0-10.0 bar │ └─ Description: Presión del sistema │ ├─ Tag: Setpoint_Temperatura │ ├─ Address: D200 │ ├─ Data Type: Word │ ├─ Access: Read/Write │ ├─ Scaling: 0-1000 → 0.0-100.0 °C │ └─ Description: Setpoint de temperatura │ └─ Tag: Flow_Totalizer ├─ Address: D300 ├─ Data Type: Long (32-bit) └─ Description: Totalizador de flujo (litros)
Creación de tag en KepServer
Figura 12: Ventana de propiedades de tag en KEPServerEX

Tipos de Datos Soportados:

Tipo de Dato Tamaño Rango Uso Típico
Boolean 1 bit 0 o 1 Entradas/salidas digitales
Short 8 bits -128 a 127 Valores pequeños con signo
Word 16 bits 0 a 65535 Registros analógicos (D)
Long 32 bits 0 a 4294967295 Totalizadores, contadores
Float 32 bits ±3.4×10^38 Valores decimales (IEEE 754)
BCD 16 bits 0-9999 Display numéricos

2.6 Verificación del Estado de los Tags

Métodos de Verificación:

1

Quick Client de KepServer

  • Herramienta integrada para monitoreo rápido
  • Acceso: Tools → Quick Client
  • Permite ver valores en tiempo real
  • Posibilidad de escribir valores (tags RW)
Quick Client KepServer
Figura 13: Quick Client mostrando tags y valores en tiempo real
2

Diagnosticos del Canal/Dispositivo

Verificar estadísticas de comunicación:

  • Clic derecho en Canal/Dispositivo → "Diagnostics"
  • Información disponible:
    • Communications: Bytes enviados/recibidos
    • Requests: Solicitudes exitosas/fallidas
    • Tags: Tags activos, scan rate
    • Errors: Contador de errores, últimos errores
3

Event Log (Registro de Eventos)

  • View → Event Log
  • Muestra todas las actividades del servidor
  • Tipos de eventos:
    • Information: Eventos normales (conexiones, cambios)
    • Warning: Advertencias (reintentos, timeouts)
    • Error: Errores críticos (falla de comunicación)
  • Filtrar por canal, dispositivo, severidad

Indicadores de Estado:

Icono Estado Significado Acción
🟢 Connected Comunicación OK Ninguna - todo normal
🔴 Disconnected Sin comunicación Verificar cableado, energía, configuración
🟡 Partial Algunos tags fallan Verificar direcciones de tags problemáticos
Disabled Canal/dispositivo deshabilitado Habilitar en propiedades

Ejemplo de Troubleshooting:

Problema: Tag muestra calidad "Bad" o valor 0
Verificación paso a paso:
  1. Verificar estado del dispositivo:
    • ¿El icono del dispositivo está verde?
    • Si está rojo, el problema es de comunicación general
  2. Verificar dirección del tag:
    • ¿La dirección existe en el PLC?
    • ¿El formato es correcto? (D100, 40101, etc.)
    • ¿El tipo de dato coincide? (Word, Boolean, etc.)
  3. Probar con Quick Client:
    • Abrir Quick Client
    • Agregar el tag problemático
    • Observar valor y calidad (Quality)
    • Calidad "Good" = comunicación OK
    • Calidad "Bad" = problema de comunicación/dirección
  4. Revisar Event Log:
    • Buscar errores relacionados con el tag/dispositivo
    • Mensajes comunes:
      • "Timeout" - El dispositivo no responde
      • "Invalid address" - Dirección incorrecta
      • "Exception response" - Error en el dispositivo
  5. Verificar en el PLC:
    • Conectar al PLC con software de programación (WPLSoft)
    • Verificar que la dirección exista
    • Verificar que tenga un valor válido
    • Verificar que no esté protegida contra escritura

Ejemplo de Lectura Exitosa en Quick Client:

KEPServerEX Quick Client ======================== Channel: Modbus_ASCII_RS485 [✓ Connected] └─ Device: PLC_Delta_01 [✓ Connected] ├─ Tag: Sensor_Nivel_Alto │ ├─ Address: X0 │ ├─ Value: TRUE │ ├─ Quality: Good │ └─ Timestamp: 2024-01-15 10:30:45.123 │ ├─ Tag: Temperatura_Tanque │ ├─ Address: D100 │ ├─ Value: 45.5 │ ├─ Quality: Good │ └─ Timestamp: 2024-01-15 10:30:45.456 │ ├─ Tag: Presion_Sistema │ ├─ Address: D101 │ ├─ Value: 3.2 │ ├─ Quality: Good │ └─ Timestamp: 2024-01-15 10:30:45.789 │ └─ Tag: Control_Bomba ├─ Address: Y0 ├─ Value: FALSE ├─ Quality: Good ├─ Access: Read/Write └─ Timestamp: 2024-01-15 10:30:46.012 Statistics: - Scan Rate: 1000 ms - Total Tags: 4 - Good Quality: 4/4 (100%) - Communication Errors: 0

⚠️ Problemas Comunes y Soluciones:

3. Software InfeLink - SCADA/HMI

¿Qué es InfeLink?

InfeLink es un software SCADA/HMI (Supervisory Control And Data Acquisition / Human Machine Interface) desarrollado para la creación de interfaces gráficas de supervisión y control industrial. Permite visualizar datos en tiempo real, crear alarmas, tendencias históricas y controlar procesos industriales.

Características Principales:

Interfaz InfeLink
Figura 14: Interfaz principal de desarrollo en InfeLink

Arquitectura de InfeLink:

1

InfeLink Designer

  • Ambiente de desarrollo
  • Creación de pantallas
  • Configuración de tags
  • Definición de animaciones
  • Configuración de alarmas
2

InfeLink Viewer/Runtime

  • Ejecución de pantallas
  • Visualización en tiempo real
  • Interacción con el operador
  • Registro de datos
  • Gestión de alarmas

3.1 Creación de Botón y Configuración de Animación

Procedimiento Paso a Paso:

1

Abrir InfeLink Designer

  • Ejecutar InfeLink Designer
  • Abrir proyecto existente o crear nuevo proyecto
  • File → New Project (si es nuevo)
  • Nombre del proyecto: "Proyecto_Tanque"
  • Seleccionar carpeta de guardado
2

Crear Nueva Pantalla

  • Clic derecho en "Screens" → "New Screen"
  • Nombre: "Pantalla_Principal"
  • Tamaño: 1024×768 (o resolución deseada)
  • Color de fondo: Seleccionar color claro (blanco o gris claro)
Creación de pantalla
Figura 15: Creación de nueva pantalla en InfeLink
3

Insertar Objeto Botón

  • En la barra de herramientas, seleccionar "Objects" o "Toolbox"
  • Buscar "Button" o "Push Button"
  • Hacer clic y arrastrar en la pantalla para dibujar el botón
  • Tamaño sugerido: 150×50 píxeles
  • Posición: Coordenadas X=100, Y=100
4

Configurar Apariencia del Botón

Doble clic en el botón o clic derecho → "Properties":

Propiedad Valor
Name btn_Control_Bomba
Caption/Text CONTROL BOMBA
Font Arial, 12pt, Bold
Background Color Gray (estado normal)
Border Style Sunken o Raised
Border Color Black
5

Configurar Animación del Botón

En Properties, buscar pestaña "Animations" o "Dinámica":

Animación de Color (Fill Color):
  • Seleccionar "Fill Color" o "Background Color"
  • Tipo de animación: "Tag Value" o "Expression"
  • Tag: Seleccionar tag de KepServer
    • Navegar a: OPC Server → KEPServerEX → Channel1.Device1
    • Seleccionar: Control_Bomba (Y0)
  • Configurar estados:
    • Value = 0 (FALSE): Color Gray
    • Value = 1 (TRUE): Color Green
Animación de Texto (Caption):
  • Seleccionar "Caption" o "Text"
  • Tipo: "Tag Value"
  • Tag: Control_Bomba
  • Configurar:
    • Value = 0: Texto "BOMBA OFF"
    • Value = 1: Texto "BOMBA ON"
6

Configurar Acción del Botón (Click)

Pestaña "Events" o "Actions":

  • Evento: "On Click" o "Mouse Click"
  • Acción: "Write Tag Value" o "Toggle Tag"
  • Tag a escribir: Control_Bomba
  • Tipo de acción:
    • Toggle: Cambia de 0 a 1 o de 1 a 0
    • Set to 1: Siempre escribe 1 (ON)
    • Set to 0: Siempre escribe 0 (OFF)
    • Set Value: Valor específico
  • Recomendado: Toggle para control ON/OFF
7

Configuración de Seguridad (Opcional)

  • Pestaña "Security" o "Permissions"
  • Habilitar requerimiento de login
  • Nivel de acceso requerido: "Operator" o "Engineer"
  • Confirmación antes de ejecutar: Habilitar checkbox
  • Mensaje de confirmación: "¿Desea cambiar el estado de la bomba?"
8

Guardar y Probar

3.2 Ingresar Grupo de Tags desde KepServer

Procedimiento de Importación:

1

Configurar Conexión OPC en InfeLink

  • En InfeLink Designer, ir a "Tags" o "Variables"
  • Clic derecho → "New Group" o "Add OPC Server"
  • Nombre del grupo: "Tags_PLC_Tanque"
Configuración OPC InfeLink
Figura 17: Configuración de servidor OPC en InfeLink
2

Seleccionar Servidor OPC

  • Tipo de servidor: "OPC DA" (Data Access)
  • Seleccionar servidor: "Kepware.KEPServerEX.V6"
  • Si no aparece:
    • Verificar que KEPServerEX esté ejecutándose
    • Verificar que esté registrado como servidor OPC
    • Tools → OPC Client en KepServer para probar
  • Computer: "Local" (si está en la misma PC) o IP remota
3

Navegar por el Árbol de Tags

Se mostrará el árbol de tags de KepServer:

└─ Kepware.KEPServerEX.V6 └─ [Channel1] Modbus_ASCII_RS485 └─ [Device1] PLC_Delta_01 ├─ Sensor_Nivel_Alto (Boolean) ├─ Sensor_Nivel_Bajo (Boolean) ├─ Control_Bomba (Boolean, R/W) ├─ Temperatura_Tanque (Word) ├─ Presion_Sistema (Word) ├─ Setpoint_Temperatura (Word, R/W) └─ Flow_Totalizer (Long)
4

Importar Tags Individuales

  • Expandir el árbol hasta ver los tags
  • Seleccionar tags deseados (Ctrl+clic para múltiples)
  • Clic derecho → "Add" o "Import"
  • O arrastrar y soltar en el grupo de tags de InfeLink
  • Los tags se agregan con el mismo nombre que en KepServer
5

Importar Todo el Dispositivo (Bulk Import)

  • Clic derecho en el dispositivo (PLC_Delta_01)
  • Seleccionar "Import All Tags" o "Add All"
  • Todos los tags configurados en KepServer se importan
  • Se mantiene la estructura jerárquica
6

Configurar Propiedades de Tags Importados

Para cada tag importado, configurar:

Propiedad Configuración
Scan Rate 1000 ms (o según requerimiento)
Deadband 0.1% (para evitar cambios mínimos)
Alarm Enable Sí/No según corresponda
Logging Enable Sí para tags históricos
Description Descripción en español
7

Verificar Conexión y Calidad

  • En la ventana de tags, verificar columna "Quality"
  • Debe mostrar "Good" para todos los tags
  • Si muestra "Bad":
    • Verificar que KepServer esté corriendo
    • Verificar que el dispositivo esté conectado
    • Revisar Event Log de InfeLink
  • Verificar valores actuales en columna "Value"

Ejemplo - Estructura de Tags Importados:

Grupo de Tags: Tags_PLC_Tanque ├─ Conexión: OPC DA - Kepware.KEPServerEX.V6 ├─ Update Rate: 1000 ms └─ Tags: │ ├─ Digitales (Boolean): │ ├─ Sensor_Nivel_Alto │ │ ├─ Address: X0 │ │ ├─ Quality: Good │ │ ├─ Value: TRUE │ │ └─ Timestamp: 2024-01-15 10:30:45 │ │ │ ├─ Sensor_Nivel_Bajo │ │ ├─ Address: X1 │ │ ├─ Quality: Good │ │ └─ Value: FALSE │ │ │ └─ Control_Bomba │ ├─ Address: Y0 │ ├─ Access: Read/Write │ ├─ Quality: Good │ └─ Value: FALSE │ ├─ Analógicos (Word/Integer): │ ├─ Temperatura_Tanque │ │ ├─ Address: D100 │ │ ├─ Data Type: Word │ │ ├─ Scaling: 0-1000 → 0.0-100.0 │ │ ├─ Quality: Good │ │ ├─ Value: 45.5 °C │ │ └─ Alarm: High @ 80.0 °C │ │ │ ├─ Presion_Sistema │ │ ├─ Address: D101 │ │ ├─ Data Type: Word │ │ ├─ Scaling: 0-4095 → 0.0-10.0 │ │ ├─ Quality: Good │ │ └─ Value: 3.2 bar │ │ │ └─ Setpoint_Temperatura │ ├─ Address: D200 │ ├─ Access: Read/Write │ ├─ Quality: Good │ └─ Value: 50.0 °C │ └─ Totalizadores (Long): └─ Flow_Totalizer ├─ Address: D300 ├─ Data Type: Long (32-bit) ├─ Quality: Good └─ Value: 15234 litros Estadísticas del Grupo: - Total Tags: 7 - Good Quality: 7/7 (100%) - Update Rate: 1000 ms - Last Update: 2024-01-15 10:30:45 - Communication Errors: 0

Uso de Tags en Objetos Gráficos:

Una vez importados los tags, se pueden vincular a objetos:

Ejemplo - Crear Indicador de Temperatura:

  1. Insertar objeto "Numeric Display" o "Text"
  2. En Properties → Animation → Value
  3. Seleccionar tag: Tags_PLC_Tanque.Temperatura_Tanque
  4. Configurar formato: "0.0" (un decimal)
  5. Agregar unidad: "°C"
  6. El display mostrará el valor en tiempo real

Ejemplo - Crear Barra de Nivel:

  1. Insertar objeto "Bar Graph" o "Progress Bar"
  2. Animation → Fill/Value
  3. Tag: Tags_PLC_Tanque.Presion_Sistema
  4. Range: Min=0.0, Max=10.0
  5. Color: Verde (0-5), Amarillo (5-8), Rojo (8-10)
Tags importados en InfeLink
Figura 18: Ventana de tags mostrando tags importados desde KepServer

⚠️ Consideraciones Importantes:

Ejemplo Integrador - Sistema Completo

Caso Práctico: Control de Tanque de Agua

Sistema de bombeo con las siguientes características:

Diagrama del sistema
Figura 19: Diagrama del sistema de control de tanque

Configuración Completa:

1. Hardware:

2. KepServerEX:

Channel: Modbus_ASCII_Tanque ├─ Port: COM3 ├─ Baud: 9600-7-E-1 (Ejemplo ASCII) └─ Device: PLC_Tanque_Agua ├─ ID: 1 └─ Tags: ├─ Sensor_Nivel_Alto (X0, Boolean) ├─ Sensor_Nivel_Bajo (X1, Boolean) ├─ Control_Bomba (Y0, Boolean, R/W) ├─ Alarma (Y1, Boolean, R/W) ├─ Temperatura (D100, Word, 0-1000→0-100°C) └─ Setpoint_Temp (D101, Word, R/W)

3. InfeLink - Pantalla Principal:

Lógica de Control Automático (en PLC):

Programa en escalera (Ladder) para Delta PLC: Rung 1 - Encendido automático por nivel bajo: |--[X1]--------[Y0]----(Y0)----| Nivel Bajo Bomba Bomba (Normally (Seal) (Coil) Open) Rung 2 - Apagado por nivel alto: |--[/X0]-----------------------| Nivel Alto (Normally Closed) Rung 3 - Alarma por temperatura alta: |--[D100>D101]----(Y1)----| Temp > Setpoint Alarma Rung 4 - Lectura de temperatura: (Leer sensor analógico y escalar a D100) Operación: - Cuando el nivel baja (X1=1), la bomba arranca (Y0=1) - La bomba se mantiene encendida (self-holding) - Cuando el nivel alto se activa (X0=1), la bomba se detiene - Si la temperatura excede el setpoint, se activa alarma (Y1=1)
Pantalla SCADA final
Figura 20: Pantalla SCADA completa en InfeLink

Flujo de Datos Completo:

  1. PLC → KepServer:
    • KepServer lee tags cada 1000 ms vía Modbus ASCII
    • Direcciones: X0, X1, Y0, D100, etc.
  2. KepServer → OPC:
    • Traduce datos Modbus a formato OPC DA
    • Mantiene calidad y timestamp
  3. OPC → InfeLink:
    • InfeLink se suscribe a tags OPC
    • Recibe actualizaciones en tiempo real
  4. InfeLink → Operador:
    • Muestra datos en pantalla HMI
    • Actualiza animaciones (colores, valores)
    • Genera alarmas si corresponde
  5. Operador → InfeLink:
    • Operador hace clic en botón
    • InfeLink escribe en tag OPC
  6. InfeLink → KepServer → PLC:
    • KepServer recibe escritura OPC
    • Envía comando Modbus Write al PLC
    • PLC actualiza salida Y0

Resumen y Mejores Prácticas

Puntos Clave del Curso:

1. Protocolo Modbus:

2. KepServerEX:

3. InfeLink SCADA:

Mejores Prácticas:

Configuración de Comunicación:

  • ✓ Usar Modbus RTU para rendimiento, ASCII para depuración
  • ✓ Baud rate: 9600 o 19200 (balance velocidad/confiabilidad)
  • ✓ Cable blindado par trenzado para RS485
  • ✓ Terminación de 120Ω en extremos del bus
  • ✓ Direcciones Modbus únicas (1-247)
  • ✓ Response timeout adecuado (1000-3000 ms)

KepServerEX:

  • ✓ Nombres descriptivos para channels, devices, tags
  • ✓ Habilitar diagnostics para troubleshooting
  • ✓ Configurar scan rate apropiado (no más rápido de lo necesario)
  • ✓ Usar scaling en tags analógicos
  • ✓ Documentar direcciones y propósito de cada tag
  • ✓ Backup regular de configuración (.kek file)

InfeLink:

  • ✓ Diseño de pantalla intuitivo y claro
  • ✓ Colores estándar (verde=OK, rojo=alarma, amarillo=advertencia)
  • ✓ Confirmación en botones críticos
  • ✓ Niveles de acceso por usuario
  • ✓ Logging de alarmas y eventos
  • ✓ Pruebas exhaustivas antes de producción

Seguridad:

  • ✓ Proteger escrituras críticas con confirmación
  • ✓ Usar passwords en niveles de acceso
  • ✓ Auditoría de cambios importantes
  • ✓ Backup de configuración y datos históricos
  • ✓ Documentación actualizada del sistema

Errores Comunes a Evitar:

Recursos Adicionales:

¡Gracias por su Atención!

¿Preguntas?

Imagen de cierre
Figura 21: Arquitectura completa del sistema

Resumen del Flujo Completo:

┌─────────────────┐ Modbus ASCII ┌─────────────────┐ │ PLC Delta │◄──────────────────►│ KepServerEX │ │ │ RS485 │ (OPC Server) │ │ - Entradas X │ │ │ │ - Salidas Y │ │ - Channel │ │ - Registros D │ │ - Device │ └─────────────────┘ │ - Tags │ └────────┬────────┘ │ │ OPC DA │ ┌────────▼────────┐ │ InfeLink │ │ (SCADA/HMI) │ │ │ │ - Pantallas │ │ - Animaciones │ │ - Alarmas │ │ - Tendencias │ └─────────────────┘

Temas Vistos:

Protocolo Modbus

  • Definición y características
  • Datagrama ASCII
  • Datagrama RTU
  • Modbus sobre RS485
  • Modbus sobre TCP/IP

KepServerEX

  • Concepto OPC Server
  • Creación de canal serial (ASCII)
  • Creación de dispositivo
  • Tags en Delta PLC
  • Verificación de estado

InfeLink SCADA

  • Creación de botones
  • Configuración de animaciones
  • Importación de tags desde KepServer
  • Ejemplo integrador completo

Próximos Pasos:

  1. Practicar configuración en equipos reales
  2. Experimentar con diferentes tipos de animaciones
  3. Explorar alarmas y tendencias históricas
  4. Implementar seguridad y usuarios
  5. Desarrollar proyectos propios

¡Éxito en sus proyectos de automatización!

Diapositiva 1 de 20