Приложение J. Пример работы с программным шлюзом Node-RED

Node-RED - это визуальная среда для программирования логики автоматизации, которая поволит организовать обмен данными OrangeScada с большим количеством различных протоколов. В том числе и таких востребованных, как Bacnet, KNX, HDL, Profinet.

Node-RED может быть установлен на том же компьютере, что и OrangeScada, или на отдельном устройстве.

Установка Node-RED и интеграция с OrangeScada

Вы можете установить Node-RED с уже предустановленной в палитру узлов OrangeScada, воспользовавшись нашим репозиторием в github

Для клонирования и развертывания приложения на компьютере необходимо установить систему контроля версий Git и среду выполнения Node.js. После этого выполните следующие команды в командной строке:

git clone https://github.com/OrangeScada/node-red.git
cd node-red
npm install
npm start

После запуска Node-RED, откройте в браузере страницу http://localhost:1880 На странице вы увидите визуальный редактор, в котором можно создавать потоки обработки данных. В палитре узлов вы найдете узел OrangeScada, который позволяет обмениваться данными с системой диспетчеризации.

Редактор Node-RED

Если у Вас уже установлен Node-RED, то добавить OrangeScada в палитру можно при помощи встроенного менежера узлов. Для этого откройте меню "Управление палитрой" и в разделе "Установить" выполните поиск по ключевому слову orangescada-driver.

Установка OrangeScada в Node-RED через менеджер палитры

Настройка соединения с OrangeScada

В данном примере рассматриваем случай, когда Node-RED и OrangeScada установлены на одном компьютере.

В конфигураторе OrangeScada необходимо зайти на вкладку "Драйверы", убедиться что установлено галка "Активно" и выбрать номер порта (либо оставить 8892 по умолчанию).

Опционально можно добавить шифрование, сертификат и ключ сертификата.

Настройка параметров соединения драйвера в конфигураторе OrangeScada

В веб-приложении OrangeScada переходим через панель разработчика в раздел "Драйверы" и добавляем новый драйвер. Uid драйвера должен совпадать с Uid драйвера, который будет использоваться в Node-RED. В данном примере это nodered.

Добавление в OrangeScada драйвера для связи с Node-RED

Переходим в браузере к веб-приложению Node-RED, находим в палитре узел orange-scada-tag и перетаскиваем в рабочую область. Кликаем дважды по узлу и в открывшемся окне настраиваем парамерты тега.

Настройка тега в Node-RED

Так как это первый тег, который мы добавляем у нас нет готовых настроек для соединения драйвера и структуры дерева тегов. В универсальном драйвере OrangeScada принята следующая иерархия тегов: драйвер (Driver) может содержать несколько узлов (Node), каждый узел может содержать несколько устройств (Device), а каждое устройство содержит таблицу тегов (Tag). Добавим в структуре новый драйвер, нажав на иконку "+" справа от поля "Driver". В открывшемся окне вводим название драйвера на свой выбор, хост сервера OrangeScada (в нашем случае это localhost), порт драйвера (в нашем случае это 8892) и Uid драйвера, который мы указали в OrangeScada (в нашем случае это nodered). В правом верхнем углу окна нажимаем кнопку "Добавить".

Настройка драйвера в Node-RED

После добавления драйвера, в поле "Driver" появится его название. Далее добавим узел, нажав на иконку "+" справа от поля "Node". В открывшемся окне вводим название узла на свой выбор и в поле драйвера выбираем ранее добавленный драйвер. В правом верхнем углу окна нажимаем кнопку "Добавить".

Настройка узла в Node-RED

Аналогично добавляем устройство, нажав на иконку "+" справа от поля "Device". В открывшемся окне вводим название устройства на свой выбор и в поле узла выбираем ранее добавленный узел. В правом верхнем углу окна нажимаем кнопку "Добавить".

Настройка устройства в Node-RED

Добавляем для тега поля Name (название тега, отображаемое в Node-RED), Tag (название тега, отображаемое в OrangeScada), Type (тип тега, например, "int" для целого числа) и Address (порядковый номер тега).

Настройка параметров тега в Node-RED

После окончания настройки тега, он будет доступен для использования в потоке Node-RED. Для запуска потока необходимо нажать кнопку "Развернуть" в правом верхнем углу.

После запуска потока, в OrangeScada можно убедить, что драйвер вышел на связь в панели "Драйверы" веб-приложения: появится зеленая галка "Коннект" и номер версии драйвера.

Драйвер на линии

Перейдем в проект OrangeScada в котором мы планируем использовать драйвер и в дереве проекта добавим новое устройство, подключив его к драйверу Node-RED:

Добавление устройства в OrangeScada, подключение его к драйверу

Переходим в таблицу тегов и нажимаем кнопку "Обновить с сервера", во всплывающем окне выбираем наш тег Tag1

Добавление устройства в OrangeScada, подключение его к драйверу

Пока в Node-RED к тегу не привязана логика, в OrangeScada значение тега будет отображаться как null

Вернемся в Node-RED и привяжем логику на вход тега: добавим в поток элементы палитры inject (метка времени) и function, свяжем их таким образом:

Добавление логики

Метку времени настроем так, чтобы она срабатывала каждую секунду:

Настройка метки времени

В функции добавим код, который реализует простейший инкиментирующий счетчик:

Настройка функции
var index = flow.get("index") || 0;
flow.set("index", index + 1);
return {payload: index};

Выполняем развертывание потока и проверяем, что в OrangeScada значение тега обновляется каждую секунду

Если значение тега меняется со стороны OrangeScada (например, пользователь меняет значение через интерфейс), изменения будут отражаться в потоке Node-RED: событие изменения будет приходить с выхода тега, а новое значение лежать в payload этого события. Для проверки, привяжем к выходу тега элемент палитры Debug:

Добавление Debug

Выполним развертывание потока в Node-RED и попробуем изменить значение тега через интерфейс OrangeScada

Изменение значения тега

В Node-RED открываем вкладку "Отладка" и убеждаемся, что событие получено:

Изменение значения тега получено в Node-RED

Привязывая реальные данные к входам/выходам тегов OrangeScada от множества источников, реализованных в палитре Node-RED, и обрабатывая их встренными функциями,можно создать сложные интеграции, а также сценарии автоматизации и мониторинга.