Перед реализацией прошивки ПЛК ставились следующие требования:
Учитывая вышеприведенные требования, для создания прошивки был выбран репозиторий пакетов дистрибутива ОС 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: