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

Other languages:
English • ‎mRussian • ‎Українська
Модуль Ім'я Версія Ліцензія Джерело Мови Платформи Тип Автор Опис
FLibSYS Системні функції 1.8 GPL2 spec_FLibSYS.so en,uk,ru,de x86,x86_64,ARM Спеціальні Роман Савоченко Надає бібліотеку системних функцій середовища програмування користувача OpenSCADA.

Contents

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

Для адресації до функцій цієї бібліотеки можна використовувати статичну адресу виклику Special.FLibSYS.{Func}() або динамічну SYS.Special.FLibSYS["{Func}"].call(), SYS.Special.FLibSYS.{Func}(). Де {Func} — ідентифікатор функції у бібліотеці.

1 Загальносистемні функції

1.1 SYS: Виклик (sysCall)

Опис: Здійснює виклик консольних команд ОС. Функція відкриває широкі можливості користувачу OpenSCADA, шляхом виклику будь-яких системних програм, утиліт та скриптів, а також отримання за посередництвом них доступу до величезного об'єму системних даних. Наприклад, команда "ls -l" поверне деталізований вміст робочої теки.
Параметри:

Ідентифікатор Ім'я Тип Режим По замовченню
rez Результат Рядок Повернення
com Команда Рядок Вхід

Приклад:

using Special.FLibSYS;
test=sysCall("ls -l");
messPut("Example",0,"Example: "+test);

1.2 SYS: Ввід/Вивід (IO)

Опис: Ввід/Вивід у: файл, строковий потік.
Параметри:

Ідентифікатор Параметр Тип Режим По замовченню
rez Результат Об'єкт(IO) Повернення
name Ім'я файлу або дані (для строкового потоку) Рядок Вхід
accs Доступ до файлу (""-строковий потік;"r[+]"-читання;"w[+]"-запис з нуля;"a[+]"-додання;...) Рядок Вхід
mFormat Формат даних машини ('n'-сист. порядок;'b'-BigEndian;'l'-LittleEndian) Ціле Вхід "n"
enc Кодування рядку у файлі/потоці Логічний Вхід

1.2.1 IO об'єкт

Значення:

  • valType — типи значень:
    • "uchar", "unsigned char", "char", "schar", "signed char";
    • "uint8";
    • "uint16", "ushort";
    • "uint32", "uint", "ulong";
    • "uint64";
    • "int8", "integer*1";
    • "int16", "short", "integer*2";
    • "int32", "int", "long", "integer*4", "integer";
    • "int64", "integer*8";
    • "float", "float32", "single", "real*4";
    • "double", "float64", "real*8", "real";
  • accs — режим доступу та тип:
    • — строковий потік;
    • 'r[+]' — читання;
    • 'w[+]' — запис з нуля;
    • 'a[+]' — додання.
  • mFormat — формат даних машини:
    • 'n' — рідний;
    • 'l' — LittleEndian;
    • 'b' — BigEndian.

Властивості:

  • length — довжина потоку;
  • pos (w) — позиція читання/запису потоку.
  • string (w) — повне значення строкового потоку;
  • mFormat (w) — формат даних машини;
  • stringEncode (w) — кодування підрядків файлу/потоку.

Функції:

  • bool open(string name = "", string accs = "", string mFormat = "n", string enc = ""); — відкрити новий поток для рядка або файлу name.
  • bool close(); — закрити поток.
  • {string|int|real|Array[int|real]} read(string valType = "char", int cnt = -1, string mFormatEnc = "n|NoEnc"); — читати значення типу valType у кількості cnt для формату машини або вхідного кодування рядка mFormatEnc.
  • {int|IO} {write|wr}({string|int|real|Array} vals, string valType = "char", string mFormatEnc = "n|NoEnc", int cnt = 1); — записати значення vals для типу valType для формату машини або вхідного кодування рядка mFormatEnc, та повтору скалярних значень у кількості cnt.

1.3 DB: SQL запит (dbReqSQL)

