Fabrication industrielle
Internet des objets industriel | Matériaux industriels | Entretien et réparation d'équipement | Programmation industrielle |
home  MfgRobots >> Fabrication industrielle >  >> Industrial Internet of Things >> Technologie de l'Internet des objets

Exploiter OPC UA pour un développement IIoT edge robuste

Exploiter OPC UA pour un développement IIoT edge robuste
Note de l'éditeur : L'Internet industriel des objets (IIoT) promet de fournir une vision approfondie des opérations industrielles et d'améliorer l'efficacité des machines et systèmes connectés. Les applications IIoT à grande échelle reposent sur des architectures en couches pour collecter des données d'une large gamme de capteurs, déplacer les données de manière fiable et sécurisée vers le cloud, et effectuer les analyses requises pour délivrer cette vision et efficacité. Dans Industrial Internet Application Development, les auteurs fournissent un examen détaillé de l'architecture IIoT et discutent des approches pour répondre aux exigences larges associées à ces systèmes.

Adapté de Industrial Internet Application Development, par Alena Traukina, Jayant Thomas, Prashant Tyagi, Kishore Reddipalli.


Chapitre 3. Développement IIoT en périphérie (suite)

Par Alena Traukina, Jayant Thomas, Prashant Tyagi, Kishore Reddipalli

Protocoles M2M industriels – OPC UA

Dans cette section, nous allons essayer de construire une application IoT simple pour envoyer des données d'un module simulateur de capteur à un périphérique récepteur (un PC ou un cloud), en utilisant un hub Raspberry Pi et le protocole OPC UA :

Exploiter OPC UA pour un développement IIoT edge robuste
Flux de données d'un simulateur de capteur vers un périphérique récepteur

Le protocole OPC UA est similaire à Modbus, mais fonctionne avec plus de types de données, et n'a pas de limitations sérieuses, tout en fournissant sécurité, compression et faible latence.

Le protocole a été développé par la OPC Foundation comme protocole de communication machine-à-machine industriel. OPC UA (Unified Architecture) est une version améliorée du protocole Open Platform Communications (OPC), l'un des changements majeurs étant que le nouveau protocole est disponible gratuitement sans aucune restriction.

Dans le tableau suivant, vous trouverez une description plus détaillée du protocole pour comprendre s'il convient à vos besoins :

CléValeur
Open sourceOui
Couche OSITransport ou application
Types de donnéesEntier, flottant, chaîne, booléen, date, heure, etc.
LimitationsNon adapté pour une architecture complexe
Opérations possiblesLecture/écriture/surveillance/interrogation de variables
LatenceFaible
UsageIIoT
SécuritéOui
CompressionOui

Tableau 5 : Spécifications du protocole OPC UA

Prérequis logiciels et matériels

