OpenSCADA

Документи/Часто задавані питання

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

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

Contents

1 Політичні та концептуальні

Q: OpenSCADA незрозуміла та складна у сприйняті. Чому так та чи є інструкції швидкого старту та просунутого "Як виконати ..."?
Re: OpenSCADA детально описано, гранично структуровано та формалізовано. Однак враження незрозумілості та складності очікувані. Виходячи з цілей проєкту, програма є гранично модульною, що означає наявність великої кількості варіантів конфігурації та використання. З одного боку це ускладнює сприйняття, але з іншого — підвищує шанси "охоплення" саме вашого спеціалізованого завдання. Окрім того, треба завжди пам'ятати, що складне та незрозуміле все невідоме, яке дійсно зовсім необов'язково є таким. І цей психологічний бар'єр треба переборювати при вивченні будь чого нового. Посібник зі швидкого старту існує та доступний тут, розширений "Як виконати ..." також тут.

Q: Чи працює OpenSCADA у операційній системі QNX, FreeBSD, MS Windows?
Re: OpenSCADA розробляється за принципами багатоплатформності, базуючись на визнаному світовому стандарті POSIX та багатоплатформених бібліотеках. Однак, у зв'язку з обмеженістю ресурсів та інтересами автора і розробників, проєкт ведеться лише у ОС Linux. Подальша адаптація до інших платформ запланована після випуску версії 1.0 та наразі OpenSCADA працює на апаратних платформах x86, x86_64, ARM та програмній платформі Android. Підтримка тієї або іншої платформи буде залежати від зацікавленості спільноти та наявності окремого мантейнера для апаратно-програмної платформи.

Q: Чи можна керувати OpenSCADA за допомогою звичайного WEB-браузера?
Re: Так, це можливо. Для керування OpenSCADA із WEB-браузера створено модулі UI.WebCfg та UI.WebCfgD; для виконання інтерфейсів оператору створено модуль UI.WebVision та для створення користувацьких HTML сторінок створено модуль UI.WebUser. Які викликаються модулем Protocol.HTTP, підсистеми "Транспортні Протоколи".

Q: Чи допускає програма додання/видалення/оновлення модулів на ходу (без зупинки)?
Re: Цю можливість передбачено програмою та вона забезпечується підсистемою "Керування модулями". Фактично, оновлення модулів може відбуватися автоматично, після виявлення нової версії модуля.

2 Архітектурні, використання та короткі "Як виконати ..."

2.1 Ядро OpenSCADA

Q: Яким чином реалізується підтримка багатьох мов? Чи можу я виконати локалізацію на рідну мову?
Re: Багатомовна підтримка реалізована ґрунтуючись на стандарті інтернаціоналізації I18N. Та файли інтернаціоналізації модулів відокремлено від файлу інтернаціоналізації ядра програми, що забезпечує повноцінну підтримку незалежного розповсюдження та розробки модулів до OpenSCADA. Переклад програми загалом та модулів зокрема може бути виконано незалежно від наявності їх вихідних текстів. Для перекладу достатньо отримати *.po або *.pot файли потрібного компоненту та у звичайному текстовому редакторі, або спеціалізованій програмі, виконати переклад повідомлень у файлах з англійської на потрібну мову. Актуальні файли ви можете отримати з репозиторію вихідних текстів проєкту у теці "src/po" ядра програми та теках "src/moduls/{subsys}/{module}/po" модулів, а по завершенню запропонувати результати нового перекладу до включення у репозиторії вихідних текстів, написавши до форуму проєкту або прямо автору та головному розробнику проєкту. PO-файли не використовуються програмою безпосередньо, тому для швидкої перевірки результату перекладу та виправлення помилок форматування можете скористатися командою msgfmt -vo [openscada|oscd_{ModId}].mo {lang}.po і розташувати отриманий MO-файл [openscada|oscd_{ModId}].mo до теки "/usr/share/locale/{lang}/LC_MESSAGES" актуальної інсталяції OpenSCADA для мови lang.

Q: Чи можу я створити свій власний модуль для будь якої підсистеми?
Re: Так, звісно. Для допомоги в цьому створено документ, де практично повністю описано архітектуру ядра, його функції та API модулів різних підсистем. Додатково створено посібник по створенню модулів до OpenSCADA та для кожної підсистеми створено модуль-шаблон, взявши за основу який можна швидко створити власний модуль.

Q: Як забезпечується розподіл доступу?
Re: Використовується схема безпеки подібна до UNIX ОС. Так, потрібні компоненти мають власника, входять до груп та містять тріаду доступу "rwxrwxrwx". Крім того цей механізм безпеки втілено у інтерфейсі керування OpenSCADA, який своєю чергою пронизує всю програму.

Q: Яким чином в OpenSCADA можна реалізовувати через-модульні зв'язки?
Re: Через-модульні зв'язки можуть бути наступних типів:

Q: Як зібрати OpenSCADA з вихідних текстів?
Re: Збірка будь якого програмного проєкту з вихідних текстів, на системній мові на кшталт C/C++ та складністю вище середнього, є нетривіальним завданням, особливо для специфічних оточень та оточень до яких ще не здійснено адаптацію. Для вирішення цього завдання потрібна відповідна підготовка та попередній досвід збірки. Якщо є можливість отримати OpenSCADA зібраною та у вигляді готових пакунків під ваше оточення, то обов'язково скористайтеся нею! Якщо ж немає пакунків під ваше оточення або ви свідомо бажаєте зібрати програму з вихідних текстів під адаптоване оточення тоді скористайтеся посібником для збірки з вихідних текстів. Адаптація до збірки та роботи у інших оточеннях є значно більш нетривіальним завданням, особливо до оточень дуже далеких від POSIX або поняття міжплатформової сумісності загалом, є окремим під-проєктом OpenSCADA та передбачає тривалий процес на кшталт адаптації до Android, тому не треба її плутати із простою збіркою під адаптоване оточення!

2.2 БД

Q: Чи можу я отримати дані безпосередньо з БД?
Re: Так, ви можете. Для баз даних (БД), що підтримують SQL, ви можете використати функцію SQLReq() до відповідної БД. Загалом та для не SQL баз даних можете використати API доступу до прошарку баз даних OpenSCADA у функціях таблиці БД fieldStruct(), fieldSeek(), fieldGet(), fieldSet(), fieldDel().

2.3 Фізичний та логічний-віртуальний збір даних

Q: Де і як виконувати додаткову логічну обробку атрибутів параметрів, включаючи логічне зв'язування у одному об'єкті?
Re: Будь яка математична обробка атрибутів параметрів може виконуватися у обчислювальних об'єктах контролеру (модулях підсистемі "Збір даних"), наприклад, у блоковому обчислювальному контролері (DAQ.BlockCalc) та об'єкті контролеру ґрунтованому на Java-подібній мові (DAQ.JavaLikeCalc). Крім того, обробка може здійснюватися на логічному рівні параметрів (DAQ.LogicLev) у модулях підсистеми "Збір даних", спеціально для цього передбачених (які працюють за шаблонами параметрів) або які містять вбудовану реалізацію механізму шаблонів параметрів. Тобто користувач може формувати параметри з потрібною структурою та алгоритмом після-обробки, формуючи логічно пов'язані об'єкти. Частина обробки може виконуватися безпосередньо при візуалізації (UI.VCAEngine). Щодо збору даних в цілому дивіться у документі.

Q: Де перевіряються шкали параметрів та різні уставки сигналізації?
Re: Перевірка шкал та уставок може реалізовуватися самим контролером, з сигналізацією через відповідні атрибути параметрів, а також на логічному рівні параметрів, для "сирих" джерел даних. Крім того, даний аналіз може здійснюватися безпосередньо в середовищі візуалізації та управління (СВУ).

Q: Чи можу я отримати (прочитати та записати) значення атрибуту параметру збору даних, наприклад, з процедури користувацького інтерфейсу?
Re: Основним інтерфейсом обміну значеннями параметрів збору даних з елементами або атрибутами відповідної частини OpenSCADA є статичне зв'язування, яке є найшвидшим. Однак внутрішня мова та динамічна об'єктна модель вузлів OpenSCADA дозволяє вам здійснювати динамічний доступ до об'єктів атрибутів параметрів збору даних, наприклад, ви можете отримати значення атрибуту функцією get().