Опис: Формування SQL-запиту req до БД addr, всередині (trans=true), назовні (trans=false) або без різниці (trans=EVAL) до транзакції. У випадку помилки її значення поміщається до властивості "err" результату.
Параметри:

Ідентифікатор Ім'я Тип Режим По замовченню
rez Результат Об'єкт(Масив) Повернення
addr Адреса БД, "{TypeDB}.{DB}" Рядок Вхід
req SQL-запит Рядок Вхід
trans Транзакція Логічний Вхід EVAL

1.4 XML: Вузол (xmlNode)

Опис: Створення об'єкту XML вузла.
Параметри:

Ідентифікатор Ім'я Тип Режим По замовченню
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");

1.5 XML: Запит інтерфейсу керування (xmlCntrReq)

Опис: Запит щодо контролю програми, за XML. Звичайний запит записується у вигляді "<get path="/OPath/%2felem"/>". За визначенням станції здійснюється запит до вказаної зовнішньої станції.
Параметри:

Ідентифікатор Ім'я Тип Режим По замовченню
rez Результат Рядок Повернення
req Запит Об'єкт(XMLNodeObj) Вихід
stat Станція Рядок Вхід

Приклад (більше прикладів дивіться для аналогічної внутрішньої функції SYS.cntrReq()):

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

2 Функції роботи з часом

2.1 Time: Час (tmTime)

Опис: Повертає абсолютний час у секундах від епохи 1.1.1970 та мікросекунди у usec, якщо вказано таку зміну та її значення негативне.
Параметри:

Ідентифікатор Параметр Тип Режим По замовченню
sec Секунди Цілий Повернення 0
usec Мікросекунди Цілий Вихід -1

2.2 Time: Дата та час (tmDate)

Опис: Повна дата та час у секундах, хвилинах, годинах та інше, виходячи з абсолютного часу в секундах від епохи 1.1.1970.
Параметри:

Ідентифікатор Параметр Тип Режим По замовченню
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);

2.3 Time: Рядок часу (tmFStr)

Опис: Отримання часу як форматований рядок. Запис формату відповідає POSIX-функції "strftime()".
Параметри:

Ідентифікатор Параметр Тип Режим По замовченню
val Рядок дати та часу Рядок Повернення
sec Секунди Ціле Вхід 0
form Формат дати та часу Рядок Вхід  %Y-%m-%d %H:%M:%S

Приклад:

using Special.FLibSYS;
test = tmFStr(SYS.time(),"%d %m %Y");
messPut("Приклад",0,"tmFStr(): "+test);

2.4 Time: Рядок у час (tmStrPTime)

Опис: Перетворення строкового представлення дати та часу, за форматом form, у час в секундах з 01.01.1970. Наприклад, шаблону "%Y-%m-%d %H:%M:%S" відповідає час "2006-08-08 11:21:55". Опис формату шаблону можна отримати із документації на POSIX-функцію "strptime()".
Параметри:

Ідентифікатор Параметр Тип Режим По замовченню
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("Приклад",0,"tmStrPTime(): "+test);

2.5 Time: Планувати час за CRON (tmCron)

Опис: Планування часу за стандартом CRON, повертаючи спланований час починаючи від базового часу base або від поточного якщо базовий не вказаний.
Параметри:

Ідентифікатор Параметр Тип Режим По замовченню
res Результат, секунди Цілий Повернення 0
str CRON Рядок Вхід * * * * *
base Базовий час, секунди Цілий Вхід 0

2.6 Time: сон (tmSleep)

Опис: Короткий сон від наносекунд та до STD_INTERF_TM (5 секунд).
Параметри:

Ідентифікатор Параметр Тип Режим По замовченню
res Результат Цілий Повернення 0
tm Час, секунди Реальний Вхід 0

3 Функції роботи з рядками

3.1 Рядок: Отримати розмір (strSize)

Опис: Отримання розміру рядка.
Параметри:

