| Модуль | Ім'я | Версія | Ліцензія | Джерело | Мови | Платформи | Тип | Автор | Опис |
|---|---|---|---|---|---|---|---|---|---|
| FLibSYS | Бібліотека функцій системного API | 1.5 | GPL2 | spec_FLibSYS.so | en,uk,ru,de | x86,x86_64,ARM | Спеціальні | Роман Савоченко | Надає бібліотеку системного API середовища користувацького програмування. |
Спеціальний модуль FLibSYS надає в систему OpenSCADA статичну бібліотеку функцій для роботи з системою OpenSCADA на рівні її системного API. Ці функції можуть використовуватися у середовищі користувацького програмування системи OpenSCADA для організації неординарних алгоритмів взаємодії.
Для адресації до функції цієї бібліотеки можна використовувати статичну адресу виклику "Special.FLibSYS.{Func}()" або динамічну "SYS.Special.FLibSYS["{Func}"].call()", "SYS.Special.FLibSYS.{Func}()". Де {Func} — ідентифікатор функції у бібліотеці.
Нижче наведено опис кожної функції бібліотеки. Для кожної функції здійснювалася оцінка часу виконання. Вимірювання здійснювалося на системі з наступними параметрами: Athlon 64 3000+ (ALTLinux 4.0(32біт)) шляхом заміру загального часу виконання функції при виклику її 1000 разів. Вибірка здійснювалася із п'яти обчислень із округленням до меншого цілого. Час оточується кутовими дужками та вимірюється у мікросекундах.
Опис: Здійснює виклик консольних команд ОС. Функція відкриває широкі можливості користувачу OpenSCADA шляхом виклику будь-яких системних програм, утиліт та скриптів, а також отримання за посередництвом них доступу до величезного об'єму системних даних. Наприклад команда "ls -l" поверне деталізований вміст робочої теки.
Параметри:
| ID | Ім'я | Тип | Режим | По замовченню |
|---|---|---|---|---|
| rez | Результат | Рядок | Повернення | |
| com | Команда | Рядок | Вхід |
Приклад:
using Special.FLibSYS;
test=sysCall("ls -l");
messPut("Example",0,"Example: "+test);
Опис: Формування SQL-запиту req до БД addr, всередині (trans=true), назовні (trans=false) або без різниці (trans=EVAL) до транзакції. У випадку помилки її значення поміщається до властивості "err" результату.
Параметри:
| ID | Ім'я | Тип | Режим | По замовченню |
|---|---|---|---|---|
| rez | Результат | Об'єкт(Масив) | Повернення | |
| addr | Адреса БД, "{TypeDB}.{DB}" | рядок | Вхід | |
| req | SQL-запит | Рядок | Вхід | |
| trans | Транзакція | Логічний | Вхід | EVAL |
Опис: Створення об'єкту вузла XML.
Параметри:
| ID | Ім'я | Тип | Режим | По замовченню |
|---|---|---|---|---|
| rez | Результат | Об'єкт(XMLNodeObj) | Повернення | |
| name | Ім'я | Рядок | Вхід |
Приклад:
using Special.FLibSYS;
//Створення об'єкту "get" вузла XML.
req = xmlNode("get");
//Створення об'єкту "get" вузла XML із створенням атрибутів.
//sub_DAQ/mod_ModBus/cntr_1/prm_1 — шлях згідно структури проекту
req = xmlNode("get").setAttr("path","/sub_DAQ/mod_ModBus/cntr_1/prm_1/%2fprm%2fst%2fen");
Опис: Запит інтерфейсу управління до системи за посередництвом XML. Звичайний запит записується у вигляді "<get path="/OPath/%2felem"/>". При вказанні станції здійснюється запит до зовнішньої станції.
Параметри:
| ID | Ім'я | Тип | Режим | По замовченню |
|---|---|---|---|---|
| rez | Результат | Рядок | Повернення | |
| req | Запит | Об'єкт(XMLNodeObj) | Вихід | |
| stat | Станція | Рядок | Вхід |
Приклад:
using Special.FLibSYS;
//Отримання ознаки "Включений/Виключений" параметрау "1" контролеру "1" модуля "ModBus".
//sub_DAQ/mod_ModBus/cntr_1/prm_1 — шлях згідно структури проекту
req = xmlNode("get").setAttr("path","/sub_DAQ/mod_ModBus/cntr_1/prm_1/%2fprm%2fst%2fen");
rez = xmlCntrReq(req);
messPut("test",0,"Значення: "+req.text());
//Встановлення ознаки "Включений" параметру "1" контролеру "1" модуля "ModBus".
req = xmlNode("set").setAttr("path","/sub_DAQ/mod_ModBus/cntr_1/prm_1/%2fprm%2fst%2fen").setText(1);
rez = xmlCntrReq(req);
//Встановлення ознаки "Виключений" параметру "1" контролеру "1" модуля "ModBus".
req = xmlNode("set").setAttr("path","/sub_DAQ/mod_ModBus/cntr_1/prm_1/%2fprm%2fst%2fen").setText(0);
rez = xmlCntrReq(req);
Опис: Отримання об'єкту архіву значень (VArchObj) шляхом підключення до архіву за його адресою.
Параметри:
| ID | Ім'я | Тип | Режим | По замовченню |
|---|---|---|---|---|
| rez | Результат | Об'єкт(VArchObj) | Повернення | |
| name | Ім'я, адреса до атрибуту параметра з архівом (DAQ.{Module}.{Cntr}.{Prm}.{Attr}) або безпосередньо до архіву значень (Archive.va_{ValArchive}). | Рядок | Вхід |
Функції:
Приклад:
using Special.FLibSYS; val = vArh(strPath2Sep(addr)).get(time,uTime,0,archivator); return val.isEval() ? "Порожньо" : real2str(val,prec);
Опис: Отримання об'єкту буферу архіву значень (VArchObj) для виконання проміжних операцій над кадрами даних.
Параметри:
| ID | Параметр | Тип | Режим | По замовченню |
|---|---|---|---|---|
| rez | Результат | Об'єкт(VArchObj) | Повернення | |
| tp | Тип значень архіву (0-Boolean, 1-Integer, 4-Real, 5-String) | Цілий | Вхід | 1 |
| sz | Максимальний розмір буферу | Цілий | Вхід | 100 |
| per | Періодичність буферу (у мікросекундах) | Цілий | Вхід | 1000000 |
| hgrd | Режим "Жорстка мережа часу" | Логічний | Вхід | 0 |
| hres | Режим "Високої роздільної здатності часу (мікросекунди)" | Логічний | Вхід | 0 |
Опис: Ввід/Вивід у: файл, строковий потік.
Параметри:
| ID | Параметр | Тип | Режим | По замовченню |
|---|---|---|---|---|
| rez | Результат | Об'єкт(IO) | Повернення | |
| name | Ім'я файлу або дані (для строкового потоку) | Рядок | Вхід | |
| accs | Доступ до файлу (""-строковий потік;"r[+]"-читання;"w[+]"-запис з нуля;"a[+]"-додання;...) | Рядок | Вхід | |
| mFormat | Формат даних машини ('n'-сист. порядок;'b'-BigEndian;'l'-LittleEndian) | Ціле | Вхід | "n" |
| enc | Кодування рядку у файлі | Логічний | Вхід |
Значення:
Властивості:
Функції:
Опис: Перетворює абсолютний час у рядок потрібного формату. Запис формату відповідає POSIX-функції strftime.
Параметри:
| ID | Параметр | Тип | Режим | По замовченню |
|---|---|---|---|---|
| val | Рядок повної дати | Рядок | Повернення | |
| sec | Секунди | Ціле | Вхід | 0 |
| form | Формат | Рядок | Вхід | %Y-%m-%d %H:%M:%S |
Приклад:
using Special.FLibSYS;
test=tmFStr(SYS.time(),"%d %m %Y");
messPut("Example",0,"tmFStr(): "+test);
Опис: Повертає повний час у секундах, хвилинах, годинах та інше, виходячи з абсолютного часу в секундах від епохи 1.1.1970.
Параметри:
| ID | Параметр | Тип | Режим | По замовченню |
|---|---|---|---|---|
| fullsec | Повні секунди | Цілий | Вхід | 0 |
| sec | Секунди [0...59] | Цілий | Вихід | 0 |
| min | Хвилини [0...59] | Цілий | Вихід | 0 |
| hour | Години [0...23] | Цілий | Вихід | 0 |
| mday | День місяця [1...31] | Цілий | Вихід | 0 |
| month | Місяць [0...11] | Цілий | Вихід | 0 |
| year | Рік, від 1900 | Цілий | Вихід | 0 |
| wday | День тижня [0...6] | Цілий | Вихід | 0 |
| yday | День у року [0...365] | Цілий | Вихід | 0 |
| isdst | Літній час | Цілий | Вихід | 0 |
Приклад:
using Special.FLibSYS;
curMin=curHour=curDay=curMonth=curYear=0;
tmDate(tmTime(),0,curMin,curHour,curDay,curMonth,curYear);
messPut("test",0,"Поточна хвилина: "+curMin);
messPut("test",0,"Поточна година: "+curHour);
messPut("test",0,"Поточний день: "+curDay);
messPut("test",0,"Поточний місяць: "+curMonth);
messPut("test",0,"Поточний рік: "+curYear);
Опис: Повертає абсолютний час в секундах від епохи 1.1.1970 та мікросекундах, якщо usec встановлено у позитивне значення. Параметри:
| ID | Параметр | Тип | Режим | По замовченню |
|---|---|---|---|---|
| sec | Секунди | Цілий | Повернення | 0 |
| usec | Мікросекунди | Цілий | Вихід | -1 |
Опис: Повертає час у секундах від епохи 1.1.1970, виходячи із строкового запису часу, у відповідності з вказаним шаблоном. Наприклад, шаблону "%Y-%m-%d %H:%M:%S" відповідає час "2006-08-08 11:21:55". Опис формату шаблону можна отримати із документації на POSIX-функцію "strptime".
Параметри:
| ID | Параметр | Тип | Режим | По замовченню |
|---|---|---|---|---|
| sec | Секунди | Цілий | Повернення | 0 |
| str | Рядок дати | Рядок | Вхід | |
| form | Формат запису дати | Рядок | Вхід | %Y-%m-%d %H:%M:%S |
Приклад:
using Special.FLibSYS;
curMin=curHour=curDay=curMonth=curYear=0;
tmDate(tmTime(),0,curMin,curHour,curDay,curMonth,curYear);
test = tmStrPTime(""+curYear+"-"+(curMonth+1)+"-"+curDay+" 9:0:0","%Y-%m-%d %H:%M:%S");
messPut("Example",0,"tmStrPTime(): "+test);
Опис: Повертає час, сплановане у форматі стандарту Cron починаючи від базового часу або від поточного якщо базовий не вказаний.
Параметри:
| ID | Параметр | Тип | Режим | По замовченню |
|---|---|---|---|---|
| res | Результат | Цілий | Повернення | 0 |
| str | Запис у стандарті Cron | Рядок | Вхід | * * * * * |
| base | Базовий час | Цілий | Вхід | 0 |
Опис: Короткий сон від наносекунд та до STD_INTERF_TM (5 секунд).
Параметри:
| ID | Параметр | Тип | Режим | По замовченню |
|---|---|---|---|---|
| res | Результат | Цілий | Повернення | 0 |
| tm | Час | Реальний | Вхід | 0 |
Опис: Запит системних повідомлень.
Параметри:
| ID | Параметр | Тип | Режим | По замовченню |
|---|---|---|---|---|
| rez | Результат | Об'єкт(Масив) | Повернення | |
| btm | Час початку | Ціле | Вход | |
| etm | Час кінця | Ціле | Вхід | |
| cat | Категорія повідомлення | Рядок | Вхід | |
| lev | Рівень повідомлення | Цілий | Вхід | |
| arch | Архіватор | Рядок | Вхід |
Опис: Формування системного повідомлення.
Параметри:
| ID | Параметр | Тип | Режим | По замовченню |
|---|---|---|---|---|
| cat | Категорія повідомлення | рядок | Вхід | |
| lev | Рівень повідомлення | Цілий | Вхід | |
| mess | Текст повідомлення | Рядок | Вхід |
Приклад:
rnd_sq_gr11_lineClr="red";
Special.FLibSYS.messPut("Example",1,"Event: "+rnd_sq_gr12_leniClr);
Опис: Використовується для отримання розміру.
Параметри:
| ID | Параметр | Тип | Режим | По замовченню |
|---|---|---|---|---|
| rez | Результат | Цілий | Повернення | |
| str | Рядок | Рядок | Вхід |
Приклад:
Special.FLibSYS.messPut("Example",1,"ReturnString: "+strSize("Example"));
Опис: Використовується для отримання частини рядка.
Параметри:
| ID | Параметр | Тип | Режим | По замовченню |
|---|---|---|---|---|
| rez | Результат | Рядок | Повернення | |
| str | Рядок | Рядок | Вхід | |
| pos | Позиція | Цілий | Вхід | 0 |
| n | Кількість | Цілий | Вхід | -1 |
Приклад:
using Special.FLibSYS;
test=strSubstr("Example", 0, strSize("Example")-1);
messPut("Example",1,"ReturnString: "+test);
Опис: Використовується для вставки одного рядка до іншого.
Параметри:
| ID | Параметр | Тип | Режим | По замовченню |
|---|---|---|---|---|
| str | Рядок | Рядок | Вихід | |
| pos | Позиція | Цілий | Вхід | 0 |
| ins | Рядок для вставки | Рядок | Вхід |
Опис: Використовується для заміни частини рядка іншим рядком.
Параметри:
| ID | Параметр | Тип | Режим | По замовченню |
|---|---|---|---|---|
| str | Рядок | Рядок | Вихід | |
| pos | Позиція | Цілий | Вхід | 0 |
| n | Кількість | Цілий | Вхід | -1 |
| repl | Рядок що замінює | Рядок | Вхід |
Опис: Використовується у розборі рядка за роздільником.
Параметри:
| ID | Параметр | Тип | Режим | По замовченню |
|---|---|---|---|---|
| rez | Результат | Рядок | Повернення | |
| str | Рядок | Рядок | Вхід | |
| lev | Рівень | Цілий | Вхід | |
| sep | Роздільник | Рядок | Вхід | "." |
| off | Зміщення | Цілий | Вихід |
Приклад:
using Special.FLibSYS;
ExapleString="Example:123";
test=strParse(ExapleString,1,":");
messPut("Example",0,"strParse(): "+test);
Опис: Використовується у розборі шляху на елементи.
Параметри:
| ID | Параметр | Тип | Режим | По замовченню |
|---|---|---|---|---|
| rez | Результат | Рядок | Повернення | |
| path | Шлях | Рядок | Вхід | |
| lev | Рівень | Цілий | Вхід | |
| off | Зміщення | Цілий | Вихід |
Приклад:
using Special.FLibSYS;
test=strParsePath(path,0,"/");
messPut("Example",1,"strParsePath(): "+test);
Опис: Використовується для перетворення шляху у рядок з роздільником.
Параметри:
| ID | Параметр | Тип | Режим | По замовченню |
|---|---|---|---|---|
| rez | Результат | Рядок | Повернення | |
| src | Джерело | Рядок | Вхід | |
| sep | Роздільник | Рядок | Вхід | "." |
Приклад:
//Перетворює значення "/ses_AGLKS/pg_so" атрибута "path" у значення "ses_AGLKS.pg_so"
using Special.FLibSYS;
test = strPath2Sep(path);
messPut("Example",0,"path: "+path);
messPut("Example",0,"strPath2Sep(): "+test);
Опис: Використовується для кодування рядка для використання у вихідному коді HTML.
Параметри:
| ID | Параметр | Тип | Режим | По замовченню |
|---|---|---|---|---|
| rez | Результат | Рядок | Повернення | |
| src | Джерело | Рядок | Вхід |
Опис: Використовується для кодування тексту у бінарний вигляд, із формату <00 A0 FA DE>.
Параметри:
| ID | Параметр | Тип | Режим | По замовченню |
|---|---|---|---|---|
| rez | Результат | Рядок | Повернення | |
| src | Джерело | Рядок | Вхід |
Опис: Використовується для декодування тексту із бінарного вигляду у формат <00 A0 FA DE>.
Параметри:
| ID | Параметр | Тип | Режим | По замовченню |
|---|---|---|---|---|
| rez | Результат | Рядок | Повернення | |
| src | Джерело | Рядок | Вхід |
Опис: Використовується для перетворення реального у рядок.
Параметри:
| ID | Ім'я | Тип | Режим | По замовченню |
|---|---|---|---|---|
| rez | Результат | Рядок | Повернення | |
| val | Значення | Реальне | Вхід | |
| prc | Точність | Ціле | Вхід | 4 |
| tp | Тип | Рядок | Вхід | "f" |
Опис: Використовується для перетворення цілого у рядок.
Параметри:
| ID | Ім'я | Тип | Режим | По замовченню |
|---|---|---|---|---|
| rez | Результат | Рядок | Повернення | |
| val | Значення | Ціле | Вхід | |
| base | База, підтримуються: 8, 10, 16 | Ціле | Вхід | 10 |
Опис: Використовується для перетворення рядка у реальне.
Параметри:
| ID | Ім'я | Тип | Режим | По замовченню |
|---|---|---|---|---|
| rez | Результат | Реальне | Повернення | |
| val | Значення | Рядок | Вхід |
Опис: Використовується для перетворення рядка у ціле.
Параметри:
| ID | Ім'я | Тип | Режим | По замовченню |
|---|---|---|---|---|
| rez | Результат | Ціле | Повернення | |
| val | Значення | Рядок | Вхід | |
| base | Основа | Цілий | Вхід | 0 |
Опис: Реалізація Циклічного Надлишкового Коду для довжин 8-64 біт.
Параметри:
| ID | Параметр | Тип | Режим | По замовченню |
|---|---|---|---|---|
| rez | Результат | Ціле | Повернення | |
| data | Дані | Рядок | Вхід | |
| poly | Поліном (реверсивний) | Цілий | Вхід | 40961 (0xA001) |
| width | Ширина | Цілий | Вхід | 16 |
| init | Ініціалізація | Цілий | Вхід | -1 (0xFFFFFFFFFFFFFFFF) |
Опис: Розрахунок зліпку повідомлення 5.
Параметри:
| ID | Параметр | Тип | Режим | По замовченню |
|---|---|---|---|---|
| rez | Результат | Рядок | Повернення | |
| data | Дані | Рядок | Вхід |
Опис: Поділ float (4 байтів) на слова (2 байти).
Параметри:
| ID | Параметр | Тип | Режим | По замовченню |
|---|---|---|---|---|
| val | Значення | Реальне | Вхід | |
| w1 | Слово 1 | Цілий | Вихід | |
| w2 | Слово 2 | Цілий | Вихід |
Опис: Об'єднання float (4 байтів) із слів (2 байти).
Параметри:
| ID | Параметр | Тип | Режим | По замовченню |
|---|---|---|---|---|
| rez | Результат | Реальне | Повернення | |
| w1 | Слово 1 | Цілий | Вхід | |
| w2 | Слово 2 | Цілий | Вхід |
Опис: Вилучення мантиси та експоненти з реального значення.
Параметри:
| ID | Параметр | Тип | Режим | По замовченню |
|---|---|---|---|---|
| magn | Розмір | Реальний | Повернення | |
| val | Значення | Реальний | Вхід | |
| exp | Експонента | Цілий | Вихід |
Деякі об'єкти модуля надають функції користувацького програмування.
Об'єкт "Бібліотека функцій" (SYS.Special.FLibSYS)
Об'єкт "Користувацька функція" (SYS.Special.FLibSYS["funcID"])