Прошивка и создание программного окружения ПЛК архитектуры x86
Архитектура x86 сравнительно недавно стала позиционироваться как встраиваемая и реальные решения на её основе, в этой области, редко обладают ресурсами (< i386), недостаточными для исполнения полноценной ОС и развитого окружения. По этой причине, а также по причине большей унификации архитектуры, индивидуальная сборка ядра Linux и базовых программ окружения ОС осуществляется достаточно редко, что обычно характерно для архитектуры ARM. Более интересным и практичным для x86, для широкого спектра оборудования, является сборка прошивок со сжатой корневой файловой системой (КФС). Однако по прежнему возможна индивидуальная сборка прошивок с помощью систем сборок вроде "BuildRoot" или "PTXDist", ниже. Также возможна и прямая установка дистрибутива Linux.
Инструменты и сборка рабочих окружений прошивок со сжатой КФС, на основе дистрибутива ALTLinux
Перед реализацией прошивки ПЛК, данного раздела, ставились следующие требования:
- Компактность. В связи с прямой зависимостью цены на промышленные флеш-диски от их объёма, а также реальным отсутствием необходимости частого обновления, образ прошивки нужно упаковывать, достигнув уровня компактности 8-50Мб на среду исполнения ПЛК в окружении полноценной ОС.
- Унифицированный исходный репозиторий. Поскольку прошивка не является чем-то немодифицируемым, нерасширяемым и окончательно фиксированным, то в её основе должен лежать реальный, развивающийся-сопровождающийся, репозиторий пакетов ОС. Это позволит продолжительное время формировать обновления и расширения, не поддерживая при этом опосредованный репозиторий.
- Отлаженная и простая процедура сборки. Учитывая тот факт, что конфигурация прошивки может некоторое время стабилизироваться, кроме того в компонентах ОС и OpenSCADA будут обнаруживаться и устраняться ошибки, то процедура сборки прошивки не должна быть обременительна, а напротив — легко адаптируемой.
- Прозрачная реализация режима записи в дереве ОС. Хотя прошивка и подразумевает создание упакованного немодифицируемого образа прошивки, специфика работы среды исполнения ПЛК подразумевает модификацию БД и ведение архивов. Кроме того, наличие возможности коррекции исходной конфигурации является важным требованием.
- Надёжность и устойчивость к внезапным выключениям. Спецификой эксплуатации ПЛК является, как правило, отсутствие возможности корректного выключения, а также практическая реальность ситуаций мгновенного и непредсказуемого пропадания питания. ПЛК в таких ситуациях должен сохранять работоспособность, в смысле содержать журналлируемую ФС и обеспечивать её проверку и автоматическое устранение ошибок.
- Условное разделение конфигурации ПЛК на два типа:
- ПЛК без локального дисплея, возможно с простым текстовым табло.
- Touch-панели c функцией ПЛК.
Учитывая вышеприведенные требования для создания прошивки был выбран инструмент создания дистрибутивов
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 openscada main
Сборка
В первую очередь создавалась конфигурация ПЛК без локального дисплея, в виду наличия оборудования такого типа и отсутствия оборудования для 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 целевого диска.
Это ненадёжное решение, поскольку корневая файловая система целевого диска становится нестатичной, а проверять её нет возможности, ввиду раннего монтирования в "ro" и потенциальной ненадёжности проверки ФС, смонтированной в "ro", а так же невозможности перемонтировать как EXT3.
Следующим этапом является конфигурация и инициализация загрузчика. Для конфигурации загрузчика нужно отредактировать файл "syslinux/syslinux.cfg" или "extlinux/extlinux.conf" следующим образом:
В случае выбора идентификации загружаемого раздела по индивидуальному идентификатору, узнать его для нашего раздела можно командой:
blkid.
В случае с меткой эта задача чуть сложнее поскольку делается она для разных файловых систем по разному.
Для файловых систем EXT2/3 это делается утилитой
e2label. Например, так:
$ e2label /dev/sdb1 PLС
Для файловой системы FAT это делается набором утилит из комплекта
mtools или с помощью
parted, что проще. С помощью
mtools это делается следующим образом:
Теперь можем инициализировать загрузчик:
На этом с загрузкой и инициализацией прошивки всё. Если полученный диск не грузится то:
- Отсутствует флаг "Загрузочный" на рабочем разделе.
- Некорректен или повреждён "MBR". Проверить и восстановить его можно с помощью утилиты "ms-sys": $ ms-sys -s /dev/sdb.
- Разделы носителя созданы помощью parted. Данная утилита странным образом выравнивает разделы, что не позволяет загружаться из них, на USB-flash. Нужно носитель переразметить с помощью fdisk.
- Загрузка также может не работать на старых системах, которые не умеют грузится с USB-HDD. Для них нужно будет адаптировать геометрию диска, подстраивая под USB-ZIP или что нибудь подобное.
Результат
В результате получаем прошивку размером от 30 до 100Мб, удовлетворяющую фактически всем заявленным требованиям и обеспечивающую:
- Загрузку в течении 27 секунд от включения контроллера и включая инициализацию BIOS.
- Проверку и восстановление рабочей файловой системы в файле "work".
- Хранение пользовательских данных и изменений прошивки в файле "work".
- Автоматическую настройку сети по DHCP (или 192.168.0.1).
- Доступ к контроллеру по SSH и удобный интерфейс работы, включая mc. Пароли по умолчанию (root:123456; admin:123456).
- Синхронизацию времени посредством NTP.
- Исполнение OpenSCADA с доступными сетевыми интерфейсами:
- конфигурация и среда исполнения через WEB (порты: 10002 и 10004);
- интерфейс управления OpenSCADA (порт 10005).
OpenSCADA
В качестве среды исполнения ПЛК используем систему OpenSCADA. Для данного случая возьмём сборку с отдельными пакетами на каждый модуль и укажем для установки виртуальный пакет "openscada-plc", который содержит зависимости на все пакеты OpenSCADA, обычно используемые для данной конфигурации. Пакет графической библиотеки GD2 был пересобран без поддержки формата графического файла "xpm" и получил название "libgd2-noxpm". Пересборка делалось для того чтобы исключить тяжелые зависимости на библиотеки графического интерфейса XOrg.
В результате получилась среда исполнения ПЛК с поддержкой:
- БД:
- Транспорты:
- Транспортные протоколы:
- Источник данных:
- Архивирование:
- Пользовательский интерфейс:
Конфигурация OpenSCADA запускается в режиме демона, в локали "en_US.UTF-8" (ещё доступны локали "ru_RU.UTF-8" и "uk_UA.UTF-8"), с использованием локальной БД SQLite, предоставляя по умолчанию сетевые сервисы:
- конфигурация и среда исполнения через Web (порты: 10002 и 10004);
- интерфейс управления OpenSCADA (порт: 10005).
Детали реализации
В этом разделе рассмотрим детали дерева ОС прошивки, скрипт инициализации "rc.sysinit.plc" и скрипт подготовки дерева ОС прошивки.
Для построения прошивки ПЛК использовался следующий перечень пакетов:
Перечень модулей ядра Linux, стадии предварительной инициализации, с целью уменьшения размера образа инициализации был уменьшен до списка:
В скрипте подготовки дерева были добавлены функции:
- смена наименования дистрибутива;
- подмена скрипта инициализации на "inittab.plc";
- создание пользователя-администратора "admin" и установка паролей по умолчанию в "123456" для пользователей "root" и "admin";
- инициализация "/etc/fstab";
- установка локали в "en_US.UTF-8";
- конфигурация сети;
- установка часов и зоны в "/usr/share/zoneinfo/Europe/Kiev", для смены нужно заменить файл "/etc/localtime" в нужную зону;
- включение нужных сервисов;
- удаление: документации, страниц помощи и информации, иконок, RPM-БД и кеша APT;
- удаление ненужных локалей и переводов, оставлены: en_US, uk_UA и ru_RU;
- отбор только используемых модулей ядра и удаление всех остальных; по умолчанию отключен и может включаться для подготовки финальной прошивки под конкретное оборудование;
- удаление директории с ядром (/boot), в связи с выносом его в корень загрузочного раздела.
Скрипт инициализации (rc.sysinit.plc) был наделён функциями:
- перемонтирование корневого раздела в режим RW;
- проверка и подключение файловой системы (/image/root) рабочих данных пользователя (файл "work");
- отражение модифицируемых директорий дерева ПЛК (/etc, /var, /root, /home, /mnt и /lib) на файловую систему с рабочими данными пользователя (/image/root) посредством файловой системы "aufs" или "unionfs".
В результате этих мероприятий таблица монтирования конечного дерева ПЛК приняла вид:
Настройка графического интерфейса
Один из вариантов прошивки собирается с графическим интерфейсом, который, однако, нужно настроить для получения автоматического запуска со средой визуализации OpenSCADA. Кроме того нужно отметить, что прошивка с графическим интерфейсом не содержит всех драйверов и может потребоваться её пересборка под нужное оборудование.
После загрузки и входа в консоль нужно сконфигурировать XServer, автоматический графический вход, запуск графического окружения и автоматический запуск OpenSCADA из окружения IceWM:
Пакетная база ALTLinux T6
Следующим этапом в создании прошивок стал переход на пакетную базу дистрибутива
ALTLinux T6. В целом процедура создания прошивки была сохрана, с рядом изменений, но при этом были добавлены некоторые улучшения и расширения:
- Использована новая функция "propagator" (система предварительной инициализации оборудования, поиска и загрузки образов ФС) поиска/создания раздела EXT2/3/4 с меткой "alt-live-storage" для формирования модифицирующегося корневого раздела "root". Эта функция предоставляет полноценную возможность установки дополнительных пакетов прямо из репозитория дистрибутива, а также обновления упакованных в прошивку пакетов, исключая ядро и ряд системных сервисов.
- Добавлена возможность создания прошивки в виде комбинированного ISO-образа, который можно (кроме записи на CD/DVD) прямо, с помощью утилиты dd, записать на USB-flash, HDD, SSD и получить рабочее окружение с разделом "alt-live-storage", отражения "root", на свободное место носителя.
- Для возможности сборки новых прошивок под "LP-8x81" от ICP DAS был осуществлён перенос ядра реального времени "rt-up" из репозитория "ALTLinux 5.1" в "ALTLinux T6". Ядро "rt-up" успешно адаптировано и получена рабочая прошивка на пакетной базе "T6" для "LP-8x81".
Поскольку появилась возможность легко доустанавливать нужные пакеты прямо из репозитория то отпала необходимость в отдельной сборке прошивок с 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 openscada main
Процедура создания прошивки из шаблона фактически не изменилась:
# Создание скрипта конфигурации "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".
В результате получаем прошивку размером от обеспечивающую:
- Загрузку в течении 25 секунд от включения контроллера, включая инициализацию BIOS.
- Проверку и восстановление журнала рабочей файловой системы "root" в "alt-live-storage".
- Хранение пользовательских данных и изменений прошивки, а также новых и обновленных пакетов программ, в разделе "alt-live-storage".
- Автоматическую настройку сети по DHCP (или 192.168.0.1), для первого интерфейса.
- Доступ к контроллеру по SSH и удобный интерфейс работы, включая mc. Пароли отсутствуют, а пользователь "root" имеет доступ для подключения по SSH.
- Синхронизацию времени посредством NTP.
- Исполнение OpenSCADA с доступом посредством сетевых интерфейсов:
- конфигурация и среда исполнения через Web (порты: 10002 и 10004);
- интерфейс управления OpenSCADA (порт 10005).
Для построения прошивки ПЛК использовался следующий перечень пакетов:
Перечень модулей ядра Linux, стадии предварительной инициализации, был несколько изменён и составил:
Скрипт подготовки дерева "profiles/plс/image-scripts.d/init1-PLC" выполняет функции:
- смена наименования дистрибутива;
- открытие входа от "root" через SSH, без пароля;
- установка локали в "en_US.UTF-8";
- конфигурация сети для использования DHCP или установки "192.168.0.1" для первого интерфейса;
- установка часов и зоны в "/usr/share/zoneinfo/Europe/Kiev", для смены нужно заменить файл "/etc/localtime" в нужную зону;
- включение нужных сервисов;
- удаление: документации, страниц помощи и информации, иконок;
- удаление ненужных локалей и переводов, оставлены en_US, uk_UA и ru_RU;
- отбор только используемых модулей ядра и удаление всех остальных; по умолчанию отключен и может включаться для подготовки финальной прошивки под конкретное оборудование; унифицирован для указания модулей по группам подсистем ядра и специфичным для оборудования;
- удаление директории с ядром (/boot), в связи с выносом его в корень загрузочного раздела.
Ядро реального времени
Для ряда задач ПЛК важным, часто и критическим, критерием окружения является его уровень обеспечения реального времени (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". Где:
- -t1 — один поток тестирования;
- -с1 — использовать часы реального времени CLOCK_REALTIME;
- -p 80 — приоритет потока тестирования;
- -n — использовать функцию "clock_nanosleep";
- -i 200 — интервал вызова потока тестирования: 200 мкс, как близкий к среденему значению 50 мкс;
- -l 100000 — количество итераций тестирования.
Пара измерений для ядер Linux общего назначения:
- Стандартное ядро дистрибутива ALTLinux T6 (3.0.79-std-def, LP8781):
- нагрузка 0%: Avg: 37 us; Max: 152 us
- нагрузка 100%: Avg: 37 us; Max: 191 us
- Ядро дистрибутива ALTLinux T6 (3.4.45-un-def, LP8781):
- нагрузка 0%: Avg: 53 us; Max: 217 us
- нагрузка 100%: Avg: 40 us; Max: 183 us
kernel-image-rt-up-2.6.29
Данное ядро содержится в дистрибутиве ALTLinux 5.1, а также перенесено в локальный репозиторий проекта OpenSCADA, для ALTLinux T6. Это ядро собрано с расширением
XENOMAI и
AUFS, что позволяет использовать его в прошивках с упакованной КФС, что и сделано для ПЛК
LP-8x81.
Результаты тестов этого ядра:
- LP8781 (XENOMAI)
- нагрузка 0%: Avg: 26 us; Max: 136 us (замечены сбросы до 1 мс, похоже из-за нестабильности источника часов "tsc", причем "acpi_pm" тут ещё хуже)
- нагрузка 100%: Avg: 24 us; Max: 3655 us
- LP8781 (CONFIG_PREEMPT_NONE)
- нагрузка 0%: Avg: 29 us; Max: 71 us
- нагрузка 100%: Avg: 28 us; Max: 117 us (замечено соскальзывание на непрерывное нарастание)
- LP8781 (CONFIG_PREEMPT_RT)
- нагрузка 0%: Avg: 29 us; Max: 64 us
- нагрузка 100%: Avg: 29 us; Max: 82 us
- AMD Turion Neo X2 L625 (CONFIG_PREEMPT_RT)
- нагрузка 0%: Avg: 57 us; Max: 74 us
- нагрузка 100%: Avg: 57 us; Max: 78 us
Как видно из результатов теста, патч 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".
Процесс сборки и тестирования:
- Патчи CONFIG_PREEMPT_RT и AUFS времён 2.6.29 конфликтуют на функции "debug_mutex_set_owner()", в CONFIG_PREEMPT_RT удалена — заменена на "mutex_set_owner()".
- При сборке выявлен ряд проблем с "# typedef void irqreturn_t;" — заменено на "#include <linux/irqreturn.h>".
- Первый запуск с CONFIG_PREEMPT_RT, но без AUFS, прошёл успешно — результат выше.
- Запуск с AUFS выявил проблему выделения памяти AUFS в "aufs_mmap()" — рабочий код AUFS взят целиком из предыдущей сборки "rt-up-2.6.29.alt2".
- Запуск с AUFS выявил проблему зависание на корне ФС в AUFS, похоже из-за возможности зацикливания/блокирования RT-задачи — установлено CONFIG_PREEMPT_NONE, на LP8781 и "AMD Turion" проблем не выявлено (возможно эта проблема из-за отсутствия HPET на PLX8).
- На первый взгляд ядро работает нормально, но замечено соскальзывание на непрерывное нарастание времени запаздывания.
- Выполнена адаптация ядра для бинарной совместимости с модулями "slot" и "icp" от ICP_DAS. Модуль "8250_linpac" падает при загрузке, а "icpdas_8250" имеет множество неразрешённых символов — нужно эти модули пересобирать или пробовать интерфейсы > COM2 инициализировать через setserial — модули пересобраны, спасибо Golden Wang (тех. поддержка ICPDAS).
- Новое ядро установлено под высокую нагрузку, конфигурацией проекта САУ шаровых барабанных мельниц:
- Сбой сети с драйвером "via_rhine", после 4 суток работы — сбой ожидаем, собран драйвер "rhinefet", испытание продолжено.
- На драйвере "rhinefet" система под нагрузкой проработала три недели. Однако замечено, что прерывание 11, на котором висит почти всё стандартное оборудование (USB, Ethernet и может ещё чего), отключается и сеть работает в режиме "Pool", что медленнее. Возможно отключение этого прерывания происходит и с "via_rhine", а он не может работать в режиме "Pool", почему и пакеты в/из сети не ходят. Проблема связана со сбоем и генераций необработанных прерываний одним из оборудования на прерывании 11.
- Исправлено исключением отключения прерываний с помощью параметра ядра Linux "noirqdebug".
- Адаптация успешно завершена и прошивки на основе этого ядра готовы к промышленной эксплуатации!
- 01.03.2015: Вместо функции EnableWDT() использовано EnableSysWDT(), в виду ограничения до 30 секунд и циклических перегрузок если не загружается за 30 секунд (до трёх перегрузок).
- 17.03.2015: При участии службы поддержки ICP_DAS исправлена проблема драйвера последовательных интерфейсов более COM2, приводящая к "замораживанию" ядра Linux (похоже в виду блокирования прерываний) после закрытия одного порта и активности на хотя-бы одном другом.
- 29.07.2015: Обнаружена ещё одна проблема с сетью с похожими симптомами отключения прерывания 11, но: прерывание 11 не отключается и все остальные устройства на нём работают, воспроизводится только на конфигурациях с использованием обоих интерфейсов сети, причём возможно "затормаживание" только одного из них. Проблема решается только перегрузкой "заторможенного" сетевого интерфейса, командой: ifdown eth0; ifup eth0. Для обнаружения и перезапуска рекомендуется на уровне OpenSCADA добавлять контроль трафика и непосредственную перегрузку интерфейса по его отсутствию.
- 21.11.2016: Драйвер "rhinefet" адаптирован на предмет предотвращения блокирования прерываний и выключения вектора прерываний поскольку режим SHARE используется. На данный момент драйвер работает однако 19.12.2016 также было замечено замедление сети с двумя этими адаптерами после более двух недель работы.
Т.е. это оборудование сломано для работы двух адаптеров и в этом ПЛК вы можете использовать только один, для стабильной работы!
Полученное ядро, переименовано в "kernel-image-rt1-up-2.6.29.alt1", можно использовать для PLC с HPET или таймером высокого разрешения, а также в "LP-8x81" и "LP-8x81 Atom" (только одно ядро)!
kernel-image-rt-up-2.6.33
Сборка ядра версии 2.6.33 нужна для контроллеров фирмы "ICP DAS" LP-8x81 и LP-8x81 Atom по причине наличия именно для него, с патчем CONFIG_PREEMPT_RT, бинарных драйверов "ICP DAS", для LP-8x81 Atom.
Результаты тестов этого ядра:
- AMD Turion Neo X2 L625
- нагрузка 0%: Avg: 65 us; Max: 86 us
- нагрузка 100%: Avg: 57 us; Max: 72 us
- LP8781
- нагрузка 0%: Avg: 37 us; Max: 88 us
- нагрузка 100%: Avg: 34 us; Max: 108 us
- LP8781-Atom (оригинальная сборка ядра 2.6.33.7-rt29-ICPDAS)
- нагрузка 0%: Avg: 17 us; Max: 50 us
- нагрузка 100%: Avg: 12 us; Max: 32 us
Процесс сборки и тестирования:
- Сборка ядра из исходников "ICP DAS" (2.6.33.7) и конфигурацией, наследованной с ядра 2.6.29 (исходные тексты содержат подозрительно много *.rej файлов, а также "staging/comedi" несобираемый) — грузится и в целом работает; модули "ipic" и "slot" грузятся; модуль "8250_linpac" падает в функции "platform_device_add"; ряд программ зависает на операциях с ФС, с сообщением: "task openscada:2153 blocked for more than 120 seconds".
- Замена AUFS на версию из 2.6.29-rt1 — падает в rtmutex прямо на загрузке; замена на официальную из git показала тот-же результат, исходно использован патч "aufs+sqfs4lzma-2.6.33.patch" от DLink.
- Сборка оригинального ядра с патчами CONFIG_PREEMPT и AUFS — проблема снова с AUFS, но теперь он "/sbin/mingetty" в конце найти не может.
- Сборка оригинального 2.6.33.9 ядра с патчами CONFIG_PREEMPT и AUFS — проблемы те-же.
- Сборка из исходников "ICP DAS" (2.6.33.7) для SMP — модуль OpenSCADA DAQ.JavaLikeCalc падает по непонятной причине.
- Сборка оригинального ядра с патчами CONFIG_PREEMPT и AUFS для SMP — та-же проблема, что и без SMP, разве только не сразу, а на примерно пятом потоке.
На данный момент ядро 2.6.33 в связке с CONFIG_PREEMPT_RT и AUFS нерабочее. Следовательно если нужна будет работа на "LP-8x81 Atom" то рекомендуется использовать исходное Linux окружение, собрав и установив OpenSCADA туда.
Платы от "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" был унифицирован для поддержки всех плат производителя.
Второй платой стала плата УСО
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, в подобном окружении. В последствии всплыл ряд проблем с этой платой:
- Отсутствие батарейки для часов и как следствие необходимость установки времени при каждой загрузке или установка внешней батарейки. При этом настройки BIOS хранятся не в CMOS, а во FLASH, что вроде и хорошо, но если учесть, что сбросить настройки BIOS нет возможности то получается очень плохо.
- Проблема в схеме прерываний, которая приводит к блокированию всех или многих смежных прерывания, в случае загрузки модуля "geode_aes".
- В какой-то момент отгорела видеокарта или видеовыход, а настройки BIOS во FLASH не позволяют их вернуть, для исправления вероятного отключения видео в BIOS. Также BIOS не поддерживает выдачу своего интерфейса на COM-порт. Можно попробовать с CRT, когда появится.
- Отсутствует счётчик высокого разрешения (HPET), что странно и делает эту плату непригодной для систем реального времени поскольку обычным счётчиком можно получить задержку около 4мс.
На данный момент, на основе этой платы, готовится "Программный осциллограф", для чего на неё успешно загружена современная прошивка с ядром "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 |
На данный момент решений на этой плате нет, однако планируется собрать для неё окружение, возможно для автономной системы учёта.
Перенаправление интерфейса BIOS на COM-порт можно принудительно включить заземлением 10 пина COM-порта.
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" с рядом мероприятий по оптимизации:
- производительность носителя данных — в качестве хранилища данных использован IDE жёсткого диска, который обеспечивает 10 МБ/c, что больше чем на доступных CompactFlash;
- отключение всех лишних сервисов;
- использование окружения рабочего стола TDE, как менее ресурсоёмкого, но более развитого; в резерве доступен IceWM;
- сборка OpenSCADA без библиотек Phonon и WebKit, которые достаточно ресурсоёмки.
Приведенные мероприятия позволили втиснуться в 128 МБ оперативной памяти и получить при этом развитое и производительное графическое окружение. Для настройки сенсорного экрана ELO использовался пакет с драйвером "elographics" — "xorg-drv-elographics". В конфигурационный файл "xorg.conf" добавлена секция: