Guide OPC-UA complet pour l'industrie : architecture, sécurité, implémentation
OPC-UA (OPC Unified Architecture) est devenu le protocole de référence pour l'interopérabilité dans l'industrie 4.0. Pourtant, sa complexité apparente freine encore beaucoup d'implémentations. Ce guide pratique démystifie OPC-UA : architecture, sécurité, NodeId, implémentation Python/Node.js, et intégration cloud.
- Qu'est-ce qu'OPC-UA et pourquoi ça compte ?
- Architecture OPC-UA : les concepts fondamentaux
- Sécurité OPC-UA : le guide complet
- Implémenter OPC-UA en Python
- Implémenter OPC-UA en Node.js
- OPC-UA sur les principaux automates industriels
- OPC-UA PubSub : l'extension pour le cloud
- Migration OPC-DA vers OPC-UA
- OPC-UA avec le Gateway Eziwan
- FAQ — OPC-UA
- Pour aller plus loin
- Ressources complémentaires
Qu'est-ce qu'OPC-UA et pourquoi ça compte ?
OPC-UA (IEC 62541) est un protocole de communication indépendant de la plateforme, conçu pour l'échange sécurisé de données industrielles. Contrairement à son prédécesseur OPC-DA (Windows only, DCOM), OPC-UA fonctionne sur n'importe quel OS (Linux, Windows, embedded RTOS) et sur n'importe quel réseau (Ethernet, 4G, Wi-Fi).
Pourquoi OPC-UA domine l'industrie 4.0
- Interopérabilité : un serveur Siemens S7-1500 OPC-UA est lisible sans driver propriétaire par n'importe quel client conforme
- Modèle d'information : les données ont un sens (unité, description, historique), pas seulement une valeur
- Sécurité native : chiffrement, authentification, certificats — intégrés dans le protocole
- Profils de conformité : un sous-ensemble léger pour les petits équipements embedded
- Pubsub & MQTT : extension OPC-UA Pub/Sub pour architectures cloud (IEC 62541-14)
Architecture OPC-UA : les concepts fondamentaux
Client-Serveur
Le modèle de base OPC-UA est client-serveur :
- Serveur OPC-UA : exposé par l'équipement (PLC, IHM, serveur de données)
- Client OPC-UA : consomme les données (SCADA, gateway, application cloud)
Un même équipement peut être serveur et client simultanément (ex. gateway qui agrège plusieurs PLCs et expose les données consolidées).
Address Space et NodeId
L'Address Space est l'arbre d'information exposé par un serveur OPC-UA. Chaque nœud a un NodeId unique :
Format NodeId :
ns=2;i=1234— namespace 2, identifiant entier 1234ns=2;s=Station_1.Pression— namespace 2, identifiant chaînens=0;i=2258— namespace 0 (standard), ServerStatus
Namespaces :
ns=0: namespace OPC-UA standard (types, méthodes)ns=1: souvent le namespace constructeurns=2+: namespaces applicatifs (vos données)
Modes de communication
| Mode | Description | Cas d'usage |
|---|---|---|
| Read | Lecture ponctuelle d'un nœud | Polling toutes les N secondes |
| Subscription | Abonnement à des changements (MonitoredItem) | Événements, alarmes |
| Browse | Exploration de l'Address Space | Configuration, discovery |
| Write | Écriture d'une valeur | Setpoints, commandes |
| Method Call | Appel de méthode | Actions complexes |
| Pubsub | Publication/abonnement MQTT ou UDP | Architectures cloud massives |
Les Subscriptions sont la bonne approche pour la supervision temps réel : au lieu de poller toutes les secondes, le client s'abonne à un nœud et reçoit une notification uniquement quand la valeur change au-delà d'un seuil configurable (DeadbandValue).
Sécurité OPC-UA : le guide complet
La sécurité est l'un des points forts d'OPC-UA — et aussi l'une des sources de complexité. Voici les concepts essentiels.
Modes de sécurité
| Mode | Confidentialité | Intégrité | Authentification | Usage |
|---|---|---|---|---|
None | Aucune | Aucune | Aucune | Tests, réseau isolé |
Sign | Non | Signature | Certificat | Réseau sécurisé |
SignAndEncrypt | AES-256 | Signature | Certificat | Internet, cloud |
Ne jamais utiliser SecurityMode: None en production sur un réseau accessible depuis l'extérieur.
Certificats X.509
OPC-UA utilise des certificats X.509 pour l'authentification mutuelle client-serveur :
Création d'un certificat auto-signé pour tests :
# Avec OpenSSL
openssl req -x509 -nodes -days 3650 -newkey rsa:2048 \
-keyout client_key.pem -out client_cert.pem \
-subj "/CN=EziwanGateway/O=Eziwan/C=FR" \
-extensions v3_req \
-config <(cat /etc/ssl/openssl.cnf; echo "[v3_req]"; echo "subjectAltName=URI:urn:eziwan:gateway:client")
En production : utiliser une PKI interne ou un CA reconnu. Les certificats doivent être échangés manuellement entre client et serveur la première fois.
Authentification utilisateur
En plus des certificats machine, OPC-UA gère l'authentification utilisateur :
- Anonymous : pas d'authentification (si autorisé par le serveur)
- Username/Password : login applicatif
- Certificate : certificat utilisateur X.509
- IssuedToken : token JWT ou Kerberos
Implémenter OPC-UA en Python
La bibliothèque python-opcua (ou sa fork asyncua) est la référence en Python.
Installation
pip install asyncua
Client OPC-UA Python — lire des données
import asyncio
from asyncua import Client
async def main():
url = "opc.tcp://192.168.1.10:4840/freeopcua/server/"
async with Client(url=url) as client:
# Lire un nœud par NodeId
node = client.get_node("ns=2;s=Station_1.Pression")
value = await node.read_value()
print(f"Pression: {value} bar")
# Lire plusieurs nœuds en batch
nodes = [
client.get_node("ns=2;s=Station_1.Pression"),
client.get_node("ns=2;s=Station_1.Debit"),
client.get_node("ns=2;s=Station_1.Defaut"),
]
values = await client.read_values(nodes)
for node, val in zip(nodes, values):
print(f" {node}: {val}")
asyncio.run(main())
Client OPC-UA Python — abonnement (Subscription)
import asyncio
from asyncua import Client
from asyncua.common.subscription import SubHandler
class DataChangeHandler(SubHandler):
def datachange_notification(self, node, val, data):
print(f"[CHANGE] {node} = {val}")
def event_notification(self, event):
print(f"[EVENT] {event}")
async def main():
url = "opc.tcp://192.168.1.10:4840"
async with Client(url=url) as client:
handler = DataChangeHandler()
subscription = await client.create_subscription(500, handler) # 500ms
nodes = [
client.get_node("ns=2;s=Station_1.Pression"),
client.get_node("ns=2;s=Station_1.Debit"),
]
monitored_items = await subscription.subscribe_data_change(nodes)
print("Subscriptions actives, attente changements...")
await asyncio.sleep(30) # écouter 30 secondes
await subscription.unsubscribe(monitored_items)
asyncio.run(main())
Connexion sécurisée avec certificat
from asyncua.crypto.security_policies import SecurityPolicyBasic256Sha256
from asyncua.crypto.cert_man import CertificateManager
async def connect_secure():
client = Client("opc.tcp://192.168.1.10:4840")
await client.set_security(
SecurityPolicyBasic256Sha256,
certificate="./client_cert.der",
private_key="./client_key.pem",
server_certificate="./server_cert.der"
)
await client.connect()
# ... vos opérations
await client.disconnect()
Implémenter OPC-UA en Node.js
La bibliothèque node-opcua est la référence JavaScript/TypeScript.
npm install node-opcua
Lecture de données
const opcua = require("node-opcua");
const client = opcua.OPCUAClient.create({
endpointMustExist: false,
connectionStrategy: { maxRetry: 5, initialDelay: 2000 }
});
const endpointUrl = "opc.tcp://192.168.1.10:4840";
async function main() {
await client.connect(endpointUrl);
const session = await client.createSession();
const nodeToRead = {
nodeId: "ns=2;s=Station_1.Pression",
attributeId: opcua.AttributeIds.Value
};
const dataValue = await session.read(nodeToRead);
console.log(`Pression: ${dataValue.value.value} bar`);
console.log(`Timestamp: ${dataValue.serverTimestamp}`);
await session.close();
await client.disconnect();
}
main().catch(console.error);
OPC-UA sur les principaux automates industriels
Siemens S7-1500 / S7-1200
Le S7-1500 supporte OPC-UA serveur natif depuis le firmware 2.0 :
- Port : 4840 (TCP)
- Configuration dans TIA Portal :
Device Configuration → OPC UA → Server - Activer les nœuds souhaités dans l'Access configuration
- Authentification : Certificats ou Username/Password
Le S7-1200 supporte OPC-UA depuis le firmware 4.1.
Schneider Electric M580 / M340
M580 : OPC-UA via module BMENOC0311 (firmware ≥ V2.0) M340 : pas de support OPC-UA natif → Modbus TCP recommandé, ou gateway OPC-UA to Modbus (ex. Kepware KEPServerEX)
Allen-Bradley / Rockwell (EtherNet/IP)
Les automates Rockwell ne supportent pas OPC-UA natif. Options :
- KEPServerEX (Kepware) : bridge EtherNet/IP → OPC-UA
- FactoryTalk Linx Gateway : serveur OPC-UA pour l'écosystème Rockwell
- Eziwan Gateway : connexion directe EtherNet/IP/Modbus, exposition API REST
Beckhoff TwinCAT 3
TwinCAT 3 intègre un serveur OPC-UA natif via TF6100 (module OPC-UA). Configuration via TwinCAT System Manager.
Wago / Phoenix Contact / Pilz
La plupart des PLC modernes de ces constructeurs supportent OPC-UA. Vérifier le firmware et activer le serveur dans la configuration réseau.
OPC-UA PubSub : l'extension pour le cloud
OPC-UA PubSub (IEC 62541-14) est l'extension qui rend OPC-UA compatible avec les architectures IoT cloud :
- Publisher : l'équipement publie ses données sur un Message Oriented Middleware
- Subscriber : le cloud ou SCADA s'abonne au flux
Transports supportés :
- AMQP (port 5672)
- MQTT (port 1883 ou 8883) — le plus utilisé en IoT
- UDP Multicast (réseau local)
Encodages :
- JSON (lisible, debug facile)
- UADP (binaire, compact, embarqué)
Exemple de message OPC-UA PubSub JSON :
{
"MessageId": "abc123",
"PublisherId": "urn:station1:plc",
"DataSetWriterId": 1,
"MetaDataVersion": {"MajorVersion": 1, "MinorVersion": 0},
"Timestamp": "2026-08-14T10:30:00.000Z",
"Payload": {
"Station_1.Pression": {"Value": 4.2, "StatusCode": 0, "SourceTimestamp": "2026-08-14T10:29:59.950Z"},
"Station_1.Debit": {"Value": 125.3, "StatusCode": 0, "SourceTimestamp": "2026-08-14T10:29:59.950Z"}
}
}
Migration OPC-DA vers OPC-UA
Si vous avez des installations sous OPC-DA (OPC Classic, Windows DCOM), la migration vers OPC-UA apporte :
- Suppression de la dépendance Windows/DCOM
- Compatibilité Linux / Raspberry Pi / PLCs Linux
- Chiffrement (absent dans OPC-DA)
- Accès internet direct (impossible avec DCOM sans VPN complexe)
Outil de migration : OPC UA Wrapper (ex. Kepware) crée un serveur OPC-UA qui expose les données d'un serveur OPC-DA existant, permettant une migration progressive.
OPC-UA avec le Gateway Eziwan
Le Eziwan Gateway intègre un client OPC-UA capable de se connecter aux serveurs OPC-UA de vos équipements :
- Connexion Siemens S7-1500 OPC-UA (port 4840)
- Connexion à tout serveur OPC-UA conforme IEC 62541
- Support des modes de sécurité
None,Sign,SignAndEncrypt - Configuration des NodeIds dans l'interface cloud (browse automatique de l'Address Space)
- Transmission des données vers la plateforme cloud Eziwan en MQTT/TLS
Avantage clé : vous n'avez pas besoin d'écrire un client OPC-UA vous-même. Le gateway fait le travail et expose une API REST vers votre SCADA ou ERP.
FAQ — OPC-UA
OPC-UA est-il plus complexe que Modbus ? Oui, mais justifié pour les installations multi-constructeurs et les projets industrie 4.0. Pour une installation avec 2-3 automates du même constructeur, Modbus TCP peut être suffisant. OPC-UA s'impose quand vous avez des équipements hétérogènes, des exigences de sécurité, ou des besoins d'interopérabilité ERP/MES.
Le port 4840 doit-il être ouvert sur mon firewall ? En architecture "zero-inbound-port" (comme Eziwan), le gateway initie la connexion vers le serveur OPC-UA en interne. Aucun port n'est ouvert depuis l'extérieur. Le tunnel VPN chiffré porte les données vers le cloud.
OPC-UA peut-il remplacer MQTT dans une architecture IoT ? OPC-UA PubSub avec transport MQTT combine le meilleur des deux : le modèle d'information sémantique d'OPC-UA avec la légèreté et la scalabilité de MQTT. C'est la direction prise par les référentiels Industrie 4.0 (Industrie 4.0 Architecture Reference Model, IDS-R).
Quelles performances attendre d'un serveur OPC-UA embarqué ? Un Siemens S7-1500 CPU 1515 peut traiter ~10 000 nœuds OPC-UA en lecture par seconde. Pour les PLCs moins puissants (M221, petits WAGO), limiter le polling OPC-UA à 100-500 nœuds/s. Les abonnements (Subscription) sont beaucoup plus efficaces que le polling pour les volumes importants.
Existe-t-il des serveurs OPC-UA gratuits pour tester ?
Oui : ProsysOPC UA Simulation Server (gratuit, Windows), Node-RED avec node-red-contrib-opcua (gratuit, multi-plateforme), python-opcua en mode serveur (exemple dans la doc GitHub). Ils permettent de tester un client sans avoir de PLC physique.
Pour aller plus loin
- Blog : OPC-UA et MQTT — comment combiner les deux sur une gateway industrielle
- Blog : accès distant sécurisé PLC et SCADA — VPN, zero-trust et NIS2
- Blog : connecter un automate Siemens S7 au cloud — guide technique
- Blog : IEC 62443 — guide pratique pour la cybersécurité industrielle
- Blog : Modbus TCP vs RTU — comparatif complet pour l'IoT industriel
Besoin d'aide pour connecter vos serveurs OPC-UA au cloud ? Demandez une démo gratuite — notre équipe vous accompagne du POC au déploiement.
Ressources complémentaires
- OPC UA vers MQTT — publier des données OPC UA sur un broker MQTT cloud
- Protocoles industriels — comparatif OPC UA, Modbus, MQTT et autres protocoles
- Gateway IoT industrielle — choisir une passerelle compatible OPC UA
- Modbus TCP vers le cloud — supervision d'automates Modbus TCP depuis le cloud
- SCADA cloud — architecture SCADA moderne avec connectivité OPC UA et cloud