Industrielle Fertigung
Industrielles Internet der Dinge | Industrielle Materialien | Gerätewartung und Reparatur | Industrielle Programmierung |
home  MfgRobots >> Industrielle Fertigung >  >> Industrial Internet of Things >> Internet der Dinge-Technologie

IIoT-Edge-Entwicklung – Verwendung von OPC UA-Protokollen

Anmerkung der Redaktion:Das Industrial Internet of Things (IIoT) verspricht tiefe Einblicke in industrielle Abläufe und verbessert die Effizienz vernetzter Maschinen und Systeme. Groß angelegte IIoT-Anwendungen verlassen sich auf mehrschichtige Architekturen, um Daten von einer Vielzahl von Sensoren zu sammeln, Daten zuverlässig und sicher in die Cloud zu verschieben und Analysen durchzuführen, die für die Bereitstellung dieser Erkenntnisse und Effizienz erforderlich sind. In Industrial Internet Application Development bieten die Autoren eine detaillierte Untersuchung der IIoT-Architektur und diskutieren Ansätze zur Erfüllung der breiten Anforderungen, die mit diesen Systemen verbunden sind.

Angepasst an die Entwicklung von industriellen Internetanwendungen, von Alena Traukina, Jayant Thomas, Prashant Tyagi, Kishore Reddipalli.


Kapitel 3. IIoT Edge-Entwicklung (Fortsetzung)
Von Alena Traukina, Jayant Thomas, Prashant Tyagi, Kishore Reddipalli

Industrielle M2M-Protokolle – OPC UA

In diesem Abschnitt werden wir versuchen, eine einfache IoT-App zum Senden von Daten von einem Sensorsimulatormodul an ein Empfängergerät (ein PC oder eine Cloud) mithilfe eines Raspberry Pi-Hubs und des OPC UA-Protokolls zu erstellen:


Datenfluss von einem Sensorsimulator zu einem Empfängergerät

Das OPC UA-Protokoll ähnelt Modbus, funktioniert jedoch mit mehr Datentypen und hat keine ernsthaften Einschränkungen, während es gleichzeitig Sicherheit, Komprimierung und geringe Latenz bietet.

Das Protokoll wurde von der OPC Foundation als industrielles Machine-to-Machine-Kommunikationsprotokoll entwickelt. OPC UA (Unified Architecture) ist eine verbesserte Version der Open Platform Communications (OPC ) Protokoll, wobei eine der wichtigsten Änderungen darin besteht, dass das neue Protokoll ohne Einschränkungen kostenlos verfügbar ist.

In der folgenden Tabelle finden Sie eine genauere Beschreibung des Protokolls, um zu verstehen, ob es für Ihre Anforderungen geeignet ist:

Schlüssel Wert Open SourceJaDie OSI-SchichtTransport oder AnwendungDatentypenInteger, Float, String, Boolean, Datum, Uhrzeit usw.EinschränkungenNicht für eine komplexe Architektur geeignetMögliche OperationenLese-/Schreib-/Überwachungs-/AbfragevariablenLatencyLowUsageIIoTSecurityJaKompressionJa

Tabelle 5:Spezifikationen des OPC UA-Protokolls

Zum Erstellen der Anwendung benötigen wir Folgendes:

Vorbereiten einer SD-Karte

