From OpenSCADAWiki
Jump to: navigation, search
This page is a translated version of the page Documents/FAQ and the translation is 100% complete.

Other languages:
English • ‎российский • ‎українська

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

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

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

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

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

2.1 Ядро OpenSCADA

Q: Яким чином реалізується підтримка багатьох мов? Чи можу я виконати локалізацію на рідну мову?
Re: Підтримка багатьох мов реалізована ґрунтуючись на стандарті інтернаціоналізації I18N. До того ж файли інтернаціоналізації модулів відокремлено від файлу інтернаціоналізації ядра програми. Це забезпечує повноцінну підтримку незалежного розповсюдження та розробки модулів до OpenSCADA. Переклад програми в цілому та модулів зокрема може бути виконано незалежно від наявності їх вихідних текстів. Для перекладу достатньо отримати *.po або *.pot файли потрібного компоненту та у звичайному текстовому редакторі виконати переклад повідомлень у файлах з англійської на потрібну мову. Актуальні файли Ви можете отримати з репозиторію вихідних текстів проекту.

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():
SYS.cntrReq(SYS.XMLNode("save").setAttr("path",this.nodePath()+"/%2fobj"));
  • Якщо атрибут шаблону з лічильником архівується тоді при старті параметру Ви можете отримати останнє значення з цього архіву, наприклад, так:
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: Потоковий та пакетний збір даних працює у зв'язці з архівом та його буфером. Тобто джерело, отримавши пакет/блок даних, безпосередньо поміщає його до архіву атрибута параметра, або ж бере пакет з буферу, при потоковому виводі.

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

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

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

3 Проблеми

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

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".