Tutorial

OPC UA con Python

La forma más rápida de entender OPC UA es hablar con un servidor desde el código. Este tutorial usa asyncua (la biblioteca libre y de código abierto opcua-asyncio) para conectar, explorar, leer, escribir y suscribirse: las cuatro cosas que hará el 90% de las veces.

Requisitos previos:Python 3.8+ y cualquier servidor OPC UA al que apuntar (un simulador, el servidor de demostración de open62541 o su PLC). ¿Aún no tiene servidor?herramientas gratuitas y servidores de prueba.

1. Instale

pip install asyncua

2. Conectar y leer un valor

import asyncio
from asyncua import Client

URL = "opc.tcp://localhost:4840/freeopcua/server/"

async def main():
    async with Client(url=URL) as client:
        # Read a node by its NodeId (namespace index + identifier)
        node = client.get_node("ns=2;i=2")
        value = await node.read_value()
        print("Value:", value)

asyncio.run(main())

3. Explore el espacio de direcciones

async with Client(url=URL) as client:
    objects = client.nodes.objects
    for child in await objects.get_children():
        name = await child.read_browse_name()
        print(name)

4. Escribir un valor

from asyncua import ua

async with Client(url=URL) as client:
    node = client.get_node("ns=2;i=3")
    await node.write_value(ua.DataValue(ua.Variant(42.0, ua.VariantType.Double)))
Las escrituras suelen estar bloqueadas por permisos del servidor. Si falla, confirme que el nodo es escribible y que su usuario está autorizado: consultediagnóstico.

5. Suscribirse a cambios de dato

Las suscripciones le empujan las actualizaciones en lugar de sondear: la forma correcta de vigilar un valor.

class Handler:
    def datachange_notification(self, node, val, data):
        print("Change:", node, val)

async with Client(url=URL) as client:
    handler = Handler()
    sub = await client.create_subscription(500, handler)  # 500 ms
    node = client.get_node("ns=2;i=2")
    await sub.subscribe_data_change(node)
    await asyncio.sleep(30)   # keep running to receive changes

Conectar de forma segura

Para Sign & Encrypt, cargue su certificado y su clave antes de conectar:

await client.set_security_string(
    "Basic256Sha256,SignAndEncrypt,client-cert.der,client-key.pem")

El servidor debe confiar en su certificado (moverlo de rejected a trusted). Detalles: seguridad y certificados de OPC UA.

Leer nodos en Python es el paso uno. Convertir ese flujo en acciones priorizadas y con su coste en planta es lo que hace Jemba.

Ver Jemba →

FAQ

¿Qué biblioteca OPC UA de Python debería usar?
asyncua(opcua-asyncio) es la librería asíncrona mantenida activamente y la elección habitual. La antigua síncronapython-opcuaestá obsoleto en su favor.
¿Puedo construir un servidor OPC UA en Python?
Sí: asyncua incluye una implementación completa de servidor, práctica para simuladores y pruebas.
¿Qué es un NodeId?
La dirección única de un nodo, p. ej.ns=2;i=2(índice de espacio de nombres 2, identificador entero 2) ons=3;s=Temperature(identificador de cadena).

Última actualización: 4 de septiembre de 2026 · Recurso educativo. Los nombres de las bibliotecas son marcas comerciales de sus titulares.

Siguiente: OPC UA y PLC (Siemens TIA Portal) →

Descarga gratuita
Lista de comprobación de diagnóstico e integración OPC UA
La lista de comprobación probada en campo que usan los ingenieros para diagnosticar rápido problemas de certificados, puertos y espacios de nombres, más una plantilla de cliente en Python (asyncua).
Obtenga la lista gratuita →
Gratis, sin curso, sin registro