OPC UA

Un cliente OPC UA para servidores de terceros, con confianza gobernada por certificado, direccionamiento por id de nodo y descubrimiento del espacio de direcciones.

Ver como Markdown

El driver OPC UA es un cliente para servidores OPC UA de terceros: PLC, puertas de enlace, historiadores, otros sistemas SCADA, sobre opc.tcp. Es la contraparte saliente del servidor OPC UA integrado que publica el espacio de direcciones propio de esta estación (descrito en Ajustes); los dos comparten la identidad de aplicación de la estación, pero confían en sus pares por separado.

El dispositivo

Campo Significado Valor inicial
Host o IP Nombre DNS, dirección IPv4 o IPv6 del servidor. localhost cuando se deja vacío
Puerto Puerto TCP del punto de conexión. 4840 (un 0 configurado cae en 4840)
Ruta del recurso La ruta del punto de conexión que algunos servidores exigen después del host y el puerto, y que produce opc.tcp://host:puerto/ruta. Déjela vacía cuando el servidor conteste en la raíz. vacía
Seguridad de la sesión Desactivada, la sesión va firmada y cifrada y un equipo que no ofrece nada mejor se rechaza. Permitir una sesión sin seguridad la abre de todos modos, sin cifrar, para un equipo que no anuncia ningún punto de conexión seguro. desactivada
Nombre de usuario / Contraseña La identidad de usuario de la sesión. Un nombre de usuario vacío significa una sesión anónima. La contraseña se protege en reposo con la DPAPI de Windows por usuario y solo se puede leer en la máquina y en la cuenta de Windows que la capturaron. anónima
Intervalo de sondeo (ms) El ritmo de sondeo predeterminado para los tags que no lo invaliden. 1000

La seguridad y los certificados

Conectarse empieza por la lista de puntos de conexión del servidor: el cliente elige el punto de conexión más seguro que anuncia el servidor y autentica la aplicación con el certificado propio de esta estación, la misma identidad de aplicación OPC UA que usa el servidor integrado. Muchos servidores exigen que ese certificado sea de confianza de su lado antes de aceptar la sesión; ese paso se hace en el equipo.

Un equipo que no anuncia nada mejor que un punto de conexión sin seguridad se rechaza, y el dispositivo dice por qué. Esa sesión llevaría las lecturas y las credenciales sin cifrar y no probaría la identidad del equipo, así que solo se abre donde usted la pidió en ese dispositivo: Seguridad de la sesión, Permitir una sesión sin seguridad, en la tarjeta de conexión. La elección pertenece a ese dispositivo, viaja en su dirección como ?security=none y vale tanto para la sesión de lectura como para el recorrido del descubrimiento. Activarla nunca rebaja a un equipo que sí ofrece seguridad: se sigue tomando el punto de conexión más seguro anunciado.

En el otro sentido, la confianza es cerrada por omisión y explícita. El certificado del equipo se verifica antes de que se abra la sesión:

  • Un certificado que esta estación nunca ha aprobado se rechaza, se registra para revisarlo, y el panel del dispositivo muestra un aviso que nombra la aprobación que está esperando: el dispositivo no está "sin conexión", está esperando una decisión.
  • Los certificados se revisan en Ajustes → Acceso de equipos, la mitad saliente de la confianza por certificado: un certificado registrado se queda en Esperando la aprobación hasta que usted lo Apruebe (entonces se pueden abrir sesiones nuevas) o lo Bloquee (se rechaza sin levantar avisos repetidos). Esta es la lista de los equipos; Acceso de clientes, en la misma página, es el otro sentido, quién puede conectarse hacia dentro, al servidor propio de esta estación.
  • Retirar la aprobación, en una fila aprobada, cierra las sesiones vivas que corren sobre ese certificado y lo devuelve a la lista de revisión, para que la siguiente conexión le vuelva a preguntar.
  • Un equipo que no presenta ningún certificado no prueba nada sobre quién respondió, así que no hay nada que aprobar y la sesión se rechaza, con su dirección escrita en el diario. Solo se conecta bajo ese mismo Permitir una sesión sin seguridad, que pasa a hacer las veces de la aprobación.

Aprobar el servidor de un equipo nunca autoriza a ese certificado a conectarse hacia dentro, al servidor propio de esta estación: los dos sentidos guardan almacenes separados a propósito.

El comportamiento de la sesión

