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

IIoT edge-ontwikkeling – gebruik van OPC UA-protocollen

Noot van de redactie:het Industrial Internet of Things (IIoT) belooft diepgaand inzicht te geven in industriële operaties en de efficiëntie van verbonden machines en systemen te verbeteren. Grootschalige IIoT-applicaties vertrouwen op gelaagde architecturen om gegevens van een breed scala aan sensoren te verzamelen, gegevens betrouwbaar en veilig naar de cloud te verplaatsen en analyses uit te voeren die nodig zijn om dat inzicht en die efficiëntie te leveren. In Industrial Internet Application Development geven de auteurs een gedetailleerd onderzoek van de IIoT-architectuur en bespreken ze benaderingen om te voldoen aan de brede vereisten die aan deze systemen zijn verbonden.

Aangepast van 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 zullen we proberen een eenvoudige IoT-app te bouwen voor het verzenden van gegevens van een sensorsimulatormodule naar een ontvangerapparaat (een pc of een cloud), met behulp van een Raspberry Pi-hub en het OPC UA-protocol:


Gegevensstroom van een sensorsimulator naar een ontvangend apparaat

Het OPC UA-protocol is vergelijkbaar met Modbus, maar werkt met meer gegevenstypen en heeft geen ernstige beperkingen, terwijl het zorgt voor beveiliging, compressie en lage latentie.

Het protocol is ontwikkeld door de OPC Foundation als een industrieel machine-to-machine communicatieprotocol. OPC UA (Unified Architecture) is een verbeterde versie van de Open Platform Communications (OPC ) protocol, met als een van de belangrijkste wijzigingen dat het nieuwe protocol gratis en zonder beperkingen beschikbaar is.

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

Sleutel Waarde Open sourceJaDe OSI-laagTransport of applicatieGegevenstypenInteger, float, string, Boolean, date, time, enzovoortBeperkingenNiet geschikt voor een complexe architectuurMogelijke bewerkingenLezen/schrijven/monitoren/query-variabelenLatencyLowUsageIIoTSecurityjaCompressionja

Tabel 5:OPC UA-protocolspecificaties

Voor het bouwen van de applicatie hebben we het volgende nodig:

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

Een SD-kaart voorbereiden

Om een ​​SD-kaart voor te bereiden, volgt u de volgorde van acties zoals beschreven:

  1. Download de nieuwste Raspbian LITE-afbeelding (beschikbaar op https://raspberrypi.org/downloads/raspbian/).

  2. Sluit je SD-kaart aan op een computer en gebruik Etcher (https://io/) om het Raspbian .img-bestand naar de SD te flashen kaart.

  3. SSH inschakelen:

cd /Volumes/boot touch ssh

  1. Als u wifi wilt inschakelen, maakt u conf aan met de volgende inhoud:

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

Om een ​​bestand in een Linux-console te maken, kunt u de GNU nano-editor gebruiken. Het is vooraf geïnstalleerd in de meeste Linux-distributieven. Het enige dat u nodig hebt, is de opdracht nano FILE_NAME uit te voeren en de weergegeven instructies te volgen.
  1. Maak de /home/pi/hub

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

{
   “name”:“hub”,
   “version”:“1.0.0”,
   “description”:“”,
   “ main”:“index.js”, “scripts”:{
      “start”:“node index.js”,
      “test”:“echo “Fout:geen test gespecificeerd” &&exit 1″
   },
   “author”:“”,
   “license”:“ISC”, “dependencies”:{
      “async”:“^2.4.0”,
      “node-opcua”:“0.0.64”,
      “verzoek”:“^2.81.0”
   }
}

  1. Maak het bestand /home/pi/hub/index.js met de volgende inhoud en vervang

REMOTE-SERVER-ADDRESS.com en REMOTE-SENSOR-ADDRESS met echte waarden:
var opcua =required(“node-opcua”); var async =required(“async”);
var request =required(“request”);
var sessie, abonnement;
var client =new opcua.OPCUAClient();
var sensor =“opc.tcp://REMOTE-SENSOR-ADRES:4334/UA/resourcePath”;
var receiver =“http://REMOTE-SERVER-ADDRESS.com:8080”;
async.series( [
// tot stand brengen van verbindingsfunctie (cb) {
   client.connect(sensor, function (err) {
      if (err) {
         console.log (“Verbinding met ” + sensor + “mislukt”);
      } else {
         console.log(“Verbinding succesvol”);
      }
      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=Variabele1”, function (err, dataValue) {
      if (!err) console.log(“Variable1 =“, dataValue.value.value);
      cb(err);
   });
},
// schrijfwaarde
function (cb) {
   session.writeSingleNode(“ns=1;s=Variable1”, new opcua.Variant({
      dataType:opcua.DataType.Double, waarde:100
   }), function (err) {
      cb(err);
   });
},
// abonneren op wijzigingen
function (cb) {
   subscription =new opcua.ClientSubscription(session, {
      maxNotificationsPerPublish:5,
      prioriteit:5,
      publishingIngeschakeld:true,
      requestedLifetimeCount:5,
      requestedMaxKeepAliveCount:3,
      requestedPublishingInterval:500,
   });
        console.log(“subscription id:“,
      subscription.subscriptionId);
   }).on(“beëindigd”, functie () {
      cb();
   });
   setTimeout(function () {
      subscription.terminate();
   }, 5000);
   // installeer gecontroleerd item
   var monitor =abonnement .monitor({
      attributeId:opcua. AttributeIds.Value,
      nodeId:opcua.resolveNodeId(“ns=1;s=Variable1”),
   },
   {
      discardOldest:true,
      s 50,
      queueSize:5,
   },
    opcua.read_service.TimestampsToReturn.Both
   );
   monitor.on(“gewijzigd”, functie (dataValue) {
      console.log(“Variable1 =“, dataValue.value.value);
      // verzenden naar ontvanger
      var data ={
         apparaat:“sensor1”,
         tijdstempel:Date.now(),
         Variabele1:dataValue.value.value
      };
   request.post({url:receiver, form:data}, function (err) {
      if (err) console.log(“Kan niet verzenden ” +
      JSON.stringify(data) + ” naar ” + ontvanger);
   });
});
},
// sluit sessie
function (cb) {
   session.close(function (err) {
      if (err) console.log(“Failed to sessie afsluiten”); cb();
   });
}
],
function (err) { if (err) {
   console.log(“Fout met fout:” , err);
} else {
   console.log(“Succesvol voltooid”);
}
client.disconnect(function () {
});
}
);

  1. Maak het /home/pi/hub/Dockerfile-bestand met de volgende inhoud:

