| Модуль: | FLibSYS | 
| Имя: | Библиотека функций системного API. | 
| Тип: | Специальные | 
| Источник: | spec_FLibSYS.so | 
| Версия: | 1.3.0 | 
| Автор: | Роман Савоченко | 
| Описание: | Предоставляет библиотеку системного API среды пользовательского программирования. | 
| Лицензия: | GPL | 
Специальный модуль 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-запроса к БД.
Параметры:
| ID | Имя | Тип | Режим | По умолчанию | 
| rez | Результат | Объект(Массив) | Возврат | |
| addr | Адрес БД | Строка | Вход | |
| req | SQL-запрос | Строка | Вход | 
Описание: Создание объекта узла 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",);
Описание: Запрос интерфейса управления к системе посредством 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",);
rez = xmlCntrReq(req);
messPut("test",0,"Значение: "+req.text());
//Установка признака "Включен" параметра "1" контроллера "1" модуля "ModBus".
req = xmlNode("set").setAttr("path",).setText(1);
rez = xmlCntrReq(req);
//Установка признака "Выключен" параметра "1" контроллера "1" модуля "ModBus".
req = xmlNode("set").setAttr("path",).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(),);
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",);
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"])