OpenSCADAWiki: Using/PLC/firmware
 

Прошивка и создание программного окружения ПЛК архитектуры x86

Перед реализацией прошивки ПЛК ставились следующие требования:

Инструменты и сборка рабочих окружений

Учитывая вышеприведенные требования, для создания прошивки был выбран репозиторий пакетов дистрибутива ОС Linux ALTLinux и инструмент создания дистрибутивов mkimage. mkimage - инструмент для сборки образов Sisyphus-based системы по шаблону. В качестве исходного набора шаблонов был взят набор шаблонов формирования дистрибутивов ALTLinux по адресу git://git.altlinux.org/people/boyarsh/packages/mkimage-profiles-desktop командой:

За основу формирования PLC шаблона был взят стандартный "rescue", как наиболее компактный и близкий к целевой задаче ПЛК.

Сборка

В первую очередь создавалась конфигурация ПЛК без локального дисплея в виду наличия оборудования такого типа и отсутствия оборудования для Touch-панелей.

Новый шаблон ПЛК был назван "plc" и тестировался на платах формфактора PC/104 MOPSlcdLX фирмы Kontron, ATH400-128 фирмы Diamond Systems и модульного ПЛК LP-8781 фирмы ICP DAS. Архив результирующего дерева mkimage с шаблоном "plc" можно загрузить здесь ftp://ftp.oscada.org/OpenSCADA/PLC (шаблоны и материалы отдельных контроллеров размещены в собственных директориях).

Ключевым моментом конфигурации нового шаблона стало написание скрипта инициализации (rc.sysinit), скрипта послеинсталляционной конфигурации образа прошивки и перечня пакетов в образе прошивки. Первый скрипт оформлен в виде пакета "startup-plc". Второй скрипт вложен в шаблоне "plc" по пути: profiles/plс/image-scripts.d/01system. Перечень пакетов вложен в шаблоне "plc" по пути: profiles/pkg/lists/plс.in

Процедура создания прошивки из шаблона следующая:


В результате получаем выходную директорию в profiles/out/ вида:

Инсталляция

Загружать прошивку можно на: USB-flash, IDE-flash и HDD. Однако, в случае с USB-flash может быть проблема с ожиданием инициализации USB-подсистемы и нужно будет немного побегать по диалогам загрузчика.

Файловая система может быть fat или ext2/ext3. В случае с ext3 монтирование корня производится как ext2, из-за проблем в инициализаторе. В случае с ext2/ext3 нужно будет использовать не загрузчик syslinux, а extlinux, конфигурация которого впрочем почти ничем не отличается.

Далее монтируем носитель и размещаем на нём файлы из выходной директории следующим образом.
В случае с fat и syslinux:

В случае с ext2/ext3 и extlinux:


Для обеспечения надёжного функционирования рабочие данные размещаются в файле "work" с файловой системой ext3. Файловая система этого файла проверяется на целостность при инициализации. Создаётся этот файл следующим образом:


В случае с файловой системой ext2/ext3 на целевом диске можно файл "work" не создавать. Тогда рабочие данные будут размещаться в директории root целевого диска. Внимание. Это ненадёжное решение, поскольку корневая файловая система целевого диска становится нестатичной, а проверять её нет возможности, ввиду раннего монтирования в "ro" и потенциальной ненадёжности проверки ФС, смонтированной в "ro", а так же невозможности перемонтировать как ext3.

Следующим этапом является конфигурация и инициализация загрузчика. Для конфигурации загрузчика нужно отредактировать файл syslinux/syslinux.cfg или extlinux/extlinux.conf следующим образом:


В случае выбора идентификации загружаемого раздела по идентификатору узнать его для нашего раздела можно командой: blkid.

В случае с меткой эта задача чуть сложнее поскольку делается это для разных файловых систем по разному.

Для файловых систем ext2/ext3 это делается утилитой e2label. Например, так: "e2label /dev/sdb1 PLС"

Для файловой системы FAT это делается набором утилит из комплекта mtools следующим образом:


Теперь можем инициализировать загрузчик:


На этом с загрузкой и инициализацией прошивки всё. Если полученный диск не грузится то:

