DESGUACE

San Francisco

Servidor de Simulación OPC UA en Linux: Una Guía Completa para el Desarrollo y Pruebas

El desarrollo de aplicaciones cliente OPC, especialmente en el ámbito de la automatización industrial, presenta un desafío común y significativo: la falta de acceso al hardware físico de los PLC (Controladores Lógicos Programables) durante las fases iniciales de diseño y prueba. Esta limitación puede ralentizar considerablemente el ciclo de desarrollo, retrasar la implementación de prototipos y, en última instancia, afectar la eficiencia del proyecto. La solución a este obstáculo reside en la utilización de software de servidor OPC que incorpore capacidades de simulación integradas. Estos servidores permiten la creación de "tags virtuales" que emulan el comportamiento de los puntos de datos reales de un PLC. Al hacerlo, brindan a los desarrolladores un entorno controlado para probar exhaustivamente las operaciones de lectura y escritura, verificar la lógica de manejo de datos y prototipar interfaces HMI (Interfaz Hombre-Máquina) y SCADA (Supervisión, Control y Adquisición de Datos) antes de que el hardware de producción esté disponible o sea accesible.

La Importancia de los Servidores de Simulación OPC UA en Linux

La plataforma Linux se ha convertido en un pilar fundamental en la infraestructura de automatización industrial moderna, gracias a su estabilidad, flexibilidad y naturaleza de código abierto. La capacidad de ejecutar servidores OPC UA directamente en Linux simplifica la arquitectura de sistemas, reduce costos de licenciamiento y abre un abanico de posibilidades para el despliegue de soluciones de Industria 4.0. Los servidores de simulación OPC UA en Linux son herramientas indispensables que permiten a los ingenieros y desarrolladores:

  • Acelerar el Desarrollo: Crear y probar aplicaciones cliente sin depender de la disponibilidad de hardware físico.
  • Reducir Costos: Evitar la necesidad de adquirir hardware de PLC costoso para tareas de desarrollo y prueba.
  • Mejorar la Calidad del Software: Identificar y corregir errores de lógica, conectividad y manejo de datos en una etapa temprana.
  • Facilitar la Colaboración: Permitir que múltiples desarrolladores trabajen simultáneamente en diferentes partes de un proyecto.
  • Aprender y Experimentar: Proporcionar un entorno seguro para explorar las funcionalidades de OPC UA y desarrollar modelos de información sin riesgo de dañar equipos reales.

Diagrama de flujo que muestra el ciclo de desarrollo de aplicaciones cliente OPC con y sin servidor de simulación

Opciones Populares de Servidores de Simulación OPC UA

Existen diversas soluciones de software que ofrecen funcionalidades de servidor OPC UA con capacidades de simulación, cada una con sus propias fortalezas y consideraciones. La elección de la herramienta adecuada dependerá de los requisitos específicos del proyecto, el presupuesto y el nivel de experiencia del equipo.

KEPServerEX (Kepware)

Considerada una de las soluciones comerciales más ampliamente utilizadas en la industria, KEPServerEX de Kepware ofrece un entorno robusto para la comunicación industrial. Dentro de su conjunto de herramientas, el Controlador de Simulador integrado es clave para la simulación de PLC. Este controlador permite la creación de tags virtuales con comportamientos configurables, abarcando desde señales básicas hasta patrones de datos más complejos.

  • Controlador de Simulador: Permite la generación de señales de onda sinusoidal, onda cuadrada, rampas y valores aleatorios. Estos son fundamentales para emular entradas analógicas y discretas de un PLC.
  • Complemento de Tags Avanzados: Amplía las capacidades del simulador al permitir la implementación de lógica matemática, operaciones booleanas y conversiones de datos entre diferentes tipos. Esto es crucial para simular el procesamiento de datos dentro de un PLC.
  • Client Ace: Un wrapper de API OPC .NET que facilita el desarrollo de aplicaciones cliente para interactuar con KEPServerEX. Aunque se enfoca en OPC DA, su utilidad para la integración con clientes .NET es considerable.
  • Versiones: KEPServerEX se ofrece en diferentes ediciones, como Professional, Plus y Ex (Enterprise), cada una adaptada a distintas necesidades de escalabilidad y funcionalidad.

Configuración del Simulador KEPServerEX (Ejemplo en Windows)

