Архитектура x86 сравнительно недавно стала позиционироваться как встраиваемая и реальные решения на её основе, в этой области, редко обладают ресурсами (< i386), недостаточными для исполнения полноценной ОС и развитого окружения. По этой причине, а также по причине большей унификации архитектуры, индивидуальная сборка ядра Linux и базовых программ окружения ОС осуществляется достаточно редко, что обычно характерно для архитектуры ARM. Более интересным и практичным для x86, для широкого спектра оборудования, является сборка прошивок со сжатой корневой файловой системой (КФС). Однако по прежнему возможна индивидуальная сборка прошивок с помощью систем сборок вроде "BuildRoot" или "PTXDist", ниже. Также возможна и прямая установка дистрибутива Linux.
Перед реализацией прошивки ПЛК, данного раздела, ставились следующие требования:
Учитывая вышеприведенные требования для создания прошивки был выбран инструмент создания дистрибутивов mkimage ALTLinux. mkimage — инструмент для сборки по шаблону образов основанной на Sisyphus системы. В качестве исходного набора шаблонов был взят набор шаблонов формирования дистрибутивов ALTLinux по адресу git://git.altlinux.org/people/boyarsh/packages/mkimage-profiles-desktop командой:
За основу формирования ПЛК-шаблона был взят стандартный "rescue", как наиболее компактный и близкий к целевой задаче ПЛК.
Первичная сборка осуществлялась на основе пакетной базы дистрибутива ALTLinux 5.1, где присутствует ядро реального времени от XENOMAI. Для получения ряда специфических пакетов нужно подключить репозиторий "ALTLinux 5.1" от проекта OpenSCADA:
rpm ftp://ftp.oscada.org/ALTLinux/5.1 new roman
В первую очередь создавалась конфигурация ПЛК без локального дисплея в виду наличия оборудования такого типа и отсутствия оборудования для 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, HDD и SSD. Однако в случае с USB-flash может быть проблема с ожиданием инициализации USB-подсистемы и нужно будет немного "побегать" по диалогам загрузчика.
Файловая система может быть FAT или EXT2/3. В случае с EXT3 монтирование корня производится как EXT2, из-за проблем в инициализаторе. В случае с EXT2/3 нужно будет использовать не загрузчик syslinux, а extlinux, конфигурация которого впрочем почти ничем не отличается.
Далее монтируем носитель и размещаем на нём файлы из выходной директории следующим образом.
В случае с FAT и syslinux:
В случае с EXT2/3 и extlinux:
Для обеспечения надёжного функционирования рабочие данные размещаются в файле "work" с файловой системой EXT3. Файловая система этого файла проверяется на целостность при инициализации. Создаётся этот файл следующим образом:
В случае с файловой системой EXT2/3 на целевом диске можно файл "work" не создавать. Тогда рабочие данные будут размещаться в директории root целевого диска.
Следующим этапом является конфигурация и инициализация загрузчика. Для конфигурации загрузчика нужно отредактировать файл "syslinux/syslinux.cfg" или "extlinux/extlinux.conf" следующим образом:
В случае выбора идентификации загружаемого раздела по индивидуальному идентификатору, узнать его для нашего раздела можно командой: blkid.
В случае с меткой эта задача чуть сложнее поскольку делается она для разных файловых систем по разному.
Для файловых систем EXT2/3 это делается утилитой e2label. Например, так: "$ e2label /dev/sdb1 PLС"
Для файловой системы FAT это делается набором утилит из комплекта mtools или с помощью parted, что проще. С помощью mtools это делается следующим образом:
Теперь можем инициализировать загрузчик:
На этом с загрузкой и инициализацией прошивки всё. Если полученный диск не грузится то:
В процессе ревизии
В результате получаем прошивку размером от 30 до 100Мб, удовлетворяющую фактически всем заявленным требованиям и обеспечивающую:
В качестве среды исполнения ПЛК используем систему OpenSCADA. Для данного случая возьмём сборку с отдельными пакетами на каждый модуль и укажем для установки виртуальный пакет "openscada-plc", который содержит зависимости на все пакеты OpenSCADA, обычно используемые для данной конфигурации. Пакет графической библиотеки GD2 был пересобран без поддержки формата графического файла xpm и получил название libgd2-noxpm. Пересборка делалось для того чтобы исключить тяжелые зависимости на библиотеки графического интерфейса XOrg.
В результате получилась среда исполнения ПЛК с поддержкой:
Конфигурация OpenSCADA запускается в режиме демона в локали "en_US.UTF-8" (ещё доступны локали "ru_RU.UTF-8" и "uk_UA.UTF-8") с использованием локальной БД SQLite, предоставляя по умолчанию сетевые сервисы:
В этом разделе рассмотрим детали дерева ОС прошивки, скрипт инициализации "rc.sysinit.plc" и скрипт подготовки дерева ОС прошивки.
Для построения прошивки ПЛК использовался следующий перечень пакетов:
Перечень модулей ядра Linux, стадии предварительной инициализации, с целью уменьшения размера образа инициализации был уменьшен до списка:
В скрипте подготовки дерева были добавлены функции:
Скрипт инициализации (rc.sysinit.plc) был наделён функциями:
В результате этих мероприятий таблица монтирования конечного дерева ПЛК приняла вид:
Один из вариантов прошивки собирается с графическим интерфейсом, который, однако, нужно настроить для получения автоматического запуска со средой визуализации OpenSCADA. Кроме того, нужно отметить, что прошивка с графическим интерфейсом не содержит всех драйверов и может потребоваться её пересборка под нужное оборудование.
После загрузки и входа в консоль нужно сконфигурировать XServer, автоматический графический вход, запуск графического окружения и автоматический запуск OpenSCADA из окружения IceWM:
Следующим этапом в создании прошивок стал переход на пакетную базу дистрибутива ALTLinux T6. В целом процедура создания прошивки была сохрана, с рядом изменений, но при этом был добавлен ряд улучшений и расширений:
Поскольку появилась возможность легко доустанавливать нужные пакеты прямо из репозитория то отпала необходимость в отдельной сборке прошивок с GUI. Т.е. можно легко доустановить нужный оконный менеджер (WM) или окружение рабочего стола с необходимыми драйверами, чем создавать отдельную прошивку с ограниченным перечнем драйверов.
Скрипт "startup-plc" оказался ненужен в новых прошивках поскольку перемонтирование на запись корневой ФС "root" осуществляется ранее, на стадии первичной инициализации. Скрипт "profiles/plс/image-scripts.d/01system" переименован в "profiles/plс/image-scripts.d/init1-PLC", несколько изменён и расширен. Перечень пакетов прошивки остался в "profiles/pkg/lists/plс.in" и несколько изменён.
Для получения ряда специфических пакетов нужно подключить репозиторий "ALTLinux T6" от проекта OpenSCADA:
rpm ftp://ftp.oscada.org/ALTLinux/t6 new roman
Процедура создания прошивки из шаблона фактически не изменилась:
# Создание скрипта конфигурации "configure"
$ ./autoconf
# Конфигурация сборщика для генерации образов дисков. Ключ "--with-imagetype" можно установить в "iso", или опустить,
# для создания комбинированного ISO-образа
$ ./configure --with-distro=kdesktop --with-branding=altlinux-kdesktop --with-version=6.0 --with-language=en_US --with-imagetype=flash
# Сборка образа
$ make plc.cd
Содержимое выходной директории с образом и установка прошивки на файловую систему FAT и EXT2/3/4 отличается только переименованием файла архива ФС с "plc" в "live". Установка ISO-образа на USB-flash, HDD, SSD выполняется командой dd:
$ dd if=LP8x81-ALTLinuxT6-OpenSCADA_0.8.0.6-i586-plc.iso of=/dev/sd{x} bs=4096
Вместо файла "work" нужно создать раздел EXT3 с меткой "alt-live-storage", если это не ISO-образ. Создавать новый раздел можно с помощью fdisk, если FAT раздел был создан не на всём доступном пространстве диска, или с помощью parted, где раздел FAT можно уменьшить. За деталями создания раздела отошлём к документации на fdisk или parted.
Конфигурация файлов "syslinux/syslinux.cfg" и "extlinux/extlinux.conf" не изменилась, с оглядкой на смену имени архива ФС с "plc" на "live".
В результате получаем прошивку размером от обеспечивающую:
Для построения прошивки ПЛК использовался следующий перечень пакетов:
Перечень модулей ядра Linux, стадии предварительной инициализации, был несколько изменён и составил:
Cкрипт подготовки дерева "profiles/plс/image-scripts.d/init1-PLC" выполняет функции:
Для ряда задач ПЛК важным, часто и критическим, критерием окружения является его уровень обеспечения реального времени (RealTime), т.е. возможность работы задач согласно приоритетам реального времени и обеспечение реакции на события согласно этим приоритетам.
Ядро Linux само по себе предоставляет POSIX политики планирования в реальном времени "SCHED_FIFO" и "SCHED_RR" с диапазоном приоритетов (0...100). Однако важный критерий "Частота таймера и время реакции на него" до версий ядер Linux 2.6.24 были очень низки, по меркам систем реального времени. В современных ядрах Linux (> 2.6.24) обеспечена поддержка таймеров высокого разрешения (HPET), что уменьшило время реакции на таймер до уровня 100 микросекунд, однако стабильность этого времени реакции не обеспечена. Для обеспечения стабильности реакции на таймер на уровне 60 микросекунд, а также ряда других критериев реального времени, на данный момент, нужно ядро собирать с одним из расширений реального времени.
В дистрибутивах ALTLinux замечено ядро 2.6.29-rt-up, которое собрано с расширением реального времени XENOMAI. В других дистрибутивах, например OpenSuSE замечены даже продукты с такими расширениями.
На данный момент более высокий уровень реального времени обеспечивает расширение The Real Time Preempt Patch, при включении полной поддержки реального = CONFIG_PREEMPT_RT, процесс сборки и результаты работы Linux ядер с которым будут отслеживаться в этом разделе.
Для тестирования уровня реального времени тех или иных ядер будем пользоваться утилитой "Cyclictest", типовая строка вызова и аргументы будут такимим: "$ cyclictest -t1 -c1 -p 80 -n -i 200 -l 100000". Где:
Пара измерений для ядер Linux общего назначения:
Данное ядро содержится в дистрибутиве ALTLinux 5.1, а также перенесено в локальный репозиторий проекта OpenSCADA, для ALTLinux T6. Это ядро собрано с расширением XENOMAI и AUFS, что позволяет использовать его в прошивках с упакованной КФС, что и сделано для ПЛК LP-8x81.
Результаты тестов этого ядра:
Как видно из результатов теста, патч XENOMAI не обеспечивает достойного уровня реального времени при использовании стандартных механизмов планирования реального времени POSIX, в то время как ядра версии 3 даже без наличия особый расширений реального времени обеспечивают заметно лучший результат.
Необходимость сборки именно этого ядра с патчем/параметром CONFIG_PREEMPT_RT стоит по причине наличия ряда бинарных модулей от ICP_DAS, для "LP8x81". Также стоит вопрос сборки ядра 2.6.33 по той-же причине, но для "LP8x81 Atom". Предварительные сборки ядер 2.6.29 и 2.6.33 выявили ряд проблем, которые будут тут описаны. Рассматривается также вариант сборки современного ядра с CONFIG_PREEMPT_RT, а затем запрос на сборку бинарных модулей у "ICP DAS".
Процесс сборки и тестирования:
Полученное ядро, переименовано в "kernel-image-rt1-up-2.6.29.alt1", можно использовать для PLC с HPET или таймером высокого разрешения, а также в "LP-8x81" и "LP-8x81 Atom"!
Сборка ядра версии 2.6.33 нужна для контроллеров фирмы "ICP DAS" LP-8x81 и LP-8x81 Atom по причине наличия именно для него, с патчем CONFIG_PREEMPT_RT, бинарных драйверов "ICP DAS", для LP-8x81 Atom.
Результаты тестов этого ядра:
Процесс сборки и тестирования:
Платы от "Diamond Systems" стали первыми на который тестировалась и стабилизировалась OpenSCADA. Первой платой стал одноплатный компьютер ATH400 формфактора PC/104, представлена на рисунке ниже. На этом компьютере окружение ОС, по началу, устанавливалось традиционным способом, а затем согласно изложенной выше концепции создания прошивки.
Аппаратные характеристики платы:
Центральный процессор: | VIA Eden 400-660MHz |
Оперативная память: | 128MB, запаяно на плату |
Постоянная память: | IDE (44) порт с UDMA-33 |
Видео подсистема: | S3 Savage 4 Chipset с расширенным 3D/2D видео; поддерживаются плоские панели, CRT и LCD |
Аудио подсистема: | присутствует |
Интерфейсы/порты: | 10/100Mbps Ethernet; 4 RS-232 последовательных порта; 4 USB 1.1 порта; PS/2 клавиатура и мышь |
Источник питания: | +5VDC ±10% @ 2A |
Рабочие условия: | -40 ... +85°C |
DAQ: | 16AI (16 бит, 100 кГц), 4AO, 24DIO, 2CNTR |
Первой задачей этой платы и OpenSCADA была реализация функции высокочастотного (10 КГц * 8 каналов) архиватора сигналов газового компрессора для изучения явления помпажа на Анастасиевской ГЛКС.
Второй задачей стал прототип ПЛК узлов электроподстанций. Уже для этой задачи прошивка собиралась на основе новой пакетной базы. В рамках этой задачи модуль опроса данных плат "Diamon Boards" был унифицирован для поддержки всех плат производителя (в планах унификация/восстановление сбора через FIFO).
Второй платой стала плата УСО DMM32-AT, представлена на рисунке ниже. Плата использовалась для создание макетов и эмуляторов поля технологического ПО. Плата имеет характеристики:
Источник питания: | +5VDC ±10% @ 200mA |
Рабочие условия: | -40 to +85°C |
DAQ: | 32AI (16 бит, 200 кГц), 4AO, 24DIO, 2CNTR |
Исследование шумовых свойств высокоимпедансных входов плат от Diamond Systems в различных условиях сведено в таблице ниже:
Условия | Внешний БП: Уровень шума, мВ [Гц] | Внутренний БП: Уровень шума, мВ [Гц] | Примечания |
(10 кГц, ±0.625 В, 20 мкс), Заземлены-32 | 0.08 [-] | ||
(10 кГц, ±5 В, 20 мкс), Заземлены-32 | 0.5 [-] | 0.35 [-] | |
(10 кГц, ±5 В, 20 мкс), Заземлены-31, Нагрузка ∞ | 5 [50, 270] | 18 [50, 150] | |
(10 кГц, ±5 В, 20 мкс), Заземлены-31, Нагрузка 1мОм | 10 [50, 270] | ||
(10 кГц, ±5 В, 20 мкс), Заземлены-31, Нагрузка 100кОм | 7 [150, 50, 270] | 7 [-] | |
(10 кГц, ±5 В, 20 мкс), Заземлены-31, Нагрузка 10кОм | 4.5 [100] | 6 [-] | |
(10 кГц, ±5 В, 20 мкс), Заземлены-31, Нагрузка 1кОм | 0.9 [150] | 1 [-] | |
(10 кГц, ±5 В, 20 мкс), Заземлены-31, Нагрузка 100Ом | 0.5 [-] | 0.5 [-] |
MOPSlcdLX представляет собой одноплатный компьютер формфактора PC/104, представлен на рисунке ниже. Данный компьютер привлёк внимание по причине сравнительно небольшой цены, за счёт обычного диапазона эксплуатации и меньшего энергопотребления и как следствия меньшего нагрева.
Аппаратные характеристики платы:
Центральный процессор: | AMD LX800™ 500 MHz, безвентиляторный |
Оперативная память: | DDR-RAM-SODIMM сокет |
Постоянная память: | IDE (44) порт |
Видео подсистема: | встроенная графика с поддержкой вывода на плоские панели, CRT и LCD |
Аудио подсистема: | нет |
Интерфейсы/порты: | 10/100Mbps Ethernet (Intel® 82551ER); 2 RS-232 последовательных порта; 2x USB 2.0; PS/2 клавиатура и мышь, Floppy, LPT |
Источник питания: | +5VDC ±10% @ 1A |
Рабочие условия: | 0 ... 60°C |
Плата использовалась для опробования создания станций/панелей оператора с OpenSCADA, в подобном окружении. В последствии всплыл ряд проблем с этой платой:
На данный момент, на основе этой платы, готовится "Программный осциллограф", для чего на неё успешно загружена современная прошивка с ядром "std-def" и доустановлена плата DMM-32X-AT, о которой выше.
VSX104 представляет собой одноплатный компьютер формфактора PC/104, представлен на рисунке ниже. Данный компьютер привлёк внимание по причине небольшой цены и низкого энергопотребления (< 2Вт) и как следствия меньшего нагрева. Однако в виду использования на ней процессора "Vortex86SX-300 МГц" требуется особый подход к формированию окружения ОС, поскольку использован набор инструкций i486 и отсутствует математический сопроцессор.
Аппаратные характеристики платы:
Центральный процессор: | DM&P SoC Vortex86SX-300 МГц |
Оперативная память: | 128 МБ DDR2 RAM распаяно на плате |
Постоянная память: | слот CompactFlash Type I, microSD и 2 порта EIDE (Ultra DMA 100) |
Видео подсистема: | нет |
Аудио подсистема: | нет |
Интерфейсы/порты: | 10/100Mbps Ethernet; 4 RS-232 последовательных порта; 2x USB 2.0; PS/2 клавиатура и мышь, LPT, Резервирование, SPI |
Источник питания: | +5VDC ±10% @ 370mA |
Рабочие условия: | -40 ... 85°C |
DAQ: | 1 порт 16-битного GPIO |
На данный момент решений на этой плате нет, однако планируется собрать для неё окружение, возможно для автономной системы учёта.
VDX-6354D представляет собой одноплатный компьютер формфактора PC/104, представлен на рисунке ниже. Данный компьютер построен на процессоре "DM&P SoC CPU Vortex86DX- 800MHz", который производительнее "Vortex86SX-300 МГц" в предыдущем разделе, однако и энергопотребление этой платы уже не 2, а 4 Вата больше на странице проекта
Промышленные контроллеры семейства LP-8x81 фирмы ICP DAS являются первым продуктом из серии LinPAC, который построен на x86 совместимом процессоре, предыдущие контроллеры этого семейства основаны на процессоре семейства ARM. Кроме x86 процессора рассматриваемые контроллеры обладают значительными ресурсами оперативной памяти и дискового пространства. Всё это позволило рассматривать данные контроллеры как первого кандидата из продукции ICP DAS для адаптации OpenSCADA в качестве среды исполнения больше на странице проекта
Фирма Avalue, совместно с её дистрибютером в России фирмой ElTech предоставляет широкий спектр панельных ПК, которые могут использоваться начиная с обычных офисных моноблоков и заканчивая промышленными сенсорными панелями в фронтальном исполнении класса IP65. В виду использования стандартного оборудование запуск и работа OpenSCADA на них не вызывает проблем больше на странице проекта
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.tgz, а последняя сборка прошивки ALTLinux_6-OpenSCADA_0.8.1-TDE_3.5.13.1-i586-flash.tar.
Фирма Advantech выпускает широкий спектр оборудования для автоматизации, начиная от панельных ПК и заканчивая модулями сбора данных ADAM.
В рамках проекта системы сбора и визуализации котла №1 цеха ТЭЦ в руки попал панельный ПК PPC-L126 и индустриальный ПК на шасси IPC-6608, с процессорной платой PCA-6753.
Индустриальный ПК "PCA-6753" имеет следующие характеристики:
Центральный процессор: | Мало-потребляющий NS GXm-200 МГц (безвентиляторный) |
Оперативная память: | 64 МБ DIMM SDRAM |
Постоянная память: | SSD DiskOnChip® 2000, IDE (40 pin, UDMA 33, 256МБ IDE Flash) |
Видео подсистема: | CX5530 VGA/LCD и 18-бит LCD TFT |
Аудио подсистема: | нет |
Интерфейсы/порты: | 10/100Mbps Ethernet (RTL-8139); RS-232 + RS-232/422/485 последовательные порты; 2 x USB 1.1 (хост), IR порт; LPT; Floppy |
Источник питания: | +5VDC ±10% @ 1.54A |
Рабочие условия: | 0 ... 60°C |
Данный контроллер является уже достаточно старым и низкопроизводительным для современного программного обеспечения однако для задач среды исполнения ПЛК он ещё годится и на него была успешно загружена прошивка на основе пакетной базы ALTLinux 5.1. При этом о реальном времени речь не велась, в виду отсутствия таймера высокого разрешения (HPET).
Панельный ПК "PPC-L126" имеет следующие характеристики:
Центральный процессор: | VIA Eden 667 MHz |
Оперативная память: | Два 168-pin DIMM сокет (128 МБ) |
Постоянная память: | CompactFlash типа I/II, IDE (44 pin, UDMA 33/66/100, 10 ГБ) |
Видео подсистема: | VIA Savage4 2D/3D/Video, сенсорный экран 12.1", фронтальная панель: IP65/NEMA4 |
Аудио подсистема: | AC97 Ver. 2.0 |
Интерфейсы/порты: | 10/100Mbps Ethernet (RTL-8139); 3 x RS-232 + RS-232/422/485 последовательные порты; 2 x USB 1.1 (хост); PS/2 клавиатура и мышь; LPT |
Источник питания: | 19VDC @ 3.3A |
Рабочие условия: | 0 ... 40°C |
Панельный ПК также обладает малыми ресурсами для запуска современного графического окружения, поэтому для установки на него использовался дистрибутив "ALTLinux T6" с рядом мероприятий по оптимизации:
Приведенные мероприятия позволили втиснуться в 128 МБ оперативной памяти и получить при этом развитое и производительное графическое окружений. Для настройки сенсорного экрана ELO использовался пакет с драйвером "elographics" — "xorg-drv-elographics". В конфигурационный файл "xorg.conf" добавлена секция: