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.
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:
- 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.
- 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.