OPC UA · BACnet/IP · Modbus TCP · Kepware · UaExpert · Azure IoT · 11 min de lecture

Passerelle OPC UA vers BACnet et Modbus : Traduction de protocole pour l'intégration BMS

La grande majorité des dispositifs BMS installés — contrôleurs BACnet/IP, compteurs d'énergie Modbus TCP et dispositifs de terrain Modbus RTU — n'implémentent pas de serveur OPC UA. Une passerelle de protocole comble cette lacune : elle se connecte aux dispositifs existants via leurs protocoles natifs et expose tous les points de données découverts comme des nœuds OPC UA dans un espace d'adressage unique et navigable. Kepware KEPServerEX est le choix standard de l'industrie pour ce rôle, soutenu par Siemens, Schneider et Rockwell Automation pour les déploiements de passerelles BMS multi-protocoles.

Pourquoi une passerelle est nécessaire

Les appareils BACnet/IP et BACnet MS/TP exposent des données via les services d'objets BACnet (ReadProperty, SubscribeCOV) – et non via les services OPC UA. Les appareils Modbus TCP et RTU exposent des données sous forme de registres numérotés sans nommage intégré, informations de type ou sécurité. Un client OPC UA ne peut communiquer nativement avec aucun des deux protocoles.

La passerelle agit comme une couche de traduction. Côté sud, elle interroge ou s'abonne aux appareils en utilisant leurs protocoles natifs. Côté nord, elle exécute un serveur OPC UA complet, mappant chaque point de données d'appareil à un nœud de variable OPC UA nommé et typé. Résultat : un système SCADA, un connecteur cloud ou une plateforme de gestion d'énergie voit un seul point de terminaison OPC UA contenant toutes les données du bâtiment, que les appareils sous-jacents parlent BACnet, Modbus, KNX ou SNMP.

COV vs. interrogation dans la passerelle : Pour les appareils BACnet prenant en charge les abonnements Change of Value (COV), configurez Kepware pour utiliser SubscribeCOV plutôt que l'interrogation périodique ReadProperty. COV réduit le trafic réseau BACnet et garantit que la passerelle reflète les changements d'état immédiatement plutôt que d'attendre le prochain cycle d'interrogation. Les appareils Modbus nécessitent toujours une interrogation – réglez la fréquence de balayage en fonction de vos besoins d'actualité des données (généralement 1 à 10 secondes pour le CVC, 100 à 500 ms pour la qualité de l'énergie).

Comparaison des options de passerelle

PasserelleServeur OPC UAPrise en charge BACnetPrise en charge ModbusPlateforme
Kepware KEPServerEX 6Serveur UA complet (tous les modes de sécurité)BACnet/IP + MS/TP ; BBMD ; COVModbus RTU/TCP/ASCII ; 65535 registresWindows Server/PC
matrikon OPC UA TunnellerServeur OPC UA + pont DA/HDAVia pont OPC DA uniquementVia pont OPC DA uniquementWindows
Cogent DataHub OPC UAServeur UA completBACnet/IP; COV limitéModbus TCPWindows
softing edgeConnector ModbusServeur OPC UANon — Modbus uniquementModbus TCP + RTUDocker / Linux / Windows
softing edgeConnector BACnetServeur OPC UABACnet/IP + MS/TPNonDocker / Linux / Windows
Ignition (Inductive Automation)Serveur OPC UA (intégré)BACnet/IP via module pilotePilote Modbus TCP/RTUWindows / Linux (JVM)

Kepware KEPServerEX : configuration du pilote BACnet/IP

Le pilote Ethernet BACnet/IP de Kepware (sous licence distincte du package de base KEPServerEX) se connecte aux périphériques BACnet/IP sur le sous-réseau local ou via des routeurs à l'aide d'un dispositif de gestion de diffusion BACnet (BBMD). Après avoir ajouté le canal pilote, Kepware découvre automatiquement tous les périphériques BACnet visibles et importe leurs listes d'objets.

Configuration du pilote Kepware BACnet/IP