Ідентифікатор Параметр Тип Режим По замовченню
rez Результат Цілий Повернення
str Рядок Рядок Вхід

Приклад:

using Special.FLibSYS;
messPut("Приклад",1,"ReturnString: "+strSize("Приклад"));

3.2 Рядок: Отримати частину рядка (strSubstr)

Опис: Отримання частини рядка.
Параметри:

Ідентифікатор Параметр Тип Режим По замовченню
rez Результат Рядок Повернення
str Рядок Рядок Вхід
pos Позиція Цілий Вхід 0
n Кількість Цілий Вхід -1

Приклад:

using Special.FLibSYS;
test = strSubstr("Приклад", 0, strSize("Приклад")-1);
messPut("Приклад", 1, "ReturnString: "+test);

3.3 Рядок: Вставити рядок у інший (strInsert)

Опис: Вставка рядку до іншого рядку.
Параметри:

Ідентифікатор Параметр Тип Режим По замовченню
str Рядок Рядок Вихід
pos Позиція Цілий Вхід 0
ins Рядок для вставки Рядок Вхід

3.4 Рядок: Замінити частину рядка іншим (strReplace)

Опис: Заміна частини рядку іншим рядком.
Параметри:

Ідентифікатор Параметр Тип Режим По замовченню
str Рядок Рядок Вихід
pos Позиція Цілий Вхід 0
n Кількість Цілий Вхід -1
repl Рядок для заміни Рядок Вхід

3.5 Рядок: Розібрати за роздільником (strParse)

Опис: Розбір рядка за роздільником.
Параметри:

Ідентифікатор Параметр Тип Режим По замовченню
rez Результат Рядок Повернення
str Рядок Рядок Вхід
lev Рівень Цілий Вхід
sep Роздільник Рядок Вхід "."
off Зміщення Цілий Вихід

Приклад:

using Special.FLibSYS;
ExapleString = "Приклад:123";
test = strParse(ExapleString, 1, ":");
messPut("Приклад", 0, "strParse(): "+test);

3.6 Рядок: Розібрати шлях (strParsePath)

Опис: Розбір шляху за елементами.
Параметри:

Ідентифікатор Параметр Тип Режим По замовченню
rez Результат Рядок Повернення
path Шлях Рядок Вхід
lev Рівень Цілий Вхід
off Зміщення Цілий Вихід

Приклад:

using Special.FLibSYS;
test = strParsePath(path, 0, "/");
messPut("Приклад", 1, "strParsePath(): "+test);

3.7 Рядок: Шлях у рядок з роздільником (strPath2Sep)

Опис: Перетворення шляху у рядок за роздільником.
Параметри:

Ідентифікатор Параметр Тип Режим По замовченню
rez Результат Рядок Повернення
src Джерело Рядок Вхід
sep Роздільник Рядок Вхід "."

Приклад:

//Перетворює значення "/ses_AGLKS/pg_so" атрибута "path" у значення "ses_AGLKS.pg_so"
using Special.FLibSYS;
test = strPath2Sep(path);
messPut("Приклад", 0, "path: "+path);
messPut("Приклад", 0, "strPath2Sep(): "+test);

3.8 Рядок: Кодувати рядок у HTML (strEnc2HTML)

Опис: Кодування рядку для використання у вихідних HTML.
Параметри:

Ідентифікатор Параметр Тип Режим По замовченню
rez Результат Рядок Повернення
src Джерело Рядок Вхід

3.9 Рядок: Кодувати текст у бінарний вигляд (strEnc2Bin)

Опис: Кодування тексту у бінарний вигляд, для формату тексту <00 A0 FA DE>.
Параметри:

Ідентифікатор Параметр Тип Режим По замовченню
rez Результат Рядок Повернення
src Джерело Рядок Вхід

3.10 Рядок: Декодувати текст з бінарного вигляду (strDec4Bin)

Опис: Декодування тексту з бінарного вигляду, для формату тексту <00 A0 FA DE>.
Параметри:

