Друкувати книгуДрукувати книгу

ЛР1. Основи роботи з Node-RED

Сайт: Школа автоматики
Курс: Технології індустрії 4.0
Книга: ЛР1. Основи роботи з Node-RED
Надруковано: Guest user
Дата: Saturday 28 November 2020 4:38 PM

1. Інсталяція Node-RED під Windows

https://nodered.org/docs/platforms/windows

Підтримувані платформи: Windows 10, Windows 8, Windows 7

1.1. Завантажити msi-файл Node.JS LTS версії https://nodejs.org/uk/

1.2. Запустити на виконання msi-файл від імені адміністратора і встановити Node.JS, при виклику діалоговий вікон все залишати за замовченням

1.3.Після інсталяції запустіть командний рядок (CMD), у якому введіть

node --version && npm –version

повинно вивести версію node() - npm ()

 npm (Node Package Manager) - це менеджер пакунків для мови програмування JavaScript. Для середовища виконання Node.js є менеджером пакунків за замовчуванням. Включає в себе клієнт командного рядка, який також називається npm, а також онлайн-базу даних публічних та приватних пакунків, яка називається реєстром npm. Реєстр доступний через клієнт, а доступні пакунки можна переглядати та шукати через веб-сайт npm. Менеджер пакунків та реєстр керуються npm, Inc.

 1.4. Install Node-RED . Інсталювання проводиться з використанням npm з командою install. Наберіть в командному рядку

npm install -g --unsafe-perm node-red

почнеться процедура інсталяції

 

1.5. Запустіть Node-RED з командного рядка

node-red

Можуть виникнути повідомлення про розблокування брандмауером, з якими треба погодитись.

 

1.6. Відкрийте браузер, перейдіть до редактору Node-Red, за посиланням http://127.0.0.1:1880/

Для того, щоб Node-RED виконувався, вікно з командним рядком не можна закривати.

2. Знайомство з Node-RED

Програма створена на Node-RED складається з потоків (Flow), які виконуються як умовно незалежні програми. Потоки – це зв’язані між собою інформаційними дротами (wires)   вузли (Node), що виконують певну функцію. Таким чином, ідеологія програмування Node-RED дещо схоже на побудову програм на мові FBD, що є стандартною для програмування ПЛК (IEC 61131-3). Тим не менше, між цими мовами є значні відмінності.

2.1. Відкрийте в браузері редактор Node-RED, якщо він ще не відкритий. Ознайомтеся з його основними частинами (рис.1)

Детально про роботу з редактором Ви можете ознайомитися в інструкції користувача.

2.2. Виберіть з палітри і розмістіть на робочій області вузли

  • Input->inject
  • Output->Debug

З’єднайте їх між собою. Повинно вийти як на рис.2. Блакитні кружечки значать, що зміна в вузлах ще не відобразилася в середовищі виконання, так як змінена програма не була в ньому розгорнута.   

2.3. В заголовку виберіть пункт Deploy->Modified Nodes (див.рис.3), після чого  натисніть Deploy (Розгортання).

При вдалому розгортанні з’явиться повідомлення.

А в робочому просторі вузли вже будуть без блакитних кружечків. 

 

2.4. Для перевірки роботи програми, на бічній панелі треба відобразити вікно Debug messages (налагоджувальні повідомлення ) шляхом натиснення кнопки з «жуком».   

Ліворуч вузла типу Inject з назвою «timestamp» є кнопка, яка приводить до ініціювання розрахунку ланцюжка вузлів, що починаються з нього. Натисніть на цю кнопку.

В результаті з’явиться повідомлення про успішне вприскування (Inject) а на панелі повідомлень з’явиться повідомлення (рис.5).

На цьому прикладі розглянемо, як виконується програма.

У більшості випадків перерахунок вузлів починається тоді, коли на його вхід подається повідомлення (message). Повідомлення – це прості об’єкти (типу структурні змінні) JavaScript що можуть мати будь який набір властивостей. Тобто в даній програмі після перерахунку вузла з іменем «timestamp» буде сформовано об’єкт-повідомлення (msg) і переданий по дроту вузлу з іменем (msg.payload).

На вхід вузла з іменем «timestamp» повідомлення не надходять, бо він є ініціатором розрахунку. Всі вузли палітри що входять в групу Input є ініціаторами розрахунку. Ініціація вузлів типу Inject відбувається шляхом ручного запуску по кнопці, або через певні інтервали часу, що налаштовується у вузлі. Ініціювання повідомлення це формування полів msg та відправка його іншим вузлам по дротам. Повідомлення, надіслане вузлом Inject, має властивості payload (корисне навантаження) та topic (тема). За замовченням Inject записує у властивість topic відмітку часу (timestamp – кількість мілісекунд з 1980 року).

Вузол типу Debug «msg.payload» використовується для відображення повідомлень на бічній панелі Debug. Таким чином, після отримання повідомлення, цей вузол відображає його зміст на бічній панелі.

 

2.5. Змініть налаштування властивостей вузлів, як показано на рис.6: змініть імена вузлів, вкажіть тему (topic) та періодичність оновлення для вузла типу Inject. Вікно налаштування з’являється по подвійному кліку по вузлу.  

Зробіть розгортання, та проаналізуйте зміст виведених у вікні Debug повідомлень.

 

2.6. Змініть вузол «Початок» так, щоб він формував корисне навантаження текстом «Це текстове повідомлення»(рис.7), та проаналізуйте як воно виводиться на вікно Debug. 

2.7. Змініть вузол «Початок» так, щоб він знову формував корисне навантаження відміткою часу (Timestamp). Розгорніть (deploy) програму та проконтролюйте щоб відмітка часу кожні 5 секунд відображалася у вікні повідомлень 

Ознайомтеся з роботою вузлів типу change та delay в інструкції користувача.

Змініть програму, як показано на рис.8, використовуючи вузли delay (“delay 1s”…”delay 4s”) та change (“set1”…”set5”). Для вузлів delay виставте затримки:

  • delay 1s – 1 seconds
  • delay 2s – 2 seconds
  • delay 3s – 3 seconds
  • delay 4s – 4 seconds

Для вузлів change виставте правило рівним «set», та змініть властивості «to» на наступні текстові поля:

  • set1 – один
  • set2 – два
  • set3 – три
  • set4 – чотири
  • set5 – п’ять

Розгорніть (deploy) програму та проконтролюйте щоб кожної секунди у вікні повідомлень виводилося конкретне повідомлення від «один» до «п’ять».

2.8. Ознайомтеся з роботою вузлів типу function з інструкції користувача

Вузол function може обробляти повідомлення з використанням javascript. Змініть програму так, щоб відмітка часу виводилася в форматі дати та часу. Для цього використовується об’єкт типу Data та його метод  toLocaleString(). Зробіть розгортання та переведіть вузол “Debug1” в режим приховання повідомлень.

Про синтаксис javascript можна дізнатися тут http://яваскрипт.укр 

Про об’єкт Date можна прочитати тут http://яваскрипт.укр/Date або тут https://learn.javascript.ru/datetime

3. Підключення та ознайомлення з модулем node-red-dashboard

Node-RED дозволяє інсталювати та обновляти палітру вузлів. Це робиться через Manage Palette (рис.10) . Деталі інсталяції читайте в інструкції користувача.

3.1. В налаштуваннях палітри на вкладці Install в поле фільтру введіть “node-red-dashboard” і інсталюйте даний пакет (рис.11):

  • натисніть кнопку install
  • підтвердіть інсталяцію у вікні повідомлення
  • після інсталяції закрийте вікно керування палітрою

Перевірте чи з’явилася в палітрі розділ «Dashboard»

3.2. Після встановлення у бічній панелі з’явилася нова іконка з зображенням діаграми (рис.12) . Натисніть на ній.

В Layout добавте дві закладки (tab) та змініть їх назви як це показано на рис.13.  

Однак ім’я першої закладки повинно називатися Вашим прізвищем та ім’ям, наприклад «Іваненко Іван».     

3.3. Модифікуйте програму, створивши вузол типу dashboard-> text і підєднавши його до вузла «ДатаЧас» (див. рис.14). Налаштуйте вузол відповідно до рис.14 однак ім’я першої групи повинно називатися Вашим прізвищем «Іваненко». Створіть ще одну групу, яка повинна називатися Вашим ім’ям «наприклад Іван».      

 Після усіх налаштувань зробіть розгортання, відкрийте створений Dashboard, шляхом натискання кнопки переходу   (див.рис.13.), або ввівши  в новій вкладці браузера http://127.0.0.1:1880/ui

