Широке розповсюдження у вбудованих рішеннях отримала архітектура ARM завдяки її порівняно високій продуктивності у поєднані із низьким енергоспоживанням та ціною. З метою виконання планового завдання забезпечення апаратної багатоплатформності систему OpenSCADA було адаптовано до збірки та роботи на обладнані ARM-архітектури. Так було виконано проекти збірка проекту OpenSCADA для мобільних пристроїв фірми Nokia (N800, N900, N950) та Збірка OpenSCADA та прошивки для ARM-контролерів фірми ICP DAS (LP-5141). Метою даного розділу є систематизація методик та відстеження проблем створення збірок OpenSCADA та прошивок програмного оточення в цілому для різного вбудованого обладнання архітектури ARM.
Особливістю ARM архітектури є відсутність обов'язкової апаратно-залежної програмної системи первинної ініціалізації та конфігурації обладнання, характерної для x86 архітектур — BIOS, а структура апаратної конфігурації зазвичай містить: центральний процесор (CPU), вбудовану оперативну та флеш-пам'ять, а також низку вбудованого обладнання на стандартних шинах системного рівня. При цьому флеш та оперативна пам'ять знаходяться у загальному адресному сегменті. Ініціалізація такої системи програмним оточенням здійснюється завантаженням виконуваного коду безпосередньо на вбудовану флеш-пам'ять.
Для роботи обчислювальних функцій OpenSCADA та і багатьох супутніх бібліотек та програм важлива продуктивність обчислень із плаваючою точкою. Особливістю процесорів архітектури ARM є простота ядра процесору та необов'язкова наявність розширень на зразок математичного сопроцесору. Як наслідок продуктивність на операціях з плаваючою точкою сильно залежить від конкретно взятого процесору, а також способу емуляції обчислень з плаваючою точкою, у випадку відсутності сопроцесору взагалі. На процесорах ARM-архітектури зустрічаються два формати роботи з плаваючою точкою: FPA та VFP. Формат FPA є застарілим та зустрічається у вигляді апаратної реалізації з ядрами ARM до родини StrongARM(ARMv4). Ядра ARM родини XScale(ARMv5TE) взагалі не комплектувалися математичним сопроцесором. А ядра ARM починаючи із родини ARM11(ARMv6) комплектуються математичним сопроцесором формату VFP. У той же час ARM процесори з архітектурою версії ARMv5 до цих пір широко розповсюджені, тобто питання продуктивності математичних обчислень для них зводяться до продуктивності емуляції формату FPA або VFP. У випадку із оточенням ОС Linux, емуляція FPA зазвичай здійснюється ядром Linux, шляхом обробки виключень процесору під час виклику FPA команд. Програмна емуляція у математичній бібліотеці за звичай зустрічається з форматом VFP, для чого потрібна перебудова всіх програм. При цьому емуляція FPA за посередництвом виключень гірше за продуктивністю програмної емуляції VFP майже на порядок. Порівняти продуктивність обчислень із плаваючою точкою на різних архітектурах, процесорах та способах емуляції можна у додатку 1.
Типове програмне оточення на основі ОС Linux, для обладнання на основі ARM, представляє із себе: Завантажувач UBoot, Ядро Linux та Кореневу Файлову Систему (КФС). Завантажувач UBoot вантажиться до нульового сектору флеш-пам'яті, а його налаштування зберігаються у першому. Із другого сектору завантажується код ядра, а безпосередньо після нього КФС. КФС зазвичай оформлюється у вигляді файлової системи JFFS2 або UbiFS, які оптимізовано для роботи на блокових пристроях — флеш пам'яті, з обмеженим ресурсом запису. Приклади розбивки блокового пристрою (флеш-пам'яті) для LP-5141 та TionPro270 наведено нижче:
Коренева файлова система містить типове UNIX-дерево з робочими програмами, бібліотеками та іншими файлами. Основою будь якої програми або бібліотеки є системні бібліотеки GLibC або UClibC. OpenSCADA адаптовано для збірки та роботи з "GLibC" версії >= 2.3. "UClibC", створена як полегшена версія "GLibC" для вбудованих систем, містить низку обмежень та до цих пір не реалізує або містить помилки у реалізації для низки функцій.
КФС та програмне оточення на основі Linux може постачатися разом із ARM-обладнанням та містити закриті бінарні бібліотеки, модулі ядра Linux та т.п. У такому випадку незалежна збірка та заміна первинного програмного оточення становиться непрактичною оскільки призводить до втрати первинної функціональності. Однак часто зустрічається ситуація постачання обладнання ARM без первинного програмного оточення або з оточенням, яке не містить закритого коду та яке може бути замінено. Прикладом першого випадку є контролер LP-5141 та схожі фірми "ICP DAS", які містять бінарну збірку бібліотеки API спеціалізованого обладнання (libi8k) та модулі ядра Linux для його ініціалізації. Прикладом другого випадку є одно-платний комп'ютер Тіон-Про270, створення програмного оточення та побудова OpenSCADA для архітектури ARM якого будемо розглядати нижче.
Сформувати Linux КФС можна на основі готових пакунків існуючого бінарного дистрибутива, пакунків вихідних текстів існуючого дистрибутиву, а також побудувати із оригінальних вихідних текстів за посередництвом ToolChain у одній із складальних систем.
Побудова програм або цілої КФС для архітектур відмінних від x86 та x86_64 зазвичай здійснюється за посередництвом кроскомпіляції із використанням утиліт (ToolChain) для збірки, лінковки та налаштування під цільову архітектуру ARM. Для автоматизації цього процесу створено низку інструментів збірки готових КФС.
Ця система збірки є частиною проекту створення альтернативної бібліотеки функцій мови "C" UClibC, тому в цілому націлена на побудову оточень із "UClibC", з відповідними обмеженнями. BuildRoot гарно показав себе у роботі на хостових системах різних версій та дозволяє без особливих проблем збирати програмні оточення на основі Linux.
Отримати архів BuildRoot потрібної версії можна за посиланням http://buildroot.uclibc.org/downloads. Далі його потрібно розпакувати у домашній директорії звичайного користувача та здійснити конфігурацію, налаштування та збірку:
У процесі збірки можуть виникнути проблеми наступного роду:
Універсальний інструмент збірки ядер, ToolChain та програмних оточень на основі Linux фірми "Pengutronix". PTXDist є потужним та гнучким інструментом однак старі його версії мають проблеми на сучасних хостових системах, що ускладнює завдання збірки програмних оточень для порівняно старих, але все ще розповсюджених, апаратних платформ. Наприклад, зараз (2012 рік) можна зустріти нове обладнання з процесорами ARM XScale, ARM9 (ARMv5) часів 2003 року. Однак новими версіями PTXDist непогано підтримуються старі платформи, про що можна дізнатися з таблиці підтримки за посиланням: http://www.pengutronix.de/oselas/toolchain/index_en.html.
Для збірки програмного оточення (КФС) за допомогою PTXDist потрібно:
Тепер детальніше, в командах:
Одно-платний комп'ютер "Тіон-Про270" представляє собою високо-інтегровану обчислювально-керуючу систему на базі процесору Marvell PXA270 із ARM ядром родини XScale від фірми ЗЕО. Цю плату було передано розробникам проекту OpenSCADA Олексієм Попковим з метою адаптації OpenSCADA.
Всі матеріали по збірці програмного оточення з OpenSCADA та готові збірки для плати Тіон-Про270 можна отримати за посиланням: ftp://ftp.oscada.org/OpenSCADA/PLC/TionPro270
Плата постачається виробником обладнання з передвстановленим програмним оточенням на основі Linux™ або Windows CE©. Крім того всі вихідні матеріали програмних оточень доступні на Wiki-ресурсі виробника.
У первинному вигляді плата потрапила до розробників з мінімальним програмним оточенням, для якого не було можливості зібрати OpenSCADA, тому програмне оточення було повністю завантажено з нуля. Завантаження програмного оточення до flash-пам'яті здійснювалося за допомогою JTAG-адаптеру OLIMEX ARM-USB-OCD та програми OpenOCD версії 0.5.0, збірку якої потрібно конфігурувати з параметром "--enable-ft2232_libftdi".
Для завантаження до флеш-пам'яті плати було використано готові збірки завантажувача UBoot-1.3.3 (файл образу u-boot-1.3.3_svn886_520mhz_tion_pro270_64m.bin) та ядра Linux-2.6.22.19. Образ файлової системи JFFS2 КФС збирався за допомогою "BuildRoot" та "PTXDist", про що нижче.
Прошивка обладнання за допомогою "OpenOCD" здійснюється від особи суперкористувача командою:
При цьому сценарій прошивки "tion270.cfg" та файли образів програмного оточення, вказані у сценарії прошивки "tion270.cfg", мають знаходитися у поточній теці. Сценарій прошивки "tion270.cfg" містить:
З метою уникнути виникнення безлічі проблем збірки, пов'язаних зі збіркою із самого початку, була взята конфігурація "buildroot-2009.08" безпосередньо від виробника обладнання, із Git-репозиторію: http://zao-zeo.ru/media/files/linux/buildroot-2009.08.git. З метою збірки у оточені "BuildRoot" були створені конфігурації у теці "./package/" для бібліотеки "LibGD" та OpenSCADA.
Отриману після збірки КФС було завантажено до флеш-пам'яті плати та з успіхом запущено. Однак при запуску виявилося, що версія "uCLibс" 0.9.30.3 не містить реалізації функції clock_nanosleep(), а також падає у функції timer_settime(), для типу повідомлення SIGEV_THREAD. Якщо функцію clock_nanosleep() можна замінити на nanosleep() то вирішити проблему функції timer_settime(), у межах даної версії "uCLibс", можливості немає.
Далі було взято образ поточної версії "BuildRoot", на 16.01.2012, та здійснено збірку OpenSCADA з "uCLibs" версії 0.9.32.1. Збірка пройшла вдало, після деякої адаптації складального оточення. OpenSCADA запустилася вдало з деякими проблемами, які було усунено.
У переліку нижче наведено проблеми які виникли під час збірки та роботи OpenSCADA на uCLibC різних версій:
Освоєння PTXDist для збірки оточення на TionPro270 здійснювалося за посередництвом вивчення досвіду викладеного за посиланням http://www.emb-linux.narod.ru/tion-pro-270/index.html. Однак статтю написано доволі давно та для збірки використовувалася версія ptxdist-1.1.1, яка на сучасному програмному оточені фактично не працює, а крім того частина бібліотек, потрібних для OpenSCADA, там просто не збираються. В результаті за основу було взято версію ptxdist-2011.11.0 та на ній здійснено збірку.
Перед безпосередньою збіркою КФС для цієї плати було створено конфігурацію ToolChain arm-xscale-linux-gnueabi_tion270.ptxconfig на основі існуючої arm-xscale-linux-gnueabi_gcc-4.6.2_glibc-2.14.1_binutils-2.21.1a_kernel-2.6.39-sanitized.ptxconfig з версіями програм:
Далі було створено клон проекту PTXDist "OSELAS.BSP-Pengutronix-Generic" у теці "TionPro270_RootFS" з конфігурацією платформи "arm-qemu-2011.01.0". Для збірки OpenSCADA створено конфігурацію в особі файлу openscada.in та openscada.make, які було розташовано у теці локальної конфігурації проекту rules/. Крім OpenSCADA було адаптовано конфігурацію програми udev, версія якої виявилася дуже великою для вихідної версії ядра Linux-2.6.22, тобто використану версію udev було опущено до 141. Нові файли конфігурації udev також було розташовано у теці rules/, тим самим визначивши їх використання замість вихідної конфігурації.
Збірка КФС пройшла вдало та було отримано образ ФС jffs2. Отриману КФС було вдало завантажено на плату та вона запрацювала. OpenSCADA також коректно запустилася та функціонує.
Ця плата містить низку апаратних інтерфейсів, адаптація яких цікава для OpenSCADA, тому у даному розділі буде концентруватися інформація щодо їх адаптації.
Плата містить мікросхему перетворення рівнів сигналу із RS232 в RS485, яка однак не є прозорою для надсилання запитів із програмного забезпечення. А саме:
Для вирішення цієї особливості модуль OpenSCADA Transport.Serial було доопрацьовано на предмет підтримки такого роду апаратного керування потоком.
Використовуючи отримане розширення було здійснено перевірку та підтверджено наявність проблеми програмного оточення контролера LP-5141.
Фірма ICP_DAS достатньо давно випускає контролери на процесорах ARM архітектури із передвстановленим оточенням ОС Linux, як у цьому випадку LP-5141, що робить цікавим створення збірки або нової прошивки із OpenSCADA більш на сторінці проекту.
Фірма Nokia є одним із світових лідерів у виробництві та продажу мобільних телефонів. У 2005 році фірма Nokia випустила кишеньковий персональний комп'ютер (КПК) N770 на основі розвинутого Linux оточення із власним оточенням робочого столу (на GTK+) — Hildon під загальною назвою проекту Maemo. Згодом на основі платформи Maemo було випущено ще три мобільних пристрої, а саме два КПК «інтернет-планшети» N800, N810 та смартфон «інтернет-планшет» N900. У 2010 році фірма Nokia об'єднала свої зусилля по роботі над Maemo з проектом MobLin фірми Intel, створивши проект MeeGo. На основі платформи MeeGo у 2011 році було випущено два смартфони N950(прототип) та N9 більше на сторінці проекту.
Вільнопрограмований панельний контролер "SMH2Gi", представляє собою високо-інтегровану обчислювально-керуючу систему на базі процесору iMx27 з ядром ARM926EJ-S від фірми Сегнетікс. Адаптація та збірка OpenSCADA для цього контролера знадобилося у межах проекту створення автоматизованої системи керування вакуумної технологічної установки (RU).
Всі матеріали по збірці програмного оточення з OpenSCADA та готові збірки для панельного контролеру можна отримати за посиланням: ftp://ftp.oscada.org/OpenSCADA/PLC/Segnetics-SMH2Gi.
Панельний контролер постачається виробником обладнання з передвстановленим програмним оточенням на основі Linux™ та власним оточенням виконання контролера "SMLogix". Роль OpenSCADA для даного контролера розглядалася як розширене середовище програмування контролеру, інтегроване та програмоване зі станції верхнього рівня на основі OpenSCADA. Для збереження можливості надання та контролю даними отриманих у OpenSCADA на вбудованому дисплеї, при цьому мінімізуючи працевитрати на адаптацію, вирішено було зберегти вихідне середовище виконання "SMLogix" для виконання завдання представлення даних на внутрішньому дисплеї, а дані транслювати до/із неї за посередництвом локального ModBus/TCP підключення. Згодом, для оптимізації низки задач, було створено модуль джерела даних до OpenSCADA DAQ.SMH2Gi (RU) з функціями прямого опитування модулів SMH2Gi MC та MR, а також обміну значеннями змінних із процесом "logix", за посередництвом поділюваної пам'яті.
Для збірки оригінального програмного оточення розробником було використано раніш розглянутий інструментарій PTXDist версії 1.99.12. Зібрати ToolChain, вгадуючи профіль, використаний для збірки вихідного програмного оточення, не було потреби оскільки на сайті виробника доступне повне складальне середовище, оформлене у вигляді образу ОС Linux для віртуальної машини VMWare. Із цього образу було отримано готовий ToolChain профіль gcc-4.3.2-glibc-2.8-binutils-2.18-kernel-2.6.27-sanitized. Оскільки не потрібно було збирати КФС повністю вирішено було зібрати OpenSCADA використовуючи готовий ToolChain окремо. Для збірки OpenSCADA попередньо було зібрано бібліотеки "pcre-8.12" та "sqlite-3.7.6.2". Пізніш, у межах задачі збірки модулів UI.WebCfgD (RU) та UI.WebVision (RU), було зібрано бібліотеки: "png-1.2.49", "jpeg-8a", "expat-2.0.1", "freetype-2.3.11", "fontconfig-2.6.0" та "gd-2.0.35". Далі OpenSCADA збиралась наступним чином:
В результаті було сформовано архів збірки OpenSCADA, який можна вивантажити на панельний комп'ютер SMH2Gi та там розпакувати. Отримане програмне оточення OpenSCADA налаштовано на автоматичний запуск при запуску контролера, за посередництвом скрипту ініціалізації "/etc/init.d/openscada". Збірку OpenSCADA було вдало запущено.
У відношенні програмного оточення панельного контролера SMH2Gi в цілому потрібно зробити декілька зауважень. У контролері використано ядро Linux 2.6.29 з розширенням жорсткого реального часу, що дозволяє утримувати періодичні інтервали часу до 100 мкс. Крім того всі критичні системні потоки запущені з політикою керування планування реального часу. При цьому, хоча процесор не має математичного сопроцесора, емуляція виконана оптимально у вигляді SoftVFP. Все це дозволяє у OpenSCADA виконувати високо-детерміновані завдання керування з періодичністю до 100 мкс та прийнятною обчислювальною продуктивністю.
Плата AS-9260 представляє собою контролер на базі мікросхеми AT91RM9260, ядро ARM9(ARMv5), з набором периферійних пристроїв. Плату призначено для розробки (макетування) проектів на базі мікроконтролерів з ядром ARM926EJ-S виробництва корпорації Atmel, також може бути використано у якості керуючого контролера цільової системи.
На платі встановлено роз'єми USB2.0 (1 Host, 1 Device, Full-speed, 12Mb/s), DBGU, RS-232, RS-485, два 12-контактних роз'ємів для встановлення модуля інтерфейсу Ethernet 10/100 Mbps, крім того, наявне місце для встановлення двох 80 - контактних роз'ємів типу PLD-80 для підключення зовнішніх модулів з додатковими інтерфейсами.
Периферія плати AS-9260 з процесором AT91sam9260 мінімальна:
Завантажувач та ядро можна знайти тут http://www.at91.com/linux4sam. До U-boot встановлюємо завантаження КФС з USB-флеш:
Флеш форматуємо під ФС EXT2 та на неї заливається КФС Debian Lenny. Запускаємо систему та налаштовуємо інтернет з'єднання nano /etc/network/interfaces:
У /etc/inittab встановлюємо автологін:
Визначаємо репозиторій для оновлення у /etc/apt/sources.list
Після оновлення завантажуємо вихідні тексти OpenSCADA та розв'язуємо залежності. Нативно зібрати скаду не вдасться, оскільки для цього не достатньо ОЗП. Одне з рішень цієї ситуації наступне:
Описаний метод далеко не найкращий, тому ведеться робота по його вдосконаленню. Аналогічним чином скада встановлюється на плату AS-9200 з процесором AT91RM9200.
"Raspberry Pi®" — одно-платный комп'ютер, створений з метою благочинності. Призначено для навчання базовим комп'ютерним наукам у школах, позиціюється як дешеве рішення для починаючих розробників. Розробляється "Raspberry Pi Foundation". Плату Raspberry Pi було отримано для збірки та адаптації OpenSCADA від Лисенко Максима. Плату Raspberry Pi2 придбано для задач OpenSCADA та адаптації її для роботу із базовими шинами I2c, SPI, 1Wire із різними сенсорами на них.
Плата має характеристики:
Параметри: | Raspberry Pi | Raspberry Pi2 |
Апаратна платформа: | ARM11 [ARMv6] | ARMv7 |
Центральний процесор: | Broadcom BCM2835, 700 МГц («турбо-режим» до 1ГГц) | Broadcom BCM2836, 900 МГц, 4 Ядра |
Оперативна пам'ять: | 256 або 512 Мб, інтегрована у CPU | 512 Mb або 1Gb, інтегрована у CPU |
Постійна пам'ять: | флеш карта MMC | флеш карта MicroSD |
Відео підсистема: | інтегроване відео ядро Broadcom | |
Аудіо підсистема: | інтегрована до CPU | |
Чіпсет: | Ethernet та USB: SMSC LAN9512 | |
Электроживлення: | microUSB, 5 В, від 700 мА | |
Інтерфейси: | HDMI, USB, відео RCA, Stereo Jack 3.5 мм, Ethernet, UART, JTAG, SPI, I2C, DSI, CSI | |
Вага: | 45 г. | |
Розмір: | 85,6 × 53,98×17 мм |
Raspberry Pi
Для роботи з платою було використано спеціалізований дистрибутив Raspbian “wheezy”. Збірка OpenSCADA здійснювалася для LTS версії 0.8.0.5 та робочої версії 0.8.1 безпосередньо на самій платі. Для збірки довелося розширити розмір області підкачки до 500 Мб, оскільки збірка низки модулів OpenSCADA сучасним компілятором (GCC 4.7) та з оптимізацією (-O2) потребує багато оперативної пам'яті. Отримані пакети успішно встановилися та працювали.
Графічне оточення робочого столу у обраному дистрибутиві побудовано на LXDE 0.5.5, яке відображається у повноцінній роздільній здатності через HDMI, або у роздільній здатності 640x480 через композитний відеовихід. OpenSCADA успішно запускається та працює у графічному режимі, однак продуктивності процесору недостатньо для нормального виконання динамічних моделей OpenSCADA.
Raspberry Pi 2
Action source page doesn't exist yet(/Home Page En / Using / PLC / firmware ARM?)
Action source page doesn't exist yet(/Home Page En / Using / PLC / firmware ARM?)