Ідентифікатор Параметр Тип Режим По замовченню
rez Результат Рядок Повернення
src Джерело Рядок Вхід

3.11 Рядок: Реальне у рядок (real2str)

Опис: Перетворення реального значення у формат рядку.
Параметри:

Ідентифікатор Ім'я Тип Режим По замовченню
rez Результат Рядок Повернення
val Значення Реальне Вхід
prc Точність Ціле Вхід 4
tp Тип Рядок Вхід "f"

3.12 Рядок: Ціле у рядок (int2str)

Опис: Перетворення цілого значення у формат рядку.
Параметри:

Ідентифікатор Ім'я Тип Режим По замовченню
rez Результат Рядок Повернення
val Значення Ціле Вхід
base База (8, 10, 16) Ціле Вхід 10

3.13 Рядок: Рядок у реальне (str2real)

Опис: Перетворення значення рядку у формат реального.
Параметри:

Ідентифікатор Ім'я Тип Режим По замовченню
rez Результат Реальне Повернення
val Значення Рядок Вхід

3.14 Рядок: Рядок у ціле (str2int)

Опис: Перетворення значення рядку у формат цілого.
Параметри:

Ідентифікатор Ім'я Тип Режим По замовченню
rez Результат Ціле Повернення
val Значення Рядок Вхід
base Основа (2...36) Цілий Вхід 0

3.15 Циклічний Надмірний Код (CRC)

Опис: Уніфікована та повна реалізація Циклічного Надмірного Коду для ширини 1-64 біт з нормальним поліномом, початковим CRC, вхідною та вихідною послідовністю, та XOR для виходу.
Також підтримується попередня нотація цієї функції, де реверсивний поліном розміщується у позиції ширини width!
Параметри:

Ідентифікатор Параметр Тип Режим По замовченню
rez Результат Цілий Повернення
data Дані Рядок Вхід
width Ширина Цілий Вхід 16
poly Поліном Цілий Вхід 32773 (0x8005)
init Поч. значення Цілий Вхід -1 (0xFFFFFFFFFFFFFFFF)
RefIn Послідовність входу Логічний Вхід 1
RefOut Послідовність виходу Логічний Вхід 1
XorOut XOR для виходу Цілий Вхід 0

3.16 Зліпок повідомлення 5 (MD5)

Опис: Обчислення зліпка повідомлення 5 для даних data.
Параметри:

Ідентифікатор Параметр Тип Режим По замовченню
rez Результат Рядок Повернення
data Дані Рядок Вхід

4 Функції роботи з реальним

4.1 Float: Поділити на слова (floatSplitWord)

Опис: Поділ значення float (4 байтів) на два слова (2 байти).
Параметри:

Ідентифікатор Параметр Тип Режим По замовченню
val Значення Реальне Вхід
w1 Слово 1 Цілий Вихід
w2 Слово 2 Цілий Вихід

4.2 Float: Поєднати слова (floatMergeWord)

Опис: Формування значення float (4 байтів) з двох слів (2 байти).
Параметри:

Ідентифікатор Параметр Тип Режим По замовченню
rez Результат Реальне Повернення
w1 Слово 1 Цілий Вхід
w2 Слово 2 Цілий Вхід

4.3 Float: Вилучити (floatExtract)

Опис: Вилучення мантиси та експоненти з реального значення.
Параметри:

Ідентифікатор Параметр Тип Режим По замовченню
magn Розмір Реальний Повернення
val Значення Реальний Вхід
exp Експонента Цілий Вихід

5 Функції архівів

5.1 Mess: Отримання (messGet)

Опис: Отримати повідомлення програми.
Параметри:

Ідентифікатор Параметр Тип Режим По замовченню
rez Результат Об'єкт(Масив) Повернення
btm Час початку, секунди Ціле Вхід
etm Час кінця, секунди Ціле Вхід
cat Категорія Рядок Вхід
lev Рівень Цілий Вхід
arch Архіватор Рядок Вхід

5.2 Mess: Розмістити (messPut)