VAN hypriot/rpi-node:boron-onbuild

  1. Maak de /home/pi/sensor

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

{
   “name”:“sensor”,
   “version”:“1.0.0”,
   “description”:“”,
   “ main”:“index.js”,
   “scripts”:{
      “start”:“node index.js”,
      “test”:“echo “Fout:geen test gespecificeerd” &&exit 1″
   },
   “author”:“”,
   “license”:“ISC”,
   “dependencies”:{
      “node-opcua ”:“0.0.64”
   }
}

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

var opcua =required(“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;
   // genereer nieuwe waarde
   setInterval(function () {
      variable1 =Math.floor(max – Math.random() * (max – min));
   }, 500);
   space.addVariable({
      browseName:“browseName”,
      componentOf:componentOf,
      dataType:“Double”,
      nodeId:“ns=1;s=Variabele1”, // a string nodeID
      waarde:{
         get:function () {
         retourneer nieuwe opcu a.Variant({dataType:opcua.DataType.Double, value:variable1});
         },
         set:function (variant) {
            variable1 =parseFloat(variant.value);
            variable1 =parseFloat(variant.value); br />            return opcua.StatusCodes.Good;
         }
      }
   });
   host.start(function () {
      var endpoint =
host.endpoints[0].endpointDescriptions()[0].endpointUrl; console.log(“Eindpunt:“, eindpunt);
   });
});

  1. Configureer de min en max waarden aan het begin van de

/home/pi/sensor/index.js bestand.

  1. Maak het /home/pi/sensor/Dockerfile-bestand met de volgende inhoud:

VAN hypriot/rpi-node:boron-onbuild


Internet of Things-technologie

  1. IIoT-beveiligingstips en trends voor 2020
  2. Cisco kondigt uitgebreide IIoT-beveiligingsarchitectuur, Cyber ​​Vision voor zichtbaarheid en Edge Intelligence aan
  3. IIoT-beveiliging beheren
  4. Slim sensorbord versnelt edge AI-ontwikkeling
  5. Een productontwikkelingsbedrijf dat 3D-printen gebruikt om alles te doen
  6. Vooruitzichten voor de ontwikkeling van industrieel IoT
  7. Waarom edge computing zo cruciaal is voor IIoT
  8. Fabrikanten en distributeurs gebruiken eindelijk IIoT en AI om de verkoop en productiviteit te verhogen
  9. IoT-app-ontwikkeling krijgt een grotere flexibiliteit door containertechnologieën
  10. Veranderen edge computing en IIoT de manier waarop we over data denken?
  11. Tools van de volgende generatie stuwen 5G en edge-ontwikkeling