Перед реализацией прошивки ПЛК ставились следующие требования:
Учитывая вышеприведенные требования, для создания прошивки был выбран репозиторий пакетов дистрибутива ОС 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Мб, удовлетворяющую фактически всем заявленным требованиям и обеспечивающую:
В качестве среды исполнения ПЛК используем систему OpenSCADA. Для данного случая возьмём сборку с отдельными пакетами на каждый модуль и укажем для установки виртуальный пакет openscada-plc, который содержит зависимости на все пакеты OpenSCADA, обычно используемые для данной конфигурации. Пакет графической библиотеки gd2 был пересобран без поддержки формата графического файла xpm и получил название libgd2-noxpm. Пересборка делалось для того что бы исключить тяжелые зависимости на библиотеки графического интерфейса XOrg.
В результате получилась среда исполнения ПЛК с поддержкой:
Конфигурация OpenSCADA запускается в режиме демона в локали uk_UA.UTF-8 с использованием локальной БД SQLite, предоставляя по умолчанию сетевые сервисы:
В этом разделе рассмотрим детали дерева ОС прошивки, скрипт инициализации rc.sysinit.plc и скрипт подготовки дерева ОС прошивки.
Для построения прошивки ПЛК использовался следующий перечень пакетов:
Перечень модулей ядра системы загрузчика с целью уменьшения размера образа инициализации был уменьшен до списка:
В скрипте подготовки дерева были добавлены функции:
Скрипт инициализации (rc.sysinit.plc) был наделён функциями:
В результате этих мероприятий таблица монтирования конечного дерева ПЛК приняла вид:
Один из вариантов прошивки собирается с графическим интерфейсом, который, однако, нужно настроить для получения автоматического запуска со средой визуализации OpenSCADA. Кроме того, нужно отметить, что прошивка с графическим интерфейсом не содержит всех драйверов и может потребоваться её пересборка под нужное оборудование.
После загрузки и входа в консоль нужно сконфигурировать XServer, автоматический графический вход, запуск графического окружения и автоматический запуск OpenSCADA из окружения IceWM:
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%. Контроллер имеет сертификат "УкрСЕПРО", что может быть важным для многих пользователей на территории Украины.

Рабочее окружение OpenSCADA для этого компьютера строилось на основе пакетной базы дистрибутива
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.