Channel settings (Connectivity > BACnet/IP Ethernet):
  Network adapter: 192.168.10.5 (Kepware server OT NIC)
  UDP port: 47808 (BAC0 — standard BACnet/IP port)
  BACnet device instance: 1001 (Kepware gateway identity on BACnet network)
  BBMD address: 192.168.10.1 (router acting as BBMD for cross-subnet discovery)
  BBMD UDP port: 47808
  Foreign device registration: enabled (for devices on other subnets)

Auto-discovery:
  Tools > Device Discovery > BACnet/IP
  Scan range: all subnets registered on BBMD
  Result: discovered 47 BACnet devices with object counts
  Import: select all → creates Kepware device entries with all objects

COV subscription (preferred over polling):
  Device property > Subscriptions > Use COV: Enabled
  Lifetime: 3600 seconds (re-subscribe hourly)
  COV increment for Analog Values: 0.5 (only report if change > 0.5 units)
  Fallback poll rate (if COV not supported): 5000 ms

Chaque objet BACnet importé devient une balise Kepware. Kepware mappe automatiquement la propriété BACnet Present_Value à la valeur principale de la balise. Le nom de la balise suit le modèle DeviceName.ObjectType_Instance.Property, par exemple : PXC_01.AnalogInput_1.Present_Value. Ces tags sont immédiatement exposés en tant que nœuds de variables OPC UA sur le point de terminaison OPC UA intégré de KEPServerEX.

Modbus TCP vers OPC UA : import de la table des registres

Les appareils Modbus TCP nécessitent une configuration explicite de la table des registres — contrairement à BACnet, il n'y a pas de découverte d'objets auto-descriptive. Le pilote Modbus TCP/IP Ethernet de Kepware accepte un fichier d'importation de tags CSV ou une configuration manuelle des tags spécifiant l'adresse du registre, le type de données et la conversion technique.

Configuration des tags Modbus TCP Kepware

Channel: Modbus TCP/IP Ethernet
  Network adapter: 192.168.10.5
  Port: 502 (standard Modbus TCP port)
  Request timeout: 1000 ms
  Failure count before error: 3

Device: Schneider_PM5100
  IP address: 192.168.10.21
  Unit ID (slave address): 1
  Scan rate: 1000 ms (1 second)

Tags (imported from Schneider PM5100 register map):
  Tag name            | Address        | Data type | Scaling
  ActivePower_Total   | 400593 (HR593) | Float (4B) | ×1 → kW
  ActiveEnergy_Import | 400001 (HR001) | DWord (4B) | ×0.1 → kWh
  Voltage_L1_N        | 400003 (HR003) | Float (4B) | ×1 → V
  Current_L1          | 400013 (HR013) | Float (4B) | ×1 → A
  PowerFactor_Total   | 400085 (HR085) | Float (4B) | ×1 (dimensionless)
  Frequency           | 400073 (HR073) | Float (4B) | ×1 → Hz

# Tag addressing format for Kepware Modbus driver:
# Holding Register 40001 → address "400001" or "4:1"
# Input Register 30001   → address "300001" or "3:1"
# Coil 1                 → address "000001" or "0:1"
# Discrete Input 10001   → address "100001" or "1:1"

Correspondance objet BACnet vers nœud OPC UA

Kepware fait correspondre chaque type d'objet BACnet à un nœud de variable OPC UA avec le type de données OPC UA approprié. La propriété Present_Value de l'objet BACnet devient la valeur du nœud OPC UA. Les propriétés Status_Flags et Reliability sont mappées au StatusCode OPC UA de la variable.

