Øèðîêå ðîçïîâñþäæåííÿ ó âáóäîâàíèõ ð³øåííÿõ îòðèìàëà àðõ³òåêòóðà 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 ç ôóíêö³ÿìè ïðÿìîãî îïèòóâàííÿ ìîäóë³â SMH2Gi MC òà MR, à òàêîæ îáì³íó çíà÷åííÿìè çì³ííèõ ³ç ïðîöåñîì "logix", çà ïîñåðåäíèöòâîì ïîä³ëþâàíî¿ ïàì'ÿò³.
Äëÿ çá³ðêè îðèã³íàëüíîãî ïðîãðàìíîãî îòî÷åííÿ ðîçðîáíèêîì áóëî âèêîðèñòàíî ðàí³ø ðîçãëÿíóòèé ³íñòðóìåíòàð³é PTXDist âåðñ³¿ 1.99.12. dzáðàòè 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, áóëî ç³áðàíî á³áë³îòåêè: "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 Pi3 áóëî ïðèäáàíî òà ñïîíñîðîâàíî Proviron Holding NV äëÿ äåÿêîãî íàëàãîäæåííÿ òà òåõí³÷íî¿ ï³äòðèìêè.
Ïëàòà ìຠõàðàêòåðèñòèêè:
Ïàðàìåòðè: | Raspberry Pi | Raspberry Pi2 | Raspberry Pi3 |
Àïàðàòíà ïëàòôîðìà: | ARM11 [ARMv6] | ARMv7 | Cortex A53 (ARMv8) |
Öåíòðàëüíèé ïðîöåñîð: | Broadcom BCM2835, 700 ÌÃö («òóðáî-ðåæèì» äî 1ÃÃö) | Broadcom BCM2836, 900 ÌÃö, 4 ßäðà | Broadcom BCM2837 64á³ò, 1.2ÃÃö, 4 ßäðà |
Îïåðàòèâíà ïàì'ÿòü: | 256 àáî 512 Ìá, ³íòåãðîâàíà ó CPU | 512 Mb àáî 1Gb, ³íòåãðîâàíà ó CPU | 1Gb, ³íòåãðîâàíà ó CPU |
Ïîñò³éíà ïàì'ÿòü: | ôëåø êàðòà MMC | ôëåø êàðòà MicroSD | |
³äåî ï³äñèñòåìà: | ³íòåãðîâàíå â³äåî ÿäðî Broadcom | ||
Àóä³î ï³äñèñòåìà: | ³íòåãðîâàíà äî CPU | ||
׳ïñåò: | Ethernet òà USB: SMSC LAN9512 | ||
Ýëåêòðîæèâëåííÿ: | microUSB, 5 Â, â³ä 700 ìÀ | microUSB, 5 Â, â³ä 700 ìÀ | microUSB, 5 Â, äî 2.4A |
²íòåðôåéñè: | 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 |
Âàãà: | 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 òà 3
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?)