Aunque el enfoque principal es Linux, es importante entender la configuración general de herramientas populares como KEPServerEX, ya que los principios son transferibles.

  • Paso 1: Instalación y Licenciamiento:

    • Descargar la versión de prueba o la licencia completa de KEPServerEX.
    • Ejecutar el instalador, seleccionando una instalación "Personalizada" para asegurarse de que el Controlador de Simulador esté incluido.
    • Aplicar la licencia.
  • Paso 2: Configuración del Controlador de Simulador:

    • Abrir la aplicación de configuración de KEPServerEX.
    • Hacer clic derecho en "Dispositivo" y seleccionar "Agregar Dispositivo".
    • Elegir el controlador "Simulator" de la lista proporcionada.
    • Asignar un nombre al dispositivo (ej., "Sim_PLC").
    • Configurar los parámetros del canal. Es importante notar que el controlador de simulador crea tags predeterminados automáticamente. Para una simulación personalizada, se pueden utilizar los Tags Avanzados o crear tags manualmente, utilizando el controlador de simulador como la fuente de datos.
  • Paso 3: Creación de Tags Simulados Personalizados:

    • Dentro del dispositivo Simulador configurado, se pueden agregar tags con propiedades específicas:
      • Sinusoidal_AI: Tipo REAL, Modo Simulador: Onda Sinusoidal. Simula una onda sinusoidal continua con un rango configurable (ej., -100 a 100).
      • Square_AI: Tipo INT, Modo Simulador: Onda Cuadrada. Genera una señal alterna (ej., 0/1) con un período configurable.
      • Random_AI: Tipo REAL, Modo Simulador: Aleatorio. Produce un valor aleatorio dentro de un rango especificado.
      • Ramp_AI: Tipo INT, Modo Simulador: Rampa. Simula un contador incremental que se reinicia al alcanzar un límite.
      • DI_1: Tipo BOOL, Modo Simulador: Estático/Dinámico. Simula una entrada discreta, útil para estados binarios.
      • DO_1: Tipo BOOL, Modo Simulador: Lectura-Escritura. Representa una salida discreta que el cliente puede escribir, simulando el control de un actuador.
  • Paso 4: Configuración de Seguridad y Acceso OPC:

    • Acceder a las propiedades del servidor y navegar a la pestaña OPC.
    • Asegurarse de que la "Configuración DCOM" (para OPC DA) esté correctamente configurada para permitir acceso local y remoto según sea necesario.
    • Configurar los permisos de usuario para las conexiones de los clientes.
    • Establecer las opciones de conectividad, habilitando "OPC DA" y/o "OPC UA" según los protocolos que la aplicación cliente utilizará.

OpenOpcUa

Para aquellos que buscan una solución de código abierto, OpenOpcUa representa una implementación de OPC UA que incluye nodos de simulación integrados. Si bien es gratuito, su configuración puede requerir un nivel de experiencia técnica mayor en comparación con las soluciones comerciales. Su naturaleza de código abierto permite una mayor personalización y la integración profunda en sistemas existentes.

Matrikon OPC Explorer

Matrikon ofrece un cliente OPC gratuito que incluye capacidades básicas de simulación. Esta herramienta es ideal para realizar pruebas rápidas de conectividad y validar la funcionalidad básica de un servidor OPC UA simulado, sin la necesidad de desarrollar código cliente complejo.

Prosys OPC UA Simulation Server

Este simulador OPC UA comercial está diseñado específicamente para probar aplicaciones cliente OPC UA y para aprender la tecnología. Soporta todas las características esenciales de OPC UA, incluyendo la creación de modelos de información, que son un componente importante del Reference Architecture Model for Industry 4.0 (RAMI 4.0).

  • Modelos de Información: Permite desarrollar y probar modelos de información sin necesidad de hardware real.
  • Generación de Datos: Incluye señales de simulación predefinidas que pueden conectarse a cualquier variable, simulando datos de equipos reales, especialmente con la ayuda de modelos de información.
  • Conectividad y Seguridad: Soporta múltiples tipos de conexión y todos los modos y políticas de seguridad estándar de OPC UA, facilitando las pruebas con diversas aplicaciones cliente.
  • Certificación: Ha sido certificado por la OPC Foundation como compatible con OPC UA.
  • Disponibilidad: Se puede adquirir una licencia Profesional o descargar una versión gratuita.

Uso de Prosys OPC UA Simulation Server en un Entorno Mixto (Windows/Linux)

