El problema que resolvió OPC-UA
Antes de OPC-UA, cada fabricante de PLCs usaba su protocolo propietario: Siemens con S7 (ISO-on-TCP), Allen-Bradley con EtherNet/IP, Schneider con Modbus TCP, Mitsubishi con MELSEC. Integrar un SCADA con equipos de distintos fabricantes exigía drivers específicos para cada uno, que solo corrían en Windows de 32 bits y dependían de DCOM — una tecnología frágil y difícil de mantener.
OPC Classic (versiones DA, HDA, AE) resolvió parcialmente el problema pero mantuvo la dependencia de Windows y DCOM. OPC-UA (2008) lo resuelve completamente: es multiplataforma (Windows, Linux, ARM, microcontroladores), tiene seguridad integrada en el protocolo (TLS, autenticación de usuario, firma de mensajes) y es semántico — no solo transfiere valores sino que describe su significado.
Cómo funciona: el modelo de Address Space
Un servidor OPC-UA expone un "Address Space" — un árbol de nodos — que representa los datos de la máquina. Cada nodo tiene un identificador único (NodeId), un tipo (Variable, Object, Method) y atributos como valor actual, timestamps de la última modificación, calidad del dato y unidades de ingeniería.
Un cliente OPC-UA puede leer el valor actual de cualquier nodo, escribir en nodos que representan setpoints o comandos, y suscribirse a cambios de valor para recibir notificaciones solo cuando el dato cambia (MonitoredItem + Subscription). Esto elimina el polling continuo y reduce drásticamente el tráfico de red.
- NodeId: identificador único de cada dato (numérico, de cadena o GUID)
- BrowseNames: nombres legibles para navegar el árbol de datos
- DataType: tipo de dato (Float, Int32, Boolean, estructura compleja)
- AccessLevel: permisos de lectura y escritura por nodo
- Engineering Units: unidades de ingeniería embebidas en el nodo
Conectar un PLC Siemens S7-1500 paso a paso
Primero, activar el servidor OPC-UA integrado del S7-1500 desde TIA Portal (disponible desde firmware V2.0). Segundo, configurar qué bloques de datos (DB) son visibles para clientes OPC-UA y asignar permisos de lectura/escritura por nodo. Tercero, en el software cliente usar una librería OPC-UA: asyncua para Python, node-opcua para Node.js, o el SDK oficial de Unified Automation para .NET.
El endpoint de conexión tiene la forma opc.tcp://192.168.1.100:4840. Tras autenticarse, el cliente navega el Address Space, localiza los nodos que necesita y crea suscripciones para recibir cambios en tiempo real. Para un Allen-Bradley ControlLogix, el proceso es similar a través de Logix Designer con el módulo opcional de servidor OPC-UA.
OPC-UA frente a MQTT: cuándo usar cada uno
Ambos son ampliamente usados en IIoT pero con propósitos distintos. OPC-UA es rico en semántica (tipos, unidades, historial), bidireccional (lectura y escritura de setpoints) y tiene descubrimiento de datos nativo. MQTT es ligero, unidireccional por defecto, sin semántica nativa y óptimo para enviar grandes volúmenes de datos de sensores a un broker cloud.
La combinación más eficiente en arquitecturas industriales modernas es OPC-UA del PLC al gateway edge (para aprovechar la semántica y la escritura bidireccional) y MQTT del gateway al cloud (para aprovechar el bajo ancho de banda y la facilidad de integración con plataformas cloud como AWS IoT Core o Azure IoT Hub). Exactamente la arquitectura que usa HydroNet.