Документи/Швидкий старт - OpenSCADAWiki

# Документи/Швидкий старт

This page is a translated version of the page Documents/Quick start and the translation is 100% complete.

English • ‎mRussian • ‎Українська

- Автор: Роман Савоченко
  Максим Лисенко (2010-2012)
- Відео-доповнення:
  - Офіційне доповнення OpenSCADA 0.8.0 LTS (застаріле, ), Роман Савоченко, 2012
  - Відео "Як (How to) ..." від Сергію Карпешу (), Сергій Карпеш, 2018
- Початково створено: у старій Wiki
- Цілковито переглянуто: 12.01.7532/12.03.2024

OpenSCADA є гранично модульною, гнучкою та багатофункційною SCADA-системою. Як наслідок, перше знайомство з OpenSCADA може бути достатньо складним з причини малих шансів співпадіння попереднього досвіду користувача з підходами OpenSCADA або повної відсутності такого досвіду. Значним чином, однак, це лише перше враження оскільки вся потужність OpenSCADA опиняється в руках користувача і від розмаїття якої він може розгубитися та йому можуть знадобитися значні зусилля для відбору потрібних у вирішені його завдання функцій.

З цієї причини, та для наочного представлення загальної концепції використання OpenSCADA, створено цей документ. Документ на прикладах, та у достатньо короткій і наочній формі, надає шлях від встановлення та запуску OpenSCADA до створення елементів користувацького інтерфейсу. У якості цільової допомоги в конфігурації, реалізації та вирішені типових завдань довкола OpenSCADA, також може бути використано документи Часті питання та "Як (How to) ...".

Документ призначено для OpenSCADA версії 0.9 і вище. Якщо-ж вас цікавить цей документ для ранніх версій, то можете його отримати із документації що їде з пакетами тієї версії OpenSCADA або із цього документу старої Wiki.

Документ не містить детального опису концепції і заглиблення у деталі OpenSCADA, а надає посилання на інші документи, що містять таку інформацію, та в першу чергу це Посібник по програмі.

Документ будується синхронно з реалізацією прикладів на підключені до демонстраційної бази даних (БД) моделі "АГЛКС" у ролі джерела даних — ПЛК. Відповідно, користувач має отримати дистрибутив OpenSCADA з цією БД, про що детальніше у розділі Встановлення!

## 1 Терміни, визначення та абревіатури

### 1.1 Терміни та визначення

- Qt — інструментарій розробки ПЗ за допомогою якого зокрема створено модулі QTStarter (пускач модулів OpenSCADA на бібліотеці Qt), QTCfg (графічний конфігуратор OpenSCADA) і Vision (редактор та виконавець робочих користувацьких інтерфейсів СВУ). Може зустрічатися у вигляді QT, що є раннім записом, використаним розробниками OpenSCADA для бібліотеки Qt.
- Блокування — умовна границя технологічного параметру за подолання якої здійснюються передбачені алгоритмом дії із запобігання аварії. У деяких режимах ТП (пуск), відповідно до регламенту, може знадобитися відключення блокування — деблокування.
- Віджет СВУ — елемент візуалізації СВУ.
- Деблокування — процес вимкнення блокування на час роботи ТП у певних режимах, для яких у регламенті передбачена дана операція. Деблокування технологічних параметрів є суворо звітною операцією і вона має відбуватися оперативним персоналом у відповідному порядку!
- Загальний Сховок — первинний сховок OpenSCADA (вказуваний раніше як "*.*" і потім неявно "<gen>"), який розроблено для комбінування Конфігураційного Файлу і робочої Бази Даних у один сховок загальних даних OpenSCADA. Де Конфігураційний Файл є первинним для вже наявних там даних, тобто їх зміни, а все нове створюється у Базі Даних.
- Кадр СВУ — похідний елемент візуалізації, який складається із базових елементів і спроможний виконувати функції сторінки проєкту СВУ.
- Квітація (від quietance) — процес підтвердження факту того, що оперативний персонал звернув увагу на порушення у роботі ТП. Зазвичай цей процес передбачає вживання заходів оператором для усунення порушення і натискання відповідної кнопки припинення сигналізації.
- Комплексний параметр-тег або об'єкт-тег сигналу — деталізований сигнал джерела даних як вичерпний параметр-тег, що для аналогового зазвичай містить:
  - значення сигналу у інженерній-реальній одиниці виміру;
  - назва одиниці виміру;
  - шкала-діапазон фізичної зміни значення сигналу — мінімальна та максимальна границі;
  - границі сигналізації — зазвичай це верхня і нижня границі для попереджувальної і аварійної сигналізації;
  - параметри фільтру;
  - параметри особливостей шкали, визначення достовірності, формату представлення і інше.
- Модель даних — організація і структурування даних ТП або іншого об'єкту автоматизації у шарі джерела даних SCADA, протоколу обміну або ПЛК. По замовченню мається на увазі шар джерела даних OpenSCADA зі структурою "Об'єкт контролеру"->"Параметр, рівень 1"->...->"Параметр, рівень N"->"Атрибут значення - сигнал".
- Проєкт — термін має багато значень і, залежно від контексту, може визначати:
  - Проєкт (програма) OpenSCADA — вільне програмне забезпечення, документацію якого ви наразі читаєте.
  - Визначений набір-тека з конфігурацією і даними, які створюються користувачем OpenSCADA, де конфігурація зберігається у конфігураційному файлі (обов'язково) і одному або декількох файлах БД (необов'язково і може бути у мережі). Наприклад — демонстраційний проєкт, модель ТП "АГЛКС". Тобто, автором проєкту виступає користувач програми — інженер-розробник або програміст SCADA системи.
  - Проєкт СВУ — складова середовища візуалізації і управління (СВУ), створювана у модулі UI.VCAEngine через UI.Vision і що містить набір кадрів СВУ.
- Сигнал (стосовно джерела даних) — елемент джерела даних у вигляді виміряного або вирахуваного значення технологічного параметра або датчику-сенсору. Представляє із себе скаляр дискретного, цілого або реального типів, який часто кодується масштабуванням шкали параметру у розмірність цілого. Сигнал для ідентифікації часто просто індексується або кодується за адресою його значення у карті протоколу обміну та осмислену назву він набуває у моделі даних SCADA.
- Сигналізація — процес сповіщення оперативного персоналу про порушення технологічного процесу або роботи обладнання автоматизації. Способи сигналізації можуть бути різних типів впливу на органи відчуттів людини з метою привернення уваги. Часто передбачаються наступні типи сигналізації:
  - Світлова сигналізація — зазвичай здійснюється за посередництвом зміни кольору графічного об'єкта (блимання) для подій, що виникли, і встановленням статичних аварійних кольорів (червоний та жовтий) для "сквітованих"-підтверджених повідомлень.
  - Звукова — здійснюється видачею звукового сигналу на момент виникнення події. Тип звукового сигналу може бути як монотонним, так і синтезованим мовним повідомленням з інформацією про порушення.
- Уставка сигналізації — умовна границя значення технологічного параметру, подолання якої вважається нештатною ситуацією. Зазвичай передбачаються наступні границі:
  - Верхня і нижня аварійні границі — границі аварійних значень технологічного параметру.
  - Верхня і нижня попереджувальні границі — границі попередження — регламентні границі про вихід технологічного параметру за робочий діапазон.
  - Відмова — ознака виходу значення параметру за апаратні границі технологічного обладнання. Зазвичай характеризує відмову датчика, обрив каналу зв'язку з датчиком або ПЛК.

### 1.2 Вживані скорочення

- API (англ. Application Programming Interface) — інтерфейс програмування додатків (модулів OpenSCADA) або розширень на внутрішній мові OpenSCADA — API користувача.
- AWP (англ. Automated Work Place) — див. АРМ.
- MOD (англ. Matching to Object Device) — див. ПУО.
- DAQ (англ. Data Acquisition) — збір даних.
- DB (англ. Data Base) — див. БД.
- DCON — найменування одного з комунікаційних протоколів, який використовується у промисловості.
- EVAL — (англ. Error VALue) — Помилкове Значення, використовується у динамічних даних і внутрішній мові для визначення спеціального значення-ознаки відсутності або помилковості даних, яке різне для різних типів значень, але яке прозоро перетворюються одне в інше. У якості зручного синоніму до EVAL у внутрішній мові наразі використовується null.
- GPL (англ. General Public License) — відкрита ліцензійна угода (ліцензія) за умовами якої розповсюджується і може використовуватися OpenSCADA.
- GUI (англ. Graphical User Interface) — графічний інтерфейс користувача.
- HMI (англ. Human-Machine Interface) — людино-машинний інтерфейс.
- HTTP (англ. HyperText Transfer Protocol — "протокол передачі гіпертексту") — протокол прикладного рівня передачі даних, частіш за все у вигляді гіпертекстових документів.
- ModBus — Modicon BUS, це послідовний комунікаційний протокол в варіантах RTU і ASCII, початково опублікований Modicon у 1979 для використання з власними ПЛК. Пізніше розширений для роботи поверх TCP-IP та цей варіант отримав назву ModBus/TCP.
- PLC (англ. Programmable Logic Controller) — див. ПЛК.
- QT — див. QT у переліку термінів, не є скороченням.
- SCADA (англ. Supervisory Control And Data Acquisition) — диспетчерський контроль і збір даних.
- TP (англ. Technological Process) — див. ТП.
- TUI (англ. Terminal(Text) User Interface) — термінальний (текстовий) інтерфейс користувача.
- UI (англ. User Interface) — інтерфейс користувача.
- VCA (англ. Visual Control Area) — див. СВУ.

- АРМ — Автоматизоване Робоче Місце. Зазвичай представляє собою системний блок обчислювальної системи, дисплей, маніпулятор "миші" інколи з клавіатурою та інше периферійне обладнання, яке слугує для візуального представлення даних технологічного процесу, а також видачі керуючих дій на ТП.
- БД — База Даних.
- ОС — Операційна Система.
- ПЛК — Програмований Логічний Контролер.
- ПЗ — Програмне Забезпечення.
- ПУО — Пристрій Узгодження з Об'єктом. Низка пристроїв або модулів ПЛК до яких безпосередньо підключаються сигнали з датчиків ТП для подальшого перетворення із аналогового у цифровий вигляд і назад. Перетворення здійснюється з метою подальшої обробки значень технологічних параметрів у ПЛК.
- СВУ — Середовище Візуалізації і Управління.
- СО — Об'єкт Сигналізації. Літери у абревіатурі переставлено задля усунення плутанини із скороченням ОС (див. вище).
- ТП — Технологічний Процес. Весь комплекс технологічного обладнання виробничого процесу.
- ФС — файлова Система.

## 2 Встановлення OpenSCADA

Встановлення OpenSCADA загалом можна здійснити двома способами. Перший та простий спосіб, це отримати готові пакети для використаного дистрибутиву ОС Linux. Другий — скласти OpenSCADA з вихідних текстів.

Процедура встановлення сильно залежить від використаного дистрибутиву Linux і вичерпно її описати у даному посібнику не є можливим. Тому може знадобитися глибоке знайомство з механізмами встановлення ПЗ обраного дистрибутиву Linux в його документації. За відсутності у користувача таких знань, умінь і схильності до конкретного дистрибутиву Linux, наполегливо рекомендується обирати його за критерієм наявності до нього пакетів OpenSCADA і навіть репозиторію пакетів, що забезпечить найпростіше та безпроблемне встановлення.

Якщо у користувача викликає складнощі встановлення не тільки OpenSCADA, але й дистрибутиву Linux, то, на перший час, він може скористатися "живим" дистрибутивом Linux із встановленою та готовою до роботи і вивчення демонстрацією та повноцінною OpenSCADA. Якщо його влаштує таке оточення швидкої доступності, то він може зупинити свій вибір на ньому і встановити. На цей час доступні "живі" збірки на основі дистрибутиву Debian і ALTLinux (застаріле) у вигляді гібридних CD/DVD/USB-штампів на сторінці: http://oscada.org/ua/golovna/zavantazhiti/. Детальніше дивіться у документі "Як створити Живий диск".

### 2.1 Встановлення OpenSCADA з готових пакетів

Встановлення з готових пакетів своєю чергою може здійснюватися двома методами. Перший — простіший, коли пакети OpenSCADA вже присутні у власних репозиторіях пакетів OpenSCADA або офіційних — додаткових репозиторіях використаного дистрибутиву ОС Linux. Встановлення таких пакетів є лише питанням запуску типової програми управління пакетами дистрибутиву з подальшим вибором пакетів OpenSCADA. Окрім простого встановлення, репозиторій пакетів загалом дозволяє просто утримувати операційну систему оновленою, безпечною та актуальною! Другий спосіб передбачає отримання пакетів OpenSCADA і встановлення їх вручну.

