Пульт.Онлайн /

Создаем демо-проект. Прототипы, узлы, тревоги, тренды

Уважаемые коллеги, всем доброго времени суток. Мы продолжаем серию уроков по работе с Web-ориентированной SCADA системой ПУЛЬТ.ОНЛАЙН. Для демонстрации мы сделаем небольшой проект для трех приточных вентустановок. Данный урок разобьем на 2 части: в первой части мы покажем, как получить данные с одной вентустановки, создадим переменные, разберемся с прототипами и узлами, посмотрим тренды, а также разберемся с аварийными событиями. Во второй части визуализируем эти данные на мнемосхеме и масштабируем нашу систему до трех вентустановок. Завершенный оригинал проекта доступен на демо-сервере под названием “Приточная вентиляция”. Ссылку приложу в описании к видео. https://webscada.ru/#interface/project?path=/projects/%D0%9F%D1%80%D0%B8%D1%82%D0%BE%D1%87%D0%BD%D0%B0%D1%8F%20%D0%B2%D0%B5%D0%BD%D1%82%D0%B8%D0%BB%D1%8F%D1%86%D0%B8%D1%8F.project Итак, зайдем на ранее установленный сервер (не забываем поставить галочку запомнить.) Зайдем в редактор, нажмем “Пустой проект” Вот открылось окно с проектом, по умолчанию название проекта назначается по нумерации, в данном случае “Проект 1”. Обратите внимание на панель навигации: Вся проектная информация хранится в виде дерева. Вот у нас главная папка проекты, далее наш созданный проект и у каждого проекта будет свой набор разделов, который будет состоять из групп, журнала, мнемосхем, переменных и т.д. Т.е. у нас есть дерево проектов, в каждом проекте есть разделы, а в разделах объекты. Щелкнем на проект1, в правой части экрана появляется основная форма. Вот появилась вкладка разделы. Щелкнем(Показать это все, что совпадает со структурой дерева разделов) Для примера нажмем на узлы: как мы видим, в правой стороне у нес появилась вкладка объекты. Т.к. проект еще пустой, то и узлов еще никаких нет. Прошу обратить внимание - слева снизу есть окно свойств. При помощи этого окна мы будем задавать какие-то свойства, как разделам, так и объектам. Итак…Зайдем в проект 1. Нажмем главный экран. Вот у нас информация по проекту. Вот это все - это то, что будет видеть пользователь, когда зайдет на страницу проекта в интерфейсе. Весь этот вид – он настраиваемый. Вот здесь можно изменять его настройки.(Показать на окно слева). Для примера можем поменять формат. Как мы видим, раскладка изменилась...Сюда же в будущем можно выложить мнемосхему, с которой начинается навигация по проекту и прочее. Пока углубляться в это не будем, чтоб не затягивать видео. Выйдем от сюда. Сохранять ничего пока не будем. Давайте зайдем в прототипы. И начнем потихонечку заполнять наш демонстрационный проект… Простыми словами – прототипы – это шаблоны будущих узлов, в которых будут находится переменные, опрашиваемые определенным драйвером и по определенным правилам. Нажмем добавить, появился список шаблонов драйверов. Добавим прототип “Стандартный узел Modbus-tcp”. Теперь зайдем в него. Так как мы добавили прототип из шаблона, то он уже настроен на работу с узлом Modbus-tcp и здесь уже добавлены служебные переменные-метрики для мониторинга качества и состояния связи. Для демонстрации, давайте еще создадим пустой прототип. И вот, как мы видим, все вкладки пустые. Самое главное здесь – это вкладки драйверов, в которых мы будем перечислять переменные, которые в дальнейшем появятся в узле, а также не менее важная вкладка(перейдем обратно в прототип для модбаса) – это параметры. Параметры будут служить нам в качестве макросов, значения которых можно подставлять в свойства переменных. Т.е. допустим у нас есть modbus tcp, и чтоб нам для каждой переменной, к примеру, не вводить порт 502, мы можем в настройках вбивать макрос %port%(там будем писать порт и знаки процента с двух сторон). Также эти же макросы будут в узлах. И когда прототип будем привязывать к узлу, там будет возможность определить значения данных макросов и переменные узла примут эти значения. Пока что не зацикливаемся на этом. Это я на будущее просто говорю. Итак…Переменные для modbus-tcp будут записываться в вкладке MBTCP. Вот эти все переменные – они служебные. Нужны для того, чтоб мы могли наблюдать за состоянием сети modbus tcp(перечислить немного). Добавим свои переменные. Нажимаем плюсик. Ну и заполним карту переменных нашей вентустановки. (В данном видео я выйду за рамки бесплатной лицензии на 10 шт. переменных, так что имейте это ввиду, если захотите повторить действия из видео. ) Добавим переменную и далее, стараемся пользоваться не таблицей, а окном свойств, о которых я говорил в ранее. temp_setpoint HR 1 (уставка температуры) °С INT16 temp_outdoor IR 1 (уличная температура) °С INT16 temp_room IR 2 (температура в помещении) °С INT16 temp_supply IR 3 (температура в притоке) °С INT16 В тренды damp_open IR 4 (процент открытия заслонки) % fan_no_pressure CL 1 (индикатор отсутствия перепада давления на вентиляторе) heater_no_current CL 2 (индикатор отсутствия тока в цепи нагревателя) filter_dirty CL 3 (индикатор загрязнения фильтра) system_on CL 4 (включение системы) heater_on DI 1 (индикатор включения нагрева) fan_on DI 2 (индикатор включения вентилятора)

