From OpenSCADAWiki
Програма-система (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);
- Читання значення елементу (ім'я користувача "test"):
- 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-сутностей [><"&'] у ">", "<", """ та інше;
- "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' у бінарне представлення.