Aller à la page principale PHANTOM®

Le Gateway version 2 du système de capteurs sans fil ERBESSD INSTRUMENTS® PHANTOM®, ainsi que le moniteur filaire DEFIANT™, intègrent un serveur OPC UA natif. Chaque capteur apparaît comme un objet dans l’espace d’adressage du serveur, avec ses mesures en direct sous forme de variables OPC UA que tout client standard — Ignition, Kepware, WinCC, FactoryTalk, Node-RED, UAExpert, opcua-asyncio — peut parcourir, lire, abonner et, pour quelques points de commande, écrire.

En raison du fonctionnement du protocole OPC UA, la forme d’onde complète et la FFT ne sont pas disponibles via OPC UA. Utilisez l’intégration MQTT pour les données de forme d’onde.

Vous pouvez utiliser le serveur OPC UA en même temps que tous les autres protocoles pris en charge par la passerelle, y compris EI-Analytic™, EI Monitor, MQTT et Modbus.

Certaines des options décrites ici ont été ajoutées dans des versions ultérieures de la passerelle. Si vous n’en trouvez pas une dans votre console d’administration, mettez à jour la passerelle vers le dernier firmware.

Les capacités du serveur en un coup d’œil

Élément Ce que fournit la passerelle
Rôle Serveur OPC UA. Les clients se connectent vers la passerelle.
Transport OPC UA binaire sur TCP (opc.tcp://). Ni HTTPS ni OPC UA PubSub ne sont proposés.
Port 4334 (fixe).
Chemin du point de terminaison /UA/PhantomGW
Modèle d’information Nodeset de base OPC UA 1.05, rétrocompatible avec les clients 1.04 et 1.03. Aucune spécification compagnon (ni profils DI, ADI, Machinery ou MTConnect).
Services Browse, Read, Write et Subscribe / MonitoredItems (accès aux données).
Politiques de sécurité None, Basic128Rsa15, Basic256Sha256, Aes128_Sha256_RsaOaep, Aes256_Sha256_RsaPss.
Modes de sécurité de message None, Sign, SignAndEncrypt.
Mode renforcé Restreint le serveur à Aes128_Sha256_RsaOaep et Aes256_Sha256_RsaPss uniquement avec SignAndEncrypt.
Authentification Anonyme (désactivable) et nom d’utilisateur + mot de passe.
Échantillonnage minimumSamplingInterval de 1000 ms sur toutes les variables.
Accès à l’historique Non pris en charge. Utilisez MQTT ou EI-Analytic™ pour l’historique.
Formes d’onde / FFT Non exposées via OPC UA.
Méthodes Aucune. Les actions sont exposées sous forme de variables booléennes accessibles en écriture.

Activer le serveur OPC

Pour activer le serveur OPC UA, dans la console d’administration du Gateway 2, activez-le sur la page de configuration General en cochant la case « Enable OPC UA Server ». Cliquez sur enregistrer et la passerelle redémarrera. Une fois redémarrée, le serveur OPC sera prêt.

Activer le serveur OPC UA

URL du point de terminaison

Une fois le serveur OPC UA activé, vous pouvez y accéder avec n’importe quel client OPC UA à l’aide de :

opc.tcp://192.168.1.2:4334/UA/PhantomGW

192.168.1.2 est remplacé par l’adresse IP de votre passerelle. Pour une première connexion, utilisez le mode de sécurité None et la politique de sécurité None.

Le serveur publie ses points de terminaison sous le nom d’hôte PhantomGW, et annonce également ces noms d’hôte alternatifs afin qu’un client qui réécrit l’URL après la découverte puisse tout de même l’atteindre :

  • PhantomGW-<numéroDeSérie>
  • l’adresse eth0 actuelle de la passerelle, ou celle de wlan0 en l’absence d’adresse filaire

Remplacer le nom d’hôte

Certains clients rejettent un point de terminaison dont ils ne peuvent pas résoudre le nom d’hôte. Cochez Override OPC hostname et saisissez un Host name — un nom DNS ou l’adresse IP fixe de la passerelle — pour que le serveur annonce ce nom au lieu de PhantomGW.

Profils de sécurité

Politiques de sécurité et modes de message

Par défaut, le serveur propose l’ensemble complet, afin que tout client puisse se connecter quel que soit ce qu’il prend en charge :

Politique de sécurité Modes de sécurité de message disponibles
None None
Basic128Rsa15 Sign, SignAndEncrypt
Basic256Sha256 Sign, SignAndEncrypt
Aes128_Sha256_RsaOaep Sign, SignAndEncrypt
Aes256_Sha256_RsaPss Sign, SignAndEncrypt

Désactiver les communications OPC UA non chiffrées

Cocher Disable OPC UA unencrypted communication restreint le serveur aux seules politiques modernes :

Politique de sécurité Mode de sécurité de message
Aes128_Sha256_RsaOaep SignAndEncrypt
Aes256_Sha256_RsaPss SignAndEncrypt

None, Basic128Rsa15 et Basic256Sha256 sont retirées, et les modes None et Sign seul ne sont plus proposés. C’est le réglage recommandé en production. Basic128Rsa15 et Basic256Sha256 sont dépréciées par l’OPC Foundation ; les laisser activées n’est utile que pour d’anciens clients incapables de négocier les politiques AES.

Vérifiez que votre client prend en charge Aes128_Sha256_RsaOaep ou Aes256_Sha256_RsaPss avant d’activer cette option, sinon il ne pourra plus se connecter.

Authentification des utilisateurs

Par défaut, le serveur accepte les sessions anonymes. Vous pouvez restreindre cela depuis la même page de configuration OPC :

Option Effet
Disable OPC UA Anonymous login Rejette les sessions anonymes. Chaque client doit présenter un nom d’utilisateur et un mot de passe.
Add user Ajoute un couple nom d’utilisateur + mot de passe à la liste du serveur. Ajoutez-en autant que nécessaire ; chacun est supprimable.
Export only paired sensors Limite l’espace d’adressage aux capteurs appairés au lieu de tous ceux que voit la passerelle.

Les utilisateurs sont définis par passerelle. Combinez Disable OPC UA Anonymous login avec Disable OPC UA unencrypted communication pour que les identifiants ne transitent jamais sur un canal non chiffré.

Espace d’adressage

Le serveur OPC UA est organisé en arborescence. Sous le dossier racine se trouve un dossier Objects, dans lequel apparaissent tous les numéros de série des capteurs. Sous chaque numéro de série figurent différentes variables selon le type de capteur.

Structure arborescente

Tous les nœuds vivent dans l’index de namespace 1 et utilisent des NodeId de type chaîne.

Root
└── Objects
    ├── 40217                         ← capteur sans fil, browse name = série du capteur
    │   ├── friendlyName              (String)
    │   ├── isPaired                  (Boolean)
    │   ├── type                      (UInt16)
    │   ├── version                   (UInt16)
    │   ├── battery                   (Double)
    │   ├── batteryType               (UInt32)
    │   ├── temperature               (Double)
    │   ├── rms                       (Double[3])
    │   ├── rms_element0..2           (Double)
    │   ├── arms                      (Double[3])
    │   ├── arms_element0..2          (Double)
    │   ├── sensorActions
    │   │   ├── triggerCollection     (Boolean, en écriture)
    │   │   └── triggerStateUpdate    (Boolean, en écriture)
    │   └── extendedMetrics           (capteurs triaxiaux uniquement)
    │       ├── 0                     ← axe X
    │       ├── 1                     ← axe Y
    │       └── 2                     ← axe Z
    └── WiredCH1                      ← voie filaire du DEFIANT™
        ├── accel_rms                 (Double)
        ├── velocity_rms              (Double)
        └── …

Schéma des NodeId

Chaque nœud possède un NodeId de type chaîne déterministe : vous pouvez donc adresser un tag directement sans parcourir l’arborescence.

Nœud NodeId
Objet capteur ns=1;s=ph<phantomCode>
Variable de capteur ns=1;s=ph<phantomCode>-<browseName>
Élément de tableau ns=1;s=ph<phantomCode>-<browseName>_element<index>
Nom convivial ns=1;s=ph<phantomCode>-friendlyName
État d’appairage ns=1;s=ph<phantomCode>-isPaired
Dossier des actions ns=1;s=ph<phantomCode>-actions
Déclencher une collecte ns=1;s=ph<phantomCode>-actions-triggerCollection
Déclencher une mise à jour d’état ns=1;s=ph<phantomCode>-actions-triggerStateUpdate
Dossier des métriques étendues ns=1;s=ph<phantomCode>-ext
Axe des métriques étendues ns=1;s=ph<phantomCode>-ext-ch<axe>
Métrique étendue ns=1;s=ph<phantomCode>-ext-ch<axe>-<métrique>
Objet de voie filaire ns=1;s=wired<n>
Variable de voie filaire ns=1;s=wired<n>-<browseName>

Pour le capteur 40217, le RMS de vitesse de l’axe Z est ns=1;s=ph40217-rms_element2, et le tableau complet du RMS de vitesse est ns=1;s=ph40217-rms.

Les tableaux sont publiés deux fois. Chaque variable de type tableau (rms, arms, tcTemperature, voltage, instCurrent, dryContactsState, …) est exposée à la fois comme un nœud tableau et comme un nœud scalaire par élément, suffixé _element0, _element1, … Utilisez le nœud tableau si votre client gère les tableaux ; utilisez les nœuds _elementN s’il attend un tag par valeur, ce que supposent la plupart des explorateurs de tags d’automates et de SCADA.

Horodatages et échantillonnage

Chaque variable de mesure fournit un sourceTimestamp et un serverTimestamp fixés à l’instant où la passerelle a reçu la dernière mise à jour de ce capteur. Comparer cet horodatage à l’heure actuelle est la manière fiable de détecter un capteur qui a cessé d’émettre : la valeur, elle, conserve simplement sa dernière lecture.

Toutes les variables déclarent un minimumSamplingInterval de 1000 ms. Demander un intervalle de publication plus rapide sur un abonnement ne produira pas de nouvelles données : les capteurs sans fil émettent selon leur propre intervalle configuré, généralement de quelques secondes à quelques minutes.

Quels capteurs apparaissent

Par défaut, tous les capteurs que voit la passerelle sont exportés, appairés ou non. Cochez Export only paired sensors pour limiter l’espace d’adressage aux capteurs appairés. Les nœuds sont ajoutés et retirés en direct au fur et à mesure que les capteurs sont appairés, désappairés, découverts ou oubliés : aucun redémarrage de la passerelle n’est nécessaire. Le booléen isPaired permet à un client qui exporte tout de filtrer lui-même.

Variables

La variable type contient le type du capteur selon le tableau suivant :

Code capteur Type de capteur
3 Accéléromètre triaxial (KX222, gamme haute)
5 Accéléromètre triaxial (KX122, gamme basse)
6 Accéléromètre triaxial (KX134)
7 Triaxial universel (vibration + thermocouple + courant)
8 Triaxial PHANTOM® Gen 4, gamme haute
9 Triaxial PHANTOM® Gen 4, gamme basse
10 Caméra thermique
12 Répéteur
14 PHANTOM® MAX, gamme haute
15 PHANTOM® MAX, gamme basse
20 Thermocouple
21 Thermocouple v2
22 Thermocouple v3
25 Température infrarouge
26 Entrée 4-20 mA
27 Voltmètre (0-10 VCC)
30 Module de courant v1
31 Entrées à contact sec
32 Module de courant v2 (4 voies)
40 Vitesse / RPM
50 Distance
60 Nœud à usage général (GP)
202 Afficheur

Variables communes à tous les capteurs

Nom de variable Type de donnée OPC UA Description
friendlyName String Nom défini dans la console. À défaut, le numéro de série du capteur.
isPaired Boolean true lorsque le capteur est appairé à cette passerelle.
type UInt16 Type du capteur selon le tableau ci-dessus.
version UInt16 Version du firmware du capteur.
battery Double Tension de la pile en volts.
batteryType UInt32 Type de pile. Voir le tableau des piles ci-dessous.
temperature Double Température interne du capteur en degrés Celsius.

Types de pile :

batteryType Pile
1 ⅙ D
2 AAA
3 CR2032
4 CR2477
5 AA
6 D

Accéléromètre triaxial (3, 5, 6, 8 et 9)

Nom de variable Type de donnée OPC UA Description
rms Double[3] RMS de vitesse en mm/s correspondant à chaque axe (X, Y, Z).
arms Double[3] RMS d’accélération en g correspondant à chaque axe (X, Y, Z).

PHANTOM® MAX (14 et 15)

Nom de variable Type de donnée OPC UA Description
rms Double[3] RMS de vitesse en mm/s par axe.
arms Double[3] RMS d’accélération en g par axe.
magneticspeed Double Vitesse de rotation obtenue magnétiquement, en Hz.

Triaxial universel (7)

Nom de variable Type de donnée OPC UA Description
rms Double[3] RMS de vitesse en mm/s par axe.
tcTemperature Double[] Température du thermocouple par voie, en degrés Celsius.
instCurrent Double[] Courant instantané par voie, en ampères.
averageCurrent Double[] Courant moyen sur la période de mise à jour, par voie.
minCurrent Double[] Courant minimal sur la période de mise à jour, par voie.
maxCurrent Double[] Courant maximal sur la période de mise à jour, par voie.
accumulatedCurrent Double[] Courant cumulé depuis la dernière remise à zéro, par voie.
accumulatedStart UInt32 Début de la fenêtre de cumul, en secondes depuis 1970.
accumulatedEnd UInt32 Fin de la fenêtre de cumul, en secondes depuis 1970.

Caméra thermique (10)

Nom de variable Type de donnée OPC UA Description
avgImageTemperature Double Température moyenne de l’image, en degrés Celsius.

L’image thermique elle-même n’est pas publiée via OPC UA. Utilisez MQTT.

Température par thermocouple (20, 21 et 22)

Nom de variable Type de donnée OPC UA Description
tcTemperature Double[] Température de chaque voie de thermocouple, en °C.

Température infrarouge (25)

Nom de variable Type de donnée OPC UA Description
ambientTemperature Double Température ambiante mesurée par le capteur infrarouge, en °C.
objectTemperature Double Température de l’objet visé par le capteur, en °C.
emissivity Double Émissivité configurée pour l’objet visé.

Capteur 4-20 mA (26) et voltmètre (27)

Nom de variable Type de donnée OPC UA Description
voltage Double[] Tension mesurée par voie, en volts.

Module de courant (30 et 32)

Nom de variable Type de donnée OPC UA Description
instCurrent Double[] Courant instantané de chacune des quatre voies du capteur, en ampères.
averageCurrent Double[] Courant moyen sur la période de mise à jour par voie, en ampères.
minCurrent Double[] Courant minimal sur la période de mise à jour par voie, en ampères.
maxCurrent Double[] Courant maximal sur la période de mise à jour par voie, en ampères.
accumulatedCurrent Double[] Courant cumulé depuis la dernière remise à zéro, par voie.
accumulatedStart UInt32 Début de la fenêtre de cumul, en secondes depuis 1970.
accumulatedEnd UInt32 Fin de la fenêtre de cumul, en secondes depuis 1970.
currentProbeType UInt16[] Type de sonde configuré sur chaque voie.
currentOffsets Double[] Décalage d’étalonnage appliqué à chaque voie.
currentMultiplier Double[] Multiplicateur d’étalonnage appliqué à chaque voie.

Capteur de contacts secs (31)

Nom de variable Type de donnée OPC UA Description
dryContactsState Boolean[] État de chaque entrée. true signifie contact fermé, false signifie ouvert.

Capteur de vitesse (RPM) (40)

Nom de variable Type de donnée OPC UA Description
rpm Double Vitesse actuelle en RPM.

Distance (50)

Nom de variable Type de donnée OPC UA Description
distance UInt16 Distance mesurée, en mm.

Nœud à usage général (60)

Nom de variable Type de donnée OPC UA Description
rms Double[] Valeur RMS par axe. Vitesse en mm/s, ou accélération en g, selon la configuration.

Répéteur (12)

Seuls type et version sont publiés.

Métriques étendues (capteurs triaxiaux)

Lorsqu’un capteur triaxial fournit une forme d’onde complète, la passerelle en calcule des statistiques par axe et les publie sous extendedMetrics, dans des sous-objets nommés 0 (X), 1 (Y) et 2 (Z) :

Métrique Unités Description
vrms mm/s RMS de vitesse calculé depuis la forme d’onde (10-1000 Hz).
arms g RMS d’accélération sur tout le spectre.
apeak g Crête d’accélération.
acf Facteur de crête d’accélération (apeak / arms).
highfreq g RMS d’accélération dans la bande 5-10 kHz.
maxfreq Hz Fréquence du pic spectral le plus élevé.
dcoffset g Composante continue du signal.

Ces nœuds apparaissent la première fois qu’une forme d’onde est collectée sur ce capteur, et leurs horodatages reflètent la dernière forme d’onde, pas la dernière mise à jour d’état.

Actions capteur (variables en écriture)

Chaque objet capteur comporte un dossier sensorActions avec des variables booléennes accessibles en écriture. Écrire dans l’une d’elles met l’action correspondante en file d’attente sur la passerelle ; la valeur relue indique si une action est en attente.

Variable Disponible sur Effet à l’écriture
triggerCollection Capteurs triaxiaux, GP et caméra thermique Demande une forme d’onde complète ou une image thermique au prochain contact.
triggerStateUpdate Tous les capteurs Demande une mise à jour d’état immédiate, sur les capteurs qui gèrent la mise à jour forcée.

Par exemple, écrire true dans ns=1;s=ph40217-actions-triggerCollection déclenche une collecte sur le capteur 40217. La forme d’onde résultante n’est pas renvoyée via OPC UA : elle est stockée puis transmise à EI-Analytic™, EI Monitor et/ou MQTT selon votre configuration.

Voies filaires du DEFIANT™

Sur un DEFIANT™, chaque voie filaire est ajoutée comme un objet nommé WiredCH1, WiredCH2, … avec les valeurs globales calculées pour cette voie sous forme de variables Double. Le browse name de l’objet et son NodeId commencent à 1 (WiredCH1 est la première voie, ns=1;s=wired1).

Groupe Browse names
Accélération accel_rms, accel_truepeak, accel_peaktopeak, accel_lowfreq, accel_medfreq, accel_highfreq, accel_kurtosis, accel_skewness
Vitesse velocity_rms, velocity_truepeak, velocity_peaktopeak, velocity_lowfreq, velocity_medfreq, velocity_highfreq, velocity_kurtosis, velocity_skewness
Enveloppe d’accélération gE, ge_truepeak, ge_peaktopeak, ge_lowfreq, ge_medfreq, ge_highfreq, ge_kurtosis, ge_skewness
Déplacement displacement_rms, displacement_truepeak, displacement_peaktopeak, displacement_offset
Vitesse de rotation rpm
Analogiques / discrètes voltage_discrete, voltage_average, discrete_value
Phase entre voies phase_channel_1phase_channel_16

Connexion : exemples concrets

UAExpert

  1. Server → Add → Custom Discovery → Double click to add server.
  2. Saisissez opc.tcp://192.168.1.2:4334/UA/PhantomGW.
  3. Développez le serveur découvert et choisissez le point de terminaison : None / None pour un premier test, ou Aes256_Sha256_RsaPss / Sign & Encrypt en production.
  4. Si vous avez désactivé l’accès anonyme, allez dans Authentication Settings → Username et saisissez les identifiants créés dans la console.
  5. Approuvez le certificat de la passerelle lorsqu’il vous est proposé, puis connectez-vous et parcourez Objects.

Python (opcua-asyncio)

import asyncio
from asyncua import Client

URL = "opc.tcp://192.168.1.2:4334/UA/PhantomGW"

async def main():
    async with Client(url=URL) as client:
        # Lire le tableau complet du RMS de vitesse
        rms = await client.get_node("ns=1;s=ph40217-rms").read_value()
        print("RMS de vitesse x/y/z (mm/s) :", rms)

        # Lire un seul axe
        rms_z = await client.get_node("ns=1;s=ph40217-rms_element2").read_value()
        print("RMS de vitesse Z (mm/s) :", rms_z)

        # Lire la valeur avec son horodatage source
        dv = await client.get_node("ns=1;s=ph40217-temperature").read_data_value()
        print("température :", dv.Value.Value, "à", dv.SourceTimestamp)

asyncio.run(main())

Avec l’authentification et le chiffrement activés :

client = Client(url=URL)
client.set_user("scada")
client.set_password("votre-mot-de-passe")
await client.set_security_string(
    "Aes256Sha256RsaPss,SignAndEncrypt,client-cert.der,client-key.pem"
)

S’abonner plutôt qu’interroger

Comme toutes les variables déclarent un intervalle d’échantillonnage minimal de 1000 ms, demandez un intervalle de publication de 1000 ms ou plus lent. Un intervalle plus rapide est accepté mais n’apporte aucune donnée supplémentaire.

class Handler:
    def datachange_notification(self, node, value, data):
        print(node, value, data.monitored_item.Value.SourceTimestamp)

sub = await client.create_subscription(1000, Handler())
await sub.subscribe_data_change(client.get_node("ns=1;s=ph40217-rms_element2"))

Dépannage

Symptôme Cause et solution
Le client ne découvre aucun point de terminaison Vérifiez que le serveur est activé et que la passerelle a redémarré ; vérifiez que le port TCP 4334 est joignable.
La découverte réussit mais la connexion échoue Le client réécrit le point de terminaison vers un nom d’hôte qu’il ne peut pas résoudre. Activez Override OPC hostname et indiquez un nom résoluble ou l’IP.
BadSecurityPolicyRejected ou aucun point compatible Disable OPC UA unencrypted communication est actif et votre client ne prend pas en charge les politiques AES. Utilisez un client compatible, ou désactivez l’option.
BadIdentityTokenRejected L’accès anonyme est désactivé. Fournissez l’un des couples nom d’utilisateur / mot de passe définis dans la console.
Un capteur est absent de l’arborescence Export only paired sensors est actif et le capteur n’est pas appairé, ou la passerelle ne l’a pas encore vu. Vérifiez isPaired.
Les valeurs ne changent jamais L’intervalle de mise à jour du capteur est plus long que votre période d’interrogation, ou le capteur a cessé d’émettre. Comparez sourceTimestamp à l’heure actuelle.