Tutoriel

OPC UA avec Python

Le moyen le plus rapide de comprendre OPC UA est de dialoguer avec un serveur en code. Ce tutoriel utilise asyncua (la bibliothèque libre et open source opcua-asyncio) pour se connecter, parcourir, lire, écrire et s'abonner: les quatre choses que vous ferez 90 % du temps.

Prérequis :Python 3.8+, et n'importe quel serveur OPC UA à interroger (un simulateur, le serveur de démonstration open62541, ou votre PLC). Pas encore de serveur ? Voiroutils gratuits & serveurs de test.

1. Installer

pip install asyncua

2. Se connecter et lire une valeur

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. Parcourir l'espace d'adressage

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. Écrire une valeur

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)))
Les écritures sont souvent bloquées par les droits du serveur. En cas d'échec, vérifiez que le nœud est inscriptible et que votre utilisateur est autorisé: voirdépannage.

5. S'abonner aux changements de valeur

Les abonnements vous poussent les mises à jour au lieu de scruter: la bonne façon de surveiller une valeur.

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

Se connecter en sécurité

Pour Sign & Encrypt, chargez votre certificat et votre clé avant de vous connecter :

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

Le serveur doit approuver votre certificat (le déplacer de rejected vers trusted). Détails : Sécurité & certificats OPC UA.

Lire des nœuds en Python n'est que la première étape. Transformer ce flux en actions hiérarchisées et chiffrées à l'atelier, c'est ce que fait Jemba.

Voir Jemba →

FAQ

Quelle bibliothèque OPC UA Python utiliser ?
asyncua(opcua-asyncio) est la bibliothèque asynchrone activement maintenue et le choix habituel. L'ancienne, synchrone,python-opcuaest déprécié à son profit.
Puis-je créer un serveur OPC UA en Python ?
Oui: asyncua comprend une implémentation serveur complète, pratique pour les simulateurs et les tests.
Qu'est-ce qu'un NodeId ?
L'adresse unique d'un nœud, par ex.ns=2;i=2(indice de namespace 2, identifiant entier 2) ouns=3;s=Temperature(identifiant de type chaîne).

Dernière mise à jour le 4 septembre 2026 · Ressource pédagogique. Les noms de bibliothèques sont des marques de leurs titulaires.

Suite : OPC UA & automates (Siemens TIA Portal) →

Téléchargement gratuit
Check-list de dépannage & d'intégration OPC UA
La checklist éprouvée sur le terrain que les ingénieurs utilisent pour diagnostiquer rapidement les problèmes de certificats, de ports et de namespace, plus un modèle de client Python (asyncua).
Obtenir la checklist gratuite →
Gratuit, sans cours, sans connexion