Опис: Розмістити повідомлення до програми.
Параметри:

Ідентифікатор Параметр Тип Режим По замовченню
cat Категорія Рядок Вхід
lev Рівень Цілий Вхід
mess Повідомлення Рядок Вхід

Приклад:

rnd_sq_gr11_lineClr="red";
Special.FLibSYS.messPut("Приклад",1,"Event: "+rnd_sq_gr12_leniClr);

5.3 Val: Архів (vArh)

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

Ідентифікатор Ім'я Тип Режим По замовченню
rez Результат Об'єкт(VArchObj) Повернення
name Ім'я — адреса до атрибуту параметра з архівом (DAQ.{Module}.{Cntr}.{Prm}.{Attr}) або безпосередньо до архіву значень (Archive.va_{ValArchive}). Рядок Вхід

5.3.1 Об'єкт VArchObj

Функції:

  • bool isNull() — об'єкт не ініційовано.
  • int begin( int usec = 0, string archiver = "" ) — час початку архіву, через повернення секунд та мікросекунд usec для архіватору archiver.
  • int end( int usec = 0, string archiver = "" ) — час закінчення архіву, через повернення секунд та мікросекунд usec для архіватору archiver.
  • int period( int usec = 0, string archiver = "" ) — період архіву, через повернення секунд та мікросекунд usec для архіватору archiver.
  • ValObj get( int sec, int usec, bool upOrd = false, string archiver = "" ) — значення із архіву на час sec:usec з прив'язкою до гори upOrd та для архіватору archiver. Реальний час отриманого значення встановлюється у sec:usec.
  • bool set( ValObj val, int sec, int usec, string archiver = "" ) [доступ до підсистеми Архіви-Історія для операцій з архівом] — записує значення val у архів на час sec:usec для архіватору archiver.
  • bool copy( VArchObj src, int begSec, int begUSec, int endSec, int endUSec, string archiver = "" ) [доступ до підсистеми Архіви-Історія для операцій з архівом] — копіює частину вихідного src архіву, або його буферу, до поточного, починаючи з begSec:begUSec та закінчуючи endSec:endUSec для архіватору archiver.
  • ArrayObj FFT( int tm, real size, string archiver = "", int tm_usec = 0 ) — розкласти у ряд Фур'є за допомогою FFT алгоритму. Повертається масив амплітуд частот для вікна значень із архіву з часом початку tm:tm_usec (секунди:мікросекунди), глибиною у історію архіву size (секунд) та для архіватору archiver.

Приклад:

using Special.FLibSYS;
val = vArh(strPath2Sep(addr)).get(time,uTime,0,archiver);
return val.isEval() ? "Порожньо" : real2str(val,prec);

5.4 Val: Буфер архіву (vArhBuf)

Опис: Отримання об'єкту буфера значень для тимчасового збереження значень та виконання проміжних операцій над кадрами даних.
Параметри:

Ідентифікатор Параметр Тип Режим По замовченню
rez Результат Об'єкт(VArchObj) Повернення
tp Тип значень архіву (0-Логічний, 1-Цілий, 4-Реальний, 5-Рядок) Цілий Вхід 1
sz Максимальний розмір буферу Цілий Вхід 100
per Період значень буферу, мікросекунди Цілий Вхід 1000000
hgrd Жорстка мережа часу Логічний Вхід 0
hres Висока роздільна здатність часу (мікросекунди)" Логічний Вхід 0

6 API користувацького програмування

Модуль, як об'єкт, надає функції користувацького програмування.

Об'єкт "Бібліотека функцій" (SYS.Special.FLibSYS)

  • ElTp {funcID}(ElTp prm1, ...) — виклик функції бібліотеки {funcID}. Повертає результат викликаної функції.

Об'єкт "Користувацька функція" (SYS.Special.FLibSYS["funcID"])

  • ElTp call(ElTp prm1, ...) — виклик цієї функції з параметрами <prm{N}>. Повертає результат викликаної функції.