АСУТП по-домашнему

Вкусная АСУ на малине, секреты приготовления

#1 2017-03-29 23:46:19

Puhov
Administrator
Зарегистрирован: 2016-09-20

WEB-морда для малины.

SCADA-система - давно устоявшийся термин для компьютерных приложений, реализующих человеко-машинный интерфейс верхнего уровня. Например, вот такой:
1490818643_pic1.png
Когда SCADA-системы только начали появляться, многим коллегам не раз приходил в голову незатейливый производственный вопрос - отчего начальство покупает scado-подобные интачи, сайтеки и трайсмоуды, если даже я легко наваяю подобную мнемосхему на Borland Builder-е? И правильно приходил! Сейчас, спустя много лет, потраченных в том числе и на тестирование покупных скад, это стало ясно как квадрат двойки. Когда десяток программистов в непотопляемой госконторе годами сидят и изучают сторонние разработки  - это если не саботаж, то как минимум не креативно.
Однако с годами планка СКАД поднялась и теперь уже далеко не так просто разработать что-то своё на должном уровне. Догонять сегодняшний Intouch я бы не стал и другим не советовал, но ... но теперь уже другой назойливый вопрос навевает смутные сомнения - а так ли оно надо?
Конечно, для автоматизации систем водоснабжения, документооборота и канализации каких-нибудь моэсков, транснефтей и трансгазов никах не обойтись без всемирно известной от ведущих компаний-производителей скады на 100 тыщ тэгов, 100 гигов архивов и 100 тыщ евро, это понятно. Но мы-то  здесь не ради этого собрались!

Домашняя АСУТП и что от неё требуется

Недорогой ПЛК в образе гигабайтной, гигагерцовой малины с установленным линуксом и средой исполнения МЭК-6-1131 это вовсе не так скромно, как это может показаться за эти деньги.


Когда-то на более скромной пром-PC на базе пня-II-ммх-200 мы вводили систему с несколькими сотнями задвижек, ПИД-регулирующих клапанов и несколькими нагревателями.  Всё это хозяйство располагалось на этажерке 100 м2 между нулевой и 15-метровой отметками. И ПЛК вполне себе справлялся, укладываясь в цикл управления 50 мс. Всё это я к тому, что для малых объектов управления мощность ПЛК типа Raspberry более чем достаточна.

Следующий вывод будет по поводу скада-систем. Любая из известных скад несёт в себе солидный человеко-машинный функционал. Тут и система алармов с протоколированием действий оператора, и подсистема архивирования для исторического представления процесса, и свой внутренний `бейсик` для программирования всяких закидонов, и система отчётов, эксперт-система и что-нибудь ещё эдакое, делающее данную скаду единственной и неповторимой на рынке скад.
Подключение к широкому ассортименту ПЛК или работа без(вместо) ПЛК не проблема для современной скады. Проблема только в том, что всё это в полном объёме совершенно не нужно для домашнего употребления. Мало кому потребуется дома хотя бы половина из перечисленных достоинств. Никто не будет гонять круглосуточно сервер для ведения архивов, генерить отчёты, да и вообще быть полноценным оператором на дому вряд ли кто страждет. Оптимально было бы иметь возможность открыть страничку в браузере и управлять/мониторить тем что есть под рукой, будь то комп, планшет или мобильник. Возможно, аналогичный вывод можно сделать и для многих недомашних объектов автоматизации. Не раз наблюдал подобное - стоит, например, в диспетчерской DataRate, который вообще ничем не управляет, а только опрашивает и выводит на экран показания датчиков микроклимата.
Придя к такому выводу и покопавшись в сети, на одном форуме я нашёл вот такое сообщение:

Serge78rus пишет:

Раньше я делал собственные компоненты для отображения мнемосхем, правда, я работал не на Delphi, а на Borland C++ Builder, но сути это не меняет. Потом полностью перешел на ВЕБ отображение - пусть рисует браузер, я же пишу толко серверное ПО.
Для отображения мнемосхем использую SVG: http://svgmnemo.ru
Для графиков - http://jsgadget.ru/jschart.html

Вот это да, подумал я. Ведь это как раз то, что нужно - рисовать мнемосхемы прям в вебе. "Тонкий клиент" называется такой подход, который кстати могут предоставлять и многие скады, правда вместе с тонким клиентом скорее всего придётся купить и прочее со всеми потрохами.


