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.

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
où 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
eth0actuelle de la passerelle, ou celle dewlan0en 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_RsaOaepouAes256_Sha256_RsaPssavant 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.

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_elementNs’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_1 … phase_channel_16 |
Connexion : exemples concrets
UAExpert
- Server → Add → Custom Discovery → Double click to add server.
- Saisissez
opc.tcp://192.168.1.2:4334/UA/PhantomGW. - 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.
- Si vous avez désactivé l’accès anonyme, allez dans Authentication Settings → Username et saisissez les identifiants créés dans la console.
- 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. |