Un escenario común implica ejecutar el servidor de simulación en una máquina con Windows (ej., PC W10) y la aplicación cliente HMI/SCADA en un dispositivo Linux (ej., reComputer R1000).

  • Configuración del Servidor de Simulación (Prosys OPC UA Simulation Server en Windows):

    • Instalar y configurar el servidor, definiendo los puntos de datos y las señales de simulación deseados.
    • Asegurarse de que la configuración de red permita el acceso desde la máquina Linux.
  • Configuración del Cliente (FUXA en Linux):

    • FUXA es un software de visualización de procesos basado en web (SCADA/HMI/Dashboard) que puede ejecutarse en Linux.
    • Requisitos: Necesita tener instalado Node.js (versiones 14, 16 o 18 son recomendadas).
    • Paso 1: Obtener la Dirección de Conexión: Copiar la "Connection Address (UA TCP)" del servidor OPC UA simulado (ej., opc.tcp://<IP_del_Servidor_Windows>:49320).
    • Paso 2: Configurar la Conexión en FUXA:
      • En la interfaz de FUXA, hacer clic en el botón "+" para agregar un nuevo dispositivo.
      • Ingresar un "Name" descriptivo.
      • Seleccionar "OPCUA" como "Type".
      • Pegar la "Connection Address" copiada en el campo "Address".
      • Seleccionar el modo de seguridad ("Security and encryption mode") según los requisitos del servidor (ej., "None-None" si no hay seguridad configurada). Si se requiere autenticación, ingresar "Username" y "Password".
      • Hacer clic en "OK".
    • Paso 3: Crear Etiquetas para Mostrar Datos:
      • Entrar a la interfaz de configuración de FUXA.
      • Hacer clic en el botón "+" para agregar una etiqueta.
      • Navegar a través de las jerarquías del servidor OPC UA (Objects, Type, Views) hasta encontrar los datos simulados (ej., bajo la categoría "Simulation" en Prosys).
      • Seleccionar los datos deseados y crear etiquetas correspondientes para visualizarlos.
      • Hacer clic en "OK".

Captura de pantalla de la interfaz de configuración de FUXA mostrando la conexión a un servidor OPC UA

Desarrollo de Clientes OPC .NET

Para interactuar programáticamente con los servidores OPC UA, especialmente en un entorno de desarrollo .NET, existen varias aproximaciones.

Opción A: Kepware Client Ace

Client Ace proporciona un wrapper .NET para facilitar la conectividad con servidores OPC DA. Aunque no es directamente para OPC UA, puede ser útil en escenarios donde se requiere compatibilidad con ambos protocolos o se trabaja en un entorno que aún utiliza OPC DA.

// Implementación Básica de Client Aceusing OPCDA.NET;public class OpcClient{ private DaServer _server; private OpcItemCollection _items; public void Connect(string serverId, string host) { _server = new DaServer(serverId, host); _server.Connect(); } public void AddItems(string[] tagNames) { OpcItem[] items = new OpcItem[tagNames.Length]; for (int i = 0; i < tagNames.Length; i++) { // Asumiendo que el servidor OPC DA es KEPServerEX y el dispositivo es "Sim_PLC" items[i] = new OpcItem("Sim_PLC." + tagNames[i], true, ""); } _items = _server.AddItems(items); } public object Read(string tagName) { // Para simplificar, asumimos que solo leemos el primer item añadido. // En una aplicación real, se mapearía el tagName al índice correcto. ItemValueResult[] values = _server.Read(_items); return values[0].Value; } public void Write(string tagName, object value) { // Similar a Read, se necesitaría mapear el tagName al item correcto. _server.Write("Sim_PLC." + tagName, value); }}

Opción B: API .NET de OPC Foundation

Las bibliotecas oficiales de la OPC Foundation son la opción estándar para desarrollar clientes OPC UA en .NET. Estas bibliotecas soportan completamente el estándar OPC UA.

// Cliente OPC UA .NET (Biblioteca OPC UA NetStandard)using Opc.Ua;using Opc.Ua.Client;using System.Threading.Tasks;public class UaClient{ private Session _session; public async Task Connect(ApplicationConfiguration config, string endpointUrl) { var selectedEndpoint = CoreClientUtils.SelectEndpoint(endpointUrl, true); // True para usar HTTPS si está disponible var binding = EndpointConfiguration.Create(config); var endpointUri = new Uri(selectedEndpoint.EndpointUrl); // Configuración de la identidad del usuario (ej., anónimo) var userIdentity = new UserIdentity(new AnonymousIdentityToken()); _session = await Session.Create(config, binding, endpointUri, false, "OPC Simulator Client", 60000, userIdentity); } public DataValue ReadNode(string nodeId) { // NodeId puede ser una cadena (ej., "ns=2;s=MyVariable") o un objeto NodeId return _session.Read(null, 0, Attributes.Value, new NodeId(nodeId)); } public void WriteNode(string nodeId, Variant value) { var writeValue = new WriteValue { NodeId = new NodeId(nodeId), AttributeId = Attributes.Value, Value = new DataValue(value) // DataValue envuelve el Variant }; _session.Write(null, new WriteValueCollection { writeValue }); } public void Subscribe(string nodeId, Action<DataValue> callback) { var subscription = new Subscription(null) { PublishingInterval = 1000 }; // Intervalo de 1 segundo var itemToCreate = new MonitoredItem(subscription.SubscriptionId, new NodeId(nodeId), Attributes.Value); subscription.AddItem(itemToCreate); // Crear la suscripción en el servidor var subscriptionResult = _session.CreateSubscription(subscription); var itemResult = subscriptionResult.Results[0]; var monitoredItemResult = subscriptionResult.DiagnosticInfos[0]; // Configurar el callback para cuando se reciben datos itemToCreate.DataChangeNotification += (item, e) => { callback(e.DataValue); }; // Iniciar la publicación de datos _session.Publish(new PublishRequest { SubscriptionRequests = new SubscriptionRequestCollection { new SubscriptionRequest { SubscriptionId = subscriptionResult.SubscriptionId } } }); }}

Los fundamentos de OPC UA: Todo lo que necesitas saber

Patrones Comunes de Simulación

Los servidores de simulación permiten replicar una amplia gama de escenarios de automatización industrial mediante patrones de datos específicos:

  • Valor de Proceso: Simulación de sensores analógicos (temperatura, presión, flujo). Se pueden usar ondas sinusoidales con ruido agregado para simular variaciones realistas.
  • Control de Nivel: Simulación del nivel de un tanque con entradas (válvulas de entrada) y salidas (válvulas de drenaje). Esto a menudo implica un acumulador con límites y rampas para simular la tasa de llenado o vaciado.
  • Estado de Alarma: Generación de alarmas basadas en umbrales. Se compara un tag de valor de proceso con tags de umbral (alto/bajo) para generar alarmas booleanas.
  • Secuencia de Eventos: Simulación de procesos por lotes o secuencias de operación. Se utilizan contadores de pasos, temporizadores y transiciones de estado para emular la progresión de un proceso.
  • Estado de Equipo: Representación de los diferentes modos de operación de una máquina (Manual, Automático, Parada). Un tag de tipo INT puede mapearse a valores enumerados (enum) para representar estos estados.

Simulación Avanzada Basada en Lógica

Para simulaciones más complejas que van más allá de las señales predefinidas, los servidores como KEPServerEX ofrecen la capacidad de definir lógica directamente en los tags.

Ejemplo: Simulación de Nivel de Tanque con Lógica

  • Tag Principal: Tank_Level (Tipo: REAL).

  • Lógica de Simulación (ejemplo conceptual):

    IF Inlet_Valve_Open THEN Tank_Level = Tank_Level + (Inlet_Flow_Rate * Delta_Time)ELSE IF Drain_Valve_Open THEN Tank_Level = Tank_Level - (Drain_Flow_Rate * Delta_Time)END IF// Ajustar el nivel dentro de los límites del tanque (ej., 0 a 100)IF Tank_Level < 0 THEN Tank_Level = 0IF Tank_Level > 100 THEN Tank_Level = 100
  • Tags de Alarma Derivados:

    • High_Level_Alarm (Tipo: BOOL): Tank_Level > 90
    • Low_Level_Alarm (Tipo: BOOL): Tank_Level < 10

Esta capacidad de definir lógica permite simular comportamientos de proceso intrincados sin necesidad de un PLC físico.

Consideraciones sobre la Conversión de Datos (JSON a OPC UA vía MQTT)

En arquitecturas modernas, es común recibir datos de dispositivos IoT o sistemas de control en formato JSON a través de protocolos como MQTT, y luego exponerlos a través de OPC UA. Sin embargo, este proceso puede presentar desafíos:

  • Tipos de Datos: La inferencia automática de tipos de datos a partir de valores JSON puede no ser siempre precisa. Por ejemplo, los campos de fecha y hora (datetime) pueden ser procesados como cadenas de texto, lo que requiere una conversión explícita.
  • Falta de Type Hinting: La ausencia de indicaciones de tipo explícitas en el JSON puede llevar a interpretaciones erróneas por parte del sistema que convierte los datos a OPC UA.
  • Problemas de Decodificación: Si el decodificador no se adhiere estrictamente a los estándares, pueden surgir problemas de compatibilidad al interpretar el JSON.

Una solución comercial como KEPServerEX, con su cliente MQTT integrado, puede facilitar esta conversión, ya que está diseñado para mapear mensajes entrantes a un espacio de direcciones OPC UA de manera más automatizada.

Solución de Problemas Comunes

Al trabajar con servidores de simulación OPC y clientes, pueden surgir diversos problemas. Aquí se detallan algunos de los más frecuentes:

Problemas de Conectividad OPC DA

  • Error 80070005 (Acceso Denegado): Este error generalmente indica problemas con los permisos DCOM. Es necesario ejecutar la herramienta dcomcnfg (Configuración de Componentes de DCOM), habilitar DCOM y configurar adecuadamente los niveles de autenticación y los permisos para el usuario que accede al servidor OPC.
  • Error 80040154 (Clase No Registrada): Sugiere que el servidor OPC no está instalado correctamente o existe una incompatibilidad entre la arquitectura del cliente y el servidor (por ejemplo, un cliente de 32 bits intentando conectarse a un servidor de 64 bits o viceversa). Asegurarse de que el servidor esté registrado en el sistema y que las arquitecturas coincidan.
  • Error 80010107 (Desconocido): Puede deberse a que el servidor OPC está sobrecargado o a tiempos de espera de red. Intentar aumentar los valores de tiempo de espera en la configuración del cliente o del servidor.

Problemas de Rendimiento

  • Tasas de Actualización Excesivas: Las tasas de actualización predeterminadas (a menudo 100 ms) para los tags de simulación pueden ser demasiado rápidas y consumir recursos innecesariamente. Reducir la tasa de actualización a valores más realistas (ej., 500 ms, 1 segundo) puede mejorar significativamente el rendimiento.
  • Uso de Grupos de Suscripción: En lugar de sondear constantemente los valores de los tags (polling), es más eficiente utilizar grupos de suscripción. Esto permite al servidor notificar al cliente solo cuando los valores cambian, reduciendo la carga de red y del servidor.
  • Limitación de Elementos Activos: Limitar el número de elementos (tags) activos en cada suscripción del cliente puede prevenir la sobrecarga del servidor y mejorar la estabilidad.

Procedimiento de Verificación y Validación

Una vez configurado el servidor de simulación, es crucial seguir un proceso de verificación para asegurar su correcto funcionamiento:

  1. Iniciar el Servidor: Asegurarse de que el servidor OPC (ej., KEPServerEX) esté en ejecución y que el dispositivo simulador esté marcado como "Ejecutando".
  2. Verificar Conectividad con Cliente de Prueba: Utilizar una herramienta como OPC Quick Client (incluida con KEPServerEX) o Matrikon OPC Explorer para conectarse al servidor y verificar que los tags simulados sean visibles y accesibles.
  3. Conectar el Cliente .NET: Iniciar la aplicación cliente desarrollada (usando Client Ace o la API de OPC Foundation) y establecer la conexión con el servidor OPC.
  4. Suscribirse a Tags: Crear suscripciones para los tags simulados de interés y observar las actualizaciones de datos.
  5. Verificar Valores: Confirmar que los valores leídos por el cliente coincidan con las salidas esperadas del simulador (ej., valores sinusoidales, rampas, etc.).
  6. Probar Escritura: Si se han configurado tags de tipo "Lectura-Escritura" (como DO_1), probar a escribir valores en ellos desde el cliente y verificar que el servidor los acepte y los refleje correctamente.
  7. Monitoreo a Largo Plazo: Dejar el sistema funcionando y monitorear las actualizaciones de datos en tiempo real durante un período prolongado (ej., 5 minutos o más) para detectar cualquier inestabilidad o problema de rendimiento.

Recomendaciones para la Elección de Soluciones

  • Para Desarrolladores Individuales o Equipos Pequeños:

    • KEPServerEX: La versión de prueba de 30 días ofrece una funcionalidad completa para evaluación y desarrollo de prototipos.
    • OpenOpcUa: Una opción gratuita si solo se necesita el protocolo OPC UA y se tiene la capacidad de configurar y mantener la solución.
    • Matrikon OPC Explorer: Útil para pruebas rápidas y validación de conectividad sin costo.
  • Para Implementaciones en Producción:

    • La implementación en entornos de producción generalmente requiere la adquisición de licencias comerciales para software como KEPServerEX o Prosys OPC UA Simulation Server, garantizando soporte técnico, mantenimiento y cumplimiento normativo.
    • La elección entre KEPServerEX y Prosys OPC UA Simulation Server dependerá de la plataforma de destino (Linux vs. Windows), las características específicas requeridas (ej., modelos de información avanzados) y el presupuesto.

La adopción de servidores de simulación OPC UA en plataformas Linux no solo simplifica el desarrollo y las pruebas, sino que también allana el camino hacia sistemas de automatización industrial más eficientes, robustos y conectados.

tags: #opc #ua #simulation #server #linux

Publicaciones populares: