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/> <div style="float:right; border:1px solid gray; width:300px; padding:2px; margin-left: 10pt; margin-bottom: 10pt; "> * '''Автор:''' {{Author|[[User:RomanSavochenko|Роман Савоченко]]|Максим Лысенко (2010-2012)}} * '''Видео-дополнения:''' ** [http://ftp.oscada.org/OpenSCADA/0.8.0/doc/ru/QuickStart.mkv Официальное дополнение OpenSCADA 0.8.0 LTS (устарелое)], [[User:RomanSavochenko|Роман Савоченко]], 2012 ** [https://www.youtube.com/playlist?list=PLIE6cVnMQoAkVccU9mGMIPNYVVug-LVau Видео "Как (How to) ..." от Сергея Карпеша], Сергей Карпеш, 2018 * '''Изначально создано:''' в [http://wiki.oscada.org/Doc/QuickStart старой Wiki] * '''Целиком отревизировано:''' 12.01.7532/11.03.2024 </div> OpenSCADA является предельно модульной, гибкой и многофункциональной SCADA-системой. Как следствие, первое знакомство с OpenSCADA может быть достаточно сложным, по причине малых шансов совпадения предыдущего опыта пользователя, или полного его отсутствия, с подходами работы в OpenSCADA. Однако, в значительной степени, это только первое впечатление, поскольку вся мощь OpenSCADA оказывается в руках пользователя и от изобилия которой пользователь может растеряться, и ему могут понадобиться значительные усилия для отбора функций, нужных в решении его задачи. По этой причине, и для наглядного представления общей концепции работы в OpenSCADA, создан данный документ. Документ на примерах, и в достаточно краткой и наглядной форме, представляет путь от установки и запуска OpenSCADA до создания элементов пользовательского интерфейса. В качестве целевой помощи в конфигурации, реализации и решения типовых задач около OpenSCADA, также могут быть использованы документы [[Special:MyLanguage/Documents/FAQ|Частые вопросы]] и "[[Special:MyLanguage/Documents/How_to|Как (How to) ...]]". Документ предназначен для OpenSCADA версии 0.9 и выше. Если-же вас интересует этот документ для ранних версий тогда вы можете его получить из документации, которая идёт с пакетами той версии OpenSCADA, или из [http://wiki.oscada.org/Doc/QuickStart этого документа старой Wiki]. Документ не содержит детального описания концепции и погружения в детали OpenSCADA, а предоставляет ссылки на документы, содержащие такую информацию, и в первую очередь это [[Special:MyLanguage/Documents/Program_manual|Руководство по программе]]. Документ строится синхронно с реализацией примеров на подключении к демонстрационной базе данных (БД) [[Special:MyLanguage/Using/Model_AGLKS|модели "АГЛКС"]] в роли источника данных — ПЛК. Следовательно, пользователь должен получить дистрибутив OpenSCADA с этой БД, о чём детальнее в разделе [[#Installation|Установка]]! == Термины, определения и аббревиатуры == {{:Documents/Terms/ru}} == {{Anch|Installation|Установка OpenSCADA}} == {{:Documents/How_to/Install/ru}} == Первичная конфигурация и запуск == Для наших основных задач с OpenSCADA, в рамках этого документа, нужно установить пакет с БД модели "АГЛКС" — '''openscada-model-aglks''', про что можно детально узнать из предыдущего раздела. Конечно, если вы используете [[Special:MyLanguage/Documents/How_to/Live_disk|Живой Диск]] то у вас всё нужное уже есть. [[File:at.png]] Не рассматривайте тут установку-сборку OpenSCADA из исходных текстов поскольку требование квалификационного уровня пользователя, для этой задачи, значительно выше уровня документа в целом и тут неизбежно будут несоответствия с руководством, ввиду крайне вероятных различий в исходной конфигурации. Установленная БД модели "АГЛКС" не нуждается в предварительной настройке. Если-же нужно выполнить особую настройку, которая отличается от базовой, то воспользуйтесь [[Special:MyLanguage/Documents/Program_manual#Config|руководством по программе]]. В процессе чего Вам может понадобиться информация про типовые учётные записи и пароли OpenSCADA (не имеют отношения к учётным записям ОС), хотя модели и ново-созданные конфигурации запускаются от привилегированного пользователя и вы можете легко изменить любую из них: * Суперпользователь (root), пароль — "openscada". * Пользователь (user), пароль — "user". * Пример отдельного пользователя (roman), пароль — "roman". Демонстрация OpenSCADA на основе БД модели "АГЛКС" это не тоже, что обычно предоставляют коммерческие производители ПО с целью продемонстрировать возможности, но исключить или усложнить нормальную работу путём ограничения функций. Демонстрация OpenSCADA, это полно-функциональная программа, предоставляющая примеры реализации и настройки различных компонентов. На основе БД модели "АГЛКС" и других моделей OpenSCADA можно создавать собственные проекты, используя предоставленные наработки. Но после получения определённого опыта лучше новые проекты создавать с чистой конфигурации со стандартными библиотеками OpenSCADA, про что далее будет отмечено; и это чтобы не замусоривать проект ненужными там компонентами чем увеличивая требования к ресурсам и непредсказуемость во время долговременной эксплуатации! [[File:at.png]] Динамическая модель компрессорной станции на 6 газовых компрессоров, которая лежит в основе демонстрационной БД, требует заметных ресурсов, а именно — процессора с частотой более 1 ГГц (x86) и памяти до 200 МБ. Данные вычислительные ресурсы требуются непосредственно для динамической модели и не являются общим показателем ресурсоёмкости программы в конечных задачах! Требования к памяти, наоборот, являются типовым показателем для графической станции АРМ похожей сложности. Общий процесс конфигурации SCADA-системы для исполнения функций верхнего уровня — АРМ оператора, можно условно разделить на два этапа: * Конфигурация источника данных, создание базы данных (БД) параметров этих источников, создание вычислительных логических параметров и настройка истории. * Формирование визуального представления данных ТП, путём создания интерфейса оператора в виде: мнемосхем, групп графиков, групп контуров, документов и другое. Итак, нашей конечной целью и целью этого документа является построение полноценной конфигурации локальной SCADA-станции, объединённую с сервером, и с эмуляцией источника данных на основе этой демонстрационной БД (Рис.3). [[file:QuickStart_SimpleStationAndServer_ru.png|center|frame|Рис. 3. Простое объединённое подключение станции и сервера SCADA с источником данных в демонстрационной БД.]] По ходу, мы ознакомимся с такими важными ролями OpenSCADA как: сервер сбора, архивации, визуализации; среда исполнения ПЛК и удаленная разработка. Но перед этим мы осмотрим OpenSCADA и её возможности в целом. === Общий обзор === Запустить локальное исполнение OpenSCADA с БД модели "АГЛКС" можно из меню окружения рабочего стола в разделе "Графика", пункт "Модель "АГЛКС" на открытой SCADA системе" с характерной иконкой (Рис.3.1.1). [[file:QuickStart_demenu_oscada_ru.png|center|frame|Рис. 3.1.1. Пункт меню окружения рабочего стола для локального запуска демонстрации OpenSCADA.]] Локальный запуск также можно осуществить из консоли, командой: <syntaxhighlight lang="bash"> openscada_AGLKS </syntaxhighlight> После запуска мы получим окно графического конфигуратора OpenSCADA — [[Special:MyLanguage/Modules/QTCfg|QTCfg]] (Рис.3.1.2) с открытой корневой страницей. Демонстрационная БД специально настроена так, чтобы первым при запуске появлялось окно конфигуратора. В дальнейшем можно открыть окно разработки графических интерфейсов пользователя, а также запустить проект пользовательского интерфейса на исполнение. [[file:QuickStart_QTCfg_root.png|center|frame|Рис. 3.1.2. Программный конфигуратор OpenSCADA — QTCfg, корневая страница.]] Программный конфигуратор OpenSCADA является основным и достаточным средством для конфигурации любого компонента OpenSCADA. Как и многие компоненты OpenSCADA, конфигуратор реализован в виде модуля. Кроме конфигуратора QTCfg доступны и другие конфигураторы, выполняющие те же функции, но реализованные на основе других технологий. Например, таковыми являются Web-конфигураторы: [[Special:MyLanguage/Modules/WebCfgD|WebCfgD]] и [[Special:MyLanguage/Modules/WebCfg|WebCfg]]. Все действия в дальнейшем мы будем рассматривать только в конфигураторе QTCfg, хотя их можно будет выполнить и в других конфигураторах. Структуру интерфейса окна конфигуратора можно детально рассмотреть по [[Special:MyLanguage/Modules/QTCfg|ссылке]]. Для нас сейчас более важно рассмотреть все доступные графические интерфейсы OpenSCADA, поэтому нажмём предпоследнюю сверху иконку на панели инструментов, которая откроет окно разработки пользовательского интерфейса (Рис.3.1.3). [[file:QuickStart_Vision_dev_ru.png|center|frame|Рис. 3.1.3. Окно разработки пользовательского интерфейса.]] Далее можем запустить проект "АГЛКС" на исполнение, для чего выбираем его в перечне проектов и запускаем, нажимая на первую слева иконку на панели инструментов, или в контекстном меню. В результате чего получим окно интерфейса конечного пользователя — оператора (Рис.3.1.4). [[file:QuickStart_Vision_run_ru.png|center|frame|Рис. 3.1.4. Окно конечного интерфейса пользователя проекта "AGLKS".]] Построение и исполнение пользовательских интерфейсов осуществляется [[Special:MyLanguage/Modules/Vision|модулем Vision]] подсистемы "Пользовательские интерфейсы". Кроме этого модуля ещё доступны иные модули визуализации, например, OpenSCADA предоставляет [[Special:MyLanguage/Modules/WebVision|модуль WebVision]], который позволяет исполнять проекты разработанные в интерфейсе модуля Vision, но посредством Web-технологий и стандартного Web-браузера. [[File:at.png]] For accessing the Web-interfaces of need host on the Figure 3 you can sequentially try such URL: http://localhost:10002, http://localhost:10003, http://localhost:10004. Все действия в дальнейшем будем рассматривать только в интерфейсе модуля Vision. Таким образом мы запустили демонстрацию OpenSCADA и познакомились с основным набором инструментов. В дальнейшем будем их использовать в конфигурации OpenSCADA для выполнения функций верхнего уровня — АРМ оператора и других задач. [[File:at.png]] Закроем программу через соответствующий пункт меню "Файл", что нужно сделать обязательно иначе её дальнейший фоновый запуск не сможет открыть портов уже занятых этой программой. === {{Anch|Demon|Фоновое и удалённое выполнение — сервер, среда исполнения ПЛК и удалённая разработка}} === [[file:at.png]] Все консольные операции можете выполнить в консольном терминале, например, программа "konsole" в окружении Живого Диска из диалога запуска по Alt+F2. И каталог "{HOME}" тут это "'''/home/user'''". {{#lst:Documents/Program_manual/ru|Service}} Таким образом вы получите демонстрационную БД (проект "АГЛКС"), которая работает в фоне, что однако мы не увидим пока не попробуем подключиться к этой конфигурации, про что ниже. Теперь, при каждом запуске компьютера, она будет таким образом запускаться и работать в фоне. В целом, именно так осуществляется запуск и выполнение серверных конфигураций, [[Special:MyLanguage/Sub-projects/Embedding_and_PLC|окружений ПЛК и одноплатных ПК]] вроде [[Special:MyLanguage/Using/Raspberry_Pi|RaspberyPi]]. Если у вас все-же возникли проблемы при работе с консолью-терминалом или вы сознательно хотите фонового исполнения в графическом окружении — так называемого "запуска или закрытия в системный лоток", тогда на этой стадии вы можете снова запустить демонстрационную конфигурацию, как описано в начале этого раздела (Рис.3.1.1), установить параметр '''Сворачивать или запускать в системный лоток''' [[Special:MyLanguage/Modules/QTStarter#Cfg|модуля UI.QTStarter]] и закрыть окно конфигуратора, чтобы проект модели АГЛКС свернулся в системный лоток. === {{Anch|UserPrjCrt|Создание собственного проекта}} === В окне менеджера проектов OpenSCADA (Рис.3.3) создадим наш собственный проект, который можно вызвать из меню окружения рабочего стола в разделе "Графика" общим пунктом "Открытая SCADA-система" с характерной иконкой (Рис.3.1.1) или командой из консоли-терминала: <syntaxhighlight lang="bash"> openscada</syntaxhighlight> [[file:QuickStart_ProjManager_ru.png|center|frame|Рис. 3.3. Окно менеджера проектов OpenSCADA.]] В этом окне мы также можем проверить фоновое исполнение серверной и демонстрационной конфигураций. А именно, нажмём соответствующую кнопку '''Создать-обновить проект''' и введём название нового проекта — '''Start'''. [[File:at.png]] When you want to check yourself for some problems or other reasons, you may download [http://ftp.oscada.org/OpenSCADA/Projects/Start_QuickStart.backup backup] of the already ready OpenSCADA "Start" project and restore it by context menu in the same window Figure 3.3. You have to place the backup file in directory of OpenSCADA user projects — "~/.openscada/", like to from the console-terminal: <syntaxhighlight lang="bash"> wget http://ftp.oscada.org/OpenSCADA/Projects/Start_QuickStart.backup -P ~/.openscada/ </syntaxhighlight> ==== {{Anch|RemConUse|Подключение и использование удалённых и фоновых конфигураций}} ==== Теперь мы можем попробовать удалённо подключиться к фоновому демонстрационному проекту, посмотреть на его конфигурацию и запустить демонстрационный проект на локальное исполнение из сервера визуализации. На странице "Транспорты" (Рис.3.3.1.1) в режиме '''Пользовательский и Системный''' создадим подключение к нашей фоновой демонстрации "AGLKS" как станции OpenSCADA. Укажем там транспорт '''Сокеты''', адрес '''localhost''', пользователя '''root''' и пароль '''openscada'''. После обновления дерева навигации конфигуратора командой контекстного меню мы должны получить новый корневой пункт этого подключения и сможем контролировать удалённую-фоновую станцию с этого конфигуратора. [[File:at.png]] Если пункт удалённой станции появился, но отображает отсутствие подключения, то вы допустили ошибку в конфигурации выше или удалённая станция не доступна, что, в нашем случае, может означать только то, что она не работает в фоне, а значит вернитесь к [[#Demon|соответствующему разделу]] и повторите операции в нём. Если всё работает, то сохраним эту конфигурацию, нажав вторую иконку слева на панели инструментов наверху, поскольку мы ещё воспользуемся ею для прямого шлюзования параметров сбора данных из демонстрационного проекта, как ПЛК. [[file:QuickStart_TrRemStationsAndBrowse.png|center|frame|Рис. 3.3.1.1. Страница "Транспорты" внешних хостов OpenSCADA и обзор дерева OpenSCADA удалённой-фоновой станции.]] На странице конфигурации визуализатора UI.Vision (Рис.3.3.1.2) выберем: * станцию движка СВУ — "'''AGLKS'''"; * пользователя запуска — '''оставим пустым'''; * пароль пользователя этой удалённой станции — '''оставим пустым'''; * проект(и) автоматического исполнения — также '''оставим пустым''', поскольку мы хотим увидеть возможность удалённой разработки. [[file:QuickStart_RemoteVisionCfg.png|center|frame|Рис. 3.3.1.2. Страница конфигурации визуализатора UI.Vision.]] Последующий запуск модуля UI.Vision, второй иконкой с конца на панели инструментов наверху, должен привести среду визуальной разработки к установке подключения с сервером визуализации фонового демонстрационного проекта. Где вы можете осуществлять удалённую разработку (Рис.3.3.1.3) и запускать проекты с этого сервера визуализации на исполнение (Рис.3.3.1.4). [[file:QuickStart_RemoteVisionDev_ru.png|center|frame|Рис. 3.3.1.3. Экран удалённой разработки UI.Vision для сервера визуализации "АГЛКС".]] [[file:QuickStart_RemoteVisionRun_ru.png|center|frame|Рис. 3.3.1.4. Экран удалённого исполнения UI.Vision для сервера визуализации "АГЛКС".]] [[File:at.png]] Эту конфигурацию удалённого подключения к серверу визуализации сохранять не нужно и поле конфигурации "Станция движка СВУ" (Рис.3.3.1.2) нужно вернуть в "'''<Локально>'''", а пользователя станции установить в "'''root'''" — после чого '''сохранить'''. Возможность удалённого подключения и разработки иногда является единственным способом осуществить разработку или корректировку не только для серверных конфигураций исключительно с WEB-интерфейсом, но и для конфигураций с локальною визуализацией, когда само окружение локальной визуализации непригодное или ограниченное для исполнения среды разработки модуля UI.Vision, например, таких как смартфоны, планшеты и другие мобильные устройства с малым экраном, исключительно сенсорным вводом ([[Sub-projects/Adaption_to_Android|Android]]) или ограничениями, вроде невозможности открытия системной виртуальной клавиатуры ([[Special:MyLanguage/Using/Nokia_Linux|Nokia N9]]). И эту удалённую разработку в основном можно осуществлять в процессе исполнения проекта — горячая разработка, что особенно актуально для Web-интерфейсов и локальных интерфейсов, которые запускаются только в окне исполнения. Что касается удалённой конфигурации, то на один локальный конфигуратор, как центр администрирования, можно собрать все удалённые станции в сети включая станции в скрытых сетях станций первого уровня "поднять" которые можно аргументом "Уровень поднятия" (Рис.3.3.1.1). ==== Подключение стандартных библиотек OpenSCADA ==== Ново-созданный проект OpenSCADA не содержит никакой специфической конфигурации, фактически является пустым и предусматривает создание пользователем новой конфигурации в локальном файле БД SQLite "St.db", который располагается в собственном каталоге проекта с таким-же названием. Создавать сложный проект SCADA-системы проще с использованием [[Special:MyLanguage/Libs|библиотек функций API объектной модели OpenSCADA и библиотек графических элементов]], а также других библиотек OpenSCADA. Для использования библиотек OpenSCADA нужно файлы БД, где они хранятся: подключить — добавить в объекте модуля БД "SQLite" (Рис.3.3.2.1), установить-выбрать '''адрес''' и указать кодировку БД в "'''UTF-8'''" (Рис.3.3.2.2). [[file:at.png]] После чего, или в случае наличия уже записей БД библиотек, необходимые из них нужно активировать, про что читайте далее. [[file:QuickStart_SQLite_add_ru.png|center|frame|Рис. 3.3.2.1. Добавление объекта БД "SQLite".]] [[file:QuickStart_SQLite_obj_ru.png|center|frame|Рис. 3.3.2.2. Объект БД "SQLite" библиотеки OpenSCADA.]] Дистрибутивы OpenSCADA поставляются с рядом библиотек в виде файлов БД "SQLite" (таблица 3.3.2), которые, при запуске-создании пользовательского проекта, помещаются в каталоге "LibsDB/". Согласно этому перечню в объекте модуля БД "SQLite" добавляем или используем готовые записи нужных библиотек, '''устанавливаем им флаг "Включать"''' и '''сохраняем'''. Далее, для загрузки содержимого библиотек, можно включить БД и нажать кнопку "Загрузить программу с этой БД", однако при загрузке ряд новых объектов не включится, поэтому проще '''завершить новый проект и запустить''' его опять. '''Таблица 3.3.2.''' Библиотеки OpenSCADA в составе дистрибутива. {| class="wikitable" |- ! Идентификатор !! Имя !! Адрес !! Язык/кодировка || Описание |- | OscadaLibs || Библиотеки OpenSCADA || LibsDB/OscadaLibs.db || EN,UK,RU/UTF-8 || Библиотеки источников данных, служб и обработки. |- | vcaBase || СВУ: Главные библиотеки || LibsDB/vcaBase.db || EN,UK,RU/UTF-8 || Библиотеки графических элементов OpenSCADA модуля [[Special:MyLanguage/Modules/VCAEngine|UI.VCAEngine]]. |- | vcaTest || СВУ: Тесты || LibsDB/vcaTest.db || EN,UK,RU/UTF-8 || Библиотека тестов графических элементов. |- | vcaElectroEls || СВУ: Библиотека электро-элементов мнемосхем пользовательского интерфейса || LibsDB/vcaElectroEls.db || EN,UK,RU/UTF-8 || Предоставляет библиотеку мнемонических элементов интерфейса пользователя электрических подстанций и станций генерации электрики. |} В результате добавления библиотек OpenSCADA вы получите окружение, готовое для добавления источников данных, определения их истории и формирования интерфейса собственного проекта SCADA-системы. == Работа с источниками данных == Основной функцией любой SCADA-системы является работа с источниками данных реального времени, а именно опрос программируемых логических контроллеров (ПЛК) и простых модулей УСО. Детальнее ознакомиться с этим вопросом можно в [[Special:MyLanguage/Documents/DAQ|документе "Сбор данных в OpenSCADA"]]. Поддержка того или иного источника данных зависит от протокола или API, по которому источник предоставляет свои данные, и наличия для протокола-API модуля подсистемы "Сбор данных" в OpenSCADA или его реализации DAQ-Шаблоном на [[Special:MyLanguage/Documents/DAQ#LogicLev|Логическом Уровне]]. Общий перечень модулей подсистемы "Сбор данных" и документацию по ним можно получить по [[Special:MyLanguage/Modules|ссылке]] и общий перечень DAQ-Шаблонов можно получить по [[Special:MyLanguage/Libs/Generic_list|ссылке]]. Данные, полученные из источников, впоследствии обрабатываются, архивируются и используются для визуального представления оператору ТП. === Сбор данных аппарата ТП === В качестве примера рассмотрим и создадим сбор данных для аппарата воздушного холодильника. Фоновая демонстрационная БД, как ПЛК и источник данных, содержит модель реального времени ТП компрессорной станции из шести компрессоров. Данные для двух аппаратов воздушных холодильников AT101_1 и AT101_2 компрессорной станции KM101 доступны по протоколу ModBus/TCP на порту 10502 (стандартно это порт 502 при наличии доступа его открыть). Создадим объект контроллера для сбора по протоколу ModBus/TCP и получим эти данные. Тем самым фактически реализуем задачу сбора реальных данных поскольку наша конфигурация будет отличаться от работы с настоящим внешним устройством только его адресом и адресами регистров ModBus, а также это может быть другой физический интерфейс взаимодействия — вариант протокола ModBus. Это подключение также является ярким примером возможности реализации среды исполнения источника данных (ПЛК) на основе OpenSCADA. Для сбора данных по протоколу ModBus в OpenSCADA присутствует [[Special:MyLanguage/Modules/ModBus|модуль "ModBus"]] подсистемы "Сбор данных". Для добавления нового объекта контроллера в конфигураторе откроем страницу модуля ModBus "Start"->"Сбор данных"->"Модуль"->"ModBus" и в контекстном меню пункта "ModBus" нажмём "Добавить" (риc.4.1.1). [[file:QuickStart_ModBUS_add_ru.png|center|frame|Рис. 4.1.1. Добавление объекта контроллера в модуле "ModBus" подсистемы "Сбор данных".]] В результате появится окно диалога (Рис.4.1.2) с предложением ввести идентификатор и название нового объекта контроллера. Идентификаторы объектов OpenSCADA ограничены размером в 20 символов и их рекомендуется вводить символами английского алфавита и цифрами. Кроме того, начинать идентификатор желательно с буквы, что упростит его использование во внутренних процедурах. Названия объектов OpenSCADA ограничены размером в 50 символов и которые могут быть любыми. Название обычно используются для отображения и если оно пустое, то будет использоваться идентификатор. В последствии название мы можем поменять в конфигурации объекта, но идентификатор невозможно изменять прямо; однако объект можно вырезать (Ctrl+X) и затем вставить (Ctrl+V), тем самым переименовав его. Согласно замечаниям ранее введём идентификатор CM101, название "KM 101" — "'''CM101 (KM 101)'''". [[file:QuickStart_enter_idnm_ru.png|center|frame|Рис. 4.1.2. Диалог указания идентификатора и названия нового объекта.]] После подтверждения у нас появится объект нового контроллера. Выберем его в конфигураторе и ознакомимся с настройками (Рис.4.1.3). [[file:QuickStart_ModBUS_cntr.png|center|frame|Рис. 4.1.3. Главная вкладка настройки объекта контроллера модуля ModBus.]] Настройки объекта контроллера как правило специфичны для разных типов источников данных и протоколов. Детально ознакомиться с настройками объекта контроллера [[Special:MyLanguage/Modules/ModBus|модуля ModBus]] можно по [[Special:MyLanguage/Modules/ModBus#DAQ|ссылке]]. Мы же рассмотрим общие и ключевые настройки этого модуля. Перед конфигурацией связи со своим контроллером необходимо из документации на этот контроллер выяснить настройки его сетевых интерфейсов и протоколов, а также, в случае использования ModBus, получить таблицу назначения внешних и внутренних сигналов контроллера на номера регистров ModBus — карту регистров. С помощью страницы объекта контроллера в разделе "Состояние" можно в первую очередь оценить текущее состояние объекта контроллера и реальное состояние связи с физическим контроллером, а также оперативно их менять. Так, поле "Статус" содержит код ошибки и текстовое описание текущего состояния связи с контроллером. В нашем случае объект контроллера выключен. Мы можем его включить и запустить, установив флажки напротив соответствующих полей. Включенный объект контролера инициализирует параметры, запущенный же ещё запускает задачу сбора (отдельный поток на объект контроллера) и предоставляет возможность передавать данные в контроллер через атрибуты параметров. Поле "Хранилище" указывает в каком хранилище конфигурация данного объекта. Нас устроит хранение в Общем Хранилище, т.е. '''оставим по умолчанию'''. В разделе "Конфигурация" непосредственно содержится конфигурация объекта контроллера. Установим следующие из них, оставив все остальные без изменения: * "Включать" и "Запускать" указывают в какое состояние переводить объект контроллера при запуске программы — '''установим оба поля'''. * "Планирование сбора" содержит конфигурацию планировщика для запуска задачи сбора данных. Получить описание формата конфигурации данного поля можно из всплывающей подсказки. Одиночное число указывает на периодичность запуска, в секундах — укажем '''одну секунду'''. * "ModBus протокол" указывает на вариант протокола ModBus. Возможны варианты протокола "TCP", "RTU" и "ASCII". На данный момент нас интересует вариант '''TCP/IP''', поэтому оставим как есть. Варианты протоколов "RTU" и "ASCII" нужно устанавливать в случае связи с контроллером посредством последовательных интерфейсов, часто это "RS-485". * "Адрес транспорта" указывает на исходящий транспорт [[Special:MyLanguage/Documents/Program_manual#Transports|подсистемы "Транспорты"]], который используется для соединения с контроллером. В случае с вариантом "TCP" нам нужен транспорт в [[Special:MyLanguage/Modules/Sockets|модуле Sockets]], а в случае вариантов "RTU", "ASCII" и последовательного интерфейса нам нужен транспорт в [[Special:MyLanguage/Modules/Serial|модуле Serial]]. На создании исходящего транспорта в "Sockets" и "Serial" детальнее остановимся ниже. * "Узел назначения" указывает на узел источника данных или контроллера в сети ModBus. В нашем случае это должно быть '''1'''. * "Объединять фрагменты данных" включает объединение несмежных фрагментов регистров в один блок запроса до указанного максимального количества байтов вместо генерации отдельных запросов, чем позволяет уменьшить общее время сбора — '''установим эту опцию'''. Сохраним наши изменения в хранилище, нажав вторую слева иконку на панели инструментов. Теперь, таким образом как и объект контроллера создадим выходной транспорт в модуле "Sockets" ("Start"->"Транспорты"->"Сокеты") посредством контекстного меню (Рис.4.1.4) и назовём транспорт так, как и объект контроллера "'''CM101 (KM 101)'''". Обратите внимание, что в поле "Тип элемента" диалога ввода идентификатора и названия (Рис.4.1.2) нужно выбрать "'''Выходной транспорт'''"! [[file:QuickStart_Sockets_add_ru.png|center|frame|Рис. 4.1.4. Добавление выходного транспорта в модуле "Sockets" подсистемы "Транспорты".]] Страница конфигурации полученного выходного транспорта приведена на рисунке 4.1.5. Эта страница также содержит раздел состояния и оперативного управления. В поле "Статус" содержится текстовое описание текущего состояния транспорта. Мы можем подключить его установив флажок напротив соответствующего поля. Поле "Хранилище" указывает в каком хранилище конфигурация объекта — '''нас устроит "Общее Хранилище"'''. [[file:QuickStart_Sockets_tr.png|center|frame|Рис. 4.1.5. Страница конфигурации выходного транспорта модуля "Sockets" подсистемы "Транспорты".]] В разделе "Конфигурация" непосредственно содержится конфигурация объекта транспорта, установим следующие из них: * "Адрес" указывает на: тип (необязательно), адрес и режим соединения с удалённой станцией. Ознакомиться с форматом записи можно из всплывающей подсказки — '''установим это поле в значение "TCP:localhost:10502"'''. Транспорты других типов создаются подобно рассмотренному для "Sockets" методу, а конфигурация их отличается обычно только форматом записи адреса и таймаутов. В случае с транспортом модуля "Serial" в адресе указывается: путь к последовательному устройству, скорость и формат. Для конвертеров ''USB->Serial,Modem'' этот адрес можно узнать из операционной системы, например, консольной командой {{InLineCode|dmesg}} сразу после его подключения. Сохраним объект транспорта и вернёмся к конфигурационному полю "Адрес транспорта" объекта контроллера, где '''выберем адрес "Sockets.CM101"'''. На данный момент OpenSCADA поддерживает, для объектов контроллеров большинства типов источников данных, определение всех параметров непосредственно в поле "Адрес транспорта" и без необходимости отдельного создания объектов транспортов. Т.е. определение в поле "Sockets.CM101:localhost:10502" автоматически создаст CM101 в выходных транспортах Sockets с указаным адресом. На этом настройка объекта контроллера закончена, '''включим его, установив флаг "Включен"'''. Следующим этапом является конфигурация и выбор тех данных, которые нужно опрашивать из контроллера. Эта настройка производится путём создания параметра контроллера. Параметр позволяет описать перечень данных, получаемых у контролера и передать их в окружение OpenSCADA — модель данных. Для добавления нового параметра откроем страницу нашего объекта контроллера и в контекстном меню пункта "KM 101" '''нажмём "Добавить"''' — назовём "'''AT101_1 (AT 101_1)'''". Страница конфигурации полученного параметра приведена на рисунке 4.1.6. Эта страница содержит раздел состояния и оперативного управления. В поле "Тип" содержится тип параметра, в нашем случае это "'''Стандартный'''". '''Параметр мы включаем''' установив флажок напротив соответствующего поля. Включенный параметр участвует в процессе обмена с контроллером. [[file:QuickStart_ModBUS_prm_ru.png|center|frame|Рис. 4.1.6. Страница конфигурации параметра контроллера "ModBUS".]] В разделе "Конфигурация" непосредственно содержится конфигурация параметра. Установим следующие из них, оставив все остальные без изменения: * "Включать" указывает на необходимость перевода объекта в режим "Включен" при запуске программы — '''установим это поле'''. * "Перечень атрибутов" содержит конфигурацию атрибутов параметра относительно к регистрами и битами ModBus, ознакомиться с форматом записи можно из всплывающей подсказки — установим содержимое этого текстового поля в: <pre> R:100:r:Ti:T вход R:101:r:To:T выход R:102:rw:Cw:Производительность </pre> Таким же образом '''создадим, или скопируем из AT101_1''', второй параметр "'''AT101_2 (AT 101_2)'''". Перечень атрибутов для него установим в: <pre> R:103:r:Ti:T вход R:104:r:To:T выход R:105:rw:Cw:Производительность </pre> '''Сохраним оба''' параметра. Теперь мы можем запустить наш объект контроллера для осуществления сбора, для чего вернёмся на его страницу и в разделе "Состояние" '''установим флажок "Выполняется"'''. Если мы ничего не пропустили, то обмен успешно запустится и в поле "Статус" мы получим подобное представленному на рисунке 4.1.7. [[file:QuickStart_ModBUS_cntr_st.png|center|frame|Рис. 4.1.7. Страница объекта контроллера при успешном обмене с физическим контроллером.]] В случае успешного обмена с физическим контроллером мы также получим описанные данные контроллера в инфраструктуре OpenSCADA — модели данных. Увидеть эти данные можно во вкладке "Атрибуты" наших параметров AT101_1 (Рис.4.1.8) и AT101_2. Поскольку сбор производится регулярно и с периодичностью в секунду, то мы можем наблюдать их изменение нажимая кнопку "Обновить текущую страницу" на панели инструментов. [[file:QuickStart_ModBUS_prm_attr_ru.png|center|frame|Рис. 4.1.8. Страница описанных атрибутов параметра AT101_1.]] На этом конфигурация сбора данных считается законченной. === {{Anch|DataProc|Обработка полученных данных ТП}} === Часто встречается ситуация, когда исходные данные, полученные из источника данных, являются "сырыми", т.е. неготовыми или неудобными для визуального представления, поэтому необходимо выполнить эту подготовку. В нашем примере мы получили данные, которые поступают в коде от шкалы внутри контроллера и наша задача — выполнить расчёт реальных значений из полученных данных. Обработку данных в OpenSCADA можно делать как непосредственно при визуализации, так и в подсистеме Сбор Данных. Однако смешивание процесса визуализации и обработки входных данных вносит путаницу в конфигурацию, не позволяет вести историю реальных данных, делает полученные образы визуализации мало пригодными для повторного использования и увеличивает нагрузку на поток визуализации, чем уменьшает общую её отзывчивость. Соответственно, выполним подготовку данных в подсистеме Сбор Данных. Вычисления в подсистеме Сбор Данных для получения реальных данных в основном выполняются посредством модуля логического уровня [[Special:MyLanguage/Modules/LogicLev|LogicLev]] и шаблонов параметров подсистемы Сбор Данных. Модуль ModBus является тем случаем, когда такое вычисление можно сделать прямо в нём, что мы ниже увидим. Детальнее ознакомиться с концепцией Логического Уровня можно по [[Special:MyLanguage/Documents/DAQ#LogicLev|ссылке]]. Для выполнения вычислений, в модуле Логического Уровня нужно предварительно создать библиотеку шаблонов нашего проекта и шаблон параметра подсистемы Сбор Данных в ней. Для создания библиотеки шаблонов откроем страницу подсистемы Сбор Данных и, посредством контекстного меню, создадим объект библиотеки шаблонов '''start (Запуск)'''. Страница конфигурации полученного объекта библиотеки шаблона (Рис.4.2.1) содержит раздел состояния и оперативного управления "Состояние" и раздел настроек "Конфигурация" в котором содержатся только типовые поля конфигурации и которые оставим неизменными. В целом мы имеем: * Раздел "Состояние": ** сделать библиотеку доступной — '''установив флажок''' напротив соответствующего поля; ** указать хранилище — '''оставим "Общее Хранилище" проекта'''; ** можем проконтролировать дату последней модификации. * '''Сохранить''' объект. [[file:QuickStart_TmplLib.png|center|frame|Рис. 4.2.1. Страница конфигурации объекта библиотеки шаблонов.]] Для создания шаблона откроем страницу ново-созданной библиотеки шаблонов "Start"->"Сбор Данных"->"Библиотека шаблонов"->"Запуск" и, посредством контекстного меню, создадим объект шаблона '''airCooler (Воздушный холодильник)'''. Страница конфигурации полученного объекта шаблона (Рис.4.2.2) содержит раздел состояния и оперативного управления "Состояние" и раздел настроек "Конфигурация" в котором содержатся только типовые поля конфигурации и которые '''оставим неизменными'''. В целом мы имеем: * Раздел "Состояние": ** сделать шаблон доступным — '''установить флажок''' напротив соответствующего поля, доступные шаблоны могут подключаться к параметрам сбора данных и параметры будут выполнять вычисления по этому шаблону; ** можем проконтролировать число объектов, которые используют данный шаблон для вычисления; ** можем проконтролировать дату последней модификации. * '''Сохранить''' объект. [[file:QuickStart_Tmpl_gen_ru.png|center|frame|Рис. 4.2.2. Страница конфигурации объекта шаблона.]] Основная конфигурация и формирование шаблона параметра сбора данных осуществляется во вкладке "ВВ" (Рис.4.2.3) шаблона. Детальное описание процесса формирования шаблона можно получить по [[Special:MyLanguage/Documents/Program_manual#CfgDAQ|ссылке]]. В шаблоне создадим два свойства для входов ("TiCod", "ToCod"), два для выходов результата ("Ti", "To") и один прозрачный ("Cw"). Свойствам "TiCod", "ToCod" и "Cw" установим флаг "Конфигурация" в '''Связь''', что позволит подвязывать к ним "сырой" источник. Установим флаг "Атрибут" для ВВ "Ti" и "To" в '''Только чтение''', "Cw" в '''Полный доступ''' — для формирования трёх атрибутов в параметре сбора данных: два только на чтение и один на полный доступ. Установим язык программы в '''JavaLikeCalc.JavaScript''' и программу в: <syntaxhighlight lang="JavaScript"> Ti = 150*TiCod/65536; To = 100*ToCod/65536; </syntaxhighlight> [[file:QuickStart_Tmpl_io_ru.png|center|frame|Рис. 4.2.3. Вкладка "ВВ" страницы конфигурации объекта шаблона.]] '''Cохраним полученный шаблон''' и установим '''флаг доступности''' (Рис.4.2.2). Теперь создадим объект контроллера и параметры в модуле "LogicLev" подсистемы "Сбор данных". Объект контроллера "LogicLev" и его параметры создаются идентично ранее созданным в модуле "ModBus", на странице "Start"->"Сбор Данных"->"Модуль"->"Логический уровень". '''Назовём их идентично объектам модуля "ModBus"'''. Объект контроллера модуля LogicLev (Рис.4.2.4) не имеет специфических настроек и установленные по умолчанию можно не трогать, кроме поля "Планирование вычисления", которое установим в '''1 (одну) секунду'''. Перед добавлением параметров нужно включить объект контроллера — '''установим флаг "Включен"'''. [[file:QuickStart_LogicLev_cntr.png|center|frame|Рис. 4.2.4. Главная вкладка настройки объекта контроллера модуля LogicLev.]] Параметр объекта контроллера модуля LogicLev (Рис.4.2.5) из специфических настроек имеет "Тип", где нужно установить "'''Логический'''", а в поле "Шаблон параметра" '''выбрать адрес созданного нами шаблона'''. [[file:QuickStart_LogicLev_prm_ru.png|center|frame|Рис. 4.2.5. Страница конфигурации параметра объекта контроллера модуля LogicLev.]] Кроме базовой конфигурации параметра нужно сконфигурировать и подключенный шаблон (Рис.4.2.6). Вкладка конфигурации шаблона появляется в режиме параметра "Включен". Включить параметр можно включив предварительно объект контроллера. Флаг "Показать атрибуты" позволяет устанавливать отдельно каждую связь (Рис.4.2.7). Поскольку в шаблоне мы предусмотрительно описали формат связей в виде "Параметр|Ti", то все три связи мы можем установить просто указав адрес к параметру в объекте контроллера "ModBus". Укажем-выберем адрес '''ModBus.CM101.AT101_1''' и '''ModBus.CM101.AT101_2''' в соответствующих параметрах. Нужно отметить, что все поля ввода адресов объектов в OpenSCADA снабжены механизмом набора адреса. Данный механизм подразумевает поэлементный выбор, в процессе которого происходит движение в глубь. Например, в начале набора адреса "ModBus.CM101.AT101_1" мы будем иметь возможность выбора типа источника данных, среди которых будет "ModBus". Выбрав который в перечень доступных элементов для выбора добавятся объекты контроллера модуля ModBus где будет "ModBus.CM101"; выбор элемента "ModBus.CM101" добавит параметры контроллера и т.д. до конечного элемента согласно [[Special:MyLanguage/Documents/Program_manual#DAQ|иерархии объектов]]. Для возможности возврата на уровни выше, список выбора содержит элементы всех вышестоящих уровней от текущего значения адреса. [[file:QuickStart_LogicLev_prm_tmpl_ru.png|center|frame|Рис. 4.2.6. Вкладка "Конфигурация шаблона" страницы параметра контроллера LogicLev.]] [[file:QuickStart_LogicLev_prm_tmpl_attr_ru.png|center|frame|Рис. 4.2.7. Вкладка "Конфигурация шаблона" страницы параметра контроллера LogicLev с разворотом связей.]] '''Сохраним созданные объекты''' контроллера и параметров, после чего запустим объект контроллера на исполнение, '''установив флаг "Выполняется"''' в разделе "Состояние". Если мы ничего не пропустили, то вычисление успешно запустится и в поле "Статус" мы получим похожее на рисунке 4.2.8. [[file:QuickStart_LogicLev_cntr_st.png|center|frame|Рис. 4.2.8. Страница объекта контроллера при успешном его вычислении в модуле LogicLev.]] В случае успешной обработки кода шаблона в параметрах мы получим обработанные данные в инфраструктуре (модели данных) OpenSCADA. Увидеть эти данные можно на вкладке "Атрибуты" наших параметров AT101_1 (Рис.4.2.9) и AT101_2. [[file:QuickStart_LogicLev_prm_attr_ru.png|center|frame|Рис. 4.2.9. Страница атрибутов параметра AT101_1 модуля LogicLev.]] На этом конфигурацию обработки данных считаем законченной. === Комплексный объект-тег сигнала === В предыдущих разделах был описан механизм подключения источника данных по объекту аппарата — "Воздушный холодильник", который предусматривает объединение всех сигналов в одном объекте параметра источника данных. Однако, более распространённым подходом крупной автоматизации является формирование объекта параметра вокруг отдельного сигнала, например — "Температура на выходе холодильника AT101_1 (TE1314_1)", которые часто называются тегами. Создание объекта параметра вокруг сигнала позволяет формализовать его описание до шаблонов аналоговых и дискретных сигналов, включив в них всю необходимую обработку, сигнализацию и другую характерную информацию. Для простой конфигурации типизированных аналоговых и дискретных сигналов, в библиотеках OpenSCADA предусмотрены шаблоны параметров и многие образы визуального представление адаптированны к работе и связыванию с такими параметрами прямо, без детализации по атрибутам. Moreover, unified templates are provided with the possibility of deep processing of input signals by defining in the field "Input processing procedure" for a procedure on the internal language [[Special:MyLanguage/Modules/JavaLikeCalc|JavaLikeCalc]]. And even more, in this procedure it is possible to expand the template data model of the parameter with auxiliary dynamic attributes, actually "hanging" on it the elements of the device object, starting from its main signal; that is without creating additional templates for this. Like this for appending an attribute for setting input manually: <syntaxhighlight lang="JavaScript"> if(ctx.f_start == null) { ctx.f_start = true; this.attrAdd("setIn", "Input set", "real"); this.setIn.set(0); } in = this.setIn.get(); </syntaxhighlight> Обычно, для формирования параметра на основе шаблона, используется модуль логического уровня [[Special:MyLanguage/Modules/LogicLev|LogicLev]], как это было описано в предыдущем разделе. Однако ряд модулей, в том числе и [[Special:MyLanguage/Modules/ModBus|ModBus]], предоставляют возможность сразу создавать логические параметры, на основе шаблона. Добавим новые параметры, открыв в конфигураторе страницу нашего, ранее созданного, объекта контроллера "ModBus" и в контекстном меню пункта "КМ 101" '''нажмём "Добавить"'''. Назовём аналоговый параметр '''TE1314_1 (TE1314_1)''', (Рис.4.3.1). Тип параметра '''установим в "Логический"''', шаблон параметра '''выберем "base.anUnif"''', описание '''установим в "Температура на выходе AT101_1"''', '''установим флажки "Включать" и "Включен"'''. Далее нам нужно настроить: * Шаблон параметра в появившейся вкладке "Конфигурация шаблона" (Рис.4.3.2): ** поле "Вход" устанавливаем в значение адреса ModBus-регистра этого параметра — "'''R:101'''"; ** поле "Максимум шкалы модуля" устанавливаем в значение — '''65535''', что соответствует 100 °C. * Вкладка "Атрибуты" (Рис.4.3.3): ** "Ед. измерения" устанавливаем в — "'''град. С'''"; ** "Шкала: минимум" в — '''0'''; ** "Шкала: максимум" в — '''100'''; ** "Граница верхняя ав." в — '''40'''; ** "Граница верхняя пред." в — '''30'''. * '''Сохраним''' объект. [[file:QuickStart_ModBus_prmAn_ru.png|center|frame|Рис. 4.3.1. Страница логического параметра TE1314_1 модуля ModBus.]] [[file:QuickStart_ModBus_prmAn_tmpl_ru.png|center|frame|Рис. 4.3.2. Вкладка "Конфигурация шаблона" страницы параметра "TE1314_1" модуля ModBus.]] [[file:QuickStart_ModBus_prmAn_attr_ru.png|center|frame|Рис. 4.3.3. Вкладка "Атрибуты" параметра TE1314_1 модуля ModBus.]] Дискретный параметр назовём — '''CB102 (КШ102)'''. Тип параметра установим в "'''Логический'''", шаблон параметра выберем "'''base.digitBlockUnif'''", '''установим флажки "Включать" и "Включен"'''. Далее нам нужно настроить: * Шаблон параметра в появившейся вкладке "Конфигурация шаблона" (Рис.4.3.4): ** поле "Команда 'Открыть'" устанавливаем в значение адреса ModBus-бита этого параметра — "'''C:100:rw'''"; ** поле "Состояние 'Открыт'" устанавливаем в значение адреса ModBus-бита — "'''C:101'''"; ** поле "Состояние 'Закрыт'" устанавливаем в значение адреса ModBus-бита — "'''C:102'''"; ** поле "Время удерж. команды" устанавливаем в — '''0''', поскольку команда не импульсная. * Вкладка "Атрибуты" (Рис.4.3.5) — удостоверяемся в доступности команды и состояний. * '''Сохраним''' объект. [[file:QuickStart_ModBus_prmDig_tmpl_ru.png|center|frame|Рис. 4.3.4. Вкладка "Конфигурация шаблона" параметра CB102 модуля ModBus.]] [[file:QuickStart_ModBus_prmDig_attr_ru.png|center|frame|Рис. 4.3.5. Вкладка "Атрибуты" параметра CB102 модуля ModBus.]] === Получение готовых данных OpenSCADA — шлюзование === Ознакомившись с типовыми механизмами получения данных, описанными в предыдущих разделах, вы должны уже представлять общий объём работ с их получения и обработки, т.е. — формализацию и получение этих данных в модели данных SCADA-системы. Если сюда добавить задачу формирования этих данных на уровне ПЛК — модель данных ПЛК свободно программируемых ПЛК, и преобразование их в модель данных протокола обмена, то вы должны заметить тут тройное преобразование данных. Что касается преобразования в модель данных протокола — сериализация, то это определяется физическими свойствами каналов связи и осуществляется автоматически, а вот формирование модели данных ПЛК и модели данных SCADA-системы осуществляется программистом ПЛК и SCADA-системы соответственно. Причём, эта работа имеет много общего, особенно если осуществляется одним человеком или организацией, а соответственно должны быть механизмы её унификации. В случае разного происхождения ПЛК и SCADA, большей унификации чем слой протокола обмена достичь сложно. С другой стороны, глубокую унификацию моделей данных ПЛК и SCADA можно встретить у производителей одновременно ПЛК и SCADA, что однако только укрепляет их монопольное положение и фактически нивелирует преимущества унификации через общую стоимость решения. OpenSCADA предусматривает возможность такой унификации через добавление родственности с ПЛК. И такую родственность можно обеспечить только для ПЛК, которые являются полностью открытыми, на них установлено открытое-свободное ПО, а соответственно можно установить и [[Special:MyLanguage/Sub-projects/Embedding_and_PLC|OpenSCADA в роли среды исполнения ПЛК]]. Как среда исполнения, OpenSCADA может предоставлять данные ПЛК и стандартными протоколами, как ModBus, но, для получения этих данных прямо и без осуществления каких либо действий над ними, на стороне SCADA-системы предусмотрен модуль "[[Special:MyLanguage/Modules/DAQGate|DAQGate]]", который фактически объединяет модели. Т.е., программист ПЛК, который по совместительству является программистом SCADA, формирует модель данных ПЛК, а на уровне SCADA-системы она используется уже как готовая, чем полностью убирается стадия и работы с получения, обработки и формирования модели данных SCADA-системы. Более того: * исключаются расхождение в моделях данных ПЛК и SCADA при их изменении; * данные конфигурации логично и исключительно сохраняются на ПЛК, которого они касаются; * нарушения и другие сообщения формируются на первоисточнике — ПЛК, а сообщения про вмешательства — действия оператора, попадают и на ПЛК; * предусматривается механизм содержания архивов-истории на ПЛК как полностью, так и как часть компенсации потери связи со SCADA, особенно для плохой и беспроводной связи. С целью демонстрации и ознакомления, создадим тут объект контролера модуля "DAQGate" для шлюзования данных нашего виртуального ПЛК. Создаётся он идентично к ранее созданным объектам контролера в модуле ModBus и LogicLev на странице "Start"->"Сбор Данных"->"Модуль"->"Шлюз источников данных" и назовём его "'''AGLKS'''". Объект контроллера модуля DAQGate (Рис.4.4.1) имеет следующие специфические настройки, которые мы должны осуществить: * "Удалённая станция" — '''выберем ранее созданное подключение''' удалённой станции "AGLKS". * '''Включим''' объект контролера. * "Перечень удалённых объектов контроллеров и параметров" — в поле "Дерево параметров" выберем "'''LogicLev.gen'''", а затем пункт "'''<<Добавить текущий>>'''" вверху этого списка. * '''Запустим''' исполнение объекта контроллера. [[file:QuickStart_DAQGate_cntr.png|center|frame|Рис. 4.4.1. Главная вкладка настройки объекта контроллера модуля DAQGate.]] Если всё сделано правильно то автоматически создадутся параметры выбранного контроллера и мы сможем посмотреть на данные в них на вкладке "Атрибуты" (Рис.4.4.2). [[file:QuickStart_DAQGate_prm_attr_ru.png|center|frame|Рис. 4.4.2. Вкладка "Атрибуты" параметра модуля DAQGate.]] === Архивирование-история данных ТП === Полученные выше данные считаются текущими, т.е. таковыми, которые периодически обновляются и характеризуют значение параметра ТП на настоящий момент времени. При этом, ранее считанные значения теряются при перезаписи их текущим, т.е. отсутствует их история. Во многих-же задачах требуется ведение архива-истории прочитанных значений параметров ТП, для чего в OpenSCADA предусмотрена подсистема "[[Special:MyLanguage/Documents/Program_manual#Arch|Архивы-История]]" где нам нужно создать архиваторы значений и сообщений, для нарушений, и указать наши параметры для архивирования их значений там. [[file:at.png]] Если не создать архиваторов и не подключить наших параметров на архивирование ими, то на графиках вы не получите истории более его общей ширины, а также потеряете накопленное при переключении, а в отчётных документах не получите истории вообще. Начнём с архивации значений, для которой нужно создать хотя-бы один архиватор для нужного типа хранилища и периодичностью значений. Вообще, OpenSCADA содержит два модуля архивации — на файловую систему "[[Special:MyLanguage/Modules/FSArch|FSArch]]" и на базу данных "[[Special:MyLanguage/Modules/DBArch|DBArch]]". Тут мы рассмотрим только модуль архивации на файловую систему, как наиболее универсальный и эффективный. Что касается периодичности значений для "качественного" архиватора, то её в основном нужно выбирать по периодичности значений самого медленного источника данных в нашей системе, который у нас один и периодичность мы ему указали 1 секунда. Для создания архиватора значений откроем страницу модуля архивирования "Start"->"Архивы-История"->"Модуль"->"Архиватор на файловую систему" и посредством контекстного меню создадим объект архиватора значений "'''1s'''". Обратите внимание на значение поля "Тип элемента" диалога создания, которое должно быть "'''Архиватор значений'''"! Страница конфигурации полученного объекта архиватора значений (Рис.4.5.1) содержит раздел состояния и оперативного управления "Состояние", раздел настроек "Конфигурация" и раздел специфических настроек архиватора этого модуля "Дополнительные опции". В целом мы имеем: * Раздел "Состояние": :* запустить архиватор на исполнение — '''установим''' флажок напротив соответствующего поля, только выполняющийся архиватор осуществляет архивирование; ::[[file:at.png]] Установить в последнюю очередь и после выполнения всего этого списка. :* можем проконтролировать текущее и максимальное время сеанса архивирования; :* указать хранилище — '''оставим "Общее Хранилище" проекта'''; :* можем проконтролировать общий размер файлов архива этого архиватора. * Раздел "Конфигурация": :* установить запуск архиватора при запуске программы — '''установим''' флажок напротив соответствующего поля; :* установить адрес директории с файлами архива — "'''ARCHIVES/VAL/1s'''", что ставится по умолчанию; :* установить период значений — '''1 (одна)''' секунда; :* установить период архивирования — '''60''' секунд, по умолчанию и обычно одинаков для архиваторов с любой периодичностью значений. * '''Сохранить''' объект. [[file:QuickStart_ArchVal_1s.png|center|frame|Рис. 4.5.1. Конфигурация архиватора значений "1s" на файловую систему.]] Одного "качественного" архиватора уже достаточно для большинства задач, но если вы планируете строить графики-тренды значений и отчётные документы на большую глубину (сутки, недели, месяца) то нужно создать ещё пару архиваторов с большей периодичностью значений. Иначе построение графиков и документов будет продолжительным и/или будет обрезаться по лимитам времени исполнения! Обычно, в качестве таких дополнительных архиваторов создаются, и вы должны их создать идентично инструкции для "качественного" архиватора выше: * Минутный — идентификатор "'''1m'''", адрес "'''ARCHIVES/VAL/1m'''" и период значений '''60''' секунд. * Часовой — идентификатор "'''1h'''", адрес "'''ARCHIVES/VAL/1h'''" и период значений '''3600''' секунд. Новосозданные проекты OpenSCADA уже содержат шаблоны таких стандартных архиваторов, поэтому вы можете просто включить нужные. Для включения архивирования атрибутов "Ti" и "To" параметров AT101_1 и AT101_2 в ранее созданном объекте контроллера модуля LogicLev, достаточно на вкладке "Архивация" страницы параметров '''выбрать''' какие атрибуты архивировать и какими архиваторами (Рис.4.5.2). Выберем архивацию атрибутов "Ti" и "To" ранее созданными архиваторами '''FSArch.1s''', '''FSArch.1m''', '''FSArch.1h'''. Тоже самое сделаем для атрибута "var" аналогового параметра ModBus.CM101.TE1314_1 и "com" дискретного параметра ModBus.CM101.CB102. [[file:QuickStart_LogicLev_prm_arh_ru.png|center|frame|Рис. 4.5.2. Вкладка "Архивация" параметра AT101_1 модуля LogicLev.]] В результате этой операции будут автоматически созданы объекты архивов для выбранных атрибутов. Пример объекта архива для атрибута "Ti" параметра AT101_1 представлен на рисунке 4.5.3. [[file:QuickStart_Arh_gen.png|center|frame|Рис. 4.5.3. Страница объекта архива атрибута "Ti" параметра AT101_1.]] Обычно настройки архива менять не нужно, однако, если потребуется особая конфигурация, то её можно сделать на указанной выше странице. Чаще может понадобиться получение информации об архиве. Например, узнать размер архива как по времени, так и на носителе, а также взглянуть на график параметра (Рис.4.5.4). [[file:QuickStart_Arh_tr_ru.png|center|frame|Рис. 4.5.4. Вкладка "Значения" страницы объекта архива атрибута "Ti" параметра AT101_1.]] Объекты контроллеров, как и отдельные шаблоны параметров, могут формировать сообщения о нештатных ситуациях, например — шаблоны комплексных сигналов-тегов генерируют сообщения при выходе значения за одну из границ. Сообщения такого характера имеют специфическую категорию и именуются нарушениями. Сообщения OpenSCADA предварительно попадают в буфер сообщений, который и выступает первичным архивом. Однако буфер имеет ограничение и хранится только в оперативной памяти, т.е. теряется при перезапуске программы. Роль сохранения сообщений на том или ином хранилище выполняют архиваторы сообщений, как архиваторы значений для значений. Соответственно создадим архиватор сообщений для архивации нарушений, для чего откроем страницу модуля архивирования "Start"->"Архивы-История"->"Модуль"->"Архиватор на файловую систему" и посредством контекстного меню '''создадим''' объект архиватора сообщений '''alarms (Нарушения)'''. Обратите внимание на значение поля "Тип элемента" диалога создания, которое должно быть "'''Архиватор сообщений'''"! Страница конфигурации полученного объекта архиватора значений (Рис.4.5.5) содержит раздел состояния и оперативного управления "Состояние", раздел настроек "Конфигурация" и раздел специфических настроек архиватора этого модуля "Дополнительные опции". В целом мы имеем: * Раздел "Состояние": :* запустить архиватор на исполнение — '''установим''' флажок напротив соответствующего поля, только выполняющийся архиватор осуществляет архивирование; ::[[file:at.png]] Установить в последнюю очередь и после выполнения всего этого списка. :* указать хранилище — '''оставим "Общее Хранилище" проекта'''; :* можем проконтролировать время первого и последнего сообщения в архиве этого архиватора; :* можем проконтролировать общий размер файлов архива этого архиватора; :* можем проконтролировать текущее и максимальное время сеанса архивирования. * Раздел "Конфигурация": :* установить запуск архиватора при запуске программы — '''установим''' флажок напротив соответствующего поля; :* установить категорию сообщений, которая характеризует нарушения — "'''al*'''"; :* установить уровень архивируемых нарушений — "'''Информация (1[X])'''"; :* установить адрес директории с файлами архива — "'''ARCHIVES/MESS/alarms'''", что ставится по умолчанию; * '''Сохранить''' объект. [[file:QuickStart_ArchMess_alarms.png|center|frame|Рис. 4.5.5. Конфигурация архиватора сообщений "alarms" на файловую систему.]] Таким-же образом можно создать архиваторы сообщений другого характера, например — действия оператора. Для чего достаточно определить категорию этих сообщений и сформировать для них шаблон или правило регулярного выражения. Вы можете получить стандартные категории и их шаблоны, или правила регулярного выражения, на [[Special:MyLanguage/Documents/Program_manual#ArchMess|странице архивации сообщений]] или можете изучить реальные сообщения на [[Special:MyLanguage/Documents/Program_manual#CfgArch|главной странице подсистемы "Архивы-История"]], получить оттуда информацию об их категории и настроить шаблон, или правило регулярного выражения. Можно даже создать архиватор для архивирования всех сообщений программы, но делать этого не рекомендуется ввиду получения больших архивов и долгого доступа к ним потом. Новосозданные проекты OpenSCADA уже содержат шаблоны таких стандартных архиваторов, поэтому вы можете просто включить нужные. == Формирование визуального представления == Формирование визуального представления может выполняться на трёх уровнях сложности и пользователь может выбрать любой из них в зависимости от требований задачи, уровня своих знаний и наличия библиотек с готовыми образами и шаблонами. ПЕРВЫЙ УРОВЕНЬ требует минимальной квалификации пользователя, но подразумевает наличие библиотек шаблонных кадров, нужных для решения его задачи. В рамках первого уровня пользователю достаточно знать, как подключить динамику к страницам шаблонных кадров и как добавить новые страницы шаблонных кадров. ВТОРОЙ УРОВЕНЬ предусматривает дополнительную способность — создавать новые кадры на основе готовых-комплексных элементов путём простого их размещения в области кадра. Для обеспечения этого квалификационного уровня, пользователю понадобятся библиотеки комплексных элементов, нужных для решения его задачи. ТРЕТИЙ УРОВЕНЬ предусматривает владение всеми инструментами среды разработки визуальных интерфейсов OpenSCADA, включая создание новых комплексных элементов и разработку интерфейсов пользователя в проекте. Все действия над интерфейсом визуализации будем выполнять в окружении [[Special:MyLanguage/Modules/Vision|модуля Vision]] подсистемы "Пользовательские интерфейсы". Для открытия окна интерфейса Vision нажмём вторую иконку справа панели инструментов конфигуратора. В результате получим окно, ранее представленное на рисунке 3.3.1.3. Интерфейсы пользователя-оператора в OpenSCADA реализуются проектами визуализации. В библиотеке [[Special:MyLanguage/Libs/Main_graphical_elements|основных элементов пользовательского интерфейса]] присутствует шаблон типового проекта визуализации, основанного на концепции объектов сигнализации и видов отображения. Пользователь может начать создавать свою концепцию интерфейса визуализации, в виде нового проекта, а может использовать указанный шаблон. [[file:at.png]] Для реализации новой концепции проекта визуализации потребуются знания третьего уровня и значительные усилия, что находится за рамками рассмотрения этого документа. Поэтому будем рассматривать создание интерфейса визуализации на основе доступного шаблонного проекта. Скопируем проект "Группы сигнализации (шаблон)", '''нажав сначала кнопку "Копировать визуальный элемент"''' на нём, а затем '''кнопку "Вставить визуальный элемент"''' (Рис.5.1). В диалоге назовём наш новый проект '''start (Старт)''' и в списке проектов получим пункт нашего нового проекта (Рис.5.1). [[file:QuickStart_ui_newPrj.png|center|frame|Рис. 5.1. Копирование шаблонного проекта в новый.]] Перед использованием и сохранением нового проекта (Рис.5.3) нужно '''изменить его хранилище на "Общее Хранилище"''', что мы можем сделать на главной странице диалога свойств визуального элемента, вызываемого по кнопке "Свойства визуального элемента" (Рис.5.2). После чего '''сохраним''' наш новый проект нажав третью кнопку слева панели инструментов. [[file:QuickStart_ui_props.png|center|frame|Рис. 5.2. Свойства нового проекта на основе шаблонного.]] Шаблонный проект (Рис.5.3) содержит две ветви — "Панели управления" и "Корневая страница". Ветвь "Панели управления" содержит набор кадров типовых панелей управления и специализированных кадров. Ветвь "Корневая страница", с корневой страницей в основе, содержит подветви объектов сигнализации "Группа 1", "Группа 2" и отдельную ветвь сводных графиков "Сводные графики". Подветви объектов сигнализации "Группа {n}" имеют цифровой идентификатор и могут расширяться добавлением вплоть до стольких, названия скольких поместятся наверху в два ряда. Присутствие подветви "Группа {n}" отражается на активации соответствующей кнопки объекта сигнализации корневой страницы, что позволяет на них переключаться. Каждая подветвь "Группа {n}" содержит контейнеры или шаблоны видов отображения, обычно: "Мнемосхемы", "Группы графиков", "Группы контуров", "Группы обзорных кадров" и "Документы". Наличие страниц в контейнерах отображений включает возможность выбора этого отображения для соответствующего объекта сигнализации корневой страницы. Детальнее ознакомиться со структурой корневой страницы можно по [[Special:MyLanguage/Libs/Main_graphical_elements#RootPgSo|ссылке]]. [[file:QuickStart_ui_so_ru.png|center|frame|Рис. 5.3. Шаблонный проект на основе концепции объектов сигнализации.]] === Добавление шаблонной страницы и подключение динамики === Рассмотрим задачу первого уровня сложности, когда к уже разработанной концепции интерфейса нужно подключить динамику шаблонной страницы. Понятие "Шаблон страницы" подразумевает страницу, на основе которой и путём наследования может создаваться множество конечных страниц визуализации с индивидуальным перечнем динамики. Примером таких страниц являются: "[[Special:MyLanguage/Libs/Main_graphical_elements#grpGraph|Группа графиков]]", "[[Special:MyLanguage/Libs/Main_graphical_elements#grpCadr|Группа контуров]]", "[[Special:MyLanguage/Libs/Main_graphical_elements#ViewCadr|Группа обзорных кадров]]" и "[[Special:MyLanguage/Libs/Main_graphical_elements#ResultGraph|Сводные графики]]". На Рис.5.1.1 представлена шаблонная страница "Группа графиков" в дереве нашего проекта "Старт". [[file:QuickStart_ui_grah_tmpl_ru.png|center|frame|Рис. 5.1.1. Шаблонная страница "Группа графиков".]] Шаблонная страница "Группа графиков" предоставляет возможность подключить до восьми сигналов одновременного их отображения на графике. Элементы отображения значения сверху автоматически скрываются для неустановленных связей. Создадим новую группу графиков в шаблонном контейнере "Группа графиков" первой группы корневой страницы. Для этого в контекстном меню пункта "Группа графиков" '''выберем пункт меню "Добавить визуальный элемент"''' (Рис.5.1.2), делее введём идентификатор "2" и название "Графики 2" — '''2 (Графики 2)'''. [[file:QuickStart_ui_grah_add.png|center|frame|Рис. 5.1.2. Добавление группы графиков "Графики 2".]] После подтверждения ввода имени будет создана новая страница, однако для её активации нам понадобится её включить. Включить страницу можно в диалоге редактирования свойств страницы (Рис.5.1.3). Открыть эту страницу можно посредством '''выбора пункта меню "Свойства визуального элемента"''' в контекстном меню только что созданной страницы. Создать страницу в логическом контейнере на основе шаблона можно и простым копированием шаблона в самого себя, а также копированием другой страницы этого контейнера, но уже и со связями. [[file:QuickStart_ui_el_prop.png|center|frame|Рис. 5.1.3. Диалог редактирования свойств визуального элемента.]] После включения страницы можно приступать к установке связей на созданные ранее параметры контроллеров. Для этого, не покидая диалога редактирования свойств только что созданной страницы (Рис.5.1.3), перейдём на вкладку "Связи" (Рис.5.1.4). На этой вкладке мы увидим дерево с элементами "el1" ... "el8". Развернув любой из элементов мы увидим ветвь "Parameter" и именно в ней мы должны указать или выбрать адрес наших атрибутов "Ti" и "To". Итого заполним четыре элемента и в процессе этого часть свойств нужно указывать постоянными: * "name" — "'''val:AT101_1 Ti'''"; * "ed" — "'''val:град.С'''"; * "max" — "'''val:150'''" (для Ti) и '''val:100''' (для To); * "min" — "'''val:0'''". Если в шаблоне параметра контроллера заранее предусмотреть наличие атрибутов, указанных нами постоянными, то можно будет указывать только параметр и атрибуты расставятся автоматически. Это мы можем увидеть привязав созданный нами ранее комплексный объект-тег аналогового сигнала ModBus.CM101.TE1314_1. [[file:QuickStart_ui_el_prop_lnk_ru.png|center|frame|Рис. 5.1.4. Вкладка "Связи" диалога редактирования свойств визуального элемента.]] Закончив ввод связей можем проверить, что получилось в результате наших усилий, для этого закроем окно диалога свойств и запустим наш проект "Старт" на исполнение — про кнопку запуска мы помним из первых разделов. Затем выберем графики и переключимся на вторую страницу. При безошибочной конфигурации мы должны увидеть подобное изображённому на рисунке 5.1.5. Заметьте, что для параметра комплексного объекта-тега с установленными границами нарушений, выход значения за границы отмечается аварийным цветом. Для того что-бы увидеть выход за границу нарушения можете установить значение производительности вентилятора в 100 (Рис.4.2.9). [[file:QuickStart_ui_run_grph_ru.png|center|frame|Рис. 5.1.5. Группа графиков с подключением четырёх сигналов и одним параметром объекта-тега.]] === Создание нового кадра — мнемосхемы === Поднимем планку и создадим новый кадр, куда поместим базовые элементы отображения значений параметров наших контроллеров. Такие кадры обычно называются мнемосхемами и кроме отображения динамики, и даже в первую очередь, содержат статическое изображение технологического процесса в мнемоническом представлении. Мы же не будем акцентировать тут внимание на создание статики, а добавим элементы динамики и подключим к ней параметры наших контроллеров. Ну и поместим созданный кадр в дерево нашего проекта. Новые кадры, предназначенные впоследствии для помещения в проект, принято создавать и изменять в библиотеке виджетов. Создадим новую библиотеку виджетов выбрав вертикальную вкладку "Виджет" и в контекстном меню окна библиотек виджетов '''выберем пункт меню "Новая библиотека"''' (Рис.5.2.1). В диалоге ввода имени укажем — '''CM101 (KM 101)'''. [[file:QuickStart_ui_wlib_add.png|center|frame|Рис. 5.2.1. Добавление новой библиотеки виджетов.]] Далее добавляем новый кадр, выбрав пункт меню "... из Библиотеки"->"Библиотека: originals"->"Группа элементов" (Рис.5.2.2) в контекстном меню созданной библиотеки "KM 101". В диалоге ввода названия укажем '''AT101 (AT 101)'''. В основе любого кадра и страницы должен лежать элемент "Группа элементов (Box)" поэтому мы его и выбрали. [[file:QuickStart_ui_w_add.png|center|frame|Рис. 5.2.2. Добавление нового кадра.]] Сразу после создания нового кадра нужно установить его базовые свойства, характерные для кадра мнемосхемы. Свойства или атрибуты любого визуального элемента можно указать в панели инструментов "Атрибуты", предварительно выбрав нужный визуальный элемент. Выберем созданный кадр "AT 101" и установим следующие свойства: * "Геометрия: ширина" — '''900'''; * "Геометрия: высота" — '''600'''; * "Страница: группа" — "'''so'''", для включения кадра в контейнер мнемосхем при исполнении; * "Фон: цвет" — "'''#5A5A5A'''"; * "Граница: ширина" — '''1'''; * "Граница: цвет" — "'''black'''". В результате получим пустой кадр (Рис.5.2.3), готовый для добавления элементов на него. Для графического редактирования или просмотра вида кадра необходимо '''выбрать пункт "Редактировать визуальный элемент"''' в контекстном меню кадра. [[file:QuickStart_ui_w_viewa_ru.png|center|frame|Рис. 5.2.3. Вид нового кадра и установленных атрибутов мнемосхемы.]] Теперь, на кадр добавим элементы отображения значения аналогового параметра для наших четырёх сигналов и параметра комплексного объекта-тега ModBus.CM101.TE1314_1. Для помещения элемента отображения аналогового сигнала на мнемосхему нужно её выбрать, а затем, в меню окна, выбрать пункт меню "Виджет"->"Библиотека: Main"->"Отображение аналогового"; после чего появится курсор с образом этого элемента, который нужно подвести в желаемую область мнемосхемы и нажать левую кнопку мыши. В момент добавления появится диалог с запросом имени нового элемента. Подобным образом добавлять будем пять элементов, которые назовём: '''A1_Ti''', '''A1_To''', '''A2_Ti''', '''A2_To''' и '''TE1314_1'''. Таким-же образом добавим элемент крана комплексного объекта-тега дискретного параметра ModBus.CM101.CB102, для представления которого используем библиотечный элемент "Виджет"->"Библиотека: mnEls"->"Кран шаровый" и назовём его '''CB102'''. Для отображения списка текущих нарушений, на мнемосхему поместим элемент протокола из библиотеки примитивов "Виджет"->"Библиотека: originals"->"Протокол" и назовём его '''Protocol'''. В инспекторе атрибутов установим свойства протокола: * "Геометрия: ширина" — '''500'''; * "Геометрия: высота" — '''250'''; * "Показать колонки" — "'''tm;lev;mess'''"; * "Уровень" — '''-1''', отображение текущих нарушений любого уровня; * "Размер, секунд" — '''0''', отображать нарушения на любую глубину; * "Период слежения, секунд" — '''1'''. Добавленные элементы можно расположить по желанию просто выделяя и перетаскивая мышью. Таким-же образом можно изменить их размер. Простое изменение размера вызовет изменение только геометрии контейнера виджета, что часто не нужно. Для изменения размера всего содержимого виджета его нужно масштабировать, что осуществляется удержанием клавиши "Ctrl" при изменении размера или переключением состояния "Изм. размера" на "Масштаб" в строке статуса. После выполнения всех манипуляций у нас должна получиться мнемосхема с видом похожим на рисунок 5.2.4. [[file:QuickStart_ui_mn_ru.png|center|frame|Рис. 5.2.4. Вид мнемосхемы с рядом элементов.]] На этом процедуру создания мнемосхемы будем считать законченной. Сохраним новую библиотеку виджетов "KM 101" и приступим к этапу размещения нашей мнемосхемы в дереве проекта "Старт". Поместим нашу мнемосхему в ветвь "Старт"->"Корневая страница"->"Группа 1"->"Мнемосхемы" путём выбора пункта меню "... из Библиотеки"->"Библиотека: CM101"->"AT 101" в контекстном меню пункта страницы проекта "Мнемосхемы". Идентификатор новой мнемосхемы установим в "2" при этом поле имени оставим пустым — '''2'''. Далее нужно произвести уже знакомую нам по предыдущей главе операцию, а именно — установку связей на ранее созданные параметры контроллеров. Для этого откроем вкладку "Связи" (Рис.5.2.5) диалога редактирования свойств мнемосхемы, где мы увидим дерево с элементами "A1_Ti", "A1_To", "A2_Ti" и "A2_To". Развернув любой из элементов мы увидим ветку "Parameter" в которой мы должны указать или выбрать адрес значений "pVal" наших атрибутов "Ti" и "To" соответственно. В процессе заполнении элементов часть свойств нужно указывать постоянными: * "pName" — "'''val:AT101_1 Ti'''". Как и в случае с группой графиков в предыдущем разделе, для комплексных параметров объекта-тега ModBus.CM101.TE1314_1 и ModBus.CM101.CB102 можно указать только параметр и атрибуты расставятся автоматически. [[file:QuickStart_ui_mn_lnk_ru.png|center|frame|Рис. 5.2.5. Вкладка "Связи" диалога редактирования свойств мнемосхемы.]] Теперь можем сохранить нашу мнемосхему и поглядеть на результат. Для этого закроем окно диалога свойств и запустим наш проект "Старт" на исполнение. Затем кнопками перелистывания переключимся на нашу мнемосхему и в случае безошибочной конфигурации мы должны увидеть подобное рисунку 5.2.6. [[file:QuickStart_ui_run_mn_ru.png|center|frame|Рис. 5.2.6. Мнемосхема с четырьмя подключенными сигналами, комплексными параметрами объекта-тега и протоколом.]] Заметьте, что выход значения комплексного параметра объекта-тега за границы нарушений отмечается миганием через аварийный цвет для: параметра, объекта сигнализации и жёлтого кружочка внизу. Кроме мигания при нарушении осуществляется монотонная сигнализация (часто на бузер) и синтез речи с проговором позиции параметра указанной в поле связи "spName" (Рис.5.2.5) если доступен соответствующий синтезатор речи. При активации нарушения, справа и справа-внизу активируются кнопки с индикацией типа уведомления, а по нажатию на них осуществляется квитация соответствующего типа уведомления. По нажатию на мигающий жёлтый круг справа-внизу "квитируются"-замалчиваются все уведомления. Факт присутствия нарушения также отображается записью в протоколе, который мы добавили. Чтобы увидеть выход за границу нарушения можете установить значение производительности вентилятора в 100 (Рис.4.2.9). Детальнее про концепцию работы с нарушениями можно почитать в документе "[[Special:MyLanguage/Documents/How_to/Violations,_alarms_and_notifications|Как сформировать нарушения, сигнализацию и уведомления]]". Историю нарушений можем посмотреть в документе "Протокол нарушений", который доступен при выборе вида "Документ" (Рис.5.2.7). [[file:QuickStart_ui_run_docAlarms_ru.png|center|frame|Рис. 5.2.7. Документ "Протокол нарушений".]] Дискретный комплексный параметр объекта-тега ModBus.CM101.CB102, представленный нами в виде шарового крана, является активным. Т.е. его можно выбрать, получив панель управления справа (Рис.5.2.6), а также передать команды (открыть или закрыть). Команды можно передавать с панели управления или через контекстное меню. Все действия оператора по управляющим воздействиям протоколируются и документ протокола можно посмотреть при выборе вида "Документ" (Рис.5.2.8). [[file:QuickStart_ui_run_docOperator_ru.png|center|frame|Рис. 5.2.8. Документ "Протокол вмешательств".]] === Создание нового комплексного элемента === Приступим к рассмотрению задачи третьего уровня сложности, а именно к созданию комплексного элемента. Создание комплексного элемента, включающего в себя комбинацию различных базовых примитивов, может осуществляться в несколько этапов. В качестве примера рассмотрим задачу, состоящую из двух этапов: * создание виджета "Воздушный холодильник" на основе примитива "Элементарная фигура"; * создание финального-скомпонованного виджета "Холодильник" на основе примитива "Группа элементов". ==== Создание виджета "Воздушный холодильник" на основе примитива "Элементарная фигура" ==== Виджет будем создавать в ранее нами созданной библиотеке "КМ 101". Для этого кликаем правой кнопкой манипулятора "мышь" по пункту этой библиотеке и выбираем пункт меню "... из Библиотеки"->"Библиотека: originals"->"Элементарная фигура" как это показано на рисунке 5.3.1.1 и называем новый елемент '''air_cooler (Воздушный холодильник)'''. [[file:QuickStart_addElFig.png|center|frame|Рис. 5.3.1.1. Добавление виджета в библиотеку "KM 101" на основе примитива "Элементарная фигура".]] После подтверждения появится новый виджет с именем "Воздушный холодильник", выберем его в списке виджетов библиотеки "KM 101" и откроем для редактирования посредством контекстного меню нового элемента (Рис.5.3.1.2). В инспекторе атрибутов установим свойства: * "Геометрия: ширина" — '''200'''; * "Геометрия: высота" — '''200'''; * "Заполнение: цвет" — "'''lightgrey'''", цвет можно задавать как с помощью [http://www.w3.org/TR/SVG/types.html#ColorKeywords названий цветов], так и в формате #RRGGBB (#RRGGBB-AAA). [[file:QuickStart_ElFigWH_ru.png|center|frame|Рис. 5.3.1.2. Первичная конфигурация виджета.]] Теперь изобразим визуальное представление виджета, что можно осуществить двумя способами: * нарисовать желаемое изображение манипулятором "мышь", используя "Линию", "Дугу", "Кривую Безье" и "Заливку"; соответствующая панель "Панель элементарных фигур" появится после входа в режим редактирования-рисования; вход в этот режим осуществляется как показано на рисунке 5.3.1.3 либо двойным нажатием левой кнопки манипулятора "мышь" на теле виджета; * вручную заполнить поле "Список элементов", введя перечень необходимых элементов и координат точек. Дополнительную информацию о редакторе можно получить [[Special:MyLanguage/Modules/Vision#ElFigure|здесь]]. [[file:QuickStart_goElFigEdit_ru.png|center|frame|Рис. 5.3.1.3. Вход в режим рисования виджета, основанного на примитиве "Элементарная фигура".]] В нашем примере воспользуемся вторым способом, для чего в поле "Список элементов" инспектора атрибутов введем нижеприведенный перечень и нажмем "Ctrl"+"Enter": <pre> line:(20|80):(100|20) line:(100|20):(180|80) line:(180|80):(100|140) line:(100|140):(20|80) line:(100|20):(100|140) line:(20|80):(180|80) line:(50|165):(100|140) line:(100|140):(150|165) line:(150|165):(50|165) fill:(20|80):(100|20):(180|80):(100|140) fill:(50|165):(100|140):(150|165) </pre> Все точки указаны статически так как не предусматривается динамизация и смена координат в режиме исполнения, а все остальные параметры оставлены по умолчанию. Вследствие этого, наш виджет примет вид на рисунке 5.3.1.4. [[file:QuickStart_ElFigFillCl_ru.png|center|frame|Рис. 5.3.1.4. Изображение, соответствующее "Списку элементов" виджета.]] Создадим иконку нашего виджета, которая будет видна в дереве виджетов библиотеки "KM 101" (Рис.5.3.1.5). [[file:QuickStart_ElFigPic_ru.png|center|frame|Рис. 5.3.1.5. Создание иконки виджета.]] На этом процесс создания первого виджета можно считать завершенным. Перейдем к этапу компоновки и создания результирующего виджета. ==== {{Anch|ComplexWdg|Создание финального-скомпонованного виджета "Холодильник" на основе примитива "Группа элементов"}} ==== Финальный виджет будем создавать в библиотеке "KM 101" для чего кликаем правой кнопкой манипулятора "мышь" по этой библиотеке и выбираем примитив "Группа элементов" как это показано на рисунке 5.3.2.1. Назовём новый элемент — '''elCooler (Холодильник)'''. [[file:QuickStart_addBox_ru.png|center|frame|Рис. 5.3.2.1. Добавление виджета в библиотеку "KM 101" на основе примитива "Группа элементов".]] После подтверждения появится новый виджет с именем "Холодильник". Выберем его в списке виджетов библиотеки "KM 101" и откроем для редактирования. В инспекторе атрибутов установим свойства: * "Геометрия: ширина" — '''250'''; * "Геометрия: высота" — '''200'''. Возьмём ранее созданный элемент "Воздушный холодильник" и перетащим его — нажмём на нем левую кнопку манипулятора "мышь" и переместим курсор до области только что созданного виджета, где отпустим кнопку (Рис.5.3.2.2). [[file:QuickStart_air_coolerDrag_ru.png|center|frame|Рис. 5.3.2.2. Перетаскивание (Drag&Drop) виджета "Воздушный холодильник" в виджет-контейнер "Холодильник".]] В результате появится окно диалога с предложением ввести идентификатор и имя нового виджета. Идентификатор и имя могут быть заданы произвольно, мы введём идентификатор '''air_cooler''', а имя оставим пустым и оно унаследуется от родителя — элемента "Воздушный холодильник". Таким образом, только что созданный виджет внутри контейнера "Холодильник" унаследует элемент "Воздушный холодильник". После подтверждения ввода идентификатора и имени, виджет "Воздушный холодильник" добавится в нашем виджете-контейнере "Холодильник" (Рис.5.3.2.3). В инспекторе атрибутов установим для него свойства: * "Геометрия: x" — '''25'''; * "Геометрия: y" — '''0'''. [[file:QuickStart_air_coolerDrop_ru.png|center|frame|Рис. 5.3.2.3. Добавление унаследованного виджета "Воздушный холодильник".]] Далее развернем пункт меню библиотеки "Элементы мнемосхемы", найдем там элемент "Вентилятор 2" и перетащим его на виджет-контейнер. Этот элемент будет динамически отображать интенсивность работы воздушного холодильника. Для нового виджета введём идентификатор '''cooler2''' и имя снова оставим пустым, после чего виджет "Вентилятор 2" добавится в наш виджет-контейнер "Холодильник". Таким образом, только что созданный виджет внутри контейнера "Холодильник" унаследует элемент библиотеки "Элементы мнемосхемы" — "Вентилятор 2". В инспекторе атрибутов установим свойства: * "Геометрия: x" — '''75'''; * "Геометрия: y" — '''30'''; * "Геометрия: z" — '''10''', поднять элемент над всеми можно из панели "Функции видимости виджетов"; * "Цвет1" — "'''#FFFF00-200'''", добавили альфа канал — прозрачность 200 ("0" - полностью прозрачный, "255" - полностью непрозрачный), рисунок 5.3.2.4; * "Цвет2" — "'''#FF0000-200'''", добавили альфа канал — прозрачность 200. [[file:QuickStart_cooler2AlphaChange_ru.png|center|frame|Рис. 5.3.2.4. Изменение прозрачности цвета заполнения наследованного виджета "Вентилятор 2".]] Теперь в виджете-контейнере "Холодильник" добавим два текстовых поля основанных на примитиве "Текст" с целью отображения входной и выходной температур потока. Для этого выделим виджет "Холодильник" и на панели визуальных элементов библиотеки "KM 101" выберем пункт меню примитива "Текст" как это показано на рисунке 5.3.2.5. Для первого текстового поля введем идентификатор '''Ti''' и в инспекторе атрибутов установим свойства: * "Геометрия: x" — '''5'''. * "Геометрия: y" — '''20'''. * "Геометрия: ширина" — '''70'''. * "Геометрия: высота" — '''35'''. * "Выравнивание" — "'''В центре'''". * "Шрифт" — "'''Arial 14 1'''", изменение шрифта можно осуществлять в диалоге, который открывается по нажатию на ключик у поле редактирования (Рис.5.3.2.7). : [[File:at.png]] Шрифт Arial может отсутствовать в диалоге, поэтому выберете тот, который вам нравится. * "Текст" (Рис.5.3.2.8): <pre style="margin-left: 20px;"> %1 град.C </pre> * "Количество аргументов" — '''1''' (Рис.5.3.2.9): ** "Аргумент 0: тип" — "'''Вещественный'''"; ** "Аргумент 0: значение" — '''300.25''', задано лишь для наглядности и в режиме исполнения оно будет заменено реальным значением входной температуры; ** "Аргумент 0: конфигурация" — "'''3;f;2'''". [[file:QuickStart_BoxAddText_ru.png|center|frame|Рис. 5.3.2.5. Добавление нового элемента, основанного на примитиве "Текст".]] [[file:QuickStart_textGeom_ru.png|center|frame|Рис. 5.3.2.6. Указание геометрии виджета "Ti".]] [[file:QuickStart_tetxFontChange_ru.png|center|frame|Рис. 5.3.2.7. Изменение размера шрифта для виджета "Ti".]] [[file:QuickStart_textArgAdd_ru.png|center|frame|Рис. 5.3.2.8. Изменение поля "Текст" и указание наличия аргумента для виджета "Ti".]] [[file:QuickStart_textArgConf_ru.png|center|frame|Рис. 5.3.2.9. Конфигурация аргумента виджета "Ti".]] Теперь, с целью создания аналогичного виджета для выходной температуры, скопируем виджет "Ti", вставим скопированный виджет и укажем ему идентификатор '''To''' (Рис.5.3.2.10). В инспекторе атрибутов установим свойства: * "Геометрия: x" — '''175'''; * "Геометрия: y" — '''20'''. [[file:QuickStart_ToGeom_ru.png|center|frame|Рис. 5.3.2.10. Виджет "To".]] Теперь добавим виджет основанный на примитиве "Элемент формы" (Рис.5.3.2.11), который будем использовать для выбора заданий производительности холодильника. Укажем идентификатор '''cw''' (Рис.5.3.2.12) и в инспекторе атрибутов установим свойства: * "Активный" — '''true'''; * "Геометрия: x" — '''60'''; * "Геометрия: y" — '''158'''; * "Геометрия: ширина" — '''60'''; * "Геометрия: высота" — '''40'''; * "Геометрия: z" — '''10''', поднять элемент над всеми можно из панели "Функции видимости виджетов"; * "Тип элемента" — "'''Combo Box'''"; * "Шрифт" — "'''Arial 14 1'''"; * "Значение" — '''200'''; * "Конфигурация": <pre style="margin-left: 20px;"> 0 50 100 150 200 </pre> [[file:QuickStart_addFormEl_ru.png|center|frame|Рис. 5.3.2.11. Добавление виджета, основанного на примитиве "Элемент формы".]] [[file:QuickStart_comboParams_ru.png|center|frame|Рис. 5.3.2.12. Заполнение параметров ComboBox "cw".]] Для отображения единицы измерения производительности холодильника добавим ещё один виджет основанный на примитиве "Текст". Делаем туже процедуру, что и для виджета "Ti". Укажем идентификатор '''dimension''' (Рис.5.3.2.13) и в инспекторе атрибутов установим свойства: * "Геометрия: x" — '''125'''; * "Геометрия: y" — '''168'''; * "Геометрия: ширина" — '''80'''; * "Геометрия: высота" — '''20'''; * "Выравнивание" — "'''В центре'''"; * "Шрифт" — "'''Arial 14 1'''"; * "Текст" — "'''об./мин.'''". [[file:QuickStart_addDimension_ru.png|center|frame|Рис. 5.3.2.13. Добавление виджета "dimension" основанного на примитиве "Текст" и изменение его параметров.]] Для добавления логики обработки виджета "Холодильник", откроем диалог редактирования свойств этого визуального элемента и перейдём на вкладку "Обработка". На этой вкладке мы увидим дерево атрибутов виджета и поле текста программы обработки атрибутов. Для решения нашей задачи нужно добавить три атрибута: Ti, To, Cw (Рис.5.3.2.14); для чего нужно развернуть корневой элемент ".", выбрать любой элемент внутри него и '''нажать кнопку "Добавить атрибут"''' внизу. Далее '''включим в обработку''' атрибут '''value''' комбобокса "cw" как это показано на рисунке 5.3.2.15. Аналогично включим в обработку атрибут '''arg0val''' для Ti и To, а также атрибут '''speed''' элемента "cooler2". [[file:QuickStart_elCoolerAtrrAdd.png|center|frame|Рис. 5.3.2.14. Добавление трех атрибутов элемента "Холодильник" библиотеки "KM 101".]] [[file:QuickStart_cwValueProc.png|center|frame|Рис. 5.3.2.15. Включение в обработку атрибута "value" комбобокса "cw".]] В завершении установим язык пользовательского программирования "JavaLikeCalc.JavaScript" и напишем саму эту программу обработки виджета: <syntaxhighlight lang="JavaScript"> Ti_arg0val = Ti; To_arg0val = To; for(ev_rez = "", off = 0; (ev_wrk=event.parse(0,"\n",off)).length; ) if(ev_wrk == "ws_CombChange:/cw") Cw = cw_value; else ev_rez += ev_wrk+"\n"; event = ev_rez; cw_value = Cw; cooler2_speed = Cw/5; </syntaxhighlight> [[File:at.png]] Помещение или редактирование программы виджета не приводит к непосредственной её компиляции, т.е. не будет сообщений об ошибках в программе если они имеют место быть. Это связано с тем, что непосредственное исполнение программы, а значит и её компиляция, осуществляется в окружении исполнения и в момент запуска проекта визуализации на исполнение. При этом все ошибки, возникшие при компиляции, выводятся в виде сообщений OpenSCADA, а виджеты с ошибками не исполняются. Детальнее про отладку пользовательских процедур можно почитать в документе "[[Special:MyLanguage/Documents/How_to/Debug|Как наладить проект OpenSCADA]]". Processing the widget in whole and executing its program performed at any event in the life cycle of the VCA project (specified in the "Period of the calculation" field of the "Project" tab, Figure 5.2) and periodically with the widget processing period (specified in the "Periodic processing" field of the "Widget" tab, Figure 5.1.3). By default, the widget processing period is taken from top widget and it is 1000 ms, so when you want faster updating your widget, you can set "Periodic processing" to 250 ms on the "Widget" tab. Полученная вкладка "Обработка" виджета "Холодильник" библиотеки "KM 101" будет иметь вид, показанный на рисунке 5.3.2.16. [[file:QuickStart_UserProgElCooler.png|center|frame|Рис. 5.3.2.16. Результирующая вкладка "Обработка" виджета "Холодильник" библиотеки "KM 101".]] Закроем диалог редактирования свойств визуального элемента, создадим иконку нашего элемента, закроем внутреннее окно редактирования и сохраним это всё. На этом разработку комплексного элемента можно считать законченной. ==== Добавление комплексного элемента на мнемосхему ==== Для проверки работоспособности и оценки результатов наших усилий, добавим созданный виджет на мнемосхему, разработанную в разделе 5.2. Выполним эту операцию для двух холодильников "AT101_1" и "AT101_2". Для этого откроем кадр мнемосхемы "AT 101" на редактирование, хватаем "мышью" наш комплексный элемент и тащим на мнемосхему, где отпускаем в нужной позиции — вводим идентификаторы '''AT101_1''' и '''AT101_2''', соответственно. Добавленные элементы располагаем как нам удобно. После выполнения этих манипуляций у нас должна получиться мнемосхема с видом на рисунке 5.3.3.1. [[file:QuickStart_ui_mn2_ru.png|center|frame|Рис. 5.3.3.1. Мнемосхема с нашими комплексными элементами.]] Сохраним новую мнемосхему и закроем её окно. Далее перейдём в проект и откроем эту мнемосхему в дереве проекта "Старт"->"Корневая страница"->"Группа 1"->"Мнемосхемы"->"AT 101". Как можно заметить, наши новые элементы появились здесь автоматически и нам осталось только подключить связи к ним, для этого откроем диалог редактирования свойств мнемосхемы на вкладке "Связи" (рис.5.3.3.2). На этой вкладке мы увидим дерево с элементами "AT101_1" и "AT101_2", развернув любой мы увидим ветвь "Parameter" с атрибутами "Ti", "To" и "Cw". Таким образом, в поле "Parameter" можем просто указать адрес параметра "'''prm:/LogicLev/CM101/AT101_1'''" и "'''prm:/LogicLev/CM101/AT101_2'''", соответственно, а атрибуты будут расставлены автоматически. [[file:QuickStart_ui_mn2_lnk_ru.png|center|frame|Рис. 5.3.3.2. Вкладка "Связи" диалога редактирования свойств мнемосхемы.]] Сохраним нашу мнемосхему и проверим результат, для чего закроем окно диалога свойств, запустим проект "Старт" на исполнение и переключимся на вторую мнемосхему кнопками перелистывания. При безошибочной конфигурации должны увидеть подобное изображённому на рисунке 5.3.3.3. [[file:QuickStart_ui_run_mn2_ru.png|center|frame|Рис. 5.3.3.3. Результирующая мнемосхема.]] На этой мнемосхеме, посредством наших комплексных элементов, мы можем не только наблюдать, но и управлять производительностью холодильников просто меняя значение в комбобоксе. Меняя производительность можем заметить и изменение температуры, и срабатывание сигнализации по комплексному аналоговому параметру объекта-тренда. Историю изменения можем увидеть и исследовать на группе графиков, созданной нами в разделе 5.1, и документе "Протокол нарушений", упомянутый в разделе 5.2. == Вывод == Таким образом мы получили полноценный типовой интерфейс технологического процесса (ТП) с реальным сбором данных в разный способ и соответственно получили представление и навыки работы с OpenSCADA. При построении интерфейса ТП мы рассмотрели все три уровня сложности и соответственно получили представление про нужный квалификационный уровень программиста SCADA. Сбор и обработку данных мы рассмотрели и осуществили в разные способы от простого-типового и по отражение модели данных ПЛК, построенного на основе OpenSCADA. Т.е., получено представление про источники данных SCADA-систем и доступ к ним с помощью сетевых интерфейсов и протоколов обмена, поддержку которых реализуют соответствующие модули OpenSCADA. И конечно, мы рассмотрели методы распространения (дистрибуции) OpenSCADA, способы её установки и получения нужного окружения таких как: сервера SCADA, ПЛК OpenSCADA и рабочего места оператора (АРМ). Информация про OpenSCADA этим документом не ограничивается и в разрешении специфических вопросов вы должны использовать [[Special:MyLanguage/Home|всю доступную документацию]] и примеры демонстрационных конфигураций-моделей OpenSCADA, пользуясь тем самым преимуществами "открытых исходных текстов (OpenSource)". Отдельно тут нужно ещё раз отметить "[[Special:MyLanguage/Documents/Program_manual|Руководство по программе]]", "[[Special:MyLanguage/Documents/How_to|Как (How to) ...]]" и "[[Special:MyLanguage/Using/Model_AGLKS|Динамическую модель реального времени АГЛКС]]", как наиболее полные источники информации про OpenSCADA. == Ссылки == * [[:File:QuickStart SimpleStationAndServer_ru.odg|Диаграмма: Простое объединённое подключение станции и сервера SCADA с источником данных в демонстрационной БД.]]
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