Переменные мы забили. Теперь давайте перейдем к узлам…. Добавим узел. Нажмем на плюсик. Привяжем сразу к нему прототип. Вот, появились наши переменные из прототипа модбаса. Смотрите, здесь также появились глобальные имена. Что такое P1, что такое N1… - это префиксы с ID проекта и ID узла, они позволят нам при необходимости обращаться к переменной из других узлов или проектов. Данные глобальные имена будут транслировать себя на весь сервер. Эти переменные можно будет подставлять в различные математические формулы, скрипты и так далее… Давайте зададим имя узлу. Пусть это будет “Вентустановка 1”. Теперь зададим параметры подключения.

  • Хост: 45.131.40.220 (Для демонстрации мы используем виртуальный узел демо-сервера)
  • Порт: 503
  • Slave ID: 1

Смотрите, тут еще кнопочка есть такая, она показывает только те параметры, которые были явно заданы. Это иногда очень полезно, чтоб не запутаться во всем этом разнообразии свойств.

Все, сохраняем. Собираем. Переходим в интерфейс-> переменные. И вот, как мы уже можем видеть – данные подтягиваются с демо сервера. Обратите внимание, температура у нас с виртуальной точкой на сервере. Давайте это исправим и представим эти данные в удобоваримом для нас виде. Вернемся в прототип. Выделим сразу 4 наши переменные, которые хотим изменить с одинаковым свойством. Выставим множитель 0.01 Сохраняем. Собираем. Переходим обратно в интерфейс. И вот у нас уже данные в удобном для нас виде. Отлично. Далее….Давайте заведем аварийную переменную и смоделируем разрыв связи с узлом. Возвращаемся в редактор. Заходим в наш прототип. Вкладочка Alarm. И создадим переменную alarm_offline. Добавим описание “Разрыв связи с узлом” Теперь нужно задать сигнал, по которому отработает наш alarm. Условие тревоги . Скопируем из MBTCP metric_down и вставляем ее сюда: $metric_down (значок доллара не забываем ставить). Вообще, здесь можно указывать целое математическое выражение с несколькими переменными (вот для чего могут пригодиться глобальные имена перменных), но сейчас нам это не требуется. Условие !=0. Т.е. когда переменная metric_down станет не равна 0 – сработает алярм. Здесь есть еще полезный параметр – это задержка в секундах. Своеобразный подавитель дребезга контактов. Например поставим мы 5 секунд. И если переменная станет равна 1, отработает секунду и вернется в 0 – алярм не появится. Как только она будет дольше 5 секунд – алярм отработает. Давайте еще выберем параметр тревоги. Сделаем класс “неисправность”. Больше мы ничего трогать пока не будем. Все. Сохраняем. Собираем. Давайте проверим, отработает ли данный алярм. Заморачиваться не буду – просто выдерну шнур из роутера на время. Все, алярм заработал. Снизу выскочила авария. Справа можем раскрыть подробнее. Звук можем включать/выключать. Давайте квитируем эту аварию. Ну и возвращаем все а место. Авария ушла. Опрос идет. Давайте еще заведем тревоги для нештатных состояний нашей вентустановки: Возвращаемся в редактор. Заходим в наш прототип. Вкладочка Alarm.

  1. Создаем переменную alarm_fan_pressure “Отсутствие перепада давления” Сигнал $fan_no_pressure Задержка 1 секунда
  2. Добавим переменную heater_no_current “Обрыв питания нагревателя” Сигнал $heater_no_current Задержка 1 секунда
  3. Добавим переменную alarm_filter_dirty “Засорен фильтр” Сигнал $alarm_filter_dirty Задержка 1 секунда Давайте эти сигнальчики подергаем руками. Внизу у нас аварийные переменные, вверху сигналы с сервера. Давайте переменной filter_dirty зададим значение 1. Вот отработал алярм. В журнале мы можем просмотреть весь список аварийных событий. Алярм будет висеть, пока авария не уйдет. Так…Вызовем инженера по вентиляции, пусть сходит заменит фильтр на вентустановке :D Инженер фильтр заменил, авария ушла. Все хорошо. Ну что ж…давайте перейдем в тренды. Мы создавали 4 тренда для переменных. Где поле Т стоят плюсики – там созданы тренды. Выделим сразу 4 переменные. Нажмем тренды и вот мы видим красивые 4 графика. Можем их подвигать, отзумить. Мышкой когда шевелим у графика, появляется курсор с данными. Очень удобно.

Ну что ж…На этом первая часть видео закончена. Подведем итог: Переменные мы завели, узел создали, аварии привязали, тренды завели. Это тот минимум, который по части сбора данных присутствует по сути в любом другом проекте. В следующем видео мы займемся визуализацией всех этих данных на мнемосхеме, а также масштабируем нашу систему диспетчеризации до 3 вентустановок.

  Email
   fdb_list
   fdb_load
   fdb_move
   fdb_paths
   node_list
   subscribe
   user_list
   user_save
   var_get
   var_list
   var_set