Прошивка та створення програмного оточення ПЛК архітектури ARM
Широке розповсюдження у вбудованих рішеннях отримала архітектура
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 та робочих оточень під різні цільові архітектури
Сформувати Linux КФС можна на основі готових пакунків існуючого бінарного дистрибутива, пакунків вихідних текстів існуючого дистрибутиву, а також побудувати із оригінальних вихідних текстів за посередництвом ToolChain у одній із складальних систем.
Побудова програм або цілої КФС для архітектур відмінних від x86 та x86_64 зазвичай здійснюється за посередництвом кроскомпіляції із використанням утиліт (ToolChain) для збірки, лінковки та налаштування під цільову архітектуру ARM. Для автоматизації цього процесу створено низку інструментів збірки готових КФС.
Ця система збірки є частиною проекту створення альтернативної бібліотеки функцій мови "C"
UClibC, тому в цілому націлена на побудову оточень із "UClibC", з відповідними обмеженнями. BuildRoot гарно показав себе у роботі на хостових системах різних версій та дозволяє без особливих проблем збирати програмні оточення на основі Linux.
Отримати архів BuildRoot потрібної версії можна за посиланням
http://buildroot.uclibc.org/downloads. Далі його потрібно розпакувати у домашній директорії звичайного користувача та здійснити конфігурацію, налаштування та збірку:
У процесі збірки можуть виникнути проблеми наступного роду:
- Неможливість завантажити архіви програм.
(+) Потрібно вказаний пакет завантажити окремо та розташувати його у теці "./dl" або "./output/dl".
(+) Однозначного рішення цієї проблеми немає та потрібно розбиратися з помилками збірки окремо для програми. Помилка збірки може бути пов'язана, наприклад, з відсутністю вибору окремого параметра під час конфігурації або проблемою збірки програми у цьому оточені. Патчі виправлення збірки можна розташовувати безпосередньо у теці опису програми "./package/{назва пакету}/"
Універсальний інструмент збірки ядер, 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" здійснюється від особи суперкористувача командою:
$ openocd -f interface/olimex-arm-usb-ocd.cfg -f tion270.cfg
При цьому сценарій прошивки "tion270.cfg" та файли образів програмного оточення, вказані у сценарії прошивки "tion270.cfg", мають знаходитися у поточній теці. Сценарій прошивки "tion270.cfg" містить:
Збірка КФС у BuildRoot
З метою уникнути виникнення безлічі проблем збірки, пов'язаних зі збіркою із самого початку, була взята конфігурація "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 різних версій:
- У типовій конфігурації відсутня реалізація функцій usleep() та msleep() — створено та повсюдно використано загальносистемна, для OpenSCADA, функція sysSleep() з реалізацією на основі nanosleep().
- < 0.9.32: не збирається у зв'язку із відсутністю низки функцій, а також OpenSCADA не запускається:
(+) відсутня реалізація функції clock_nanosleep() — потрібно використання версії >= 0.9.32 або заміна на nanosleep().
(-) 0.9.30.3: падіння на функції timer_settime(), для типу повідомлення SIGEV_THREAD — Актуально.
- 0.9.32: збірка пройшла вдало, з деякими вирішуваними проблемами під час запуску OpenSCADA:
(+) Бібліотека OpenSSL "libssl" не містить залежності на "libcrypto" — у модулі "OpenSCADA.Transport.SSL" додано пряму залежність на бібліотеку "libcrypto".
(+) Функції сімейства printf() некоректно обходять проблему висячих символів '%' — виправлено рядок повідомлення "Last: %s. Load: %3.1f% (%s from %s)".
(+) Відмінна від GLibC обробка взаємоблокувань у межах одного потоку, у функціях RW-lock — виправлено взаємоблокування у модулі "OpenSCADA.UI.WebVision", а функцію перевірки сеансів винесено до процедури сервісного виклику.
Збірка КФС у PTXDist
Освоєння 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 з версіями програм:
- GLIBC_ENABLE_KERNEL="2.6.19", оскільки реальне ядро версії 2.6.22 та для роботи GLibC з ним має бути вказано меншу або рівну версію;
- KERNEL_HEADERS_VERSION="2.6.30.5", версія ядра для заголовків;
- CROSS_GCC_VERSION="4.5.2".
Далі було створено клон проекту 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, яка однак не є прозорою для надсилання запитів із програмного забезпечення. А саме:
- для надсилання запиту потрібно встановити в нуль сигнал інтерфейсу RS232 "RTS";
- потрібно читати інтерфейс на предмет очікування відлуння посилки від запиту, після отримання якого встановити сигнал RS232 "RTS", відкинути відлуння посилки та продовжити чекати безпосередньо відповіді.
Для вирішення цієї особливості модуль 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 з функціями прямого опитування модулів 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 та
UI.WebVision, було зібрано бібліотеки: "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 мінімальна:
- роз'єми з інтерфейсом USB типу A та B;
- роз'єм DRB-9 з інтерфейсом DBGU (RS-232);
- роз'єм PLS-3 з додатковим інтерфейсом RS-232;
- роз'єм PLD-20 для підключення JTAG-емулятору (ATSAM-ICE, AS-JTAG);
- мікросхема ПЗП серії DataFlash AT45DB642D-TU (корпус TSOP28);
- 2 мікросхеми SDRAM загальна ємність 32 або 64 МБ;
- роз'єм для підключення зовнішнього модуля Ethernet PHY.
Завантажувач та ядро можна знайти тут
http://www.at91.com/linux4sam. До U-boot встановлюємо завантаження КФС з USB-флеш:
Флеш форматуємо під ФС EXT2 та на неї заливається КФС Debian Lenny. Запускаємо систему та налаштовуємо інтернет з'єднання
nano /etc/network/interfaces:
У
/etc/inittab встановлюємо автологін:
Визначаємо репозиторій для оновлення у
/etc/apt/sources.list
Після оновлення завантажуємо вихідні тексти OpenSCADA та розв'язуємо
залежності. Нативно зібрати скаду не вдасться, оскільки для цього не достатньо ОЗП. Одне з рішень цієї ситуації наступне:
- Запускаємо QEMU зі штампом КФС:
- Компілюємо з наступною конфігурацією:
- Записуємо штам з побудованою скадою назад на флешку.
- Завантажуємося та користуємося.
Описаний метод далеко не найкращий, тому ведеться робота по його вдосконаленню. Аналогічним чином скада встановлюється на плату AS-9200 з процесором AT91RM9200.
"Raspberry Pi®" — одно-платный комп'ютер, створений з метою благочинності. Призначено для навчання базовим комп'ютерним наукам у школах, позиціюється як дешеве рішення для починаючих розробників. Розробляється "Raspberry Pi Foundation". Плату Raspberry Pi було отримано для збірки та адаптації OpenSCADA від
Лисенко Максима. Плату Raspberry Pi2 придбано для задач OpenSCADA та адаптації її для роботу із базовими шинами I2c, SPI, 1Wire із різними сенсорами на них. Плату Raspberry Pi3 було придбано та спонсоровано
Proviron Holding NV для деякого налагодження та технічної підтримки.
Плата має характеристики:
Параметри: | Raspberry Pi | Raspberry Pi2 | Raspberry Pi3 | Orange Pi Zero |
Апаратна платформа: | ARM11 [ARMv6] | ARMv7 | Cortex A53 (ARMv8) | Cortex-A7 (ARMv7) |
Центральний процесор: | Broadcom BCM2835, 700 МГц («турбо-режим» до 1ГГц) | Broadcom BCM2836, 900 МГц, 4 Ядра | Broadcom BCM2837 64біт, 1.2ГГц, 4 Ядра | H2 Cortex-A7 H.265/HEVC 1080P, 1.2GHz, 4 ядра |
Оперативна пам'ять: | 256 або 512 Мб, інтегрована у CPU | 512 Mb або 1Gb, інтегрована у CPU | 1Gb, інтегрована у CPU | 256MB/512MB DDR3 SDRAM |
Постійна пам'ять: | флеш карта MMC | флеш карта MicroSD | флеш карта MicroSD | µSD, опціональна SPI NOR Flash на платі |
Відео підсистема: | інтегроване відео ядро Broadcom | інтегроване відео ядро Broadcom | інтегроване відео ядро Broadcom | Mali400MP2 GPU @600MHz |
Аудіо підсистема: | інтегрована до CPU |
Электроживлення: | microUSB, 5 В, від 700 мА | microUSB, 5 В, від 700 мА | microUSB, 5 В, до 2.4A | DC 5V DC-IN через µUSB або штирі або PoE |
Інтерфейси: | 2xUSB, Ethernet 10/100M, HDMI, video RCA, Stereo Jack 3.5 mm, UART, JTAG, SPI, I2C, DSI, CSI | 4xUSB, Ethernet 10/100M, HDMI, video RCA, Stereo Jack 3.5 mm, UART, SPI, I2C, DSI, CSI | 4xUSB, Ethernet 10/100M, WiFi 802.11 b/g/n, Bluetooth 4.1 LE, HDMI, video RCA, Stereo Jack 3.5 mm, UART, SPI, I2C, DSI, CSI | 3xUSB Host, 1xUSB OTG, Ethernet 10/100M POE, WiFi 802.11 b/g/n, TV вихід, мікрофон, стерео line-out, 3xUART, 2xSPI, 2xI2C |
Вага: | 45 г. | 45 г. | 45 г. | 26 г. |
Розмір: | 85.6 × 53.98 × 17 мм | 85.6 × 53.98 × 17 мм | 85.6 × 53.98 × 17 мм | 48 × 46 × 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 та 3
For working with the boards there also used a special distributive
Raspbian "Wheezy". OpenSCADA has built for Work version 0.9 direct on the board and allowed memory here enough for this operation but it has 1MB and more, the building there allowed on all four threads. The building of OpenSCADA performs in packages which then placed into
proper repository of Debian 7 from time to time of the buildings. Also for
Raspbian "Jessie", mostly for the generic architecture ARMHF, there performs regular building of OpenSCADA by
the OpenSCADA automatic builder into the
cross-compiling environment and the result packages are placed into
proper repository of Debian 8.
The typical graphical desktop environment into the selected distributive built on LXDE 0.5.5 (Wheezy) and 6 (Jessie) but it's replaced to TDE R14 for more features with low hardware demands. For remote access there was configured VNC access in display resolution 1024x768. OpenSCADA is successfully started and worked into graphical mode and the performance here enough already by the multi-threading.
For more free handling to the board was connected a WiFi adapter and on RPi3 it presents already.
To allow for operations with GPIO directly in OpenSCADA there was created a module DAQ.BCM2835 based on the library bcm2835. For now the module provides access to "Raspberry Pi" GPIO (0...31) as OpenSCADA DAQ's parameter attributes, static and dynamic functions, which the comparing information of performance shown here.
To the board there was connected a 16x2 text display 1602A and a program like to the original Python one was wrote into OpenSCADA by using the static functions of the module DAQ.BCM2835. As a result the program works fine and some faster to the Python original one.
To the board there were directly connected sensors DHT 11 and AM2303 (humidity and temperature) and a program like to the original Python program's C-language driver part was wrote into OpenSCADA by using the static functions of module DAQ.BCM2835.
To allow creation derivative DAQ templates with their configuration the dynamic linking to static external functions was added into DAQ.JavaLikeCakc, like this:
To allow operation in OpenSCADA with devices on bus I2C the output transport "Serial" was adapted to the bus by selection the bus and a slave device's address (first byte of the sequence) set by IO control command I2C_SLAVE. In this way now to OpenSCADA there were connected:
- The 8-bit A/D and D/A converter chip PCF8591. Through the chip PCF8591 were connected sensors LM35 and LM335.
- The 8DIO converter chip PCF8574, which also adapted and tested for connection to 1602A.
- The barometric pressure/temperature/altitude Sensor BMP180.
- The memory chips AT24CXX by calls through the proper protocol.
The tracing task of the work out opened here.
Orange Pi Zero
For working with the board there used a special distributive Armbian "Jessie". As builds of OpenSCADA there have used the packages repository, mostly for the generic architecture ARMHF, for which performs regular building of OpenSCADA by the OpenSCADA automatic builder into the cross-compiling environment.
The board provides more low level buses (3xUART, 2xSPI, 2xI2C), despite its small size, and restricted GPIO in 16 pins which mostly used by the buses. The buses are standard but GPIO are some specific ones for which we need implement special support into the presented module DAQ.BCM2835 making it more unified one. Then there planed next tasks:
- connect a device to the I2C bus;
- connect a device to the Serial bus,
- try to adapt 1Wire (DS9097) to the Serial buses;
- the specific GPIO support implement for OpenSCADA;
- WiFi driver fix/update.
"Asus Nexus 7 II" — tablet computer of 2013 year edition with four-cores ARM-processor and sensor screen 7", released in conjunction of
Asus and
Google. Purchased for tasks of OpenSCADA and
adapting it to work into the environment of
OS Android and hardware of modern multicore CPU of ARM-architecture.
Image. OpenSCADA in Web and Qt5 for the native building.
Key specification of the tablet:
Hardware platform: | ARM Cortex-A15 [ARMv7] |
Central processor: | Four-core Qualcomm Snapdragon APQ8064-1AA 1500 MHz |
Operational memory: | 2 GiB DDR3 |
Permanent memory: | 32 GiB |
Video subsystem: | 400 MHz quad-core Adreno 320 |
Screen: | IPS, 1920x1200 px (323 ppi) |
The tracing task of the work out opened here.
Assembling and starting OpenSCADA into the environment of OS Android
Installing of full-featured OS Linux and OpenSCADA starting
For different OS installing you need to unlock the loader and for original Android saving you need ensure multiboot.
The loader unlock and ROOT, from a Linux environment:
- Enable the debug mode of Android: "Configuration" -> "About the device", five times click into item "Building number".
- Set debug through USB: "Configuration" -> "Developers parameters", set proper property.
- Install the utility "adb" (Android Debug Bridge).
- Check for connection to the tablet: connect USB-cable to PC, call command "$ adb devices".
- Unlock the device:
- Enable the tablet with connection to PC by the USB-cable and holding by buttons "Power" and "Sound lower" up to the bootloader screen appear.
- Check for the boot-loader visibility: "$ fastboot devices".
- Unlock: "$ fastboot oem unlock".
- Load and flash "TWRP recovery": load here, then flash it by command "$ fastboot flash recovery /Path-to-TWRP.img"
- Enter to the "Recovery" mode of the loader and provide access ROOT: select "Reboot" -> "Recovery" -> "ROOT", then "Reboot" -> "Sytem".
- Next, installation "SuperSU" for you will be proposed.
To provide the multiboot let install "MultiROM Manager" from "Play Market".