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

Développement IIoT Edge – Utilisation des protocoles OPC UA

Note de l'éditeur : l'Internet industriel des objets (IIoT) promet de fournir un aperçu approfondi des opérations industrielles et d'améliorer l'efficacité des machines et des systèmes connectés. Les applications IIoT à grande échelle reposent sur des architectures en couches pour collecter des données à partir 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 nécessaires pour fournir ces informations et cette efficacité. Dans Industrial Internet Application Development, les auteurs fournissent un examen détaillé de l'architecture IIoT et discutent des approches permettant de répondre aux exigences générales 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 Edge (suite)
Par Alena Traukina, Jayant Thomas, Prashant Tyagi, Kishore Reddipalli

Protocoles M2M industriels – OPC UA

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


Flux de données d'un simulateur de capteur vers un appareil 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 assurant la sécurité, la compression et une faible latence.

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

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

Clé Valeur Open sourceOuiLa couche OSITransport ou applicationTypes de donnéesEntier, flottant, chaîne, Booléen, date, heure, etc.LimitationsNe convient pas à une architecture complexeOpérations possiblesLecture/écriture/surveillance/variables de requêteLatenceFaibleUsageIIoTSécuritéOuiCompressionOui

Tableau 5 :Spécifications du protocole OPC UA

Pour construire l'application, nous aurons besoin des éléments suivants :

Préparation d'une carte SD

Pour préparer une carte SD, suivez la séquence d'actions décrite :

  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://io/) pour flasher le fichier Raspbian .img sur la SD carte.

  3. Activer SSH :

cd /Volumes/boot touch ssh

  1. Pour activer le Wi-Fi, créez une conf avec le contenu suivant :

network={
   ssid="YOUR_SSID"
   psk="YOUR_WIFI_PASSWORD"
}

Pour créer un fichier dans une console Linux, vous pouvez utiliser l'éditeur nano GNU. Il est pré-installé dans la plupart des distributions Linux. Tout ce dont vous avez besoin est d'exécuter la commande nano FILE_NAME et de suivre les instructions affichées.
  1. Créez le /home/pi/hub

  2. Créez le fichier /home/pi/hub/package.json avec le contenu suivant :

{
   "nom" :"hub",
   "version" :"1.0.0",
   "description" :"",
   " main" :"index.js", "scripts" :{
      "start" :"node index.js",
      « test » :« echo « Erreur :aucun test spécifié » &&exit 1″
   },
   "auteur" :"",
   "licence" :"ISC", "dépendances" :{
      "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

REMOTE-SERVER-ADDRESS.com et REMOTE-SENSOR-ADDRESS avec des valeurs réelles :
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://REMOTE-SENSOR- ADDRESS:4334/UA/resourcePath";
var receiver ="http://REMOTE-SERVER-ADDRESS.com:8080";
async.series( [
// fonction d'établissement de la connexion (cb) {
   client.connect(sensor, function (err) {
      if (err) {
         console.log ("Connexion à " + capteur + " échec ");
      } else {
         console.log ("Connexion réussie");
      }
      cb(err);
   });
},
// démarrer la session function (cb) {
   client.createSession(function (err, res) {
      if (!err) session =res;
      cb(err);
   });
},
// read value
function (cb) {
   session.readVariableValue(“ ns=1;s=Variable1", function (err, dataValue) {
      if (!err) console.log("Variable1 =", dataValue.value.value);
      cb(err);
   } );
},
// write value
function (cb) {
   session.writeSingleNode(“ns=1;s=Variable1”, new opcua.Variant({
      dataType :opcua.DataType.Double, valeur :100
   }), function (err) {
      cb(err);
   });
},
// s'abonner aux modifications
function (cb) {
   subscription =new opcua.ClientSubscription(session, {
      maxNotificationsPerPublish :5,
      priority :5,
      publishingEnabled :true,
      requestedLifetimeCount : 5,
      requestedMaxKeepAliveCount :3,
      requestedPublishingInterval :500,
   });
   subscription.on(« démarré », fonction () {
      console.log("identifiant d'abonnement :",
      subscription.subscriptionId);
   }).on("terminé", fonction () {
      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,
      sampling 50,
      queueSize :5,
   },
   opcua.read_service.TimestampsToReturn.Both
   );
   monitor.on(« changé », fonction (valeur de données) {
      console.log("Variable1 =", dataValue.value.value);
      // envoyer au destinataire
      var data ={
         périphérique :"sensor1",
         timestamp :Date.now(),
         Variable1 :dataValue.value.value
      } ;
   request.post({url :receiver, form :data}, function (err) {
      if (err) console.log("Impossible d'envoyer " +
      JSON.stringify(data) + " to " + récepteur );
   });
});
},
// close session
function (cb) {
   session.close(function (err) {
      if (err) console.log ("Échec de Fermer la session"); cb();
   });
}
],
function (err) { if (err) {
   console.log("Échec avec erreur :" , err);
} else {
   console.log("Terminé avec succès");
}
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 /home/pi/sensor

  2. Créez le fichier /home/pi/sensor/package.json avec le contenu suivant :

{
   "nom" :"capteur",
   "version" :"1.0.0",
   "description" :"",
   " main" :"index.js",
   "scripts" :{
      "start" :"node index.js",
      "test" :"echo "Erreur :aucun test spécifié" &&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 une 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", // une chaîne nodeID
      valeur :{
         get :function () {
         return new opcu a.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

/home/pi/sensor/index.js fichier.

  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. Conseils et tendances de sécurité IIoT pour 2020
  2. Cisco annonce une architecture de sécurité IIoT complète, Cyber ​​Vision pour la visibilité et Edge Intelligence
  3. Gestion de la sécurité IIoT
  4. Une société de développement de produits utilisant l'impression 3D pour tout faire
  5. Perspectives de développement de l'IoT industriel
  6. Pourquoi l'edge computing est si crucial pour l'IIoT
  7. Les fabricants et les distributeurs utilisent enfin l'IIoT et l'IA pour augmenter leurs ventes et leur productivité
  8. Le développement d'applications IoT obtient un gain d'agilité grâce aux technologies de conteneurs
  9. L'edge computing et l'IIoT changent-ils notre façon de penser les données ?