Manufactura industrial
Internet industrial de las cosas | Materiales industriales | Mantenimiento y reparación de equipos | Programación industrial |
home  MfgRobots >> Manufactura industrial >  >> Industrial Internet of Things >> Tecnología de Internet de las cosas

Aprovechando OPC UA para desarrollo robusto edge IIoT

Aprovechando OPC UA para desarrollo robusto edge IIoT
Nota del editor: El Internet Industrial de las Cosas (IIoT) promete proporcionar una visión profunda de las operaciones industriales y mejorar la eficiencia de máquinas y sistemas conectados. Las aplicaciones IIoT a gran escala dependen de arquitecturas en capas para recopilar datos de una amplia gama de sensores, mover datos de forma fiable y segura a la nube, y realizar el análisis necesario para ofrecer esa visión y eficiencia. En Industrial Internet Application Development, los autores proporcionan un examen detallado de la arquitectura IIoT y discuten enfoques para cumplir los amplios requisitos asociados a estos sistemas.

Adaptado de Industrial Internet Application Development, por Alena Traukina, Jayant Thomas, Prashant Tyagi, Kishore Reddipalli.


Capítulo 3. Desarrollo Edge IIoT (Continuación)

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

Protocolos M2M Industriales – OPC UA

En esta sección, construiremos una app IoT simple para enviar datos desde un módulo simulador de sensor a un dispositivo receptor (PC o nube), usando un hub Raspberry Pi y el protocolo OPC UA:

Aprovechando OPC UA para desarrollo robusto edge IIoT
Flujo de datos desde un simulador de sensor a un dispositivo receptor

El protocolo OPC UA es similar a Modbus, pero trabaja con más tipos de datos, y no tiene limitaciones serias, mientras proporciona seguridad, compresión y baja latencia.

El protocolo fue desarrollado por la OPC Foundation como protocolo de comunicación máquina‑a‑máquina industrial. OPC UA (Unified Architecture) es una versión mejorada del protocolo Open Platform Communications (OPC), con uno de los cambios mayores siendo que el nuevo protocolo está disponible gratis sin restricciones.

En la siguiente tabla encontrará una descripción más detallada del protocolo para entender si es adecuado para sus necesidades:

ClaveValor
Open sourceSí
Capa OSITransporte o aplicación
Tipos de datosEntero, flotante, cadena, booleano, fecha, hora, etc.
LimitacionesNo apto para arquitectura compleja
Operaciones posiblesLeer/escribir/monitorizar/consultar variables
LatenciaBaja
UsoIIoT
SeguridadSí
CompresiónSí

Tabla 5: Especificaciones del protocolo OPC UA

Para construir la aplicación, necesitaremos lo siguiente:

Preparación de la tarjeta SD

Para preparar la tarjeta SD, siga la secuencia de acciones descrita:

  1. Descargue la última imagen de Raspbian LITE (disponible en https://raspberrypi.org/downloads/raspbian/).

  2. Conecte su tarjeta SD a un ordenador y use Etcher (https://www.balena.io/etcher/) para flashear el archivo .img de Raspbian a la tarjeta SD.

  3. Habilite SSH:

cd /Volumes/boot
touch ssh
  1. Para habilitar Wi‑Fi, cree conf con el siguiente contenido:

network={
ssid="YOUR_SSID"
psk="YOUR_WIFI_PASSWORD"
}
Aprovechando OPC UA para desarrollo robusto edge IIoT
Configuración Wi-Fi en tarjeta SD

Para crear un archivo en consola Linux, puede usar el editor GNU nano, preinstalado en la mayoría de distribuciones. Solo necesita ejecutar el comando nano NOMBRE_ARCHIVO y seguir las instrucciones mostradas.

  1. Cree el directorio /home/pi/hub

  2. Cree el archivo /home/pi/hub/package.json con el siguiente contenido:

{
"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. Cree el archivo /home/pi/hub/index.js con el siguiente contenido, reemplazando

REMOTE-SERVER-ADDRESS.com y REMOTE-SENSOR-ADDRESS con valores reales:
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([
// establecer conexión function (cb) {
client.connect(sensor, function (err) {
if (err) {
console.log("Conexión a " + sensor + " falló");
} else {
console.log("Conexión exitosa");
}
cb(err);
});
},
// iniciar sesión function (cb) {
client.createSession(function (err, res) {
if (!err) session = res;
cb(err);
});
},
// leer valor
function (cb) {
session.readVariableValue("ns=1;s=Variable1", function (err, dataValue) {
if (!err) console.log("Variable1 = ", dataValue.value.value);
cb(err);
});
},
// escribir valor
function (cb) {
session.writeSingleNode("ns=1;s=Variable1", new opcua.Variant({
dataType: opcua.DataType.Double, value: 100
}), function (err) {
cb(err);
});
},
// suscribirse a cambios
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);
// instalar item monitorizado
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);
// enviar a receptor
var data = {
device: "sensor1",
timestamp: Date.now(),
Variable1: dataValue.value.value
};
request.post({url: receiver, form: data}, function (err) {
if (err) console.log("Falló envío " + JSON.stringify(data) + " a " + receiver);
});
});
},
// cerrar sesión
function (cb) {
session.close(function (err) {
if (err) console.log("Falló cierre de sesión"); cb();
});
}
],
function (err) { if (err) {
console.log("Falló con error:", err);
} else {
console.log("Finalizado con éxito");
}
client.disconnect(function () {});
});
  1. Cree el archivo /home/pi/hub/Dockerfile con el siguiente contenido:

FROM hypriot/rpi-node:boron-onbuild
  1. Cree el directorio /home/pi/sensor

  2. Cree el archivo /home/pi/sensor/package.json con el siguiente contenido:

{
"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. Cree el archivo /home/pi/sensor/index.js con el siguiente contenido:

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;
// generar nuevo valor
setInterval(function () {
variable1 = Math.floor(max - Math.random() * (max - min));
}, 500);
space.addVariable({
browseName: "browseName",
componentOf: componentOf,
dataType: "Double",
nodeId: "ns=1;s=Variable1", // un nodeID string
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. Configure los valores min y max al principio del

/home/pi/sensor/index.js archivo.
  1. Cree el archivo /home/pi/sensor/Dockerfile con el siguiente contenido:

FROM hypriot/rpi-node:boron-onbuild

Tecnología de Internet de las cosas

  1. Glassboard: Aprovechando la Impresión 3D para Desarrollo de Producto Rápido y Fiable
  2. ECM3532: Primera placa sensor IA integrada ultra-bajo consumo de Eta Compute acelera desarrollo edge
  3. Seguridad Industrial IoT: Tendencias clave y mejores prácticas para 2020
  4. Cisco revela arquitectura integral de seguridad IIoT e Edge Intelligence para visibilidad OT
  5. Asegurando el Industrial Internet of Things: Estrategias, estándares y cadena de confianza
  6. Perspectiva Futura: Avanzando Industrial IoT para Excelencia en Producción
  7. Edge Computing: Clave del Éxito del IoT Industrial en Tiempo Real
  8. Aprovechando IIoT e IA para impulsar ventas y productividad en fabricantes y distribuidores
  9. Contenedores potencian desarrollo ágil de apps IoT
  10. Edge Computing e IIoT: Transformando la Estrategia de Datos Industriales
  11. Herramientas de próxima generación aceleran la adopción de 5G y Edge Computing