Export translations
Views
Special page
From OpenSCADAWiki
Jump to:
navigation
,
search
Settings
Group
About
Documents
Documents/API
Documents/DAQ
Documents/FAQ
Documents/How to
Documents/How to/Build from source
Documents/How to/Crash report
Documents/How to/Create module
Documents/How to/Create multi language project
Documents/How to/Cyclic programming
Documents/How to/Debug
Documents/How to/Install
Documents/How to/Live disk
Documents/How to/Release
Documents/How to/Transferring project configuration
Documents/How to/Violations, alarms and notifications
Documents/Program manual
Documents/Quick start
Documents/Release 0.8.0
Documents/Release 0.8.0/Update10
Documents/Release 0.8.0/Update11
Documents/Release 0.8.0/Update12
Documents/Release 0.8.0/Update13
Documents/Release 0.8.0/Update14
Documents/Release 0.8.0/Update15
Documents/Release 0.8.0/Update16
Documents/Release 0.8.0/Update17
Documents/Release 0.8.0/Update18
Documents/Release 0.8.0/Update19
Documents/Release 0.8.0/Update20
Documents/Release 0.8.0/Update3
Documents/Release 0.8.0/Update4
Documents/Release 0.8.0/Update5
Documents/Release 0.8.0/Update6
Documents/Release 0.8.0/Update7
Documents/Release 0.8.0/Update8
Documents/Release 0.8.0/Update9
Documents/Release 0.9
Documents/Release 0.9/Update 7
Documents/Release 0.9/Update1
Documents/Release 0.9/Update2
Documents/Release 0.9/Update3
Documents/Release 0.9/Update4
Documents/Release 0.9/Update5
Documents/Release 0.9/Update6
Documents/Release 0.9/Updating 0.8.0 LTS
Documents/Terms
Documents/User API
Functions and demands
Home
Libs
Libs/Devices
Libs/Documents
Libs/Electrical elements
Libs/Generic list
Libs/LowLevelDevices
Libs/Main
Libs/Main graphical elements
Libs/Mnemo elements
Libs/Prescriptions
Libs/Regulation elements
Libs/Service procedures
Libs/Technological apparatuses
Modules
Modules/BFN
Modules/BlockCalc
Modules/Comedi
Modules/DAQGate
Modules/DBArch
Modules/DBF
Modules/DBGate
Modules/DCON
Modules/DiamondBoards
Modules/FireBird
Modules/FLibComplex1
Modules/FLibMath
Modules/FLibSYS
Modules/FSArch
Modules/GPIO
Modules/HTTP
Modules/ICP DAS
Modules/JavaLikeCalc
Modules/LDAP
Modules/LogicLev
Modules/ModBus
Modules/MySQL
Modules/OPC UA
Modules/PostgreSQL
Modules/QTCfg
Modules/QTStarter
Modules/SelfSystem
Modules/Serial
Modules/Siemens
Modules/SMH2Gi
Modules/SNMP
Modules/Sockets
Modules/SoundCard
Modules/SQLite
Modules/SSL
Modules/System
Modules/SystemTests
Modules/UserProtocol
Modules/VCAEngine
Modules/Vision
Modules/WebCfg
Modules/WebCfgD
Modules/WebUser
Modules/WebVision
Sub-projects
Sub-projects/Automatic Builder of OpenSCADA
Sub-projects/Automation Linux distributive
Sub-projects/Embedding and PLC
Sub-projects/Server
Sub-projects/VCA
User:RomanSavochenko
Using
Using/HouseSpirit
Using/Kramatorsk Ball Mills
Using/Kramatorsk Water
Using/Model AGLKS
Using/Model Boiler
Using/OpenWrt TELEOFIS RTU968
Using/Yaroslavskij broiler
Works
Works/Road map
Works/Technical Support
Works/Technical Support/Agreement
Works/To do
Language
aa - Afar
ab - Abkhazian
ace - Achinese
ady - Adyghe
ady-cyrl - адыгабзэ
aeb - Tunisian Arabic
aeb-arab - تونسي
aeb-latn - Tûnsî
af - Afrikaans
ak - Akan
aln - Gheg Albanian
am - Amharic
an - Aragonese
ang - Old English
anp - Angika
ar - Arabic
arc - Aramaic
arn - Mapuche
arq - Algerian Arabic
ary - Moroccan Arabic
arz - Egyptian Arabic
as - Assamese
ase - American Sign Language
ast - Asturian
av - Avaric
avk - Kotava
awa - Awadhi
ay - Aymara
az - Azerbaijani
azb - تۆرکجه
ba - Bashkir
bar - Bavarian
bbc - Batak Toba
bbc-latn - Batak Toba
bcc - Southern Balochi
bcl - Bikol Central
be - Belarusian
be-tarask - Belarusian (Taraškievica orthography)
bg - Bulgarian
bgn - Western Balochi
bho - Bhojpuri
bi - Bislama
bjn - Banjar
bm - Bambara
bn - Bengali
bo - Tibetan
bpy - Bishnupriya
bqi - Bakhtiari
br - Breton
brh - Brahui
bs - Bosnian
bto - Iriga Bicolano
bug - Buginese
bxr - буряад
ca - Catalan
cbk-zam - Chavacano de Zamboanga
cdo - Min Dong Chinese
ce - Chechen
ceb - Cebuano
ch - Chamorro
cho - Choctaw
chr - Cherokee
chy - Cheyenne
ckb - Central Kurdish
co - Corsican
cps - Capiznon
cr - Cree
crh - Crimean Turkish
crh-cyrl - Crimean Turkish (Cyrillic script)
crh-latn - Crimean Turkish (Latin script)
cs - Czech
csb - Kashubian
cu - Church Slavic
cv - Chuvash
cy - Welsh
da - Danish
de - German
de-at - Austrian German
de-ch - Swiss High German
de-formal - German (formal address)
diq - Zazaki
dsb - Lower Sorbian
dtp - Central Dusun
dty - डोटेली
dv - Divehi
dz - Dzongkha
ee - Ewe
egl - Emilian
el - Greek
eml - Emiliano-Romagnolo
en - English
en-ca - Canadian English
en-gb - British English
eo - Esperanto
es - Spanish
et - Estonian
eu - Basque
ext - Extremaduran
fa - Persian
ff - Fulah
fi - Finnish
fit - Tornedalen Finnish
fj - Fijian
fo - Faroese
fr - French
frc - Cajun French
frp - Arpitan
frr - Northern Frisian
fur - Friulian
fy - Western Frisian
ga - Irish
gag - Gagauz
gan - Gan Chinese
gan-hans - Simplified Gan script
gan-hant - Traditional Gan script
gd - Scottish Gaelic
gl - Galician
glk - Gilaki
gn - Guarani
gom - Goan Konkani
gom-deva - Goan Konkani (Devanagari script)
gom-latn - Goan Konkani (Latin script)
got - Gothic
grc - Ancient Greek
gsw - Swiss German
gu - Gujarati
gv - Manx
ha - Hausa
hak - Hakka Chinese
haw - Hawaiian
he - Hebrew
hi - Hindi
hif - Fiji Hindi
hif-latn - Fiji Hindi (Latin script)
hil - Hiligaynon
ho - Hiri Motu
hr - Croatian
hrx - Hunsrik
hsb - Upper Sorbian
ht - Haitian Creole
hu - Hungarian
hy - Armenian
hz - Herero
ia - Interlingua
id - Indonesian
ie - Interlingue
ig - Igbo
ii - Sichuan Yi
ik - Inupiaq
ike-cans - Eastern Canadian (Aboriginal syllabics)
ike-latn - Eastern Canadian (Latin script)
ilo - Iloko
inh - Ingush
io - Ido
is - Icelandic
it - Italian
iu - Inuktitut
ja - Japanese
jam - Jamaican Creole English
jbo - Lojban
jut - Jutish
jv - Javanese
ka - Georgian
kaa - Kara-Kalpak
kab - Kabyle
kbd - Kabardian
kbd-cyrl - Адыгэбзэ
kg - Kongo
khw - Khowar
ki - Kikuyu
kiu - Kirmanjki
kj - Kuanyama
kk - Kazakh
kk-arab - Kazakh (Arabic script)
kk-cn - Kazakh (China)
kk-cyrl - Kazakh (Cyrillic script)
kk-kz - Kazakh (Kazakhstan)
kk-latn - Kazakh (Latin script)
kk-tr - Kazakh (Turkey)
kl - Kalaallisut
km - Khmer
kn - Kannada
ko - Korean
ko-kp - 한국어 (조선)
koi - Komi-Permyak
kr - Kanuri
krc - Karachay-Balkar
kri - Krio
krj - Kinaray-a
ks - Kashmiri
ks-arab - Kashmiri (Arabic script)
ks-deva - Kashmiri (Devanagari script)
ksh - Colognian
ku - Kurdish
ku-arab - كوردي (عەرەبی)
ku-latn - Kurdish (Latin script)
kv - Komi
kw - Cornish
ky - Kyrgyz
la - Latin
lad - Ladino
lb - Luxembourgish
lbe - лакку
lez - Lezghian
lfn - Lingua Franca Nova
lg - Ganda
li - Limburgish
lij - Ligurian
liv - Livonian
lmo - Lombard
ln - Lingala
lo - Lao
loz - Lozi
lrc - Northern Luri
lt - Lithuanian
ltg - Latgalian
lus - Mizo
luz - Southern Luri
lv - Latvian
lzh - Literary Chinese
lzz - Laz
mai - Maithili
map-bms - Basa Banyumasan
mdf - Moksha
mg - Malagasy
mh - Marshallese
mhr - Eastern Mari
mi - Maori
min - Minangkabau
mk - Macedonian
ml - Malayalam
mn - Mongolian
mo - молдовеняскэ
mr - Marathi
mrj - Western Mari
ms - Malay
mt - Maltese
mus - Creek
mwl - Mirandese
my - Burmese
myv - Erzya
mzn - Mazanderani
na - Nauru
nah - Nāhuatl
nan - Min Nan Chinese
nap - Neapolitan
nb - Norwegian Bokmål
nds - Low German
nds-nl - Low Saxon
ne - Nepali
new - Newari
ng - Ndonga
niu - Niuean
nl - Dutch
nl-informal - Nederlands (informeel)
nn - Norwegian Nynorsk
nov - Novial
nrm - Nouormand
nso - Northern Sotho
nv - Navajo
ny - Nyanja
oc - Occitan
olo - Livvi-Karelian
om - Oromo
or - Oriya
os - Ossetic
pa - Punjabi
pag - Pangasinan
pam - Pampanga
pap - Papiamento
pcd - Picard
pdc - Pennsylvania German
pdt - Plautdietsch
pfl - Palatine German
pi - Pali
pih - Norfuk / Pitkern
pl - Polish
pms - Piedmontese
pnb - Western Punjabi
pnt - Pontic
prg - Prussian
ps - Pashto
pt - Portuguese
pt-br - Brazilian Portuguese
qu - Quechua
qug - Chimborazo Highland Quichua
rgn - Romagnol
rif - Riffian
rm - Romansh
rmy - Romani
rn - Rundi
ro - Romanian
roa-tara - tarandíne
ru - Russian
rue - Rusyn
rup - Aromanian
ruq - Megleno-Romanian
ruq-cyrl - Megleno-Romanian (Cyrillic script)
ruq-latn - Megleno-Romanian (Latin script)
rw - Kinyarwanda
sa - Sanskrit
sah - Sakha
sat - Santali
sc - Sardinian
scn - Sicilian
sco - Scots
sd - Sindhi
sdc - Sassarese Sardinian
sdh - Southern Kurdish
se - Northern Sami
sei - Seri
ses - Koyraboro Senni
sg - Sango
sgs - Samogitian
sh - Serbo-Croatian
shi - Tachelhit
shi-latn - Tašlḥiyt
shi-tfng - ⵜⴰⵛⵍⵃⵉⵜ
si - Sinhala
sk - Slovak
sl - Slovenian
sli - Lower Silesian
sm - Samoan
sma - Southern Sami
sn - Shona
so - Somali
sq - Albanian
sr - Serbian
sr-ec - Serbian (Cyrillic script)
sr-el - Serbian (Latin script)
srn - Sranan Tongo
ss - Swati
st - Southern Sotho
stq - Saterland Frisian
su - Sundanese
sv - Swedish
sw - Swahili
szl - Silesian
ta - Tamil
tcy - Tulu
te - Telugu
tet - Tetum
tg - Tajik
tg-cyrl - Tajik (Cyrillic script)
tg-latn - Tajik (Latin script)
th - Thai
ti - Tigrinya
tk - Turkmen
tl - Tagalog
tly - Talysh
tn - Tswana
to - Tongan
tokipona - Toki Pona
tpi - Tok Pisin
tr - Turkish
tru - Turoyo
ts - Tsonga
tt - Tatar
tt-cyrl - Tatar (Cyrillic script)
tt-latn - Tatar (Latin script)
tum - Tumbuka
tw - Twi
ty - Tahitian
tyv - Tuvinian
tzm - Central Atlas Tamazight
udm - Udmurt
ug - Uyghur
ug-arab - Uyghur (Arabic script)
ug-latn - Uyghur (Latin script)
uk - Ukrainian
ur - Urdu
uz - Uzbek
uz-cyrl - ўзбекча
uz-latn - oʻzbekcha
ve - Venda
vec - Venetian
vep - Veps
vi - Vietnamese
vls - West Flemish
vmf - Main-Franconian
vo - Volapük
vot - Votic
vro - Võro
wa - Walloon
war - Waray
wo - Wolof
wuu - Wu Chinese
xal - Kalmyk
xh - Xhosa
xmf - Mingrelian
yi - Yiddish
yo - Yoruba
yue - Cantonese
za - Zhuang
zea - Zeelandic
zh - Chinese
zh-cn - Chinese (China)
zh-hans - Simplified Chinese
zh-hant - Traditional Chinese
zh-hk - Chinese (Hong Kong)
zh-mo - 中文(澳門)
zh-my - 中文(马来西亚)
zh-sg - Chinese (Singapore)
zh-tw - Chinese (Taiwan)
zu - Zulu
qqq - Message documentation
Format
Export for off-line translation
Export in native format
{{DISPLAYTITLE:Подпроекты/Встраивание и ПЛК}}<languages/> {| class="wikitable" |- ! Наименование !! Основание !! Состояние !! Участники !! Иконка |- <section begin=info /> | [[Special:MyLanguage/Sub-projects/Embedding and PLC|Общее встраивание OpenSCADA и программированные логические контроллеры (ПЛК). Адаптация OpenSCADA к аппаратной платформе ARM.]] || Октябрь 2008 | Внедрён во многих встраиваемых решениях и продолжает внедряться в новых, дополняется на предмет: * [[Special:MyLanguage/Using#Devices|новых решений]]; * измерений производительности для [[Special:MyLanguage/Sub-projects/Embedding and PLC#PerfSystems|процессорных систем]] использованных OpenSCADA; * свойств [[Special:MyLanguage/Sub-projects/Embedding and PLC#PerfStorages|хранилищ]], которые имеют отношение к OpenSCADA. <section end=info /> | [[User:RomanSavochenko|Роман Савоченко]] | [[File:OrangePi.png|x200px]] |- ! colspan="5" | Описание |- | colspan="5" | Проект посвящён общей концепции встраивания OpenSCADA в различное оборудование и созданию: окружения исполнения ПЛК, прошивок ПЛК и аппаратных конфигураций специализированных ПЛК. Рассматривается встраивание в системы, основанные на архитектурах x86 и ARM. Ссылки: * '''Материалы для создания прошивки архитектуры x86 и других ПЛК:''' ftp://ftp.oscada.org/OpenSCADA/PLC/ * '''Уведомление про ошибки загрузчика (propagator):''' https://bugzilla.altlinux.org/show_bug.cgi?id=17416 * '''Материалы для создания программного окружения и прошивки для различного ARM оборудования:''' [ftp://ftp.oscada.org/OpenSCADA/PLC/TionPro270 TionPro270], [ftp://ftp.oscada.org/OpenSCADA/PLC/Segnetics-SMH2Gi SMH2Gi] * '''Изначально создан:''' [http://wiki.oscada.org/Using/PLC в старой Wiki] |} __TOC__ Современные системы автоматического управления технологическими процессами (АСУ ТП) являются достаточно сложными. Условно иерархию АСУ ТП можно разделить на два уровня: нижний и верхний уровень. Нижний уровень АСУ ТП содержит полевое оборудование (датчики и исполнительные механизмы), а также программируемые логические контроллеры (ПЛК). Верхний уровень представляет из себя систему оперативной визуализации и контроля за технологическим процессом — SCADA-система. ПЛК являются ответственной частью АСУ ТП, которая выполняет функцию сбора данных полевого оборудования, вычисление и выдачу регулирующих, блокировочных и других воздействий на регулирующие органы полевого оборудования. OpenSCADA является открытой реализацией SCADA-системы, которая основана на модульной архитектуре, что позволяет строить конечные решения под различные требования. Основным назначением OpenSCADA являются системы верхнего уровня, однако высокая степень модульности, и как следствие масштабируемости, позволяет решать широкий круг задач смежных отраслей. == Programmable Logical Controllers == PLC market is saturated with wide range of products with different architecture and design. Architecturally PLC can be divided in three groups: * hard-programmable PLC and modular matching to object devices (MOD); * highly intellectual commercial PLC; * PC-compatible PLC with the free access. Жёстко-программируемые ПЛК обычно строятся на основе одно-кристальных микроЭВМ или микросхемах программируемой логики. Программа таких контроллеров или прошивается единоразово, иногда предоставляя возможность программной параметризации, или же формируется специализированными средами, наделёнными функциями компиляции бинарной прошивки среды исполнения с пользовательской программой, например [http://www.isagraf.com ISaGRAF], и [http://www.labview.com LabView]. В качестве представителя такого ПЛК можно в пример привести модули распределённого УСО фирмы [http://www.advantech.com Advantech]. Высокоинтеллектуальные коммерческие ПЛК обычно строятся на базе более мощного оборудования с архитектурой, близкой к полноценному ПК. Основным отличием от стандартного ПК-совместимого ПЛК является закрытая программная, а часто и аппаратная архитектуры. Программное окружение таких контроллеров обычно основывается на операционной системе реального времени, планирующей несколько пользовательских потоков с разделением их по приоритетам. Пользовательское программирование таких ПЛК осуществляется работой в фирменном программном окружении, формирующем, в качестве результата, бинарный код потока ПЛК. В качестве представителя такого оборудования можно привести ПЛК серии S7 фирмы [http://www.automation.siemens.com/simatic/controller/html_76/produkte/simatic-s7-400.htm Siemens]. ПК-совместимые ПЛК с открытым доступом — это группа скорее не ПЛК, прямо совместимых с ПК, а ПЛК, которые не имеют интегрированной среды исполнения и часто поставляемых без операционной системы. Архитектура таких ПЛК может быть различной, начиная от экономичных решений архитектуры x86 и заканчивая архитектурными решениями ARM и MIPS. Среду исполнения таких ПЛК обычно формируют из ПО того же класса, что и в случае с жёстко программируемыми ПЛК, в виде исполняемого бинарного файла под одну из распространённых, масштабируемых или специализированных ОС (DOS, QNX, Linux, WinCE, VxWorks). Часто встречаются и специализированные под задачу решения. В качестве представителей этого класса можно рассматривать ПЛК формфактора [[WikiPedia:PC/104|PC/104]]. Варианты конструктивного исполнения ПЛК можно условно разделить на моноблочные и модульные. Моноблочные ПЛК предоставляют фиксированную конфигурацию УСО, специализированную под ограниченный круг задач. Модульные конструкции предоставляют возможность лёгкого расширения конфигурации УСО под нужную задачу. Существуют также и гибридные конструкции, представляющие из себя моноблок, способный расширять своё УСО за счёт внешних блоков УСО, подключаемых по одному из стандартных интерфейсов, например, по RS-485. == OpenSCADA как среда исполнения ПЛК == Архитектура OpenSCADA позволяет создавать конечные решения под различные требования и ресурсы путём модульного расширения. Эта возможность оказывается полезной в свете ограниченности ресурсов ПЛК. Кроме того, учитывая постоянное развитие аппаратного обеспечения, а также непрерывное повышение интеграции и экономичности современных микропроцессорных решений, OpenSCADA позволяет последовательно расширять функциональность ПЛК, сохраняя преемственность со старыми решениям. Например, на основе OpenSCADA можно строить решения с минимальными требованиям на уровне: CPU 100 МГц, память и флешь-диск по 30 МБ. Как было отмечено выше ресурсы современных ПЛК могут колебаться в достаточно больших пределах, причём ПЛК фиксированного типа, построенные на однокристальных микроЭВМ, всё дальше вытесняются в узко-специализированные области развитыми ПК-архитектурами. Такая тенденция делает всё более интересной возможность создания унифицированной открытой платформы для реализации среды исполнения ПЛК на основе унифицированных ПК-платформ. OpenSCADA позволяет реализовать идею создания открытой платформы для реализации среды исполнения ПЛК. Уже сейчас можно реализовывать окружения ПЛК, ничем не уступающее коммерческим интеллектуальным контроллерам, а во многом и превосходящие их за счёт возможности интеграции функций, характерных для SCADA систем, в окружение ПЛК, расширяя функциональные и пользовательские характеристики ПЛК и приводя его на единую со SCADA кодовую базу, а также оптимизируя стоимость конечного решения. Перечислим функции, решаемые OpenSCADA в рамках окружения ПЛК: * сбор данных различного спектра оборудования в синхронном, асинхронном или блочных режимах; * пользовательские процедуры обработки данных и выдачи управляющих воздействий на Java-подобном языке высокого уровня и на формальном языке блочных схем (Soft-logic); * архивирование данных, начиная от временных буферов в памяти и заканчивая полноценными архивами на файловой системе или в БД различной дискретизации и глубины; * интеграция в инфраструктуру АСУ ТП путём реализации стандартных протоколов взаимодействия (ModBus, SNMP, OPC UA ...); * интеграция с СУБД для экспорта данных, хранения конфигурации или архивов; * свободная конфигурация и администрирование сети ПЛК как посредством оперативного интерфейса станции администрирования, так и посредством Web-интерфейса; * возможность реализации панелей оператора с интерфейсом контроля и управления на встроенной Touch-панели; * предоставление Web-интерфейсов оперативного и диспетчерского контроля. == Архитектура x86, прошивка и создание программного окружения ПЛК == Архитектура x86 сравнительно недавно стала позиционироваться как встраиваемая и реальные решения на её основе, в этой области, редко обладают ресурсами "< i386", недостаточными для исполнения полноценной ОС и развитого окружения. По этой причине, а также по причине большей унификации архитектуры, индивидуальная сборка ядра Linux и базовых программ окружения ОС осуществляется достаточно редко, что обычно характерно для архитектуры ARM. Более интересным и практичным для x86, для широкого спектра оборудования, является сборка прошивок со сжатой корневой файловой системой (КФС). Однако по прежнему возможна индивидуальная сборка прошивок с помощью систем сборок вроде "BuildRoot" или "PTXDist", ниже. Также возможна и прямая установка дистрибутива Linux. === {{Anch|ALTLinux|Дистрибутив ALTLinux, инструменты для сборки рабочих окружений прошивок со сжатой КФС}} === Перед реализацией прошивки ПЛК, данного раздела, ставились следующие требования: * Компактность. В связи с прямой зависимостью цены на промышленные флеш-диски от их объёма, а также реальным отсутствием необходимости частого обновления, образ прошивки нужно упаковывать, достигнув уровня компактности 8-50МБ на среду исполнения ПЛК в окружении полноценной ОС. * Унифицированный исходный репозиторий. Поскольку прошивка не является чем-то немодифицируемым, нерасширяемым и окончательно фиксированным, то в её основе должен лежать реальный, развивающийся-сопровождающийся, репозиторий пакетов ОС. Это позволит продолжительное время формировать обновления и расширения, не поддерживая при этом опосредованный репозиторий. * Отлаженная и простая процедура сборки. Учитывая тот факт, что конфигурация прошивки может некоторое время стабилизироваться, кроме того в компонентах ОС и OpenSCADA будут обнаруживаться и устраняться ошибки, то процедура сборки прошивки не должна быть обременительна, а напротив — легко адаптируемой. * Прозрачная реализация режима записи в дереве ОС. Хотя прошивка и подразумевает создание упакованного немодифицируемого образа прошивки, специфика работы среды исполнения ПЛК подразумевает модификацию БД и ведение архивов. Кроме того, наличие возможности коррекции исходной конфигурации является важным требованием. * Надёжность и устойчивость к внезапным выключениям. Спецификой эксплуатации ПЛК является, как правило, отсутствие возможности корректного выключения, а также практическая реальность ситуаций мгновенного и непредсказуемого пропадания питания. ПЛК в таких ситуациях должен сохранять работоспособность, в смысле содержать журналируемую ФС и обеспечивать её проверку и автоматическое устранение ошибок. * Условное разделение конфигурации ПЛК на два типа: ** ПЛК без локального дисплея, возможно с простым текстовым табло. ** Touch-панели c функцией ПЛК. Учитывая вышеприведенные требования для создания прошивки был выбран инструмент создания дистрибутивов [http://www.altlinux.org/Mkimage mkimage] ALTLinux. '''mkimage''' — инструмент для сборки, по шаблону, образов системы, основанной на Sisyphus. В качестве исходного набора шаблонов был взят набор шаблонов формирования дистрибутивов ALTLinux по адресу git://git.altlinux.org/people/boyarsh/packages/mkimage-profiles-desktop командой: <syntaxhighlight lang="BASH"> git clone git://git.altlinux.org/people/boyarsh/packages/mkimage-profiles-desktop </syntaxhighlight> За основу формирования ПЛК-шаблона был взят стандартный "rescue", как наиболее компактный и близкий к целевой задаче ПЛК. Первичная сборка осуществлялась на основе пакетной базы дистрибутива [http://www.altlinux.ru/products/5th-platform ALTLinux 5.1], где присутствует ядро реального времени от [http://www.xenomai.org XENOMAI]. Для получения ряда специфических пакетов нужно подключить репозиторий "ALTLinux 5.1" от проекта OpenSCADA: <syntaxhighlight lang="BASH"> rpm ftp://ftp.oscada.org/ALTLinux/5.1 openscada main </syntaxhighlight> ==== Сборка ==== В первую очередь создавалась конфигурация ПЛК без локального дисплея, в виду наличия оборудования такого типа и отсутствия оборудования для Touch-панелей. Новый шаблон ПЛК был назван "plc" и тестировался на платах формфактора PC/104 [[Special:MyLanguage/Using/Kontron_MOPSlcdLX|MOPSlcdLX]] фирмы [http://emea.kontron.com Kontron], [[Special:MyLanguage/Using/Diamond_Systems|ATH400-128]] фирмы [http://www.diamondsystems.com Diamond Systems] и модульного ПЛК [[Special:MyLanguage/Using/ICPDAS_LP8x81|LP-8781]] фирмы [http://www.icpdas.com 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". Процедура создания прошивки из шаблона следующая: <syntaxhighlight lang="BASH"> # Создание скрипта конфигурации "configure" ./autoconf # Конфигурация сборщика для генерации образов дисков ./configure --with-imagetype=flash # Сборка образа make plc.cd </syntaxhighlight> В результате получаем выходную директорию в "profiles/out/" вида: <syntaxhighlight lang="BASH"> syslinux/ # директория загрузчика syslinux alt0/ # файлы загрузчика full.cz # образ системы первичной инициализации vmlinuz # ядро ОС Linux syslinux.cfg # конфигурационный файл загрузчика plс # образ упакованной корневой файловой системы с ОС, OpenSCADA и другими утилитами </syntaxhighlight> ==== Инсталляция ==== Загружать прошивку можно на: USB-flash, HDD и SSD. Однако в случае с USB-flash может быть проблема с ожиданием инициализации USB-подсистемы и нужно будет немного "побегать" по диалогам загрузчика. Файловая система может быть FAT или EXT2/3. В случае с EXT3 монтирование корня производится как EXT2, из-за проблем в инициализаторе. В случае с EXT2/3 нужно будет использовать не загрузчик '''syslinux''', а '''extlinux''', конфигурация которого впрочем почти ничем не отличается. Далее монтируем носитель и размещаем на нём файлы из выходной директории, следующим образом. В случае с FAT и '''syslinux''': <syntaxhighlight lang="BASH"> syslinux/ # директория загрузчика "syslinux" alt0/ # файлы загрузчика full.cz # образ системы первичной инициализации vmlinuz # ядро ОС Linux syslinux.cfg # конфигурационный файл загрузчика plс # образ упакованной корневой файловой системы с ОС, OpenSCADA и другими утилитами work # файловая система ext3 с рабочими данными </syntaxhighlight> В случае с EXT2/3 и '''extlinux''': <syntaxhighlight lang="BASH"> extlinux/ # директория загрузчика "extlinux" (переименовать "syslinux") alt0/ # файлы загрузчика full.cz # образ системы первичной инициализации vmlinuz # ядро ОС Linux extlinux.conf # конфигурационный файл загрузчика (переименовать syslinux.cfg) plс # образ упакованной корневой файловой системы с ОС, OpenSCADA и другими утилитами work # файловая система EXT3 с рабочими данными </syntaxhighlight> Для обеспечения надёжного функционирования рабочие данные размещаются в файле "work" с файловой системой EXT3. Файловая система этого файла проверяется на целостность при инициализации. Создаётся этот файл следующим образом: <syntaxhighlight lang="BASH"> # Создание файла рабочих данных на 200МБ dd if=/dev/zero of=./work bs=1024 count=204800 # Создание файловой системы EXT3 в файле mkfs.ext3 -m 0 work </syntaxhighlight> В случае с файловой системой EXT2/3 на целевом диске можно файл "work" не создавать. Тогда рабочие данные будут размещаться в директории root целевого диска. [[File:at.png]] Это ненадёжное решение, поскольку корневая файловая система целевого диска становится нестатичной, а проверять её нет возможности, ввиду раннего монтирования в "ro" и потенциальной ненадёжности проверки ФС, смонтированной в "ro", а так же невозможности перемонтировать как EXT3. Следующим этапом является конфигурация и инициализация загрузчика. Для конфигурации загрузчика нужно отредактировать файл "syslinux/syslinux.cfg" или "extlinux/extlinux.conf" следующим образом: <syntaxhighlight lang="BASH"> default plc prompt 1 timeout 200 implicit 1 label plc kernel alt0/vmlinuz # Использовать в случае идентификации загружаемого раздела по метке append initrd=alt0/full.cz live lowmem fastboot stagename=plc showopts automatic=method:disk,label:PLC # Использовать в случае идентификации загружаемого раздела по идентификатору # append initrd=alt0/full.cz live lowmem fastboot stagename=plc showopts automatic=method:disk,uuid:4824-271E </syntaxhighlight> В случае выбора идентификации загружаемого раздела по индивидуальному идентификатору, узнать его для нашего раздела можно командой: '''blkid'''. В случае с меткой эта задача несколько сложнее поскольку делается она для разных файловых систем по разному. Для файловых систем EXT2/3 это делается утилитой '''e2label'''. Например, так: '''$ e2label /dev/sdb1 PLС'''. Для файловой системы FAT это делается набором утилит из комплекта '''mtools''' или с помощью '''parted''', что проще. С помощью '''mtools''' это делается следующим образом: <syntaxhighlight lang="BASH"> # Редактируем /etc/mtools.conf на предмет добавления строки: drive c: file="/dev/sdb1" # Где /dev/sdb1 загрузочный раздел целевого диска # Устанавливаем метку раздела mlabel c:PLС </syntaxhighlight> Теперь можем инициализировать загрузчик: <syntaxhighlight lang="BASH"> # Для "syslinux" syslinux /dev/sdb1 #предварительно раздел нужно размонтировать # Для "extlinux" (путь указывает на точку монтирования раздела целевого диска /media/PLС) extlinux --install /media/PLС/extlinux </syntaxhighlight> На этом с загрузкой и инициализацией прошивки всё. Если полученный диск не грузится то: * Отсутствует флаг "Загрузочный" на рабочем разделе. * Некорректен или повреждён "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); ** интерфейс управления OpenSCADA (порт 10005). ==== OpenSCADA ==== В качестве среды исполнения ПЛК используем OpenSCADA. Для данного случая возьмём сборку с отдельными пакетами на каждый модуль и укажем для установки виртуальный пакет "openscada-plc", который содержит зависимости на все пакеты OpenSCADA, обычно используемые для данной конфигурации. Пакет графической библиотеки GD2 был пересобран без поддержки формата графического файла "xpm" и получил название "libgd2-noxpm". Пересборка делалось для того чтобы исключить тяжелые зависимости на библиотеки графического интерфейса XOrg. В результате получена среда исполнения ПЛК с поддержкой: * БД: ** [[Special:MyLanguage/Modules/SQLite|SQLite]]. * Транспорты: ** [[Special:MyLanguage/Modules/Serial|Последовательные интерфейсы]]; ** [[Special:MyLanguage/Modules/Sockets|TCP, UDP и UNIX сокеты]]; ** [[Special:MyLanguage/Modules/SSL|Слой безопасных сокетов (SSL)]]. * Транспортные протоколы: ** [[Special:MyLanguage/Modules/HTTP|HTTP]]; ** [[Special:MyLanguage/Modules/SelfSystem|Собственный протокол контроля OpenSCADA]]; ** [[Special:MyLanguage/Modules/UserProtocol|Пользовательский протокол]]. * Источники данных: ** [[Special:MyLanguage/Modules/JavaLikeCalc|Вычислитель на Java-подобном языке высокого уровня]]; ** [[Special:MyLanguage/Modules/BlockCalc|Вычислитель функциональных блоков]]; ** [[Special:MyLanguage/Modules/LogicLev|Контроллеры логического уровня]]; ** [[Special:MyLanguage/Modules/ModBus|Различные ПЛК по протоколу ModBus (RTU,ASCII,TCP)]]; ** [[Special:MyLanguage/Modules/System|Данные ОС]]; ** [[Special:MyLanguage/Modules/ICP_DAS|Оборудование "ICP DAS"]], для контроллеров LP-8x81. * Архивирование: ** [[Special:MyLanguage/Modules/FSArch|на файловую систему]]. * Пользовательские интерфейсы: ** [[Special:MyLanguage/Modules/VCAEngine|Движок среды визуализации и управления (СВУ)]]; ** [[Special:MyLanguage/Modules/WebVision|Визуализатор СВУ на основе Web-технологий]]; ** [[Special:MyLanguage/Modules/WebCfgD|Конфигуратор OpenSCADA на основе Web-технологий]]. Конфигурация OpenSCADA запускается в режиме демона, в локали "en_US.UTF-8" (ещё доступны локали "uk_UA.UTF-8" и "ru_RU.UTF-8"), с использованием локальной БД SQLite, предоставляя по умолчанию сетевые сервисы: * конфигурация и среда исполнения через Web (порт 10002); * интерфейс управления OpenSCADA (порт 10005). ==== Детали реализации ==== В этом разделе рассмотрим детали дерева ОС прошивки, скрипт инициализации "rc.sysinit.plc" и скрипт подготовки дерева ОС прошивки. Для построения прошивки ПЛК использовался следующий перечень пакетов: <syntaxhighlight lang="BASH"> interactivesystem ### Startup kernel-image-@KERNEL@ rootfiles startup startup-plc SysVinit hwclock ### Common coreutils glibc-locales glibc-nss glibc-utils glibc-timezones sysfsutils sysklogd util-linux schedutils ### Disk utils hdparm ### Applications binutils pciutils procps shadow-suite ### Applications/Archiving gzip ### Applications/File less ### Filesystem utils e2fsprogs ### Applications/Networking etcnet iputils mailx openssh-server dhcpcd ntpd ### Applications/Shells bash mc udev dbus hal libgd2-noxpm fonts-ttf-liberation lm_sensors nut nut-driver nut-server watchdog ### OpenSCADA Console #openscada-plc ## OpenSCADA GUI openscada-visStation autologin icewm wm-select xorg-x11-server #xorg-drv-geode xorg-x11-utils fonts-ttf-dejavu fonts-bitmap-terminus </syntaxhighlight> Перечень модулей ядра Linux, стадии предварительной инициализации, с целью уменьшения размера образа инициализации был уменьшен до списка: <pre style="white-space: pre-wrap;"> loop.ko mtouch.ko pcmcia_core.ko rsrc_nonstatic.ko yenta_socket.ko scsi_mod.ko libusual.ko ide-disk.ko ide-core.ko sd_mod.ko usbcore.ko ehci-hcd.ko ohci-hcd.ko uhci-hcd.ko appletouch.ko usbhid.ko usbtest.ko usb-storage.ko mbcache.ko jbd.ko ext2.ko ext3.ko fat.ko nls_base.ko nls_cp866.ko nls_koi8-r.ko nls_utf8.ko zlib_inflate.ko squashfs.ko unionfs.ko vfat.ko pata_cs5536.ko amd74xx.ko </pre> В скрипте подготовки дерева были добавлены функции: * смена наименования дистрибутива; * подмена скрипта инициализации на "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". В результате этих мероприятий таблица монтирования конечного дерева ПЛК приняла вид: <syntaxhighlight lang="BASH"> cat /etc/mtab #rootfs / rootfs rw 0 0 #udev /dev tmpfs rw,size=10240k,mode=755 0 0 #/dev/hda1 /image vfat rw,fmask=0022,dmask=0022,codepage=cp866,iocharset=utf8,check=r 0 0 #/dev/loop0 / squashfs ro 0 0 #/proc /proc proc rw 0 0 #sysfs /sys sysfs rw 0 0 #tmpfs /tmp tmpfs rw 0 0 #/dev/loop1 /image/root ext3 rw,noatime,nodiratime,errors=continue,data=ordered 0 0 #/image/root/etc /etc unionfs rw,dirs=/image/root/etc=rw:/etc=ro 0 0 #/image/root/var /var unionfs rw,dirs=/image/root/var=rw:/var=ro 0 0 #/image/root/root /root unionfs rw,dirs=/image/root/root=rw:/root=ro 0 0 #/image/root/home /home unionfs rw,dirs=/image/root/home=rw:/home=ro 0 0 #/image/root/mnt /mnt unionfs rw,dirs=/image/root/mnt=rw:/mnt=ro 0 0 #/image/root/lib /lib unionfs rw,dirs=/image/root/lib=rw:/lib=ro 0 0 #devpts /dev/pts devpts rw,nosuid,noexec,gid=5,mode=620 0 0 #shmfs /dev/shm tmpfs rw,nosuid 0 0 </syntaxhighlight> ==== Настройка графического интерфейса ==== Один из вариантов прошивки собирается с графическим интерфейсом, который, однако нужно настроить для получения автоматического запуска со средой визуализации OpenSCADA. Кроме того нужно отметить, что прошивка с графическим интерфейсом не содержит всех драйверов и может потребоваться её пересборка под нужное оборудование. После загрузки и входа в консоль нужно сконфигурировать XServer, автоматический графический вход, запуск графического окружения и автоматический запуск OpenSCADA из окружения IceWM: <syntaxhighlight lang="BASH"> # Загрузка шаблона конфигурационного файла XOrg ftp://ftp.oscada.org/OpenSCADA/PLC/xorg.conf, # помещение его в директорию /etc/X11 # !! Редактирование файла /etc/X11/xorg.conf под собственные нужды. # Добавление переключения раскладок клавиатуры: Английская, Украинская, mRussian echo "-option grp:lctrl_lshift_toggle -variant ,winkeys,winkeys -layout us,ua,ru -model pc104" > /etc/X11/xinit/Xkbmap # Пробный запуск startx # Конфигурация автоматического графического входа путём создания файла /etc/sysconfig/autologin с содержимым: echo "AUTOLOGIN=yes" > /etc/sysconfig/autologin echo "USER=admin" >> /etc/sysconfig/autologin echo "EXEC=/usr/bin/startx" >> /etc/sysconfig/autologin # Включение запуска графической подсистемы при загрузке chkconfig dm on # Запуск графической подсистемы service dm start # !! Дальнейшие действия осуществляем в терминале из графического окружения # Создание конфигурационного файла автоматического запуска OpenSCADA из окружения IceWM mkdir ~/.icewm echo "#!/bin/sh" > ~/.icewm/startup echo "xset -dpms; xset s off" >> ~/.icewm/startup echo "/usr/bin/openscada_start" >> ~/.icewm/startup </syntaxhighlight> ==== {{Anch|ALTLinuxT6|Пакетная база ALTLinux T6}} ==== Следующим этапом в создании прошивок стал переход на пакетную базу дистрибутива [http://www.altlinux.ru/products/6th-platform 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: <syntaxhighlight lang="BASH"> rpm ftp://ftp.oscada.org/ALTLinux/t6 openscada main </syntaxhighlight> Процедура создания прошивки из шаблона фактически не изменилась: <syntaxhighlight lang="BASH"> # Создание скрипта конфигурации "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 </syntaxhighlight> Содержимое выходной директории с образом и установка прошивки на файловую систему FAT и EXT2/3/4 отличается только переименованием файла архива ФС с "plc" в "live". Установка ISO-образа на USB-flash, HDD, SSD выполняется командой '''dd''': <syntaxhighlight lang="BASH"> dd if=LP8x81-ALTLinuxT6-OpenSCADA_0.8.0.6-i586-plc.iso of=/dev/sd{x} bs=4096 </syntaxhighlight> Вместо файла "work" нужно создать раздел EXT3 с меткой "alt-live-storage", если это не ISO-образ. Создавать новый раздел можно с помощью '''fdisk''', если FAT раздел был создан не на всём доступном пространстве диска, или с помощью '''parted''', где раздел FAT можно уменьшить. За деталями создания раздела отошлём к документации на '''fdisk''' или '''parted'''. Конфигурация файлов "syslinux/syslinux.cfg" и "extlinux/extlinux.conf" не изменилась, кроме смены имени архива ФС с "plc" на "live". В результате получаем прошивку размером от 60МБ, обеспечивающую: * Загрузку в течении 25 секунд от включения контроллера, включая инициализацию BIOS. * Проверку и восстановление журнала рабочей файловой системы "root" в "alt-live-storage". * Хранение пользовательских данных и изменений прошивки, а также новых и обновленных пакетов программ, в разделе "alt-live-storage". * Автоматическую настройку сети по DHCP (или 192.168.0.1), для первого интерфейса. * Доступ к контроллеру по SSH и удобный интерфейс работы, включая mc. Пароли отсутствуют, а пользователь "root" имеет доступ для подключения по SSH. * Синхронизацию времени посредством NTP. * Исполнение OpenSCADA с доступом посредством сетевых интерфейсов: ** конфигурация и среда исполнения через Web (порт 10002); ** интерфейс управления OpenSCADA (порт 10005). Для построения прошивки ПЛК использовался следующий перечень пакетов: <syntaxhighlight lang="BASH"> # INIT 3 # acl usbutils screen acpid acpi anacron vim-minimal mc sound-scripts alsa-utils apt udev udev-initramfs dbus schedutils pciutils setserial lm_sensors3 rsync interactivesystem su system-report mtools netcat strace binutils syslogd glibc-utils glibc-gconv-modules glibc-nss glibc-timezones glibc-locales shadow-utils keyutils lsof sudo # INIT3: BLOCK DEVICES # hdparm fdisk ms-sys syslinux dosfstools e2fsprogs #network etcnet dhcpcd xinetd iftop lftp wget iptables ntp ntpd ntpdate tcpdump multipath-tools openssh-clients openssh-server ppp-pppoe #### LP kernel-modules-icp-@KERNEL_MOD@ #### Console OpenSCADA libgd2-noxpm openscada-plc openscada-DAQ.DiamondBoards openscada-DAQ.ICP_DAS openscada-DAQ.Comedi </syntaxhighlight> Перечень модулей ядра Linux, стадии предварительной инициализации, был несколько изменён и составил: <pre style="white-space: pre-wrap;"> loop.ko mtouch.ko pcmcia_core.ko rsrc_nonstatic.ko yenta_socket.ko scsi_mod.ko libusual.ko ide-disk.ko ide-core.ko ide-gd_mod.ko sd_mod.ko usbcore.ko ehci-hcd.ko ohci-hcd.ko uhci-hcd.ko appletouch.ko usbhid.ko usbtest.ko usb-storage.ko mbcache.ko jbd.ko ext2.ko ext3.ko fat.ko nls_base.ko nls_cp866.ko nls_koi8-r.ko nls_utf8.ko zlib_inflate.ko squashfs.ko unionfs.ko aufs.ko vfat.ko pata_via.ko pata_cs5536.ko amd74xx.ko </pre> Скрипт подготовки дерева "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), в связи с выносом его в корень загрузочного раздела. ==== {{Anch|RT|Ядро реального времени}} ==== Для ряда задач ПЛК важным, часто и критическим, критерием окружения является его уровень обеспечения реального времени (RealTime), т.е. возможность работы задач согласно приоритетам реального времени и обеспечение реакции на события согласно этим приоритетам. Ядро Linux само по себе предоставляет POSIX политики планирования в реальном времени "SCHED_FIFO" и "SCHED_RR" с диапазоном приоритетов (0...100). Однако важный критерий "Частота таймера и время реакции на него" [https://www.osadl.org/Realtime-Linux.projects-realtime-linux.0.html до версий ядер Linux 2.6.24 были очень низки], по меркам систем реального времени. В современных ядрах Linux (> 2.6.24) обеспечена поддержка таймеров высокого разрешения (HPET), что уменьшило время реакции на таймер до уровня 100 микросекунд, однако стабильность этого времени реакции не обеспечена. Для обеспечения стабильности реакции на таймер на уровне 60 микросекунд, а также ряда других критериев реального времени, на данный момент, нужно ядро собирать с одним из расширений реального времени. В дистрибутивах [http://www.altlinux.ru ALTLinux] замечено ядро 2.6.29-rt-up, которое собрано с расширением реального времени [http://www.xenomai.org XENOMAI]. В других дистрибутивах, например [http://www.opensuse.org OpenSuSE], замечены даже продукты с такими расширениями. На данный момент более высокие показатели реального времени обеспечивает расширение [https://rt.wiki.kernel.org The Real Time Preempt Patch], при включении полной поддержки (CONFIG_PREEMPT_RT), процесс сборки и результаты работы Linux ядер с которым будут отслеживаться в этом разделе. Для тестирования уровня реального времени тех или иных ядер будем пользоваться утилитой "[https://rt.wiki.kernel.org/index.php/Cyclictest 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, LP-8781): ** ''нагрузка 0%'': Avg: 37 us; Max: 152 us ** ''нагрузка 100%'': Avg: 37 us; Max: 191 us * Ядро дистрибутива ALTLinux T6 (3.4.45-un-def, LP-8781): ** ''нагрузка 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. Это ядро собрано с расширением [http://www.xenomai.org XENOMAI] и [http://aufs.sourceforge.net AUFS], что позволяет использовать его в прошивках с упакованной КФС, что и сделано для ПЛК [[Special:MyLanguage/Using/ICPDAS_LP8x81|LP-8x81]]. Результаты тестирования этого ядра с различными патчами реального времени и без: * ''LP-8781 (XENOMAI)'' ** ''нагрузка 0%'': Avg: 26 us; Max: 136 us (замечены сбросы до 1 мс, похоже из-за нестабильности источника часов "tsc", причем "acpi_pm" тут ещё хуже) ** ''нагрузка 100%'': Avg: 24 us; Max: 3655 us * ''LP-8781 (CONFIG_PREEMPT_NONE)'' ** ''нагрузка 0%'': Avg: 29 us; Max: 71 us ** ''нагрузка 100%'': Avg: 28 us; Max: 117 us (замечено соскальзывание на непрерывное нарастание) * ''LP-8781 (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, для "LP-8x81". Также стоит вопрос сборки ядра 2.6.33 по той-же причине, но для "LP-8x81 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, на LP-8781 и "AMD Turion" проблем не выявлено (возможно эта проблема из-за отсутствия HPET на PLX8). # На первый взгляд ядро работает нормально, но замечено соскальзывание на непрерывное нарастание времени запаздывания. # Выполнена адаптация ядра для бинарной совместимости с модулями "slot" и "icp" от ICP_DAS. Модуль "8250_linpac" падает при загрузке, а "icpdas_8250" имеет множество неразрешённых символов — нужно эти модули пересобирать или пробовать интерфейсы > COM2 инициализировать через '''setserial''' — модули пересобраны, спасибо Golden Wang (тех. поддержка ICPDAS). # Новое ядро установлено под высокую нагрузку, конфигурацией проекта [[Special:MyLanguage/Using/Kramatorsk_Ball_Mills|САУ шаровых барабанных мельниц]]: :* Сбой сети с драйвером "via_rhine", после 4 суток работы — сбой ожидаем, собран драйвер "rhinefet", испытание продолжено. :* На драйвере "rhinefet" система под нагрузкой проработала три недели. Однако замечено, что прерывание 11, на котором висит почти всё стандартное оборудование (USB, Ethernet и может ещё чего), отключается и сеть работает в режиме "Опрос", что медленнее. Возможно отключение этого прерывания происходит и с "via_rhine", а он не может работать в режиме "Опрос", почему и пакеты в/из сети не ходят. Проблема связана со сбоем и генераций необработанных прерываний одним из оборудования на прерывании 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 также было замечено замедление сети с двумя этими адаптерами после более двух недель работы. ::[[File:at.png]] Т.е. это оборудование сломано для работы двух адаптеров и в этом ПЛК вы можете использовать только один, для стабильной работы! :* 06.09.2017: Неполное исправление в последовательном драйвере ICP-DAS, приводит к неработоспособности использования более двух последовательных портов, похоже уже полностью исправлено в последних версиях, что наблюдалось на LX-8x31. [[File:at.png]] Полученное ядро, переименованное в "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 * ''LP-8781'' ** ''нагрузка 0%'': Avg: 37 us; Max: 88 us ** ''нагрузка 100%'': Avg: 34 us; Max: 108 us * ''LP-8781-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, разве только не сразу, а на примерно пятом потоке. [[File:at.png]] На данный момент ядро 2.6.33 в связке с CONFIG_PREEMPT_RT и AUFS нерабочее. Следовательно если нужна будет работа на "LP-8x81 Atom" то рекомендуется использовать исходное Linux окружение, собрав и установив OpenSCADA туда. === {{Anch|Debian|Дистрибутив Debian, инструменты для сборки робочих окружений прошивок со сжатой КФС}} === [[File:At.png]] Ожидание формирования == {{Anch|ARM|Архитектура АРМ, прошивка и создание программного окружения ПЛК}} == Широкое распространение во встраиваемых решениях получила архитектура [[WikiPedia:ARM_architecture|ARM]] благодаря её сравнительно высокой производительности в сочетании с низким энергопотреблением и ценой. С целью выполнения плановой задачи обеспечения аппаратной многоплатформенности OpenSCADA была адаптирована к сборке и работе на оборудовании ARM-архитектуры. Так, были выполнены проекты [[Special:MyLanguage/Using/Nokia_Linux|Сборка проекта OpenSCADA для мобильных устройств фирмы Nokia (N800, N900, N950)]] и [[Special:MyLanguage/Using/ICPDAS_LP5xxx|Сборка OpenSCADA и прошивки для ARM-контроллеров фирмы ICP DAS (LP-5141)]]. Целью данного раздела является систематизация методик и отслеживание проблем создания сборок OpenSCADA и прошивок программного окружения в целом для различного встраиваемого оборудования архитектуры ARM. Особенностью ARM архитектуры является отсутствие обязательной аппаратно-зависимой программной системы первичной инициализации и конфигурации оборудования, характерной для x86 архитектур — BIOS, а структура аппаратной конфигурации обычно содержит: центральный процессор (CPU), встроенную оперативную и флешь-память, а также ряд встроенного оборудования на стандартных шинах системного уровня. При этом флешь и оперативная память находятся в общем адресном сегменте. Инициализация такой системы программным окружением осуществляется загрузкой исполняемого кода непосредственно на встроенную флешь-память. Для работы вычислительных функций OpenSCADA да и многих сопутствующих библиотек и программ важна производительность вычислений с плавающей точкой. Особенностью процессоров архитектуры ARM является простота ядра процессора и необязательное наличие расширений вроде математического сопроцессора. Как следствие производительность на операциях с плавающей точкой сильно зависит от конкретно взятого процессора, а также способа эмуляции вычислений с плавающей точкой, в случае отсутствия сопроцессора вообще. На процессорах ARM-архитектуры встречаются два формата работы с плавающей точкой: FPA и VFP. Формат FPA является устаревшим и встречался в виде аппаратной реализации с ядрами ARM до семейства [[WikiPedia:StrongARM|StrongARM]](ARMv4). Ядра ARM семейства [[WikiPedia:XScale|XScale]](ARMv5TE) вообще не комплектовались математическим сопроцессором. А ядра ARM, начиная с семейства [[WikiPedia:ARM11|ARM11]](ARMv6) комплектуются математическим сопроцессором формата VFP. В тоже время ARM процессора с архитектурой версии ARMv5 до сих пор широко распространены, а значит вопрос производительности математических вычислений для них сводится к производительности эмуляции формата FPA или VFP. В случае с окружением ОС Linux эмуляция FPA обычно осуществляется ядром Linux путём обработки исключений процессора при вызове FPA команд. Программная эмуляция в математической библиотеке обычно встречается с форматом VFP для чего требуется пересборка всех программ. При этом эмуляция FPA посредством исключений хуже по производительности программной эмуляции VFP почти на порядок. Сравнить производительность вычислений с плавающей точкой на разных архитектурах, процессорах и способах эмуляции можно разделе "[[#PerfSystems|Продуктивность вычислительных систем]]". Типовое программное окружение на основе ОС Linux, для оборудования на основе ARM, представляет из себя: Загрузчик [[WikiPedia:Das_U-Boot|UBoot]], Ядро Linux и Корневую Файловую Систему (КФС). Загрузчик UBoot грузится в нулевой сектор флешь-памяти, а его настройки хранятся в первом. Со второго сектора загружается код ядра, а сразу после него КФС. КФС обычно оформляется в виде файловой системы [[WikiPedia:JFFS2|JFFS2]] или [[WikiPedia:UBIFS|UbiFS]], которые оптимизированы для работы на блочных устройствах — флешь памяти с ограниченным ресурсом записи. Примеры разбивки блочного устройства (флешь-памяти) для LP-5141 и TionPro270 представлены ниже: <syntaxhighlight lang="BASH"> # 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" # TionPro270 cat /proc/mtd #dev: size erasesize name #mtd0: 00080000 00040000 "Bootloader" #mtd1: 00400000 00040000 "Kernel" #mtd2: 01b80000 00040000 "Filesystem" </syntaxhighlight> Корневая файловая система содержит типовое UNIX-дерево с рабочими программами, библиотеками и другими файлами. Основой любой программы или библиотеки являются системные библиотеки [[WikiPedia:Glibc|GLibC]] или [[WikiPedia:UClibc|UClibC]]. OpenSCADA адаптирована для сборки и работы с "GLibC" версии >= 2.3. "UClibC", созданная как облегчённая версия "GLibC" для встраиваемых систем, содержит ряд ограничений и до сих пор не реализует или содержит ошибки в реализации для ряда функций. КФС и программное окружение на основе Linux может поставляться вместе с ARM-оборудованием и содержать закрытые бинарные библиотеки, модули ядра Linux и т.д. В таком случае независимая сборка и замена исходного программного окружения становится непрактичной, поскольку приводит к потере исходной функциональности. Однако часто встречается ситуация поставки оборудования ARM без исходного программного окружения или с окружением, которое не содержит закрытого кода и которое может быть заменено. Примером первого случая является контроллер [[Special:MyLanguage/Using/ICPDAS_LP5xxx|LP-5141]] и подобные фирмы "ICP DAS", которые содержат бинарную сборку библиотеки API специализированного оборудования (libi8k) и модули ядра Linux для его инициализации. Примером второго случая является одноплатный компьютер [[Special:MyLanguage/Using/ZEO_Tion-Pro270|Тион-Про270]], создание программного окружения и сборки OpenSCADA для архитектуры ARM которого будем рассматривать ниже. == Architecture MIPS == The [[WikiPedia:MIPS_architecture|MIPS]] architecture [[Special:MyLanguage/Using/NetGear_R6220|obtained]] due to it mets in embedded solutions like to WLan Routers and for OpenSCADA tightly embeding there. Currently the architecture is not interested highly due to in March 2021, MIPS (the developer company) announced that the development of the MIPS architecture had ended as the company is making the transition to [[WikiPedia:RISC-V|RISC-V]]. When CPU in LE byte order then there is no difference in OpenSCADA working comparing with ARM besides of missing of acceleration the float point operations. == {{Anch|OpenWrt|Дистрибутив OpenWrt}} == OpenWrt это высоко-расширяемый GNU/Linux дистрибутив для встраиваемых устройств (обычно это роутеры беспроводных сетей). В отличии от других дистрибутивов для роутеров, OpenWrt собирается с самого основания чтобы быть полнофункциональной и легко модифицируемой операционной системой для Вашего роутера. На практике это означает, что в отличии от большинства других дистрибутивов Вы можете иметь все функции, которые Вам необходимы, без распухания и с самым новым ядром Linux. OpenWrt в основном распространяется в готовых прошивках или предустановленным на соответствующее оборудование. Для сборки и пересборки, из выходных текстов, прошивки в целом или отдельных пакетов этот проект предоставляет SDK, основанное на несколько изменённой сборочной системе "[[#BuildRoot|BuildRoot]]". Для использования этого SDK Вы можете предварительно построить его с нуля и с нужной цепью инструментов (toolchain) или получить готовый для соответствующей версии OpenWrt и платформы на счёт чего Вы можете прочитать в деталях [https://wiki.openwrt.org/doc/howto/obtain.firmware.sdk тут]. OpenWrt использует пакеты IPKG и утилиту пакетного менеджера "opkg", соответственно Вы можете установить готовые пакеты, предварительно их загрузив на это оборудование, следующим образом: <syntaxhighlight lang="BASH"> opkg install openscada_0.9+r2517-1_mxs.ipk </syntaxhighlight> Поскольку сборочная система BuildRoot была несколько изменена для OpenWrt и в основном в в описании пакетов и добавлением репозитория "feeds", правила сборки OpenSCADA требовали и были полностью переписаны. Вы сейчас можете загрузить их пакет по [ftp://ftp.oscada.org/OpenSCADA/PLC/OpenWrt/OpenWrt_BuildRoot_package_openscada.tgz этой ссылке] и распаковать в каталоге "package". Для сборки OpenSCADA и её пакета IPKG из приготовленной и готовой для этого директории BuildRoot этого SDK, с правилами OpenSCADA в каталоге "package", Вам следует придерживаться следующей инструкции: <syntaxhighlight lang="BASH"> # Очистка сборки пакета, может быть опущена при первой сборке make package/openscada/clean # Загрузка и подготовка архива исходных текстов OpenSCADA, эти команды вызываются автоматически по следующей команде "compile" и соответственно могут быть также опущены make package/openscada/download make package/openscada/prepare # Компиляция OpenSCADA, все зависимые пакеты сборки OpenSCADA перед этим этапом должны быть автоматически загружены и скомпилированы make package/openscada/compile # Установка и сборка IPKG пакета, который Вы можете получить отсюда "bin/{paltform}/packages/base" make package/openscada/install </syntaxhighlight> В соответствии с использованием BuildRoot библиотеки "uCLibC" языка "C" OpenSCADA нуждалась в некоторой адаптации к uCLibC версии 0.9.33.2 после последней сборки с uCLibC версии 0.9.32.1 в 2011 году: * корректная проверка "resourcesAllow" для сборки без ресурсов (каталоги "data" и "doc"), в основном из-за проблемы исполнения тут '''automake'''; * изменена проверка '''librt''' с функции clock_gettime() на clock_nanosleep(); * для проверки '''libcrypt''' использована функция "crypt"; * включение <stdarg.h> в "src/tmess.h"; * проверка на __UCLIBC__ в TUser::auth(); * буфер '''iconv''' установлен в "const char *". Впервые OpenSCADA для OpenWrt была собрана, удачно запущена и использована на 3G роутере "[[Special:MyLanguage/Using/OpenWrt_TELEOFIS_RTU968|TELEOFIS RTU968]]" от АО "ТЕЛЕОФИС" для платформы "Freeescale i.MX23/28". Все материалы около OpenWrt для OpenSCADA Вы можете найти по [ftp://ftp.oscada.org/OpenSCADA/PLC/OpenWrt этой ссылке]. == Инструменты сборки ядра Linux и рабочих окружений под разные целевые архитектуры == Сформировать Linux КФС можно на основе готовых пакетов существующего бинарного дистрибутива, пакетов исходных текстов существующего дистрибутива, а также собрать из оригинальных исходных текстов посредством ToolChain в одной из сборочных систем. Сборка программ или целой КФС для архитектур, отличных от x86 и x86_64, обычно осуществляется посредством кросскомпиляции с использованием утилит (ToolChain) для сборки, линковки и отладки под целевую архитектуру ARM. Для автоматизации этого процесса создан ряд инструментов сборки готовых КФС. === [http://buildroot.uclibc.org BuildRoot] === Данная система сборки является частью проекта создания альтернативной библиотеки функций языка "C" [[WikiPedia:UClibc|UClibC]], поэтому в основном нацелена на сборку окружений с "UClibC", с соответствующими ограничениями. BuildRoot хорошо показал себя в работе на хостовых системах разных версий и позволяет без особых проблем собирать программные окружения на основе Linux. Получить архив BuildRoot нужной версии можно по ссылке http://buildroot.uclibc.org/downloads. Далее его нужно распаковать в домашней директории обычного пользователя и произвести конфигурацию, настройку и сборку: <syntaxhighlight lang="BASH"> # Начальная конфигурация относительно предыдущей, например, после смены версии BuildRoot make oldconfig # Конфигурация из псевдографического меню make menuconfig # Запуск сборки make # Очистка сборочницы целиком make distclean </syntaxhighlight> В процессе сборки могут возникнуть проблемы следующего рода: * Невозможность загрузить архивы программ. :(+) Необходимо указанный пакет загрузить отдельно и поместить его в директорию "./dl" или "./output/dl". * Ошибки сборки программ. :(+) Однозначного решения данной проблемы нет и нужно разбираться с ошибками сборки индивидуально для программы. Ошибка сборки может быть связана, например, с отсутствием выбора отдельного параметра при конфигурации или проблемой сборки программы в данном окружении. Патчи исправления сборки можно помещать непосредственно в директорию описания программы "./package/{имя пакета}/" === [http://www.ptxdist.org PTXDist] === Универсальный инструмент сборки ядер, ToolChain и программных окружений на основе Linux фирмы "Pengutronix". PTXDist является мощным и гибким инструментом, однако старые его версии имеют проблемы на современных хостовых системах, что усложняет задачу сборки программных окружений для сравнительно старых, но всё ещё распространённых, аппаратных платформ. Например, сейчас (2012 год) можно встретить новое оборудование с процессорами ARM XScale, ARM9 (ARMv5) времён 2003 года. Однако новыми версиями PTXDist неплохо поддерживаются старые платформы, о чём можно узнать из таблицы поддержки по ссылке: http://www.pengutronix.de/oselas/toolchain/index_en.html. Для сборки программного окружения (КФС) с помощью PTXDist нужно: * получить архив инструментария сборщика (вместе с проектами ближайших версий, http://www.pengutronix.de/software/ptxdist/download), собрать и установить его; * получить архив исходных файлов (той же или близкой версии, как PTXDist, http://www.oselas.com/oselas/toolchain/download) и собрать ToolChain; * склонировать-создать и собрать проект КФС. Теперь детальнее в командах: <syntaxhighlight lang="BASH"> # Установку и сборку сборщика нужно производить от обычного пользователя в его домашней директории. # Исходные архивы загружены в ~/Downloads mkdir ~/proj/ptxdist; cd ~/proj/ptxdist tar xvjf ~/Downloads/ptxdist-2011.11.0.tar.bz2 tar xvzf ~/Downloads/ptxdist-2011.01.0-projects.tgz # Переносим содержимое архива проектов в директорию рабочей версии, если версии различны. cp -r ptxdist-2011.01.0/* ptxdist-2011.11.0/; rm -rf ptxdist-2011.01.0 # Сборка и установка инструментария cd ptxdist-2011.11.0; ./configure --prefix=/home/roman/proj/ptxdist; make install # Установка переменной окружения "PATH" для вызова файла инструментария "ptxdist" export PATH=$PATH:/home/roman/proj/ptxdist/bin # Распаковка, выбор конфигурации и сборка Toolchain cd ~/proj; tar xvjf OSELAS.Toolchain-2011.11.0.tar.bz2 # Выбор нужной конфигурации toolchain cd OSELAS.Toolchain-2011.11.0 ptxdist select ptxconfigs/arm-xscale-linux-gnueabi_gcc-4.6.2_glibc-2.14.1_binutils-2.21.1a_kernel-2.6.39-sanitized.ptxconfig # Запуск сборки ToolChain. # Результат сборки будет помещён в директорию /opt/OSELAS.Toolchain-2011.11.0 для чего нужно предоставить полный доступ от имени суперпользователя к директории /opt. sudo chmod a+rwX /opt ptxdist go # Клонирование-создание проекта КФС # Предварительная настройка общей конфигурации ptxdist, например, пути к директории проектов (по умолчанию не требуется) ptxdist setup # Проверка наличия и видимости проектов для клонирования ptxdist projects # Клонирование одного из доступных проектов cd ~/proj; ptxdist clone OSELAS.BSP-Pengutronix-Generic New_RootFS # Выбор конфигурации платформы и ранее собранного ToolChain для нашего проекта cd ~/proj/New_RootFS ptxdist platform configs/arm-qemu-2011.01.0/platformconfig ptxdist toolchain /opt/OSELAS.Toolchain-2011.11.0/arm-xscale-linux-gnueabi/gcc-4.5.2-glibc-2.14.1-binutils-2.21.1a-kernel-2.6.30.5-sanitized/bin # Остальные настройки архитектуры, выбор программ и формирование результата конфигурируется в псевдографическом конфигураторе ptxdist menuconfig # Сборка КФС и формирование образов ptxdist go ptxdist images # Конфигурацию сборки дополнительных программ необходимо помещать в директорию "rules" в виде двух файлов pkg.in и pkg.make. # Для того чтобы новая программа появилась в меню псевдографического конфигуратора её нужно добавить # в файле ~/proj/ptxdist/lib/ptxdist-2011.11.0/rules/Kconfig </syntaxhighlight> == Измерения == === {{Anch|PerfSystems|Процессорных систем}} === {| class="wikitable sortable" |- ! Оборудование !! ЦП !! Вход в JavaLikeCalc, мкс !! Операция sin(Pi) [в JavaLikeCalc], мкс !! Операция pow(Pi,2) [в JavaLikeCalc], мкс !! Модель АГЛКС [Vision, главная мнемосхема], %(ядро) !! Дополнительные тесты и замечания |- | Segnetics SMH2Gi || ARMv5, ARM926EJ-S, 400 MHz, 65nm, SoftVFP, 199 BogoMIPS || 3.4 || 11.1 [14.9] || 4.4 [7.9] || - || |- {{#lst:Using/OpenWrt_TELEOFIS_RTU968|RTU968}} |- {{#lst:Using/NetGear_R6220|R6220}} |- | ICP DAS LP-5141 || ARMv5, PXA270, 520 MHz, FPA || || 100 [200]<sup>*</sup> || 51 [152]<sup>*</sup> || || |- | ZAO ZEO TionPro270 || ARMv5, PXA270, 520 MHz, SoftVFP, uCLibC-0.9.32.1, -Os, 519.37 BogoMIPS || || 22 [51]<sup>*</sup> || 14 [41]<sup>*</sup> || - || '''''Minimum power consumption:''''' 1.27 W |- | ZAO ZEO TionPro270 || ARMv5, PXA270, 520 MHz, SoftVFP, GLibC-2.14.1, -O2, 519.37 BogoMIPS || || 5.92 [8.26] || 1.74 [4.08] || - || '''''Updated:''''' 30.10.2013 |- | Cyrix Geode(TM) || x86, 232 MHz || || 7 [44]<sup>*</sup> || 11 [52]<sup>*</sup> || - || |- | VIA Nehemiah || x86, 400 MHz, 130nm || || 2.9 [5.8] || 2.4 [5.8] || - || |- {{#lst:Using/Nokia_Linux|N800}} |- {{#lst:Using/Raspberry_Pi|Pi}} |- {{#lst:Using/Raspberry_Pi|PiZ}} |- | AMD K6-2 || x86, 450 MHz, 250nm, 900 BogoMIPS, SDRAM-85MB/s || 1.76 || 0.964 [2.14] || 1.84 [2.84] || - || |- | AMD Geode LX800, ICP-DAS LP-8x81 || x86, 500 MHz, 130nm, 1000 BogoMIPS, DRAM-450MB/s || 1.09 || 1.15 [1.57] || 1.87 [2.33] || 97 || {| class="wikitable" |- ! {{CtxDetails|RT-tests:|Performance for 100% load for 1 core + VFS activity}} !! {{CtxDetails|'''precision_test'''|Invoking lag for RR-80 maximum [average], milliseconds}} !! {{CtxDetails|OpenSCADA|Invoking lag for (RR-80, FF-80) empty 0.2 ms task, milliseconds + background FF-20, RR-5, RR-10}} |- | Linux-3.2.78 || 0.07+0.73 [0.038] || 0.337+4.12, 0.303+3.21 |- | Linux-2.6.29-rt1-up || 0.046+0.164 [0.037] || 0.089+0.095, 0.090+0.093 |} |- | AMD K6-2+ || x86, 600 MHz, 180nm, 1202 BogoMIPS, SDRAM-105MB/s || 1.51 || 0.69 [0.95] || 1.2 [1.69] || - || |- | VIA Nehemiah || x86, 667 MHz, 130nm || || 2.7 [5.6]<sup>*</sup> || 2.4 [6.1]<sup>*</sup> || - || |- | RDC R3600, ICP-DAS LX-8x31 || x86, 1.0 GHz, 2 Cores || || 0.72 (1.52) || 1.14 (2.06) || - || |- {{#lst:Using/Nokia_Linux|N900}} |- {{#lst:Using/Nokia_Linux|N950}} |- | Segnetics SMH4 || ARMv7 Processor rev 2, 1 GHz, 996 BogoMIPS || 0.477 || 1.1 [1.323] || 0.51 [0.723] || - || |- {{#lst:Using/Raspberry_Pi|Pi2}} |- {{#lst:Using/Orange_Pi|OPiZ}} |- | Pentium 3 || x86, 700 MHz, 180nm, SDRAM-228MB/s || 0.56 || 0.386 [0.914] || 0.534 [1.235] || 92 || {| class="wikitable" |- ! {{CtxDetails|RT-tests:|Performance for 100% load for 1 core + VFS activity}} !! {{CtxDetails|'''precision_test'''|Invoking lag for RR-80 maximum [average], milliseconds}} !! {{CtxDetails|OpenSCADA|Invoking lag for (RR-80, FF-80) empty 0.2 ms task, milliseconds + background FF-20, RR-5, RR-10}} |- | Linux-3.2.78-686-pae || 1.73+7.22 [0.037] || 0.429+32, 0.825+60.7 |- | Linux-3.2.78-rt-686-pae || 0.11+0.15 [0.041] || 0.125+0.184, 0.079+0.17 |} |- | Siemens IOT2050 || ARM Cortex-A53, TI Sitara AM6548 HS, 28nm, 4 Cores || 0.511 || 0.459 [0.589] || 0.45 [0.609] || 67 [110] || ARM64 |- | Intel(R) Atom(TM) CPU Z520, ICP-DAS LP-8x81 Atom || x86, 1.33 GHz, 1[2] Cores, 45nm || || 0.39 (1.14) || 0.53 (1.12) || - || |- | Intel Atom N270 || x86, 1.6 GHz, 1[2] Cores, 45nm, DDR2-533-1.2GB/s || 0.441 || 0.392 [0.616] || 0.403 [0.712] || 73 [135] || '''''Starting time (PATA SSD), seconds''''': 6+28+6(AGLKS), 65(Boiler) {| class="wikitable" |- ! {{CtxDetails|RT-tests:|Performance for 100% load for 1 core + VFS activity}} !! {{CtxDetails|'''precision_test'''|Invoking lag for RR-80 maximum [average], milliseconds}} !! {{CtxDetails|OpenSCADA|Invoking lag for (RR-80, FF-80) empty 0.2 ms task, milliseconds + background FF-20, RR-5, RR-10}} |- | Linux-4.9.210-686-pae || 112.0+112.1 [0.037] || 112.0+112.0, 113.3+113.3 |- | Linux-4.9.210-rt-686-pae || 0.126+0.199 [0.032] || 0.102+0.164, 0.097+0.162 |} |- {{#lst:Using/Raspberry_Pi|Pi3}} |- {{#lst:Using/PinePhone|PinePhone}} |- | Intel(R) Celeron(R) CPU 847 || x86, 1.1 GHz, 2 Cores, 32nm || || 0.23 [0.675] || 0.25 [0.76] || <span style="color: red">50 [64]</span> || |- | AMD GX-209JA || x86, 1.0 GHz, 2 Cores, 28nm, DDR3-533-2GB/s || 0.203<br/>0.411 || 0.204 [0.427]<br/>0.283 [0.659] || 0.175 [0.397]<br/>0.34 [0.84] || 48 [87]<br/>65 [110] || x86_64<br/>686 |- | HTC Desire 820G || ARM Cortex-A7, MediaTek MT6592, 28nm, 1.7 GHz, 8 Cores || 0.420 || 0.233 [0.298] || 0.204 [0.337] || - || |- | KIVI 32F710 || ARMv7, MediaTeK m5621, 1.3 GHz, 4 Cores || 0.243 || 0.262 [0.272] || 0.229 [0.257] || - || |- | AMD Phenom(tm) 9600 Quad-Core || x86, 2.3 GHz, 4 Cores, 65nm || || 0.17 [0.45] || 0.14 [0.35] || - || |- | AMD Athlon 64 3000+ || x86, 2 GHz, 130nm || || 0.15 [0.43] || 0.16 [0.49] || <span style="color: red">23 [31]</span> || |- | Intel(R) Celeron(R) CPU N2840 || x86, 2.16GHz, 2 Cores, 22nm || || 0.175 [0.389] || 0.165 [0.385] || <span style="color: red">33 [60]</span> || |- | Intel(R) Pentium(R) 4 CPU || x86, 3 GHz, 1[2] Cores, DDR-400 || 0.198 || 0.152 [0.206] || 0.157 [0.253] || 45 [77] || |- {{#lst:Using/Asus_Nexus_7|Nexus7}} |- | Intel(R) Core(TM)2 Duo CPU T5470 || x86, 1.6 GHz, 2 Cores, 65nm || 0.179 || 0.143 [0.18] || 0.129 [0.197] || 27.6 [54] || |- | AMD Turion L625 || x86, 1.6GHz, 2 Cores, 65nm, DDR2-555 || 0.096|| 0.125 [0.251] || 0.096 [0.219] || 28 [50] || |- | Intel(R) Core(TM) i3-3217U CPU || x86, 1.8 GHz, 2[4] Cores, 22nm || || 0.105 [0.277] || 0.148 [0.305] || <span style="color: red">21 [26]</span> || |- | Intel(R) Pentium(R) CPU U5400 || x86, 1.2 GHz, 2 Cores, 32nm, DDR3-1333-2.3GB/s || 0.141 || 0.119 [0.177] || 0.088 [0.125] || 29 [55] || |- | Intel(R) Core(TM) i3 CPU U 380 || x86, 1.33 GHz, 2[4] Cores, 32nm, DDR3-1333 || 0.11 || 0.11 [0.138] || 0.087 [0.101] || 33 [58] || |- | Intel(R) Celeron(R) CPU E1200 || x86, 1.6 GHz, 2 Cores, 65nm || 0.159 || 0.126 [0.131] || 0.078 [0.087] || || |- | AMD Athlon X2 3600+ || x86, 2 GHz, 2 Cores, 65nm || 0.0898 || 0.095 [0.148] || 0.0743 [0.150] || 20 [41] || |- | Google Pixel XL || ARMv8, Qualcomm Snapdragon 821, 14nm, 2.15 GHz, 4 Cores || 0.125 || 0.054 [0.083] || 0.087 [0.117] || - || '''''Updated:''''' 07.03.2023<br/>'''''Starting time, seconds:''''' 5+10+2(AGLKS), 26(Boiler) |- | Intel(R) Xeon(R) CPU E5-2603 || x86, 1.8 GHz, 4 Cores, 32nm || || 0.074 [0.178] || 0.068 [0.173] || - || |- | Intel(R) Xeon(R) CPU X5560 || x86, 2.8 GHz, 4[8] Cores, 45nm || 0.056 || 0.054 [0.117] || 0.043 [0.118] || 27 [41] || |- | Intel(R) Celeron(R) CPU J3355 || x86, 2.0-2.5 GHz, 2 Cores, 14nm, DDR3-1600 || 0.069 || 0.066 [0.089] || 0.051 [0.077] || 19 [34] || |- | AMD Athlon(tm) II X2 250 || x86, 3.0 GHz, 2 Cores, 45nm, DDR3-1066-7GB/s || 0.054 || 0.061 [0.080] || 0.047 [0.057] || 14 [23] || Debian 12 x86_64 |- | AMD Phenom(tm) II X4 900e || x86, 2.4 GHz, 4 Cores, 45nm, DDR2-800-8.6GB/s || 0.069<br/>0.06 || 0.075 [0.082]<br/>0.076 [0.096] || 0.056 [0.076]<br/>0.0567 [0.088] || 12 [21]<br/>17 [32] || x86_64<br/>686 |- | AMD Phenom(tm) II X4 910e || x86, 2.6 GHz, 4 Cores, 45nm, DDR3-1333-9GB/s || 0.0575 || 0.069 [0.086] || 0.1 [0.112] <sup>**</sup> || 11.6 [20] || Debian 12 x86_64 |- | Intel(R) Core(TM) i5-3610ME CPU || x86, 2.7 GHz, 2[4] Cores, 22nm || || 0.05 [0.132] || 0.0376 [0.122] || - || |- | Intel(R) Xeon(R) CPU E5-2420 || x86, 1.9 GHz, 32nm, DDR3-10GB/s || 0.058 || 0.056 [0.075] || 0.053 [0.075] || - || |- | Xiaomy 11 Lite 5G NE || ARM Cortex-A55, Qualcomm Snapdragon 778g SM7325, 6nm, 4x2.4 GHz + 4x1.8 GHz || 0.0491 || 0.0325 [0.0415] || 0.0511 [0.0689] || - || |- | Intel(R) Xeon(R) CPU E5-2680 v3 || x86, 2.5 GHz, 32nm, DDR3-9.3GB/s || 0.061 || 0.042 [0.053] || 0.031 [0.038] || - || |- | AMD A8-6500 APU || x86, 3.5 GHz, 4 Cores, 32nm, DDR3-1600-13.5GB/s || 0.048<br/>0.058 || 0.0394 [0.057]<br/>0.055 [0.1] || 0.029 [0.0394]<br/>0.037 [0.089] || 13 [22]<br/>13 [24] || x86_64<br/>VBox '''''Starting time (DT01ACA050), seconds:''''' 3+2+1(AGLKS), 8(Boiler) |- | Intel(R) Pentium(R) CPU G3260 || x86, 3.30GHz, 2 Cores, 22nm, DDR3-1400 || 0.0485 || 0.0373 [0.0363] || 0.0244 [0.0279] || 6.3 [13.3] || |- | Intel(R) Core(TM) i3-4330 CPU || x86, 3.5 GHz, 2[4] Cores, 22nm || || 0.03 [0.08] || 0.023 [0.073] || - || |- | Intel(R) Core(TM) i7-5600U || x86, 2.6->3.2 GHz, 2[4] Cores, 14nm, DDR3-1600-15GB/s || 0.04<br/>0.051 || 0.027 [0.0304]<br/>0.0488 [0.065] || 0.027 [0.03]<br/>0.0447 [0.068] || 9 [16]<br/>12 [22] || x86_64<br/>686 '''''Starting time (ST320LT007), seconds:''''' 3+2+1(AGLKS), 6(Boiler) |- | Intel(R) Core(TM) i7-7700HQ CPU || x86, 2.8 GHz, 14nm, DDR-20GB/s || 0.036 || 0.024 [0.029] || 0.040 [0.046] <sup>**</sup> || || |} * <sup>*</sup> — includes of double call the ''gettimeofday()'' function. * <sup>**</sup> — '''pow(Pi,2)''' measured in an environment with GLibC > 2.31 (like to Debian 11) where performance of the function calculation was degraded on '''[46...60]%'''. * "'''Entry into JavaLikeCalc'''" — entry to a procedure on the language JavaLikeCalc means also entry to the critical section and requesting for reading of the RW lock, then the time mostly show performance of the locking operation. The time was excluded from related values in columns with JavaLikeCalc. * "'''Operation sin(Pi) and pow(Pi,2)'''" — after year 7528/2020 and version 0.9.3 LTS the measured value can be risen from 2% to 5% (on slow memory) through a reason of adding control of execution the functions; * "'''DDR3-1600-{N}GB/s'''" — where ''N'' is gotten by the program '''sysbench''' (not '''memtest''' or '''mbw''' which are measuring in different methods), by the typical call command {{InLineCode|<nowiki>sysbench --test=memory --memory-total-size=3G --memory-block-size=1M run</nowiki>}} for systems with memory size [4...15] GB. : [[file:at.png]] The memory test here up to version 1.0 uses other method, which show speed in three times lesser, especially on AMD! * "'''[http://ftp.oscada.org/Misc/Tests/ precision_test]'''" — a simple program of the OpenSCADA project to test lag of the threads invoking in the RT policy Round-robin and priority 80. 100% loading is performed by the program '''[http://ftp.oscada.org/Misc/Tests/ highload]''' and the VFS activity is performed by the command {{InLineCode|<nowiki>dd if=/dev/zero of=/var/tmp/test.zero bs=1048576 count=1000; dd if=/var/tmp/test.zero of=/dev/null bs=1048576;</nowiki>}}. [[File:at.png]] Разница во времени вычисления при прямом вызове математической операции и из виртуальной машины JavaLikeCalc связана с влиянием частоты ядра процессора (частоты, на которой оно работает) и которым выполняется часть команды до передачи её математическому сопроцессору и со скоростью памяти. Производительность математического сопроцессора обычно не связана непосредственно с производительностью и частотой ядра основного процессора или скоростью памяти. Методика измерений в таблице выше следующая: :1. Оценка времени вычисления операций общего блокирования критической секции, "'''sin(Pi)'''" и "'''pow(Pi,2)'''", во второй, третьей и четвёртой колонках. Данные операции выбраны как показательные, для оценки производительности сопроцессора и общих манипуляций с вещественными числами. Значения в квадратных скобках характеризуют степень накладных расходов при вычислении внутри виртуальной машины OpenSCADA и производительность целочисленных вычислений вокруг образцовых операций. Т.е. основное значение характеризует производительность процессора в операциях с плавающей точкой (математический сопроцессор или эмуляция), а в квадратных скобках — в целочисленных операциях (центральный процессор), как разница времени операций с плавающей точкой. Методика измерения: ::a) обеспечиваем стабильность частоты центрального процессора, путём установки политики её управления в ПРОИЗВОДИТЕЛЬНОСТЬ; ::b) запускаем OpenSCADA без нагрузки, проект по умолчанию или с пустой конфигурацией, c конфигуратором [[Special:MyLanguage/Modules/QTCfg|UI.QTCfg]], [[Special:MyLanguage/Modules/WebCfg|UI.WebCfg]] или [[Special:MyLanguage/Modules/WebCfgD|UI.WebCfgD]]; ::c) открываем объект функции "'''sin()'''", а затем "'''pow()'''", [[Special:MyLanguage/Modules/FLibMath|модуля библиотеки математических функций]]; ::d) переходим во вкладку "Исполнить", устанавливаем "Включено", вводим значения аргументам "X" в 3.14159 и "Степень" в 2 (для "'''pow()'''"), устанавливаем количество запусков в 1000 (для большей репрезентативности можно увеличить, порядками, до общего времени операции не более 10 секунд); ::e) нажимаем "Исполнить" и получаем время исполнения; ::f) производим вычисления несколько раз, нажимая "Исполнить", добиваясь минимального значения; ::g) фиксируем минимальное значение, которое делим на 1000 (количество запусков) и получаем основное значение времени одного вычисления в микросекундах; ::h) переходим к объекту модуля [[Special:MyLanguage/Modules/JavaLikeCalc|внутренних вычислений OpenSCADA (DAQ.JavaLikeCalc)]]; ::i) создаём там [[Special:MyLanguage/Modules/JavaLikeCalc#FuncsLibs|объект библиотеки функций]] "test", а в ней функцию "test", которую включаем; ::j) во вкладке "Программа" вводим текст команды ПУСТО, "'''y=sin(3.14159)'''", и затем "'''y=pow(3.14159, 2)'''"; ::k) переходим во вкладку "Исполнить" и выполняем тоже самое, что в пунктах "d."-"g."; ::l) полученный результат записываем во второй колонке и считаем вспомогательным, в квадратных скобках, для третьей и четвёртой после вычитания значения во второй. :2. Комплексная оценка производительности, пятая колонка, осуществляется путём исполнения [[Special:MyLanguage/Using/Model_AGLKS|модели технологического процесса (ТП) АГЛКС]] на целевой архитектуре. Данный тест может исполняться только на вычислительных системах со сравнительно высокой производительностью (или с количеством ядер более одного), которые способны исполнять модель, и с устройством вывода графической информации (дисплей), случай исполнения сервера визуализации не рассматривается. Основное значение нагрузки процессора характеризует исполнение динамической модели ТП, а дополнительное добавляет формирование и исполнение графического интерфейса. Методика измерения: ::a) обеспечиваем стабильность частоты центрального процессора, путём установки политики её управления в ПРОИЗВОДИТЕЛЬНОСТЬ; ::b) из [http://wiki.oscada.org/Doc/QuickStart#h988-7 меню окружения рабочего стола] запускаем модель АГЛКС; ::c) запускаем эмулятор терминала (например, "konsole"), где набираем "top", нажимаем Shift+H (смотрим процесс в целом) и Shift+P (сортируем по нагрузке на процессор); ::d) снимаем показания в колонке "%CPU" напротив процесса "openscada", отбираем типовое значение для нескольких обновлений и фиксируем его как основное значение; ::e) возвращаемся к окну OpenSCADA и запускаем среду визуализации, а затем [http://wiki.oscada.org/Doc/QuickStart#h988-7 проект интерфейса "АГЛКС"]. ::f) возвращаемся в эмулятор терминала и снимаем дополнительное значение, как в пункте "d.". Полученные результаты можете выслать на [mailto:oscada@oscada.org|адрес электронной почты] для помещения в эту таблицу! === {{Anch|PerfStorages|Хранилища (встроенные, HDD, SSD, CF, SD, ...)}} === В этом разделе содержится информация про производительность хранилищ, с которыми и на которых работали и работают решения OpenSCADA. {| class="wikitable" |- ! Оборудование !! Реальный размер, ГБ/ГіБ !! Чтение/Запись, МБ/с !! Замечания |- | colspan="4" | '''''SSD. Typical environment: Read/Write: raw 50/10GB by blocks 1MiB''''' |- | PATA SSD, Ver2.M0J (Acer Aspire One 110) || || 41.2/15.8 || |- | SSD: GoodRAM Play 32GB 2.5" SATA2, MLC (SSD32G25S2MGYSM2244) || || 238/45 || |- | SSD: SanDisk SDSSDA 120GB 2.5" SATA3, MLC (SDSSDA120G) || 120/112 || 388/35 || heating 30+8/21/27 °С<br/>power 0.64/1.0/1.7 W |- | SSD: GoodRAM C40 60GB 2.5" SATA3, MLC (SSDPR-C40-060) || || 498/467 || |- | SSD: GoodRAM C40 120GB 2.5" SATA3, MLC (SSDPR-C40-120) || || 480/330 || for EXT4 |- | SSD: GoodRAM CX200 120GB 2.5" SATA3, TLC (SSDPR-CX200-120) || 120/111 || 497/118 || fast overheating on write 30+10 °С |- | SSD: Micron 1100 256GB 2.5" SATA3, TLC (MTFDDAK256TBN) || 256/238 || 376/181 || heating 29+11/18/24 °С<br/>power 0.6/1.2/1.3 W |- | SSD: GoodRAM IRIDIUM 120GB 2.5" SATA3, MLC (SSDPR-IRID-120) || 120/111 || 499/201 || heating 33+3/11 °С |- | SSD: KINGSTON A400 120GB 2.5" SATA3, TLC (SA400S37120G) || 120/112 || 513/284 || heating 31+4/6/9 °С<br/>power 0.6/0.85/1.2 W |- | SSD: TOSHIBA THNSNJ512GCSU 512GB 2.5" SATA3, MLC (JULA0101) || 512/477 || 525/517 || heating 32+4/10 °С |- | SSD: GoodRAM IRDM PRO 1TB 2.5" SATA3, 3D TLC (IRP-SSDPR-S25C-01T) || 1024/954 || 533/509 || heating 25+5/10 °С |- | SSD: KODAK SSD X120 PRO 1TB 2.5" SATA3, 3D TLC (EKSSD1TX120K) || 1024/954 || 478/148 || heating 30+3/6/11 °С<br/>power 0.7/0.9/1.1 W |- | colspan="4" | '''''HDD. Typical environment: Read/Write: raw 50GB by blocks 1MiB, into the hard disk end''''' |- | HDD 3.5": SAMSUNG SP2004C || 200/186 || 39/38.5 || heating 27+11/13.5/15°С |- | HDD 3.5": TOSHIBA DT01ACA050 || 500/466 || 110/109 || heating 25+12/16/17°С |- | HDD 3.5": WDC WD10EZRX-00D8PB0 || 1000/931 || 77.7/77.5 || +9°С, noisely seek |- | HDD 3.5": Seagate ST1000VM002-1ET1 || 1000/931 || 87.1/86.9 || heating 27+7/9/10 °С; power ~5.6 W |- | HDD 2.5": Seagate ST320LT007-9ZV142 || 320/298 || 70.5/70.1 || heating 25+10/17/18 °С; power 1.4+1.6/1.6 W |- | HDD 2.5": WDC WD5000BEVT-22A0RT0 || 500/466 || 44.7/43.5 || heating 33+3/9/13 °С; power 1.0+1.9/2.3 W |- | HDD 2.5": WDC WD20SPZX-22UA7T0 || 2000/1863 || 63.2/62.3 || heating 33+9/13/15 °С; power 1.26+1.74/1.74 W |- | colspan="4" | '''''Internal flashes of the devices''''' |- | Flash: ICP_DAS LP-8x81 Internal 4GB || || 8/4 || |- | colspan="4" | '''''Card flashes (CF)''''' |- | CF: Transcend 133x 32GB || 32/30 || 27/15 || heating 28+6/8/9 °С |- | CF: ICP_DAS LP-8x81 8GB, MLC || || 27/(19...15) || |- | CF: ICP_DAS LP-8x81 8GB, MLC-N-233x || || 44/12.5 || |- | CF: ICP_DAS LP-8x81 8GB, pSLC || || 47/44 || |- | Flash Disk IDE44: Kontron chipDISK/1000-IDE || || 3/5.7 || |- | colspan="4" | '''''SD, MiniSD, MicroSD, MMC. Typical environment. 30°C, Read/Write: raw 1GB by blocks 1MiB.'''''<br/> '''''Card Readers: [ Grand X CRX45 USB2; Realtec USB 2.0 multicard reader; Transcend M3; GoodRam USDRSGRBL10; Raspberry Pi3,2 EXT4; RTS5227 PCI-E ]''''' |- | MicroSD: Transcend 8GB Class 2, 378010 || 7.94/7.40 || [14.6/3.4; 9/3.5; 14.3/3.7; 14.3/3.7] || |- | MicroSD: EMTEC 8GB Class 4 || 7.96/7.41 || [18.0/0.8; 12.3/1.8; 17.2/1.8; 17.0/1.9] || early and apparently overheat and hang in long time on write |- | MicroSD: Kingston 8GB Class 4, SDC4/8GB || 7.74/7.21 || [16.7/0.756; 15.1/1.8; 16.4/1.8; 16.5/1.9] || early and apparently overheat and hang in long time on write |- | MicroSD: Transcend 8GB Class 4, A31213 || 7.94/7.40 || [17.8/4; 18.0/4.1; 18.8/4.2; 17.9/3.0] || |- | MicroSD: Transcend 32GB Class 4, 9161BA || || 19.7/6.7 || |- | MicroSD: Transcend 4GB Class 6, 9153BA || 4.03/3.75 || [15.7/6.7; 15.9/7.6; 18.5/9.3; 17.9/9.5] || |- | SD: Team 8GB Class 10, CT8G02XTVCC1118N || 8.03/7.47 || [16.7/10.3; 14.1/12.2; 18.5/14.0] || |- | MicroSDHC: Toshiba 16GB UHS-1 Class 10, SD-C016UHS1(BL5A) || 15.7/14.6 || [16.2/5.9; 16.7/7.4; 18.4/9.1; 17.6/8.8; 16.9/11.3] || |- | MicroSDHC: Toshiba 16GB UHS-1 Class 10, SD-C016UHS1(6A) || 15.5/14.5 || [14.4/6.7; 17.3/8.1; 18.6/9.9; 17.9/10.0; 19.5/13.0] || |- | MicroSDHC/MicroSDXC: Kingston 16GB UHS-1 Class 10, SDC10G2/16GB || 15.5/14.4 || [18.6/6.0; 16.3/6.7; 18.5/10.5; 18.1/10.1; 17.1/8.6] || |- | MicroSDHC: Transcend 16GB UHS-1 Class 10, C93858 || 15.9/14.8 || [17.2/10.6; 18.6/9.6; 18.5/11.1; 17.7/10.8; 22.5/11.1] || |- | MicroSDHC: SP 32GB, SP032GBSTH010V10 || 31.1/28.9 || [18.1/8.0; 14.8/7.3; 18.7/10.8; 17.9/9.8; 19.4/11.1] || |- | MicroSDHC: SanDisk Ultra 32GB, SDSQUNB-032G-GN3MN || 31.1/28.9 || [17.1/7.0; 14.8/7.5; 18.4/11.0; 18.1/10.4; -] || |- | MicroSDHC: Transcend 32GB UHS-1 Class 10, Premium 400x D24035 || 31.7/29.5 || [17.6/14.7; 17.8/9.6; 18.8/9.9; 17.8/14.1; 22.4/10.5; 21.5/15.3] || |- | MicroSDHC: JGM-T001 16GB UHS-1 Class 10 || 15.6/14.6 || [18.6/19.3; 16.1/12.7; 19.6/17.4; 15.7/18.4; 13/11.8; 58.4/41.7] || |- | MicroSDHC: Samsung EVO Plus 64GB UHS-1 Class 10 (MB-MC64H) || 64.1/59.7 || [19.0/19.8; 18.8/11.6; ; ; 21.7/16.3; 93.7/28.6] || drops speed down to 4MB/s during use in RPi, it is restored by the {{InLineCode|<nowiki>badblocks</nowiki>}} WR-tests |- | MicroSDHC: Samsung EVO Plus 128GB UHS-3 Class 10 (MB-MC128H) || 128/119 || [19.1/18.9; ; ; ; 22.1/17.8; 90.5/44.8] || drops speed down to 4MB/s during use in RPi, it is restored by the {{InLineCode|<nowiki>badblocks</nowiki>}} WR-tests |- | MicroSDHC: Samsung PRO Plus 128GB UHS-3 Class 10, A2, V30 (MB-MD128KA) || 128/119 || [ ; ; ; ; 22/18.1; 92.6/49.0] || |} == {{Anch|Industrial|Промышленные решения — ПЛК+ВВ, Панельные ПК}} == В этом разделе содержится информация про модели ПЛК и Панельных ПК, реально построенные или проектированные на основе разработанной среды исполнения и прошивки ПЛК. {| class="wikitable" |- ! Компоненты ПЛК !! Цена (DDP), $ !! Замечания |- | colspan="3" | '''''PC/104''''' |- | CPU: [http://emea.kontron.com/products/boards+and+mezzanines/pc104+sbc+and+peripherals/mops+pc104+cpu+modules/mopslcdlx.html Kontron MOPSlcdLX] || 430 || AMDGeodeLX800(i686)-500MHz, 0°-60°C, 5W, Video |- | CPU: [http://www.diamondsystems.com/products/athenaii Diamond ATHM800-256A] || 1229 || VIA Mark(i686)-800MHz, 256Mb, -40°-85°C, 10W, Video, 16AI, 4AO, 24DIO |- | CPU: [http://www.diamondsystems.com/products/athenaii Diamond ATHM800-256N] || 842 || VIA Mark(i686)-800MHz, 256Mb, -40°-85°C, 10W, Video |- | CPU: [http://www.diamondsystems.com/products/rhodeus Rhodeus RDS800-LC] || 414 || AMDGeodeLX800(i686)-500MHz, -20°-70°C, 5W, Video |- | CPU: [http://www.diamondsystems.com/products/helios Helios HLV800-256AV] || 772 || Vortex86DX(i486)-800MHz, 256Mb, -40°-85°C, 5.4W, Video, 16AI, 4AO, 40DIO |- | CPU: [http://www.diamondsystems.com/products/helios Helios HLV800-256DV] || 387 || Vortex86DX(i486)-800MHz, 256Mb, -40°-85°C, 4.5W, Video |- | CPU: [http://www.tri-m.com/products/engineering/vsx104.html Tri-M VSX104] || 380 || Vortex86SX(i486sx)-300MHz, 128Mb, -40°-85°C, 2W |- | MEM: DDR-SODIM-256M || 15 || for Kontron MOPSlcdLX |- | Flash Disk: Kontron chipDISK/1000-IDE || 100 || 1Gb, 0°-70°C, read=3MB/s, write=5.7MB/s |- | Flash Disk: M-Systems MD1171-D1024 || 42 || 1Gb, 0°-70°C |- | Flash Disk: M-Systems MD1171-D256 || 22 || 256Mb, 0°-70°C |- | Flash Disk: M-Systems MD1171-D128 || 18 || 128Mb, 0°-70°C |- | Flash Disk: Diamond systems FD-128R-XT || 82 || 128Mb, -40°-85°C |- | Flash Disk: Diamond systems FD-1GR-XT || 168 || 128Mb, -40°-85°C |- | Box: [http://www.diamondsystems.com/products/pandora_generic PB-300-K] || 108 || |- | Box: [http://www.diamondsystems.com/products/pandora_generic PB-EAP-300-K] || 250 || |- | Box: CT-4 || 156 || |- | Power unit: [http://www.trcelectronics.com/Meanwell/dr-4505.shtml MMEANWELL DR-4505] || 30 || |- | IO: [http://www.diamondsystems.com/products/diamondmm16at DMM-16-AT] (16AI, 4AO, 16DIO) || 581 || -40°-85°C |- | IO: [http://www.diamondsystems.com/products/dmm32x DMM-32X-AT] (32AI, 4AO, 24DIO) || 689 || -40°-85°C |- | RS485: [http://www.diamondsystems.com/products/emeraldmmopto EMM-OPT4-XT] || 396 || -40°-85°C |- | RS232->RS485 || 10 || |- | colspan="3" | '''ICP DAS ''LP-8x81''''' |- | CPU: LX-9781 || ~1500 || E3845 4Core-1.91GHz, -25°-60°C, 20.4W, 32GB SSD, 16GB CF, 4GB DDR3, Video, 2xEthernet1G, 4xUSB2, 7-slots, 1xRS-232, 1xRS-485, 2xRS-232/485 |- | CPU: LP-9821 || ~1000 || CortexA8-1.0GHz, -25°-75°C, 9.6W, 512MB flash, microSD slot (up to 32GB), 512MB DDR3, Video, 2xEthernet1G, 2xUSB2, 8-slots, 2xRS-232, 1xRS-485, 1xRS-232/485 |- | CPU: LX-8731 || ~1100 || x86 2Core-1.0GHz, -25°-75°C, 16.8W, 32GB SSD, 16GB CF, 2GB DDR3, Video, 2xEthernet1G, 2xUSB2, 7-slots, 2xRS-232, 1xRS-485, 1xRS-232/485 |- | CPU: LP-8821 || ~650 || CortexA8-1.0GHz, -25°-75°C, 9.6W, 512MB flash, microSD slot (up to 32GB), 512MB DDR3, Video, 2xEthernet1G, 2xUSB2, 8-slots, 2xRS-232, 1xRS-485, 1xRS-232/485 |- | CPU: LP-8381 (deprecated) || 974 || AMDGeodeLX800(i686)-500MHz, -25°-75°C, 14W, 4GB flash (R/W: 8/4 MB/s), 8GB CF (R/W: 29/19 MB/s), 1GB SRAM, Video, 2xEthernet, 2xUSB, 3-slots, 2xRS-232, 1xRS-485, 1xRS-232/485 |- | CPU: LP-8781 (deprecated) || 1025 || AMDGeodeLX800(i686)-500MHz, -25°-75°C, 16W, 4GB flash (R/W: 8/4 MB/s), 8GB CF (R/W: 29/19 MB/s), 1GB SRAM, Video, 2xEthernet, 2xUSB, 7-slots, 2xRS-232, 1xRS-485, 1xRS-232/485 |- | CPU: LP-8781-Atom (deprecated) || 1438 || IntelAtomZ520-1.3GHz, -25°-75°C, 18W, 8GB flash, 1GB DDR2, Video, 2xEthernet, 4xUSB, 7-slots, 2xRS-232, 1xRS-485, 1xRS-232/485 |- | IO_BOX: I-87K9 || ~124 || IO box for 9 modules series I-87k accessible by DCON |- | IO: I-8017HW (8AI DE, 16AI SI) || 230 ||Parallel bus, acquisition up to the 30 kHz |- | IO: I-8042W (16DI + 16DO) || 121 || Parallel bus. |- | IO: I-87017ZW (20/10AI) || 209 || Serial bus. Overvoltage support up to 240V. |- | IO: I-87019RW (8AI) || 213 || Serial bus. Additional surge protection, support for thermocouples and resistance thermometers. |- | IO: I-87024W (4AO) || 204 || Serial bus. Output of current and voltage. |- | IO: I-87026PW (6AI, 2AO, 2DI, 2DO) || 215 || Serial bus. Combined module. |- | IO: I-87040W (32DI) || 121 || Serial bus. Isolated. |- | IO: I-87041W (32DO) || 109 || Serial bus. Isolated. Watchdog function for communication. |- | IO: I-87057W (16DO) || 82 || Serial bus. Watchdog function for communication. |- | colspan="3" | '''Panel PC and Displays''''' |- | cMT-iPC15 || ~1200 || WEINTEK Panel PC 15" (1024x768), -0°-50°C, 32 GB (SSD), 4GB, Intel Atom E3827, Ethernet1G, 3xUSB |- | cMT-iPC10 || ~790 || WEINTEK Panel PC 9.7" (1024x768), -0°-50°C, 32 GB (SSD), 4GB, Intel Atom E3827, Ethernet1G, 3xUSB |- | PPC-L106T || ~880 || Advantech Panel PC 10.4" (800x600@262K), AMDGeodeLX800(i686)-500MHz, 65W, Ethernet, 3xRS-232, 1xRS-232/485, 4xUSB |- | PPC-L61T || ~600 || Advantech Panel PC 6.4" (640x480@262K), AMDGeodeLX800(i686)-500MHz, 65W, Ethernet, 3xRS-232, 1xRS-232/485, 4xUSB |- | FPM-7151T-R3AE || ~960 || Industrial display 15". |}
Navigation menu
OpenSCADA
Site
Download
Old Wiki
OpenSCADA Wiki
Home
About OpenSCADA
Functions and demands
Tasks
Using
Fund
Recent changes
Random page
Search
Tools
Special pages
Printable version
MediaWiki
Help
Personal tools
English
Log in