Промышленное производство
Промышленный Интернет вещей | Промышленные материалы | Техническое обслуживание и ремонт оборудования | Промышленное программирование |
home  MfgRobots >> Промышленное производство >  >> Industrial Internet of Things >> Интернет вещей

Использование OPC UA для надежной IIoT Edge разработки

Использование OPC UA для надежной IIoT Edge разработки Примечание редактора: Промышленный интернет вещей (IIoT) обещает глубокую прозрачность промышленных операций и повышение эффективности подключённых машин и систем. Крупномасштабные IIoT-приложения опираются на многослойные архитектуры для сбора данных с широкого спектра датчиков, их надёжной и безопасной передачи в облако и выполнения аналитики, необходимой для доставки этой прозрачности и эффективности. В книге Industrial Internet Application Development авторы дают детальный обзор архитектуры IIoT и обсуждают подходы к удовлетворению широких требований к таким системам.

Адаптировано из Industrial Internet Application Development, авторы: Алена Траукина, Джаянт Томас, Прашант Тяги, Кишор Реддипалли.


Глава 3. Разработка IIoT Edge (продолжение)

Авторы: Алена Траукина, Джаянт Томас, Прашант Тяги, Кишор Реддипалли

Промышленные M2M протоколы — OPC UA

В этом разделе мы построим простое IoT-приложение для отправки данных от симулятора датчика на приёмное устройство (ПК или облако), используя хаб Raspberry Pi и протокол OPC UA:

Использование OPC UA для надежной IIoT Edge разработки
Поток данных от симулятора датчика к приёмному устройству

Протокол OPC UA похож на Modbus, но работает с большим количеством типов данных, не имеет серьёзных ограничений, при этом предоставляя безопасность, сжатие и низкую задержку.

Протокол разработан OPC Foundation как промышленный machine-to-machine коммуникационный протокол. OPC UA (Unified Architecture) — улучшенная версия протокола Open Platform Communications (OPC), одно из главных изменений — новый протокол доступен бесплатно без ограничений.

В таблице ниже более детальное описание протокола для понимания его пригодности:

КлючЗначение
Open sourceYes
The OSI layerTransport or application
Data typesInteger, float, string, Boolean, date, time, and so on
LimitationsНе подходит для сложной архитектуры
Possible operationsRead/write/monitor/query variables
LatencyLow
UsageIIoT
SecurityYes
CompressionYes

Таблица 5: Спецификации протокола OPC UA

Необходимые компоненты для сборки приложения

Подготовка SD-карты

  1. Скачайте последний образ Raspbian LITE (доступен на https://raspberrypi.org/downloads/raspbian/).
  2. Подключите SD-карту к компьютеру и используйте Etcher (https://www.balena.io/etcher/) для прошивки Raspbian .img файла на SD-карту.
  3. Включите SSH:
cd /Volumes/boot
touch ssh
  1. Для включения Wi-Fi создайте wpa_supplicant.conf со следующим содержимым:
network={
 ssid="YOUR_SSID"
 psk="YOUR_WIFI_PASSWORD"
}

Использование OPC UA для надежной IIoT Edge разработки Для создания файла в Linux-консоли можно использовать GNU nano. Он предустановлен в большинстве дистрибутивов. Нужно запустить команду nano FILE_NAME и следовать инструкциям.

  1. Создайте /home/pi/hub
  2. Создайте /home/pi/hub/package.json со следующим содержимым:
{
 "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. Создайте /home/pi/hub/index.js со следующим содержимым, заменив REMOTE-SERVER-ADDRESS.com и REMOTE-SENSOR-ADDRESS на реальные значения:
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( [
// establishing connection
function (cb) {
 client.connect(sensor, function (err) {
 if (err) {
 console.log("Connection to " + sensor + "failed");
 } else {
 console.log("Connection successful");
 }
 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);
 });
},
// write value
function (cb) {
 session.writeSingleNode("ns=1;s=Variable1", new opcua.Variant({
 dataType: opcua.DataType.Double, value: 100
 }), function (err) {
 cb(err);
 });
},
// subscribe to changes
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);
 // install monitored item
 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);
 // send to receiver
 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);
 });
 });
},
// close session
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. Создайте /home/pi/hub/Dockerfile со следующим содержимым:
FROM hypriot/rpi-node:boron-onbuild
  1. Создайте /home/pi/sensor
  2. Создайте /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. Создайте /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;
 // generate new value
 setInterval(function () {
 variable1 = Math.floor(max - Math.random() * (max - min));
 }, 500);
 space.addVariable({
 browseName: "browseName",
 componentOf: componentOf,
 dataType: "Double",
 nodeId: "ns=1;s=Variable1", // a 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. Настройте min и max значения в начале /home/pi/sensor/index.js.
  1. Создайте /home/pi/sensor/Dockerfile со следующим содержимым:
FROM hypriot/rpi-node:boron-onbuild

Интернет вещей

  1. Безопасность промышленного IoT: ключевые тренды и лучшие практики на 2020 год
  2. Cisco представляет комплексную архитектуру безопасности IIoT и Edge Intelligence для OT-видимости
  3. Защита промышленного интернета вещей: стратегии, стандарты и цепочка доверия
  4. ECM3532: первая интегрированная ультра‑низкоэнергозатратная ИИ‑сенсорная плата Eta Compute ускоряет Edge‑разработку
  5. Glassboard: использование 3D-печати для быстрой и надежной разработки продуктов
  6. Будущий взгляд: продвижение Industrial IoT для производственного превосходства
  7. Edge Computing: ключ к успеху промышленного IoT в реальном времени
  8. Использование IIoT и AI для буста продаж и продуктивности производителей и дистрибьюторов
  9. Контейнеры усиливают гибкую разработку IoT-приложений
  10. Пограничные вычисления и ППИ: трансформация промышленной стратегии данных