From OpenSCADAWiki
Jump to: navigation, search

Программа-система (SYS)

Функции объекта:

  • {string|int} system( string cmd, bool noPipe = false); — вызывает консольные команды cmd ОС с возвратом результата по каналу. Если noPipe установлен то возвращается код возврата вызова и возможен запуск программ в фоне ("sleep 5 &"). Функция предоставляет пользователю OpenSCADA широкие возможности через вызов любых системных программ, утилит и скриптов, а также получения посредством них доступа к огромному объёму системных данных. Например команда "ls -l" вернёт детализированное содержимое рабочей директории.
  • int fileSize( string file ); — возвращает размер файла file.
  • string fileRead( string file, int off = 0, int sz = -1 ); — возвращает строку части файла file по смещению off и размером блока sz.
  • int fileWrite( string file, string str, bool append = false ); — записывает строку str в файл file, удаляя присутствующий файл или добавляя в него, append. Возвращает количество записанных байт.
  • int fileRemove( string file ); — удаляет файл file. Возвращает результат удаления.
  • int message( string cat, int level, string mess ); — формирует системное сообщение mess с категорией cat, уровнем level (-7...7). Отрицательное значение уровня формирует нарушения — "Alarm.
  • int messDebug( string cat, string mess ); int messInfo( string cat, string mess ); int messNote( string cat, string mess ); int messWarning( string cat, string mess ); int messErr( string cat, string mess ); int messCrit( string cat, string mess ); int messAlert( string cat, string mess ); int messEmerg( string cat, string mess ); — формирует системное сообщения mess с категорией cat и соответствующим к имени уровнем.
  • XMLNodeObj XMLNode( string name = "" ); — создаёт объект узла XML c именем name.
  • string cntrReq( XMLNodeObj req, string stat = "" ); — отправляет запрос интерфейса управления к программе-системе посредством XML. Обычный запрос записывается в виде <get path="/OPath/%2felem"/>. При указании станции в stat осуществляется запрос к указанной внешней станции. Адрес, атрибут "path", можно узнать в конфигураторе OpenSCADA, а именно в строке статуса, где этот адрес появляется при наведении курсора мыши на конфигурационное или информационное поле. Некоторые примеры распространённых запросов, больше примеров в releaseTests():
    • Чтение значения элемента (имя пользователя "test"):
      req = SYS.XMLNode("get").setAttr("path","/sub_Security/usr_test/%2fprm%2fDESCR");
      SYS.cntrReq(req);
      idSt = req.text();
      
    • Запись значения элемента (имя пользователя "test"):
      req = SYS.XMLNode("set").setAttr("path","/sub_Security/usr_test/%2fprm%2fDESCR").setText("New test user name");
      SYS.cntrReq(req);
      
    • Добавление нового узла (пользователя "test"):
      req = SYS.XMLNode("add").setAttr("path","/sub_Security/%2fbr%2fusr_").setText("test");
      SYS.cntrReq(req);
      
    • Удаление узла (пользователя "test"):
      req = SYS.XMLNode("del").setAttr("path","/sub_Security/%2fbr%2fusr_").setText("test");
      SYS.cntrReq(req);
      
    • Сохранение изменений узла в БД (пользователя "test"):
      req = SYS.XMLNode("save").setAttr("path","/sub_Security/usr_test/%2fobj");
      SYS.cntrReq(req);
      
    • Загрузка узла из БД (пользователя "test"):
      req = SYS.XMLNode("load").setAttr("path","/sub_Security/usr_test/%2fobj");
      SYS.cntrReq(req);
      
  • string lang(string full); — возврашает системный язык двумя символами и полный язык в full.
  • int sleep(real tm, int ntm = 0); — усыпляет поток исполнения на tm секунд (c точностью до наносекунд) и ntm наносекунд. Время сна можно установить не более STD_INTERF_TM (5 секунд).
  • int time( int usec ); — возвращает абсолютное время в секундах от эпохи 1.1.1970 и микросекунды в usec, если указан.
  • int utime( ); int mtime( ); — возвращает абсолютное время в микросекундах и миллисекундах от эпохи 1.1.1970.
  • int {localtime|gmtime}( int fullsec, int sec, int min, int hour, int mday, int month, int year, int wday, int yday, int isdst ); — возвращает полную дату и время в секундах (sec), минутах (min), часах (hour), днях месяца (mday), месяце (month), годе (year), днях недели (wday), днях в году (yday) и признак летнего времени (isdst), исходя из абсолютного времени в секундах fullsec от эпохи 1.1.1970. gmtime возвращает время в GMT(UTC).
  • int {mktime|timegm}(int sec, int min, int hour, int mday, int month, int year, int wday, int yday, int isdst); — формирует время с эпохи 1.1.1970 из отдельно указанных секунд, минут, часов, дней, месяцев и т.д. Значения отдельных единиц времени могут указываться за границей их обычного диапазона, что позволяет использовать эту функцию при переборе, в последствии чего единицы времени будут откорректированы и возвращены в обычном диапазоне. timegm работает с временем в GMT(UTC).
  • string {strftime|strftimegm}( int sec, string form = "%Y-%m-%d %H:%M:%S" ); — преобразует абсолютное время sec в строку нужного формата form. Запись формата соответствует POSIX-функции strftime. strftimegm возвращает время в GMT(UTC).
  • int {strptime|strptimegm}( string str, string form = "%Y-%m-%d %H:%M:%S" ); — возвращает время в секундах от эпохи 1.1.1970, исходя из строковой записи времени str, в соответствии с указанным шаблоном form. Например, шаблону "%Y-%m-%d %H:%M:%S" соответствует время "2006-08-08 11:21:55". Описание формата шаблона можно получить из документации на POSIX-функцию strptime. strptimegm работает с временем в GMT(UTC).
  • int cron( string cronreq, int base = 0 ); — возвращает время, спланированное в формате стандарта Cron, cronreq, начиная от базового времени base или от текущего, если базовое не указано.
  • string strFromCharCode( int char1, int char2, int char3, ... ); — создаёт строку из кодов символов char1, char2 ... charN.
  • string strFromCharUTF([string type = "UTF-8",] int char1, int char2, int char3, ...); — создаёт строку из UTF-8 символов char1, char2 ... charN. Следующие типы символа поддерживаются: UTF-8, UTF-16, UTF-16LE, UTF-16BE, UTF-32, UTF-32LE, UTF-32BE.
  • string strCodeConv( string src, string fromCP, string toCP ); — перекодирует текст src из кодировки fromCP в toCP. Если кодировка опущена (пустая строка), то используется внутренняя.
  • string strEncode( string src, string tp = "Bin", string opt1 = "" ); — кодирует строку src по правилу tp и опции opt1. Доступные правила:
    "PathEl" — символы [/%] в "%2f" и "%25", соответственно;
    "HttpURL" — символы [ \t%] и "> 0x80" в "%20", "%09", "%25" и т.д.;
    "HTML" — символы HTML-сущностей [><"&'] в "&gt;", "&lt;", "&quot;" и т.д.;
    "JavaScript" — символ '\n' экранированием "\\n";
    "SQL" — экранирование-защита символов ['"`\], добавлением символа '\' или дублирование перечисленных в opt1 символов;
    "Custom" — символов указанных в opt1 в вид "%NN";
    "Base64" — бинарное кодирование в Base 64, где в opt1 устанавливается символ(ы) прерывания строки после 57 символов;
    "FormatPrint" — символ '%' в "%%";
    "OscdID" — почти все символы вроде [ /\&(] в '_';
    "Bin" — перечень ASCII байт ("XX XX XX XX ...") в бинарное представление;
    "Reverse" — инверсия последовательности;
    "ShieldSimb" — защищённые символы вида '\a', '\b', ..., '\0NNN', '\xNN' в бинарное представление;
    "ToLower" — символы к нижнему регистру;
    "Limit" — ограничение строки длиной в opt1, учитывая переменную длину UTF-8;
    "ShieldBin" — защита бинарных символов [\x0-\x8\xB-\xC\x0E-\x1F].
  • string strDecode( string src, string tp = "Bin", string opt1 = "" ); — декодирует строку src по правилу tp и опции opt1. Доступные правила:
    "PathEl", "HttpURL", "Custom" — символы вида "%NN" в бинарное представление;
    "Base64" — соответственно из Base 64;
    "Bin" — бинарную строку в ASCII байты ("XX XX XX XX .. A.b.c.."), opt1 указывает на разделитель или "<text>", для включения смещения слева и текстовой части справа.