Перевірити наявність пакетів OpenSCADA у репозиторіях дистрибутивів Linux або OpenSCADA, а також завантажити пакети OpenSCADA для ручного встановлення, можна на сторінці завантаження офіційного сайту OpenSCADA. Тут також можна отримати конфігурацію для підключення репозиторіїв пакетів OpenSCADA до пакетного менеджеру вашого дистрибутиву Linux.

Завантажувати пакети і підключати репозиторії пакетів треба безпосередньо для версії використаного дистрибутиву, інакше під час встановлення можуть виникнути нерозв'язні проблеми з залежностями.

#### 2.1.1 Додавання репозиторію пакетів і встановлення OpenSCADA з нього

Репозиторії з пакетами надаються самим проєктом OpenSCADA, службова інформація яких зазвичай розташовується поряд з самими пакетами і оновлюється автоматично при складанні, тобто ці репозиторії є найбільш свіжими і найліпшими. Хоча пакети OpenSCADA все ще можна зустріти у репозиторіях таких дистрибутивів ОС Linux: ALTLinux і дистрибутивах, заснованих на пакетній базі Fedora, але вони там скоріше за все будуть старі, оскільки складання до репозиторіїв дистрибутивів розробниками наразі не практикується!

Адреси репозиторіїв і конфігурацію менеджеру репозиторіїв можете отримати на тій самій сторінці завантаження OpenSCADA (http://oscada.org/ua/golovna/zavantazhiti/) або в прикладах нижче.

При встановлені з репозиторію обираємо тільки пакет з конфігурацією проєкту OpenSCADA або моделлю. Решту буде обрано та встановлено автоматично згідно до залежностей. Зазвичай передбачаються наступні пакети такого роду:

- openscada-model-aglks, openscada-model-boiler — проєкти динамічних моделей технологічних процесів, які за сумісництвом виконують функцію демонстрації OpenSCADA;
- openscada-vis-station — шаблонний проєкт SCADA-станції, зазвичай запуск у графічному інтерфейсі та без Web;
- openscada-server — шаблонний проєкт SCADA-серверу, що запускається у фоновому режимі — режим демону;
- openscada-plc — шаблонний проєкт ПЛК, що запускається у фоновому режимі — режим демону;
- openscada — типове-повне встановлення OpenSCADA.

У випадку із Linux Дистрибутивом Автоматизації і пакетами версії тривалої підтримки (LTS), до основної назви пакетів додається суфікс "-lts" — "openscada-lts", оскільки репозиторій один і він містить пакети обох гілок: Робочої і LTS.

Встановлення-оновлення з репозиторію є простим, але специфічним до дистрибутиву Linux, віконного менеджеру або окремої програми роботи з репозиторіями і пакетами, тому відішлемо читача до відповідної документації на дистрибутив або програму, які він використовує. Тут-же коротко розглянемо додання репозиторію і встановлення OpenSCADA за допомогою типових інструментів командного рядку:

Репозиторії пакетів основані на менеджері APT (Debian, Ubuntu, ALTLinux) — додаються розташуванням завантаженого файлу "openscada.list" до теки "/etc/apt/sources.list.d" або редагуванням файлу /etc/apt/sources.list вставкою одного рядка:
Debian (LTS і Work, репозиторій Linux автоматизації): "deb http://ftp.oscada.org/Debian/12/openscada ./"
Ubuntu (LTS): "deb http://ftp.oscada.org/OpenSCADA/LTS/Ubuntu/22.04 ./"
Ubuntu (Work): "deb http://ftp.oscada.org/OpenSCADA/Work/Ubuntu/22.04 ./"
Встановлення:

    apt-get update
    apt-get purge openscada*                   # Цілковите видалення перед встановленням іншої гілки
    apt-get install openscada-model-aglks      # Встановлення Work
    apt-get install openscada-lts-model-aglks  # Встановлення LTS

ALTLinux (LTS і Work, репозиторій Linux автоматизації): "rpm http://ftp.oscada.org/ALTLinux/7 openscada main"
Встановлення:

    apt-get update
    apt-get install openscada-Model.AGLKS      # Встановлення Work
    apt-get install openscada_LTS-Model.AGLKS  # Встановлення LTS

Додання ключа перевірки підпису (дійсності) репозиторію та пакетів у ньому (необов'язково і використовується не у всіх репозиторіях):

    wget -P /etc/apt/trusted.gpg.d http://ftp.oscada.org/Misc/openscada-archive-keyring.asc
    # або на старих Debian системах
    wget -O - http://ftp.oscada.org/Misc/pkgSignKey | sudo apt-key add -

Репозиторії пакетів основані на менеджері пакетів YUM (RedHat, Fedora, CentOs) — додаються завантаженням або створенням файлу /etc/yum.repos.d/openscada.repo з вмістом:

    [openscada]
    name=OpenSCADA
    #CentoOs (LTS)
    baseurl=http://ftp.oscada.org/OpenSCADA/LTS/CentOs/7
    #CentoOs (Work)
    #baseurl=http://ftp.oscada.org/OpenSCADA/Work/CentOs/6
    #Fedora (Work)
    #baseurl=http://ftp.oscada.org/OpenSCADA/Work/Fedora/12
    enabled=1
    gpgcheck=1
    repo_gpgcheck=1
    gpgkey=http://ftp.oscada.org/Misc/pkgSignKey

Встановлення:

    yum install openscada-Model.AGLKS

Репозиторії пакетів SuSE YaST — додаються командою:

    zypper ar -f http://ftp.oscada.org/OpenSCADA/LTS/SuSE/15 OpenSCADA

Встановлення:

    zypper in openscada-Model.AGLKS

#### 2.1.2 Ручне встановлення пакетів OpenSCADA

Для ручного встановлення пакетів OpenSCADA їх треба завантажити з офіційного сайту або іншого джерела. Завантажити зазвичай можна два набори пакетів.

Перший набір представлено дванадцятьма пакетами:

- openscada — пакет зі всіма файлами потрібними для запуску OpenSCADA у повному об'ємі, включаючи всі модулі;
- openscada-server — містить залежності, файл сценарію і конфігурацію проєкту сервера для запуску OpenSCADA у режимі сервісу-демону;
- openscada-plc — містить залежності, файл сценарію, конфігурацію проєкту ПЛК для запуску OpenSCADA у режимі сервісу-демона;
- openscada-libdb-main — основні бібліотеки OpenSCADA для збору даних та іншого у БД SQLite;
- openscada-libdb-vca — бібліотеки візуальних компонентів у БД SQLite;
- openscada-model-aglks — БД та конфігурація динамічної моделі реального часу "АГЛКС" (Демо: EN,UK,RU);
- openscada-model-boiler — БД та конфігурація динамічної моделі реального часу "Котел" (EN,UK,RU);
- openscada-doc-en — позамережева документація OpenSCADA англійською мовою;
- openscada-doc-uk — позамережева документація OpenSCADA українською мовою;
- openscada-doc-ru — позамережева документація OpenSCADA mRussia плескачем;
- openscada-dev — пакет розробки зі створення окремих модулів OpenSCADA;
- openscada-dbg — пакет налагодження із налагоджувальною інформацією бінарних файлів для звіту і пошуку помилок у програмі.

Другий набір представлено біля п'ятдесятьма пакетами з виокремленням модулів OpenSCADA по пакетам:

- openscada-core — містить ядро OpenSCADA, базову конфігурацію і виконувальні файли;
- openscada-db-* — модулі підсистеми "БД";
- openscada-daq-* — модулі підсистеми "Збір Даних";
- openscada-arh-* — модулі підсистеми "Архіви-Історія";
- openscada-tr-* — модулі підсистеми "Транспорти";
- openscada-prot-* — модулі підсистеми "Транспортні протоколи";
- openscada-ui-* — модулі підсистеми "Користувацькі інтерфейси";
- openscada-spec-* — модулі підсистеми "Спеціальні";
- openscada — віртуальний пакет із залежностями для встановлення типової конфігурації OpenSCADA;
- openscada-server — містить залежності, файл сценарію та конфігурацію проєкту сервера для запуску OpenSCADA у режимі сервісу-демону;
- openscada-plc — містить залежності, файл сценарію, конфігурацію проєкту ПЛК для запуску OpenSCADA у режимі сервісу-демона;
- openscada-vis-station — віртуальний пакет із залежностями для встановлення типової конфігурації OpenSCADA як візуальна SCADA-станція;
- openscada-libdb-main — основні бібліотеки OpenSCADA для збору даних та іншого у БД SQLite;
- openscada-libdb-vca — бібліотеки візуальних компонентів у БД SQLite;
- openscada-model-aglks — БД та конфігурація динамічної моделі реального часу "АГЛКС" (Демо: EN,UK,RU);
- openscada-model-boiler — БД та конфігурація динамічної моделі реального часу "Котел" (EN,UK,RU);
- openscada-doc-en — позамережева документація OpenSCADA англійською мовою;
- openscada-doc-uk — позамережева документація OpenSCADA українською мовою;
- openscada-doc-ru — позамережева документація OpenSCADA mRussia плескачем;
- openscada-dev — пакет розробки зі створення окремих модулів OpenSCADA;
- openscada-dbg — пакет налагодження із налагоджувальною інформацією бінарних файлів для звіту і пошуку помилок у програмі.

Перший набір пакетів більш призначено для простого-ручного встановлення оскільки він містить лише дванадцять пакетів. Другий набір призначено для розташування у репозиторії дистрибутиву Linux і подальшого встановлення їх за допомогою пакетного менеджеру, який здійснює автоматичне розв'язання залежностей, а також дозволяє встановити лише необхідні компоненти OpenSCADA тим самим оптимізуючи робоче оточення.

Ручне встановлення DEB-пакетів першого набору можна здійснити командою, попередньо змінивши робочу директорію на директорію з пакетами:

    dpkg -i openscada-libdb.main_0.9.0-1_all.deb openscada-libdb.vca_0.9.0-1_all.deb openscada-model.aglks_0.9.0-1_all openscada_0.9.0-1_i386.deb

Ручне встановлення RPM-пакетів першого набору можна здійснити командою, попередньо змінивши робочу директорію на директорію з пакетами:

    rpm -i openscada-LibDB.Main-0.9.0-alt1.noarch.rpm openscada-LibDB.VCA-0.9.0-alt1.noarch.rpm openscada-Model.AGLKS-0.9.0-alt1.i586.rpm openscada-0.9.0-alt1.i586.rpm

У процесі виконання встановлення можуть виникнути помилки, пов'язані з незадоволеними залежностями. При ручному встановлені із пакетів, задовольняти їх треба буде вручну подібно до встановлення пакетів OpenSCADA або через менеджер пакетів дистрибутиву Linux. Випадки наявності проблем залежностей можуть бути навіть при встановлені через пакетний менеджер, якщо використовується репозиторій OpenSCADA, який не відповідає дистрибутиву Linux або його версії, або-ж не підключено основні репозиторії пакетів самого дистрибутиву. У пакетному менеджері APT можна використовувати команду для автоматичного розв'язання проблем зовнішніх залежностей, які виникли при ручному встановлені OpenSCADA:

    apt-get install -f

### 2.2 Встановлення-складання з вихідних текстів

Якщо відсутня можливость отримати готові пакети OpenSCADA для обраного дистрибутиву, то залишається лише варіант складання OpenSCADA з вихідних текстів. Цей процес детально описано у документі "Як скласти з вихідних текстів".

## 3 Первинна конфігурація та запуск

У наших основних завданнях з OpenSCADA у межах цього документу, треба встановити пакет з БД моделі "АГЛКС" — openscada-model-aglks, про що можна детально дізнатися з попереднього розділу. Звісно, якщо ви використовуєте Живий Диск, то у вас все потрібне вже є.

Не розглядайте тут встановлення-складання OpenSCADA з вихідних текстів, оскільки вимоги кваліфікаційного рівня користувача для цього завдання значно вище за рівень документа загалом та тут неминуче будуть невідповідності з посібником через дуже ймовірні відмінності у початковій конфігурації.

Встановлена БД моделі "АГЛКС" не потребує попереднього налаштування. Якщо-ж потрібно здійснити особливе налаштування, яке відрізняється від базового, то скористайтеся Посібником по програмі. У процесі чого вам може знадобитися інформація про типові облікові записи і паролі OpenSCADA (не мають стосунку до облікових записів ОС), хоча моделі та новостворені конфігурації запускаються від привілейованого користувача і ви можете легко змінити будь який з них:

- Суперкористувач (root), пароль — "openscada".
- Користувач (user), пароль — "user".
- Приклад окремого користувача (roman), пароль — "roman".

Демонстрація OpenSCADA на основі БД моделі "АГЛКС", це не те саме, що зазвичай надають комерційні виробники ПЗ з метою продемонструвати можливості, але виключити або ускладнити нормальне використання шляхом обмеження функцій. Демонстрація OpenSCADA, це повнофункційна програма, яка надає приклади реалізації та налаштування різноманітних компонентів. На основі БД моделі "АГЛКС" та інших моделей OpenSCADA можна створювати власні проєкти, використовуючи надані напрацювання. Але після набуття певного досвіду краще нові проєкти створювати із чистої конфігурації зі стандартними бібліотеками OpenSCADA, про що далі буде зазначено; і це щоб не захаращувати проєкт непотрібними там компонентами чим збільшуючи вимоги до ресурсів і непередбачуваність під час довготермінової експлуатації!

Динамічна модель компресорної станції на 6 газових компресорів, яка лежить у основі демонстраційної БД, потребує помітних ресурсів, а саме — процесору з частотою більше 1 ГГц (x86) та пам'яті до 200 МБ. Зазначені обчислювальні ресурси необхідні безпосередньо для динамічної моделі та не є загальним показником ресурсоємності програми у кінцевих завданнях! Вимоги до пам'яті, натомість, є типовим показником для графічної станції АРМ близької складності.

Загальний процес конфігурації SCADA-системи для виконання функцій верхнього рівня — АРМ оператора, можна умовно поділити на два етапи:

- Конфігурація джерела даних, створення бази даних (БД) параметрів цих джерел, створення обчислювальних-логічних параметрів та налаштування історії.
- Формування візуального представлення даних ТП шляхом створення інтерфейсу оператору у вигляді: мнемосхем, груп графіків, груп контурів, документів та інше.

Відтак, нашою кінцевою метою та метою цього документу є побудова повноцінної конфігурації локальної SCADA-станції, поєднану із сервером та з емуляцією джерела даних на основі цієї демонстраційної БД (Рис.3).

Рис. 3. Просте поєднане підключення станції та SCADA-серверу з джерелом даних у демонстраційній БД.

Заразом ми ознайомимося з такими важливими ролями OpenSCADA, як: сервер збору, архівації, візуалізації; середовище виконання ПЛК і віддалена розробка. Та перед цим ми оглянемо OpenSCADA та її можливості загалом.

### 3.1 Загальний огляд

Запустити локальне виконання OpenSCADA з БД моделі "АГЛКС" можна у меню оточення робочої стільниці в розділі "Графіка", пункт "Модель "АГЛКС" на відкритій SCADA системі" з характерною іконкою (Рис.3.1.1).

Рис. 3.1.1. Пункт меню оточення робочої стільниці для локального запуску демонстрації OpenSCADA.

Локальний запуск також можна здійснити з консолі, командою:

    openscada_AGLKS

Після запуску ми отримаємо вікно графічного конфігуратору OpenSCADA — QTCfg (Рис.3.1.2) з відкритою кореневою сторінкою. Демонстраційна БД спеціально налаштована так, щоб першим при запуску з'являлося вікно конфігуратору надалі можна відкрити вікно розробки графічних інтерфейсів користувача, а також запустити проєкт користувацького інтерфейсу на виконання.

Рис. 3.1.2. Програмний конфігуратор OpenSCADA — QTCfg, коренева сторінка.

Програмний конфігуратор OpenSCADA є основним та достатнім засобом для конфігурації будь якого компоненту OpenSCADA. Як і багато компонентів OpenSCADA, конфігуратор реалізовано у вигляді модуля. Крім конфігуратору QTCfg доступні й інші конфігуратори, що виконують ті-ж функції, але реалізовані на основі інших технологій. Наприклад, такими є Web-конфігуратори: WebCfgD та WebCfg.

Всі дії надалі будемо розглядати лише у конфігураторі QTCfg, хоча їх можна буде виконати і в інших конфігураторах.

Структуру інтерфейсу вікна конфігуратору можна детально розглянути за посиланням. Для нас зараз важливішим є розглянути всі доступні графічні інтерфейси OpenSCADA, тому натиснемо передостанню нагорі іконку на панелі інструментів, яка відкриє вікно розробки користувацького інтерфейсу (Рис.3.1.3).

Рис. 3.1.3. Вікно розробки користувацького інтерфейсу.

Далі можемо запустити проєкт "АГЛКС" на виконання, для чого обираємо його у переліку проєктів та запускаємо, натискаючи першу ліворуч іконку на панелі інструментів, або у контекстному меню. В результаті чого отримаємо вікно кінцевого інтерфейсу користувача — оператору (Рис.3.1.4).

Рис. 3.1.4. Вікно кінцевого інтерфейсу користувача проєкту "AGLKS".

Побудова та виконання користувацьких інтерфейсів здійснюється модулем Vision підсистеми "Користувацькі інтерфейси". Крім цього модуля ще доступні інші модулі візуалізації, наприклад, OpenSCADA надає модуль WebVision, який дозволяє виконувати проєкти розроблені у інтерфейсі модуля Vision, але за посередництвом Web-технологій та стандартного Web-браузеру.

Для доступу до Web-інтерфейсів необхідних хостів на рисунку 3 ви можете послідовно спробувати адреси: http://localhost:10002, http://localhost:10003, http://localhost:10004.

Всі подальші дії надалі розглядатимемо лише у інтерфейсі модуля Vision.

Таким чином ми запустили демонстрацію OpenSCADA та ознайомилися із основним набором інструментів. Надалі будемо їх використовувати у конфігурації OpenSCADA для виконання функцій верхнього рівня — АРМ оператора та інших завдань.

Закриємо програму через відповідний пункт меню "Файл", що треба виконати обов'язково інакше її подальший фоновий запуск не зможе відкрити портів вже зайнятих цією програмою.

### 3.2 Фонове та віддалене виконання — сервер, середовище виконання ПЛК та віддалена розробка

Всі консольні операції можете виконати у консольному терміналі, наприклад, програма "konsole" у оточенні Живого Диску з діалогу запуску за Alt+F2. Та тека "{HOME}" тут, це "/home/user".

Організація проєкту OpenSCADA у окремій теці робить простим запуск готових проєктів у просторі сервісу — виконання у фоні, а також подальше оновлення та супровід цього проєкту без прямого віддаленого контролю. Фактично, ви можете розробляти проєкт локально, тримаючи його теку у користувацькій робочій теці (типово "{HOME}/.openscada"), а для запуску у просторі сервісу лише копіювати або пакувати, передавати на віддалений робочий пристрій та розпаковувати у системну робочу теку (типово "/usr/share/openscada").

Сервісне-фонове виконання програм в Linux обслуговується відповідним чином сформованим сценарієм-скриптом, який розташовується в теці "/etc/ini.d" та має бути окремим на кожен проєкт OpenSCADA що запускається у сервісному просторі. Для спрощення та виключення необхідності займатися створенням власних сценаріїв OpenSCADA надає відповідні для стандартних випадків-профілів та які зазвичай постачаються пакетами openscada-server і openscada-plc (openscada-lts-server і openscada-lts-plc для LTS).

Відтак, для запуску у просторі сервісу скажімо бібліотечного проєкту "АГЛКС" ми:

- встановлюємо пакет openscada-model-aglks (openscada-lts-model-aglks для LTS)та openscada-server (openscada-lts-server для LTS), якщо їх ще не встановлено та це не оточення Живого Диску або Linux Автоматизації від встановлення цього Диску;
- запускаємо проєкт "АГЛКС" для отримання його теки у користувацькій робочій теці;
- копіюємо теку проєкту "АГЛКС" до системної робочої теки із перейменуванням у "server", попередньо зупинивши фонове виконання проєкту "server" та видаливши його теку проєкту; наприклад, наступним чином із консолі:

    # Підключитися від суперкористувача
    su -
    # ... для живого диску та деяких інших оточень Linux
    sudo bash

    # Зупинити виконання попередньої конфігурації серверу та видалити його теку
    systemctl stop openscada-server.service     # для SystemD
    service openscada-server stop               # для SysVinit
    rm -R /usr/share/openscada/server
    # ... для LTS
    systemctl stop openscada-lts-server.service # для SystemD
    service openscada-lts-server stop           # для SysVinit
    rm -R /usr/share/openscada/server

    # Скопіювати проєкт "АГЛКС" із домашньої теки користувача "{HOME}" з перейменуванням у "server"
    cp -R {HOME}/.openscada/AGLKS /usr/share/openscada/server

    # Запустити сервер вже з проєктом "АГЛКС"
    systemctl start openscada-server.service     # для SystemD
    service openscada-server start               # для SysVinit
    # ... для LTS
    systemctl start openscada-lts-server.service # для SystemD
    service openscada-lts-server start           # для SysVinit

Зауважте, що локально ви можете не копіювати теку проєкту цілком, а лише встановити на неї символічне посилання, але ви отримаєте ризик подвійного виконання проєкту на спільну теку та дані, що призводить до аварійного завершення одного виконання або й обох!

Відмінність виконання проєкту у середовищі сервісу-фону від користувацького середовища робочої стільниці власне одна, звісно крім відсутності локального графічного інтерфейсу, це — відсутність у фоні визначення локалі, тобто мова інтерфейсу там буде Англійська. Та що можна просто виправити зміною або доданням конфігураційного параметру <prm id="Lang">uk_UA.UTF-8</prm> до секції-тегу "station" файлу oscada.xml фонового проєкту.

Таким чином ви отримаєте демонстраційну БД (проєкт "АГЛКС"), яка працює у фоні, що однак ми не побачимо поки не спробуємо підключитись до цієї конфігурації, щодо чого нижче. Тепер, при кожному запуску комп'ютеру, вона буде таким чином запускатися і працюватиме у фоні. Загалом, саме так здійснюється запуск та виконання серверних конфігурацій, оточень ПЛК та одноплатних ПК на кшталт RaspberyPi.

Якщо у вас все-ж виникли проблеми із консоллю-терміналом або ви свідомо бажаєте фонового виконання у графічному оточені — так званого "запуску або закриття у системний лоток", тоді на цій стадії ви можете знову запустити демонстраційну конфігурацію, як описано на початку цього розділу (Рис.3.1.1), встановити параметр Згортати або запускати у системний лоток модуля UI.QTStarter та закрити вікно конфігуратору щоб проєкт моделі АГЛКС згорнувся до системного лотку.

### 3.3 Створення власного проєкту

У вікні менеджеру проєктів OpenSCADA (Рис.3.3) створимо наш власний проєкт, який можна викликати з меню оточення робочої стільниці у розділі "Графіка" загальним пунктом "Відкрита SCADA-система" з характерною іконкою (Рис.3.1.1) або командою з консолі-терміналу:

    openscada

Рис. 3.3. Вікно менеджеру проєктів OpenSCADA.

У цьому вікні ми також можемо перевірити фонове виконання серверної та демонстраційної конфігурацій.

Відтак, натиснемо відповідну кнопку Створити-оновити проєкт та введемо назву нового проєкту — Start.

Якщо ви бажаєте перевірити себе щодо певних проблем або з інших причин, то можете завантажити резервну копію вже готового OpenSCADA проєкту "Start" і відновити його із контекстного меню того самого вікна на рисунку 3.3. Ви маєте розташувати файл резервної копії у каталозі користувацьких проєктів OpenSCADA — "~/.openscada/", на кшталт із консолі-терміналу:

    wget http://ftp.oscada.org/OpenSCADA/Projects/Start_QuickStart_uk.backup -P ~/.openscada/

#### 3.3.1 Підключення та використання віддалених і фонових конфігурацій

Тепер можемо спробувати віддалено підключитися до фонового демонстраційного проєкту, подивитися на його конфігурацію та запустити демонстраційний проєкт на локальне виконання із серверу візуалізації.

На сторінці "Транспорти" (Рис.3.3.1.1) у режимі Користувацький та Системний створимо підключення до нашої фонової демонстрації "AGLKS" як станції OpenSCADA. Вкажемо там транспорт Сокети, адресу localhost, користувача root та пароль openscada. Після оновлення дерева навігації конфігуратора, командою у контекстному меню, ми маємо отримати новий кореневий пункт цього підключення та зможемо контролювати віддалену-фонову станцію з цього конфігуратору.

Якщо пункт віддаленої станції з'явився, але відображає відсутність підключення, то ви припустилися помилки у конфігурації вище або віддалена станція недоступна, що в нашому випадку може означати лише те, що вона не працює в фоні, а відтак поверніться до відповідного розділу та повторіть операції у ньому.

Якщо все працює, то збережемо цю конфігурацію натиснувши другу іконку ліворуч на панелі інструментів нагорі, оскільки ми ще скористаємося нею для прямого шлюзування параметрів збору даних із демонстраційного проєкту, як ПЛК.

Рис. 3.3.1.1. Сторінка "Транспорти" зовнішніх хостів OpenSCADA та огляд дерева OpenSCADA віддаленої-фонової станції.

На сторінці конфігурації візуалізатору UI.Vision (Рис.3.3.1.2) оберемо:

- станцію рушія СВУ — "AGLKS";
- користувача запуску — залишимо порожнім;
- пароль користувача цієї віддаленої станції — залишимо порожнім;
- проєкт(и) автоматичного виконання — також залишимо порожнім, оскільки ми бажаємо побачити можливість віддаленої розробки.

Рис. 3.3.1.2. Сторінка конфігурації візуалізатору UI.Vision.

Наступний запуск модуля UI.Vision, другою іконкою з кінця на панелі інструментів нагорі, має призвести середовище візуальної розробки до встановлення підключення з сервером візуалізації фонового демонстраційного проєкту. Де ви можете здійснювати віддалену розробку (Рис.3.3.1.3) та запускати проєкти з цього серверу візуалізації на виконання (Рис.3.3.1.4).

Рис. 3.3.1.3. Екран віддаленої розробки UI.Vision для серверу візуалізації "АГЛКС".
Рис. 3.3.1.4. Екран віддаленого виконання UI.Vision для серверу візуалізації "АГЛКС".

Цю конфігурацію віддаленого підключення до серверу візуалізації зберігати не потрібно та поле конфігурації "Станція рушія СВУ" (Рис.3.3.1.3) необхідно повернути у "<Локально>", а користувача станції встановити у "root" — після чого зберегти.

Можливість віддаленого підключення та розробки інколи є єдиним способом здійснити розробку або коригування не тільки для серверних конфігурацій виключно з WEB-інтерфейсом, але і для конфігурацій з локальною візуалізацією, коли саме оточення локальної візуалізації непридатне або обмежене для виконання середовища розробки модуля UI.Vision, наприклад, таких як смартфони, планшети та інші мобільні пристрої з малим екраном, виключно сенсорним вводом (Android) або обмеженнями на кшталт неможливості відкриття системної віртуальної клавіатури (Nokia N9). Та цю віддалену розробку можна переважно здійснювати у процесі виконання проєкту — гаряча розробка, що особливо актуально для Web-інтерфейсів і локальних інтерфейсів які запускаються лише у вікні виконання. Щодо віддаленої конфігурації, то на один локальний конфігуратор, як центр адміністрування, можна зібрати всі віддалені станції у мережі включно зі станціями у прихованих мережах станцій першого рівня, "підняти" які можна аргументом "Рівень підняття" (Рис.3.3.1.1).

#### 3.3.2 Підключення стандартних бібліотек OpenSCADA

Ново-створений проєкт OpenSCADA не містить жодної специфічної конфігурації, фактично є порожнім та передбачає створення користувачем нової конфігурації у локальному файлі БД SQLite "St.db", що розташовується у власній теці проєкту з такою-ж назвою. Створювати складний проєкт SCADA-системи простіше з використанням бібліотек функцій API об'єктної моделі OpenSCADA та бібліотек графічних елементів, а також інших бібліотек OpenSCADA. Для використання бібліотек OpenSCADA необхідно файли БД, де зберігаються бібліотеки: підключити — додати у об'єкті модуля БД "SQLite" (Рис.3.3.2.1), встановити-обрати адресу та вказати кодування БД в "UTF-8" (Рис.3.3.2.2). Після чого, або у випадку наявності готових записів БД бібліотек, необхідні з них потрібно активувати, про що читайте далі.

Рис. 3.3.2.1. Додання об'єкту БД "SQLite".
Рис. 3.3.2.2. Об'єкт БД "SQLite" бібліотеки OpenSCADA.

Дистрибутиви OpenSCADA постачаються з низкою бібліотек у вигляді файлів БД "SQLite" (таблиця 3.3.2), які, при запуску-створені користувацького проєкту, розташовуються у теці "LibsDB/". Згідно цього переліку у об'єкті модуля БД "SQLite" додаємо або використовуємо готові записи потрібних бібліотек, встановлюємо їм ознаку "Вмикати" та зберігаємо. Далі, для завантаження вмісту бібліотек, можна включити БД та натиснути кнопку "Завантажити програму з цієї БД", однак низка нових об'єктів при завантажені не вмикаються, тому простіше завершити новий проєкт та запустити його знову.

Таблиця 3.3.2. Бібліотеки OpenSCADA у складі дистрибутиву.

Ідентифікатор | Ім'я | Адреса | Мова/кодування | Опис
--- | --- | --- | --- | ---
OscadaLibs | Бібліотеки OpenSCADA | LibsDB/OscadaLibs.db | EN,UK,RU/UTF-8 | Бібліотеки джерел даних, служб та обробки.
vcaBase | СВУ: Головні бібліотеки | LibsDB/vcaBase.db | EN,UK,RU/UTF-8 | Бібліотеки графічних елементів OpenSCADA модуля UI.VCAEngine.
vcaTest | СВУ: Тести | LibsDB/vcaTest.db | EN,UK,RU/UTF-8 | Бібліотека тестів графічних елементів.
vcaElectroEls | СВУ: Бібліотека електро-елементів мнемосхем користувацького інтерфейсу | LibsDB/vcaElectroEls.db | EN,UK,RU/UTF-8 | Надає бібліотеку мнемонічних елементів інтерфейсу користувача електричних підстанцій та станцій генерації електрики.

В результаті додання бібліотек OpenSCADA ви отримаєте оточення, готове для додання джерел даних, визначення їх історії та формування інтерфейсу власного проєкту SCADA-системи.

## 4 Робота з джерелами даних

Основною функцією будь якої SCADA-системи є робота з джерелами даних реального часу, а саме — опитування програмованих логічних контролерів (ПЛК) та простих модулів ПУО. Детальніше ознайомитися з цим питанням можна у документі "Збір даних у OpenSCADA".

Підтримка того або іншого джерела даних залежить від протоколу або API, за яким джерело надає свої дані, та наявності для протоколу-API модуля підсистеми "Збір даних" у OpenSCADA або його реалізації DAQ-Шаблоном на Логічному Рівні. Загальний перелік модулів підсистеми "Збір даних" та документацію по ним можна отримати за посиланням та загальний перелік DAQ-Шаблонів можна отримати за посиланням.

Дані, отримані з джерел, надалі обробляються, архівуються та використовуються для візуального представлення оператору ТП.

### 4.1 Збір даних апарату ТП

У якості прикладу розглянемо та створимо збір даних для апарату повітряного охолоджувача. Фонова демонстраційна БД, як ПЛК та джерело даних, містить модель реального часу ТП компресорної станції з шести компресорів. Дані для двох апаратів повітряних холодильників AT101_1 і AT101_2 компресорної станції KM101 доступні за протоколом ModBus/TCP на порту 10502 (стандартно це порт 502 за наявності доступу його відкриття).

Створимо об'єкт контролеру для збору за протоколом ModBus/TCP та отримаємо ці дані. Тим самим фактично реалізуємо завдання збору реальних даних оскільки наша конфігурація буде відрізнятися від роботи зі справжнім зовнішнім пристроєм лише його адресою та адресами регістрів ModBus, а також це може бути інший фізичний інтерфейс взаємодії — варіант протоколу ModBus. Це підключення також є яскравим прикладом можливості реалізації середовища виконання джерела даних (ПЛК) на основі OpenSCADA.

Для збору даних за протоколом ModBus у OpenSCADA наявний модуль "ModBus" підсистеми "Збір даних". Для додання нового об'єкту контролера у конфігураторі відкриємо сторінку модуля "ModBus" "Start"->"Збір даних"->"Модуль"->"ModBus" та у контекстному меню пунктe "ModBus" натиснемо "Додати" (риc.4.1.1).

Рис. 4.1.1. Додання об'єкту контролера у модулі "ModBus" підсистеми "Збір даних".

У результаті з'явиться вікно діалогу (Рис.4.1.2) з пропозицією ввести ідентифікатор та назву нового об'єкту контролера. Ідентифікатори об'єктів OpenSCADA обмежено розміром у 20 символів та їх рекомендується вводити символами англійського алфавіту і цифрами. Крім того, починати ідентифікатор бажано з літери, що спростить його використання у внутрішніх процедурах. Назви об'єктів OpenSCADA обмежено розміром у 50 символів та які можуть бути будь якими. Назва зазвичай використовуються для відображення і якщо вона порожня, то буде використано ідентифікатор. Надалі назву ми можемо змінити у конфігурації об'єкта, але ідентифікатор неможливо змінити прямо; хоча об'єкт можна вирізати (Ctrl+X) та потім вставити (Ctrl+V) тим самим перейменувавши його. Згідно до зауважень раніше, введемо ідентифікатор CM101, назву "KM 101" — "CM101 (KM 101)".

Рис. 4.1.2. Діалог визначення ідентифікатору та назви нового об'єкту.

Після підтвердження у нас з'явиться об'єкт нового контролера. Оберемо його у конфігураторі та ознайомимося з налаштуваннями (Рис.4.1.3).

Рис. 4.1.3. Головна вкладка налаштування об'єкту контролера модуля ModBus.

Налаштування об'єкту контролеру як правило специфічні для різних типів джерел даних та протоколів. Детально ознайомитися з налаштуваннями об'єкту контролера модуля ModBus можна за посиланням. Ми ж розглянемо загальні та ключеві налаштування цього модуля.

Перед конфігурацією зв'язку зі своїм контролером треба з документації на цей контролер з'ясувати налаштування його мережевих інтерфейсів та протоколів, а також, у випадку використання ModBus, отримати таблицю призначення зовнішніх та внутрішніх сигналів контролеру на номери регістрів ModBus — мапу регістрів.

За допомогою сторінки об'єкту контролеру у розділі "Стан" можна в першу чергу оцінити поточний стан об'єкту контролера та реальний стан зв'язку з фізичним контролером, а також оперативно їх міняти. Так, поле "Статус" містить код помилки та текстовий опис поточного стану зв'язку з контролером. У нашому випадку об'єкт контролеру вимкнено. Ми можемо його увімкнути та запустити, встановивши ознаки навпроти відповідних полів. Ввімкнений об'єкт контролеру ініціює параметри, запущений же ще запускає завдання збору (окремий потік на об'єкт контролеру) та надає можливість передавати дані у контролер через атрибути параметрів. Поле "Сховище" вказує у якому сховку зберігається конфігурація даного об'єкту. Нас влаштує зберігання у Загальному Сховку, тобто залишимо по замовченню.

У розділі "Конфігурація" безпосередньо міститься конфігурація об'єкту контролера. Встановимо наступні з них, залишивши все інше без змін:

- "Вмикати" та "Запускати" вказують у який стан переводити об'єкт контролеру при запуску програми — встановимо обидва поля.
- "Планування збору" містить конфігурацію планувальника для запуску завдання збору даних. Отримати опис формату конфігурації даного поля можна зі спливаючої підказки. Одне число вказує на періодичність запуску, в секундах — вкажемо одну секунду.
- "ModBus протокол" вказує на варіант протоколу ModBus. Можливі варіанти протоколу "TCP", "RTU" та "ASCII". Наразі нас цікавить варіант TCP, тому залишимо як є. Варіанти протоколів "RTU" та "ASCII" треба встановлювати у випадку зв'язку з контролером за посередництвом послідовних інтерфейсів, часто це "RS-485".
- "Адреса транспорту" вказує на вихідний транспорт підсистеми "Транспорти", який використовується для з'єднання з контролером. У випадку з варіантом "TCP" нам потрібен транспорт у модулі Sockets, а у випадку варіантів "RTU", "ASCII" та послідовного інтерфейсу нам потрібен транспорт у модулі Serial. На створені вихідного транспорту у "Sockets" та "Serial" детальніше зупинимося нижче.
- "Вузол призначення" вказує на вузол джерела даних або контролера у мережі ModBus. У нашому випадку це має бути 1.
- "Об'єднувати фрагменти даних" включає об'єднання несуміжних фрагментів регістрів у один блок запиту до визначеної максимальної кількості байтів замість генерації окремих запитів, чим дозволяє зменшити загальний час збору — встановимо цю опцію.

Збережемо наші зміни у сховищі, натиснувши другу ліворуч іконку на панелі інструментів.

Тепер, таким чином як і об'єкт контролеру створимо вихідний транспорт у модулі "Sockets" ("Start"->"Транспорти"->"Сокети") за посередництвом контекстного меню (Рис.4.1.4) та назвемо транспорт так, як і об'єкт контролеру "CM101 (KM 101)". Зверніть увагу, що у полі "Тип елементу" діалогу вводу ідентифікатору та назви (Рис.4.1.2) треба обрати "Вихідний транспорт"!

Рис. 4.1.4. Додавання вихідного транспорту у модулі "Sockets" підсистеми "Транспорти".

Сторінку конфігурації отриманого вихідного транспорту наведено на рисунку 4.1.5. Ця сторінка також містить розділ стану та оперативного управління. У полі "Статус" міститься текстовий опис поточного стану транспорту. Ми можемо підключити його встановивши ознаку навпроти відповідного поля. Поле "Сховище" вказує сховок конфігурації об'єкту — нас влаштує "Загальне Сховище".

Рис. 4.1.5. Сторінка конфігурації вихідного транспорту модуля "Sockets" підсистеми "Транспорти".

У розділі "Конфігурація" безпосередньо міститься конфігурація об'єкту транспорту, встановимо наступні:

- "Адреса" вказує на: тип (необов'язково), адресу та режим підключення з віддаленою станцією. Ознайомитися з форматом запису можна із спливаючої підказки — встановимо це поле у значення "localhost:10502".

Транспорти інших типів створюються подібно до розглянутому для "Sockets" методу, а конфігурація їх відрізняється зазвичай лише форматом запису адреси та таймаутів у вкладці "Додаткове". У випадку із транспортом модуля "Serial" у адресі вказується: шлях до послідовного пристрою, швидкість та формат. Для конвертерів USB->Serial,Modem цю адресу можна дізнатися з операційної системи, наприклад, консольною командою dmesg одразу після його підключення.

Збережемо об'єкт транспорту та повернемося до конфігураційного поля "Адреса транспорту" об'єкта контролера, де оберемо адресу "Sockets.CM101". Наразі OpenSCADA підтримує, для об'єктів контролерів більшості типів джерел даних, визначення усіх параметрів безпосередньо у полі "Адреса транспорту" та без необхідності окремого створення об'єктів транспортів. Тобто визначення у полі "Sockets.CM101:localhost:10502" автоматично створить CM101 у вихідних транспортах Sockets із зазначеною адресою.

На цьому налаштування об'єкту контролера закінчено, включимо його встановивши ознаку "Ввімкнено". Наступним етапом є конфігурація та обрання тих даних, які необхідно опитувати з контролера. Це налаштування здійснюється шляхом створення параметру контролера. Параметр дозволяє описати перелік даних, що отримуються у контролера та передати їх у оточення OpenSCADA — модель даних.

Для додання нового параметру відкриємо сторінку нашого об'єкту контролера та у контекстному меню пункту "KM 101" натиснемо "Додати" — назвемо "AT101_1 (AT 101_1)".

Сторінку конфігурації отриманого параметра приведено на рисунку 4.1.6. Ця сторінка містить розділ стану та оперативного управління. У полі "Тип" міститься тип параметру, у нашому випадку це "Стандартний". Параметр ми вмикаємо встановивши ознаку навпроти відповідного поля. Ввімкнений параметр приймає участь у процесі обміну з контролером.

Рис. 4.1.6. Сторінка конфігурації параметру контролера "ModBUS".

У розділі "Конфігурація" безпосередньо міститься конфігурація параметру. Встановимо наступні з них залишивши всі інші без змін:

- "Вмикати" вказує на необхідність переведення об'єкту в режим "Ввімкнений" при запуску програми — встановимо це поле.
- "Перелік атрибутів" містить конфігурацію атрибутів параметру відносно до регістрів та бітів ModBus, ознайомитися з форматом запису можна зі спливаючої підказки — встановимо вміст цього текстового поля у:

    R:100:r:Ti:T вхід
    R:101:r:To:T вихід
    R:102:rw:Cw:Продуктивність

Таким-же чином створимо, або скопіюємо з AT101_1, другий параметр "AT101_2 (AT 101_2)". Перелік атрибутів для нього встановимо у:

    R:103:r:Ti:T вхід
    R:104:r:To:T вихід
    R:105:rw:Cw:Продуктивність

Збережемо обидва параметри. Тепер ми можемо запустити наш об'єкт контролера для здійснення збору, для чого повернемося на його сторінку та у розділі "Стан" встановимо ознаку "Виконується". Якщо ми нічого не пропустили, то обмін успішно запуститься та у полі "Статус" ми отримаємо подібне представленому на рисунку 4.1.7.

Рис. 4.1.7. Сторінка об'єкту контролера при успішному обміні з фізичним контролером.

У випадку вдалого обміну з фізичним контролером ми також отримаємо описані дані контролеру у інфраструктурі OpenSCADA — моделі даних. Побачити ці дані можна у вкладці "Атрибути" наших параметрів AT101_1 (Рис.4.1.8) та AT101_2. Оскільки збір здійснюється регулярно та з періодичністю у секунду, то ми можемо спостерігати їх зміну натискаючи кнопку "Поновити поточну сторінку" на панелі інструментів.

Рис. 4.1.8. Сторінка опису атрибутів параметру AT101_1.

На цьому конфігурація збору даних вважається завершеною.

### 4.2 Обробка отриманих даних ТП

Часто зустрічається ситуація, коли вихідні дані, отримані із джерела даних, є "сирими", тобто неготовими або незручними для візуального представлення, тому потрібно здійснити цю підготовку. У нашому прикладі ми отримали дані, які надходять у коді від шкали всередині контролеру і наше завдання — здійснити обрахунок реальних значень з отриманих даних. Обробку даних у OpenSCADA можна здійснювати як безпосередньо при візуалізації, так і у підсистемі Збір Даних. Однак змішування процесу візуалізації і обробки вхідних даних вносить плутанину у конфігурацію, не дозволяє вести історію реальних даних, робить отримані образи візуалізації мало придатними для повторного використання та збільшує навантаження на потік візуалізації, чим зменшує її загальну реакцію. Відповідно, здійснимо підготовку даних у підсистемі Збір Даних.

Обчислення у підсистемі Збір Даних для отримання реальних даних переважно виконуються за посередництвом модуля логічного рівня LogicLev та шаблонів параметрів підсистеми Збір Даних. Модуль ModBus є тим випадком, коли таке обчислення можна виконати безпосередньо у ньому, що ми нижче побачимо. Детальніше ознайомитися з концепцією Логічного Рівня можна за посиланням.

Для здійснення обчислень, у модулі Логічного Рівня попередньо потрібно створити бібліотеку шаблонів нашого проєкту та шаблон параметру підсистеми Збір Даних у ній. Для створення бібліотеки шаблонів відкриємо сторінку підсистеми Збір Даних та, за посередництвом контекстного меню, створимо об'єкт бібліотеки шаблонів start (Запуск). Сторінка конфігурації отриманого об'єкту бібліотеки шаблону (Рис.4.2.1) містить розділ стану та оперативного управління "Стан" і розділ налаштувань "Конфігурація" у якому містяться лише типові поля конфігурації та які залишимо незмінними. Загалом ми маємо:

- Розділ "Стан":
  - позначити бібліотеку доступною — встановлюємо ознаку навпроти відповідного поля;
  - вказати сховище — залишимо "Загальне Сховище" проєкту;
  - можемо проконтролювати дату останньої модифікації шаблону.
- Зберегти об'єкт.

Рис. 4.2.1. Сторінка конфігурації об'єкта бібліотеки шаблонів.

Для створення шаблону, відкриємо сторінку ново-створеної бібліотеки шаблонів "Start"->"Збір Даних"->"Бібліотека шаблонів"->"Запуск" та, за посередництвом контекстного меню, створимо об'єкт шаблону airCooler (Повітряний холодильник). Сторінка конфігурації отриманого об'єкту шаблона (Рис.4.2.2) містить розділ стану та оперативного управління "Стан" і розділ налаштувань "Конфігурація", у якому містяться лише типові поля конфігурації та які залишимо незмінними. Загалом ми маємо:

- Розділ "Стан":
  - позначити шаблон доступним — встановити ознаку навпроти відповідного поля, доступні шаблони можуть підключатися до параметрів збору даних і параметри будуть здійснювати обчислення за цим шаблоном;
  - можемо проконтролювати кількість об'єктів, які використовують даний шаблон для обчислення;
  - можемо проконтролювати дату останньої модифікації.
- Зберегти об'єкт.

Рис. 4.2.2. Сторінка конфігурації об'єкту шаблона.

Основна конфігурація та формування шаблону параметра збору даних здійснюється у вкладці "ВВ" (Рис.4.2.3) шаблону. Детальний опис процесу формування шаблону можна отримати за посиланням.

У шаблоні створимо два ВВ для входів ("TiCod", "ToCod"), два для виходів результату ("Ti","To") і один прозорий ("Cw"). Для ВВ "TiCod", "ToCod" і "Cw" встановимо ознаку "Конфігурація" у Зв'язок, що дозволить підв'язувати до них "сирі" джерела. Встановимо ознаку "Атрибут" для ВВ "Ti" і "To" у Тільки читання, для "Cw" у Повний доступ — для формування трьох атрибутів у параметрі збору даних: два лише на читання і один на повний доступ.

Встановимо мову програми у JavaLikeCalc.JavaScript і програму у:

    Ti = 150*TiCod/65536;
    To = 100*ToCod/65536;

Рис. 4.2.3. Вкладка "ВВ" сторінки конфігурації об'єкту шаблону.

Збережемо отриманий шаблон та встановимо ознаку доступності (Рис.4.2.2).

Тепер створимо об'єкт контролера та параметри у модулі LogicLev підсистеми Збір Даних. Об'єкт контролера LogicLev та його параметри створюються аналогічно раніше створеним у модулі ModBus на сторінці "Start"->"Збір Даних"->"Модуль"->"Логічний рівень". Назвемо їх ідентично до об'єктів модуля ModBus.

Об'єкт контролера модуля LogicLev (Рис.4.2.4) не має специфічних налаштувань та встановлені по замовченню можна не чіпати, окрім поля "Планування обчислення", яке встановимо у 1 (одну) секунду. Перед доданням параметрів треба увімкнути об'єкт контролера — встановимо ознаку "Ввімкнено".

Рис. 4.2.4. Головна вкладка налаштування об'єкту контролера модуля LogicLev.

Параметр об'єкту контролера модуля LogicLev (Рис.4.2.5) із специфічних налаштувань має "Тип", де необхідно встановити "Логічний", і обрати адресу створеного нами шаблону у полі "Шаблон параметру".

Рис. 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" додасть параметри контролеру і так далі до кінцевого елементу згідно ієрархії об'єктів. Для можливості повернення на рівні вище, перелік вибору містить елементи усіх вищестоящих рівнів від поточного значення адреси.

Рис. 4.2.6. Вкладка "Конфігурація шаблону" сторінки параметра контролера LogicLev.
Рис. 4.2.7. Вкладка "Конфігурація шаблону" сторінки параметра контролера LogicLev із розгорнутими зв'язками.

Збережемо створені об'єкти контролеру та параметрів, після чого запустимо об'єкт контролера на виконання, встановивши ознаку "Виконується" у розділі "Стан". Якщо ми нічого не пропустили, то обчислення успішно запуститься та у полі "Статус" отримуємо схоже на рисунку 4.2.8.

Рис. 4.2.8. Сторінка об'єкту контролера при успішному його обчислені у модулі LogicLev.

У випадку успішної обробки коду шаблона в параметрах ми отримаємо оброблені дані у інфраструктурі (моделі даних) OpenSCADA. Побачити ці дані можна у вкладці "Атрибути" наших параметрів AT101_1 (Рис.4.2.9) і AT101_2.

Рис. 4.2.9. Сторінка атрибутів параметру AT101_1 модуля LogicLev.

На цьому конфігурацію обробки даних вважаємо закінченою.

### 4.3 Комплексний об'єкт-тег сигналу

У попередніх розділах було описано механізм підключення джерела даних за об'єктом апарату — "Повітряний охолоджувач", який передбачає об'єднання всіх сигналів у одному об'єкті параметру джерела даних. Однак, більш розповсюдженим підходом великої автоматизації є формування об'єкту параметру довкола окремого сигналу, наприклад — "Температура на виході холодильника AT101_1 (TE1314_1)", які часто називаються тегами.

Створення об'єкту параметру довкола сигналу дозволяє формалізувати його опис до шаблонів аналогових і дискретних сигналів, включивши до них всю потрібну обробку, сигналізацію та іншу характерну інформацію. Для простої конфігурації типізованих аналогових і дискретних сигналів, у бібліотеках OpenSCADA передбачено шаблони параметрів та багато образів візуального представлення адаптовано до роботи і зв'язування з такими параметрами прямо, без деталізації за атрибутами.

Більш того, уніфіковані шаблони наділяються можливістю глибокого опрацювання вхідних сигналів через визначення у полі "Вхідна процедура обробки" процедури на внутрішній мові JavaLikeCalc. І ще більше, у цій процедурі можна розширити шаблонну модель даних параметру допоміжними динамічними атрибутами, фактично "навісити" на нього елементи об'єкту пристрою, відштовхуючися від головного його сигналу; тобто не створюючи для цього додаткових шаблонів. На кшталт такого для додання атрибуту встановлення входу вручну:

    if(ctx.f_start == null) {
      ctx.f_start = true;
      this.attrAdd("setIn", "Input set", "real");
      this.setIn.set(0);
    }

    in = this.setIn.get();

Зазвичай, для формування параметру на основі шаблону, використовується модуль логічного рівня LogicLev, як це було описано у попередньому розділі. Однак, низка модулів, у тому числі і 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.
- Збережемо об'єкт.

Рис. 4.3.1. Сторінка логічного параметру TE1314_1 модуля "ModBus".
Рис. 4.3.2. Вкладка "Конфігурація шаблону" сторінки параметру TE1314_1 модуля ModBus.
Рис. 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) — упевнюємося у доступності команди та станів.
- Збережемо об'єкт.

Рис. 4.3.4. Вкладка "Конфігурація шаблону" сторінки параметру CB102 модуля ModBus.
Рис. 4.3.5. Вкладка "Атрибути" сторінки параметру CB102 модуля ModBus.

### 4.4 Отримання готових даних OpenSCADA — шлюзування

Ознайомившись з типовими механізмами отримання даних, описаними у попередніх розділах, ви маєте вже уявляти загальний об'єм робіт з їх отримання та обробки, тобто — формалізацію та отримання цих даних у моделі даних SCADA-системи. Якщо сюди додати завдання формування цих даних на рівні ПЛК — модель даних вільно програмованих ПЛК, та перетворення їх у модель даних протоколу обміну, то ви маєте помітити тут потрійне перетворення даних. Стосовно перетворення у модель даних протоколу — серіалізація, то це визначається фізичними властивостями каналів зв'язку і здійснюється автоматично, а ось формування моделі даних ПЛК та моделі даних SCADA-системи здійснюється програмістом ПЛК та SCADA-системи відповідно. Причому, ці завдання мають багато спільного, особливо якщо здійснюється однією людиною або організацією, а відтак мають бути механізми її уніфікації.

У випадку різного походження ПЛК і SCADA, більшої уніфікації, ніж шар протоколу обміну, досягти складно. З іншого боку, глибоку уніфікацію моделей даних ПЛК і SCADA можна зустріти у виробників одночасно ПЛК і SCADA, що однак лише зміцнює їх монопольний стан та фактично нівелює переваги уніфікації через загальну вартість рішення.

OpenSCADA передбачає можливість такої уніфікації через додання спорідненості з ПЛК. Та таку спорідненість можна забезпечити лише для ПЛК, які є цілком відкритими, на них встановлено відкрите-вільне ПЗ, а відтак можна встановити і OpenSCADA у ролі середовища виконання ПЛК. Як середовище виконання, OpenSCADA може надавати дані ПЛК і стандартними протоколами, як то ModBus, та, для отримання цих даних прямо і без здійснення будь яких дій над ними на боці SCADA-системи, передбачено модуль DAQGate, який фактично об'єднує моделі. Тобто, програміст ПЛК, який за сумісництвом є програмістом SCADA, формує модель даних ПЛК, а на рівні SCADA-системи вона використовується вже як готова, чим цілком прибирається стадія та роботи з отримання, обробки та формування моделі даних SCADA-системи. Більш того:

- виключається розбіжність у моделях даних ПЛК та SCADA при їх зміні;
- дані конфігурації логічно та виключно зберігаються на ПЛК, якого вони стосуються;
- порушення та інші повідомлення формуються на першоджерелі — ПЛК, а повідомлення із втручання — дії оператору, потрапляють і на ПЛК;
- передбачається механізм тримання архівів-історії на ПЛК як повністю, так і як частка компенсації втрати зв'язку зі SCADA, особливо для поганого та бездротового зв'язку.

З метою демонстрації і ознайомлення, створимо тут об'єкт контролеру модуля DAQGate для шлюзування даних нашого віртуального ПЛК. Створюється він ідентично до раніше створених об'єктів контролеру у модулі ModBus та LogicLev на сторінці "Start"->"Збір Даних"->"Модуль"->"Шлюз джерел даних" і назвемо його "AGLKS".

Об'єкт контролеру модуля DAQGate (Рис.4.4.1) має наступні специфічні налаштування, які ми маємо здійснити:

- "Віддалена станція" — оберемо раніше створене підключення віддаленої станції "AGLKS".
- Ввімкнемо об'єкт контролера.
- "Перелік віддалених об'єктів контролерів та параметрів" — у полі "Дерево параметрів" оберемо "LogicLev.gen", а потім пункт "<<Додати поточний>>" нагорі цього переліку.
- Запустимо виконання об'єкту контролера.

Рис. 4.4.1. Головна вкладка налаштування об'єкту контролера модуля DAQGate.

Якщо все здійснено правильно, то автоматично створяться параметри обраного контролера і ми зможемо поглянути на дані по них у вкладці "Атрибути" (Рис.4.4.2).

Рис. 4.4.2. Вкладка "Атрибути" сторінки параметру модуля DAQGate.

### 4.5 Архівування-історія даних ТП

Отримані раніше дані вважаються поточними, тобто такими, які періодично оновлюються та характеризують значення параметру ТП на поточний момент часу. При цьому, раніше зчитані значення втрачаються при перезапису їх поточним, тобто відсутня їх історія. У багатьох-же завданнях потрібне ведення архіву-історії прочитаних значень параметрів ТП, для чого у OpenSCADA передбачена підсистема "Архіви-Історія" де нам потрібно створити архіватори значень та повідомлень, для порушень, і вказати наші параметри для архівації їх значень там.

Якщо не створювати архіваторів та не підключати наших параметрів на архівування ними, то на графіках ви не отримаєте історії більш його загальної ширини і також втратите накопичене при перемиканні, та у звітних документах не отримаєте історії взагалі.

Почнемо з архівації значень, для якої необхідно створити хоча-б один архіватор до необхідного типу сховища і періодичністю значень. Загалом, OpenSCADA містить два модулі архівації — на файлову систему FSArch і на базу даних DBArch. Тут ми розглянемо лише модуль архівації на файлову систему, як найбільш універсальний та ефективний. Стосовно періодичності значень для "якісного" архіватору, то її переважно необхідно обирати за періодичністю значень самого повільного джерела даних у нашій системі, яке у нас одне і періодичність ми йому вказали 1 секунда. Для створення архіватору значень відкриємо сторінку модуля архівування "Start"->"Архіви-Історія"->"Модуль"->"Архіватор на файлову систему" та за посередництва контекстного меню створимо об'єкт архіватору значень "1s". Зверніть увагу на значення поля "Тип елементу" діалогу створення, яке має бути "Архіватор значень"! Сторінка конфігурації отриманого об'єкта архіватору значень (Рис.4.5.1) містить розділ стану і оперативного управління "Стан", розділ налаштувань "Конфігурація" та розділ специфічних налаштувань архіватору цього модуля "Додаткові опції". Загалом ми маємо:

- Розділ "Стан":

  - запустити архіватор на виконання — встановимо ознаку навпроти відповідного поля, лише виконуваний архіватор здійснює архівування;
    Встановити у останню чергу і після виконання усього цього переліку.
  - можемо проконтролювати поточний і максимальний час сеансу архівування;
  - вказати сховище — залишимо "Загальне Сховище" проєкту;
  - можемо проконтролювати загальний розмір файлів архіву цього архіватору.

- Розділ "Конфігурація":

  - встановити запуск архіватору при запуску програми — встановимо ознаку навпроти відповідного поля;
  - встановити адресу теки з файлами архіву — "ARCHIVES/VAL/1s", що ставиться по замовченню;
  - встановити період значень — 1 (одна) секунда;
  - встановити період архівування — 60 секунд, по замовченню і зазвичай однакове для архіваторів з будь якою періодичністю значень.

- Зберегти об'єкт.

Рис. 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.

Рис. 4.5.2. Вкладка "Архівація" параметру AT101_1 модуля LogicLev.

У результаті цієї операції буде автоматично створено об'єкти архівів для обраних атрибутів. Приклад об'єкту архіву для атрибуту "Ti" параметру AT101_1 наведено на рисунку 4.5.3.

Рис. 4.5.3. Сторінка об'єкта архіву атрибуту "Ti" параметру AT101_1.

Зазвичай, налаштування архіву змінювати нема потреби, однак, якщо буде необхідна особлива конфігурація, то її можна здійснити на вказаній вище сторінці. Частіше може знадобитися отримання інформації про архів. Наприклад, дізнатися розмір архіву як за часом, так і на носії, а також поглянути на графік параметру (Рис.4.5.4).

Рис. 4.5.4. Вкладка "Значення" сторінки об'єкта архіву атрибута "Ti" параметра AT101_1.

Об'єкти контролерів, як і окремі шаблони параметрів, можуть формувати повідомлення про нештатні ситуації, наприклад — шаблони комплексних сигналів-тегів генерують повідомлення при вихід значення за одну з границь. Повідомлення такого характеру мають специфічну категорію та називаються порушеннями.

Повідомлення OpenSCADA попередньо потрапляють до буферу повідомлень, який і виступає первинним архівом. Однак буфер має обмеження і зберігається лише у оперативній пам'яті, тобто втрачається при перевантажені програми. Роль збереження повідомлень на тому або іншому сховищі виконують архіватори повідомлень, як і архіватори значень для значень.

Відповідним чином і створимо архіватор повідомлень для архівації порушень, для чого відкриємо сторінку модуля архівування "Start"->"Архіви-Історія"->"Модуль"->"Архіватор на файлову систему" і за посередництвом контекстного меню створимо об'єкт архіватору повідомлень alarms (Порушення). Зверніть увагу на значення поля "Тип елементу" діалогу створення, яке має бути "Архіватор повідомлень"! Сторінка конфігурації отриманого об'єкта архіватору значень (Рис.4.5.5) містить розділ стану і оперативного управління "Стан", розділ налаштувань "Конфігурація" та розділ специфічних налаштувань архіватору цього модуля "Додаткові опції". Загалом ми маємо:

- Розділ "Стан":

  - запустити архіватор на виконання — встановимо ознаку навпроти відповідного поля, лише виконуваний архіватор здійснює архівування;
    Встановити у останню чергу і після виконання всього цього переліку.
  - вказати сховище — залишимо "Загальне Сховище" проєкту;
  - можемо проконтролювати час першого та останнього повідомлення у архіві цього архіватору;
  - можемо проконтролювати загальний розмір файлів архіву цього архіватору;
  - можемо проконтролювати поточний і максимальний час сеансу архівування.

- Розділ "Конфігурація":

  - встановити запуск архіватору при запуску програми — встановимо ознаку навпроти відповідного поля;
  - встановити категорію повідомлень, яка характеризує порушення — "al*";
  - встановити рівень архівованих порушень — "Інформація (1[X])";
  - встановити адресу теки з файлами архіву — "ARCHIVES/MESS/alarms", що ставиться по замовченню;

- Зберегти об'єкт.

Рис. 4.5.5. Конфігурація архіватору повідомлень "alarms" на файлову систему.

Таким саме чином можна створити архіватори повідомлень іншого характеру, наприклад — дії оператору. Для чого достатньо визначити категорію цих повідомлень та сформувати для них шаблон або правило регулярного виразу. Ви можете отримати стандартні категорії і їх шаблони, або правила регулярного виразу, на сторінці архівації повідомлень; або можете вивчити реальні повідомлення на головній сторінці підсистеми "Архіви-Історія", отримати звідти інформацію про їх категорії і налаштувати шаблон або правило регулярного виразу. Можна навіть створити архіватор для архівування всіх повідомлень програми, але здійснювати це не рекомендується через отримання великих архівів і тривалого доступу до них надалі.

Новостворені проєкти OpenSCADA вже містять шаблони таких стандартних архіваторів, тому ви можете просто увімкнути необхідні.

## 5 Формування візуального представлення

Формування візуального представлення може здійснюватися на трьох рівнях складності і користувач може обрати будь який з них залежно від вимог завдання, рівня своїх знань і наявності бібліотек з готовими образами та шаблонами.

ПЕРШИЙ РІВЕНЬ вимагає мінімальної кваліфікації користувача, але передбачає наявність бібліотек шаблонних кадрів, потрібних для вирішення його завдання. У межах першого рівня користувачу достатньо знати як підключити динаміку до сторінок шаблонних кадрів і як додати нові сторінки шаблонних кадрів.

ДРУГИЙ РІВЕНЬ передбачає додаткову навичку — створювати нові кадри на основі готових-комплексних елементів шляхом простого їх розташування у області кадру. Для забезпечення цього кваліфікаційного рівня, користувачу знадобляться бібліотеки комплексних елементів, необхідні для вирішення його завдання.

ТРЕТІЙ РІВЕНЬ передбачає володіння всіма інструментами середовища розробки візуальних інтерфейсів OpenSCADA, включно зі створенням нових комплексних елементів і розробку інтерфейсів користувача у проєкті.

Всі дії із інтерфейсом візуалізації будемо виконувати у оточені модуля Vision підсистеми "Користувацькі інтерфейси". Для відкриття вікна інтерфейсу Vision натиснемо другу іконку праворуч панелі інструментів конфігуратору. У результаті отримаємо вікно, раніше представлене на рисунку 3.3.1.3.

Інтерфейси користувача-оператора у OpenSCADA реалізуються проєктами візуалізації. У бібліотеці основних елементів користувацького інтерфейсу присутній шаблон типового проєкту візуалізації, заснованого на концепції об'єктів сигналізації і видів відображення. Користувач може почати створювати власну концепцію інтерфейсу візуалізації у вигляді нового проєкту, а може використати вказаний шаблон.

Для реалізації нової концепції проєкту візуалізації будуть необхідні знання третього рівня і значні зусилля, що знаходиться за межами розгляду цього документу. Тому розглядатимемо створення інтерфейсу візуалізації на основі доступного шаблонного проєкту.

Скопіюємо проєкт "Групи сигналізації (шаблон)" натиснувши спочатку кнопку "Копіювати візуальний елемент" на ньому і потім кнопку "Вставити візуальний елемент" (Рис.5.1). У діалозі назвемо наш новий проєкт start (Старт) та у переліку проєктів отримаємо пункт нашого нового проєкту (Рис.5.1).

Рис. 5.1. Копіювання шаблонного проєкту у новий.

Перед використанням і збереженням нового проєкту (Рис.5.3) необхідно змінити його сховище на "Загальне Сховище", що ми можемо здійснити на головній сторінці діалогу властивостей візуального елементу, який викликається за кнопкою "Властивості візуального елементу" (Рис.5.2). Після чого збережемо наш новий проєкт натиснувши третю кнопку ліворуч панелі інструментів.

Рис. 5.2. Властивості нового проєкту на основі шаблонного.

Шаблонний проєкт (Рис.5.3) містить дві гілки — "Панелі управління" і "Коренева сторінка". Гілка "Панелі управління" містить набір кадрів типових панелей управління та спеціалізованих кадрів. Гілка "Коренева сторінка", з кореневою сторінкою у основі, містить підгілки об'єктів сигналізації "Група 1", "Група 2" і окрему гілку зведених графіків "Зведені графіки". Підгілки об'єктів сигналізації "Група {n}" мають цифровий ідентифікатор та можуть розширятися доданням впритул до стількох, назви скількох помістяться нагорі у два ряди. Присутність підгілки "Група {n}" відбивається на активації відповідної кнопки об'єкта сигналізації кореневої сторінки, що дозволяє на них перемикатися. Кожна підгілка "Група {n}" містить контейнери або шаблони видів відображення, зазвичай: "Мнемосхеми", "Групи графіків", "Групи контурів", "Групи оглядових кадрів" і "Документи". Наявність сторінок у контейнерах відображень вмикає можливість обрання цього відображення для відповідного об'єкта сигналізації кореневої сторінки. Детальніше ознайомитися зі структурою кореневої сторінки можна за посиланням.

Рис. 5.3. Шаблонний проєкт на основі концепції об'єктів сигналізації.

### 5.1 Додання шаблонної сторінки та підключення динаміки

Розглянемо завдання першого рівня складності, коли до вже розробленої концепції інтерфейсу необхідно підключити динаміку шаблонної сторінки. Поняття "Шаблон сторінки" передбачає сторінку, на основі якої та шляхом наслідування може створюватися багато кінцевих сторінок візуалізації з індивідуальним переліком динаміки. Прикладом таких сторінок є: "Група графіків", "Група контурів", "Група оглядових кадрів" і "Зведені графіки". На Рис.5.1.1 представлено шаблонну сторінку "Група графіків" у дереві нашого проєкту "Старт".

Рис. 5.1.1. Шаблонна сторінка "Група графіків".

Шаблонна сторінка "Група графіків" надає можливість підключити до восьми сигналів одночасного їх відображення на графіку. Елементи відображення значення нагорі автоматично приховуються для невстановлених зв'язків.

Створимо нову групу графіків у шаблонному контейнері "Група графіків" першої групи кореневої сторінки. Для цього у контекстному меню пункту "Група графіків" оберемо пункт меню "Додати візуальний елемент" (Рис.5.1.2), потім введемо ідентифікатор "2" та назву "Графіки 2" — 2 (Графіки 2).

Рис. 5.1.2. Додання групи графіків "Графіки 2".

Після підтвердження вводу назви буде створено нову сторінку, однак для активації нам знадобиться її увімкнути. Увімкнути сторінку можна у діалозі редагування властивостей сторінки (Рис.5.1.3). Відкрити цю сторінку можна шляхом обрання пункту меню "Властивості візуального елементу" у контекстному меню щойно створеної сторінки. Створити сторінку у логічному контейнері на основі шаблону можна й звичайним копіюванням шаблону у самого себе, а також копіюванням іншої сторінки цього контейнеру, але вже й зі зв'язками.

Рис. 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.

Рис. 5.1.4. Вкладка "Зв'язки" діалогу редагування властивостей візуального елементу.

Закінчивши введення зв'язків можемо перевірити результат наших зусиль, для цього закриємо вікно діалогу властивостей і запустимо наш проєкт "Старт" на виконання — про кнопку запуску ми пам'ятаємо з перших розділів. Далі оберемо графіки та перемкнемося на другу сторінку. За безпомилкової конфігурації маємо побачити подібне до зображеного на рисунку 5.1.5. Зауважте, що для параметру комплексного об'єкту-тегу зі встановленими границями порушень, вихід значення за границі відзначається аварійним кольором. Щоб побачити вихід за границю порушення ви можете встановити значення продуктивності вентилятора у 100 (Рис.4.2.9).

Рис. 5.1.5. Група графіків з підключенням чотирьох сигналів та одного параметру об'єкту-тегу.

### 5.2 Створення нового кадру — мнемосхеми

Піднімемо планку і створимо новий кадр, де розташуємо базові елементи відображення значень параметрів наших контролерів. Такі кадри зазвичай називаються мнемосхемами і окрім відображення динаміки, та навіть у першу чергу, містять статичне зображення технологічного процесу у мнемонічному представленні. Ми-ж не будемо акцентувати тут увагу на створені статики, а додамо елементи динаміки та підключимо до неї параметри наших контролерів. Та й розташуємо створений кадр у дереві нашого проєкту.

Нові кадри, призначені надалі до розташування у проєкті, прийнято створювати та змінювати у бібліотеці віджетів. Створимо нову бібліотеку віджетів обравши вертикальну вкладку "Віджет" та у контекстному меню вікна бібліотек віджетів оберемо пункт меню "Нова бібліотека" (Рис.5.2.1). У діалозі вводу назви вкажемо — CM101 (KM 101).

Рис. 5.2.1. Додання нової бібліотеки віджетів.

Далі додаємо новий кадр обравши пункт меню "... з Бібліотеки"->"Бібліотека: originals"->"Група елементів" (Рис.5.2.2) у контекстному меню створеної бібліотеки "KM 101". У діалозі вводу назви вкажемо AT101 (AT 101). У основі будь якого кадру і сторінки має лежати елемент "Група елементів (Box)" тому ми його й обрали.

Рис. 5.2.2. Додання нового кадру.

Одразу після створення нового кадру необхідно встановити його базові властивості, характерні для кадру мнемосхеми. Властивості або атрибути будь якого візуального елементу можна вказати у панелі інструментів "Атрибути", попередньо обравши потрібний візуальний елемент. Оберемо створений кадр "AT 101" та встановимо наступні властивості:

- "Геометрія: ширина" — 900;
- "Геометрія: висота" — 600;
- "Сторінка: група" — "so", для включення кадру до контейнеру мнемосхем при виконанні;
- "Фон: колір" — "#5A5A5A";
- "Границя: ширина" — 1;
- "Границя: колір" — "black".

У результаті отримаємо порожній кадр (Рис.5.2.3), готовий для додання елементів на нього. Для графічного редагування або перегляду вигляду кадру треба обрати пункт "Редагувати візуальний елемент" у контекстному меню кадру.

Рис. 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.

Рис. 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 можна вказати тільки параметр і атрибути розставляться автоматично.

Рис. 5.2.5. Вкладка "Зв'язки" діалогу редагування властивостей мнемосхеми.

Тепер можемо зберегти нашу мнемосхему і поглянути на результат. Для цього закриємо вікно діалогу властивостей і запустимо наш проєкт "Старт" на виконання. Далі кнопками гортання перемкнемося на нашу мнемосхему і у випадку безпомилкової конфігурації маємо побачити подібне до рисунку 5.2.6.

Рис. 5.2.6. Мнемосхема з чотирма підключеними сигналами, комплексними параметрами об'єкту-тегу та протоколом.

Зауважте, що вихід значення комплексного параметру об'єкта-тегу за границі порушень відзначається миготінням через аварійний колір для: параметру, об'єкту сигналізації і жовтого кола внизу. Крім миготіння при порушенні здійснюється монотонна сигналізація (часто на бузер) та синтез мови з промовою позиції параметру вказаної у полі зв'язку "spName" (Рис.5.2.5) якщо доступний відповідний синтезатор мови. При активації порушення, праворуч та праворуч-внизу активуються кнопки з індикацією типу повідомлення, а за натискання на них здійснюється "квітація"-стишення відповідного типу повідомлення. За натискання миготливого жовтого кола праворуч-знизу "квитуються"-стишуються всі повідомлення. Факт присутності порушення також відображається записом у протоколі, який ми додали. Щоб побачити вихід за границю порушення можете встановити значення продуктивності вентилятору у 100 (Рис.4.2.9). Детальніше про концепцію роботи з порушеннями можна почитати у документі "Як сформувати порушення, сигналізацію та сповіщення".

Історію порушень можемо переглянути у документі "Протокол порушень", який доступний при обрані виду "Документ" (Рис.5.2.7).

Рис. 5.2.7. Документ "Протокол порушень".

Дискретний комплексний параметр об'єкту-тегу ModBus.CM101.CB102, представлений нами у вигляді кульового крану, є активним. Тобто його можна обрати, чим отримати панель управління праворуч (Рис.5.2.6), а також передати команди (відкрити або закрити). Команди можна передавати з панелі управління або через контекстне меню. Всі дії оператора з керуючого впливу протоколюються і документ протоколу можна переглянути при обрані виду "Документ" (Рис.5.2.8).

Рис. 5.2.8. Документ "Протокол втручань".

### 5.3 Створення нового комплексного елемента

Приступимо до розгляду завдання третього рівня складності, а саме до створення комплексного елемента. Створення комплексного елементу, що включає в себе комбінацію різних базових примітивів, може здійснюватися у декілька етапів. У якості прикладу розглянемо завдання, що складається з двох етапів:

- створення віджету "Повітряний холодильник" на основі примітиву "Елементарна фігура";
- створення фінального-скомпонованого віджета "Холодильник" на основі примітиву "Група елементів".

#### 5.3.1 Створення віджету "Повітряний холодильник" на основі примітива "Елементарна фігура"

Віджет будемо створювати у раніше нами створеній бібліотеці "КМ 101". Для цього клацаємо правою кнопкою маніпулятору "миші" по пункту цієї бібліотеки та обираємо пункт меню "... з Бібліотеки"->"Бібліотека: originals"->"Елементарна фігура" як це показано на рисунку 5.3.1.1 і називаємо новий елемент air_cooler (Повітряний холодильник).

Рис. 5.3.1.1. Додання віджету до бібліотеки "KM 101" на основі примітиву "Елементарна фігура".

Після підтвердження з'явиться новий віджет з назвою "Повітряний холодильник", оберемо його у переліку віджетів бібліотеки "KM 101" та відкриємо для редагування за посередництвом контекстного меню нового елемента (Рис.5.3.1.2). У інспекторі атрибутів встановимо властивості:

- "Геометрія: ширина" — 200;
- "Геометрія: висота" — 200;
- "Заповнення: колір" — "lightgrey", колір можна задавати як за допомогою назв кольорів, так і у форматі #RRGGBB (#RRGGBB-AAA).

Рис. 5.3.1.2. Первинна конфігурація віджету.

Тепер зобразимо візуальне представлення віджета, що можна здійснити двома способами:

- намалювати бажане зображення маніпулятором "миша", використовуючи "Лінію", "Дугу", "Криву Без'є" та "Заливку"; відповідна панель "Панель елементарних фігур" з'явиться після входу у режим редагування-рисування; вхід у цей режим здійснюється як показано на рисунку 5.3.1.3 або подвійним натиском лівої кнопки маніпулятору "миша" на тілі виджета;
- вручну заповнити поле "Перелік елементів", ввівши перелік потрібних елементів та координат точок.

Додаткову інформацію про редактор можна отримати тут.

Рис. 5.3.1.3. Вхід у режим рисування віджета заснованого на примітиві "Елементарна фігура".

У нашому прикладі скористаємося другим способом, для чого у полі "Перелік елементів" інспектору атрибутів введемо нижчезазначений перелік та натиснемо "Ctrl"+"Enter":

    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)

Всі точки тут вказано статично оскільки не передбачено динамізації та зміни координат у режимі виконання, і всі інші параметри залишено по замовченню. Відтак, наш віджет набуде вигляду на рисунку 5.3.1.4.

Рис. 5.3.1.4. Зображення, що відповідає "Переліку елементів" віджету.

Створимо іконку нашого віджета, яку буде видно у дереві віджетів бібліотеки "KM 101" (Рис.5.3.1.5).

Рис. 5.3.1.5. Створення іконки віджета.

На цьому процес створення першого віджета можна вважати завершеним. Перейдемо до етапу компонування та створення фінального віджету.

#### 5.3.2 Створення фінального-скомпонованого віджету "Холодильник" на основі примітиву "Група елементів"

Фінальний віджет створюватимемо у бібліотеці "KM 101" для чого клацаємо правою кнопкою маніпулятору "миша" по цій бібліотеці та обираємо примітив "Група елементів" як це показано на рисунку 5.3.2.1, назвемо новий елемент — elCooler (Холодильник).

Рис. 5.3.2.1. Додання віджету до бібліотеки "KM 101" на основі примітиву "Група елементів".

Після підтвердження з'явиться новий віджет з назвою "Холодильник". Оберемо його у переліку віджетів бібліотеки "KM 101" і відкриємо для редагування. У інспекторі атрибутів встановимо властивості:

- "Геометрія: ширина" — 250;
- "Геометрія: висота" — 200.

Візьмемо раніше створений елемент "Повітряний холодильник" та перетягнемо його — натиснемо на ньому ліву кнопку маніпулятору "миша" та пересунемо курсор до області щойно створеного виджета, де відпустимо кнопку (Рис.5.3.2.2).

Рис. 5.3.2.2. Перетягнення (Drag&Drop) віджету "Повітряний холодильник" у віджет-контейнер "Холодильник".

У результаті з'явиться вікно діалогу з пропозицією ввести ідентифікатор і назву нового віджету. Ідентифікатор і назва можуть бути задані довільно, ми-ж введемо ідентифікатор air_cooler і назву залишимо порожньою та вона успадкується від предка — елемента "Повітряний холодильник". Таким чином, щойно створений віджет всередині контейнеру "Холодильник" успадкує елемент "Повітряний холодильник". Після підтвердження введення ідентифікатору і назви, віджет "Повітряний холодильник" додасться до нашого віджету-контейнеру "Холодильник" (Рис.5.3.2.3). У інспекторі атрибутів встановимо для нього властивості:

- "Геометрія: x" — 25;
- "Геометрія: y" — 0.

Рис. 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.

Рис. 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);

  Шрифт Arial може бути відсутнім у діалозі, тож оберіть той, що вам подобається.

- "Текст" (Рис.5.3.2.8):

    %1
    град.C

- "Кількість аргументів" — 1 (Рис.5.3.2.9):
  - "Аргумент 0: тип" — "Реальний";
  - "Аргумент 0: значення" — 300.25, задано лише для наочності та у режимі виконання воно буде замінено реальним значенням вхідної температури;
  - "Аргумент 0: конфігурація" — "3;f;2".

Рис. 5.3.2.5. Додання нового елемента заснованого на примітиві "Текст".
Рис. 5.3.2.6. Визначення геометрії віджета "Ti".
Рис. 5.3.2.7. Зміна розміру шрифту для віджета "Ti".
Рис. 5.3.2.8. Зміна поля "Текст" і визначення наявності аргументу у віджета "Ti".
Рис. 5.3.2.9. Конфігурація аргументу віджета "Ti".

Тепер, з метою створення аналогічного віджета для вихідної температури, скопіюємо віджет "Ti", вставимо скопійований віджет і вкажемо йому ідентифікатор To (Рис.5.3.2.10). У інспекторі атрибутів встановимо властивості:

- "Геометрія: x" — 175;
- "Геометрія: y" — 20.

Рис. 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;
- "Конфігурація":

    0
    50
    100
    150
    200

Рис. 5.3.2.11. Додання віджета заснованого на примітиві "Елемент форми".
Рис. 5.3.2.12. Заповнення параметрів ComboBox "cw".

Для відображення одиниці виміру продуктивності холодильника додамо ще один віджет заснований на примітиві "Текст". Здійснюємо ту-ж процедуру, що й для віджету "Ti". Вкажемо ідентифікатор dimension (Рис.5.3.2.13) і у інспекторі атрибутів встановимо властивості:

- "Геометрія: x" — 125;
- "Геометрія: y" — 168;
- "Геометрія: ширина" — 80;
- "Геометрія: висота" — 20;
- "Вирівнювання" — "У центрі";
- "Шрифт" — "Arial 14 1";
- "Текст" — "об./хвил.".

Рис. 5.3.2.13. Додання віджету "dimension" заснованого на примітиві "Текст" і зміна його параметрів.

Для додання логіки обробки віджету "Холодильник", відкриємо діалог редагування властивостей цього візуального елемента і перейдемо до вкладки "Обробка". На цій вкладці побачимо дерево атрибутів віджету і поле тексту програми обробки атрибутів. Для вирішення нашого завдання необхідно додати три атрибуту: Ti, To, Cw (Рис.5.3.2.14); для чого треба розгорнути кореневий елемент ".", обрати будь який елемент всередині нього та натиснути кнопку "Додати атрибут" знизу.

Далі ввімкнемо на обробку атрибут value комбобоксу "cw" як це показано на рисунку 5.3.2.15. Аналогічно ввімкнемо на обробку атрибут arg0val для Ti и To, а також атрибут speed елементу "cooler2".

Рис. 5.3.2.14. Додання трьох атрибутів елементу "Холодильник" бібліотеки "KM 101".
Рис. 5.3.2.15. Увімкнення на обробку атрибуту "value" комбобоксу "cw".

На завершення встановимо мову користувацького програмування "JavaLikeCalc.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;

Розташування або редагування програми віджету не призводить до безпосередньої її компіляції, тобто не буде повідомлень про помилки у програмі якщо вони мають місце бути. Це пов'язано з тим, що безпосереднє виконання програми, а відтак і її компіляція, здійснюється у оточені виконання і в момент запуску проєкту візуалізації на виконання. При цьому всі помилки, що виникли при компіляції, виводяться у вигляді повідомлень OpenSCADA і віджети з помилками не виконуються. Детальніше про налагодження користувацьких процедур можна почитати у документі "Як налагодити проєкт OpenSCADA".

Опрацювання віджету загалом і виконання його програми здійснюється за будь якої події у циклі життя проєкту СВУ (визначається полем "Період обчислення" вкладки "Проєкт", рисунок 5.2) і періодично за періодом опрацювання (визначається у полі "Періодичне опрацювання" вкладки "Віджет", рисунок 5.1.3). По замовченню, період опрацювання віджету береться із верхнього віджету та він складає 1000 мс, тож, якщо бажаєте швидшого оновлення вашого віджету, то можете встановити "Періодичне опрацювання" в 250 мс у вкладці "Віджет".

Отримана вкладка "Обробка" віджету "Холодильник" бібліотеки "KM 101" матиме вигляд, показаний на рисунку 5.3.2.16.

Рис. 5.3.2.16. Результуюча вкладка "Обробка" віджету "Холодильник" бібліотеки "KM 101".

Закриємо діалог редагування властивостей візуального елемента, створимо іконку нашого елемента, закриємо внутрішнє вікно редагування та збережемо це все.

На цьому розробку комплексного елемента можна вважати закінченою.

#### 5.3.3 Додання комплексного елементу на мнемосхему

Для перевірки працездатності та оцінки результатів наших зусиль, додамо створений віджет на мнемосхему, розроблену у розділі 5.2. Виконаємо цю операцію для двох холодильників "AT101_1" і "AT101_2".

Для цього відкриємо кадр мнемосхеми "AT 101" на редагування, хапаємо "мишею" наш комплексний елемент та тягнемо на мнемосхему, де відпускаємо у потрібній позиції — вводимо ідентифікатори AT101_1 і AT101_2, відповідно. Додані елементи розташовуємо як нам зручно. Після виконання цих маніпуляцій маємо отримати мнемосхему з виглядом на рисунку 5.3.3.1.

Рис. 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", відповідно, а атрибути буде розставлено автоматично.

Рис. 5.3.3.2. Вкладка "Зв'язки" діалогу редагування властивостей мнемосхеми.

Збережемо нашу мнемосхему і перевіримо результат, для чого закриємо вікно діалогу властивостей, запустимо проєкт "Старт" на виконання і перемкнемося на другу мнемосхему кнопками гортання. За безпомилкової конфігурації маємо побачити подібне зображеному на рисунку 5.3.3.3.

Рис. 5.3.3.3. Результуюча мнемосхема.

На цій мнемосхемі, за посередництвом наших комплексних елементів можемо не лише спостерігати, але й керувати продуктивністю холодильників просто змінюючи значення у комбобоксі. Змінюючи продуктивність можемо помітити і зміну температури, і спрацювання сигналізації за комплексним аналоговим параметром об'єкту-тренду. Історію змін можемо побачити та дослідити на групі графіків, створеній нами у розділі 5.1, та документі "Протокол порушень", згаданий у розділі 5.2.

## 6 Висновок

Таким чином ми отримали повноцінний типовий інтерфейс технологічного процесу (ТП) з реальним збором даних у різний спосіб і відтак отримали уявлення та навички роботи з OpenSCADA.

При побудові інтерфейсу ТП ми розглянули всі три рівні складності і відтак отримали уявлення про потрібний кваліфікаційний рівень програміста SCADA.

Збір та обробку даних ми розглянули і здійснили у різні способи від простого-типового і до відображення моделі даних ПЛК, побудованого на основі OpenSCADA. Тобто, отримано уявлення про джерела даних SCADA-систем і доступу до них за допомогою мережевих інтерфейсів та протоколів обміну, підтримку яких реалізують відповідні модулі OpenSCADA.

І звісно, ми розглянули методи розповсюдження (дистрибуції) OpenSCADA, способи її встановлення і отримання потрібного оточення як то: серверу SCADA, ПЛК OpenSCADA і робочого місця оператору (АРМ).

Інформація про OpenSCADA цим документом не обмежується та у вирішені специфічних питань маєте використовувати всю доступну документацію і приклади демонстраційних конфігурацій-моделей OpenSCADA, тим самим користуючись перевагами "відкритих вихідних текстів (OpenSource)". Окремо тут треба ще раз відзначити "Посібник по програмі", "Як (How to) ..." і "Динамічну модель реального часу АГЛКС", як більш повні джерела інформації про OpenSCADA.

## 7 Посилання

- Діаграма: Просте поєднане підключення станції і серверу SCADA з джерелом даних у демонстраційній БД.

Documents/Quick_start/uk - GFDL | July 2026 | OpenSCADA 1+r3070