На вкладці повинно з’явитися щось типу такого, як показано на рис.15

3.4. Аналогічним чином зробіть для відображення числа прописом.

3.5. Добавте до програми фрагмент, як показано на рис.17.

Налаштування вузлів показані на рис.18-21

Зробіть розгортання і подивіться результат на вікні Dashboard.

 

3.6. Ознайомтеся з принципами роботи вузла switch. Модифікуйте програму відповідно до наведеної на рис.22. Вузли налаштуйте відповідно до рис.23-26.

Зробіть розгортання проекту, перевірте як працює програма. Для цього на сторінці веб-інтерфейсу змініть значення заданої температури в діапазоні 0-50, а потім >50.

Ця частина програми працює наступним чином. При зміні значення температури, в msg.payload значення поступає на обробку в вузол switch, де на один із 2-х виходів формується повідомлення в залежності від тієї умови, яка спрацювала.

При виконанні умови 0<msg.payload<50 (is between), повідомлення передається на перший вихід, до якого в свою чергу приєднаний вузол “Norma” (тип function->change). Той задає текстове значення для властивості msg.payload рівним «НОРМА» і формує нову властивість  msg.color рівною “GREEN”. Далі msg поступає вузол «button», який використовується для відображення тексту в прямокутнику. Значення тексту задається полі Label, а колір в полі Background. При формуванні динамічних значень для вузлів, використовується формат angular фільтрів, в якому вказується підстановка в подвійних фігурних дужках.

Аналогічна обробка проводиться при спрацюванні у вузлі switch умови msg.payload>50. Повідомлення згенерується на другому виході, який активує перерахунок вузла “Alarm” що буде формувати текст та колір для кнопки.

Детальніше про використання фільтрів ангуляр https://metanit.com/web/angular/2.4.php                  

http://javastudy.ru/angularjs/angularjs-filters/

4. Робота з поштою (не обов’язкова частина)

4.1. Для роботи з поштою необхідно дізнатися налаштування почтового сервера, який Ви будете використовувати для відправки повідомлень, і на якому є Ваш обліковий запис. Ми рекомендуємо для тестування створити новий аккаунт на одному з поштових серверів.

Випишіть налаштування:

Для вихідних повідомлень (відправки пошти):

  • SMTP Server
  • port

Для вхідних повідомлень (отримання пошти):

  • POP3 Server або IMAP Server
  • port

Інформацію про налаштування поштових сервісів можна отримати в довідці по цим серверам. Нижче наведений приклад деяких із найбільш вживаних:

 Приклади:

Для сервісів gmail навіть після активації дозволу на взаємодію з поштовими клієнтами через IMAP/SMTP, при використанні додатку NodeRED може прийти повідомлення про блокування доступу (рис.29). Для активації доступу тимчасово (до закінчення лабораторної роботи) виставте дозвіл доступу до менш безпечних додатків (рис.30)

  необхідно також дозволити https://myaccount.google.com/lesssecureapps  

 

4.2. Модифікуйте програму фрагментом показаним на рис.31. Налаштування вузів показано на рис.32-33. У поля user-id та password необхідно вказати користувача та пароль для аккаунта. Інші налаштування беруться з визначених в попередньому пункті. В поле отримувача введіть власну поштову скриньку.

Зробіть розгортання проекту, виставте значення заданої температури так, щоб згенерувалося повідомлення Alram. На пошту повинно прийти повідомлення, протягом 15 секунд воно повинно відобразитися на веб-сторінці в полі текст (рис.34).

5. Робота з Modbus

Node-RED, як правило використовується або на стороні Edge або в якості хмарного додатку. Якщо  Node-RED використовується на стороні Edge в якості програми для концентратора або шлюзу чи маршрутизатору, наприклад на апаратній платформі Raspberry PI, він може збирати дані з різних пристроїв по протоколам промислових мереж. Найбільш поширеним і простим протоколом на сьогоднішній день є Modbus, тому в спільноті Node-RED розробили кілька бібліотек з ним. Таким чином, як варіант Raspberry PI буде взаємодіяти з пристроями по протоколу Modbus TCP/IP, а з іншого боку він буде взаємодіяти з хмарними додатками та сервісами(рис.35)