Можно ли назвать данную технологию SCADA-системой? Строго говоря, можно, так как присутствует как supervisory control (под которым можно понимать всё что угодно), так и data acquisition (под которым подразумевается способность собирать данные и визуализировать их). Но по факту, в сравнении со стандартным функционалом стандартных скад, данный подход однозначно не тянет на что-либо подобное. Отсутствует ядро с функциями архивирования, генерации алармов, библиотекой драйверов ввода-вывода. Видимо из этих соображений Серж и назвал свою наработку NoScada. Но, повторюсь, для домашних и прочих малых приложений всего этого и не требуется, поэтому здесь привычный термин SCADA оставляем как есть, заменив отрицающую приставку 'No' масштабирующей 'n' : nScada
.

Не выходя из могимозиллы

Для отрисовки своих мнемосхем автор сайта svgmnemo.ru (Serge L. Ryadkow) использует сравнительно новый формат векторной графики SVG. Векторная графика хороша тем, что полученная картинка сжимается и разжимается без потери качества, что дает фору иным из проприетарных скад. Вот одна из демонстрашек, кои разработал и выложил Серж:
КНС с чартом
На том же сайте выложены примитивы графических объектов, которые можно использовать для сборки мнемосхемы. К каждому примитиву прилагается его xml-описание и JavaScript, демонстрирующий использование объекта (вот только использовать их в лоб не получится).
Суть действа состоит в том, что в тело html-страницы (например, index.html) включается <embed src="mns.svg"/> , где mns.svg это и есть мнемосхема в формате SVG. Кроме того, в заголовок html-страницы включена js-библиотека, при помощи которой можно обращаться к свойствам графических объектов мнемосхемы - изменять значения показометров, моргать лампочками, обрабатывать нажатия кнопок. Поэтому к странице также прикреплён жабаскрипт (например, index.js), который должен содержать все эти действия, т.е. по сути программа пользовательского интерфейса. И пусть вас не пугает то, что всё придётся писать на js, в покупной скаде простота создания проекта в несколько кликов достигается только для демонстрашек, любой реальный проект потребует погружения во внутреннее естество скады со своими скриптами, порой изрядно мерзкими. А тут хоть общепризнанный js, знание которого никогда не помешает.
Итак, есть примеры создания мнемосхем с библиотекой примитивов. Но как собрать эти примитивы в нужную картинку? По идее это можно набить в текстовом редакторе, ведь svg-файл он, как и все xml-ы, текстовый. Т.е. копипастим svg-код из библиотеки в свой svg, заменяя координаты скопированных элементов и контролируя процесс по факту, перезагружая полученное в браузере. Можно, но чертовски нудно при отрисовке какого-нибудь трубопровода. Так как Серж не даёт ответ на этот вопрос, пришлось озадачиться поиском подходящего SVG-редактора.
И он не заставил себя ждать:
Inkscape
Правда, в том виде, в котором редактор Inkscape выложен на сайте разработчиков, он из рук вон плохо справляется с поставленной задачей в виду того, что вносит много изменений в иерархии свойств разработанных Сергеем объектов. Например, объединяет свойства fill и stroke в одно свойство style и творит прочие мелкие вольности, нарушающие работу js-библиотеки. К тому же у Сергея вся интерактивность происходила через кнопки и только, я же добавил элементы inputText (поле текстового ввода), которые оригинальный Inkscape, как оказалось, не отображает. Поэтому пришлось Inkscape подправить, в загрузках выложен 'правильный' Inkscape.

Вот теперь технологическая цепочка сомкнулась:

  1. набираем мнемосхему в svg-редакторе Incscape

  2. кодим прогу на js - оживляем мнемосхему

  3. отлаживаем js-прогу прямо в мозилле, там есть совершенно обалденный отладчик

  4. собираем полученную веб-морду в zip-архив под названием www.zip

  5. подлючаем файл www.zip как ресурс к проекту ISaGRAF и грузим проект в ПЛК

  6. набираем в адресной строке браузера адрес малины (например, 192.1.1.179:1200) и пожинаем плоды усердия

пп с 1 по 3 делаются в локальной папке компа, где постепенно формируем svg- и js-файлы, кликаем по index.html и смотрим/отлаживаем. А потом уже грузим отлаженное в малину для возможности работы с ней через любой браузер в домашней сети.
Пытливый читатель наверняка заметит небольшую неувязку - а как собственно js-программа обменивается данными с ПЛК? Например, как считать переменную ISaGRAF, скажем, papa и записать значение в JavaScript-переменную mama?
Для этого используем ajax-запрос, вызываемый с требуемой периодичностью. Примеры прилагаются в скачиваемых файлах.

Не в сети

Подвал раздела