Q: Як я можу зберегти-відновити модифіковані дані на логічному рівні?
Re: Дійсно, інколи може знадобитися збереження та потім відновлення, переважно при перезапуску, деяких модифікованих динамічних даних на кшталт лічильників пробігу обладнання. В цілому, обробку такого роду джерел даних та обладнання треба здійснювати на логічному рівні підсистеми "Збір даних", а реалізувати її можна багатьма способами, що передбачають збереження даних на деякому сховищі та подальше їх відновлення, однак більш відомі способи це:

SYS.cntrReq(SYS.XMLNode("save").setAttr("path",this.nodePath()+"/%2fobj").setAttr("force","1"));
if(f_start)    prevArchRestore = false;
if(!prevArchRestore && (archEnd=this.cntr.arch().end("FSArch.1s"))) {
    SYS.messInfo("testArch", "val="+this.cntr.arch().getVal(archEnd)+"; "
               "val1="+this.cntr.arch().getVal(archEnd,false,"FSArch.1s")+"; "
               "val2="+this.cntr.get(archEnd/1000000,archEnd%1000000));
    cntr = this.cntr.arch().getVal(archEnd);
    prevArchRestore = true;
}

Q: Чи можна, та яким чином, реалізується резервування параметрів?
Re: Як і будь яка пост-обробка, резервування параметрів здійснюється логічним рівнем шляхом створення шаблону параметра, що реалізує можливість у одному параметрі описувати декілька типових давачів, які будуть мати власні атрибути значень. Результуючє значення давачів буде поміщатися до узагальнювального атрибуту значення.

2.4 Архівування-історія та Порушення

Q: Яким чином визначається циклічність архівації значень?
Re: Архівація є незалежним від контролерів та їх параметрів завданням, та виконується вона модульною підсистемою "Архіви-Історія". Що та як архівувати визначається особисто для кожного атрибута параметру. Передбачено два режими архівації: пасивний та активний. Пасивна архівація визначається циклічністю отримання даних контролером — циклом модуля збору даних. Активна архівація забезпечується завданням підсистеми архівації та незалежно від циклу та способу збору даних модулем "DAQ".

Q: У процесі розробки-налагодження у мене залишаються невідповідні активні порушення. Що з ними робити?
Re: Так, враховуючи, що порушення до таблиці активних порушень часто потрапляють-формуються користувацькими процедурами, то "залипання" їх там може траплятися. Відповідно, ви можете просто перезапустити проєкт OpenSCADA або видалити-зняти такі порушення у головній вкладці "Повідомлення" сторінки підсистеми "Архіви-Історія": обираєте рівень порушень "Інформація (1[X]), ПОРУШЕННЯ", встановлюєте розмір у 0, після чого у таблиці повідомлень мають бути всі актуальні порушення, окремі з яких можна прибрати через контекстне меню, а все видиме кнопкою під таблицею; для великої групи порушень, та не всіх, можете виставити їх чіткі характеристики часу, рівня та категорії, щоб побачити у таблиці, а відповідно "зняти" гуртом всі потрібні.

Q: Чи можлива робота з потоковими даними?
Re: Потоковий та пакетний збір даних працює у зв'язці з архівом та його буфером. Тобто джерело, отримавши пакет/блок даних, безпосередньо поміщає його до архіву атрибута параметра, або ж бере пакет з буферу, при потоковому виводі.

Q: Чи можу я здійснити експорт архівних даних (історії) у інший формат, скажемо — CSV, Excel?
Re: Загалом, експортувати архівні дані можете та тут є три особливості, а саме: місце, формати та режим експорту. Оскільки кінцевим користувачем, для якого ці дані формуються, є користувач кінцевого інтерфейсу візуалізації — оператор, то вбудована функція експорту надається цими інтерфейсами для даних примітивів діаграми та документу, де можна здійснити експорт у CSV, файл зображення та HTML. Щодо інших форматів даних, особливо закритих та одноплатформених на кшталт Excel, то експорт у них може бути реалізовано користувацькою процедурою через загальний інтерфейс візуалізації користувача як прямим формуванням, якщо формат простий, так і викликом зовнішньої утиліти перетворення, якщо вона доступна. Експорт загалом може здійснюватися у двох режимах: інтерактивному та потоковому. Саме інтерактивний режим вбудовано у інтерфейс користувача та він передбачає визначення діапазону та якості даних (даних примітивів), як обмежувальних факторів доцільного часу виконання цієї операції. Потоковий режим передбачає фонове, можливо навіть разом з основними процесами, здійснення експорту як поточних даних так і даних локальних архівів та часто використовується для експорту у таблицю БД з потрібною структурою. Експорт із оточення розробки, як і потоковий режим, вбудованими функціями не передбачається, окрім експериментальних на кшталт експорту у WAV. Це, за потреби, може бути реалізовано сервісною процедурою або частиною коду основного процесу для потокового режиму.

2.5 Інтерфейс кінцевого користувача

Q: Яким чином здійснюється сигналізація мовою та що треба для її функціювання?
Re: Сигналізація мовою, як і інші методи сигналізації, є елементом підсистеми "Інтерфейси користувача" та здійснюється у модулях середовища візуалізації та управління (СВУ), а саме у рушії СВУ UI.VCAEngine та візуалізаторах UI.Vision і UI.WebVision. Зазвичай, для синтезу мови необхідний відповідний синтезатор з підтримкою потрібної мови, на кшталт RHVoice, festival, espeak. Для програвання синтезованого звуку вам не потрібно специфічних засобів у типовому оточені. Але, для специфічних оточень, потрібна програма play, що типово міститься у пакеті sox та для точного визначення залежностей дивіться у відповідних процедурах зовнішніх методів сповіщення.

Q: Як я можу швидко та коректно змінити співвідношення сторін екрану візуального інтерфейсу користувача на інше, наприклад, на 16:9?
Re: Так, основний інтерфейс користувача OpenSCADA, заснований на концепції об'єктів сигналізації та її кореневій сторінці, пристосовано та розроблено до співвідношення сторін 4:3. Для загальних проєктів СВУ заплановано реалізацію відповідних стилів на різні співвідношення сторін однак мнемосхеми мають залишатися незмінними. Відтак, для ручної, швидкої та коректної зміни співвідношення сторін наразі маєте виконати наступне у дереві проєкту СВУ:

Q: Як я можу підключити візуалізатор UI.Vision до віддаленого серверу візуалізації або до ПЛК з цією функцією?
Re: Так, ви можете створювати сервери візуалізації та ПЛК, засновані на модулі UI.VCAEngine, зі всіма даними СВУ проєктів візуалізації користувачів на них та очевидно зі встановленою там OpenSCADA. Надалі ви можете підключатися до цих віддалених серверів візуалізації та ПЛК за допомогою модуля UI.Vision для локальної розробки та візуалізації віддалених проєктів візуалізації користувача. Детальну інструкцію можете отримати у розділі "Підключення та використання віддалених та фонових конфігурацій" посібника зі Швидкого Старту та тут ви отримаєте коротку інструкцію. Ця коротка інструкція також корисна для отримання віддаленого контролю серверів візуалізації та ПЛК! Для здійснення цього маєте на клієнтській станції дотримуватися наступної процедури з модулем UI.Vision та з будь якою конфігурацією включно з порожньою:

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

Q: Чи можу я підлаштувати мій проєкт під дещо специфічне оформлення (брендінг)?
Re: Більшість візуального оформлення (брендінгу) кінцевого користувача розташовано у кінцевому інтерфейсі СВУ користувача, але ви можете також забажати підлаштувати зображення заставки, іконки та подібне:

Q: Оперативний інтерфейс оператору запускається на весь екран та я не можу його закрити для отримання доступу до системного оточення робочої стільниці!
Re: Звісно, OpenSCADA захищає систему контролю від закриття та непривілейованого доступу до системного оточення робочої стільниці. Відтак, для отримання доступу до системного оточення робочої стільниці ви маєте бути привілейованим користувачем, змінити користувача інтерфейсу на свій обліковий запис та у глобальному меню, що виникло, здійснити потрібне: вимкнути повно-екранний режим, закрити або вийти з програми. Якщо глобальне меню не з'являється то маєте проблемне оточення робочого простору, як то Unity, яке "відриває" меню вікна; відтак, попередньо вимкніть цю функцію оточення!

