SCADA на Raspberry: миф или реальность? / Хабр

Техническое описание rapid scada

Документация по Rapid SCADA на русском

2-й способ. взаимодействие по протоколу tcp.

Для обмена информацией между SCADA-Сервером и другими приложениями, например, SCADA-Коммуникатором, SCADA-Web, используется протокол TCP.  В дополнение к функциям запроса данных, используя протокол TCP, возможно передавать SCADA-Серверу команды телеуправления, которые затем будут направлены контроллерам.

SCADA-Сервер открывает на компьютере TCP порт, указанный в его настройках, остальные приложения подключаются к нему в качестве клиентов. Список подключенных клиентов можно проконтролировать в текстовом файле состояния SCADA-Сервера. При подключении клиент должен отправить серверу имя пользователя и пароль, чтобы получить права на запрос данных и отправку команд.

Следующий пример показывает, как создать объект для подключения к SCADA-Серверу и получить таблицу срезов:

Как видно из примера, для взаимодействия со SCADA-Сервером по протоколу TCP существует специальный класс Scada.Client.ServerComm. Настройки соединения задаются с помощью объекта типа CommSettings. Полученные данные таблицы срезов записываются в объект типа SrezTableLight, уже знакомый по предыдущим примерам.

Основные методы класса ServerComm, используемые для интеграции с Rapid SCADA, перечислены в следующей таблице.

Видео

Видеоуроки по Rapid SCADA версии 5.7

Видеоуроки по Rapid SCADA версии 5.6

Видео от сообщества

Подключаемые модули для scada-сервера

Функциональность SCADA-Сервера можно гибко расширять с помощью подключаемых модулей. Подключаемый модуль представляет собой библиотеку, написанную на .NET совместимом языке программирования, например, C# с соблюдением определённых правил. Модуль позволяет добавить дополнительную логику, срабатывающую при определённых внутренних действиях SCADA-Сервера. Это может быть запуск и остановка, получение новых данных или событий и т.д.

Серверные модули удобно использовать в следующих случаях:

  • если необходима передача информации в сторонние системы или базы данных сразу в момент её получения SCADA-Сервером;
  • если необходима дополнительная сложная обработка получаемых SCADA-Сервером данных;
  • если требуется автоматически генерировать команды управления при выполнении заданных условий.

Разработка подключаемых модулей выполняется в среде Microsoft Visual Studio версии 2021 и выше. Чтобы реализовать модуль, необходимо создать проект типа Class Library и реализовать два класса, унаследованных от классов Scada.Server.Modules.ModView и Scada.Server.Modules.ModLogic. Первый класс описывает пользовательский интерфейс модуля, а второй – логику его работы.

Способы получения данных

Интеграция с Rapid SCADA подразумевает, прежде всего, интеграцию с приложением SCADA-Сервер, которое входит в состав программного комплекса. SCADA-Сервер управляет текущими и архивными данными системы на основе конфигурации, принимает и предоставляет информацию приложениям.

Считать данные Rapid SCADA и преобразовать в набор объектов можно с помощью библиотеки ScadaData.dll. Актуальную версию этой библиотеки можно получить, установив Rapid SCADA и выполнив поиск файла ScadaData.dll в директории установки. Исходный код библиотеки доступен на GitHub по ссылке.

Библиотека ScadaData.dll использует платформу .NET и написана на языке программирования C#. Поэтому разрабатываемые интеграционные модули должны быть написаны на одном из .NET совместимых языков. Для разработки необходимо использовать Microsoft Visual Studio версии 2021 или выше. Не забудьте добавить ссылку на ScadaData.dll к Вашему проекту.

Далее рассматриваются два основных способа обмена данными между Rapid SCADA и сторонними приложениями, которые реализованы в ScadaData.dll.

Структура данных rapid scada

Для интеграции с Rapid SCADA интерес представляют категории данных, описанные в следующей таблице.

Приведённые выше данные сохраняются в файлах специально разработанного формата DAT. Этот формат обеспечивает быстрый доступ на чтение и запись, а также работоспособность комплекса в случае повреждения части файла.

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

Считывание базы конфигурации

База конфигурации редактируется с помощью программы SCADA-Администратор. После того, как в базу конфигурации внесены необходимые правки, по щелчку на соответствующей кнопке создаётся рабочая копия базы, которая используется остальными приложениями Rapid SCADA.

Рабочая копия базы конфигурации сохраняется в файлах формата DAT и располагается по умолчанию в директории C:SCADABaseDAT. Каждый файл DAT содержит одну таблицу базы данных. Содержимое этих файлов можно просмотреть с помощью пользовательского интерфейса SCADA-Сервера.

Для считывания информации из файлов DAT, содержащих таблицы базы конфигурации, предназначен класс Scada.Data.BaseAdapter. Данные загружаются в таблицу типа DataTable. Для базы конфигурации, таблицы которой содержат не более 65535 строк, быстродействия DataTable вполне достаточно.

Пример считывания таблицы базы конфигурации:

Работа с объектами DataTable подробно описана в MSDN.

Считывание событий

Считывание событий из файла формата DAT выполняется аналогично считыванию срезов. Класс EventAdapter производит чтение данных в экземпляр класса EventTableLight или DataTable. Класс EventTableLight предпочтителен по отношению к DataTable из-за скорости работы.  Файлы событий именуются в формате eYYMMDD.dat, где YYMMDD – год, месяц и день событий, хранящихся в файле.

Пример считывания и вывода событий:

Возможности записи в файлы текущих, архивных данных и событий не рассматривается в данной статье, т.к. запись в эти файлы выполняется SCADA-Сервером. Другие приложения не должны напрямую изменять файлы архивов, вместо этого необходимо взаимодействовать со SCADA-Сервером по протоколу TCP, как описано далее.

Считывание текущих и архивных данных

Текущие и архивные данные хранятся в файлах формата DAT в виде таблиц срезов. Срез – это набор значений и статусов входных каналов в определённый момент времени.

По умолчанию текущие, архивные данные и события сохраняются SCADA-Сервером в директорию C:SCADAArchiveDAT. Файл текущих данных имеет имя current.dat. Файлы архивов именуются в формате mYYMMDD.dat для минутных архивов и hYYMMDD.dat для часовых архивов, где YYMMDD – год, месяц и день данных, хранящихся в файле. Каждый архивный файл содержит данные за одни сутки.

Для работы с файлами DAT, которые содержат таблицы срезов, предназначен класс Scada.Data.SrezAdapter.

Пример считывания данных из файла таблицы срезов:

В приведённом примере адаптер заполняет таблицу срезов типа SrezTableLight. Кроме таблицы SrezTableLight, указанной в примере, адаптер поддерживает загрузку данных в объекты типов DataTable и Trend.

DataTable – это стандартная реализация таблицы в .NET. Она работает значительно медленнее по сравнению со SrezTableLight, поэтому использовать DataTable следует лишь в тех случаях, когда это явно необходимо.

Класс Trend предназначен для быстрой работы с данными одного входного канала. Этот класс может использоваться, например, если необходимо построить график значений канала.

Следующий пример выводит в консоль данные из таблицы срезов:

Часть i. установка rapid scada на raspberry

1. Заполняем форму на сайте Rapid Scada для получения дистрибутива и скачиванием последнюю версию для Linux.

2. Разархивируем скаченные файлы и копируем папку «scada» в директорию /opt устройства.

3. Кладем три скрипта из папки «daemons» в директорию /etc/init.d

4. Даем полный доступ трем папкам приложения:

sudo chmod -R ugo rwx /opt/scada/ScadaWeb/config
sudo chmod -R ugo rwx /opt/scada/ScadaWeb/log
sudo chmod -R ugo rwx /opt/scada/ScadaWeb/storage

⠀5. Делаем скрипты исполняемыми:

sudo chmod  x /opt/scada/make_executable.sh
sudo /opt/scada/make_executable.sh

⠀6. Добавляем репозиторий:

Часть ii. установка rapid scada на windows

Установка Rapid SCADA на Windows потребуется для настройки Raspberry и конфигурации проекта. В теории можно это делать и на самой малине, но в технической поддержке нам посоветовали использовать среду разработки на Windows, поскольку здесь она работает корректнее, чем на Linux.

Итак, приступим:

  1. Обновляем Microsoft .NET Framework до самой свежей версии;
  2. Скачиваем дистрибутив Rapid SCADA для Windows и устанавливаем в автономном режиме;
  3. Запускаем приложение «Администратор». В нём мы будем разрабатывать сам проект.

При разработке необходимо обратить внимание на некоторые моменты:

1. Нумерация регистров в данной SCADA-системе начинается с 1 адреса, поэтому нам пришлось увеличить нумерацию своих регистров на единицу. В нашем случае это: 512 1 и так далее:

Рисунок 3 — Нумерация регистров в Rapid SCADA (картинка кликабельна)

2. Для перенастройки директорий и корректного развертывания проекта на операционной системе Linux, в настройках необходимо зайти в «Сервер» -> «Общие параметры» и нажать кнопку «Для Linux»:

Рисунок 4 — Перенастройка директорий в Rapid SCADA (картинка кликабельна)

3. Определяем порт опроса для Modbus RTU таким образом, как он определяется в системе Linux устройства. В нашем случае это /dev/ttyUSB0

Рисунок 5 — Перенастройка директорий в Rapid SCADA (картинка кликабельна)

Часть iii. разработка проекта и его загрузка на устройство

Разработка и визуализация проекта создается непосредственно в самом браузере. Это не совсем привычно после десктопных SCADA-систем, но вполне имеет место быть.

Отдельно хотелось бы отметить ограниченный набор элементов визуализации (рисунок 6). Из встроенных компонентов здесь есть светодиод, кнопка, тумблер, ссылка и указатель. Однако большой плюс в том, что данная SCADA-система поддерживает динамические изображения и текст.

Рисунок 6 — Инструменты редактора схем в Rapid SCADA

В рамках данной статьи не было цели расписывать поэтапно процесс графического создания проекта в Rapid SCADA. Поэтому подробно не будем останавливаться на этом пункте. В среде разработчика наш простенький проект «Системы подачи сжатого воздуха» компрессорной станции выглядит следующим образом (рисунок 7):

Рисунок 7 — Редактор схем в Rapid SCADA (картинка кликабельна)

Далее заливаем наш проект на устройство. Для этого указываем IP-адрес устройства для передачи проекта не на localhost, а на наш встраиваемый компьютер:

Рисунок 8 — Загрузка проекта на устройство в Rapid SCADA (картинка кликабельна)

В итоге у нас получилось нечто подобное (рисунок 9). В левой части экрана находятся светодиоды, отражающие статус работы всей системы (компрессора), а также статус работы задвижек (открыты или закрыты), а в центральной части экрана — визуализация технологического процесса с возможностью управления устройствами посредством тумблеров.

Рисунок 9 — Проект компрессорной станции (GIF-анимация кликабельна)

Выводы

Появление мощных встраиваемых промышленных компьютеров позволяет расширить и дополнить функционал программируемых логических контроллеров. Установка на них подобных SCADA-систем может покрыть задачи небольшого производства или технологического процесса.

Для более крупных задач с большим количеством пользователей или повышенным требованием безопасности, скорее всего, придется устанавливать полноценные сервера, шкафы автоматики и привычные ПЛК. Однако для точек средней и малой автоматизации по типу небольших производственных зданий, котельных, насосных или умного дома — подобное решение кажется целесообразным. По нашим подсчетам, подобные устройства подойдут для задач до 500 точек ввода-вывода данных.

Если у вас есть опыт рисования в различных графических редакторах и вас не смущает то, что вам придется самостоятельно создавать элементы мнемосхем, то вариант с Rapid SCADA под Raspberry весьма оптимален. Её функционал как готового решения несколько ограничен, поскольку это Open Source, однако и он позволяет покрыть задачи небольшого производственного здания.

Таким образом, чтобы понять, насколько полезным может быть для вас подобное решение на Raspberry и насколько ваши проекты заменимы Open Source SCADA-системами на Linux, возникает вполне резонный вопрос: какими SCADA-системами вы пользуетесь чаще всего?

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

Войти