OpenSCADAWiki: Home Page Uk/Using/LP5xxx ...

Home | Index | Changes | Comments | Users | Registration | Login  Password:  
 
This is an old revision of HomePageUk/Using/LP5xxx from 2012-02-14 11:21:51..

Збірка OpenSCADA та прошивки для ARM-контролерів фірми ICP DAS (LP-5141)

Ім'я: LP-5xxx
Засновано: серпень 2011р
Завершено: вересень 2011р
Версія: 1.0.0
Учасники: Роман Савоченко
Опис: Проект присвячено збірці OpenSCADA та прошивки для ARM контролерів серії LP-5xxx та LP-8x{3|4}x фірми ICP DAS.
Матеріали: ftp://ftp.oscada.org/OpenSCADA/PLC/LP5xx1


Contents

Вступ

Фірма ICP_DAS достатньо давно випускає контролери на процесорах ARM архітектури з передвстановленим оточенням ОС Linux, що робить цікавим створення збірки OpenSCADA або нової прошивки з OpenSCADA.


До останнього часу низка причин ставали на перепоні збірки OpenSCADA для ARM-контролерів ICP DAS:


На цей час всі ці перепони було усунено. Так, завдяки Петру Літковцю на руках з'явився контролер LP-5141, а до цього часу OpenSCADA у значній мірі було вже адаптовано до роботи на ARM-архітектурі, за посередництвом відпрацювання та стабілізації на долонному комп'ютері фірми Nokia - N800. У наслідок же роботи з контролером LP-5141 було усунено останню перепону шляхом оновлення початкового програмного оточення із збереженням поточного функціоналу.


В цілому, метою даного проекту є відпрацювання механізмів та створення збірки OpenSCADA для контролерів сімейства ARM фірми "ICP DAS", а також створення прошивок під контролери "ICP DAS", які потраплятимуть до рук розробників OpenSCADA.

1. ПЛК LP-5141

ПЛК (рис.1) конструктивно виконано у вигляді моноблоку, який не містить вбудованого УСО, окрім можливості встановлення однієї спеціальної плати розширення IO, а підключення зовнішнього здійснюється за посередництвом вбудованого інтерфейсу RS-485, наприклад, у вигляді модулів серії I-7000, фірми "ICP DAS".



Рис. 1. ПЛК серії LP-5xxx.

Процесор контролеру має наступні технічні характеристики:

CPU PXA270 або сумісний (32-біт та 520МГц)
SDRAM 128 MB
Flash 64 MB
EEPROM 16 KB
Зберігання даних: 40 років; 1,000,000 циклів видалення/запису.
Розширена Flash пам'ять microSD сокет з однією microSD картою на 2GB (може підтримувати 16 GB microSDHC картки)
64-біт Серійний Номер Обладнання Наявний
Подвійний Watchdog таймер Наявний
VGA 800 × 600
Ethernet порти RJ-45 x 2, 10/100 Base-TX Ethernet Контролер (Авто-узгодження, авто MDI/MDI-X, LED індикатор)
USB 1.1 (хост) 1
COM1 (/dev/ttySA0) RS-232 (RxD, TxD and GND); Не ізольовано
COM2 (/dev/ttySA1) RS-485 (D2+,D2-); 2500 VDC; Ізольовано
COM3 (/dev/ttySA3) RS-232 (RxD, TxD and GND); Не ізольовано
Робоча температура -25 ~ +75 °C

2. Програмне оточення на основі OpenSCADA.

Програмне оточення, основане на ОС Linux, для ARM контролерів фірми ICP DAS за звичай мають: ядро Linux 2.6.19, GLibC 2.2.5 та GCC 2.95. Для збірки стороннього ПЗ фірмою ICP-DAS надається SDK з кроскомпілятором, набором бібліотек та заголовків до них (Linux toolchain). Як можна бачити, версії GLibC та GCC дуже старі, а саме 2001 року. Збірка OpenSCADA у такому оточені фактично неможлива. Якщо використання GLibC версії 2.2.5 ще можливе, то GCC версії 2.95 має C++ компілятор, який на збірці коду OpenSCADA просто рушиться, а стандартна бібліотека C++ або STL дуже обмежена та під неї потрібна значна і головне безглузда адаптація. З цієї причини потрібне було оновлення первинного програмного оточення до версії GCC компілятору, або бібліотеки C++, не менш 3.