Type d'objet BACnetType de Present_ValueType de données OPC UAUtilisation typique
Entrée analogique (AI)REAL (Float)FloatCapteur de température, pression, débit
Sortie analogique (AO)REAL (Float)Float (accessible en écriture)Consigne de position de vanne, vitesse du ventilateur
Valeur analogique (AV)REAL (Float)Float (accessible en écriture)Consigne, valeur calculée
Entrée binaire (BI)ÉNUMÉRÉ (Actif/Inactif)BooléenÉtat marche/arrêt, état d'alarme
Sortie binaire (BO)ÉNUMÉRÉ (Actif/Inactif)Booléen (inscriptible)Commande marche/arrêt, commande de relais
Valeur binaire (BV)ÉNUMÉRÉ (Actif/Inactif)Booléen (inscriptible)Indicateur de mode, état de forçage
Entrée multi-état (MI)UNSIGNED INTInt32Lecture du mode de fonctionnement (Arrêt=0, Chauffage=1, Refroidissement=2)
Sortie multi-état (MO)UNSIGNED INTInt32 (accessible en écriture)Commande de mode, palier de vitesse
Valeur multi-état (MV)UNSIGNED INTInt32 (accessible en écriture)Valeur d'énumération configurable
AccumulateurUNSIGNED INT (32 bits)UInt32Compteur d'impulsions : kWh, m³, litres

Sécurité des passerelles OPC UA

Une passerelle OPC UA est un dispositif de frontière IT/OT. Si elle est compromise, un attaquant peut écrire sur des sorties BACnet accessibles en écriture (vannes, relais) ou des bobines Modbus via le service d'écriture OPC UA. Appliquez une défense en profondeur : segmentation réseau, authentification par certificat et permissions d'écriture minimales.

Contrôle de sécuritéImplémentation
VLAN OT dédiéPlacer le serveur Kepware sur un VLAN isolé ; les appareils BACnet et Modbus sur le même VLAN ; pas de routage direct vers le LAN IT
Règles de pare-feuAutoriser le TCP 4840 entrant uniquement depuis les IP clientes OPC UA connues ; bloquer tout autre trafic entrant ; autoriser Kepware sortant vers BACnet UDP 47808 et Modbus TCP 502
Authentification par certificatDésactiver l'anonyme ; exiger des certificats clients X.509 ; importer les certificats clients de confiance dans le magasin de confiance Kepware
Contrôle d'accès utilisateur KepwareCréer un rôle UA en lecture seule pour les clients de supervision ; un rôle UA en lecture-écriture uniquement pour l'intégration BMS ; MFA sur la console d'administration Kepware
Protection en écriture au niveau des tagsDéfinir les tags Modbus en Lecture seule dans Kepware là où les écritures ne sont pas nécessaires ; les tags BACnet AO/BO/MO activés en écriture uniquement pour le rôle SCADA
Journalisation d'auditActiver le journal des événements Kepware ; transférer vers le journal des événements Windows → SIEM ; alerter en cas de tentatives d'écriture non autorisées

Port par défaut 4840 : Kepware KEPServerEX écoute par défaut sur le port TCP 4840 — le port OPC UA enregistré par l'IANA. Ce port doit être ouvert dans le pare-feu Windows sur l'hôte Kepware pour que les clients OPC UA puissent se connecter. N'exposez pas le port 4840 à des réseaux non fiables. Si le serveur Kepware nécessite un OPC UA accessible via Internet (pour les connecteurs cloud), utilisez un proxy inverse avec TLS mutuel plutôt qu'un transfert de port direct.

Test des connexions OPC UA avec UaExpert

UaExpert (par Unified Automation) est le client OPC UA gratuit standard pour la mise en service et le diagnostic. Il fournit un navigateur complet de l'espace d'adressage, une surveillance des données en temps réel, des tests d'abonnement et une gestion des certificats de sécurité. Téléchargement depuis unified-automation.com (inscription gratuite requise).

UaExpert — étapes de connexion et de vérification

1. Add server:
   Server menu > Add > Advanced > Enter URL:
   opc.tcp://192.168.10.50:4840
   Security policy: Basic256Sha256
   Message security mode: SignAndEncrypt
   Authentication: Certificate (browse to client_cert.pem + client_key.pem)

2. First connection — certificate exchange:
   UaExpert generates a self-signed client cert on first run
   Server will show certificate as "untrusted" initially
   On Kepware: OPC UA Configuration > Trusted Clients > Move cert to Trusted
   On UaExpert: OPC UA > Manage Certificates > Trust the server cert

