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/Update 8
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/> {{Info|* '''Автор:''' [[User:RomanSavochenko|Роман Савоченко]] }} Збір даних SCADA(Supervisory Control and Data Acquisition)-системи є її невід'ємною частиною, яка займається отриманням даних із джерел різноманітного походження. Природа даних, з якими працює SCADA, характеризується сигналами базових типів значень (цілі, реальні, логічні та рядок). Сигнали змінюються у часі та мають історією — життя. У теорії управління технологічними процесами (ТП), під сигналом мається на увазі значення давача установки ТП у коді АЦП — "сирий" сигнал, або у реальному значені — інженерний. Сигнали можуть поєднуватися у групи за смисловим навантаженням, які часто називаються параметрами або комплексним тегом. Наприклад, розвинуті джерела даних можуть надавати структури параметрів із визначеним набором пов'язаних сигналів. Крім безпосередньо збору даних, до функції цього механізму також входить і передача дій на виконавчі пристрої управління ТП, зазвичай це: засувки, насоси та регулюючі клапани. Сукупно, це обладнання отримало назву — Пристрій Узгодження із Об'єктом (ПУО). Джерела даних характеризуються великим розмаїттям, яке можна умовно поділити на три групи: * Джерела "сирих" даних, які надають код АЦП або рівні дискретних сигналів, а також які включають простішу обробку. Зазвичай, це модулі розосередженого ПУО або простіші промислові програмовані логічні контролери (ПЛК). * Потужні промислові ПЛК, що мають значні обчислювальні потужністю та можливості формування складних параметрів з різною структурою. * Локальні або супутні джерела даних. Наприклад, ПУО у вигляді плат розширення, а також дані апаратного та програмного оточення в якому функціонує система. Розмаїття джерел даних породило великий спектр механізмів доступу до них. Локальні джерела даних різняться інтерфейсами програмування додатку (API), а мережеві джерела, своєю чергою, транспортним та протокольним рівнями взаємодії. В цілому, це призвело до того, що додання підтримки нового джерела даних потребує створення модуля сполучення або драйверу. Враховуючи ж велике розмаїття джерел, це доволі затратно та фактично нереально охопити весь спектр ринку таких пристроїв. Ситуація дещо спрощується із мережевими джерелами, завдяки наявності низки стандартних та вільних протоколів взаємодії, однак багато джерел все-ж використовують власні протоколи: закриті комерційні або протоколи, зав'язані на закриті механізми комерційних операційних систем (ОС). У термінах OpenSCADA, надаються наступні об'єкти моделі даних обслуговування механізму збору даних: * "Атрибут" — об'єкт віддзеркалення даних сигналу, включає поточне значення визначеного типу сигналу та доступ до історії зміни цих значень; * "Параметр" — об'єкт групи атрибутів зі структурою, відповідною до особливостей окремо взятого джерела даних; * "Об'єкт контролеру" — об'єкт окремого джерела даних. Як правило це окремий модуль ПУО або пристрій промислового ПЛК. Для врахування особливостей різних пристроїв збору даних, а також різних механізмів взаємодії, у OpenSCADA передбачено [[Special:MyLanguage/Documents/Program_manual#DAQ|підсистему "Збір Даних"]], яка є модульною. У якості модуля підсистеми виступає драйвер сполучення із джерелом даних окремого типу. Кожний модуль може містити конфігурацію декількох пристроїв цього типу у вигляді об'єктів контролеру. Загальну схему об'єктів підсистеми "Збір даних" зображено на рисунку 1. [[File:Oscada subsys daq str_uk.png|center|frame|Рис. 1. Схема підсистеми "Збір Даних".]] == Методи збору даних == Враховуючи різні властивості джерел даних, а також можливі варіанти взаємодії, методи збору даних можна поділити на: простий синхронний, простий асинхронний, пакетний та пасивний. У огляді механізмів нижче будуть приймати участь наступні об'єкти: * "ObjectSCADA" — будь-який об'єкт SCADA-системи, який звертається за значенням сигналу, наприклад, архіви та візуалізатори; * "DAQParamAttribute" — атрибут параметра підсистеми "Збір Даних", який виступає посередником у доступі до значень сигналу джерела даних; * "DAQParamAttributeArch" — об'єкт архіву атрибута; * "HardwarePLC" — об'єкт джерела даних, наприклад, модулі розосередженого ПУО або промислові ПЛК. === Простий синхронний механізм збору === Механізм характеризується запитами до джерела даних синхронно із запитом до атрибуту параметра (рис.2). Цей механізм, зазвичай, застосовується при роботі з локальними джерелами даних, які характеризуються низькою латентністю, тобто затримкою у відповіді на запит. За допомогою цього методу можна отримати актуальні дані безпосередньо із запитом, однак час запиту об'єкту буде включати час транспортування та обробки запиту джерелом даних. [[File:DAQ_simpleSync.png|center|frame|Рис. 2. Діаграма послідовності взаємодії при синхронних запитах.]] Відповідно до діаграми вище, ми отримуємо наступну послідовність запитів отримання даних та їх передачі: * об'єкт SCADA-системи надсилає запит значення до об'єкту атрибута параметра '''DAQParamAttribute::getVal()'''; * об'єкт атрибута параметру, отримавши запит, надсилає його джерелу даних '''HardwarePLC::valueRequest()'''; * джерело даних, обробивши запит, повертає результат; * об'єкт атрибуту параметра, отримавши результат, повертає його об'єкту SCADA-системи. У OpenSCADA такий механізм реалізують наступні модулі підсистеми "Збір Даних": * ''[[Special:MyLanguage/Modules/JavaLikeCalc|JavaLikeCalc]]'' — обчислювач на Java-подібній мові високого рівня. У якості джерела даних виступає користувацька програма на Java-подібній мові. Атрибути параметрів модуля синхронно звертаються до входів/виходів обчислювального контексту користувацької функції. * ''[[Special:MyLanguage/Modules/LogicLev|LogicLev]]'' — модуль логічного рівня параметрів збору даних, детальніше про нього у розділі 3. У якості джерела даних цього модуля виступають інші параметри підсистеми "Збір Даних" та контекст виконання шаблону параметрів. Атрибути параметрів модуля синхронно звертаються до атрибутів інших параметрів, у режимі віддзеркалення параметрів підсистеми "Збір Даних", або до входів/виходів контексту виконання шаблону, у режимі роботи за шаблоном. * ''[[Special:MyLanguage/Modules/BlockCalc|BlockCalc]]'' — обчислювач на мові блокових схем. У якості джерела даних виступає користувацька блокова схема. Атрибути параметрів модуля синхронно звертаються до входів/виходів блоків блокової схеми. * ''[[Special:MyLanguage/Modules/DAQGate|DAQGate]]'' — модуль віддзеркалення об'єктів контролерів віддалених OpenSCADA-станцій на локальну. У модулі реалізовано синхронний режим запису даних. * ''[[Special:MyLanguage/Modules/ModBus|ModBus]]'' — модуль доступу до даних джерел за посередництвом сімейства протоколів "ModBus". У модулі реалізовано синхронний режим запису даних. * ''[[Special:MyLanguage/Modules/DiamondBoards|DiamondBoards]]'' — модуль доступу до даних PC/104 плат фірми Diamond Systems. Плати PC/104 розташовуються на ISA-шині, відповідно є локальними та доступні порівняно швидко. У режимі збору даних не за перериванням, доступ до значень АЦП здійснюється синхронно. Режим запису значення ЦАП завжди працює синхронно. === Простий асинхронний механізм збору === Механізм характеризується запитами до джерела даних незалежно від запиту до атрибуту параметра (рис.3). Зазвичай, запити до джерела даних здійснюються періодично, у власному завдані опитування окремо взятого контролеру та блоками по декілька сигналів. При цьому, запитом до атрибуту параметра повертається значення, отримане останнім сеансом зв'язку із джерелом даних. Цей механізм зазвичай застосовується при роботі з віддаленими (мережевими) джерелами даних, які характеризуються високою латентністю, тобто затримкою у відповіді на запит. За допомогою цього методу можна забезпечити оптимізацію часового ресурсу, витраченого на один сигнал, і тим самим збільшити максимальну кількість опитаних сигналів за інтервал часу опитування. У якості показового прикладу розглянемо промисловий ПЛК "Siemens S7-315", при опитувані його по шині ProfiBus (1,5 Мбіт/с). Середній час обробки MPI-запиту цим контролером становить 30 мс. Якщо використовувати синхронний механізм для кожного сигналу, тобто один запит на кожний сигнал, то протягом однієї секунди ми зможемо отримати біля 33 сигналів. А якщо застосувати асинхронний механізм, тобто у одному MPI-пакеті отримувати до 220 байт або 110 сигналів цілочисельного типу на 16-розрядів, то ми зможемо за одну секунду отримати до 3630 сигналів. Як можна бачити, ефективність асинхронного механізму, у цьому випадку, складає 110 разів, а саме значення максимальної ємності MPI-пакету. Недоліком асинхронного механізму є те, що запит значень атрибуту параметра повертає неактуальне на час запиту значення, а значення останнього сеансу опитування контролеру. Утім, якщо врахувати, що джерело даних може оновлюватися з періодичністю апаратних обмежень АЦП, та й самі давачі можуть мати певні обмеження у швидкості реакції, то й застосування асинхронного механізму збору може мати серйозні підстави. Застосування асинхронного механізму для запису значень у ПЛК є доволі рідкісним явищем, оскільки запис значень зазвичай передбачає вплив оператора на ТП. Оператор, по факту, достатньо рідко вносить коригування у процес, відтак запис можна здійснювати синхронно. Однак, існують ситуації, наприклад, управління ТП регуляторами на SCADA-системі, яка виконує функції середовища виконання ПЛК. [[File:DAQ_simpleAsync.png|center|frame|Рис. 3. Діаграма послідовності взаємодії при асинхронних запитах.]] Згідно до діаграми вище, ми отримуємо наступну картину: * атрибут параметру, або вищестоящий об'єкт контролеру, виконує періодичні запити '''HardwarePLC::valueRequest()''' отримання значення сигналу або групи сигналів; * отриманні значення сигналів розташовуються локально у атрибутах параметрів; * об'єкт SCADA-системи надсилає запит значення до атрибута параметра '''DAQParamAttribute::getVal()''' та отримує збережене локально значення попереднього сеансу опитування джерела даних. В OpenSCADA такий механізм реалізують наступні модулі підсистеми "Збір Даних": * ''[[Special:MyLanguage/Modules/DAQGate|DAQGate]]'' — модуль віддзеркалення об'єктів контролерів віддалених OpenSCADA-станцій на локальну. В модулі реалізовано асинхронний режим читання даних. * ''[[Special:MyLanguage/Modules/System|System]]'' — модуль доступу до даних оточення виконання OpenSCADA. У модулі реалізовано асинхронний режим читання даних. * ''[[Special:MyLanguage/Modules/ModBus|ModBus]]'' — модуль доступу до даних джерел за посередництвом сімейства протоколів "ModBus". У цьому модулі асинхронний режим реалізовано як для читання даних, так і для їх запису (опціонально) на ПЛК. * ''[[Special:MyLanguage/Modules/SNMP|SNMP]]'' — модуль доступу до даних пристроїв мережі за посередництвом "Simple Network Management Protocol". В модулі реалізовано асинхронний режим читання даних. * ''[[Special:MyLanguage/Modules/Siemens|Siemens]]'' — модуль доступу до даних контролерів фірми Siemens серії S7. У цьому модулі асинхронний режим реалізовано як для читання даних, так і для їх запису (опціонально) на ПЛК. === Пакетний механізм збору === Пакетний механізм збору характерний збором даних кожного сигналу пакетом, який включає історію його зміни. Тобто, за один сеанс опитування отримується декілька значень історії сигналу. Пакетний механізм працює спільно із синхронним та асинхронними механізмами. У випадку роботи з синхронним механізмом, виконується фактичне перекидання архіву джерела даних для оперативної роботи у системі (рис. 2). Як і простий синхронний механізм, його бажано застосовувати тільки на низько-латентних джерелах даних або із джерелами, робота яких є сеансовою, наприклад, у сфері комерційного обліку для читання значень лічильників. При роботі спільно із асинхронним механізмом, історія отриманих сигналів зазвичай прямо розташовується у архіви (рис. 4), а поточні значення атрибута параметру встановлюються у останнє значення пакету. Така комбінація ефективна при зборі швидких даних або при синхронізації архівів після втрати зв'язку з віддаленим джерелом даних. [[File:DAQ_packAsync.png|center|frame|Рис. 4. Діаграма послідовності взаємодії при асинхронних запитах пакетного механізму.]] Згідно діаграми вище, ми отримаємо наступну поведінку пакетного механізму при асинхронних запитах: * атрибут параметру, або вищестоящий об'єкт контролера, здійснює періодичні запити '''HardwarePLC::valuesRequest()''' отримання пакетів значень сигналу або групи сигналів; * отримані пакети значень сигналів розташовуються до архіву, запитом '''DAQParamAttributeArch::setValues()''', а останнє значення пакетів розташовується у атрибут параметру; * об'єкт SCADA-системи надсилає запит фрагменту архіву до атрибуту параметра '''DAQParamAttribute::getValues()''', а той переспрямовує запит до архіву '''DAQParamAttributeArch::getValues()'''. У результаті, повертається фрагмент архіву, доступний після попереднього сеансу опитування джерела даних; * об'єкт SCADA-системи надсилає запит останнього значення до об'єкту атрибута параметра '''DAQParamAttribute::getVal()''' та отримує збережене локальне значення попереднього сеансу опитування джерела даних. У OpenSCADA такий механізм реалізують наступні модулі підсистеми "Збір Даних": * ''[[Special:MyLanguage/Modules/DAQGate|DAQGate]]'' — модуль віддзеркалення об'єктів контролерів віддалених OpenSCADA-станцій на локальну. Реалізує синхронний та асинхронний пакетний режими віддзеркалення архівів віддалених OpenSCADA-станцій. * ''[[Special:MyLanguage/Modules/DiamondBoards|DiamondBoards]]'' — модуль доступу до даних PC/104 плат фірми Diamond Systems. Плати PC/104 розташовуються на ISA-шині, відтак є локальними та доступні порівняно швидко. У режимі збору даних за перериванням здійснюється очікування пакетів швидких значень (до 200 кГц) за одну секунду (до 200000 значень у пакеті) та наступного розташування даних пакетів у архівах атрибутів параметрів DAQ. === {{Anch|PassiveAndInitiative|Пасивний механізм збору та ініціативні підключення}} === Пасивний механізм збору характерний ініціативою надання даних до SCADA-системи із боку джерела даних. Цей механізм є достатньо рідкісним явищем, однак може мати місце за певних умов або обмежень у можливості використання прямих механізмів збору даних, рисунок 1.4a. Прикладом такої ситуації можуть слугувати географічно розосереджені системи збору даних за посередництвом мобільних мереж GPRS/EDGE/3G/4G/... . Наділення всіх вузлів окремими реальними та статичними IP-адресами, або формування корпоративної мобільної мережі, у таких мережах може виявитися дорогим задоволенням, тому доступніше виявляється ініціатива сеансу передачі даних із-за динамічних IP-адрес на одну реальну IP-адресу серверу SCADA-системи. Дії на модифікацію передаються джерелу даних в момент сеансу передачі даних джерелом — читання. Хоча тут можливі й типові запити через VPN підключення від джерела даних та функціювання через мережеву СУБД-посередника. [[File:DAQ_passive.png|center|frame|Рис.1.4a. Діаграма послідовності взаємодії у пасивному механізмі роботи.]] Згідно до діаграми вище, ми отримуємо наступну поведінку пасивного механізму: * об'єкт джерела даних здійснює періодичні сеанси зв'язку із атрибутом параметру '''DAQParamAttributeArch::setVal()''' для передачі своїх даних та отримання команд дій; * об'єкт SCADA-системи надсилає запит останнього значення атрибуту параметра '''DAQParamAttribute::getVal()''' та отримує збережене локально значення попереднього сеансу зв'язку джерела даних. У випадку коли хост, що ініціює підключення, має динамічну адресу яка не є "сірою", тобто за нею можна підключитися прямо, тоді ініціативне підключення можна використовувати лише для отримання зворотної адреси, за якою прямо і підключатися, а у контролері таких підключень здійснювати лише оновляння динамічної адреси. [[file:at.png]] Окремим випадком є ініціатива встановлення TCP-підключення від джерела даних та подальше здійснення стандартних запитів за цим підключенням від сервера, що вхідні транспорти [[Special:MyLanguage/Modules/Sockets|модуля "Сокети"]] і [[Special:MyLanguage/Modules/SSL|модуля "SSL"]] наразі підтримують. Цей режим наразі навіть найрозповсюдженіший! OpenSCADA також сама підтримує ініціацію таких підключень, тобто може виступати у ролі джерела даних за "сірим" та динамічним IP. Так, вхідний транспорт [[Special:MyLanguage/Modules/Sockets|модуля "Сокети"]] і [[Special:MyLanguage/Modules/SSL|модуля "SSL"]] у режимі 2 виступає ініціатором підключення, після чого надсилає ідентифікуючу послідовність та переходить у звичайний режим отримання запитів від хосту, до якого під'єднався. [[file:at.png]] Щодо чого наразі особливо корисним є віддалений контроль OpenSCADA станцій у сірих мережах за такого підключення. [[File:Oscada_initCon_uk.png|center|frame|Рис.1.4b. Ініціативне підключення Джерел Даних.]] == {{Anch|Virtual|Віртуальні джерела даних}} == Крім збору фізичних даних, актуальною є функція віртуального збору даних. Віртуальні дані представляють собою дані, отримані всередині системи як незалежно, так і на основі фізичних даних. Практично, механізми формування віртуальних даних реалізуються разом з механізмом користувацьких обчислень. В середині промислових контролерів та SCADA-систем використовуються різні мови програмування. У випадку з контролерами, у якості таких мов часто використовуються мови низького рівня (асемблери), однак, останнім часом, все частіш використовуються мови високого рівня (C, Pascal та інші), а також формальні мови IEC 61131-3 (схеми потоків станів SFC, блокові схеми FBD, релейні схеми LD та текстові ST, IL). У випадку із SCADA-системами, обчислювання частіше забезпечуються мовами програмування високого рівня та формальними мовами. У OpenSCADA можуть бути реалізовані інтерфейси програмування та віртуальних джерел даних на основі різних мов, у окремих модулях підсистеми "Збір Даних". На поточний час доступні модулі віртуальних обчислювачів: * Обчислювач на Java-подібній мові: [[Special:MyLanguage/Modules/JavaLikeCalc|JavaLikeCalc]]; * Блоковий обчислювач: [[Special:MyLanguage/Modules/BlockCalc|BlockCalc]]. До ядра OpenSCADA інтегровано механізм користувацьких функцій або [[Special:MyLanguage/Documents/User_API|API користувацького програмування]]. Користувацькі функції можуть надаватися будь яким об'єктом програми, в тому числі й модулями, відповідно до власної функціональності, тим самим надаючи користувачу деякий набір функцій контролю за тим або іншим об'єктом. Функції користувацького API можуть бути як статичними, тобто ті що реалізують фіксовану функціональність окремого об'єкту, так і динамічними, тобто ті що формуються користувачем під потрібне йому завдання на внутрішній мові користувацького програмування високого рівня. Модуль [[Special:MyLanguage/Modules/JavaLikeCalc|JavaLikeCalc]] надає до OpenSCADA механізм створення динамічних користувацьких функцій та їх бібліотек на Java-подібній мові. Опис функції на Java-подібній мові полягає у обв'язки параметрів функції алгоритмом. Крім цього, модуль наділено функціями безпосередніх обчислень, шляхом створення обчислювальних контролерів із асоційованою обчислювальною функцією. Модулем надається механізм прекомпіляції контекстно-залежних функцій, що використовується для вбудовування користувацьких алгоритмів безпосередньо до контексту різних компонентів OpenSCADA, це, наприклад, [[Special:MyLanguage/Documents/Program_manual#DAQ|шаблони параметрів підсистеми "Збір Даних"]] та [[Special:MyLanguage/Modules/VCAEngine|рушій Середовища Візуалізації та Управління (СВУ)]]. Модуль [[Special:MyLanguage/Modules/BlockCalc|BlockCalc]] надає до OpenSCADA механізм створення користувацьких обчислень, що ґрунтується на формальній мові блокових схем. Мови блокового програмування ґрунтуються на понятті блокових схем та функціональних блоків. Причому, залежно від сутності блоку, блокові схеми можуть бути: логічними схемами, схемами релейної логіки, моделлю технологічного процесу та інше. Сутність блокової схеми полягає в тому, що вона містить перелік блоків та зв'язки між ними. З формальної точки зору блок — це елемент (функція), яка має входи, виходи та алгоритм обчислення. Виходячи із концепції середовища програмування, блок — це кадр значень, асоційований з об'єктом функції. Входи та виходи блоків треба поєднувати для отримання цільної блокової схеми. З метою наповнення API користувацького програмування функціями, створені наступні спеціалізовані модулі статичних функцій API користувацького програмування: * Бібліотека функцій системного API: [[Special:MyLanguage/Modules/FLibSYS|FLibSYS]]; * Бібліотека стандартних математичних функцій: [[Special:MyLanguage/Modules/FLibMath|FLibMath]]; * Бібліотека функцій сумісності зі SCADA Complex1: [[Special:MyLanguage/Modules/FLibComplex1|FLibComplex1]]. [[File:DAQ_progCompon_uk.png|center|frame|Рис. 6. Загальна структура компонентів середовища програмування.]] == {{Anch|LogicLev|Логічний рівень обробки даних}} == Вище ми відзначали, що тип джерела даних може коливатися від "сирого" до комплексного. Під "сирим" мається на увазі джерело, яке надає тільки елементарні сигнали (цілі, реальні, логічні, рядок, ...), до того ж окремо. Під комплексним мається на увазі джерело, яке групує сигнали та, в параметрі підсистеми "Збір Даних", надає атрибути додаткового призначення, які покривають практично всі діагностичні завдання, тобто параметр є закінченим об'єктом, який не потребує доповнення. Враховуючи таку розбіжність, може виникнути ситуація, коли інформації у параметру контролера від джерела даних недостатньо для опису реального об'єкту ТП загалом та потрібен довільний об'єкт більш високого рівня абстракції. Вирішенням цієї ситуації може бути формування додаткових параметрів, що є ненаглядним та вносить плутанину. Більш правильним рішенням є використання прошарку "Логічного рівня", який виконує функцію гнучкого формування параметрів-контейнерів сигналів потрібної структури та що включає пост-обробку. Функціонально, "Логічний рівень" призначено для надання у OpenSCADA механізму вільного формування параметрів-контейнерів сигналів потрібної структури. Експлуатаційним призначенням "Логічного рівня" є: * розширення сфери застосування OpenSCADA за рахунок збільшення гнучкості опису параметрів підсистеми "Збір Даних"; * скорочення трудовитрат на створення складних автоматизованих систем. Концепцію "Логічного рівня" засновано на шаблонах параметрів, для яких у підсистемі "Збір Даних" передбачено контейнер бібліотек шаблонів (рис.1). Кожна бібліотека містить шаблони параметрів, які можуть використовуватися модулями підсистеми "Збір Даних" для реалізації параметрів на основі шаблонів. Модулями OpenSCADA, які використовують шаблони у своїй роботі, є: * [[Special:MyLanguage/Modules/LogicLev|LogicLev]] — модуль реалізації класичної концепції "Логічного рівня". * [[Special:MyLanguage/Modules/ModBus|ModBus]] — модуль доступу до даних джерел за посередництвом сімейства протоколів "ModBus". Крім типу параметру прямого опису переліку регістрів, модуль підтримує і логічний тип, де регістри "ModBus" описуються у зв'язках шаблону. * [[Special:MyLanguage/Modules/Siemens|Siemens]] — модуль збору даних контролерів фірми Siemens серії S7. Завдяки високій гнучкості та функціональності контролерів цієї серії, що дозволяє формувати комплексні типи даних різноманітної структури, всі параметри цього модуля первинно працюють за шаблонами, а прямий опис даних додано пізніше. * [[Special:MyLanguage/Modules/OPC_UA|OPC-UA]] — модуль доступу до даних джерел за посередництвом протоколу "OPC-UA". Крім типу параметру прямого опису переліку вузлів, модуль підтримує і логічний тип, де вузли "OPC-UA" описуються у зв'язках шаблону. Загальний механізм роботи "Логічного рівня", на прикладі модуля [[Special:MyLanguage/Modules/LogicLev|LogicLev]], зображено на рисунку 7. [[File:DAQ_loglevel_uk.png|center|frame|Рис. 7. Механізм роботи "Логічного рівня" на прикладі модуля "LogicLev".]] Виходячи із цього зображення видно, що параметри контролеру логічного рівня виконують функцію віддзеркалення інших параметрів підсистеми "Збір Даних" (на прикладі параметрів 1 та 4) і довільне формування параметрів на основі шаблонів 1, 2 та інших параметрів підсистеми "Збір Даних" (на прикладі параметрів 2, 3 і 5). Структура параметрів з шаблоном в основі зображено на рисунку 8. [[File:DAQ_str_prmtmpl_uk.png|center|frame|Рис. 8. Структура параметрів з шаблоном в основі.]] Як можна бачити із структури, параметр логічного рівня складається із об'єкту функції, атрибутів і конфігурації шаблону. Об'єкт функції, це екземпляр виконання функції шаблону з набором входів/виходів і програмою обчислення шаблону на одній із мов користувацького програмування, зазвичай це Java-подібна мова користувацького програмування модуля [[Special:MyLanguage/Modules/JavaLikeCalc|JavaLikeCalc]]. Утім, шаблон може бути взагалі без програми, надаючи тільки структуру перекидання входів/виходів. Атрибути у структурі зображують перелік атрибутів результуючого параметру відповідно до шаблону. Конфігурація у структурі надає конфігурацію властивостей шаблону та його зовнішніх зв'язків. Логіку роботи логічного рівня параметрів можна записати наступним чином: * Параметр зв'язується з шаблоном, із якого отримується структура атрибутів відповідно до функції шаблону. * Виконується зв'язування об'єкту функції параметру з функцією із шаблону. * Формується структура зв'язків відповідно до шаблону функції. Виходячи із структури зв'язків формується форма зв'язування параметру та користувачем встановлюються зв'язки. * При доступі до атрибутів отриманого параметра здійснюється перевірка на наявність прямого зв'язку. У випадку наявності прямого зв'язку, запит переспрямовується за цим зв'язком, інакше, значення береться із об'єкту функції параметру. * Паралельно працює обчислювання функції шаблону за об'єктом функції параметрів. При цьому, перед обчисленням здійснюється читання значень за зв'язками, а після обчислення запис змін за цими зв'язками. Шаблон параметрів загалом надає наступне: * структуру входів/виходів функції шаблону; * ознаки конфігурації і зв'язування шаблона (константа, зв'язок); * типові значення конфігурації постійних і шаблону зв'язків; * ознаки атрибутів результуючого параметру логічного рівня, типів: не атрибут, атрибут з повним доступом, атрибут з доступом тільки на читання; * механізм обчислення входів/виходів функції шаблонів мовою користувацького програмування OpenSCADA. На рисунку 9 наведено зображення вкладки конфігурації шаблону параметрів підсистеми "Збір Даних" у вигляді таблиці з конфігурацією входів/виходів і тексту програми користувацького програмування. [[File:DAQ_prmtmpl_uk.png|center|frame|Рис. 9. Вкладка конфігурації шаблону параметрів підсистеми "Збір Даних".]] Вкладкою входи/виходи "ВВ" шаблону параметрів передбачено наступні властивості спеціалізованого призначення: "Атрибут", "Конфігурація" і "Значення". Властивість "Атрибут" виступає ознакою віддзеркалення входу/виходу шаблону на результуючий атрибут параметра. Передбачено наступні варіанти цієї властивості: * ''Не атрибут'' — вхід/вихід функції шаблону не віддзеркалюється на атрибут; * ''Тільки читання'' — вхід/вихід функції шаблону віддзеркалюється на атрибут з доступом тільки на читання; * ''Повний доступ'' — вхід/вихід функції шаблону віддзеркалюється на атрибут з повним доступом. Властивість "Конфігурація" виступає ознакою, яка вказує на використання входу/виходу функції шаблону в результуючій конфігурації шаблону на логічному рівні. Передбачено наступні варіанти цієї властивості: * ''Змінна'' — доступний для доступу та контролю тільки з процедури шаблона, як змінна, яка зберігається із контекстом параметру логічного рівня; * ''Константа'' — доступний для встановлення на рівні параметра логічного рівня у вигляді постійної розділу конфігурації шаблону; * ''Зв'язок'' — доступний для встановлення на рівні параметру логічного рівня у вигляді зв'язку розділу конфігурації шаблону. Поле "Значення" описує передвстановлене-типове значення постійних і шаблонів зовнішніх зв'язків. Шаблон зовнішніх зв'язків використовується з метою опису механізму групування і автоматичного розподілу зовнішніх зв'язків. Структура шаблону зовнішніх зв'язків однакова у частині підключення до атрибутів параметрів підсистеми "Збір даних" і розширюється специфічним форматом адреси окремого модуля підсистеми "Збору даних", який використовує механізм шаблонів. Підключення до параметрів підсистеми "Збір даних" — шаблон конфігурації зовнішнього зв'язку має вигляд '''{Параметр}|{атрибут}''', де: * ''Параметр'' — використовується для об'єднання атрибутів і розташування на формі конфігурації; * ''атрибут'' — для асоційованого зв'язування атрибутів при призначені параметру. {{Anch|LogicLevLnks|Саме подальше зв'язування}} загалом може здійснюватися: * загальним визначенням-обранням адреси-атрибуту параметру підсистеми "Збір даних"; наприклад, зв'язок "LogicLev.experiment.Pi.var" або "prm:/LogicLev/experiment/Pi/var" здійснює доступ атрибуту параметру до іншого атрибуту параметра; знак "(+)" у кінці адреси вказує на вдале зв'язування і присутність цільового об'єкту; для атрибутів об'єктного типу допустимий ієрархічний доступ до конкретної властивості об'єкту шляхом вказання її шляху через символ '#', наприклад: "LogicLev.experiment.Pi.var#pr1.pr2" або "prm:/LogicLev/experiment/Pi/var#pr1.pr2"; у шляху із префіксом "prm:" ви можете використовувати елементи відносності "." та ".."; * визначенням специфічної адреси окремого модуля підсистеми "Збір даних"; * прямим встановленням постійного значення у форматі "'''val:Стале значення'''"; * порожньою або помилковою адресою, коли значення за зв'язком встановлюється у '''EVAL'''. У якості прикладу використання шаблону, на рисунку 10 наведено зображення параметру "F3" модуля логічного рівня, де представлено вкладку "Конфігурація шаблона" для конфігурації шаблону параметру, включаючи зв'язування. На рисунку 11 представлено вкладку "Атрибути" з переліком атрибутів та їх значень, створених за посередництвом шаблону. [[File:DAQ_wprm_tmpl_uk.png|center|frame|Рис. 10. Вкладка "Конфігурація шаблону" параметру "F3" модуля логічного рівня.]] [[File:DAQ_wprm_a_uk.png|center|frame|Рис. 11. Вкладка "Атрибути" параметру "F3" модуля логічного рівня.]] === {{Anch|UserPrt|Концепція доступу до даних через користувацький протокол}} === Наступним рівнем, заснованим на Логічному Рівні, є концепція доступу до даних через користувацький протокол, що реалізується або прямо у коді шаблону або як окремий об'єкт Користувацького Протоколу у [[Special:MyLanguage/Modules/UserProtocol|модулі Protocol.UserProtocol]], де наразі також можна використовувати DAQ-шаблони. <section begin=userPrt />Концепцію доступу до даних через користувацький протокол можна зобразити як на рисунку 1. [[File:UserPrtDevs_concept_uk.png|center|frame|Рис.1. Концепція доступу до даних через користувацький протокол.]] Як можна бачити з рисунку 1, взаємодія з пристроєм відбувається через деякий транспорт, на якому вони фізично базуються. Запит до транспорту можете надіслати: # Безпосередньо за допомогою функції системного API OpenSCADA об'єкту транспорту ''[[Special:MyLanguage/Documents/User_API#SYSTransport|string messIO( string mess, real timeOut = 0 );]]'', якщо протоколоспецифічна частина дуже проста і дані вам потрібно лише вилучити. # Загорнутий запит даних ''req'', функцією ''[[Special:MyLanguage/Documents/User_API#SYSTransport|int messIO( XMLNodeObj req, string prt );]]'' і для протоколу ''prt'', якщо протокольна частина достатньо складна і вже представлена у OpenSCADA. # Загорнутий запит даних, специфічний до користувача, за допомогою функції ''[[Special:MyLanguage/Documents/User_API#SYSTransport|int messIO( XMLNodeObj req, "UserProtocol" );]]'' і реалізації [[Special:MyLanguage/Modules/UserProtocol|користувацького протоколу]], якщо протокольна частина достатньо складна і ще відсутня у OpenSCADA. Користувач реалізує тут саму протоколоспецифічну частину у [[Special:MyLanguage/Modules/UserProtocol|модулі UserProtocol]] і частину, специфічну до даних, у шаблоні для [[Special:MyLanguage/Modules/LogicLev|модуля Логічного Рівня]] або безпосередньо у процедурі контролеру на внутрішній мові програмування [[Special:MyLanguage/Modules/JavaLikeCalc|модуля JavaLikeCalc]]. :: [[File:at.png]] Цей, останній, метод наразі розвинено до можливості формування протокольної частини коду безпосередньо у тому-ж коді шаблону у вигляді вбудованої функції через виклик запиту першого методу, якщо немає потреби повторного використання; або навіть якщо така потреба є і тут є сенс створення комплексного шаблону, який зможе поєднувати роль і вихідного протоколу через його підключення також до модуля користувацького протоколу, та воно буде повністю зберігатися у одній бібліотеці шаблонів. [[file:at.png]] Пряма робота із вихідним транспортом функції [[Special:MyLanguage/Documents/User_API#SYSTransport|string messIO( string mess, real timeOut = 0 );]] не передбачає блокування транспорту поза викликом цієї функції, а відтак, для складних протоколів із посилками відповіді більш ніж у одному пакеті, що передбачає процес "доочікування", не можна використовувати спільний транспорт, за яким можливе надсилання пакетів різних протоколів або навіть один, але з різних завдань (об'єктів контролерів). Відтак, якщо є потреба використання спільного транспорту, то розташовуйте параметри опитування за протоколом у одному об'єкті контролеру (завдані) або використовуйте [[Special:MyLanguage/Modules/UserProtocol|модуль користувацького протоколу]], до якого це зауваження не має стосунку, оскільки він здійснює таке блокування на час виклику процедури обробки, як і решта модульних протоколів OpenSCADA. <section end=userPrt /> Створено наступні бібліотеки з використанням концепції доступу до даних через користувацький протокол: * [[Special:MyLanguage/Libs/Devices|Бібліотека промислових пристроїв]] * [[Special:MyLanguage/Libs/LowLevelDevices|Бібліотека низькорівневих сенсорів та чипів]] == {{Anch|Redundancy|Резервування джерел даних}} == Резервування загалом, і джерел даних зокрема, слугує для підвищення загального рівня відмовостійкості рішення шляхом включення дублювальних вузлів до спільної роботи з основним вузлом. У випадку відмови основного вузла, відбувається підхоплення функцій основного вузла резервним. Часто, схема резервування може працювати і у режимі розподілу навантаження між вузлами, що спільно працюють. [[File:DAQ_red_uk.png|center|frame|Рис. 12. Горизонтальне і вертикальне резервування.]] У випадку з підсистемою "Збір Даних", резервування даних (рис.12) виконує функції: * '''Резервування механізму збору даних'''. Зазвичай ця функція реалізується без особливих механізмів, шляхом простого запуску паралельних резервних станцій з однаковою конфігурацією і працюючих незалежно. Однак, у випадку виконання станцією функції ПЛК, така поведінка недозволена з причини одночасної видачі керуючих дій і відсутності синхронізації даних обчислювачів, а також для первинних джерел даних із одним можливим підключенням. * '''Компенсація втрати даних на час недоступності вузла''' за рахунок архіву резервного. Передбачено два механізми компенсації. Перший і основний механізм здійснює завантаження ділянок архіву з резервної станції під час запуску станції загалом або окремих об'єктів контролерів. Ділянка архіву запитується з моменту останнього запису у локальному архіві і по поточний час. Глибина запиту обмежується визначенням граничного часу в конфігурації резервування. Другий, доповнюючий механізм, здійснює заповнення "дірок" у архіві значень під час фактичного запиту користувача до цих даних. Такий підхід з одного боку дозволяє здійснити прогнозовану за часом синхронізацію при старті, а з іншого боку, фактично виключає втрату даних за умови роботи хоча б однієї станції на протязі всього робочого часу. * '''Розподіл навантаження по збору даних між вузлами'''. При створені складних розподілених систем може виявитися важливим питання прогнозування і оптимізації загальної продуктивності системи. Враховуючи такі завдання, механізм резервування передбачає виконання завдань збору даних окремих джерел (об'єктів контролерів OpenSCADA) тільки на одній станції. При цьому, завдання решти станцій переходять в режим синхронізації даних зі станцією, що виконується. У випадку втрати зв'язку зі станцією, що виконується, запускається завдання локального збору даних. Передбачено також можливість оптимального розподілу навантаження виконання задач збору даних групи об'єктів контролерів між станціями. * '''Оптимізація навантаження на первинні джерела даних''' за рахунок запиту (обміну) даних у первинного джерела тільки одним вузлом. На практиці часто зустрічаються високонавантажені джерела даних або інтерфейси доступу до джерел даних, для яких навіть збір даних однією станцією може бути проблемою і вимагатиме зниження періодичності збору, тобто якості даних. Механізм резервування, крім розподілу навантаження між станціями за описаною вище схемою, дозволяє зняти додаткове навантаження на джерело даних і його інтерфейси, тим самим підвищивши якість даних. Запис до атрибуту резервного об'єкту контролеру призводить до відправки запиту модифікації на основний, тобто — через основний. * '''Запобігання деякої різниці даних на різних вузлах''', пов'язане з незбігом моментів часу при незалежному зборі даних окремими вузлами, здійснюється шляхом отримання даних зі станції з активним об'єктом контролера. У системах високої звітності з резервуванням має бути виключено, або зведено до мінімуму, розходження у даних на різних станціях, що передбачає реальний збір даних однією станцією і синхронізацію з цими даними інших станцій. Резервування рекомендується налаштовувати таким чином, щоб БД резервних станцій зберігалися однаковими, що надалі дозволить "безболісно" копіювати їх при відновленні на будь яку станцію і, відповідно, у резервній копії можна зберігати тільки один набір БД. При цьому, налаштування, специфічні до окремої станції, будуть зберігатися у конфігураційному файлі і можна буде легко конфігурувати та міняти потрібну станцію через вибір відповідного конфігураційного файлу. Налаштування резервування починається із додання резервних станцій до переліку станцій OpenSCADA на вкладці "Підсистема" підсистеми "Транспорти" (Рис.13). Причому додавати тут потрібно не лише резервні станції до поточної, але й саму цю поточну станцію з її зовнішньою адресою, тобто своєрідна петля. Надалі ці налаштування будуть збережені до загальної БД резервованої системи і сама БД з цього моменту буде використовуватися при створені всіх резервних станцій. Відповідно, важливо на цьому етапі внести всі потрібні зміни до загальної БД довкола проекту в цілому! [[File:DAQ_tr_extHst_uk.png|center|frame|Рис. 13. Вкладка "Підсистема" підсистеми "Транспорти".]] Далі, на конкретній станції з копією загальної БД, налаштовуємо її специфічні параметри у вкладці "Резервування" головної сторінки (рис.14), які будуть збережені у конфігураційному файлі. [[File:DAQ_sys_rd_uk.png|center|frame|Рис. 14. Вкладка "Резервування" головної сторінки.]] Після цього вся конфігурація резервування здійснюється у вкладці "Резервування" підсистеми "Збір даних" (Рис.15). Якщо встановити параметр "Передача локальних первинних команд" (Рис.14) то ця конфігурація, як і будь яка інша загального характеру, може здійснюватися на одній з станцій, а внесенні зміни потраплять на всі резервні, звісно якщо вони будуть доступні. [[File:DAQ_rd_uk.png|center|frame|Рис. 15. Вкладка "Резервування" підсистеми "Збір Даних".]] Завдання обслуговування механізму резервування запускається завжди і виконується з періодичністю, встановленою у відповідному конфігураційному полі. Реальна робота щодо здійснення резервування відбувається за наявності хоча б однієї резервної станції у переліку станцій і передбачає: * Контроль за з'єднанням із зовнішніми станціями. В процесі контролю здійснюються запити до віддалених станцій за оновленням інформації про них і перевірки зв'язку. У випадку втрати зв'язку із станцією, повтор підключення до неї здійснюється через проміжок часу, вказаний у конфігураційному полі інтервалу часу відновлення підключення. У полі "Живий" станції відображається поточний стан зв'язку. У полі "Лічильник" представлено кількість запитів, здійснених до віддаленої станції, або ж час, який залишився до здійснення наступної спроби підключення із втраченою станцією. * Локальне планування виконання об'єктів контролерів у резерві. Планування здійснюється відповідно до рівня станцій і вподобанням виконання об'єктів контролерів. * Виклик функції синхронізації даних локальних об'єктів контролерів, працюючих у режимі синхронізації даних із зовнішніх станцій. Для контролю за часом, витраченим на виконання циклу обслуговування резервування, передбачено поле статусу. При наближені реального часу виконання до циклу завдання обслуговування резервування, рекомендується збільшити періодичність виконання цього завдання! Для об'єкту контролера підсистеми "Збір Даних" передбачено режими резервування "Асиметричне" і "Тільки порушення". Асиметричне резервування працює з тією конфігурацією контролеру віддаленої станції, яка є і не намагається її узагальнювати. Для цього режиму працюють всі раніше описані функції і властивості резервування. Резервування "Тільки порушення" передбачає фактичну роботу без резервування, але з придушенням порушень від резервного об'єкту контролера з метою виключення дублювальних повідомлень про порушення. == {{Anch|TimeStamp|Мітка часу джерела даних}} == Фактично всі джерела даних, які підтримуються OpenSCADA, у якості мітки часу оперативних-потокових даних використовують час комп'ютера, де працює OpenSCADA і здійснюється опитування цих джерела даних, навіть у випадку можливості отримання часу серверу або джерела у джерела даних, і часто навіть у випадку, коли таким джерелом виступає інша станція-ПЛК з OpenSCADA. Такий підхід визначено з декількох причин, а саме: * розрізнення і виокремлення відмінності часу оперативних значень джерела даних та ПК збору даних не має жодної практичної мети, окрім діагностичної з виявлення самого розходження часу, оскільки поточні дані архівуються у архів періодичних значень, де мітка часу так чи інакше притягується і округляється до цієї періодичності, тобто частина часу, точніша за період даних архіву, втрачається; * рідко яке джерело даних взагалі має годинник реального часу, а коли і має, то до нього одразу ставиться вимога синхронізації часу із зовнішнім джерелом зразкового часу, що у свою чергу вимагає вирішення складнощів із прямим підключенням GPS приймача або із доступом до NTP-серверу у Інтернет або локальній мережі; за визначеним-же підходом зразковим часом стає час ПК збору даних навіть коли він сам не синхронізований, оскільки він один; * мітка часу джерела даних може змінюватися з власною періодичністю або це оновлення взагалі може бути аперіодичним, що у випадку використання цієї мітки при опитувані призведе до прогалин у архіві, та навіть коли періодичності опитування-архівування і оновлення мітки часу джерела однакові, такі прогалини будуть мати місце через відсутність синхронності, що доведеться компенсувати зменшенням періодичності опитування та, відповідно, збільшенням навантаження на мережу і джерело; відтак, це зробить архів мало корисним, хоча наразі і надається можливість вважати такі прогалини (прохідні) не фактом відсутності або помилковістю даних. Наразі відомо один метод, коли від мітки часу джерела даних є практична цінність, це робота з історією-архівом на боці джерела даних, коли за виявленням прогалин у даних, наприклад, на час відсутності зв'язку, замість поточних-оперативних даних запитується ділянка історії-архіву, що відповідає цій прогалині. Та цей метод реалізовано у модулі [[Special:MyLanguage/Modules/DAQGate|DAQ.DAQGate]], при роботі OpenSCADA на боці джерела даних або ПЛК. == Посилання == * [[:File:Oscada_subsys_daq_str_uk.odg|Діаграма: Ієрархічна структура підсистеми "Збір даних".]] * [[:File:daq.xmi.gz|UML: Діаграми послідовності підсистеми "Збір Даних".]] * [[:File:Oscada_initCon_uk.odg|Діаграма: Ініціативне підключення Джерел Даних.]] * [[:File:daq_loglevel_uk.dia|Діаграма: Механізм роботи "Логічного рівня" на прикладі модуля LogicLev.]] * [[:File:loglev_prm_uk.dia|Діаграма: Структура параметру логічного рівня.]] * [[:File:daq_progcompon_uk.dia|Діаграма: Загальна структура компонентів середовища програмування.]] * [[:File:UserPrtDevs_concept_uk.odg|Діаграма: Концепція доступу до даних через користувацький протокол.]] * [[:File:daq_red_uk.odg|Діаграма: Горизонтальне та вертикальне резервування.]]
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
216.73.216.110
Talk for this IP address
Log in