Для тестування такого рішення можна на перших порах обійтися тільки програмними складовими. Замість ПЛК можна використати імітатор ПЛК, що підтримує Modbus TCP/IP, а замість Raspberry PI – віртуальну машину з ОС Raspbian з усім встановленим ПО, як в реальному залізі. Ще простіше – використовувати тільки Node-RED, який буде з’єднуватися з імітатором ПЛК або імітатором Modbus TCP/IP Server (рис.36). У даній лабораторній роботі в якості імітатора PLC буде використаний пакет Mod_RSsim, який треба попередньо встановити. А в якості бібліотеки Modbus для Node-RED - node-red-contrib-modbustcp.

5.1. Встановити пакет Modbus (node-red-contrib-modbustcp) використовуючи Manage Palette (рис.37)

5.2. Завантажте Modbus PLC Simulator (Mod_RSsim)

5.3. Запустіть на виконання Modbus PLC Simulator C:\Program Files (x86)\EmbeddedIntelligence\Mod_RSsim

Виставте значення в Prot: Modbus TCP

5.4. Ознайомтеся з правилами роботи з бібліотекою https://flows.nodered.org/node/node-red-contrib-modbustcp

5.5. З розділу палітри Inputs вставте елемент modbustcp-read, зайдіть в налаштування. Праворуч поля Server натисніть кнопку з олівцем для створення нового серверу (рис.39).

Після створення серверу налаштуйте зчитування десяти Holding регістрів починаючи з 0-го, як це показано на рис.40.

Зробіть фрагмент програми, показаний на рис.41. Зробіть розгортання проекту,  деактивуйте усі виводи debug окрім останнього.

Змініть значення перших десяти регістрів у програмі Mod_RSsim. Активуйте вікно виводу Debug, там повинні виводитися значення регістрів у вигляді масиву.

Зверніть увагу, що тепер msg.payload є масивом з десяти елементів (Array[10]), тому для роботи з цими значеннями, наприклад виводу на відображення на ВЕБ-сторінці необхідно їх попередньо обробити.

5.6. Модифікуйте програму відповідно до рис.43 – 46. Зробіть розгортання та перевірте чи вірно відображаються значення.

5.7. Для запису по Modbus використайте вузол modbustcp-write з розділу палітри outputs. Модифікуйте програму відповідно до рис.47. Зробіть розгортання проекту і перевірте чи змінюється значення Holding регістру в Mod_RSsim при зміні його через елемент «Задана температура»

5.8. Необов’язкове завдання.

Спробуйте в якості імітатора ПЛК використати:

6. Робота з JS об’єктами та обробка системної інформації

6.1. Встановіть в Node-RED модуль node-red-contrib-os

6.2. З нововстановленого модуля використайте вузол типу Networkintf для створення фрагменту програми, як на рис.49.

Зробіть розгортання програми, ініціюйте формування повідомлення, проаналізуйте вивід. Приклад виведеної інформації показаний на рис.50. Як видно, інформація надається у вигляді JS об’єкту, який включає в себе об’єкт NetworkInterfaces, що в свою чергу вміщує кілька мережних інтерфейсів, що є масивами об’єктів, що представляють певний протокол.

Про об’єкти в JavaScript можна почитати тут http://яваскрипт.укр/object або тут http://learn.javascript.ru/object.  Для перебору усіх властивостей об’єкту можна скористатися конструкцією for..in  http://learn.javascript.ru/object-for-in 

6.3. Створіть програму, що буде виводити перелік MAC адрес для мережних карт, що встановлені на Вашому ПК (рис.51-52).

6.4.Зробіть копії екранів програми та візуалізації – це буде звітом до Вашої роботи.     

7. Експорт потоку

Відкрийте потік (Flow) створений в лабораторній роботі. Виділіть всі вузли шляхом комбінації Ctrl+A. Усі вузли повинні виділитися червоним контуром. Через меню бокової панелі зробіть експорт виділеного в буфер обміну (рис.53).

Створіть текстовий файл з назвою Lab1.txt і скопіюйте з буферу обміну текст експорту. Збережіть файл, він вам знадобиться для звіту та для захисту лабораторних робіт у майбутньому.