OPC UA

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

Ver como Markdown

El controlador OPC UA es un cliente de servidores OPC UA de terceros (autómatas, pasarelas, historiadores, otros sistemas SCADA) sobre opc.tcp. Es la contrapartida 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 interlocutores por separado.

Dispositivo

Campo Significado Por defecto
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 recae en 4840)
Ruta del recurso La ruta del punto de conexión que algunos servidores exigen tras el host y el puerto, produciendo opc.tcp://host:port/path. Déjela vacía cuando el servidor responda 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 igualmente, 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 con la cuenta de Windows que la escribió. anónima
Intervalo de sondeo (ms) Ritmo de sondeo por defecto para los tags que no lo sustituyen. 1000

Seguridad y certificados

Conectar empieza por la lista de puntos de conexión del servidor: el cliente elige el punto de conexión más seguro que el servidor anuncia 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 esté aprobado en su lado antes de aceptar la sesión; ese paso se da 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 explícita y cerrada por defecto. El certificado del equipo se comprueba antes de que se abra la sesión:

  • Un certificado que esta estación nunca ha aprobado se rechaza, se anota para revisarlo, y el panel del dispositivo muestra un aviso que nombra la aprobación que espera: el dispositivo no está "sin conexión", está esperando una decisión.
  • Los certificados se revisan en Ajustes → Acceso a los equipos, la mitad saliente de la confianza por certificado: un certificado anotado se queda en A la espera de aprobación hasta que usted pulse Aprobar (ya pueden abrirse sesiones nuevas) o Bloquear (se rechaza sin volver a preguntar una y otra vez). 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 con ese certificado y lo devuelve a la lista de revisión, así que la próxima conexión le vuelve 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 mantienen almacenes separados a propósito.

El comportamiento de la sesión

Los tags se sondean: cada lectura pregunta al servidor por el valor actual del nodo. El veredicto del propio servidor viaja con cada muestra: un valor sellado como Malo o Incierto se rechaza y el tag se lee con mala calidad, así que un origen dudoso nunca se blanquea en una lectura buena. Un nodo que ya no existe en el servidor se lee como sin valor, en lugar de tumbar el dispositivo entero.

La sesión se supervisa con mensajes de mantenimiento; tras tres de ellos perdidos, el cliente arranca una reconexión automática y sigue adelante. El bucle de reintento en segundo plano de la aplicación es el dueño de la conexión inicial, así que un servidor inalcanzable no cuesta nada en el arranque.

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 OPC UA estándar:

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 Forma extendida que nombra el espacio de nombres por URI en vez de por índice, robusta ante los cambios de índice entre reinicios

El tag lee y escribe el atributo Value del nodo.

Tipos de valor

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

Los valores son solo escalares: las matrices, las estructuras y otros valores complejos se rechazan como 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 él. Una cadena vacía es un valor, no un fallo. Los tipos que quedan fuera del conjunto ofrecido (los anchos sin signo, DateTime, Guid, ByteString) no están disponibles en este controlador.

Una exploración de un servidor ofrece, por tanto, menos canales de los que el servidor tiene: se queda fuera un nodo que declara una lista de valores, y también un nodo cuyo tipo queda fuera del conjunto ofrecido. Pero no se descartan en silencio. La exploración 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, 2 que contienen una lista de valores en vez de un valor.", para que una lista corta se lea como una lista corta y no como un autómata pelado.

Escrituras

Un tag con escritura escribe el atributo Value del nodo por el servicio Write de OPC UA. La respuesta del servidor es el veredicto: una escritura rechazada aflora como un fallo, y el valor en caché solo avanza si se acepta. Como en todas partes, 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.

Descubrimiento

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

  1. Puntos de conexión: se pregunta al servicio de descubrimiento estándar del destino y toda URL de descubrimiento anunciada se convierte en un punto de conexión candidato. Los puertos y las rutas de servidor personalizados van y vuelven hacia 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 toda 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 elección del punto de conexión más seguro, el mismo rechazo de una sesión sin seguridad y la misma puerta 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 igualmente añadible con cero tags: añádalo, ponga las credenciales y la seguridad de la sesión en el dispositivo y configure los tags a mano. Nada se guarda hasta que se pulsa Añadir en un candidato, y cancelar conserva los candidatos que ya estaban completos.

Límites que conviene conocer

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