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

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

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

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

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

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

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

- Стандартний інтерфейс доступу — здійснюється за допомогою віртуального інтерфейсу модульних підсистем.
- Розширений інтерфейс доступу — передбачає експорт функції зовнішнього інтерфейсу, модулем експортером, та наступне підключення модуля імпортера до цих функцій за допомогою функцій "TModule::modFunc()".
- Функції користувача — будь який компонент програми може реєструвати власні функції користувача ("TCntrNode::objFuncCall()"), які надалі можуть бути використані в оточенні користувацького програмування OpenSCADA.

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: Дійсно, інколи може знадобитися збереження та потім відновлення, переважно при перезапуску, деяких модифікованих динамічних даних на кшталт лічильників пробігу обладнання. В цілому, обробку такого роду джерел даних та обладнання треба здійснювати на логічному рівні підсистеми "Збір даних", а реалізувати її можна багатьма способами, що передбачають збереження даних на деякому сховищі та подальше їх відновлення, однак більш відомі способи це:

- Періодичне, або при завершені, збереження контексту параметрів шаблону за допомогою запиту користувацького API OpenSCADA через cntrReq(), де "force" для примусового збереження немодифікованих параметрів:

    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;
    }

- Створення спеціальної таблиці БД та запис/читання цих даних прямо у цю таблицю за посередництвом SQL-запитів через SQLReq().

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. Для загальних проєктів СВУ заплановано реалізацію відповідних стилів на різні співвідношення сторін однак мнемосхеми мають залишатися незмінними. Відтак, для ручної, швидкої та коректної зміни співвідношення сторін наразі маєте виконати наступне у дереві проєкту СВУ:

- Встановити, або помножити оригінальне, атрибут "Геометрія: x масштаб" (geomX) у значення (16/9)/(4/3) = 1.333, для:
  - кореневої сторінки;
  - всіх шаблонних сторінок на кшталт "Групи графіків", лише у сторінок, використаних як шаблони;
  - всіх сторінок документів та панелей керування, індивідуально.
- Через те, що сторінки мнемосхем рідко допускають зміну оригінального співвідношення сторін, з причини використання правильних фігур на кшталт кола та квадратів, ми вимушені розробляти ці кадри від початку та у розмірі [900*1.333 x 550] = [1199 x 550].

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

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

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

- Забезпечте специфічні до системи заходи запуску самої OpenSCADA з вашим проєктом. Тут маєте попередньо створити або знайти іконку робочого столу вашого проєкту у OpenSCADA з менеджеру проєктів OpenSCADA та скопіювати або розташувати її у теці або переліку програм, що запускаються автоматично вашим оточенням робочої стільниці. Деталі дивіться у документації на відповідне оточення робочої стільниці.
- Оберіть запуск модуля UI.Vision із загальним запуском OpenSCADA, у полі "Модулі Qt для запуску" модуля UI.QTStarter з будь якого конфігуратору OpenSCADA.
- Оберіть Ваш проєкт СВУ для його автоматичного виконання, у полі "Перелік проєктів для запуску" модуля UI.Vision з будь якого конфігуратору OpenSCADA. Тут ми також рекомендуємо встановити для виконання проєкту користувача, відмінного від системного, звісно із правами на цей проєкт.

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

- іконка праворуч нагорі кадру "Коренева сторінка (СО)" — просто завантажте ваше зображення до ресурсів проєкту як "logo", бажано у розмірі 110x55 пікселів (2x1);
- іконка вікна-сторінки проєкту при виконанні — просто завантажте вашу іконку проєкту, бажано у розмірі 128x128 пікселів, або очистіть це для використання зображення загальної іконки проєкту (дивіться нижче) яка може бути перекладена — залежна від мови поточного інтерфейсу;
- зображення стартової заставки проєкту — підготуйте представницьке зображення, бажано у розмірі 600x300, та розташуйте його до теки іконок проєкту із назвою "{ProjectID}_splash.[png|gif|jpg|jpeg]" для заставки запуску та виходу і "{ProjectID}_splash_exit.[png|gif|jpg|jpeg]" для заставки виходу;
- зображення загальної іконки проєкту для дерева навігації конфігураторів OpenSCADA — підготуйте представницьке зображення, бажано у розмірі 128x128, та розташуйте його до теки іконок проєкту із назвою "{ProjectName}.[png|gif|jpg|jpeg]", де ProjectName може бути або специфічним до мови або на Базовій Мові для всіх випадків або навіть обидві якщо ваш проєкт є багатомовним.

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

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

- [0...5] — ділите екран по вертикалі на п'ять стрічок та відображаєте сигнал унизу;
- [-4...1] — ділите екран по вертикалі на п'ять стрічок та відображаєте сигнал нагорі;
- [-2...3] — ділите екран по вертикалі на п'ять стрічок та відображаєте сигнал уцентрі;
- [0...10] — ділите екран по вертикалі на десять стрічок та відображаєте сигнал унизу.

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

- першим та очевидним кроком є збільшення періодичності перенесення-життя в конфігурації Проєкту СВУ, де можете встановити "Період обчислення" у значення до 500 мс для активних локальних Qt-інтерфейсів модуля UI.Vision та до 1000 мс для нешвидких Web-інтерфейсів модуля UI.WebVision;
- другим кроком є встановлення періоду оновлення динамічних даних залежно від того, що ви вважаєте достатньо частим, або вимкнути періодичне оновлення взагалі встановленням періодичності у -2; та здійснити це для головної-кореневої сторінки у конфігурації Віджету дерева вашого проєкту; те саме можете здійснити для всіх панелей розташованих у групі "Панелі керування (control)" логічної структури проєкту від головної-кореневої сторінки, встановивши потрібну періодичність для самої групи;
- третім кроком є заглиблення у адаптацію ваших віджетів-кадрів для функціювання на великих періодичностях без втрати реактивності на кшталт вже адаптованих у стандартній бібліотеці як основна-коренева сторінка та Відображення аналогового; та ця адаптація переважно передбачає:
  - надсилання користувацьких подій за потреби у швидкому оновлені у наступному циклі життя після опрацювання подій;
  - контроль періодичності виконання віджету узалежнено від ситуаційної активності на кшталт блимання курсору обрання та кольорів сигналізації.

## 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 - GFDL | May 2026 | OpenSCADA 0.9.9