Хабрахабр

ScadaPy Creator для python

Ускорение процесса создания modbus.py

Очередной раз хочется поделиться своим опытом и результатами экспериментов в области промышленной автоматизации.

В настоящий момент мы немного поменяли концепцию построения системы опроса устройств с использованием языка python.

Большинство модулей SCADA систем строится по принципу связки «исполняемый файл — файл настройки».
Исполняемый файл — это как правило скомпилированный бинарный файл, который непосредственно занимается опросом подчиненных устройств по определенному протоколу, его еще могут называть «драйвером протокола».

Это может быть таблица или таблицы в какой-либо СУБД, например, часто используется SQLite или Firebird, может также использоваться файл xml.
Работая с различными устройствами, мы пришли к выводу, что было бы очень удобно иметь в наличие уже скомпилированный файл драйвера со всеми настройками (переменными) внутри, хорошо было бы еще иметь возможность корректировать драйвер уже на сервере при организации опроса устройств. Параметры опроса (порт, адреса, скорость и т.д.) для драйвера записываются в файл настройки, который бывает разных типов.

Для подобной цели рассматривался вариант создания приложения, которое на основе конфигурационного файла xml будет создавать драйвер на python.

Основное условие – программа, формирующая код драйвера, должна обязательно работать и в Windows и в Linux.

Первоначально решили сделать приложение на PyQt, но откровенно говоря, для нас оказалось довольно сложно писать программу в такой связке, не имея в наличие полноценной визуальной IDE для построения интерфейса пользователя.

Попробовали скомпилировать программы на разных ОС – результатом остались довольны. Ранее приходилось часто делать программы на C Builder и Delfi, поэтому обратили свой взор в сторону Lazarus.

8. Решили попытаться написать приложение на Lazarus IDE 1. 2., назвали его ScadaPy Creator.
Все настройки конфигурации сохраняются в одном единственном файле xml.

image

После компиляции на выходе мы имеем драйвер modbus, драйвер счетчика Меркурий-230, сервер http Json и файл html в качестве клиента.

Как это работает

Запускаем драйвер modbus или Меркурий-230 для опроса устройств.

Запускаем Json HTTP сервер, который в свою очередь получает данные от драйвера и формирует пакет в формате json для http запросов. Получив ответы согласно описанным переменным, драйвер передает данные по UDP протоколу на порт 64000.

Запускаем в браузере html файл клиента и видим уже обработанные данные в трех форматах — json, текстовом и в виде SVG картинки.

Далее можно редактировать и html и SVG под свои нужды.

image

Мне, откровенно говоря, достаточно представления данных в виде простой таблицы, а для кого-то лучше информация воспринимается в виде мнемосхемы.

Подобный вариант использования python скриптов был неоднократно опробован на удаленных подстанциях, где установлены объектовые серверы на базе ОС Linux и доступ туда имелся только по SSH.

Разумеется, для создания полноценной SCADA системы, со множеством входных сигналов и измерений этот вариант не подходит, там однозначно нужно применять
стабильно работающий софт от проверенных производителей.

Вот типичный вариант, что называется, из последнего.

Задача:

Имеется устройство, работающее по протоколу modbus — датчик температуры и влажности Lumel P18.

image

Нужно получать значения температуры и влажность каждые пять минут и отображать на экране монитора в любом виде.

Устройство находится далеко, на расстоянии около 90 км от офиса.

Для начала создаем проект.

image

У Р18 температура берется по двум адресам 7002 и 7003, 32 бит, число с плавающей запятой, а влажность берется по двум адресам 7004 и 7005, 32 бит, число с плавающей запятой.

image

Кроме температуры и влажности, имеется возможность отображать и более развернутую информацию на объекте: относительная и абсолютная влажность, точка росы и т.д.

image

После генерации, будут созданы два файла modbus.py и jserver.py.

Отправляем эти файлы на сервер объекта, а на компьютере клиента запускаем jclient.html.

image

Можно конечно файл html переместить и на web сервер.

Вот в принципе и все.

Проект с примерами можно скачать здесь.

S.
Осталась одна проблема, решение которой мы пока не нашли. P.

На работе объектового сервера это никак не отражается, но почему так? Запущенный драйвер опроса отбирает 100% ресурсов процессора, если запустить два драйвера, то соответственно каждый отбирает по 50%.

Приветствуется любая критика, замечания и советы, но конструктивная и по существу.

Теги
Показать больше

Похожие статьи

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *

Кнопка «Наверх»
Закрыть