Результат

В результате получаем прошивку размером от 30 до 100Мб, удовлетворяющую фактически всем заявленным требованиям и обеспечивающую:

Open SCADA

В качестве среды исполнения ПЛК используем систему Open SCADA. Для данного случая возьмём сборку с отдельными пакетами на каждый модуль и укажем для установки виртуальный пакет openscada-plc, который содержит зависимости на все пакеты Open SCADA, обычно используемые для данной конфигурации. Пакет графической библиотеки gd2 был пересобран без поддержки формата графического файла xpm и получил название libgd2-noxpm. Пересборка делалось для того что бы исключить тяжелые зависимости на библиотеки графического интерфейса XOrg.

В результате получилась среда исполнения ПЛК с поддержкой:

Конфигурация Open SCADA запускается в режиме демона в локали uk_UA.UTF-8 с использованием локальной БД SQLite, предоставляя по умолчанию сетевые сервисы:

Детали реализации

В этом разделе рассмотрим детали дерева ОС прошивки, скрипт инициализации rc.sysinit.plc и скрипт подготовки дерева ОС прошивки.

Для построения прошивки ПЛК использовался следующий перечень пакетов:


Перечень модулей ядра системы загрузчика с целью уменьшения размера образа инициализации был уменьшен до списка:


В скрипте подготовки дерева были добавлены функции:

Скрипт инициализации (rc.sysinit.plc) был наделён функциями:

В результате этих мероприятий таблица монтирования конечного дерева ПЛК приняла вид:

Настройка графического интерфейса

Один из вариантов прошивки собирается с графическим интерфейсом, который, однако, нужно настроить для получения автоматического запуска со средой визуализации Open SCADA. Кроме того, нужно отметить, что прошивка с графическим интерфейсом не содержит всех драйверов и может потребоваться её пересборка под нужное оборудование.

После загрузки и входа в консоль нужно сконфигурировать XServer, автоматический графический вход, запуск графического окружения и автоматический запуск Open SCADA из окружения Ice WM:

iROBO-3000a

iROBO-3000a представляет из себя безвентиляторный промышленный компьютер с установленным Intel Atom D425 1.8 GHz с VGA, 2xGb LAN, 4xCOM, 4xUSB, 1GB RAM, 1x2.5" SATA HDD 120GB, Mini-PCIe, 4x4 DIO, CF слот, SIM Card слот, Audio, WDT, рабочий диапазон температур -5..+55°С. Производительности данного компьютера достаточно для выполнения как функций сервера сбора, контроля и управления, так и функций станции визуализации. Однако, ввиду использования непроизводительного процессора семейства Atom выполнение математических моделей технологических процессов потребует всех ресурсов процессора. Например, при исполнении математической модели АГЛКС процессор нагружается на 86%. Контроллер имеет сертификат "Укр СЕПРО", что может быть важным для многих пользователей на территории Украины.

iROBO-3000a (541 Kb)


Рабочее окружение Open SCADA для этого компьютера строилось на основе пакетной базы дистрибутива ALTLinux T6, а также свежесобранного окружения рабочего стола Trinity (TDE). Сборка окружения осуществлялась на основе вышеописанной концепции с помощью обновлённого профиля "mkimage". В новый профиль также была добавлена цель "plc", однако её суть изменилась, фактически став копией цели "live", что стало возможным благодаря внедрению на этапе первичной инициализации прозрачного монтирования раздела с меткой "alt-live-storage" как отражения упакованной файловой системы с произвольным доступом на модификацию. В целом это позволило создать фиксированное ядро прошивки с базовым набором программного окружения размером 300Мб и возможностью свободного расширения путём доустановки нужных пакетов из дистрибутива.

В качестве окружения рабочего стола было выбрано Trinity по причине наличия проблемы фонового артефактинга в связке XOrgServer 1.10 + QT4, а также малой ресурсоёмкости TDE при высокой развитости и стабильности.

Архив профилей сборки нового окружения получил название mkimage-profiles-6-kdesktop-plc.tgz, а последняя сборка прошивки ALTLinux6-OpenSCADA_0.7.2-i586-plcUI_TDE-generic.flash.tar.