Industriële fabricage
Industrieel internet der dingen | Industriële materialen | Onderhoud en reparatie van apparatuur | Industriële programmering |
home  MfgRobots >> Industriële fabricage >  >> Industrial Internet of Things >> Internet of Things-technologie

OPC UA Benutten voor Robuuste IIoT Edge Ontwikkeling

OPC UA Benutten voor Robuuste IIoT Edge Ontwikkeling Opmerking van de redacteur: Het Industrial Internet of Things (IIoT) belooft diep inzicht in industriële operaties te bieden en de efficiëntie van verbonden machines en systemen te verbeteren. Grootschalige IIoT-toepassingen vertrouwen op gelaagde architecturen om data van een breed scala aan sensoren te verzamelen, data betrouwbaar en veilig naar de cloud te verplaatsen, en de analyse uit te voeren die nodig is om die inzicht en efficiëntie te leveren. In Industrial Internet Application Development bieden de auteurs een gedetailleerde examen van de IIoT-architectuur en bespreken ze benaderingen voor het voldoen aan de brede vereisten geassocieerd met deze systemen.

Geaccepteerd uit Industrial Internet Application Development, door Alena Traukina, Jayant Thomas, Prashant Tyagi, Kishore Reddipalli.


Hoofdstuk 3. IIoT Edge Ontwikkeling (Vervolg)

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

Industriële M2M protocollen – OPC UA

In deze sectie proberen we een simpele IoT-app te bouwen voor het verzenden van data van een sensor simulator module naar een ontvangapparaat (een PC of een cloud), gebruikmakend van een Raspberry Pi hub en het OPC UA protocol:

OPC UA Benutten voor Robuuste IIoT Edge Ontwikkeling
Dataflow van een sensor simulator naar een ontvangapparaat

Het OPC UA protocol is vergelijkbaar met Modbus, maar werkt met meer datatypes, en heeft geen serieuze beperkingen, terwijl het voorziet in beveiliging, compressie en lage latentie.

Het protocol is ontwikkeld door de OPC Foundation als een industriële machine-to-machine communicatieprotocol. OPC UA (Unified Architecture) is een verbeterde versie van het Open Platform Communications (OPC) protocol, met een van de grote veranderingen dat het nieuwe protocol gratis beschikbaar is zonder restricties.

In de volgende tabel vindt u een gedetailleerdere beschrijving van het protocol om te begrijpen of het geschikt is voor uw behoeften:

SleutelWaarde
Open sourceJa
OSI laagTransport of applicatie
DatatypesInteger, float, string, Boolean, datum, tijd, enz.
BeperkingenNiet geschikt voor een complexe architectuur
Mogelijke operatiesVariabelen lezen/schrijven/monitoren/querien
LatentieLaag
GebruikIIoT
BeveiligingJa
CompressieJa

Tabel 5: OPC UA protocol specificaties

Benodigde software en hardware

  • Benodigde software
    • Node.js 6+ (https://nodejs.org/en/download/)
    • PostgreSQL (https://www.postgresql.org/download/)
    • The Cloud Foundry CLI (https://github.com/cloudfoundry/cli#downloads)
    • Request (https://www.npmjs.com/package/request)
    • NodeOPCUA (https://www.npmjs.com/package/node-opcua)
    • Async (https://www.npmjs.com/package/async)
    • Docker (https://docs.docker.com/engine/installation/)
  • Benodigde hardware
    • Raspberry Pi 3 (model B)
    • Een voeding (2A/5V)
    • Een microSD kaart (8 GB+) en een SD adapter
    • Ethernet kabel voor een bedrade netwerkverbinding

Een SD-kaart voorbereiden

  1. Download de meest recente Raspbian LITE image (beschikbaar op https://raspberrypi.org/downloads/raspbian/).

  2. Sluit uw SD-kaart aan op een computer en gebruik Etcher (https://www.balena.io/etcher/) om de Raspbian .img file naar de SD-kaart te flashen.

  3. Schakel SSH in:

cd /Volumes/boot
touch ssh
  1. Om Wi-Fi in te schakelen, maak wpa_supplicant.conf aan met de volgende inhoud:

network={
 ssid="JOUW_SSID"
 psk="JOUW_WIFI_WACHTWOORD"
}
OPC UA Benutten voor Robuuste IIoT Edge Ontwikkeling

Om een bestand aan te maken in een Linux console, kunt u de GNU nano editor gebruiken. Deze is voorgeïnstalleerd in de meeste Linux distributies. U hoeft alleen het commando nano BESTANDSNAAM uit te voeren en de getoonde instructies te volgen.

  1. Maak de map /home/pi/hub

  2. Maak het bestand /home/pi/hub/package.json aan met de volgende inhoud:

{
 "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. Maak het bestand /home/pi/hub/index.js aan met de volgende inhoud, vervang

REMOTE-SERVER-ADDRESS.com en REMOTE-SENSOR-ADDRESS met echte waarden:
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( [
// verbinding tot stand brengen function (cb) {
 client.connect(sensor, function (err) {
 if (err) {
 console.log("Verbinding met " + sensor + "mislukt");
 } else {
 console.log("Verbinding succesvol");
 }
 cb(err);
 });},
// sessie starten function (cb) {
 client.createSession(function (err, res) {
 if (!err) session = res;
 cb(err);
 });},
// waarde lezen
function (cb) {
 session.readVariableValue("ns=1;s=Variable1", function (err, dataValue) {
 if (!err) console.log("Variable1 = ", dataValue.value.value);
 cb(err);
 });},
// waarde schrijven
function (cb) {
 session.writeSingleNode("ns=1;s=Variable1", new opcua.Variant({
 dataType: opcua.DataType.Double, value: 100
 }), function (err) {
 cb(err);
 });},
// abonneren op veranderingen
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 installeren
 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);
 // naar ontvanger sturen
 var data = {
 device: "sensor1",
 timestamp: Date.now(),
 Variable1: dataValue.value.value
 };
 request.post({url: receiver, form: data}, function (err) {
 if (err) console.log("Verzenden mislukt " + JSON.stringify(data) + " naar " + receiver);
 });
 });},
// sessie sluiten
function (cb) {
 session.close(function (err) {
 if (err) console.log("Sessie sluiten mislukt"); cb();
 });
 }
],
function (err) { if (err) {
 console.log("Mislukt met fout:", err);
 } else {
 console.log("Succesvol voltooid");
 }
 client.disconnect(function () {
 });
}
);
  1. Maak het bestand /home/pi/hub/Dockerfile aan met de volgende inhoud:

FROM hypriot/rpi-node:boron-onbuild
  1. Maak de map /home/pi/sensor

  2. Maak het bestand /home/pi/sensor/package.json aan met de volgende inhoud:

{
 "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. Maak het bestand /home/pi/sensor/index.js aan met de volgende inhoud:

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;
 // nieuwe waarde genereren
 setInterval(function () {
 variable1 = Math.floor(max - Math.random() * (max - min));
 }, 500);
 space.addVariable({
 browseName: "browseName",
 componentOf: componentOf,
 dataType: "Double",
 nodeId: "ns=1;s=Variable1", // een string nodeID
 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. Configureer de min en max waarden aan het begin van het

/home/pi/sensor/index.js bestand.
  1. Maak het bestand /home/pi/sensor/Dockerfile aan met de volgende inhoud:

FROM hypriot/rpi-node:boron-onbuild

Internet of Things-technologie

  1. Glassboard: 3D-printen Inzetten Voor Snelle, Betrouwbare Productontwikkeling
  2. ECM3532: Eta Compute’s eerste geïntegreerde, ultra-laagstroom AI-sensorboard versnelt edge-ontwikkeling
  3. Industriële IoT Beveiliging: Belangrijkste Trends en Best Practices voor 2020
  4. Cisco Onthult Uitgebreide IIoT Beveiligingsarchitectuur en Edge Intelligence voor OT Zichtbaarheid
  5. De Industriële Internet of Things Beveiligen: Strategieën, Standaarden en de Chain of Trust
  6. Toekomstperspectief: Industrial IoT voortgang voor productie-excellentie
  7. Edge Computing: De Sleutel tot Realtime Industriële IoT Succes
  8. IIoT en AI Inzetten om Sales en Productiviteit te Boosten voor Fabrikanten & Distributeurs
  9. Containers Versterken Agile IoT App-ontwikkeling
  10. Edge Computing & IIoT: Transformatie van industriële datastrategie
  11. Next-Gen Tools Versnellen 5G & Edge Computing Adoptie