Los tags se sondean: cada lectura le pregunta al servidor el valor actual del nodo. El veredicto propio del servidor viaja con cada muestra: un valor sellado como Bad o Uncertain se rechaza y el tag se lee con mala calidad, así que una fuente dudosa nunca se lava para convertirla en una lectura buena. Un nodo que ya no existe en el servidor se lee como sin valor, en lugar de hacer fallar a todo el dispositivo.

La sesión se supervisa con keep-alives; después de tres keep-alives perdidos, el cliente arranca una reconexión automática y sigue adelante. El lazo de reintentos en segundo plano de la aplicación se encarga de la conexión inicial, así que un servidor inalcanzable no cuesta nada al arrancar.

El direccionamiento del tag

Un tag se direcciona por su Id de nodo, escrito como texto libre y enviado tal cual. Las formas aceptadas son las notaciones estándar de OPC UA:

Ejemplo Significado
ns=2;s=Temperature Identificador de texto en el índice de espacio de nombres 2
i=2258 Identificador numérico en el espacio de nombres 0 (aquí: el CurrentTime del servidor)
ns=3;i=1042 Identificador numérico en el índice de espacio de nombres 3
nsu=urn:vendor:app;s=Line1.Speed La forma expandida, que nombra el espacio de nombres por URI en lugar de por índice: robusta frente a los cambios de índice entre reinicios

El tag lee y escribe el atributo Value del nodo.

Los tipos de valor

Tipos ofrecidos
Boolean, Byte, Int16, Int32, Int64, Float, Double y String

Los valores son solo escalares: los arreglos, las estructuras y los demás valores complejos se rechazan por ilegibles en lugar de aplanarse en un número engañoso, y el tag se lee con mala calidad. Un tag así falla por su cuenta; los demás tags del dispositivo siguen leyendo, y nada se reconecta por su causa. Una cadena vacía es un valor, no una falla. Los tipos fuera del conjunto ofrecido (los anchos sin signo, DateTime, Guid, ByteString) no están disponibles en este driver.

Por eso un escaneo de un servidor ofrece menos canales de los que el servidor contiene: un nodo que declara una lista de valores, y un nodo cuyo tipo está fuera del conjunto ofrecido, se quedan fuera. Aun así no se descartan en silencio. El escaneo los cuenta y su mensaje de cierre dice cuántos y de qué tipo, por ejemplo "Se dejaron fuera 5 canal(es): 3 de tipo UInt32 y 2 que contienen una lista de valores en lugar de un valor.", así que una lista corta se lee como una lista corta y no como un controlador pelón.

Las escrituras

Un tag escribible escribe el atributo Value del nodo por el servicio Write de OPC UA. La respuesta del servidor es el veredicto: una escritura rechazada sale a la vista como una falla, y el valor en caché avanza solo cuando se acepta. Como en todos lados, el campo de escritura toma el valor de ingeniería y la cadena de conversión se deshace antes de que se envíe el valor bruto.

El descubrimiento

El comando Descubrir toma un destino en el campo que está a su lado: una dirección de servidor OPC UA como opc.tcp://plc-host:4840. El escaneo tiene dos etapas, y la línea de progreso nombra la que está corriendo:

  1. Puntos de conexión: se consulta el servicio de descubrimiento estándar del destino y cada URL de descubrimiento anunciada se convierte en un punto de conexión candidato. Los puertos y las rutas de servidor propios se conservan en los campos de conexión del candidato.
  2. Canales: el espacio de direcciones de cada candidato se recorre desde la carpeta Objects hacia abajo, y cada variable legible se lista como un tag candidato con su tipo y su acceso. Las áreas de diagnóstico del servidor se saltan.

El recorrido inicia sesión de forma anónima (con la misma selección del punto de conexión más seguro, el mismo rechazo de una sesión sin seguridad y la misma compuerta del certificado del equipo). Un servidor que rechaza las sesiones anónimas, un servidor que no anuncia ningún punto de conexión seguro, o un recorrido que falla por cualquier motivo, deja el punto de conexión igual de agregable con cero tags: agréguelo, ponga las credenciales y la seguridad de la sesión en el dispositivo, y configure los tags a mano. Nada se guarda hasta que usted Agregue un candidato, y cancelar conserva los candidatos que ya estaban completos.

Límites que conviene conocer

  • Las lecturas son sondeos del atributo Value; el driver no crea suscripciones en el servidor remoto.
  • Solo valores escalares: un tag no puede direccionar un elemento de un arreglo ni un campo de una estructura.
  • La compuerta de aprobación se aplica por certificado: un equipo que rota su certificado regresa a la lista de revisión y espera una decisión nueva.