Оскільки внутрішня флеш-пам'ять має порівняно невеликий об'єм (64 Мб), а повна перезбірка початкового програмного оточення контролера — достатньо трудомісткий процес, то було вирішено забезпечити сумісність базових бібліотек нового та старого оточення. А саме, можливість використовувати бібліотеки на зразок fontconfig, i8k з первинного оточення та роботу програм первинного оточення з новими бібліотеками.




У процесі підбору нового програмного оточення для процесору PXA-270 контролера "ICP DAS" було апробовано декілька варіантів, оскільки частина з них мала ті або інші недоліки:


Збірка OpenSCADA з використанням кросскомпілятору здійснюється наступним чином:

# Розпакування архіву інструментарію
$ cd /opt
$ tar --lzma -xvf lincon.tlz
# Ініціалізація оточення збірки
$ . /opt/lincon/linpac_new.sh
# Перехід до дерева вихідних текстів OpenSCADA, конфігурація та збірка
$ cd /lincon/OpenSCADA
$ ./configure --host=arm-xscale-linux-gnu CXXFLAGS="-O2 -D_REENTRANT" CFLAGS="-O2 -D_REENTRANT" --disable-QTStarter --disable-QTCfg --disable-Vision --disable-MySQL --disable-FireBird --disable-PostgreSQL --disable-SoundCard --enable-ICP_DAS
$ make


Результуюче оточення контролеру з OpenSCADA було сформовано шляхом заміни базових бібліотек первинного оточення на бібліотеки з нового набору інструментів, збірки OpenSCADA та розташування файлів OpenSCADA у дереві первинного оточення.


OpenSCADA було зібрана з виключенням низки бібліотек та модулів. Так, були зібрані та перевірені модулі та функції OpenSCADA:


З метою зручного розповсюдження та застосування отриманої збірки OpenSCADA для ARM-контролерів фірми "ICP DAS" було виконано розбір формату прошивок для цих контролерів та формування нової, яка включає OpenSCADA. Прошивка ARM-контролерів "ICP DAS" представляє з себе бінарний файл з назвою схожу на "lp5x4x_1.1.bin". Структурно цей файл містить ядро та кореневу файлову систему типа JFFS2. Дізнатися точне їх розташування можна за допомогою команди у попередньому оточені контролеру, наприклад, для LP-5141:

$ cat /proc/mtd
dev:    size   erasesize  name
mtd0: 00040000 00020000 "Bootloader"
mtd1: 00040000 00020000 "Bootloader Param"
mtd2: 00280000 00080000 "Kernel"
mtd3: 03c80000 00080000 "JFFS2 Filesystem"


Із отриманого результату команди можна зробити висновок, що точка поєднання образу ядра та файлової системи знаходиться за зсувом файлу прошивки 0x280000, а розмір блоку стирання флешу складає 0x80000 (512кБ). Маючи цю інформацію ми можемо розібрати прошивку та внести зміни до образу її файлової системи:

# Вилучення попередніх образів ядра та кореневої файлової системи
$ dd if=lp5x4x_1.1.bin of=kernel_orig bs=1K count=2560
$ dd if=lp5x4x_1.1.bin of=jffs2_orig bs=1K skip=2560

# Підключення попереднього образу файлової системи
# Створення емуляції блокового пристрою у пам'яті.
# Може викликати помилку у випадку використання неперервної області пам'яті іншими програмами та малим її розміром.
# Для вирішення цієї проблеми потрібно додати параметр командного рядка ядра, під час завантаження, "vmalloc=512MB".
$ modprobe mtdram total_size=65536 erase_size=512
$ modprobe mtdblock
$ dd if=root_orig.img of=/dev/mtdblock0
$ mount -t jffs2 /dev/mtdblock0 /mnt/tmp
# Копіюємо зміни та файли OpenSCADA у кореневу файлову систему контролеру
# Створюємо нову файлову систему із змінами.
$ mkfs.jffs2 --root=/mnt/tmp --pad=$((61952*1024)) --eraseblock=512 --output=root.img
# Збираємо новий образ прошивки
# cat kernel_orig.img root.img > lp5x4x_oscada_1.1.bin


