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 з ім'ям name.
  • string cntrReq( XMLNodeObj req, string stat = "" ); — надсилає запит req у вигляді XML до Інтерфейсу Управління програми. Повертає рядок із помилкою у форматі "{errCod}:{errText}", який "0" для успіху. Запит загалом записується у вигляді <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 секунд (з точністю до наносекунд) та 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 або від поточного, якщо базовий не вказано. Форма стандарту CRON це "* * * * *".
    Де елементи по черзі
    • хвилини (0-59);
    • години (0-23);
    • дні (1-31);
    • місяці (1-12);
    • дні тижня (0[Неділя]-6).
    Де варіанти елементу
    • "*" — будь яке значення;
    • "1,2,3" — дозволені значення;
    • "1-5" — діапазон дозволених значень;
    • "*/2" — дільник загального діапазону дозволених значень.
    Приклади
    • "* * * * *" — кожна хвилина;
    • "10 23 * * *" — лише 23я година та 10а хвилина будь якого дня та місяця;
    • "*/2 * * * *" — для хвилин: 0,2,4,...,56,58;
    • "* 2-4 * * *" — для будь якої хвилини у годинах від 2 до 4(включно).
  • string strFromCharCode( int char1, int char2, int char3, ... ); — створює рядок з кодів символів char1, char2 ... charN.
  • string strFromCharUTF([string type = "UTF-8",] int char1, int char2, int char3, ...); — створює рядок з UTF символів 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 opt = "" ); — кодує рядок src за правилом tp та опції opt. Доступні правила:
    "PathEl" — символи [/%] у "%2f" та "%25", відповідно;
    "HttpURL" — символи [ \t%] та "> 0x80" у "%20", "%09", "%25" та інше;
    "HTML" — символи HTML-сутностей [><"&'] у "&gt;", "&lt;", "&quot;" та інше;
    "JavaScript" — символ '\n' екрануванням "\\n";
    "SQL" — екранування-захист символів ['"`\], доданням символу '\' або дублювання перелічених у opt символів;
    "Custom" — символів вказаних у opt у вигляд "%NN";
    "Base64" — бінарне кодування у Base 64, де у opt встановлюються символ(и) переривання рядку після 57 символів;
    "FormatPrint" — символ '%' в "%%";
    "OscdID" — майже всі символи на кшталт [ /\&(] у '_';
    "Bin" — перелік ASCII байтів ("XX XX XX XX ...") у бінарне представлення;
    "Reverse" — інверсія послідовності;
    "ToLower" — символи до нижнього регістру;
    "Limit" — обмеження рядку довжиною у opt, враховуючи змінну довжину UTF-8;
    "ShieldSymb" — захист символів із opt (типово ['"`]) символом слешу "\" на кшталт '\n', '\r', ..., '\0NNN';
    "ShieldBin" — захист усіх бінарних символів [\x0-\x8\xB-\xC\x0E-\x1F] символом слешу "\".
  • string strDecode( string src, string tp = "Bin", string opt = "" ); — декодує рядок src за правилом tp та опції opt. Доступні правила:
    "PathEl", "HttpURL", "Custom" — символи вигляду "%NN" у бінарне представлення;
    "Base64" — відповідно з Base 64;
    "Bin" — бінарний рядок у ASCII байти ("XX XX XX XX .. A.b.c.."), opt вказує на роздільник або "<text>", для включення зміщення ліворуч та текстової частини праворуч;
    "ShieldSymb" — захищені символи на кшталт '\n', '\r', ..., '\0NNN', '\xNN' у бінарне представлення.