Q: Я можу легко підключати аналогові сигнали для побудови трендів примітивом Діаграма, але використання тут дискретних-логічних сигналів не є таким очевидним...
Re: Так, примітив Діаграма розроблено переважно для аналогових сигналів, але можете також використовувати тут дискретні-логічні сигнали як аналогові із двома станами [0,1], тож їх натуральна шкала це [0...1] і якщо підключите один сигнал у автоматичній-натуральній шкалі, то отримаєте його на весь екран, із заповненими стрічками для стану ПРАВДА (TRUE). Але це не дуже зручно та ви не зможете поєднувати його із іншими аналоговими або дискретними-логічними сигналами навіть у напівпрозорому кольорі, тож маєте вручну визначити шкалу для позиціювання стрічки дискретного-логічного сигналу у потрібній частині екрану. Деякі приклади шкал:

Q: Я маю дуже навантажену систему із багатьма процесами OpenSCADA, які працюють через Web інтерфейс та я бажаю зменшити навантаження на сервер і прискорити всі ці інтерфейси.
Re: Так, типово інтерфейси OpenSCADA створено для функціювання за деякої достатньо швидкої періодичності перенесення-життя (100 мс) яка переважно підходить для активних локальних Qt-інтерфейсів модуля UI.Vision із високою реактивністю, та на достатньо швидких мережах при функціюванні із сервером візуалізації. Але наразі можете підлаштувати ваш інтерфейс для досягнення зменшення навантаження у рази:

3 Проблеми (актуальні, оточення, виправлено)

Q: Чому я втратив дробову частину у всіх завантажених значеннях реального типу?
Re: Ви використовуєте локаль, відмінну від "C" або загальної Англійської, та встановлюєте її прямо, змінною оточення "LC_NUMERIC" або її загальним варіантом "LC_ALL", що призводить до використання у функціях на кшталт atof() та sprintf() символу роздільника дробової частини відмінного від "." (крапка), часто це "," (кома).

!> Тобто, ніколи не встановлюйте змінних оточення "LC_NUMERIC" та "LC_ALL" прямо оскільки вони перевизначають коректне встановлення "LC_NUMERIC" у "C", в середині! Для зміни мови програми використовуйте тільки змінні "LANG" та "LANGUAGE", яких завжди достатньо.
+> Наразі проблему повністю виключено, через перевірку та очищення змінної оточення "LC_ALL"!

Q: "Немає доступу для створення політики реального часу для '****'. Створено звичайну нитку!"
Re: Таке повідомлення OpenSCADA формує при спробі встановити для потоку-завдання політики реального часу, за пріоритетом більше 0, у випадку запуску від звичайного користувача.

+> Потенційно такі права можна надати шляхом редагування файлу "/etc/security/limits.conf" наступним чином:
user    hard    nice    -20 
user    soft    nice    -15 
user    hard    rtprio  99 
user    soft    rtprio  90

Q: Я спостерігаю відсутність всіх текстових міток на графіках (примітив "Діаграма") інтерфейсів модуля UI.WebVision. Чому так?
Re: Такий результат можливий на інтерфейсах, побудованих на бібліотеці GD, та якщо сама ця бібліотека зібрана без використання бібліотеки FontConfig. На цей час тільки модуль UI.WebVision використовує цю бібліотеку для виключної побудови примітивів "Елементарна Фігура" та "Діаграма".

+> Відтак, для виправлення цієї проблеми маєте встановити коректний пакет-збірку бібліотеки або скласти бібліотеку самостійно з FontConfig. Наразі відомо один випадок такого сорту проблеми з пакетом "libgd2-noxpm" старих версій дистрибутиву Linux Debian, де Ви маєте встановити коректний пакет "libgd2-xpm".

Q: Я спостерігаю відсутність SVG-зображень у інтерфейсах Qt. Чому так?
Re: Як правило це вказує на відсутність у системі Qt-модуля для SVG-графіки, наприклад, пакет "libqt5svg5" у Linux дистрибутивах на основі Debian.

+> Встановіть пакет або безпосередньо Qt-втулок підтримки SVG-графіки.
Documents/FAQ/uk - GFDLMarch 2024OpenSCADA 0.9.7