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:Модулі/ModBus}}<languages/> {| class="wikitable" |- ! Модуль !! Ім'я !! Версія !! Ліцензія !! Джерело !! Мови !! Платформи !! Тип !! Автор |- <section begin=info /> | [[Special:MyLanguage/Modules/ModBus|ModBus]] || ModBus | 3.8 || GPL2 || daq_ModBus.so || en,uk,ru,de || x86,x86_64,ARM <section end=info /> | Збір Даних || Роман Савоченко |- ! colspan="9" | Опис |- | colspan="9" | Надає реалізацію клієнтського ModBus сервісу. Підтримуються Modbus/TCP, Modbus/RTU та Modbus/ASCII протоколи. |- <section begin=info2 /> | [[Special:MyLanguage/Modules/ModBus|ModBus]] || ModBus | 2.10 || GPL2 || daq_ModBus.so || en,uk,ru,de || x86,x86_64,ARM <section end=info2 /> | Протокол || Роман Савоченко |- ! colspan="9" | Опис |- | colspan="9" | Надає реалізацію ModBus протоколів. Підтримуються Modbus/TCP, Modbus/RTU та Modbus/ASCII протоколи. * '''Загальна працемісткість:''' > 20 {{CtxDetails|ЛД|людино-днів, 1ЛД — 10 годин}} * '''[[Special:MyLanguage/Works/To_do|Завдання (To Do)]]:''' <section begin=ToDo /> : - <section end=ToDo /> |} ModBus — комунікаційний протокол, заснований на клієнт-серверній архітектурі. Розроблений фірмою Modicon для використання у контролерах з програмованою логікою (ПЛК). Став стандартом де-факто у промисловості та широко застосовується для організації зв'язку промислового електронного обладнання. Використовується для передачі даних через послідовні лінії зв'язку RS-485, RS-422, RS-232, а також мережі TCP/IP. На цей час підтримується некомерційною організацією ModBus-IDA. Існує три режими протоколу: ModBus/RTU, ModBus/ASCII та ModBus/TCP. Перші два використовують послідовні лінії зв'язку (переважно RS-485, рідше RS-422/RS-232), останній використовує мережі TCP/IP для передачі даних. Модуль збору даних надає можливість збирати інформацію з різних джерел за протоколом ModBus у всіх режимах. Також, модулем реалізуються функції горизонтального резервування, а саме — спільної роботи з віддаленою станцією цього-ж рівня. В той же час, модуль протоколу дозволяє сформувати та видати дані за протоколом ModBus у різних режимах та через інтерфейси, які підтримуються модулями [[Special:MyLanguage/Documents/Program_manual#Communication|підсистеми "Транспорти"]]. == Загальний опис протоколу ModBus == Протокол ModBus/{RTU,ASCII} припускає один ведучий (запити) пристрій у лінії (master), який може передавати команди одному або декільком веденим пристроям (slave), звертаючись до них за унікальною адресою у лінії. Синтаксис команд протоколу дозволяє адресувати 247 пристроїв на одній лінії зв'язку стандарту RS-485 (рідше RS-422 або RS-232). У випадку з режимом TCP, адресація виключена з протоколу, оскільки здійснюється на рівні TCP/IP стека. Ініціатива здійснення обміну завжди виходить від ведучого пристрою. Ведені пристрої прослуховують лінію зв'язку. Майстер подає запит (посилка, послідовність байт) у лінію та переходить у режим прослуховування лінії зв'язку. Ведений пристрій відповідає на запит, який надійшов на його адресу. Закінчення посилки відповіді визначається залежно від режиму. У режимі RTU закінчення посилки визначається за інтервалом часу між закінченням прийому попереднього байту та початком прийому наступного — час символу. Якщо цей інтервал перевищив час, потрібний для прийому півтори байти на визначеній швидкості передачі то прийом фрейму відповіді вважається завершеним. У режимі ASCII критерієм закінчення посилки є символ '\r', а у режимі TCP — очікуваний розмір посилки, інформація про який присутня у заголовку пакету. === Адресація === Всі операції з даними прив'язано до нуля, кожний вид даних (регістр, біт, регістр входу або біт входу) починається з адреси '''0''' та закінчується '''65535'''. === Стандартні коди функцій === У протоколі ModBus можна виокремити декілька множин команд (Таблиця 1). '''Таблиця 1''': Підмножини команд протоколу ModBus {| class="wikitable" |- ! Підмножина !! Діапазон кодів |- | Стандартні || 1-21 |- | Резерв для розширених функцій || 22-64 |- | Користувацькі || 65-119 |- | Резерв для внутрішніх потреб || 120-255 |} Модулем збору даних використовуються команди '''3''' та '''6(16)''' для читання та запису регістрів, '''1''' та '''5(15)''' для читання та запису бітів, '''2''' та '''4''' для читання біту та регістру входу, відповідно. Для реалізації інших та нетипових команд модулем передбачено функцію [[#UserAPI|API користувацького програмування]], яку можна викликати з [[Special:MyLanguage/Documents/DAQ#LogicLev|процедури шаблону логічного рівня]], надсилаючи довільні PDU-пакети та обробляючи отримані у відповідь. Модуль протоколу обслуговує запити командами '''3''' та '''6(16)''' для читання та запису регістрів, '''1''' та '''5(15)''' для читання та запису бітів. == Модуль реалізації протоколу == Модуль протоколу ModBus містить код реалізації протокольної частини ModBus, а саме — особливості варіантів протоколів ModBus/TCP, ModBus/RTU та ModBus/ASCII. Модуль протоколу, спільно з обраним транспортом, активно використовується модулем збору даних для здійснення безпосередніх запитів. Оскільки модуль протоколу є автономним то, використовуючи його, можна створювати додаткові модулі збору даних за посередництвом нестандартних функцій розширення ModBus різного обладнання автоматизації. === API функції вихідних запитів === API функції вихідних запитів ([[Special:MyLanguage/Documents/User_API#SYSTransport|messIO()]]) оперують обміном блоками PDU, загорнутими у XML-пакети, з відповідною структурою: * '''<{prt} id="{sId}" reqTm="{reqTm}" node="{node}" reqTry="{reqTry}">{pdu}</{prt}>''' :Де: :* ''prt'' — ім'я тегу запиту з назвою використаного варіанту протоколу (TCP, RTU або ASCII). :* ''sId'' — ідентифікатор джерела запиту. Використовується для розташування до [[#Report|звіту вихідного протоколу]]. :* ''reqTm'' — час запиту, а саме — час, протягом якого, очікувати відповіді, у мілісекундах. :* ''node'' — номер вузла призначення або ідентифікатор юніту ModBus/TCP. :* ''reqTry'' — кількість спроб повтору запиту з помилкою у відповіді. Тільки для варіантів ModBus/{RTU,ASCII}. :* ''pdu'' — безпосередньо блок юніту даних (PDU) протоколу ModBus. Результатний ''pdu'' у XML-пакеті замінює ''pdu'' запиту, а також встановлюється атрибут "err" з кодом та текстом помилки, якщо така мала місце. === Обслуговування запитів за протоколом ModBus === Вхідна частина, обслуговування запитів до модуля протоколу, здійснює перевірку та обробку запитів за посередництвом передбачених модулем об'єктів вузлів (рис.1). Фактично, реалізується механізм, який дозволяє OpenSCADA виконувати роль серверу ModBus/TCP або підлеглого пристрою ModBus/{RTU,ASCII}. Таким чином, OpenSCADA отримує можливість використовуватися у ролі будь якого учасника мережі ModBus. [[File:ModBus_prt_nodes_uk.png|center|frame|Рис.1. Вкладка переліку вузлів обслуговування вхідних запитів протоколу.]] Вузол протоколу еквівалентно фізичному вузлу пристрою мережі ModBus та може працювати у трьох режимах: * "Дані" — режим відображення даних OpenSCADA на масиви регістрів та бітів ModBus з передачею їх за запитом клієнтського вузла або майстра. * "Шлюз вузла" — режим переспрямування (шлюзування) запитів до вузла у іншій мережі ModBus через цей вузол. * "Шлюз мережі" — режим переспрямування запитів до будь якого вузла у іншу мережі ModBus, фактично виконуючи інтеграцію декількох мереж ModBus у одну. Оскільки вузлів протоколу може бути створено багато то виходить, що на одному інтерфейсі, тобто у одній мережі, одна станція на основі OpenSCADA може прозоро представляти декілька вузлів мережі ModBus з різними даними. Розглянемо особливості конфігурації вузла протоколу у різних режимах. ==== Режим "Дані" ==== Режим використовується для відображення даних OpenSCADA на масиви регістрів та бітів ModBus. Загальна конфігурація вузла здійснюється у вкладці "Вузол" (рис.2) параметрами: * Стан вузла, а саме: статус, "Ввімкнено" та ім'я БД, яка містить конфігурацію, з відстеженням наявності даних у різних сховищах та наданням послідовного видалення дублікатів. * Ідентифікатор, ім'я та опис вузла. * Стан "Ввімкнено", у який переводити вузол при завантажені. * Адреса вузла мережі ModBus від 1 до 247. * Вхідний транспорт, до мережі якого належить вузол. Обирається із переліку [[Special:MyLanguage/Documents/Program_manual#TransportIn|вхідних транспортів]] підсистеми "Транспорти" OpenSCADA. Вказання символу "*" у якості транспорту робить цей вузол учасником будь якої мережі ModBus з обробкою запитів від будь якого транспорту. * Варіант протоколу ModBus, запити у якому має обробляти вузол, із переліку: Всі, RTU, ASCII, TCP/IP. * Вибір режиму, у даному випадку це режим "Дані". * Період обчислення даних у секундах. Вказує період обробки даних, які формуються для запитів, а саме: таблиці даних ModBus, програми обчислення даних та обслуговування посилання на дані OpenSCADA. * [[Special:MyLanguage/Documents/Program_manual#DAQTmpl|DAQ шаблон]] або мова прямої процедури. Передбачає обрання шаблону або мови прямої процедури для формування та обчислення таблиць даних ModBus, а також для обслуговування зовнішніх посилань на модель даних підсистеми "Збір Даних". Вузлом у цьому режимі обробляються наступні стандартні команди протоколу ModBus: * '''1''' — читання групи бітів; * '''2''' — читання групи бітів входів; * '''3''' — читання групи регістрів; * '''4''' — читання групи регістрів входів; * '''5''' — встановлення одного біту; * '''6''' — встановлення одного регістру; * '''15''' — встановлення групи бітів; * '''16''' — встановлення групи регістрів. [[File:ModBus_prt_node_node_uk.png|center|frame|Рис.2. Вкладка "Вузол" сторінки конфігурації вузла протоколу у режимі "Дані".]] Для формування таблиці віддзеркалення даних мережі ModBus, а саме регістрів та бітів, передбачається вкладка "Дані" (рис.3). Вкладка "Дані" містить таблицю параметрів та програму обробки параметрів визначеною мовою програмування доступною у OpenSCADA, але за шаблоном тут доступно тільки таблицю та у режимі "Ввімкнено". Таблиця містить параметри з властивостями: * ''Ідентифікатор'' — ідентифікатор параметра, є ключовим у формуванні таблиць регістрів та бітів ModBus. Регістри та біти ModBus визначаються наступним чином: :* '''R{N}[w~]''', '''RI{N}[w~]''' — специфічна форма регістру та регістру входу, може бути розширено суфіксами: "i"—Int32, "f"—Float, "d"—Double, "s"—Рядок (розмір по замовченню 10 та до 100 регістрів); :* '''R:{N}[:w~]''', '''RI:{N}[:w~]''' — класична форма регістру та регістру входу, може бути розширено суфіксами: "i4"—Int32, "i8"—Int64, "f"—Float, "d"—Double, "s"—Рядок; :* '''C{N}[w]''', '''CI{N}[w]''', '''C:{N}[:w]''', '''CI:{N}[:w]''' — біт та біт входу. :Де: :* '''{N}''' — адреса даних ModBus пристрою (десяткова, шістнадцяткова, або вісімкова) [0...65535]; :* '''w~e''' — прапорці: режим запису 'w', інверсія порядку регістрів '~', перемикання порядку байтів 'e' регістрів (у LE загалом та BE для рядків). :Приклади: ::"R0x300" — доступ до регістру; ::"C100w" — доступ до біту, доступний для запису; ::"R_f200", "R_f200~" — отримати реальне з регістрів 200 та 201, 201 та 200; ::"R_i400,300" — отримати int32 з регістрів 400 та 300; ::"R_s15,20" — отримати рядок, блок регістрів, з регістру 15 та розміром 20; ::"R_i8:0x10:w" — отримати та встановити int64 у регістри [0x10-0x13]; ::"R_d:0x20,0x30" — отримати реальне подвійної точності (8 байтів) з регістрів [0x20,0x30-0x32]. ; Всі інші параметри, які не потрапили під вище-зазначені правила, є внутрішніми, використовуються для різних проміжних обчислень, обробки, перетворень та значення їх може бути оперативно проконтрольовано та змінено з цієї таблиці у режимі виконання. * ''Ім'я'' — ім'я параметру, використовується для іменування зв'язку. * ''Тип'' — тип параметру із переліку: "Реальний", "Цілий", "Логічний" та "Рядок". Для регістрів та бітів ModBus має сенс встановлювати "Цілий" та "Логічний" тип відповідно. Для регістрів, розширених пріфіксами "f" та "s", треба вказати типи "Реальний" та "Рядок", відповідно. * ''Зв'язок'' — ознака того, що цей параметр має пов'язуватися з атрибутом параметру підсистеми "Збір даних". Вказані цією ознакою зв'язки встановлюються у вкладці "Конфігурація шаблону". * ''Значення'' — початкове або поточне значення параметру, якщо вузол включено. В таблиці, по замовченню, визначаються декілька параметрів спеціального призначення: * ''f_frq'' — частота обчислення таблиці програмою; * ''f_start'' — ознака першого виконання — запуску програми. * ''f_stop'' — ознака останнього виконання — зупинки програми. [[File:at.png]] Оскільки у вказівнику розширених типів регістрів може використовуватися недозволений символ ',' то доступ до нього із програми можна здійснити тільки альтернативним способом, через об'єкт "arguments": <syntaxhighlight lang="JavaScript"> arguments["R_s10,5w"] = "9876543210";</syntaxhighlight> [[File:ModBus_prt_node_data_uk.png|center|frame|Рис.3. Вкладка "Дані" сторінки конфігурації вузла протоколу у режимі "Дані".]] Для параметрів вказаних у якості зв'язків, зв'язки можна встановити для ввімкненого вузла протоколу та у вкладці "Конфігурація шаблону" (рис.4). [[File:ModBus_prt_node_lnk_uk.png|center|frame|Рис.4. Вкладка "Конфігурація шаблону" сторінки конфігурації вузла протоколу у режимі "Дані".]] ==== Режим "Шлюз вузла" ==== Режим використовується для переспрямування запиту до окремого пристрою у іншій мережі ModBus, із мережі ModBus для якої сконфігуровано цей вузол. Загальна конфігурація вузла здійснюється у вкладці "Вузол" (рис.5) параметрами: * Стан вузла, а саме: статус, "Ввімкнено" та ім'я БД, яка містить конфігурацію. * Ідентифікатор, ім'я та опис вузла. * Стан "Ввімкнено", у який переводити вузол при завантажені. * Адрес вузла вхідної мережі ModBus, від 1 до 247. * Вхідний транспорт, до мережі якого має стосунок вузол. Обирається з переліку [[Special:MyLanguage/Documents/Program_manual#TransportIn|вхідних транспортів]] підсистеми "Транспорти" OpenSCADA. Вказання символу "*" у якості транспорту робить цей вузол учасником будь якої мережі ModBus з обробкою запитів від будь якого транспорту. * Варіант протоколу ModBus, запити у якому має оброблятися вузлом, з переліку: Всі, RTU, ASCII, TCP/IP. * Вибір режиму, в цьому випадку цей режим "Шлюз вузла". * Транспорт, у який переспрямовують запит, з переліку [[Special:MyLanguage/Documents/Program_manual#TransportOut|вихідних транспортів]] підсистеми "Транспорти". * Протокол, у якому переспрямовувати запит. * Адреса вузла мережі ModBus, від 1 до 247, у яку переспрямовується запит. [[File:ModBus_prt_node_nodeGwNode_uk.png|center|frame|Рис.5. Вкладка "Вузол" сторінки конфігурації вузла протоколу у режимі "Шлюз вузла".]] ==== Режим "Шлюз мережі" ==== Режим використовується для переспрямування запитів мережі цілком у іншу мережу ModBus, з мережі ModBus для якої сконфігуровано цей вузол протоколу. Тобто, запит на пристрій з будь якою адресою буде спрямовуватися у іншу мережу, без переадресування. Загальна конфігурація вузла протоколу здійснюється у вкладці "Вузол" (рис.6) параметрами: * Стан вузла, а саме: статус, "Ввімкнено" та ім'я БД, яка містить конфігурацію. * Ідентифікатор, ім'я та опис вузла. * Стан "Ввімкнено", у який переводити вузол при завантажені. * Вхідний транспорт мережі, з якого переспрямовуються запити. Обирається з переліку [[Special:MyLanguage/Documents/Program_manual#TransportIn|вхідних транспортів]] підсистеми "Транспорти" OpenSCADA. * Варіант протоколу ModBus, запити у якому має обробляти вузол, із переліку: Всі, RTU, ASCII, TCP/IP. * Вибір режиму, у цьому випадку цей режим "Шлюз мережі". * Транспорт мережі, у яку переспрямовувати запит, з переліку [[Special:MyLanguage/Documents/Program_manual#TransportOut|вихідних транспортів]] підсистеми "Транспорти". * Протокол, у якому переспрямовувати запит. [[File:ModBus_prt_node_nodeGwNet_uk.png|center|frame|Рис.6. Вкладка "Вузол" сторінки конфігурації вузла протоколу у режимі "Шлюз мережі".]] === {{Anch|Report|Звіт запитів ModBus}} === Для контролю та діагностики за коректністю здійснення запитів різними компонентами, модулем надається можливість включення звіту запитів, що проходять через модуль протоколу. Звіт включається вказанням ненульової кількості записів у вкладці "Звіт" сторінки модуля протоколу (рис.7). [[file:at.png]] Цей механізм переважно є застарілим, оскільки його функції наразі виконуються ядром програми: * [[Special:MyLanguage/Documents/Program_manual#DAQDiagnostic|діагностика джерела даних]]; * [[Special:MyLanguage/Documents/Program_manual#TrDiagnostic|протокол трафіку через транспорт]]. [[File:modbus_prt_rep_uk.png|center|frame|Рис.7. Вкладка "Звіт" сторінки модуля протоколу.]] == {{Anch|DAQ|Модуль збору даних}} == Модуль збору даних надає можливість опитування та запису регістрів та бітів пристроїв за посередництвом режимів протоколу TCP, RTU, ASCII та команд запиту '''1''' — '''6''', '''15''', '''16'''. === Об'єкт контролеру === Для додання джерела даних ModBus створюється та конфігурується об'єкт контролеру OpenSCADA. Приклад вкладки конфігурації объекту контролеру даного типу наведено на рисунку 8. [[File:ModBus_cntr_uk.png|center|frame|Рис.8. Вкладка конфігурації об'єкту контролеру.]] За допомогою цієї вкладки можна встановити: * Стан об'єкту контролеру, а саме: Статус, "Ввімкнено", "Виконується" та ім'я сховища, яке містить конфігурацію. :[[file:at.png]] Ручний перезапуск ввімкненого об'єкту контролеру викликає примусове переформування блоків збору. * Ідентифікатор, ім'я та опис контролеру. * Стан "Ввімкнено" та "Виконується", у який переводити об'єкт контролеру при завантажені. * Політика планування та пріоритет задачі збору даних. * ModBus протокол, який використовується для опитування фізичного пристрою (TCP/IP, RTU або ASCII). * Адреса вихідного транспорту із використанням уніфікованого підключення із навігацією. Типовий порт ModuBus/TCP це 502. Поле може бути встановлено у порожнє та змінено під час виконання. Формат адреси: ** "'''{TrModule}.[out_]{TrID}[:{TrAddr}]'''" — типовий вихідний із автоматичним створенням ''TrID'' за його відсутності та наданні ''TrAddr''; ** "'''{TrModule}.in_{TrID}:{RemConId}'''" — ініціативний вхідний із ідентифікатором підключення у ''RemConId''. * ModBus вузол призначення. У випадку з протоколами RTU та ASCII це індивідуальна адреса фізичного пристрою, а для TCP/IP це ідентифікатор одиниці. * Об'єднання фрагментів регістрів. Стандартні функції '''1'''-'''4''' дозволяють запитати одразу декілька суміжних регістрів або бітів. Така стратегія часто дозволяє оптимізувати трафік та час. Однак, потрібні регістри не завжди розташовані суміжно один до одного та така опція дозволяє збирати їх у блоки до 100 регістрів або 1600 бітів. :[[File:at.png]] До встановлення цього параметру треба підходити з обережністю, оскільки не всі пристрої підтримують доступ до регістрів між фрагментами. * Використовувати функції запису декількох елементів ('''15''', '''16'''). Замість функцій одно-елементного запису буде використано багато-елементні. * Асинхронний запис. Вмикає асинхронний запис змін до контролеру, у загальному циклі опитування та після самого опитування даних, блокуючи читання записаних значень на один цикл (до очищення буферу запису). : [[file:at.png]] Цей режим також запобігає втраті записаних даних за втрати підключення та записані дані будуть передані щойно підключення буде відновлено. * Пропуск циклів для читання назад записаного. Може бути корисним для ПЛК, що застосовують зміни не швидко та вони опрацьовуються за певний значний час, залежно від навантаження ПЛК. Тож, значення циклів визначає кількість циклів читання, що пропускаються перед зворотнім читанням зміненого значення, запобігаючи блиманню значення. * Час очікування підключення у мілісекундах. Вказує проміжок час, на протязі якого очікувати відповіді. У випадку вказання нульового значення використовується час очікування по замовченню у транспорті. Дозволяє враховувати індивідуальні властивості контролеру у загальній мережі. * Час відновлення підключення у секундах. Вказує проміжок часу, за вичерпанням якого здійснювати повторну спробу запиту до раніш недоступного пристрою. * Спроб запиту для протоколів RTU та ASCII. Вказує на кількість спроб повтору запиту у випадку отримання неповної або пошкодженої відповіді. * Максимальний розмір блоку запиту у байтах, корисний для контролерів з таким обмеженням. === Параметри === Модуль збору даних надає два типи параметру: "Стандартний (Prm)" та "Логічний (PrmL)". Додатковими конфігураційними полями параметрів цього модуля є: * '''''Стандартний (Prm)''''': ** ''Перелік атрибутів'' — містить структурований перелік конфігурації атрибутів ModBUS. * '''''Логічний (PrmL)''''': ** ''Шаблон параметру'' — адреса шаблону параметру DAQ. ==== Стандартний (Prm) ==== Головну сторінку конфігурації параметру стандартного типу представлено на рисунку 9. [[File:ModBus_prm_uk.png|center|frame|Рис.9. Вкладка конфігурації параметру стандартного типу.]] Лінія атрибуту у параметрі переліку атрибутів записується як "'''{dt}:{numb}[:{flg}[:{id}[:{name}]]]'''".<br/> Де: * ''dt'' — тип даних ModBus ("R"—регістр[3,6(16)], "C"—біт[1,5(15)], "RI"—регістр входу[4], "CI"—біт входу[2]); :"R" та "RI" можуть бути розширені суфіксами: "i2"—Int16, "i4"—Int32, "i8"—Int64, "u2"—UInt16, "u4"—UInt32, "f"—Float, "d"—Double, "b5"—Біт5, "b"—Біт у адресі, "s[КОДУВАННЯ]"—Рядок (розмір по умовчанню 10 та до 100 регістрів); * ''numb'' — адреса ModBus пристрою (десяткова, шістнадцяткова або вісімкова) [0...65535]; * ''flg'' — прапорці: режим запису/читання (r-читати, w-писати), суворий режим запиту (без комбінування) 's', інверсія порядку регістрів '~', перемикання порядку байтів 'e' регістрів (у LE загалом та BE для рядків); * ''id'' — ідентифікатор атрибуту що створюється; * ''name'' — ім'я атрибуту що створюється. Приклади: :"R:0x300:rw:var:Variable" — доступ до регістру; :"C:100:rw:var1:Variable 1" — доступ до біту; :"R_f:200:r:float:Float", "R_f:200:r~:float:Float" — отримати реальне з регістрів 200 та 201, 201 та 200; :"R_i4:400,300:r:int32:Int32" — отримати int32 з регістрів 400 та 300; :"R_b10:25:r:rBit:Reg bit", "R_b:25.10:r:rBit:Reg bit" — отримати біт 10 з регістру 25; :"R_s:15,20:r:str:Reg blk" — отримати рядок (блок регістрів) з регістру 15 та розміром 20. Лінія, що починається з символу '#', вважається коментарем та не обробляється. Відповідно до визначеного переліку атрибутів здійснюється опитування та створення атрибутів параметру (рис.10). [[File:ModBus_prm_atr_uk.png|center|frame|Рис.10. Вкладка атрибутів параметру стандартного типа.]] ==== Логічний (PrmL) ==== Головну сторінку конфігурації параметру логічного типу представлено на рисунку 11. [[File:ModBusLog_prm_uk.png|center|frame|Рис.11. Вкладка конфігурації параметру логічного типа.]] Значення посилання при конфігурації шаблону (рис.12) записується у формі "'''{dt}:{numb}[:{flg}]'''".<br/> Де: * ''dt'' — тип даних ModBus ("R"—регістр[3,6(16)], "C"—біт[1,5(15)], "RI"—регістр входу[4], "CI"—біт входу[2]); :"R" та "RI" можуть бути розширені суфіксами: "i2"—Int16, "i4"—Int32, i8-Int64, u2-UInt16, u4-UInt32, "f"—Float, "d"—Double, "b5"—Біт5, "b"—Біт у адресі, "s[КОДУВАННЯ]"—Рядок (розмір по умовчанню 10 та до 100 регістрів); * ''numb'' — адреса даних ModBus пристрою (десяткова, шістнадцяткова або вісімкова) [0...65535]; * ''flg'' — прапорці: режим запису/читання (r-читати, w-писати), інверсія порядку регістрів '~', перемикання порядку байтів 'e' регістрів (у LE загалом та BE для рядків). Приклади: :"R:0x300:rw" — доступ до регістру; :"C:100:rw" — доступ до біту; :"R_f:200:r", "R_f:200:r~" — отримати реальне з регістрів 200 та 201, 201 та 200; :"R_i4:400,300:r" — отримати int32 з регістрів 400 та 300; :"R_b10:25:r", "R_b:25.10:r" — отримати біт 10 із регістру 25; :"R_s:15,20:r" — отримати рядок (блок регістрів) з регістру 15 та розміром 20. [[File:modbusLog_tmpl_uk.png|center|frame|Рис.12. Вкладка "Конфігурація шаблону" параметра логічного типу.]] Модулем передбачена особлива обробка низки атрибутів шаблону: * ''f_frq'' — частота обчислення процедури шаблону або час після останнього обчислення (негативне у секундах) для планування за CRON, тільки читання. * ''f_start'' — ознака першого виконання процедури шаблону — запуск, тільки читання. * ''f_stop'' — ознака останнього виконання процедури шаблону — зупинка, тільки читання. * ''f_err'' — помилка параметру, повний доступ. Значення цього атрибуту шаблону потрапляє до атрибуту помилки параметру "err". Записати сюди '''EVAL''' для можливості встановлення ззовні атрибуту "err" та всіх інших у режимі Тільки для Читання. * ''SHIFR'' — значення шифру параметру, тільки читання. * ''NAME'' — значення назви параметру, тільки читання. * ''DESCR'' — значення опису параметру, тільки читання. * ''this'' — об'єкт даного параметру, дозволяє отримати доступ до атрибутів параметру, наприклад, для доступу до архівів-історії. Відповідно до шаблону, який лежить у основі параметру, ми отримаємо набір атрибутів параметру (рис.13). [[File:modbusLog_prm_atr_uk.png|center|frame|Рис.13. Вкладка атрибутів параметру логічного типу.]] === {{Anch|UserAPI|API користувацького програмування}} === У зв'язку із підтримкою параметрів логічного типу, має сенс надання низки функцій користувацького API для їх виклику із шаблону логічного параметру. <section begin=API /> [[File:Oscada UserOM ModBus_uk.png|right|Об'єктна модель користувача модуля ModBus.]] '''Об'єкт "Контролер" [this.cntr()]''' * ''string messIO(string pdu)'' — відправка PDU ''pdu'' через транспорт об'єкту контролеру за посередництвом ModBus протоколу. PDU результату запиту розташовується замість запиту у ''pdu'', а помилка повертається у результаті функції. '''Об'єкт "Параметр" [this]''' * ''bool attrAdd( string id, string name, string tp = "real", string selValsNms = "" )'' [<span style="color: red">для включеного параметру логічного типу</span>] — додання атрибуту ''id'' з ім'ям ''name'' та типом ''tp''. Якщо атрибут вже присутній то будуть застосовані властивості, які можливо змінити "на ходу": ім'я, режим вибору та параметри вибору. ** ''id, name'' — ідентифікатор та ім'я нового атрибуту; ** ''tp'' — тип атрибута [boolean | integer | real | string | text | object] + режим вибору [sel | seled] + тільки для читання [ro]; ** ''selValsNms'' — два рядки зі значеннями у першому та їх іменами у другому, поділені ";". * ''bool attrDel( string id )'' [<span style="color: red">для включеного параметру логічного типу</span>] — видалення атрибуту ''id''. <section end=API /> == Посилання == * [[:File:Oscada UserOM ModBus_uk.odg|Діаграма: Об'єктна модель користувача модуля ModBus.]]
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