Préparation de la carte SD

  1. Téléchargez la dernière image Raspbian LITE (disponible sur https://raspberrypi.org/downloads/raspbian/).
  2. Connectez votre carte SD à un ordinateur et utilisez Etcher (https://www.balena.io/etcher/) pour flasher le fichier .img de Raspbian sur la carte SD.
  3. Activez SSH :
cd /Volumes/boot
touch ssh
  1. Pour activer le Wi-Fi, créez wpa_supplicant.conf avec le contenu suivant :
network={
 ssid="VOTRE_SSID"
 psk="VOTRE_MOT_DE_PASSE_WIFI"
}
Exploiter OPC UA pour un développement IIoT edge robuste
Pour créer un fichier dans une console Linux, utilisez l'éditeur GNU nano (préinstallé). Exécutez nano NOM_FICHIER et suivez les instructions.
  1. Créez le répertoire /home/pi/hub
  2. Créez le fichier /home/pi/hub/package.json avec le contenu suivant :
{
 "name": "hub",
 "version": "1.0.0",
 "description": "",
 "main": "index.js",
 "scripts": {
 "start": "node index.js",
 "test": "echo \"Error: no test specified\" && exit 1"
 },
 "author": "",
 "license": "ISC",
 "dependencies": {
 "async": "^2.4.0",
 "node-opcua": "0.0.64",
 "request": "^2.81.0"
 }
}
  1. Créez le fichier /home/pi/hub/index.js avec le contenu suivant, en remplaçant ADRESSE-SERVEUR-DISTANT.com et ADRESSE-CAPTEUR-DISTANT par de vraies valeurs :
var opcua = require("node-opcua"); var async = require("async");
var request = require("request");
var session, subscription;
var client = new opcua.OPCUAClient();
var sensor = "opc.tcp://ADRESSE-CAPTEUR-DISTANT:4334/UA/resourcePath";
var receiver = "https://ADRESSE-SERVEUR-DISTANT.com:8080";
async.series( [
// établir la connexion
function (cb) {
 client.connect(sensor, function (err) {
 if (err) {
 console.log("Connection to " + sensor + " failed");
 } else {
 console.log("Connection successful");
 }
 cb(err);
 });
},
// démarrer la session
function (cb) {
 client.createSession(function (err, res) {
 if (!err) session = res;
 cb(err);
 });
},
// lire la valeur
function (cb) {
 session.readVariableValue("ns=1;s=Variable1", function (err, dataValue) {
 if (!err) console.log("Variable1 = ", dataValue.value.value);
 cb(err);
 });
},
// écrire la valeur
function (cb) {
 session.writeSingleNode("ns=1;s=Variable1", new opcua.Variant({
 dataType: opcua.DataType.Double, value: 100
 }), function (err) {
 cb(err);
 });
},
// s'abonner aux changements
function (cb) {
 subscription = new opcua.ClientSubscription(session, {
 maxNotificationsPerPublish: 5,
 priority: 5,
 publishingEnabled: true,
 requestedLifetimeCount: 5,
 requestedMaxKeepAliveCount: 3,
 requestedPublishingInterval: 500,
 });
 subscription.on("started", function () {
 console.log("subscription id: ", subscription.subscriptionId);
 }).on("terminated", function () {
 cb();
 });
 setTimeout(function () {
 subscription.terminate();
 }, 5000);
 // installer l'élément surveillé
 var monitor = subscription.monitor({
 attributeId: opcua.AttributeIds.Value,
 nodeId: opcua.resolveNodeId("ns=1;s=Variable1"),
 },
 {
 discardOldest: true,
 samplingInterval: 50,
 queueSize: 5,
 },
 opcua.read_service.TimestampsToReturn.Both
 );
 monitor.on("changed", function (dataValue) {
 console.log("Variable1 = ", dataValue.value.value);
 // envoyer au récepteur
 var data = {
 device: "sensor1",
 timestamp: Date.now(),
 Variable1: dataValue.value.value
 };
 request.post({url: receiver, form: data}, function (err) {
 if (err) console.log("Failed to send " + JSON.stringify(data) + " to " + receiver);
 });
 });
},
// fermer la session
function (cb) {
 session.close(function (err) {
 if (err) console.log("Failed to close session"); cb();
 });
}
],
function (err) { if (err) {
 console.log("Failed with error:", err);
 } else {
 console.log("Successfully finished");
 }
 client.disconnect(function () {
 });
}
);
  1. Créez le fichier /home/pi/hub/Dockerfile avec le contenu suivant :
FROM hypriot/rpi-node:boron-onbuild
  1. Créez le répertoire /home/pi/sensor
  2. Créez le fichier /home/pi/sensor/package.json avec le contenu suivant :
{
 "name": "sensor",
 "version": "1.0.0",
 "description": "",
 "main": "index.js",
 "scripts": {
 "start": "node index.js",
 "test": "echo \"Error: no test specified\" && exit 1"
 },
 "author": "",
 "license": "ISC",
 "dependencies": {
 "node-opcua": "0.0.64"
 }
}
  1. Créez le fichier /home/pi/sensor/index.js avec le contenu suivant :
var opcua = require("node-opcua");
var min = 1;
var max = 100;
var host = new opcua.OPCUAServer({
 buildInfo: {
 buildDate: new Date(2018, 8, 8),
 buildNumber: "1234",
 productName: "productName",
 },
 port: 4334,
 resourcePath: "UA/resourcePath",
});
host.initialize(function () {
 var space = host.engine.addressSpace;
 var componentOf = space.addObject({
 browseName: "browseName",
 organizedBy: space.rootFolder.objects,
 });
 var variable1 = 0;
 // générer nouvelle valeur
 setInterval(function () {
 variable1 = Math.floor(max - Math.random() * (max - min));
 }, 500);
 space.addVariable({
 browseName: "browseName",
 componentOf: componentOf,
 dataType: "Double",
 nodeId: "ns=1;s=Variable1", // un nodeID string
 value: {
 get: function () {
 return new opcua.Variant({dataType: opcua.DataType.Double, value: variable1});
 },
 set: function (variant) {
 variable1 = parseFloat(variant.value);
 return opcua.StatusCodes.Good;
 }
 }
 });
 host.start(function () {
 var endpoint = host.endpoints[0].endpointDescriptions()[0].endpointUrl;
 console.log("Endpoint: ", endpoint);
 });
});
  1. Configurez les valeurs min et max au début du fichier /home/pi/sensor/index.js.
  1. Créez le fichier /home/pi/sensor/Dockerfile avec le contenu suivant :
FROM hypriot/rpi-node:boron-onbuild

Technologie de l'Internet des objets

  1. Sécurité Industrial IoT : tendances clés et meilleures pratiques 2020
  2. Cisco dévoile architecture sécurité IIoT complète et Edge Intelligence pour visibilité OT
  3. Sécuriser l'Internet des objets industriel : stratégies, standards et chaîne de confiance
  4. Glassboard : Exploiter l'Impression 3D pour un Développement Produit Rapide et Fiable
  5. Perspectives futures : faire progresser l'IIoT industriel pour l'excellence de production
  6. Edge Computing : la clé du succès de l'IoT industriel en temps réel
  7. Exploiter l'IIoT et l'IA pour booster ventes et productivité des fabricants et distributeurs
  8. Les conteneurs renforcent le développement agile d'applications IoT
  9. Edge Computing et IIoT : Transformer la stratégie des données industrielles