Architecture OPC UA : Modèle d'information, sécurité, sessions et transport
OPC UA (IEC 62541) est une norme en 13 parties qui définit une architecture orientée services, indépendante de la plateforme, pour la communication en automatisme industriel et dans le bâtiment. Contrairement à son prédécesseur OPC Classic (qui était limité à Windows COM/DCOM), OPC UA fonctionne sur tout système d'exploitation, intègre un modèle de sécurité complet et fournit un modèle d'information unifié qui rend chaque serveur auto-descriptif – éliminant ainsi le besoin de dictionnaires de données externes lors de l'intégration des plateformes BMS, SCADA et IoT.
Structure de la norme IEC 62541
IEC 62541 se compose de 13 parties numérotées. Les parties 1 à 7 définissent l'architecture de base ; les parties 8 à 14 couvrent les mappages, la sécurité et les profils. Pour les intégrateurs d'automatisation des bâtiments, les parties les plus pertinentes sont 1 (Concepts), 3 (Modèle d'espace d'adressage), 4 (Services), 6 (Mappages — codage et transport), 7 (Profils) et la spécification compagnon IEC 62541-100 (OPC UA pour les bâtiments).
| Partie | Titre | Pertinence |
|---|---|---|
| IEC 62541-1 | Concepts et aperçu | Architecture fondamentale, modèle de service, concept de modèle d'information |
| IEC 62541-3 | Modèle d'espace d'adressage | Types NodeClass, références, attributs — le squelette du modèle de données |
| IEC 62541-4 | Services | Ensembles de services Read, Write, Browse, Subscribe, Call — toutes les API serveur |
| IEC 62541-6 | Mappages | Encodage binaire (UA Binary), encodage XML, transport opc.tcp, HTTPS, WebSockets |
| IEC 62541-7 | Profils | Profils serveur, client et transport pour les tests de conformité |
| IEC 62541-12 | Découverte et services globaux | Serveur de découverte local (LDS), Serveur de découverte global (GDS) pour la gestion des certificats |
| IEC 62541-100 | OPC UA pour les bâtiments | Modèle d'information mappé IFC pour les espaces, zones, CVC, comptage d'énergie |
Modèle d'information : types NodeClass et références
Chaque donnée dans un serveur OPC UA est représentée comme un nœud dans l'espace d'adressage. Les nœuds ont un attribut NodeClass qui définit leur rôle. Les nœuds sont liés entre eux par des références typées – par exemple, HasComponent, HasProperty, Organizes, HasSubtype. Cela crée un graphe orienté que les clients peuvent parcourir pour découvrir le contenu du serveur sans connaissance préalable de la structure des données.
| NodeClass | Objectif | Exemple dans un BMS |
|---|---|---|
| Objet | Conteneur regroupant des nœuds connexes ; aucune valeur propre | Objet AHU_01 regroupant toutes les variables de la CTA |
| Variable | Contient une valeur typée ; lisible et éventuellement inscriptible | SupplyAirTemp (Float, °C), FanSpeed (UInt16, RPM) |
| Méthode | Fonction appelable ; arguments d'entrée et de sortie | ResetAlarm(), SetOperatingMode(mode: Int32) |
| Vue | Sous-ensemble nommé de l'espace d'adressage pour une navigation filtrée | EnergyMeteringView affichant uniquement les nœuds kWh |
| Type de données | Définit le type scalaire ou structuré utilisé par les variables | EnumHvacMode {Auto=0, Heating=1, Cooling=2} |
| ObjectType | Modèle pour les nœuds d'objet (comme une définition de classe) | HVACUnitType avec composants standard |
| VariableType | Modèle pour les nœuds de variable avec attributs par défaut | AnalogItemType avec propriété EngineeringUnits |
| ReferenceType | Définit la sémantique d'une référence entre nœuds | HasComponent, HasProperty, Organizes |
Espace d'adressage : espaces de noms et arbre navigable
L'espace d'adressage est structuré comme un arbre navigable. Chaque nœud est identifié par un NodeId composé d'un index d'espace de noms et d'un identifiant (numérique, chaîne ou GUID). L'espace de noms 0 (ns=0) est toujours l'espace de noms standard OPC UA contenant les types intégrés et les nœuds standard. Les espaces de noms 1+ sont attribués par le serveur pour le contenu spécifique au fournisseur ou à l'application. Les clients découvrent la table des espaces de noms via l'appel de service GetNamespaceArray.
Espace d'adressage OPC UA — exemple BMS
Objects (ns=0;i=85) ← OPC UA standard root
├── Server (ns=0;i=2253) ← always present, server diagnostics
└── Building_01 (ns=1;s=Building_01) ← application namespace
├── Floor_02 (ns=1;s=Building_01/Floor_02)
│ ├── AHU_01 (ns=1;s=AHU_01) [Object]
│ │ ├── SupplyAirTemperature (ns=1;s=AHU_01.SAT) [Variable, Float]
│ │ │ ├── EngineeringUnits [Property: "°C"]
│ │ │ ├── EURange [Property: Low=0, High=60]
│ │ │ └── StatusCode [Property: Good/Bad/Uncertain]
│ │ ├── FanSpeed (ns=1;s=AHU_01.FanRPM) [Variable, UInt16]
│ │ ├── DamperPosition (ns=1;s=AHU_01.Damper) [Variable, Byte, 0–100%]
│ │ └── ResetAlarm (ns=1;s=AHU_01.ResetAlarm) [Method]
│ └── VAV_Zone_2A (ns=1;s=VAV_2A) [Object]
│ ├── RoomTemperature (ns=1;s=VAV_2A.RoomTemp) [Variable, Float]
│ └── Setpoint (ns=1;s=VAV_2A.SP) [Variable, Float, writable]
└── Meters (ns=1;s=Meters)
└── Main_kWh (ns=1;s=Meter.kWh) [Variable, Double]Les clients naviguent à partir de la racine Objects en utilisant le service Browse, en suivant les références hiérarchiques (HasComponent, Organizes, HasProperty) pour découvrir les nœuds. Le service TranslateBrowsePathsToNodeIds permet aux clients d'accéder directement à un chemin connu sans parcourir tout l'arbre — utile pour l'interrogation sensible aux performances de variables connues.
Options de transport
OPC UA définit trois liaisons de transport. Le choix affecte la latence, le passage à travers les pare-feux et la surcharge du protocole. OPC UA Binary sur TCP est la valeur par défaut pour l'intégration BMS au niveau de l'usine ; HTTPS et WebSockets sont utilisés pour les interfaces cloud ou accessibles par navigateur.
| Transport | Préfixe URI | Port par défaut | Surcharge | Remarques |
|---|---|---|---|---|
| OPC UA TCP | opc.tcp:// | 4840 | Le plus faible – tramage binaire | Idéal pour l'atelier ; connexion TCP persistante ; pas adapté aux pare-feu |
| OPC UA HTTPS | opc.https:// | 443 | Moyen — HTTP/1.1 + TLS | Adapté aux pare-feu ; peut traverser les proxies ; latence plus élevée par requête |
| OPC UA WebSockets | opc.wss:// | 443 | Faible — tramage WebSocket | Compatible navigateur ; persistant ; utilisé pour la Web SCADA et les passerelles cloud |
Recommandation pour le niveau atelier : Utilisez toujours opc.tcp:// dans un LAN de bâtiment ou un VLAN OT. La connexion TCP persistante élimine la surcharge de handshake TLS par requête et offre la latence de notification d'abonnement la plus faible. Réservez HTTPS pour les intégrations intersites ou cloud où le port pare-feu 4840 ne peut pas être ouvert.
Modes de sécurité et politiques de sécurité
La sécurité OPC UA est négociée au niveau du canal sécurisé avant tout échange de messages d'application. Le serveur annonce ses EndpointDescriptions supportées (combinaisons de MessageSecurityMode et SecurityPolicyUri). Le client en sélectionne une lors de l'ouverture d'une connexion. N'utilisez jamais None dans un environnement de production – il transmet toutes les données en clair sans protection d'intégrité.
| MessageSecurityMode | Protection | Cas d'utilisation |
|---|---|---|
| Aucun | Pas de signature, pas de chiffrement | Laboratoire / développement uniquement – jamais en production |
| Signer | Intégrité HMAC des messages ; pas de chiffrement de la charge utile | SCADA critique en performance sur LAN fermé de confiance |
| SignerEtChiffrer | HMAC + chiffrement AES de toutes les charges utiles des messages | Standard pour toutes les intégrations BMS et cloud |
La SecurityPolicyUri sélectionne les algorithmes cryptographiques. Les politiques actuellement recommandées (selon IEC 62541-7:2022) sont :
| SecurityPolicyUri | Asymétrique (échange de clés) | Symétrique (données) | Statut |
|---|---|---|---|
| Basic128Rsa15 | RSA-PKCS1-v1.5 / 1024 bits | AES-128-CBC | Obsolète — ne pas utiliser |
| Basic256 | RSA-OAEP / 1024 bits | AES-256-CBC | Obsolète — ne pas utiliser |
| Basic256Sha256 | RSA-OAEP / 2048 bits + SHA-256 | AES-256-CBC + SHA-256 HMAC | Actuel – largement pris en charge |
| Aes128Sha256RsaOaep | RSA-OAEP / 2048 bits + SHA-256 | AES-128-CBC + SHA-256 HMAC | Actuel – charge CPU plus faible |
| Aes256Sha256RsaPss | RSA-PSS / 2048 bits + SHA-256 | AES-256-CBC + SHA-256 HMAC | Recommandé – le plus fort, utiliser là où il est pris en charge |
Avis de dépréciation : Basic128Rsa15 et Basic256 utilisent des clés RSA de 1024 bits et SHA-1, tous deux considérés comme cryptographiquement faibles. La norme IEC 62541-7:2022 les marque comme obsolètes. Kepware KEPServerEX 6.x et Siemens DESIGO CC prennent en charge Basic256Sha256 et Aes256Sha256RsaPss. Désactivez les politiques obsolètes dans la configuration du serveur de production pour empêcher les attaques par rétrogradation.
Méthodes d'authentification
L'authentification est effectuée au niveau de la session (au-dessus du canal sécurisé). OPC UA définit trois types de jetons d'identité ActivateSession. L'authentification par certificat est la plus sécurisée et est requise pour les normes de sécurité industrielle telles que IEC 62443-3-3 Security Level 2.
| Type de jeton | Description | Recommandation |
|---|---|---|
| AnonymousIdentityToken | Aucun identifiant – tout client peut créer une session | Désactiver en production ; acceptable uniquement pour les tableaux de bord publics en lecture seule |
| UserNameIdentityToken | Nom d'utilisateur et mot de passe ; mot de passe chiffré avec la clé publique du serveur | Acceptable pour l'accès opérateur ; utiliser avec le transport Sign+Encrypt |
| X509IdentityToken | Le client présente un certificat X.509 valide ; le serveur valide par rapport à la liste de confiance | Requis pour l'intégration machine à machine et la conformité IEC 62443 SL-2 |
Sessions et abonnements
Une session est établie sur le canal sécurisé après authentification. Les sessions ont un RequestedSessionTimeout (généralement 60 à 3600 secondes) ; si le client n'envoie pas de keep-alive avant l'expiration, le serveur supprime la session et tous ses abonnements. Les clients doivent gérer la reconnexion avec rétablissement ou transfert de session.
Les abonnements sont le mécanisme principal pour une surveillance efficace des données. Au lieu d'interroger les variables à plusieurs reprises (ce qui génère un trafic inutile), les clients créent un abonnement avec un PublishingInterval et y ajoutent des MonitoredItems. Le serveur échantillonne chaque MonitoredItem à l'intervalle SamplingInterval et met en file d'attente les changements de valeur ; lorsque le PublishingInterval se déclenche, toutes les notifications en attente sont envoyées dans un seul message PublishResponse.
Paramètres d'abonnement — champs clés
CreateSubscription request:
RequestedPublishingInterval: 1000 // ms — how often server sends Publish
RequestedMaxKeepAliveCount: 10 // Publish cycles before keep-alive sent
RequestedLifetimeCount: 30 // LifetimeCount × PublishingInterval = session timeout
MaxNotificationsPerPublish: 1000 // cap notifications per PublishResponse
PublishingEnabled: true
MonitoredItem parameters:
SamplingInterval: 500 // ms — server samples item at this rate
// must be ≥ server MinSupportedSampleRate
QueueSize: 10 // buffer for overrun; 1 = last value only
DiscardOldest: true // discard oldest on queue overflow
DeadbandType: None / Absolute / Percent
DeadbandValue: 0.5 // Absolute: only report if change > 0.5 units
// Percent: only report if change > 0.5% of EURangeFiltrage par zone morte pour les capteurs CVC : Définir une zone morte absolue de 0,2 à 0,5 °C sur les variables de température empêche le serveur d'inonder l'abonnement de mises à jour triviales dues au bruit. Pour les compteurs d'énergie, une zone morte en pourcentage de 1 % sur les compteurs kWh est typique. Le filtrage par zone morte s'effectue côté serveur, réduisant à la fois la charge CPU et le trafic réseau.
Spécifications compagnons OPC UA
Les spécifications compagnons étendent le standard de base OPC UA avec des modèles d'information spécifiques au domaine. Elles définissent des ObjectTypes, VariableTypes et URI d'espace de noms standard afin que les appareils de différents fabricants exposent les données dans une structure cohérente et interopérable. Les ingénieurs en automatisation des bâtiments doivent connaître les spécifications compagnons suivantes :
| Spécification | Domaine d'application | Types d'objets clés |
|---|---|---|
| IEC 62541-100 (OPC UA pour les bâtiments) | Automatisation des bâtiments : espaces, zones, équipements, comptage d'énergie | BuildingType, SpaceType, HVACSystemType, EnergyMeterType |
| OPC UA pour FDI (Intégration des appareils de terrain) | Appareils de terrain : capteurs, actionneurs, instruments de processus | DeviceType, FunctionBlockType, ParameterType |
| OPC UA pour PLCopen | Éléments de programme PLC : blocs fonctionnels, alarmes, tâches | FunctionBlockType, AlarmType, TaskType |
| OPC UA pour I4.0 Asset Administration Shell | Jumeau numérique : métadonnées d'actif, sous-modèles, propriétés | AssetAdministrationShellType, SubmodelType |
| OPC UA pour les dispositifs (DI) | Informations de base sur les dispositifs matériels | DeviceType, ComponentType, SoftwareType |
Besoin d'une configuration de serveur OPC UA pour votre projet BMS ?
Nous configurons et sécurisons les serveurs OPC UA sur Siemens DESIGO CC, Beckhoff TwinCAT et Kepware KEPServerEX – y compris la gestion des certificats, le durcissement de la politique de sécurité et le réglage des abonnements pour les déploiements de capteurs à haute densité.
Demander un devis →