3. Browse address space:
   Expand Root > Objects > (your channel name) > (device name)
   Locate BACnet tags: PXC_01 > AnalogInput_1 > Present_Value
   Locate Modbus tags: Schneider_PM5100 > ActivePower_Total

4. Read values:
   Double-click any Variable node to open Data Monitor
   Verify values match expected engineering units and range
   Check StatusCode column — should show "Good (0x00000000)"
   StatusCode "Bad_NoCommunication" → check BACnet/Modbus connectivity from Kepware

5. Create subscription:
   Data Access View panel (bottom): drag Variable nodes from address space
   Set PublishingInterval 1000 ms
   Watch values update in real time — confirms subscription pipeline is working

6. Test write (writable tags only):
   Right-click Variable node > Write Value
   Enter test value within EU range
   Verify change reflected on BACnet device Present_Value
   Note: writes on Kepware require the connecting client to have write permission in UA role

Intégration cloud via Azure IoT Hub OPC Publisher

Azure IoT Hub OPC Publisher est le client OPC UA open source de Microsoft qui se connecte aux serveurs OPC UA (y compris Kepware) et transmet la télémétrie à Azure IoT Hub. Il s'exécute en tant que module Azure IoT Edge sur un hôte de conteneur Linux dans le bâtiment, faisant le pont entre la couche OT OPC UA et les services cloud Azure.

OPC Publisher — publishednodes.json pour Kepware

// publishednodes.json — defines which OPC UA nodes to publish to Azure IoT Hub
[
  {
    "EndpointUrl": "opc.tcp://192.168.10.50:4840",
    "UseSecurity": true,
    "OpcAuthenticationMode": "UsernamePassword",
    "OpcAuthenticationUsername": "azure-publisher",
    "OpcAuthenticationPassword": "<from keyvault>",
    "OpcNodes": [
      {
        "Id": "ns=2;s=Channel1.PXC_01.AnalogInput_1.Present_Value",
        "DisplayName": "AHU01_SupplyAirTemp",
        "OpcPublishingInterval": 10000,
        "OpcSamplingInterval": 5000,
        "HeartbeatInterval": 60
      },
      {
        "Id": "ns=2;s=Channel1.Schneider_PM5100.ActivePower_Total",
        "DisplayName": "MainMeter_ActivePower_kW",
        "OpcPublishingInterval": 5000,
        "OpcSamplingInterval": 2000
      },
      {
        "Id": "ns=2;s=Channel1.Schneider_PM5100.ActiveEnergy_Import",
        "DisplayName": "MainMeter_Energy_kWh",
        "OpcPublishingInterval": 60000,
        "OpcSamplingInterval": 30000,
        "SkipFirst": true
      }
    ]
  }
]

// Azure IoT Hub receives JSON telemetry:
// {
//   "NodeId": "ns=2;s=Channel1.Schneider_PM5100.ActivePower_Total",
//   "DisplayName": "MainMeter_ActivePower_kW",
//   "Value": { "Value": 47.3, "StatusCode": "Good", "SourceTimestamp": "2025-03-14T10:30:00Z" }
// }

Depuis Azure IoT Hub, les données de télémétrie sont acheminées vers Azure Time Series Insights, Azure Data Explorer ou un travail Azure Stream Analytics personnalisé pour des tableaux de bord KPI énergétiques en temps réel dans Power BI. Le conteneur OPC Publisher gère la reconnexion, la mise en mémoire tampon en cas de perte de connectivité (store-and-forward configurable) et la gestion des certificats pour la connexion OPC UA à Kepware.

Besoin d'une passerelle BACnet ou Modbus vers OPC UA pour votre projet ?

Nous configurons et mettons en service des passerelles Kepware KEPServerEX connectant des dispositifs de bâtiment BACnet/IP, Modbus TCP et KNX à des clients OPC UA, des plateformes SCADA et Azure IoT Hub — avec un durcissement complet de la sécurité et une gestion des certificats.

Demander un devis →
Chargement...
Retour en haut