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

OPC UA für robuste IIoT Edge-Entwicklung nutzen

OPC UA für robuste IIoT Edge-Entwicklung nutzen
Redaktioneller Hinweis: Das Industrial Internet of Things (IIoT) verspricht tiefe Einblicke in industrielle Abläufe und Effizienzsteigerung vernetzter Maschinen und Systeme. Großangelegte IIoT-Anwendungen basieren auf geschichteten Architekturen, um Daten von vielfältigen Sensoren zu sammeln, diese zuverlässig und sicher in die Cloud zu bewegen und Analysen durchzuführen, die diesen Einblick und Effizienz liefern. In Industrial Internet Application Development untersuchen die Autoren die IIoT-Architektur detailliert und diskutieren Ansätze zur Erfüllung der breiten Anforderungen dieser Systeme.

Adaptiert aus Industrial Internet Application Development, 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 bauen wir eine einfache IoT App, um Daten von einem Sensor Simulator Modul an ein Empfängergerät (PC oder Cloud) zu senden, menggunakan einen Raspberry Pi Hub und das OPC UA Protokoll:

OPC UA für robuste IIoT Edge-Entwicklung nutzen
Datenfluss von einem Sensor Simulator zu einem Empfängergerät

Das OPC UA Protokoll ähnelt Modbus, arbeitet aber mit mehr Datentypen, hat keine ernsthaften Limitations und bietet Sicherheit, Kompression und niedrige Latenz.

Das Protokoll wurde von der OPC Foundation als industrielles Machine-to-Machine Kommunikationsprotokoll entwickelt. OPC UA (Unified Architecture) ist eine verbesserte Version des Open Platform Communications (OPC) Protokolls, wobei eine der großen Änderungen ist, dass das neue Protokoll kostenlos und ohne Restriktionen verfügbar ist.

In der folgenden Tabelle finden Sie eine detailliertere Beschreibung des Protokolls, um zu beurteilen, ob es für Ihre Bedürfnisse geeignet ist:

SchlüsselWert
Open SourceJa
OSI LayerTransport oder Application
DatentypenInteger, Float, String, Boolean, Date, Time, etc.
EinschränkungenNicht geeignet für komplexe Architekturen
Mögliche OperationenVariablen Read/Write/Monitor/Query
LatenzNiedrig
VerwendungIIoT
SicherheitJa
KompressionJa

Tabelle 5: OPC UA Protokollspezifikationen

Benötigte Komponenten

SD Karte vorbereiten

  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 nutzen Sie Etcher (https://www.balena.io/etcher/), um das Raspbian .img File auf die SD Karte zu flashen.
  3. Aktivieren Sie SSH:
cd /Volumes/boot
touch ssh
  1. Für Wi-Fi erstellen Sie wpa_supplicant.conf mit folgendem Inhalt:
network={
 ssid="YOUR_SSID"
 psk="YOUR_WIFI_PASSWORD"
}
OPC UA für robuste IIoT Edge-Entwicklung nutzen

Zum Erstellen einer Datei in der Linux Konsole nutzen Sie den GNU nano Editor. Er ist in den meisten Linux Distributionen vorinstalliert. Führen Sie einfach nano DATEINAME aus und folgen Sie den Anweisungen.

  1. Erstellen Sie /home/pi/hub
  2. Erstellen Sie /home/pi/hub/package.json mit folgendem Inhalt:
{
 "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. Erstellen Sie /home/pi/hub/index.js mit folgendem Inhalt, ersetzen Sie REMOTE-SERVER-ADDRESS.com und REMOTE-SENSOR-ADDRESS durch echte Werte:
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 = "https://REMOTE-SERVER-ADDRESS.com:8080";
async.series( [
// Verbindung herstellen
function (cb) {
 client.connect(sensor, function (err) {
 if (err) {
 console.log("Connection to " + sensor + "failed");
 } else {
 console.log("Connection successful");
 }
 cb(err);
 });
},
// Session starten
function (cb) {
 client.createSession(function (err, res) {
 if (!err) session = res;
 cb(err);
 });
},
// Wert lesen
function (cb) {
 session.readVariableValue("ns=1;s=Variable1", function (err, dataValue) {
 if (!err) console.log("Variable1 = ", dataValue.value.value);
 cb(err);
 });
},
// Wert schreiben
function (cb) {
 session.writeSingleNode("ns=1;s=Variable1", new opcua.Variant({
 dataType: opcua.DataType.Double, value: 100
 }), function (err) {
 cb(err);
 });
},
// Changes abonnieren
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);
 // Monitored Item installieren
 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);
 // An Receiver senden
 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);
 });
 });
},
// Session schließen
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. Erstellen Sie /home/pi/hub/Dockerfile:
FROM hypriot/rpi-node:boron-onbuild
  1. Erstellen Sie /home/pi/sensor
  2. Erstellen Sie /home/pi/sensor/package.json:
{
 "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. Erstellen Sie /home/pi/sensor/index.js:
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",
 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. Konfigurieren Sie min und max Werte am Anfang der /home/pi/sensor/index.js Datei.
  1. Erstellen Sie /home/pi/sensor/Dockerfile:
FROM hypriot/rpi-node:boron-onbuild

Internet der Dinge-Technologie

  1. Industrial IoT Security: Schlüsseltrends und Best Practices für 2020
  2. Cisco enthüllt umfassende IIoT Security Architecture und Edge Intelligence für OT Visibility
  3. Industrial Internet of Things sichern: Strategien, Standards und die Chain of Trust
  4. ECM3532: Eta Computes erstes integriertes Ultra-Low-Power KI Sensor Board beschleunigt Edge Development
  5. Glassboard: 3D-Druck für schnelle, zuverlässige Produktentwicklung nutzen
  6. Zukunftsausblick: Industrial IoT für Production Excellence vorantreiben
  7. Edge Computing: Der Schlüssel zum Echtzeit-Erfolg im Industrial IoT
  8. IIoT und KI nutzen, um Umsatz und Produktivität für Hersteller & Distributoren zu steigern
  9. Container befähigen agile IoT-App-Entwicklung
  10. Edge Computing & IIoT: Transformation der industriellen Datenstrategie