Um eine SD-Karte vorzubereiten, befolgen Sie die beschriebene Reihenfolge der Aktionen:

  1. Laden Sie das neueste Raspbian LITE-Image herunter (verfügbar unter https://raspberrypi.org/downloads/raspbian/).

  2. Verbinden Sie Ihre SD-Karte mit einem Computer und verwenden Sie Etcher (https://io/), um die Raspbian-.img-Datei auf die SD zu flashen Karte.

  3. SSH aktivieren:

cd /Volumes/boot touch ssh

  1. Um WLAN zu aktivieren, erstellen Sie eine conf mit folgendem Inhalt:

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

Um eine Datei in einer Linux-Konsole zu erstellen, können Sie den GNU Nano-Editor verwenden. Es ist in den meisten Linux-Distributionen vorinstalliert. Sie müssen lediglich den Befehl nano FILE_NAME ausführen und den angezeigten Anweisungen folgen.
  1. Erstellen Sie /home/pi/hub

  2. Erstellen Sie die Datei /home/pi/hub/package.json mit folgendem Inhalt:

{
   "Name":"Hub",
   "Version":"1.0.0",
   "Beschreibung":"",
   “ main":"index.js", "scripts":{
      "start":"node index.js",
      "test":"echo "Fehler:kein Test angegeben" &&exit 1″
   },
   "Autor":"",
   "Lizenz":"ISC", "Abhängigkeiten":{
      "async":"^2.4.0",
      "node-opcua":"0.0.64",
      "Anfrage":"^2.81.0"
   }
}

  1. Erstellen Sie die Datei /home/pi/hub/index.js mit dem folgenden Inhalt und ersetzen Sie dabei

REMOTE-SERVER-ADDRESS.com und REMOTE-SENSOR-ADDRESS mit realen Werten:
var opcua =require(“node-opcua”); var async =require(“async“);
var request =require(“request“);
var Session, Abonnement;
var client =new opcua.OPCUAClient();
var sensor =„opc.tcp://REMOTE-SENSOR- ADDRESS:4334/UA/resourcePath“;
var empfänger =„http://REMOTE-SERVER-ADDRESS.com:8080“;
async.series( [
// Verbindungsaufbaufunktion (cb) {
   client.connect(sensor, function (err) {
      if (err) {
         console.log ("Verbindung zu " + Sensor + "fehlgeschlagen");
      } else {
         console.log("Verbindung erfolgreich");
      }
      cb(err);
   });
},
// start 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);
   });
},
// Wert schreiben
Funktion (cb) {
   session.writeSingleNode(“ns=1;s=Variable1”, new opcua.Variant({
      dataType:opcua.DataType.Double, Wert:100
   }), Funktion (err) {
      cb(err);
   });
},
// Änderungen abonnieren
function (cb) {
   subscription =new opcua.ClientSubscription(session, {
      maxNotificationsPerPublish:5,
      Priorität:5,
      publishingEnabled:true,
      requestedLifetimeCount:5,
      requestedMaxKeepAliveCount:3,
      requestedPublishingInterval:500,
   });
   subscription.on("started", function () {
      console.log("Abonnement-ID:",
      subscription.subscriptionId);
   }).on("terminated", function () {
      cb();
   });
   setTimeout(function () {
      subscription.terminate();
   }, 5000);
   // Überwachtes Element installieren
   var monitor =Abonnement .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("changed", function (dataValue) {
      console.log("Variable1 =", dataValue.value.value);
      // an Empfänger senden
      var data ={
         device:"sensor1",
         Zeitstempel:Date.now(),
         Variable1:dataValue.value.value
      };
   request.post({url:receiver, form:data}, function (err) {
      if (err) console.log("Fehler beim Senden von ” +
      JSON.stringify(data) + ” an ” + Receiver);
   });
});
},
// close session
function (cb) {
   session.close(function (err) {
      if (err) console.log(“Failed to Sitzung schließen“); cb();
   });
}
],
function (err) { if (err) {
   console.log("Failed with error:" , err);
} else {
   console.log("Erfolgreich abgeschlossen");
}
client.disconnect(function () {
});
}
);

  1. Erstellen Sie die Datei /home/pi/hub/Dockerfile mit folgendem Inhalt:

VON hypriot/rpi-node:boron-onbuild

  1. Erstelle /home/pi/sensor

  2. Erstellen Sie die Datei /home/pi/sensor/package.json mit folgendem Inhalt:

{
   "Name":"Sensor",
   "Version":"1.0.0",
   "Beschreibung":"",
   “ main“:„index.js“,
   „scripts“:{
      „start“:„node index.js“,
      „test“:„echo „Fehler:kein Test angegeben“ &&Ausfahrt 1″
   },
   "Autor":"",
   "Lizenz":"ISC",
   "Abhängigkeiten":{
      "node-opcua ”:“0.0.64”
   }
}

  1. Erstellen Sie die Datei /home/pi/sensor/index.js mit folgendem Inhalt:

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;
   // Neuen Wert generieren
   setInterval(function () {
      variable1 =Math.floor(max – Math.random() * (max – min));
   }, 500);
   space.addVariable({
      browseName:"browseName",
      componentOf:componentOf,
      dataType:"Double",
      nodeId:"ns=1;s=Variable1", // eine Zeichenfolge nodeID
      value:{
         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("Endpunkt:", Endpunkt);
   });
});

  1. Konfigurieren Sie die Min- und Max-Werte am Anfang des

/home/pi/sensor/index.js-Datei.

  1. Erstellen Sie die Datei /home/pi/sensor/Dockerfile mit folgendem Inhalt:

VON hypriot/rpi-node:boron-onbuild


Internet der Dinge-Technologie

  1. Tipps und Trends zur IIoT-Sicherheit für 2020
  2. Cisco kündigt umfassende IIoT-Sicherheitsarchitektur, Cyber ​​Vision für Transparenz und Edge Intelligence an
  3. Verwalten der IIoT-Sicherheit
  4. Smart Sensor Board beschleunigt die Entwicklung von Edge-KI
  5. Ein Produktentwicklungsunternehmen, das 3D-Druck verwendet, um alles zu tun
  6. Aussichten für die Entwicklung des industriellen IoT
  7. Warum Edge Computing für das IIoT so wichtig ist
  8. Hersteller und Distributoren nutzen endlich IIoT und KI, um Umsatz und Produktivität zu steigern
  9. IoT-App-Entwicklung erhält Agilitätsschub durch Container-Technologien
  10. Verändern Edge Computing und IIoT unser Denken über Daten?