Node-RED - это визуальная среда для программирования логики автоматизации, которая поволит организовать обмен данными OrangeScada с большим количеством различных протоколов. В том числе и таких востребованных, как Bacnet, KNX, HDL, Profinet.
Node-RED может быть установлен на том же компьютере, что и OrangeScada, или на отдельном устройстве.
Вы можете установить Node-RED с уже предустановленной в палитру узлов OrangeScada, воспользовавшись нашим репозиторием в github
Для клонирования и развертывания приложения на компьютере необходимо установить систему контроля версий Git и среду выполнения Node.js. После этого выполните следующие команды в командной строке:
После запуска Node-RED, откройте в браузере страницу http://localhost:1880 На странице вы увидите визуальный редактор, в котором можно создавать потоки обработки данных. В палитре узлов вы найдете узел OrangeScada, который позволяет обмениваться данными с системой диспетчеризации.
Если у Вас уже установлен Node-RED, то добавить OrangeScada в палитру можно при помощи встроенного менежера узлов. Для этого откройте меню "Управление палитрой" и в разделе "Установить" выполните поиск по ключевому слову orangescada-driver.
В данном примере рассматриваем случай, когда Node-RED и OrangeScada установлены на одном компьютере.
В конфигураторе OrangeScada необходимо зайти на вкладку "Драйверы", убедиться что установлено галка "Активно" и выбрать номер порта (либо оставить 8892 по умолчанию).
Опционально можно добавить шифрование, сертификат и ключ сертификата.
В веб-приложении OrangeScada переходим через панель разработчика в раздел "Драйверы" и добавляем новый драйвер. Uid драйвера должен совпадать с Uid драйвера, который будет использоваться в Node-RED. В данном примере это nodered.
Переходим в браузере к веб-приложению Node-RED, находим в палитре узел orange-scada-tag и перетаскиваем в рабочую область. Кликаем дважды по узлу и в открывшемся окне настраиваем парамерты тега.
Так как это первый тег, который мы добавляем у нас нет готовых настроек для соединения драйвера и структуры дерева тегов. В универсальном драйвере OrangeScada принята следующая иерархия тегов: драйвер (Driver) может содержать несколько узлов (Node), каждый узел может содержать несколько устройств (Device), а каждое устройство содержит таблицу тегов (Tag). Добавим в структуре новый драйвер, нажав на иконку "+" справа от поля "Driver". В открывшемся окне вводим название драйвера на свой выбор, хост сервера OrangeScada (в нашем случае это localhost), порт драйвера (в нашем случае это 8892) и Uid драйвера, который мы указали в OrangeScada (в нашем случае это nodered). В правом верхнем углу окна нажимаем кнопку "Добавить".
После добавления драйвера, в поле "Driver" появится его название. Далее добавим узел, нажав на иконку "+" справа от поля "Node". В открывшемся окне вводим название узла на свой выбор и в поле драйвера выбираем ранее добавленный драйвер. В правом верхнем углу окна нажимаем кнопку "Добавить".
Аналогично добавляем устройство, нажав на иконку "+" справа от поля "Device". В открывшемся окне вводим название устройства на свой выбор и в поле узла выбираем ранее добавленный узел. В правом верхнем углу окна нажимаем кнопку "Добавить".
Добавляем для тега поля Name (название тега, отображаемое в Node-RED), Tag (название тега, отображаемое в OrangeScada), Type (тип тега, например, "int" для целого числа) и Address (порядковый номер тега).
После окончания настройки тега, он будет доступен для использования в потоке Node-RED. Для запуска потока необходимо нажать кнопку "Развернуть" в правом верхнем углу.
После запуска потока, в OrangeScada можно убедить, что драйвер вышел на связь в панели "Драйверы" веб-приложения: появится зеленая галка "Коннект" и номер версии драйвера.
Перейдем в проект OrangeScada в котором мы планируем использовать драйвер и в дереве проекта добавим новое устройство, подключив его к драйверу Node-RED:
Переходим в таблицу тегов и нажимаем кнопку "Обновить с сервера", во всплывающем окне выбираем наш тег Tag1
Пока в Node-RED к тегу не привязана логика, в OrangeScada значение тега будет отображаться как null
Вернемся в Node-RED и привяжем логику на вход тега: добавим в поток элементы палитры inject (метка времени) и function, свяжем их таким образом:
Метку времени настроем так, чтобы она срабатывала каждую секунду:
В функции добавим код, который реализует простейший инкиментирующий счетчик:
Выполняем развертывание потока и проверяем, что в OrangeScada значение тега обновляется каждую секунду
Если значение тега меняется со стороны OrangeScada (например, пользователь меняет значение через интерфейс), изменения будут отражаться в потоке Node-RED: событие изменения будет приходить с выхода тега, а новое значение лежать в payload этого события. Для проверки, привяжем к выходу тега элемент палитры Debug:
Выполним развертывание потока в Node-RED и попробуем изменить значение тега через интерфейс OrangeScada
В Node-RED открываем вкладку "Отладка" и убеждаемся, что событие получено:
Привязывая реальные данные к входам/выходам тегов OrangeScada от множества источников, реализованных в палитре Node-RED, и обрабатывая их встренными функциями,можно создать сложные интеграции, а также сценарии автоматизации и мониторинга.