Таким чином ми отримуємо нову прошивку з OpenSCADA у файлі lp5x4x_oscada_1.1.bin, яку можна завантажити до контролеру стандартним чином, описаним у документації "ICP DAS".

3. Зауваження

Оскільки з'ясувалося, що операції з реальними числами виконуються за посередництвом команд сопроцесору FPA (Float Point Acceleration), якого у цьому процесорі просто немає, а виклики самих команд здійснюються через виключення, шляхом імітації у ядрі Linux, то продуктивність математичних обчислень виявляється дуже низькою, навіть у порівнянні з прямим "Software FP", "VFP". Наприклад, обчислення однієї операції sin(pi) здійснюється ~200 мкс, у порівняні із ~20 мкс на N800 з VFP та ~2 мкс на x86, детальніше у таблиці нижче. Таким чином, розглядати цей контролер як платформу для хоч якихось серйозних обчислень не можна! Мало того, реальні числа, при роботі із FPA, зберігаються по іншому, а саме особливий big-endian, що вимагає перетворення, у випадку із бінарним зовнішнім обміном, до типового little-endian вигляду, наприклад, для DAQ.OPC_UA.


Обладнання Операція sin(Пі) (у JavaLikeCalc), мкс Операція pow(Пі,2) (у JavaLikeCalc), мкс
ICP DAS LP-5141 (PXA270, FPA) 100 (200) 51 (152)
Segnetics SMH2Gi (ARM926EJ-S, SoftVFP) 23 (44) 12 (31)
Nokia N800 6 (15) 6 (17)
Nokia N900, N950 3 (6) 2 (6)
AMD Athlon X2 3600+ 3 (3) 3 (3)
AMD Turion L625 1.6 3 (4) 3 (4)
Intel Core2 Duo 1.6 2 (2) 2 (3)

Значна різниця у часі обчислення на ARM при прямому виклику математичної операції з віртуальної машини JavaLikeCalc можливо пов'язана із невирівняним читанням з області пам'яті під час читання команд віртуальної машини, з чим має сенс пізніш розібратися та можливо якось скомпенсувати.


У первинній конфігурації порт COM1 (/dev/ttySA0) використовується у ролі консолі, яка ініціалізується командою ядра "console=/dev/ttySA0". Однак після налаштування це не потрібно, а часто і бажано звільнити ще один COM-порт для інших цілей. Звільнити COM1 від роботи на консоль можно перепризначивши інший пристрій для цієї ролі, наприклад, командою: $ busybox setconsole /dev/tty1. Однак цей метод не повністю звільняє COM-порт та запити втрачаються, вичитуючися паралельним підключенням.

4. Заключення

У результаті було отримано збірку OpenSCADA для Linux контролерів, ARM-архітектури, фірми "ICP DAS". Збірку можна завантажити безпосередньо на будь який Linux-ARM контролер, розпакувавши її у корні працюючої первинної системи. При цьому однак залишаться дублікати старих базових бібліотек (/lib/*), які, після вдалого перевантаження, можна видалити.


Для контролерів сімейства LP-5x4x створено прошивку зі збіркою OpenSCADA, яку можна завантажити стандартним для даних контролерів чином, який описано у фірмовій документації "ICP DAS". Прошивка для LP-5x4x можливо підійде і для LP-5x3x, однак це не перевірялося!


У зв'язку із застарілою та неоптимальною початковою збіркою Linux оточення від "ICP_DAS", що накладає обмеження на свободу збірки оптимального оточення, по завершенню проекта планується звернутися до фірми "ICP_DAS" з проханням виправити це становище.

Посилання


Referring pages: HomePageUk/Using/LP5xxx
HomePageUk/Using/NokiaLinux
HomePageUk/Using/PLC/firmwareARM


 
There are no files on this page.[Display files/form]
There is no comment on this page. [Display comments/form]