<?xml version='1.0' encoding='UTF-8' ?> <!DOCTYPE html PUBLIC '-//W3C//DTD XHTML 1.0 Transitional//EN' 'http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd'> <html class="client-nojs" dir="ltr" lang="en"> <head> <meta charset="UTF-8" /> <title>ДокументаціÑ/API кориÑтувача - OpenSCADAWiki</title> <meta content="MediaWiki 1.26.4" name="generator" /> <link href="https://www.gnu.org/copyleft/fdl.html" rel="copyright" /> <link href="../en/files/doc.css" rel="stylesheet" /></head> <body><div class="floatright"><a href="index.html"><img alt="OpenSCADA" src="../en/files/index.png" /></a></div><div id="mw_header"> <div class="mw-indicators"> </div> <h1 id="firstHeading" lang="uk">ДокументаціÑ/API кориÑтувача</h1> </div><div class="mw-content-ltr" dir="ltr" id="mw-content-text" lang="uk"><div class="mw-pt-translate-header noprint" dir="ltr" lang="en">This page is a <span class="plainlinks"><a class="external text" href="http://oscada.org/wiki/index.php?title=Special:Translate&group=page-Documents%2FUser+API&action=page&filter=&language=uk" rel="nofollow noreferrer noopener" target="_blank">translated version</a></span> of the page <a class="external" href="http://oscada.org/wiki/Documents/User_API" title="Documents/User API">Documents/User API</a> and the translation is 100% complete.</div><hr /><div class="mw-pt-languages" dir="ltr" lang="en"><div class="mw-pt-languages-list autonym"><a class="mw-pt-languages-ui mw-pt-progress mw-pt-progress--complete" href="../en/User_API.html" title="Documents/User API (100% translated)">English</a> • ‎<a class="mw-pt-progress mw-pt-progress--high" href="../ru/User_API.html" title="ДокументациÑ/API Ð¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ñ‚ÐµÐ»Ñ (79% translated)">mRussian</a> • ‎<span class="mw-pt-languages-selected mw-pt-progress mw-pt-progress--complete">УкраїнÑька</span></div></div> <div style="float:right; border:1px solid gray; width:300px; padding:2px; margin-left: 10pt; margin-bottom: 10pt;"> <ul><li> <b>Ðвтор:</b> <a class="external" href="http://oscada.org/wiki/User:RomanSavochenko" title="User:RomanSavochenko">Роман Савоченко</a></li> <li> <b>Початково Ñтворено:</b> у <a class="external text" href="http://wiki.oscada.org/HomePageEn/Doc/ProgrammManual" rel="nofollow noreferrer noopener" target="_blank">Ñтарій Wiki</a> </li></ul> </div> <p>До початку Ð¿Ñ€Ð¾Ð³Ñ€Ð°Ð¼ÑƒÐ²Ð°Ð½Ð½Ñ Ñƒ OpenSCADA Ви маєте вивчити Ñтруктуру об'єктів програми (Об'єктна модель) у <a href="Program_manual.html" title="Special:MyLanguage/Documents/Program manual">поÑібнику по програмі OpenSCADA</a> та на риÑунку 1. </p> <div class="center"><div class="thumb tnone"><div class="thumbinner" style="width:1202px;"><a class="image" href="http://oscada.org/wiki/File:Oscada_UserOM_uk.png"><img class="thumbimage" height="542" src="files/Oscada_UserOM_uk.png" width="1200" /></a> <div class="thumbcaption">РиÑ. 1. КориÑтувацька об'єктна модель Ñдра OpenSCADA.</div></div></div></div> <p>З цього документу Ви побачите, що можете, Ñк кориÑтувач, програмувати наÑтупні чаÑтини OpenSCADA: </p> <ul><li> <a href="DAQ.html#Virtual" title="Special:MyLanguage/Documents/DAQ">Джерела логічного Ñ€Ñ–Ð²Ð½Ñ Ð¿Ñ–Ð´ÑиÑтеми "Збір даних"</a>.</li> <li> ТранÑпортні протоколи, доÑтупні Ð´Ð»Ñ ÐºÐ¾Ñ€Ð¸Ñтувацького програмуваннÑ, такі Ñк: <a href="Modules/UserProtocol.html" title="Special:MyLanguage/Modules/UserProtocol">КориÑтувацький протокол</a>, <a href="Modules/ModBus.html" title="Special:MyLanguage/Modules/ModBus">ModBus вузли типу "Данні"</a>, <a href="Modules/WebUser.html" title="Special:MyLanguage/Modules/WebUser">Web-інтерфейÑи від кориÑтувача</a>, ...</li> <li> <a href="Modules/VCAEngine.html" title="Special:MyLanguage/Modules/VCAEngine">Середовище Візуалізації та Ð£Ð¿Ñ€Ð°Ð²Ð»Ñ–Ð½Ð½Ñ (СВУ)</a>, у процедурах віджетів.</li></ul> <p>API кориÑтувацького Ð¿Ñ€Ð¾Ð³Ñ€Ð°Ð¼ÑƒÐ²Ð°Ð½Ð½Ñ Ð¿Ñ€ÐµÐ´ÑтавлÑÑ” Ñобою дерево об'єктів OpenSCADA (РиÑ.1), кожний об'єкт Ñкого може надавати влаÑний перелік влаÑтивоÑтей та функцій. ВлаÑтивоÑÑ‚Ñ– та функції об'єктів можуть викориÑтовуватиÑÑ ÐºÐ¾Ñ€Ð¸Ñтувачем у процедурах на мовах кориÑтувацького Ð¿Ñ€Ð¾Ð³Ñ€Ð°Ð¼ÑƒÐ²Ð°Ð½Ð½Ñ OpenSCADA. </p><p>Ðа цей Ñ‡Ð°Ñ OpenSCADA надає тільки одну мову текÑтового Ð¿Ñ€Ð¾Ð³Ñ€Ð°Ð¼ÑƒÐ²Ð°Ð½Ð½Ñ â€” <a href="#JavaLikeCalc">JavaLikeCalc</a>, відповідно Ви також повинні Ñ—Ñ— вивчити перед початком. Точкою входу Ð´Ð»Ñ Ð´Ð¾Ñтупу до об'єктів OpenSCADA (РиÑ.1) з мови кориÑтувацького Ð¿Ñ€Ð¾Ð³Ñ€Ð°Ð¼ÑƒÐ²Ð°Ð½Ð½Ñ JavaLikeCalc Ñ” зарезервоване Ñлово "SYS", кореневого об'єкту OpenSCADA. Ðаприклад, Ð´Ð»Ñ Ð´Ð¾Ñтупу до функції вихідного транÑпорту треба запиÑати: <b>SYS.Transport.Serial.out_ModBus.messIO(mess);</b>. </p><p>API об'єктів, Ñкі надаютьÑÑ Ð¼Ð¾Ð´ÑƒÐ»Ñми, опиÑуютьÑÑ Ñƒ влаÑній документації модулів та тут до неї надаютьÑÑ Ð¿Ð¾ÑиланнÑ. </p> <div class="toc" id="toc"><div id="toctitle"><h2>Contents</h2></div> <ul> <li class="toclevel-1 tocsection-1"><a href="#.D0.9A.D0.BE.D1.80.D0.B8.D1.81.D1.82.D1.83.D0.B2.D0.B0.D1.86.D1.8C.D0.BA.D0.B0_.D0.BC.D0.BE.D0.B2.D0.B0_.D0.BF.D1.80.D0.BE.D0.B3.D1.80.D0.B0.D0.BC.D1.83.D0.B2.D0.B0.D0.BD.D0.BD.D1.8F_JavaLikeCalc"><span class="tocnumber">1</span> <span class="toctext"><span>КориÑтувацька мова Ð¿Ñ€Ð¾Ð³Ñ€Ð°Ð¼ÑƒÐ²Ð°Ð½Ð½Ñ JavaLikeCalc</span></span></a> <ul> <li class="toclevel-2"><a href="#.D0.95.D0.BB.D0.B5.D0.BC.D0.B5.D0.BD.D1.82.D0.B8_.D0.BC.D0.BE.D0.B2.D0.B8"><span class="tocnumber">1.1</span> <span class="toctext">Елементи мови</span></a></li> <li class="toclevel-2"><a href="#.D0.9E.D0.BF.D0.B5.D1.80.D0.B0.D1.86.D1.96.D1.97_.D0.BC.D0.BE.D0.B2.D0.B8"><span class="tocnumber">1.2</span> <span class="toctext">Операції мови</span></a></li> <li class="toclevel-2"><a href="#.D0.92.D0.B1.D1.83.D0.B4.D0.BE.D0.B2.D0.B0.D0.BD.D1.96_.D1.84.D1.83.D0.BD.D0.BA.D1.86.D1.96.D1.97_.D0.BC.D0.BE.D0.B2.D0.B8"><span class="tocnumber">1.3</span> <span class="toctext">Вбудовані функції мови</span></a></li> <li class="toclevel-2"><a href="#.D0.9E.D0.BF.D0.B5.D1.80.D0.B0.D1.82.D0.BE.D1.80.D0.B8_.D0.BC.D0.BE.D0.B2.D0.B8"><span class="tocnumber">1.4</span> <span class="toctext">Оператори мови</span></a> <ul> <li class="toclevel-3"><a href="#.D0.A3.D0.BC.D0.BE.D0.B2.D0.BD.D1.96_.D0.BE.D0.BF.D0.B5.D1.80.D0.B0.D1.82.D0.BE.D1.80.D0.B8"><span class="tocnumber">1.4.1</span> <span class="toctext">Умовні оператори</span></a></li> <li class="toclevel-3"><a href="#.D0.A6.D0.B8.D0.BA.D0.BB.D0.B8"><span class="tocnumber">1.4.2</span> <span class="toctext">Цикли</span></a></li> <li class="toclevel-3"><a href="#.D0.92.D0.BD.D1.83.D1.82.D1.80.D1.96.D1.88.D0.BD.D1.96_.D1.84.D1.83.D0.BD.D0.BA.D1.86.D1.96.D1.97"><span class="tocnumber">1.4.3</span> <span class="toctext">Внутрішні функції</span></a></li> <li class="toclevel-3"><a href="#.D0.A1.D0.BF.D0.B5.D1.86.D1.96.D0.B0.D0.BB.D1.8C.D0.BD.D1.96_.D1.81.D0.B8.D0.BC.D0.B2.D0.BE.D0.BB.D0.B8_.D1.81.D1.82.D1.80.D0.BE.D0.BA.D0.BE.D0.B2.D0.B8.D1.85_.D0.B7.D0.BC.D1.96.D0.BD.D0.BD.D0.B8.D1.85"><span class="tocnumber">1.4.4</span> <span class="toctext">Спеціальні Ñимволи Ñтрокових змінних</span></a></li> </ul> </li> </ul> </li> <li class="toclevel-1 tocsection-2"><a href="#.D0.97.D0.B0.D0.B3.D0.B0.D0.BB.D1.8C.D0.BD.D0.BE.D1.81.D0.B8.D1.81.D1.82.D0.B5.D0.BC.D0.BD.D1.96_.D0.BA.D0.BE.D1.80.D0.B8.D1.81.D1.82.D1.83.D0.B2.D0.B0.D1.86.D1.8C.D0.BA.D1.96_.D0.BE.D0.B1.27.D1.94.D0.BA.D1.82.D0.B8"><span class="tocnumber">2</span> <span class="toctext"><span>ЗагальноÑиÑтемні кориÑтувацькі об'єкти</span></span></a> <ul> <li class="toclevel-2 tocsection-3"><a href="#.D0.9E.D0.B1.27.D1.94.D0.BA.D1.82_.D0.BC.D0.B0.D1.81.D0.B8.D0.B2.D1.83_.28Array.29"><span class="tocnumber">2.1</span> <span class="toctext"><span>Об'єкт маÑиву (Array)</span></span></a></li> <li class="toclevel-2 tocsection-4"><a href="#.D0.9E.D0.B1.27.D1.94.D0.BA.D1.82_.D1.80.D0.B5.D0.B3.D1.83.D0.BB.D1.8F.D1.80.D0.BD.D0.BE.D0.B3.D0.BE_.D0.B2.D0.B8.D1.80.D0.B0.D0.B7.D1.83_.28RegExp.29"><span class="tocnumber">2.2</span> <span class="toctext"><span>Об'єкт регулÑрного виразу (RegExp)</span></span></a></li> <li class="toclevel-2 tocsection-5"><a href="#.D0.9E.D0.B1.27.D1.94.D0.BA.D1.82_.D0.B2.D1.83.D0.B7.D0.BB.D0.B0-.D1.82.D0.B5.D0.B3.D1.83_XML_.28XMLNodeObj.29"><span class="tocnumber">2.3</span> <span class="toctext">Об'єкт вузла-тегу XML (XMLNodeObj)</span></a></li> </ul> </li> <li class="toclevel-1 tocsection-6"><a href="#.D0.9F.D1.80.D0.BE.D0.B3.D1.80.D0.B0.D0.BC.D0.B0-.D1.81.D0.B8.D1.81.D1.82.D0.B5.D0.BC.D0.B0_.28SYS.29"><span class="tocnumber">3</span> <span class="toctext"><span>Програма-ÑиÑтема (SYS)</span></span></a></li> <li class="toclevel-1 tocsection-7"><a href="#.D0.91.D1.83.D0.B4.D1.8C_.D1.8F.D0.BA.D0.B8.D0.B9_.D0.BE.D0.B1.27.D1.94.D0.BA.D1.82_.28TCntrNode.29_.D0.B4.D0.B5.D1.80.D0.B5.D0.B2.D0.B0_OpenSCADA_.28SYS..2A.29"><span class="tocnumber">4</span> <span class="toctext"><span>Будь Ñкий об'єкт (TCntrNode) дерева OpenSCADA (SYS.*)</span></span></a></li> <li class="toclevel-1 tocsection-8"><a href="#.D0.9F.D1.96.D0.B4.D1.81.D0.B8.D1.81.D1.82.D0.B5.D0.BC.D0.B0_.22.D0.91.D0.B5.D0.B7.D0.BF.D0.B5.D0.BA.D0.B0.22_.28SYS.Security.29"><span class="tocnumber">5</span> <span class="toctext">ПідÑиÑтема "Безпека" (SYS.Security)</span></a></li> <li class="toclevel-1 tocsection-9"><a href="#.D0.9F.D1.96.D0.B4.D1.81.D0.B8.D1.81.D1.82.D0.B5.D0.BC.D0.B0_.22.D0.91.D0.94.22_.28SYS.BD.29"><span class="tocnumber">6</span> <span class="toctext"><span>ПідÑиÑтема "БД" (SYS.BD)</span></span></a></li> <li class="toclevel-1 tocsection-10"><a href="#.D0.9F.D1.96.D0.B4.D1.81.D0.B8.D1.81.D1.82.D0.B5.D0.BC.D0.B0_.22.D0.97.D0.B1.D1.96.D1.80_.D0.B4.D0.B0.D0.BD.D0.B8.D1.85.22_.28SYS.DAQ.29"><span class="tocnumber">7</span> <span class="toctext"><span>ПідÑиÑтема "Збір даних" (SYS.DAQ)</span></span></a> <ul> <li class="toclevel-2 tocsection-11"><a href="#.D0.9C.D0.BE.D0.B4.D1.83.D0.BB.D1.8C_DAQ.JavaLikeCalc"><span class="tocnumber">7.1</span> <span class="toctext">Модуль DAQ.JavaLikeCalc</span></a></li> <li class="toclevel-2 tocsection-12"><a href="#.D0.9C.D0.BE.D0.B4.D1.83.D0.BB.D1.8C_DAQ.LogicLev"><span class="tocnumber">7.2</span> <span class="toctext">Модуль DAQ.LogicLev</span></a></li> <li class="toclevel-2 tocsection-13"><a href="#.D0.9C.D0.BE.D0.B4.D1.83.D0.BB.D1.8C_DAQ.BlockCalc"><span class="tocnumber">7.3</span> <span class="toctext">Модуль DAQ.BlockCalc</span></a></li> <li class="toclevel-2 tocsection-14"><a href="#.D0.9C.D0.BE.D0.B4.D1.83.D0.BB.D1.8C_DAQ.ModBus"><span class="tocnumber">7.4</span> <span class="toctext">Модуль DAQ.ModBus</span></a></li> <li class="toclevel-2 tocsection-15"><a href="#.D0.9C.D0.BE.D0.B4.D1.83.D0.BB.D1.8C_DAQ.Siemens"><span class="tocnumber">7.5</span> <span class="toctext">Модуль DAQ.Siemens</span></a></li> <li class="toclevel-2 tocsection-16"><a href="#.D0.9C.D0.BE.D0.B4.D1.83.D0.BB.D1.8C_DAQ.OPC_UA"><span class="tocnumber">7.6</span> <span class="toctext">Модуль DAQ.OPC_UA</span></a></li> </ul> </li> <li class="toclevel-1 tocsection-17"><a href="#.D0.9F.D1.96.D0.B4.D1.81.D0.B8.D1.81.D1.82.D0.B5.D0.BC.D0.B0_.22.D0.90.D1.80.D1.85.D1.96.D0.B2.D0.B8-.D0.86.D1.81.D1.82.D0.BE.D1.80.D1.96.D1.8F.22_.28SYS.Archive.29"><span class="tocnumber">8</span> <span class="toctext"><span>ПідÑиÑтема "Ðрхіви-ІÑторіÑ" (SYS.Archive)</span></span></a></li> <li class="toclevel-1 tocsection-18"><a href="#.D0.9F.D1.96.D0.B4.D1.81.D0.B8.D1.81.D1.82.D0.B5.D0.BC.D0.B0_.22.D0.A2.D1.80.D0.B0.D0.BD.D1.81.D0.BF.D0.BE.D1.80.D1.82.D0.B8.22_.28SYS.Transport.29"><span class="tocnumber">9</span> <span class="toctext"><span>ПідÑиÑтема "ТранÑпорти" (SYS.Transport)</span></span></a></li> <li class="toclevel-1 tocsection-19"><a href="#.D0.9F.D1.96.D0.B4.D1.81.D0.B8.D1.81.D1.82.D0.B5.D0.BC.D0.B0_.22.D0.9F.D1.80.D0.BE.D1.82.D0.BE.D0.BA.D0.BE.D0.BB.D0.B8.22_.28SYS.Protocols.29"><span class="tocnumber">10</span> <span class="toctext">ПідÑиÑтема "Протоколи" (SYS.Protocols)</span></a> <ul> <li class="toclevel-2 tocsection-20"><a href="#.D0.9C.D0.BE.D0.B4.D1.83.D0.BB.D1.8C_Protocol.HTTP"><span class="tocnumber">10.1</span> <span class="toctext">Модуль Protocol.HTTP</span></a></li> </ul> </li> <li class="toclevel-1 tocsection-21"><a href="#.D0.9F.D1.96.D0.B4.D1.81.D0.B8.D1.81.D1.82.D0.B5.D0.BC.D0.B0_.22.D0.9A.D0.BE.D1.80.D0.B8.D1.81.D1.82.D1.83.D0.B2.D0.B0.D1.86.D1.8C.D0.BA.D1.96_.D1.96.D0.BD.D1.82.D0.B5.D1.80.D1.84.D0.B5.D0.B9.D1.81.D0.B8.22_.28SYS.UI.29"><span class="tocnumber">11</span> <span class="toctext"><span>ПідÑиÑтема "КориÑтувацькі інтерфейÑи" (SYS.UI)</span></span></a> <ul> <li class="toclevel-2 tocsection-22"><a href="#.D0.9C.D0.BE.D0.B4.D1.83.D0.BB.D1.8C_QTStarter"><span class="tocnumber">11.1</span> <span class="toctext">Модуль QTStarter</span></a></li> <li class="toclevel-2 tocsection-23"><a href="#.D0.9C.D0.BE.D0.B4.D1.83.D0.BB.D1.8C_UI.VCAEngine"><span class="tocnumber">11.2</span> <span class="toctext">Модуль UI.VCAEngine</span></a></li> </ul> </li> <li class="toclevel-1 tocsection-24"><a href="#.D0.9F.D1.96.D0.B4.D1.81.D0.B8.D1.81.D1.82.D0.B5.D0.BC.D0.B0_.22.D0.A1.D0.BF.D0.B5.D1.86.D1.96.D0.B0.D0.BB.D1.8C.D0.BD.D1.96.22_.28SYS.Special.29"><span class="tocnumber">12</span> <span class="toctext">ПідÑиÑтема "Спеціальні" (SYS.Special)</span></a> <ul> <li class="toclevel-2 tocsection-25"><a href="#.D0.9C.D0.BE.D0.B4.D1.83.D0.BB.D1.8C_.D0.91.D1.96.D0.B1.D0.BB.D1.96.D0.BE.D1.82.D0.B5.D0.BA.D0.B0_.D1.81.D0.B8.D1.81.D1.82.D0.B5.D0.BC.D0.BD.D0.BE.D0.B3.D0.BE_API_.D1.81.D0.B5.D1.80.D0.B5.D0.B4.D0.BE.D0.B2.D0.B8.D1.89.D0.B0_.D0.BA.D0.BE.D1.80.D0.B8.D1.81.D1.82.D1.83.D0.B2.D0.B0.D1.86.D1.8C.D0.BA.D0.BE.D0.B3.D0.BE_.D0.BF.D1.80.D0.BE.D0.B3.D1.80.D0.B0.D0.BC.D1.83.D0.B2.D0.B0.D0.BD.D0.BD.D1.8F_.28Special.FLibSYS.29"><span class="tocnumber">12.1</span> <span class="toctext">Модуль Бібліотека ÑиÑтемного API Ñередовища кориÑтувацького Ð¿Ñ€Ð¾Ð³Ñ€Ð°Ð¼ÑƒÐ²Ð°Ð½Ð½Ñ (Special.FLibSYS)</span></a></li> <li class="toclevel-2 tocsection-26"><a href="#.D0.9C.D0.BE.D0.B4.D1.83.D0.BB.D1.8C_.D0.91.D1.96.D0.B1.D0.BB.D1.96.D0.BE.D1.82.D0.B5.D0.BA.D0.B0_.D1.81.D1.82.D0.B0.D0.BD.D0.B4.D0.B0.D1.80.D1.82.D0.BD.D0.B8.D1.85_.D0.BC.D0.B0.D1.82.D0.B5.D0.BC.D0.B0.D1.82.D0.B8.D1.87.D0.BD.D0.B8.D1.85_.D1.84.D1.83.D0.BD.D0.BA.D1.86.D1.96.D0.B9_.28Special.FLibMath.29"><span class="tocnumber">12.2</span> <span class="toctext">Модуль Бібліотека Ñтандартних математичних функцій (Special.FLibMath)</span></a></li> <li class="toclevel-2 tocsection-27"><a href="#.D0.9C.D0.BE.D0.B4.D1.83.D0.BB.D1.8C_.D0.91.D1.96.D0.B1.D0.BB.D1.96.D0.BE.D1.82.D0.B5.D0.BA.D0.B0_.D1.84.D1.83.D0.BD.D0.BA.D1.86.D1.96.D0.B9_.D1.81.D1.83.D0.BC.D1.96.D1.81.D0.BD.D0.BE.D1.81.D1.82.D1.96_.D0.B7_SCADA_Complex1_.D1.84.D1.96.D1.80.D0.BC.D0.B8_.D0.A2.D0.9E.D0.92_.D0.9D.D0.86.D0.9F_.22DIYA.22_.28Special.FLibComplex1.29"><span class="tocnumber">12.3</span> <span class="toctext">Модуль Бібліотека функцій ÑуміÑноÑÑ‚Ñ– з SCADA Complex1 фірми ТОВ ÐІП "DIYA" (Special.FLibComplex1)</span></a></li> </ul> </li> <li class="toclevel-1 tocsection-28"><a href="#.D0.91.D1.96.D0.B1.D0.BB.D1.96.D0.BE.D1.82.D0.B5.D0.BA.D0.B8_.D1.84.D1.83.D0.BD.D0.BA.D1.86.D1.96.D0.B9_.D0.BA.D0.BE.D1.80.D0.B8.D1.81.D1.82.D1.83.D0.B2.D0.B0.D1.87.D0.B0"><span class="tocnumber">13</span> <span class="toctext">Бібліотеки функцій кориÑтувача</span></a></li> <li class="toclevel-1 tocsection-29"><a href="#.D0.9F.D0.BE.D1.81.D0.B8.D0.BB.D0.B0.D0.BD.D0.BD.D1.8F"><span class="tocnumber">14</span> <span class="toctext">ПоÑиланнÑ</span></a></li> </ul> </div> <h2><span class="mw-headline" id=".D0.9A.D0.BE.D1.80.D0.B8.D1.81.D1.82.D1.83.D0.B2.D0.B0.D1.86.D1.8C.D0.BA.D0.B0_.D0.BC.D0.BE.D0.B2.D0.B0_.D0.BF.D1.80.D0.BE.D0.B3.D1.80.D0.B0.D0.BC.D1.83.D0.B2.D0.B0.D0.BD.D0.BD.D1.8F_JavaLikeCalc"><span class="mw-headline-number">1</span> <span id="JavaLikeCalc" title="#JavaLikeCalc"><a href="Modules/JavaLikeCalc.html" title="Special:MyLanguage/Modules/JavaLikeCalc">КориÑтувацька мова Ð¿Ñ€Ð¾Ð³Ñ€Ð°Ð¼ÑƒÐ²Ð°Ð½Ð½Ñ JavaLikeCalc</a></span></span></h2> <h3><span class="mw-headline" id=".D0.95.D0.BB.D0.B5.D0.BC.D0.B5.D0.BD.D1.82.D0.B8_.D0.BC.D0.BE.D0.B2.D0.B8"><span class="mw-headline-number">1.1</span> Елементи мови</span></h3> <p><i>Ключові Ñлова:</i> <b>if</b>, <b>else</b>, <b>while</b>, <b>for</b>, <b>in</b>, <b>break</b>, <b>continue</b>, <b>return</b>, <b>function</b>, <b>using</b>.<br /> <i>ПоÑтійні:</i> </p> <ul><li> деÑÑткові: цифри <b>0-9</b> (12, 111, 678);</li> <li> віÑімкові: цифри <b>0-7</b> (012, 011, 076);</li> <li> шіÑтнадцÑткові: цифри <b>0-9</b>, літери <b>a-f</b> або <b>A-F</b> (0x12, 0XAB);</li> <li> реальні: <b>345.23</b>, <b>2.1e5</b>, <b>3.4E-5</b>, <b>3e6</b>;</li> <li> логічні: <b>true</b>, <b>false</b>;</li> <li> Ñтрокові: <b>"hello"</b>, без переходу на наÑтупний Ñ€Ñдок однак з підтримкою прÑмої конкатенації Ñтрокових конÑтант.</li></ul> <p><i>Типи змінних:</i> </p> <ul><li> ціле: <b>-2<sup>63</sup></b> ... <b>2<sup>63</sup></b>, <b>EVAL_INT</b>(-9223372036854775807);</li> <li> реальне: <b>3.4*10<sup>308</sup></b>, <b>EVAL_REAL</b>(-1.79E308);</li> <li> логічне: <b>false</b>, <b>true</b>, <b>EVAL_BOOL</b>(2);</li> <li> Ñ€Ñдок: поÑлідовніÑÑ‚ÑŒ Ñимволів-байтів (0...255) будь Ñкої довжини, обмеженої об'ємом пам'ÑÑ‚Ñ– та Ñховищем у БД; <b>EVAL_STR</b>("<EVAL>").</li></ul> <p><i>Вбудовані конÑтанти:</i> <b>pi</b> = 3.14159265..., <b>e</b> = 2.71828182..., <b>EVAL_BOOL</b>(2), <b>EVAL_INT</b>(-9223372036854775807), <b>null</b>,<b>EVAL</b>,<b>EVAL_REAL</b>(-1.79E308), <b>EVAL_STR</b>("<EVAL>")<br /> <i>Глобальні атрибути параметрів DAQ (починаючи з підÑиÑтеми DAQ та у виглÑді <b>{Тип Ð¼Ð¾Ð´ÑƒÐ»Ñ DAQ}.{Об'єкт контролеру}.{Параметр}.{Ðтрибут}</b>).</i><br /> <i>Функції та параметри <a href="User_API.html" title="Special:MyLanguage/Documents/User API">об'єктної моделі OpenSCADA</a>.</i> </p><p><a class="image" href="http://oscada.org/wiki/File:At.png"><img alt="At.png" height="22" src="../en/files/At.png" width="22" /></a> Варіанти <b>EVAL</b> (Error VALue) Ñ– <b>null</b> опрацьовуютьÑÑ Ð¾Ñобливо через Ð¿ÐµÑ€ÐµÑ‚Ð²Ð¾Ñ€ÐµÐ½Ð½Ñ Ð¾Ð´Ð½Ð¾Ð³Ð¾ у інше залежно від викориÑтаного базового типу, тобто ви вільні у викориÑтанні лише <b>null</b> або <b>EVAL</b> у будь Ñких випадках. </p> <h3><span class="mw-headline" id=".D0.9E.D0.BF.D0.B5.D1.80.D0.B0.D1.86.D1.96.D1.97_.D0.BC.D0.BE.D0.B2.D0.B8"><span class="mw-headline-number">1.2</span> Операції мови</span></h3> <p>Операції, підтримувані мовою, предÑтавлено у таблиці нижче. Пріоритет операцій зменшуєтьÑÑ Ð·Ð²ÐµÑ€Ñ…Ñƒ донизу. Операції з однаковим пріоритетом входÑÑ‚ÑŒ до однієї групи кольору. </p> <table bgcolor="#FFFFF0" border="1" cellspacing="0"> <tr align="center" bgcolor="#83D8FF"><td><b>Символ</b></td><td><b>ОпиÑ</b></td></tr> <tr bgcolor="#FFFFC0"><td>()</td><td>Виклик функції.</td></tr> <tr><td>{}</td><td>Програмні блоки.</td></tr> <tr><td>++</td><td>Інкремент (поÑÑ‚ та пре).</td></tr> <tr><td>--</td><td>Декремент (поÑÑ‚ та пре).</td></tr> <tr bgcolor="#FFFFC0"><td>-</td><td>Унарний мінуÑ.</td></tr> <tr bgcolor="#FFFFC0"><td>!</td><td>Логічне запереченнÑ.</td></tr> <tr bgcolor="#FFFFC0"><td>~</td><td>Побітове запереченнÑ.</td></tr> <tr><td>*</td><td>МноженнÑ.</td></tr> <tr><td>/</td><td>ДіленнÑ.</td></tr> <tr><td>%</td><td>Залишок від цілочиÑельного діленнÑ.</td></tr> <tr bgcolor="#FFFFC0"><td>+</td><td>СкладаннÑ</td></tr> <tr bgcolor="#FFFFC0"><td>-</td><td>ВідніманнÑ</td></tr> <tr><td><<</td><td>ПорозрÑдний зÑув ліворуч</td></tr> <tr><td>>></td><td>ПорозрÑдний зÑув праворуч</td></tr> <tr bgcolor="#FFFFC0"><td>></td><td>Більше</td></tr> <tr bgcolor="#FFFFC0"><td>>=</td><td>Більше або дорівнює</td></tr> <tr bgcolor="#FFFFC0"><td><</td><td>Менше</td></tr> <tr bgcolor="#FFFFC0"><td><=</td><td>Менше або дорівнює</td></tr> <tr bgcolor="#FFFFC0"><td>==</td><td>Дорівнює</td></tr> <tr bgcolor="#FFFFC0"><td>!=</td><td>Ðе дорівнює</td></tr> <tr><td>|</td><td>ПорозрÑдне "ÐБО"</td></tr> <tr><td>&</td><td>ПорозрÑдне "ТÐК"</td></tr> <tr><td>^</td><td>ПорозрÑдне "Виключне ÐБО"</td></tr> <tr bgcolor="#FFFFC0"><td>&&</td><td>Логічне "ТÐК"</td></tr> <tr bgcolor="#FFFFC0"><td>||</td><td>Логічне "ÐБО"</td></tr> <tr><td>?:</td><td>Умовна Ð¾Ð¿ÐµÑ€Ð°Ñ†Ñ–Ñ "i=(i<0)?0:i;"</td></tr> <tr bgcolor="#FFFFC0"><td>=</td><td>ПривлаÑненнÑ.</td></tr> <tr bgcolor="#FFFFC0"><td>+=</td><td>ПривлаÑÐ½ÐµÐ½Ð½Ñ Ñ–Ð· ÑкладаннÑм.</td></tr> <tr bgcolor="#FFFFC0"><td>-=</td><td>ПривлаÑÐ½ÐµÐ½Ð½Ñ Ñ–Ð· відніманнÑм.</td></tr> <tr bgcolor="#FFFFC0"><td>*=</td><td>ПривлаÑÐ½ÐµÐ½Ð½Ñ Ñ–Ð· множеннÑм.</td></tr> <tr bgcolor="#FFFFC0"><td>/=</td><td>ПривлаÑÐ½ÐµÐ½Ð½Ñ Ñ–Ð· діленнÑм.</td></tr> </table> <h3><span class="mw-headline" id=".D0.92.D0.B1.D1.83.D0.B4.D0.BE.D0.B2.D0.B0.D0.BD.D1.96_.D1.84.D1.83.D0.BD.D0.BA.D1.86.D1.96.D1.97_.D0.BC.D0.BE.D0.B2.D0.B8"><span class="mw-headline-number">1.3</span> Вбудовані функції мови</span></h3> <p>Віртуальною машиною мови передбачено наÑтупний набір вбудованих функцій загального призначеннÑ: </p> <ul><li> <i>double max(double x, double x1)</i> — макÑимальне Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ Ñ–Ð· <i>x</i> та <i>x1</i>;</li> <li> <i>double min(double x, double x1)</i> — мінімальне Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ Ñ–Ð· <i>x</i> та <i>x1</i>;</li> <li> <i>string typeof(ElTp vl)</i> — тип Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ <i>vl</i>;</li> <li> <i>string tr(string base)</i> — переклад базового <i>base</i> повідомленнÑ.</li></ul> <p>Ð”Ð»Ñ Ð·Ð°Ð±ÐµÐ·Ð¿ÐµÑ‡ÐµÐ½Ð½Ñ Ð²Ð¸Ñокої швидкоÑÑ‚Ñ– роботи у математичних обчиÑленнÑÑ… модуль надає вбудовані математичні функції, Ñкі викликаютьÑÑ Ð½Ð° рівні команд віртуальної машини: </p> <ul><li> <i>double sin(double x)</i> — ÑÐ¸Ð½ÑƒÑ <i>x</i>;</li> <li> <i>double cos(double x)</i> — коÑÐ¸Ð½ÑƒÑ <i>x</i>;</li> <li> <i>double tan(double x)</i> — Ñ‚Ð°Ð½Ð³ÐµÐ½Ñ <i>x</i>;</li> <li> <i>double sinh(double x)</i> — ÑÐ¸Ð½ÑƒÑ Ð³Ñ–Ð¿ÐµÑ€Ð±Ð¾Ð»Ñ–Ñ‡Ð½Ð¸Ð¹ від <i>x</i>;</li> <li> <i>double cosh(double x)</i> — коÑÐ¸Ð½ÑƒÑ Ð³Ñ–Ð¿ÐµÑ€Ð±Ð¾Ð»Ñ–Ñ‡Ð½Ð¸Ð¹ від <i>x</i>;</li> <li> <i>double tanh(double x)</i> — Ñ‚Ð°Ð½Ð³ÐµÐ½Ñ Ð³Ñ–Ð¿ÐµÑ€Ð±Ð¾Ð»Ñ–Ñ‡Ð½Ð¸Ð¹ від <i>x</i>;</li> <li> <i>double asin(double x)</i> — аркÑÐ¸Ð½ÑƒÑ Ð²Ñ–Ð´ <i>x</i>;</li> <li> <i>double acos(double x)</i> — арккоÑÐ¸Ð½ÑƒÑ Ð²Ñ–Ð´ <i>x</i>;</li> <li> <i>double atan(double x)</i> — Ð°Ñ€ÐºÑ‚Ð°Ð½Ð³ÐµÐ½Ñ Ð²Ñ–Ð´ <i>x</i>;</li> <li> <i>double rand(double x)</i> — випадкове чиÑло від 0 до <i>x</i>;</li> <li> <i>double lg(double x)</i> — деÑÑтковий логарифм від <i>x</i>;</li> <li> <i>double ln(double x)</i> — натуральний логарифм від <i>x</i>;</li> <li> <i>double exp(double x)</i> — екÑпонента від <i>x</i>;</li> <li> <i>double pow(double x, double x1)</i> — Ð·Ð²ÐµÐ´ÐµÐ½Ð½Ñ <i>x</i> у Ñтепінь <i>x1</i>;</li> <li> <i>double sqrt(double x)</i> — корінь квадратний від <i>x</i>;</li> <li> <i>double abs(double x)</i> — абÑолютне Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ Ð²Ñ–Ð´ <i>x</i>;</li> <li> <i>double sign(double x)</i> — знак чиÑла <i>x</i>;</li> <li> <i>double ceil(double x)</i> — Ð¾ÐºÑ€ÑƒÐ³Ð»ÐµÐ½Ð½Ñ Ñ‡Ð¸Ñла <i>x</i> до більшого цілого;</li> <li> <i>double floor(double x)</i> — Ð¾ÐºÑ€ÑƒÐ³Ð»ÐµÐ½Ð½Ñ Ñ‡Ð¸Ñла <i>x</i> до меншого цілого.</li></ul> <h3><span class="mw-headline" id=".D0.9E.D0.BF.D0.B5.D1.80.D0.B0.D1.82.D0.BE.D1.80.D0.B8_.D0.BC.D0.BE.D0.B2.D0.B8"><span class="mw-headline-number">1.4</span> Оператори мови</span></h3> <p>Загальний перелік операторів мови: </p> <ul><li> <i>var</i> — оператор ініціалізації змінної; Ð²Ð¸Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ Ð·Ð¼Ñ–Ð½Ð½Ð¾Ñ— без привлаÑÐ½ÐµÐ½Ð½Ñ Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ Ñ€ÐµÐ·ÐµÑ€Ð²ÑƒÑ” Ñ—Ñ— зі значеннÑм <b>null</b>-<b>EVAL</b>, що дозволÑÑ” здійÑнити одноразову ініціалізацію Ñкладних типів даних на кшталт об'єкту, через прÑме порівнÑÐ½Ð½Ñ Ñ– перевірку із <i>isEVal()</i>;</li> <li> <i>if</i> — оператор умови "ЯКЩО";</li> <li> <i>else</i> — оператор умови "ІÐÐКШЕ";</li> <li> <i>while</i> — Ð²Ð¸Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ Ñ†Ð¸ÐºÐ»Ñƒ "ПОКИ";</li> <li> <i>for</i> — Ð²Ð¸Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ Ñ†Ð¸ÐºÐ»Ñƒ "ДЛЯ";</li> <li> <i>in</i> — роздільник циклу "ДЛЯ" Ð´Ð»Ñ Ð¿ÐµÑ€ÐµÐ±Ð¾Ñ€Ñƒ влаÑтивоÑтей об'єкту;</li> <li> <i>break</i> — Ð¿ÐµÑ€ÐµÑ€Ð¸Ð²Ð°Ð½Ð½Ñ Ð²Ð¸ÐºÐ¾Ð½Ð°Ð½Ð½Ñ Ñ†Ð¸ÐºÐ»Ñƒ;</li> <li> <i>continue</i> — продовжити Ð²Ð¸ÐºÐ¾Ð½Ð°Ð½Ð½Ñ Ñ†Ð¸ÐºÐ»Ñƒ з початку;</li> <li> <i>function</i> — Ð²Ð¸Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ Ð²Ð½ÑƒÑ‚Ñ€Ñ–ÑˆÐ½ÑŒÐ¾Ñ— функції;</li> <li> <i>using</i> — дозволÑÑ” вÑтановити проÑÑ‚Ñ–Ñ€ видимоÑÑ‚Ñ– зовнішніх функцій чаÑто викориÑтовної бібліотеки (<b>using Special.FLibSYS;</b>) Ð´Ð»Ñ Ð½Ð°Ñтупного Ð·Ð²ÐµÑ€Ð½ÐµÐ½Ð½Ñ Ñ‚Ñ–Ð»ÑŒÐºÐ¸ за назвою функції, не має ефекту Ð´Ð»Ñ Ð¾Ð±'єктного доÑтупу;</li> <li> <i>return</i> — Ð¿ÐµÑ€ÐµÑ€Ð¸Ð²Ð°Ð½Ð½Ñ Ñ„ÑƒÐ½ÐºÑ†Ñ–Ñ— та Ð¿Ð¾Ð²ÐµÑ€Ð½ÐµÐ½Ð½Ñ Ñ€ÐµÐ·ÑƒÐ»ÑŒÑ‚Ð°Ñ‚Ñƒ, Ñкий копіюєтьÑÑ Ð´Ð¾ атрибуту із ознакою Ð¿Ð¾Ð²ÐµÑ€Ð½ÐµÐ½Ð½Ñ (<b>return 123;</b>); в Ñередині внутрішньої функції здійÑнюєтьÑÑ Ñ—Ñ— Ð·Ð°Ð²ÐµÑ€ÑˆÐµÐ½Ð½Ñ Ð· визначеним результатом;</li> <li> <i>new</i> — ÑÑ‚Ð²Ð¾Ñ€ÐµÐ½Ð½Ñ Ð¾Ð±'єкту, реалізовано длÑ: загальний об'єкт "Object", маÑив "Array" та регулÑрні вирази "RegExp";</li> <li> <i>delete</i> — видаленнÑ/Ð·Ð²Ñ–Ð»ÑŒÐ½ÐµÐ½Ð½Ñ Ð¾Ð±'єкту або його влаÑтивоÑтей, при цьому: внутрішні змінні вÑтановлюютьÑÑ Ñƒ <b>null</b>-<b>EVAL</b>, зовнішні замінюютьÑÑ Ð¿Ð¾Ñ€Ð¾Ð¶Ð½Ñ–Ð¼ об'єктом, а влаÑтивоÑÑ‚Ñ– об'єкту очищуютьÑÑ.</li></ul> <h4><span class="mw-headline" id=".D0.A3.D0.BC.D0.BE.D0.B2.D0.BD.D1.96_.D0.BE.D0.BF.D0.B5.D1.80.D0.B0.D1.82.D0.BE.D1.80.D0.B8"><span class="mw-headline-number">1.4.1</span> Умовні оператори</span></h4> <p>Мовою підтримуютьÑÑ Ð´Ð²Ð° типи умов. Перший — це операції умови Ð´Ð»Ñ Ð²Ð¸ÐºÐ¾Ñ€Ð¸ÑÑ‚Ð°Ð½Ð½Ñ Ð²Ñередині виразу, другий — глобальний, заÑнований на умовних операторах. </p><p>Умова вÑередині виразу будуєтьÑÑ Ð½Ð° операціÑÑ… '?' та ':'. У ÑкоÑÑ‚Ñ– прикладу можна запиÑати наÑтупний практичний вираз: </p> <div class="mw-highlight mw-content-ltr" dir="ltr"><pre><span class="nx">st_open</span> <span class="o">=</span> <span class="p">(</span><span class="nx">pos</span> <span class="o">>=</span> <span class="mi">100</span><span class="p">)</span> <span class="o">?</span> <span class="kc">true</span> <span class="o">:</span> <span class="kc">false</span><span class="p">;</span> </pre></div> <p>Що читаєтьÑÑ Ñк — Ñкщо змінна <i>pos</i> більша або дорівнює <b>100</b>, тоді змінній <i>st_open</i> привлаÑнюєтьÑÑ Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ <b>true</b>, інакше — <b>false</b>. </p><p>Глобальна умова будуєтьÑÑ Ð½Ð° оÑнові умовних операторів "if" та "else". У ÑкоÑÑ‚Ñ– прикладу можна привеÑти той-же вираз, але запиÑаний у інший ÑпоÑіб: </p> <div class="mw-highlight mw-content-ltr" dir="ltr"><pre><span class="k">if</span><span class="p">(</span><span class="nx">pos</span> <span class="o">></span> <span class="mi">100</span><span class="p">)</span> <span class="nx">st_open</span> <span class="o">=</span> <span class="kc">true</span><span class="p">;</span> <span class="k">else</span> <span class="nx">st_open</span> <span class="o">=</span> <span class="kc">false</span><span class="p">;</span> </pre></div> <h4><span class="mw-headline" id=".D0.A6.D0.B8.D0.BA.D0.BB.D0.B8"><span class="mw-headline-number">1.4.2</span> Цикли</span></h4> <p>ПідтримуєтьÑÑ Ñ‚Ñ€Ð¸ типи циклів: <b>while</b>, <b>for</b> та <b>for-in</b>. СинтакÑÐ¸Ñ Ñ†Ð¸ÐºÐ»Ñ–Ð² відповідає мовам програмуваннÑ: C++, Java та JavaScript. </p><p>Цикл <b>while</b>, загалом, запиÑуєтьÑÑ Ð½Ð°Ñтупним чином: <b>while({умова}) {тіло циклу};</b><br /> Цикл <b>for</b> запиÑуєтьÑÑ Ð½Ð°Ñтупним чином: <b>for({пре-ініціаліз};{умова};{поÑÑ‚-обчиÑленнÑ}) {тіло циклу};</b><br /> Цикл <b>for-in</b> запиÑуєтьÑÑ Ð½Ð°Ñтупним чином: <b>for({змінна} in {об'єкт}) {тіло циклу};</b><br /> Де: </p> <dl><dd><i>{умова}</i> — вираз, Ñкий визначає умову;</dd> <dd><i>{тіло циклу}</i> — тіло циклу множинного виконаннÑ;</dd> <dd><i>{пре-ініціаліз}</i> — вираз попередньої ініціалізації змінних циклу;</dd> <dd><i>{поÑÑ‚-обчиÑленнÑ}</i> — вираз модифікації параметрів циклу піÑÐ»Ñ Ñ‡ÐµÑ€Ð³Ð¾Ð²Ð¾Ñ— ітерації;</dd> <dd><i>{змінна}</i> — змінна, Ñка буде міÑтити ім'Ñ Ð²Ð»Ð°ÑтивоÑÑ‚Ñ– об'єкта при переборі;</dd> <dd><i>{об'єкт}</i> — об'єкт Ð´Ð»Ñ Ñкого здійÑнюєтьÑÑ Ð¿ÐµÑ€ÐµÐ±Ñ–Ñ€ влаÑтивоÑтей.</dd></dl> <h4><span class="mw-headline" id=".D0.92.D0.BD.D1.83.D1.82.D1.80.D1.96.D1.88.D0.BD.D1.96_.D1.84.D1.83.D0.BD.D0.BA.D1.86.D1.96.D1.97"><span class="mw-headline-number">1.4.3</span> Внутрішні функції</span></h4> <p>Мова підтримує Ð²Ð¸Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ Ñ‚Ð° виклик внутрішніх функцій. Ð”Ð»Ñ Ð²Ð¸Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ Ð²Ð½ÑƒÑ‚Ñ€Ñ–ÑˆÐ½ÑŒÐ¾Ñ— функції викориÑтовуєтьÑÑ ÐºÐ»ÑŽÑ‡Ð¾Ð²Ðµ Ñлово "function" та в цілому Ð²Ð¸Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ Ð¼Ð°Ñ” ÑинтакÑиÑ: <b>function {ім'ÑФ} ({зм1}, {зм2}, ... {змN}) { {тіло функції} }</b>. Ð’Ð¸Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ Ð²Ð½ÑƒÑ‚Ñ€Ñ–ÑˆÐ½ÑŒÐ¾Ñ— функції вÑередині іншої недозволене однак дозволено виклик раніш визначеної. </p><p>Виклик внутрішньої функції здійÑнюєтьÑÑ Ñƒ типовий ÑпоÑіб, Ñк процедура <b>{ім'ÑФ}({var1}, {var2}, ... {varN});</b> або Ñк Ñ„ÑƒÐ½ÐºÑ†Ñ–Ñ <b>{змРез} = {ім'ÑФ}({зм1}, {зм2}, ... {змN});</b>. Виклик внутрішніх функцій допуÑтимий тільки піÑÐ»Ñ Ñ—Ñ… декларації вище! </p><p>Ð’ÑÑ– змінні, визначені у оÑновному тілі, недоÑтупні вÑередині внутрішніх функцій Ñ– можуть бути передані через двобічні аргументи викликуваної внутрішньої функції або через аргументи оÑновної функції. Ð’ÑÑ– змінні, визначені в Ñередині внутрішньої функції, мають влаÑний проÑÑ‚Ñ–Ñ€ назв та недоÑтупні із оÑновного тіла, або будь Ñкої іншої внутрішньої функції, та можуть бути передані в оÑновне тіло через двобічні аргументи, результат викликуваної внутрішньої функції або через аргументи оÑновної функції. Змінні внутрішньої функції реєÑтруютьÑÑ Ð´Ð»Ñ Ð·Ð±ÐµÑ€ÐµÐ¶ÐµÐ½Ð½Ñ/Ð²Ñ–Ð´Ð½Ð¾Ð²Ð»ÐµÐ½Ð½Ñ Ñ—Ñ… контекÑту піÑÐ»Ñ Ð´Ñ€ÑƒÐ³Ð¾Ð³Ð¾ та більше входу до функції, тож вони цілковито підтримують рекурÑивні виклики! </p><p>Оператор "return", в Ñередині внутрішньої функції, здійÑнює контрольоване Ñ—Ñ— Ð·Ð°Ð²ÐµÑ€ÑˆÐµÐ½Ð½Ñ Ñ‚Ð° Ñ€Ð¾Ð·Ñ‚Ð°ÑˆÑƒÐ²Ð°Ð½Ð½Ñ Ð²ÐºÐ°Ð·Ð°Ð½Ð¾Ñ— змінної, або результату виразу, Ñк результату викликуваної внутрішньої функції. </p><p>Приклад типового Ð²Ð¸Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ Ñ‚Ð° викориÑÑ‚Ð°Ð½Ð½Ñ Ð²Ð½ÑƒÑ‚Ñ€Ñ–ÑˆÐ½ÑŒÐ¾Ñ— функції наведено далі: </p> <div class="mw-highlight mw-content-ltr" dir="ltr"><pre><span class="kd">function</span> <span class="nx">sum</span><span class="p">(</span><span class="nx">a</span><span class="p">,</span> <span class="nx">b</span><span class="p">,</span> <span class="nx">c</span><span class="p">,</span> <span class="nx">d</span><span class="p">)</span> <span class="p">{</span> <span class="k">return</span> <span class="nx">a</span> <span class="o">+</span> <span class="p">((</span><span class="nx">b</span><span class="o">==</span><span class="kc">null</span><span class="p">)</span><span class="o">?</span><span class="mi">0</span><span class="o">:</span><span class="nx">b</span><span class="p">)</span> <span class="o">+</span> <span class="p">((</span><span class="nx">c</span><span class="o">==</span><span class="kc">null</span><span class="p">)</span><span class="o">?</span><span class="mi">0</span><span class="o">:</span><span class="nx">c</span><span class="p">)</span> <span class="o">+</span> <span class="p">((</span><span class="nx">d</span><span class="o">==</span><span class="kc">null</span><span class="p">)</span><span class="o">?</span><span class="mi">0</span><span class="o">:</span><span class="nx">d</span><span class="p">);</span> <span class="p">}</span> <span class="nx">rez</span> <span class="o">=</span> <span class="nx">sum</span><span class="p">(</span><span class="mi">1</span><span class="p">,</span> <span class="mi">2</span><span class="p">);</span> </pre></div> <h4><span class="mw-headline" id=".D0.A1.D0.BF.D0.B5.D1.86.D1.96.D0.B0.D0.BB.D1.8C.D0.BD.D1.96_.D1.81.D0.B8.D0.BC.D0.B2.D0.BE.D0.BB.D0.B8_.D1.81.D1.82.D1.80.D0.BE.D0.BA.D0.BE.D0.B2.D0.B8.D1.85_.D0.B7.D0.BC.D1.96.D0.BD.D0.BD.D0.B8.D1.85"><span class="mw-headline-number">1.4.4</span> Спеціальні Ñимволи Ñтрокових змінних</span></h4> <p>Мовою передбачено підтримку наÑтупних Ñпеціальних Ñимволів Ñтрокових змінних: </p> <dl><dd>"\n" — Ð¿ÐµÑ€ÐµÐ²ÐµÐ´ÐµÐ½Ð½Ñ Ñ€Ñдка;</dd> <dd>"\t" — Ñимвол табулÑції;</dd> <dd>"\b" — забій;</dd> <dd>"\f" — перевід Ñторінки;</dd> <dd>"\r" — Ð¿Ð¾Ð²ÐµÑ€Ð½ÐµÐ½Ð½Ñ ÐºÐ°Ñ€ÐµÑ‚ÐºÐ¸;</dd> <dd>"\\" — Ñам Ñимвол '\';</dd> <dd>"\041" — Ñимвол '!', запиÑаний віÑімковим чиÑлом;</dd> <dd>"\x21" — Ñимвол '!', запиÑаний шіÑтнадцÑтковим чиÑлом.</dd></dl> <p><br /> </p> <h2><span class="mw-headline" id=".D0.97.D0.B0.D0.B3.D0.B0.D0.BB.D1.8C.D0.BD.D0.BE.D1.81.D0.B8.D1.81.D1.82.D0.B5.D0.BC.D0.BD.D1.96_.D0.BA.D0.BE.D1.80.D0.B8.D1.81.D1.82.D1.83.D0.B2.D0.B0.D1.86.D1.8C.D0.BA.D1.96_.D0.BE.D0.B1.27.D1.94.D0.BA.D1.82.D0.B8"><span class="mw-headline-number">2</span> <span id="Object" title="#Object">ЗагальноÑиÑтемні кориÑтувацькі об'єкти</span></span></h2> <p>JavaLikeCalc надає підтримку типу даних об'єкт "Object". Об'єкт предÑтавлÑÑ” Ñобою аÑоціативний контейнер влаÑтивоÑтей та функцій. ВлаÑтивоÑÑ‚Ñ– можуть міÑтити Ñк дані чотирьох базових типів, так Ñ– інші об'єкти. ДоÑтуп до влаÑтивоÑтей об'єкту може здійÑнюватиÑÑ Ð·Ð° поÑередництвом запиÑу імен влаÑтивоÑтей до об'єкту <i>obj.prop</i>, через крапку, а також за поÑередництвом Ð²ÐºÐ»ÑŽÑ‡ÐµÐ½Ð½Ñ Ñ–Ð¼ÐµÐ½Ñ– влаÑтивоÑÑ‚Ñ– у квадратні дужки <i>obj["prop"]</i>. Очевидно, що перший механізм Ñтатичний, а другий дозволÑÑ” вказувати ім'Ñ Ð²Ð»Ð°ÑтивоÑÑ‚Ñ– через змінну. Ім'Ñ Ð²Ð»Ð°ÑтивоÑÑ‚Ñ– через крапку не має починатиÑÑ Ð½Ð° цифру та міÑтити Ñимволи операцій, інакше, Ð´Ð»Ñ Ð¿ÐµÑ€ÑˆÐ¾Ñ— цифри, має викориÑтовуватиÑÑ <a href="User_API.html" title="Special:MyLanguage/Documents/User API">Ð¿Ñ€ÐµÑ„Ñ–ÐºÑ Ð¾Ð±'єкту</a> — <b>SYS.BD.SQLite.db_1s</b>, або здійÑнюватиÑÑ Ð·Ð°Ð¿Ð¸Ñ Ñƒ квадратних дужках — <b>SYS.BD.SQLite["1+s"]</b>, Ð´Ð»Ñ Ñимволів операцій у назві. Видалити влаÑтивіÑÑ‚ÑŒ об'єкту можна директивою "delete". Ð§Ð¸Ñ‚Ð°Ð½Ð½Ñ Ð½ÐµÐ²Ð¸Ð·Ð½Ð°Ñ‡ÐµÐ½Ð¾Ñ— влаÑтивоÑÑ‚Ñ– поверне <b>null</b>-<b>EVAL</b>. Ð¡Ñ‚Ð²Ð¾Ñ€ÐµÐ½Ð½Ñ Ð¾Ð±'єкту здійÑнюєтьÑÑ Ð·Ð° поÑередництвом ключового Ñлова <i>new</i>: <b>varO = new Object()</b>. Базове Ð²Ð¸Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ Ð¾Ð±'єкту не міÑтить функцій. Операції ÐºÐ¾Ð¿Ñ–ÑŽÐ²Ð°Ð½Ð½Ñ Ð¾Ð±'єкту, наÑправді, роблÑÑ‚ÑŒ поÑÐ¸Ð»Ð°Ð½Ð½Ñ Ð½Ð° початковий об'єкт. При видаленні об'єкту здійÑнюєтьÑÑ Ð·Ð¼ÐµÐ½ÑˆÐµÐ½Ð½Ñ Ð»Ñ–Ñ‡Ð¸Ð»ÑŒÐ½Ð¸ÐºÐ° поÑилань, а за доÑÑгненнÑм лічильника нулÑ, об'єкт видалÑєтьÑÑ Ñ„Ñ–Ð·Ð¸Ñ‡Ð½Ð¾. </p><p>Різні компоненти OpenSCADA можуть довизначати базовий об'єкт оÑобливими влаÑтивоÑÑ‚Ñми та функціÑми. Стандартним розширеннÑм об'єкту Ñ” маÑив "Array", Ñкий ÑтворюєтьÑÑ ÐºÐ¾Ð¼Ð°Ð½Ð´Ð¾ÑŽ <b>varO = new Array(prm1,prm2,prm3,...,prmN)</b>. Перелічені через кому параметри поміщаютьÑÑ Ð´Ð¾ маÑиву у вихідній поÑлідовноÑÑ‚Ñ–. Якщо параметр тільки один тоді маÑив ініціюєтьÑÑ Ð²ÐºÐ°Ð·Ð°Ð½Ð¾ÑŽ кількіÑÑ‚ÑŽ порожніх елементів. ОÑобливіÑÑ‚ÑŽ маÑиву Ñ” те, що він працює із влаÑтивоÑÑ‚Ñми, Ñк з індекÑами та оÑновним механізмом Ð·Ð²ÐµÑ€Ð½ÐµÐ½Ð½Ñ Ñ” Ð²ÐºÐ»ÑŽÑ‡ÐµÐ½Ð½Ñ Ñ–Ð½Ð´ÐµÐºÑу у квадратні дужки <i>arr[1]</i>. МаÑив зберігає влаÑтивоÑÑ‚Ñ– у влаÑному контейнері одномірного маÑиву. Цифрові влаÑтивоÑÑ‚Ñ– маÑиву викориÑтовуютьÑÑ Ð´Ð»Ñ Ð´Ð¾Ñтупу безпоÑередньо до маÑиву, а Ñимвольні працюють Ñк влаÑтивоÑÑ‚Ñ– об'єкту. Детальніше про влаÑтивоÑÑ‚Ñ– та функції маÑиву можна прочитати за <a href="User_API.html#Array" title="Special:MyLanguage/Documents/User API">поÑиланнÑм</a>. </p><p>Об'єкт регулÑрного виразу "RegExp" ÑтворюєтьÑÑ ÐºÐ¾Ð¼Ð°Ð½Ð´Ð¾ÑŽ <b>varO = new RegExp(pat, flg)</b>, де <i>pat</i> — шаблон регулÑрного виразу, а <i>flg</i> — ознаки пошуку. Об'єкт роботи із регулÑрними виразами оÑнований на бібліотеці "PCRE". При глобальному пошуку вÑтановлюєтьÑÑ Ð°Ñ‚Ñ€Ð¸Ð±ÑƒÑ‚ об'єкту "lastIndex", що дозволÑÑ” продовжити пошук у наÑтупному виклику функції. У випадку невдалого пошуку атрибут "lastIndex" ÑкидаєтьÑÑ Ñƒ нуль. Детальніше про влаÑтивоÑÑ‚Ñ– та функції об'єкту регулÑрного виразу можна прочитати за <a href="User_API.html#RegExp" title="Special:MyLanguage/Documents/User API">поÑиланнÑм</a>. </p><p>Ð”Ð»Ñ Ð´Ð¾Ð²Ñ–Ð»ÑŒÐ½Ð¾Ð³Ð¾ доÑтупу до аргументів функції передбачено об'єкт аргументів, звернутиÑÑ Ð´Ð¾ Ñкого можна за поÑередництвом Ñимволу "arguments". Цей об'єкт міÑтить влаÑтивіÑÑ‚ÑŒ "length" з кількіÑÑ‚ÑŽ аргументів у функції та дозволÑÑ” звернутиÑÑ Ð´Ð¾ значень аргументу за поÑередництвом його <b>номеру</b> або <b>ідентифікатору</b>. РозглÑнемо перебір аргументів по циклу: </p> <div class="mw-highlight mw-content-ltr" dir="ltr"><pre><span class="nx">args</span> <span class="o">=</span> <span class="k">new</span> <span class="nb">Array</span><span class="p">();</span> <span class="k">for</span><span class="p">(</span><span class="kd">var</span> <span class="nx">i</span> <span class="o">=</span> <span class="mi">0</span><span class="p">;</span> <span class="nx">i</span> <span class="o"><</span> <span class="nx">arguments</span><span class="p">.</span><span class="nx">length</span><span class="p">;</span> <span class="nx">i</span><span class="o">++</span><span class="p">)</span> <span class="nx">args</span><span class="p">[</span><span class="nx">i</span><span class="p">]</span> <span class="o">=</span> <span class="nx">arguments</span><span class="p">[</span><span class="nx">i</span><span class="p">];</span> </pre></div> <p>ЧаÑткові влаÑтивоÑÑ‚Ñ– об'єкту мають Ñ– базові типи. ВлаÑтивоÑÑ‚Ñ– та функції базових типів приведено нижче: </p> <ul><li> Ðульовий тип, функції: <ul><li> <i>bool isEVal();</i> — повертає "true".</li></ul></li></ul> <ul><li> Логічний тип, функції: <ul><li> <i>bool isEVal(); bool isNaN( );</i> — перевірÑÑ” Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ Ð½Ð° <b>null</b>-<b>EVAL</b>.</li> <li> <i>string toString();</i> — надає Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ Ñƒ виглÑді Ñ€Ñдка "true" або "false".</li></ul></li></ul> <dl><dd><ul><li> <i>real toReal();</i> — читає логічне Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ Ñк реальне чиÑло.</li> <li> <i>int toInt();</i> — читає логічне Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ Ñк ціле чиÑло.</li></ul></dd></dl> <ul><li> Ціле та реальне чиÑло:</li></ul> <dl><dd><dl><dt> <i>ВлаÑтивоÑÑ‚Ñ–:</i></dt></dl> <ul><li> <i>MAX_VALUE</i> — макÑимальне значеннÑ;</li> <li> <i>MIN_VALUE</i> — мінімальне значеннÑ;</li> <li> <i>NaN</i> — недоÑтовірне значеннÑ.</li></ul> <dl><dt> <i>Функції:</i></dt></dl> <ul><li> <i>bool isEVal(); bool isNaN( );</i> — перевірÑÑ” Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ Ð½Ð° <b>null</b>-<b>EVAL</b>, та не чиÑло Ð´Ð»Ñ Ð ÐµÐ°Ð»ÑŒÐ½Ð¾Ð³Ð¾.</li> <li> <i>string toExponential( int numbs = -1 );</i> — повертає Ñ€Ñдок відформатованого чиÑла, у екÑпоненціальній нотації та кількіÑÑ‚ÑŽ значущих цифр <i>numbs</i>. Якщо <i>numbs</i> відÑутній то цифр буде Ñтільки Ñкільки потрібно.</li> <li> <i>string toFixed( int numbs = 0, int len = 0, bool sign = false );</i> — повертає Ñ€Ñдок відформатованого чиÑла в нотації з фікÑованою точкою та кількіÑÑ‚ÑŽ цифр піÑÐ»Ñ Ð´ÐµÑÑткової точки <i>numbs</i>, з мінімальною довжиною <i>len</i> та обов'Ñзковим знаком <i>sign</i>. Якщо <i>numbs</i> відÑутній то кількіÑÑ‚ÑŒ цифр піÑÐ»Ñ Ð´ÐµÑÑткової точки дорівнює нулю.</li> <li> <i>string toPrecision( int prec = -1 );</i> — повертає Ñ€Ñдок відформатованого чиÑла з кількіÑÑ‚ÑŽ значущих цифр <i>prec</i>. </li> <li> <i>string toString( int base = 10, int len = -1, bool sign = false );</i> — повертає Ñ€Ñдок відформатованого чиÑла цілого типу з базою предÑÑ‚Ð°Ð²Ð»ÐµÐ½Ð½Ñ <i>base</i> (2-36), з мінімальною довжиною <i>len</i> та обов'Ñзковим знаком <i>sign</i>.</li> <li> <i>real toReal();</i> — читає ціле-реальне Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ Ñк реальне чиÑло.</li> <li> <i>int toInt();</i> — читає ціле-реальне Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ Ñк ціле чиÑло.</li></ul></dd></dl> <ul><li> Ð Ñдок:</li></ul> <dl><dd><dl><dt> <i>ВлаÑтивоÑÑ‚Ñ–:</i></dt></dl> <ul><li> <i>int length</i> — довжина Ñ€Ñдка.</li></ul> <dl><dt> <i>Функції:</i></dt></dl> <ul><li> <i>bool isEVal();</i> — перевірÑÑ” Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ Ð½Ð° <b>null</b>-<b>EVAL</b>.</li> <li> <i>bool isNaN( bool whole = true );</i> — перевірÑÑ” Ñ€Ñдок на не чиÑло, та загалом <i>whole</i>.</li> <li> <i>string charAt( int symb, string type = "" );</i> — діÑтає із Ñ€Ñдка Ñимвол за номером <i>symb</i> типу <i>type</i>. ÐаÑтупні типи Ñимволу підтримуютьÑÑ: ""-ASCII та проÑтий одно байтовий, UTF-8, UTF-16, UTF-32. У випадку із UTF-8, Ð¿Ð¾Ð·Ð¸Ñ†Ñ–Ñ Ñимволу <i>symb</i> змінюєтьÑÑ Ñƒ позицію наÑтупного Ñимволу оÑкільки довжина Ñимволів цього типу змінна.</li> <li> <i>int charCodeAt( int symb, string type = "" );</i> — діÑтає із Ñ€Ñдка код Ñимволу <i>symb</i> типу <i>type</i>. ÐаÑтупні типи Ñимволу підтримуютьÑÑ: ""-ASCII та проÑтий одно байтовий, UTF-8, UTF-16, UTF-16LE, UTF-16BE, UTF-32, UTF-32LE, UTF-32BE. У випадку із UTF-8, Ð¿Ð¾Ð·Ð¸Ñ†Ñ–Ñ Ñимволу <i>symb</i> змінюєтьÑÑ Ñƒ позицію наÑтупного Ñимволу оÑкільки довжина Ñимволів цього типу змінна.</li> <li> <i>string concat( string val1, string val2, ... );</i> — повертає новий Ñ€Ñдок, Ñформований шлÑхом Ð¿Ñ€Ð¸Ñ”Ð´Ð½Ð°Ð½Ð½Ñ Ð·Ð½Ð°Ñ‡ÐµÐ½ÑŒ <i>val1</i> та інші до початкового.</li> <li> <i>int indexOf( string substr, int start = 0 );</i> — повертає позицію пошукового Ñ€Ñдка <i>substr</i> у вихідному Ñ€Ñдку, починаючи з позиції <i>start</i>. Якщо вихідна Ð¿Ð¾Ð·Ð¸Ñ†Ñ–Ñ Ð½Ðµ вказана то пошук починаєтьÑÑ Ð· початку. Якщо шуканого Ñ€Ñдка не знайдено то повертаєтьÑÑ "-1".</li> <li> <i>int lastIndexOf( string substr, int start = {end} );</i> — повертає позицію шуканого Ñ€Ñдка <i>substr</i> у вихідному Ñ€Ñдку починаючи з позиції <i>start</i>, при пошуку з кінцÑ. Якщо вихідна Ð¿Ð¾Ð·Ð¸Ñ†Ñ–Ñ Ð½Ðµ вказана то пошук починаєтьÑÑ Ð· кінцÑ. Якщо шуканого Ñ€Ñдку не знайдено то повертаєтьÑÑ "-1".</li> <li> <i>int search( string pat, string flg = "" );</i> — шукає у Ñ€Ñдку за шаблоном <i>pat</i> та ознаками шаблону <i>flg</i>. Повертає Ð¿Ð¾Ð»Ð¾Ð¶ÐµÐ½Ð½Ñ Ð·Ð½Ð°Ð¹Ð´ÐµÐ½Ð¾Ð³Ð¾ Ñ€Ñдку інакше "-1".</li></ul></dd></dl> <div class="mw-highlight mw-content-ltr" dir="ltr" style="margin-left: 30pt"><pre><span class="kd">var</span> <span class="nx">rez</span> <span class="o">=</span> <span class="s2">"Java123Script"</span><span class="p">.</span><span class="nx">search</span><span class="p">(</span><span class="s2">"script"</span><span class="p">,</span><span class="s2">"i"</span><span class="p">);</span> <span class="c1">// rez = 7</span> </pre></div> <dl><dd><ul><li> <i>int search( RegExp pat );</i> — шукає у Ñ€Ñдку за шаблоном "RegExp" <i>pat</i>. Повертає Ð¿Ð¾Ð»Ð¾Ð¶ÐµÐ½Ð½Ñ Ð½Ð°Ð¹Ð´ÐµÐ½Ð¾Ð³Ð¾ підрÑдку інакше "-1".</li></ul></dd></dl> <div class="mw-highlight mw-content-ltr" dir="ltr" style="margin-left: 30pt"><pre><span class="kd">var</span> <span class="nx">rez</span> <span class="o">=</span> <span class="s2">"Java123Script"</span><span class="p">.</span><span class="nx">search</span><span class="p">(</span><span class="k">new</span> <span class="nb">RegExp</span><span class="p">(</span><span class="s2">"script"</span><span class="p">,</span><span class="s2">"i"</span><span class="p">));</span> <span class="c1">// rez = 7</span> </pre></div> <dl><dd><ul><li> <i>Array match( string pat, string flg = "" );</i> — шукає у Ñ€Ñдку за шаблоном <i>pat</i> та ознаками шаблону <i>flg</i>. Повертає маÑив із знайденим підрÑдком (0) та підвиразами (>1). Ðтрибут "index" маÑиву вÑтановлюєтьÑÑ Ñƒ позицію знайденого підрÑдка. Ðтрибут "input" вÑтановлюєтьÑÑ Ñƒ початковий Ñ€Ñдок. Ðтрибут "err" вÑтановлюєтьÑÑ Ñƒ код помилки операції.</li></ul></dd></dl> <div class="mw-highlight mw-content-ltr" dir="ltr" style="margin-left: 30pt"><pre><span class="kd">var</span> <span class="nx">rez</span> <span class="o">=</span> <span class="s2">"1 Ð¿Ð»ÑŽÑ 2 Ð¿Ð»ÑŽÑ 3"</span><span class="p">.</span><span class="nx">match</span><span class="p">(</span><span class="s2">"\\d+"</span><span class="p">,</span><span class="s2">"g"</span><span class="p">);</span> <span class="c1">// rez = [1], [2], [3]</span> </pre></div> <dl><dd><ul><li> <i>Array match( TRegExp pat );</i> — шукає у Ñ€Ñдку за шаблоном "RegExp" <i>pat</i>. Повертає маÑив зі знайденим підрÑдком (0) та підвиразами (>1). Ðтрибут "index" маÑиву вÑтановлюєтьÑÑ Ñƒ позицію знайденого підрÑдка. Ðтрибут "input" вÑтановлюєтьÑÑ Ñƒ початковий Ñ€Ñдок. Ðтрибут "err" вÑтановлюєтьÑÑ Ñƒ код помилки операції.</li></ul></dd></dl> <div class="mw-highlight mw-content-ltr" dir="ltr" style="margin-left: 30pt"><pre><span class="kd">var</span> <span class="nx">rez</span> <span class="o">=</span> <span class="s2">"1 Ð¿Ð»ÑŽÑ 2 Ð¿Ð»ÑŽÑ 3"</span><span class="p">.</span><span class="nx">match</span><span class="p">(</span><span class="k">new</span> <span class="nb">RegExp</span><span class="p">(</span><span class="s2">"\\d+"</span><span class="p">,</span><span class="s2">"g"</span><span class="p">));</span> <span class="c1">// rez = [1], [2], [3]</span> </pre></div> <dl><dd><ul><li> <i>string slice( int beg, int end ); string substring( int beg, int end );</i> — повертає підрÑдок вилучений з початкового, починаючи з позиції <i>beg</i> та до <i>end</i> (не включаючи), Ð½ÑƒÐ¼ÐµÑ€Ð°Ñ†Ñ–Ñ Ð· нулÑ. Якщо Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ Ð¿Ð¾Ñ‡Ð°Ñ‚ÐºÑƒ або ÐºÑ–Ð½Ñ†Ñ Ð½ÐµÐ³Ð°Ñ‚Ð¸Ð²Ð½Ðµ, то відлік ведетьÑÑ Ð· ÐºÑ–Ð½Ñ†Ñ Ñ€Ñдку. Якщо кінець не вказано, то кінцем Ñ” кінець Ñ€Ñдку. Ðаприклад, конÑÑ‚Ñ€ÑƒÐºÑ†Ñ–Ñ <b>substring(-2)</b> поверне оÑтанні два Ñимволи Ñ€Ñдку.</li> <li> <i>Array split( string sep, int limit = 0 );</i> — повертає маÑив елементів Ñ€Ñдку поділених <i>sep</i> та з обмеженнÑм кількоÑÑ‚Ñ– елементів <i>limit</i> (0 без обмеженнÑ).</li> <li> <i>Array split( RegExp pat, int limit = 0 );</i> — повертає маÑив елементів Ñ€Ñдку поділених шаблоном "RegExp" <i>pat</i> та з обмеженнÑм кількоÑÑ‚Ñ– елементів <i>limit</i> (0 без обмеженнÑ).</li></ul></dd></dl> <div class="mw-highlight mw-content-ltr" dir="ltr" style="margin-left: 30pt"><pre><span class="nx">rez</span> <span class="o">=</span> <span class="s2">"1,2, 3 , 4 ,5"</span><span class="p">.</span><span class="nx">split</span><span class="p">(</span><span class="k">new</span> <span class="nb">RegExp</span><span class="p">(</span><span class="s2">"\\s*,\\s*"</span><span class="p">));</span> <span class="c1">// rez = [1], [2], [3], [4], [5]</span> </pre></div> <dl><dd><ul><li> <i>string insert( int pos, string substr );</i> — вÑтавлÑÑ” підрÑдок <i>substr</i> у позицію <i>pos</i> поточного Ñ€Ñдку.</li> <li> <i>string replace( int pos, int n, string str );</i> — замінює підрÑдок з позиції <i>pos</i> та довжиною <i>n</i> у поточному Ñ€Ñдку, на Ñ€Ñдок <i>str</i>.</li></ul></dd></dl> <div class="mw-highlight mw-content-ltr" dir="ltr" style="margin-left: 30pt"><pre><span class="nx">rez</span> <span class="o">=</span> <span class="s2">"Javascript"</span><span class="p">.</span><span class="nx">replace</span><span class="p">(</span><span class="mi">4</span><span class="p">,</span><span class="mi">3</span><span class="p">,</span><span class="s2">"67"</span><span class="p">);</span> <span class="c1">// rez = "Java67ipt"</span> </pre></div> <dl><dd><ul><li> <i>string replace( string substr, string str );</i> — замінює вÑÑ– підрÑдки <i>substr</i> на Ñ€Ñдок <i>str</i>. </li></ul></dd></dl> <div class="mw-highlight mw-content-ltr" dir="ltr" style="margin-left: 30pt"><pre><span class="nx">rez</span> <span class="o">=</span> <span class="s2">"123 321"</span><span class="p">.</span><span class="nx">replace</span><span class="p">(</span><span class="s2">"3"</span><span class="p">,</span><span class="s2">"55"</span><span class="p">);</span> <span class="c1">// rez = "1255 5521"</span> </pre></div> <dl><dd><ul><li> <i>string replace( RegExp pat, string str );</i> — замінює підрÑдок за шаблоном <i>pat</i> на Ñ€Ñдок <i>str</i>.</li></ul></dd></dl> <div class="mw-highlight mw-content-ltr" dir="ltr" style="margin-left: 30pt"><pre><span class="nx">rez</span> <span class="o">=</span> <span class="s2">"value = \"123\""</span><span class="p">.</span><span class="nx">replace</span><span class="p">(</span><span class="k">new</span> <span class="nb">RegExp</span><span class="p">(</span><span class="s2">"\"([^\"]*)\""</span><span class="p">,</span><span class="s2">"g"</span><span class="p">),</span><span class="s2">"``$1''"</span><span class="p">));</span> <span class="c1">// rez = "value = ``123''"</span> </pre></div> <dl><dd><ul><li> <i>real toReal();</i> — перетворює поточной Ñ€Ñдок у реальне чиÑло.</li> <li> <i>int toInt( int base = 10 );</i> — перетворює поточний Ñ€Ñдок у ціле чиÑло, відповідно до оÑнови <i>base</i> (від 2 до 36). Якщо оÑнова дорівнює 0 тоді буде враховуватиÑÑ Ð¿Ñ€ÐµÑ„Ñ–ÐºÑний Ð·Ð°Ð¿Ð¸Ñ Ð´Ð»Ñ Ð²Ð¸Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ Ð¾Ñнови (123-деÑÑткове; 0123-віÑімкове; 0x123-шіÑтнадцÑткове).</li> <li> <i>string {parse,parseEnd}( int pos, string sep = ".", int off = {0,{length}}, bool mergeSepSymb = false );</i> — виокремлює із вихідного Ñ€Ñдку елемент <i>pos</i> Ð´Ð»Ñ Ñ€Ð¾Ð·Ð´Ñ–Ð»ÑŒÐ½Ð¸ÐºÐ° елементів <i>sep</i> та від Ð·Ð¼Ñ–Ñ‰ÐµÐ½Ð½Ñ <i>off</i> (зупинка на початку наÑтупного токену, або кінці Ð´Ð»Ñ <i>parseEnd</i>). <i>mergeSepSymb</i> визначає дозвіл Ð¿Ð¾Ñ”Ð´Ð½Ð°Ð½Ð½Ñ Ð³Ñ€ÑƒÐ¿Ð¸ однакових Ñимволів у один роздільник. Результуюче Ð·Ð¼Ñ–Ñ‰ÐµÐ½Ð½Ñ Ð¿Ð¾Ð¼Ñ–Ñ‰Ð°Ñ”Ñ‚ÑŒÑÑ Ð½Ð°Ð·Ð°Ð´ до <i>off</i>. <i>parseEnd()</i> робить те Ñаме, але з кінцÑ.</li> <li> <i>string parseLine( int pos, int off = 0 );</i> — виокремлює Ñ€Ñдок з номером <i>pos</i> від Ð·Ð¼Ñ–Ñ‰ÐµÐ½Ð½Ñ <i>off</i> (зупинка на початку наÑтупного токену). Результуюче Ð·Ð¼Ñ–Ñ‰ÐµÐ½Ð½Ñ Ð¿Ð¾Ð¼Ñ–Ñ‰Ð°Ñ”Ñ‚ÑŒÑÑ Ð½Ð°Ð·Ð°Ð´ до <i>off</i>.</li> <li> <i>string parsePath( int pos, int offCmptbl = 0, int off = 0 );</i> — виділÑÑ” з початкового шлÑху елемент <i>pos</i> від Ð·Ð¼Ñ–Ñ‰ÐµÐ½Ð½Ñ <i>off</i> (зупинка на початку наÑтупного токену) або <i>offCmtbl</i> (зупинка на наÑтупному Ñимволі ÐºÑ–Ð½Ñ†Ñ Ð¿Ð¾Ñ‚Ð¾Ñ‡Ð½Ð¾Ð³Ð¾ токену — Ð´Ð»Ñ ÑуміÑноÑÑ‚Ñ–). Результуюче Ð·Ð¼Ñ–Ñ‰ÐµÐ½Ð½Ñ Ð¿Ð¾Ð¼Ñ–Ñ‰Ð°Ñ”Ñ‚ÑŒÑÑ Ð½Ð°Ð·Ð°Ð´ до <i>off</i> або <i>offCmtbl</i>.</li> <li> <i>string parsePathEnd( int pos, int off = {length} );</i> — виділÑÑ” з ÐºÑ–Ð½Ñ†Ñ Ñ€Ñдка початкового шлÑху елемент <i>pos</i> від Ð·Ð¼Ñ–Ñ‰ÐµÐ½Ð½Ñ <i>off</i> (зупинка на кінці наÑтупного токену). Результуюче Ð·Ð¼Ñ–Ñ‰ÐµÐ½Ð½Ñ Ð¿Ð¾Ð¼Ñ–Ñ‰Ð°Ñ”Ñ‚ÑŒÑÑ Ð½Ð°Ð·Ð°Ð´ до <i>off</i>.</li> <li> <i>string path2sep( string sep = "." );</i> — перетворює шлÑÑ… у поточному Ñ€Ñдку у Ñ€Ñдок з розділювачем <i>sep</i>.</li> <li> <i>string trim( string cfg = " \n\t\r" );</i> — обрізає Ñ€Ñдок з початку та кінцю, Ð´Ð»Ñ Ñимволів <i>cfg</i>.</li></ul></dd></dl> <p><br /> </p> <h3><span class="mw-headline" id=".D0.9E.D0.B1.27.D1.94.D0.BA.D1.82_.D0.BC.D0.B0.D1.81.D0.B8.D0.B2.D1.83_.28Array.29"><span class="mw-headline-number">2.1</span> <span id="Array" title="#Array">Об'єкт маÑиву (Array)</span></span></h3> <p>ОÑобливіÑÑ‚ÑŽ маÑиву Ñ” те, що він працює з влаÑтивоÑÑ‚Ñми Ñк з індекÑами та повне Ñ—Ñ… Ð½Ð°Ð¹Ð¼ÐµÐ½ÑƒÐ²Ð°Ð½Ð½Ñ Ð½Ðµ має ÑенÑу, відтак доÑтупний тільки механізм Ð·Ð²ÐµÑ€Ð½ÐµÐ½Ð½Ñ Ð¾Ñ…Ð¾Ð¿Ð»ÐµÐ½Ð½Ñм індекÑу квадратними дужками "<b>arr[1]</b>". МаÑив зберігає влаÑтивоÑÑ‚Ñ– у влаÑному контейнері одномірного маÑиву. Цифрові влаÑтивоÑÑ‚Ñ– маÑиву викориÑтовуютьÑÑ Ð´Ð»Ñ Ð´Ð¾Ñтупу безпоÑередньо до маÑиву, а Ñимвольні працюють Ñк влаÑтивоÑÑ‚Ñ– об'єкту. </p><p>МаÑив надає Ñпеціальну влаÑтивіÑÑ‚ÑŒ "length", Ð´Ð»Ñ Ð¾Ñ‚Ñ€Ð¸Ð¼Ð°Ð½Ð½Ñ Ñ€Ð¾Ð·Ð¼Ñ–Ñ€Ñƒ маÑиву "<b>var = arr.length;</b>". Також маÑив надає наÑтупні функції: </p> <ul><li> <i>string join( string sep = "," )</i>, <i>string toString( string sep = "," )</i>, <i>string valueOf( string sep = "," )</i> — повертає Ñ€Ñдок з елементами маÑиву, поділеними <i>sep</i> або Ñимволом ','.</li> <li> <i>Array concat( Array arr );</i> — додає до первинного маÑиву елементи маÑиву <i>arr</i>. Повертає первинний маÑив зі змінами.</li> <li> <i>int push( ElTp var, ... );</i> — поміщає елемент(и) <i>var</i> у кінець маÑиву, Ñк до Ñтеку. Повертає новий розмір маÑиву.</li> <li> <i>ElTp pop( );</i> — видалÑÑ” оÑтанній елемент маÑиву та повертає його значеннÑ, Ñк із Ñтеку.</li> <li> <i>Array reverse( );</i> — змінює порÑдок Ñ€Ð¾Ð·Ñ‚Ð°ÑˆÑƒÐ²Ð°Ð½Ð½Ñ ÐµÐ»ÐµÐ¼ÐµÐ½Ñ‚Ñ–Ð² маÑиву. Повертає первинний маÑив зі змінами.</li> <li> <i>ElTp shift( );</i> — зÑуває маÑив догори, при цьому перший елемент маÑиву видалÑєтьÑÑ, а його Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ Ð¿Ð¾Ð²ÐµÑ€Ñ‚Ð°Ñ”Ñ‚ÑŒÑÑ.</li> <li> <i>int unshift( ElTp var, ... );</i> — заÑуває елемент(и) <i>var</i> до маÑиву. Перший елемент у 0, другий у 1 та так Ñамо далі.</li> <li> <i>Array slice( int beg, int end );</i> — повертає фрагмент маÑиву від <i>beg</i> до <i>end</i> (виключаючи). Якщо Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ Ð¿Ð¾Ñ‡Ð°Ñ‚ÐºÑƒ або ÐºÑ–Ð½Ñ†Ñ Ð½ÐµÐ³Ð°Ñ‚Ð¸Ð²Ð½Ðµ то відлік ведетьÑÑ Ð· ÐºÑ–Ð½Ñ†Ñ Ð¼Ð°Ñиву. Якщо кінець не вказано то кінцем Ñ” кінець маÑиву.</li> <li> <i>Array splice( int beg, int remN, ElTp val1, ElTp val2, ... );</i> — вÑтавлÑÑ”, видалÑÑ” або замінює елементи маÑиву. Повертає маÑив видалених елементів. У першу чергу здійÑнюєтьÑÑ Ð²Ð¸Ð´Ð°Ð»ÐµÐ½Ð½Ñ ÐµÐ»ÐµÐ¼ÐµÐ½Ñ‚Ñ–Ð² з позиції <i>beg</i> та кількіÑÑ‚ÑŽ <i>remN</i>, а потім вÑтавлÑÑŽÑ‚ÑŒÑÑ Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ <i>val1</i> та інші, починаючи з позиції <i>beg</i>.</li> <li> <i>int indexOf( ElTp var, int start = 0 );</i> — повертає Ñ–Ð½Ð´ÐµÐºÑ Ð¼Ð°Ñиву потрібної змінної <i>var</i> у початковій поÑлідовноÑÑ‚Ñ–, починаючи з позиції <i>start</i>. Якщо початкову позицію не вказано то пошук починаєтьÑÑ Ð· початку. Якщо шуканої змінної не знайдено то повертаєтьÑÑ "-1".</li> <li> <i>int lastIndexOf( ElTp var, int start = {end} );</i> — повертає Ñ–Ð½Ð´ÐµÐºÑ Ð¼Ð°Ñиву потрібної змінної <i>var</i> у початковій поÑлідовноÑÑ‚Ñ–, починаючи з позиції <i>start</i> за пошуком з кінцÑ. Якщо початкову позицію не вказано то пошук починаєтьÑÑ Ð· кінцÑ. Якщо шуканої змінної не знайдено то повертаєтьÑÑ "-1".</li> <li> <i>double sum( int beg, int end );</i> — Ñума значень чаÑтини маÑиву з позиції <i>beg</i> по <i>end</i>, виключно.</li> <li> <i>Array sort( );</i> — Ñортує елементи маÑиву у лекÑикографічній поÑлідовноÑÑ‚Ñ–.</li></ul> <h3><span class="mw-headline" id=".D0.9E.D0.B1.27.D1.94.D0.BA.D1.82_.D1.80.D0.B5.D0.B3.D1.83.D0.BB.D1.8F.D1.80.D0.BD.D0.BE.D0.B3.D0.BE_.D0.B2.D0.B8.D1.80.D0.B0.D0.B7.D1.83_.28RegExp.29"><span class="mw-headline-number">2.2</span> <span id="RegExp" title="#RegExp">Об'єкт регулÑрного виразу (RegExp)</span></span></h3> <p>Об'єкт роботи з регулÑрними виразами, заÑновано на бібліотеці PCRE. При глобальному пошуку вÑтановлюєтьÑÑ Ð°Ñ‚Ñ€Ð¸Ð±ÑƒÑ‚ об'єкта "lastIndex", що дозволÑÑ” продовжити пошук при наÑтупному виклику функції. У випадку невдалого пошуку атрибут "lastIndex" ÑкидаєтьÑÑ Ñƒ нуль. </p><p>У ÑкоÑÑ‚Ñ– аргументів ÑÑ‚Ð²Ð¾Ñ€ÐµÐ½Ð½Ñ Ð¾Ð±'єкту передаєтьÑÑ Ñ€Ñдок з текÑтом регулÑрного виразу та прапорці у виглÑді Ñ€Ñдка Ñимволів: </p> <ul><li> 'g' — режим глобального пошуку, що означає Ð¿Ð¾Ð²Ñ‚Ð¾Ñ€ÐµÐ½Ð½Ñ Ð·Ð°Ð¿Ð¸Ñ‚Ñƒ Ð´Ð»Ñ Ð¾Ð¿Ñ€Ð°Ñ†ÑŽÐ²Ð°Ð½Ð½Ñ ÑƒÑÑ–Ñ… виразів до Ð¿Ð¾Ð²ÐµÑ€Ð½ÐµÐ½Ð½Ñ Ð¿Ð¾Ñ€Ð¾Ð¶Ð½ÑŒÐ¾Ð³Ð¾ маÑиву;</li> <li> 'i' — режим регіÑтронезалежного пошуку;</li> <li> 'm' — режим багаторÑдкового пошуку;</li> <li> 'u' — примуÑовий дозвіл Ñимволів UTF-8, Ð´Ð»Ñ Ñ–Ð½ÑˆÐ¸Ñ… локалей;</li> <li> 'p' — теÑÑ‚ÑƒÐ²Ð°Ð½Ð½Ñ Ð²Ð¸Ñ€Ð°Ð·Ñƒ за правилами звичайного шаблону з ключовими Ñимволами: '?', '*' та '\'.</li></ul> <p>ВлаÑтивоÑÑ‚Ñ– об'єкту: </p> <ul><li> <i>source</i> — початковий шаблон регулÑрного виразу, тільки читаннÑ.</li> <li> <i>global</i> — ознака глобального пошуку, тільки читаннÑ.</li> <li> <i>ignoreCase</i> — ознака Ñ–Ð³Ð½Ð¾Ñ€ÑƒÐ²Ð°Ð½Ð½Ñ Ñ€ÐµÐ³Ñ–Ñтру Ñимволів при пошуку, тільки читаннÑ.</li> <li> <i>multiline</i> — ознака багаторÑдкового пошуку, тільки читаннÑ.</li> <li> <i>UTF8</i> — ознака дозволу UTF-8 Ñимволів, тільки читаннÑ.</li> <li> <i>lastIndex</i> — Ñ–Ð½Ð´ÐµÐºÑ Ñимволу за підрÑдком оÑтаннього пошуку, викориÑтовуєтьÑÑ Ñƒ глобальному режимі Ð´Ð»Ñ Ð¿Ñ€Ð¾Ð´Ð¾Ð²Ð¶ÐµÐ½Ð½Ñ ÑкануваннÑ, при наÑтупному виклику.</li></ul> <p>Функції об'єкту: </p> <ul> <li><i>Array exec(string val);</i> — викликає пошук за Ñ€Ñдком <i>val</i>. Повертає знайдений підрÑдок (0) та підвирази (>0) у маÑиві. Ð’Ñтановлює атрибут маÑиву "index" у позицію знайденого підрÑдка. Ð’Ñтановлює атрибут маÑиву "input" у Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ Ð¿Ð¾Ñ‡Ð°Ñ‚ÐºÐ¾Ð²Ð¾Ð³Ð¾ Ñ€Ñдку. <div class="mw-highlight mw-content-ltr" dir="ltr"><pre><span class="kd">var</span> <span class="nx">re</span> <span class="o">=</span> <span class="k">new</span> <span class="nb">RegExp</span><span class="p">(</span><span class="s2">"(\\d\\d)[-/](\\d\\d)[-/](\\d\\d(?:\\d\\d)?)"</span><span class="p">,</span><span class="s2">""</span><span class="p">);</span> <span class="kd">var</span> <span class="nx">rez</span> <span class="o">=</span> <span class="nx">re</span><span class="p">.</span><span class="nx">exec</span><span class="p">(</span><span class="s2">"12/30/1969"</span><span class="p">);</span> <span class="kd">var</span> <span class="nx">month</span> <span class="o">=</span> <span class="nx">rez</span><span class="p">[</span><span class="mi">1</span><span class="p">];</span> <span class="kd">var</span> <span class="nx">day</span> <span class="o">=</span> <span class="nx">rez</span><span class="p">[</span><span class="mi">2</span><span class="p">];</span> <span class="kd">var</span> <span class="nx">year</span> <span class="o">=</span> <span class="nx">rez</span><span class="p">[</span><span class="mi">3</span><span class="p">];</span> </pre></div></li> <li><i>bool test(string val);</i> — повертає "true" Ñкщо підрÑдок знайдено у <i>val</i>. <div class="mw-highlight mw-content-ltr" dir="ltr"><pre><span class="kd">var</span> <span class="nx">re</span> <span class="o">=</span> <span class="k">new</span> <span class="nb">RegExp</span><span class="p">(</span><span class="s2">"(\\d\\d)[-/](\\d\\d)[-/](\\d\\d(?:\\d\\d)?)"</span><span class="p">,</span><span class="s2">""</span><span class="p">);</span> <span class="kd">var</span> <span class="nx">OK</span> <span class="o">=</span> <span class="nx">re</span><span class="p">.</span><span class="nx">test</span><span class="p">(</span><span class="s2">"12/30/1969"</span><span class="p">);</span> </pre></div></li> </ul> <h3><span class="mw-headline" id=".D0.9E.D0.B1.27.D1.94.D0.BA.D1.82_.D0.B2.D1.83.D0.B7.D0.BB.D0.B0-.D1.82.D0.B5.D0.B3.D1.83_XML_.28XMLNodeObj.29"><span class="mw-headline-number">2.3</span> Об'єкт вузла-тегу XML (XMLNodeObj)</span></h3> <p>Функції: </p> <ul><li> <i>string name( )</i> — ім'Ñ Ð²ÑƒÐ·Ð»Ð°, XML-тегу.</li> <li> <i>string text( bool full = false )</i> — текÑÑ‚ вузла, вміÑÑ‚ XML-тегу. Ð’Ñтановити <i>full</i> Ð´Ð»Ñ Ð¾Ñ‚Ñ€Ð¸Ð¼Ð°Ð½Ð½Ñ ÐºÐ¾Ð¼Ð±Ñ–Ð½Ð¾Ð²Ð°Ð½Ð¾Ð³Ð¾ текÑту зі вÑіма включеними вузлами.</li> <li> <i>string attr( string id )</i> — Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ Ð°Ñ‚Ñ€Ð¸Ð±ÑƒÑ‚Ñƒ вузла <i>id</i>.</li> <li> <i>XMLNodeObj setName( string vl )</i> — вÑтановлює ім'Ñ Ð²ÑƒÐ·Ð»Ð° у <i>vl</i>. Повертає поточний вузол.</li> <li> <i>XMLNodeObj setText( string vl )</i> — вÑтановлює текÑÑ‚ вузла у <i>vl</i>. Повертає поточний вузол.</li> <li> <i>XMLNodeObj setAttr( string id, string vl )</i> — вÑтановлює атрибут <i>id</i> у Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ <i>vl</i>. Повертає поточний вузол.</li> <li> <i>XMLNodeObj clear( bool full = false )</i> — очищує вузол видаленнÑм дочірніх вузлів, очищує текÑÑ‚ та атрибути Ð´Ð»Ñ <i>full</i>.</li> <li> <i>int childSize( )</i> — кількіÑÑ‚ÑŒ вкладених вузлів.</li> <li> <i>XMLNodeObj childAdd( ElTp no = XMLNodeObj ); XMLNodeObj childAdd(string no)</i> — додає об'єкт <i>no</i> Ñк вкладений. <i>no</i> може бути Ñк безпоÑередньо об'єктом-результатом функції "SYS.XMLNode()", так Ñ– Ñ€Ñдком з ім'Ñм нового тегу. ПовертаєтьÑÑ Ð²ÐºÐ»Ð°Ð´ÐµÐ½Ð¸Ð¹ вузол.</li> <li> <i>XMLNodeObj childIns( int id, ElTp no = XMLNodeObj ); XMLNodeObj childIns(int id, string no)</i> — вÑтавлÑÑ” об'єкт <i>no</i> Ñк вкладений, у позицію <i>id</i>. <i>no</i> може бути Ñк безпоÑередньо об'єктом-результатом функції "SYS.XMLNode()", так Ñ– Ñ€Ñдком з ім'Ñм нового тегу. ПовертаєтьÑÑ Ð²ÐºÐ»Ð°Ð´ÐµÐ½Ð¸Ð¹ вузол.</li> <li> <i>XMLNodeObj childDel( int id )</i> — видалÑÑ” вкладений вузол у позиції <i>id</i>. Повертає поточний вузол.</li> <li> <i>XMLNodeObj childGet( int id )</i> — отримує вкладений вузол у позиції <i>id</i>. Повертає <b>0</b> за відÑутноÑÑ‚Ñ–.</li> <li> <i>XMLNodeObj childGet( string name, int num = 0 )</i> — отримує вкладений вузол з ім'Ñм тегу <i>name</i> та порÑдковим номером <i>num</i>. Повертає <b>0</b> за відÑутноÑÑ‚Ñ–.</li> <li> <i>XMLNodeObj parent()</i> — отримує батьківÑький вузол. Повертає <b>false</b> за відÑутноÑÑ‚Ñ–.</li> <li> <i>string load( string str, bool file = false, int flg = 0, string cp = "UTF-8" )</i> — завантажує XML з Ñ€Ñдка <i>str</i> або з файлу з шлÑхом у <i>str</i> Ñкщо <i>file</i> дорівнює "true", з кодуваннÑм <i>cp</i>. Повертає Ñ€Ñдок із помилкою у форматі "<b>{errCod}:{errText}</b>", Ñкий "0" Ð´Ð»Ñ ÑƒÑпішного завантаженнÑ. Де <i>flg</i> — прапорці завантаженнÑ:</li></ul> <dl><dd><dl><dd>0x01 — повне завантаженнÑ, з блоками текÑту та коментарÑми у Ñпеціальних вузлах;</dd> <dd>0x02 — не видалÑти пробіли на початку та кінці текÑту тегу.</dd></dl></dd></dl> <ul><li> <i>string save( int flg = 0, string path = "", string cp = "UTF-8" )</i> — зберігає дерево XML у Ñ€Ñдок або у файлі <i>path</i>, з параметрами Ñ„Ð¾Ñ€Ð¼Ð°Ñ‚ÑƒÐ²Ð°Ð½Ð½Ñ <i>flg</i> та кодуваннÑм <i>cp</i>. Повертає текÑÑ‚ XML або код помилки. Передбачено наÑтупні прапорці Ñ„Ð¾Ñ€Ð¼Ð°Ñ‚ÑƒÐ²Ð°Ð½Ð½Ñ <i>flg</i>:</li></ul> <dl><dd><dl><dd>0x01 — переривати Ñ€Ñдок перед відкривальним тегом;</dd> <dd>0x02 — переривати Ñ€Ñдок піÑÐ»Ñ Ð²Ñ–Ð´ÐºÑ€Ð¸Ð²Ð°Ð»ÑŒÐ½Ð¾Ð³Ð¾ тегу;</dd> <dd>0x04 — переривати Ñ€Ñдок піÑÐ»Ñ Ð·Ð°ÐºÑ€Ð¸Ð²Ð°Ð»ÑŒÐ½Ð¾Ð³Ð¾ тегу;</dd> <dd>0x08 — переривати Ñ€Ñдок піÑÐ»Ñ Ñ‚ÐµÐºÑту;</dd> <dd>0x10 — переривати Ñ€Ñдок піÑÐ»Ñ Ñ–Ð½Ñтрукції;</dd> <dd>0x1E — переривати Ñ€Ñдок піÑÐ»Ñ Ð²ÑÑ–Ñ…;</dd> <dd>0x20 — вÑтавлÑти Ñтандартний XML-заголовок;</dd> <dd>0x40 — вÑтавлÑти Ñтандартний XHTML-заголовок;</dd> <dd>0x80 — очищати ÑервіÑні теги: <??>, <!-- -->;</dd> <dd>0x100 — не кодувати назви тегів;</dd> <dd>0x200 — не кодувати назви атрибутів;</dd> <dd>0x400 — захиÑÑ‚ бінарних Ñимволів [\x0-\x8\xB-\xC\x0E-\x1F] та помилкових UTF-8.</dd></dl></dd></dl> <ul><li> <i>XMLNodeObj getElementBy( string val, string attr = "id" )</i> — отримує елемент з дерева за атрибутом <i>attr</i> зі значеннÑм <i>val</i>.</li> <li> <i>TArrayObj<XMLNodeObj> getElementsBy( string tag, string attrVal = "", string attr = "id", int limit = 0, int from = 0 )</i> — отримує маÑив елементів з дерева за тегом <i>tag</i> (порожній Ð´Ð»Ñ Ð²ÑÑ–Ñ…) та атрибутом <i>attr</i> зі значеннÑм <i>attrVal</i> (порожній Ð´Ð»Ñ Ð¿Ñ€Ð¾Ð¿ÑƒÑку), також починаючи із тегу з номером <i>from</i> Ñ– обмежуючи Ñ—Ñ… кількіÑÑ‚ÑŒ у <i>limit</i> (нуль без обмеженнÑ).</li></ul> <h2><span class="mw-headline" id=".D0.9F.D1.80.D0.BE.D0.B3.D1.80.D0.B0.D0.BC.D0.B0-.D1.81.D0.B8.D1.81.D1.82.D0.B5.D0.BC.D0.B0_.28SYS.29"><span class="mw-headline-number">3</span> <span id="SYS" title="#SYS">Програма-ÑиÑтема (SYS)</span></span></h2> <p>Функції об'єкту: </p> <ul> <li><i>{string|int} system( string cmd, bool noPipe = false);</i> — викликає конÑольні команди <i>cmd</i> ОС з поверненнÑм результату по каналу. Якщо вÑтановлено <i>noPipe</i> то повертаєтьÑÑ ÐºÐ¾Ð´ Ð¿Ð¾Ð²ÐµÑ€Ð½ÐµÐ½Ð½Ñ Ð²Ð¸ÐºÐ»Ð¸ÐºÑƒ та можливий запуÑк програм у фоні ("sleep 5 &"). Ð¤ÑƒÐ½ÐºÑ†Ñ–Ñ Ð½Ð°Ð´Ð°Ñ” кориÑтувачу OpenSCADA широкі можливоÑÑ‚Ñ– через виклик будь Ñких ÑиÑтемних програм, утиліт та Ñкриптів, а також Ð¾Ñ‚Ñ€Ð¸Ð¼Ð°Ð½Ð½Ñ Ð·Ð° поÑередництвом них доÑтупу до величезного об'єму ÑиÑтемних даних. Ðаприклад, команда "ls -l" поверне деталізований вміÑÑ‚ робочої теки.</li> <li><i>int fileSize( string file );</i> — повертає розмір файлу <i>file</i>.</li> <li><i>string fileRead( string file, int off = 0, int sz = -1 );</i> — повертає Ñ€Ñдок чаÑтини файлу <i>file</i> за зміщеннÑм <i>off</i> та розміром <i>sz</i>.</li> <li><i>int fileWrite( string file, string str, bool append = false );</i> — запиÑує Ñ€Ñдок <i>str</i> до файлу <i>file</i>, видалÑючи приÑутній файл або додаючи до нього, <i>append</i>. Повертає кількіÑÑ‚ÑŒ запиÑаних байт.</li> <li><i>int fileRemove( string file );</i> — видалÑÑ” файл <i>file</i>. Повертає результат видаленнÑ.</li> <li><i>int message( string cat, int level, string mess );</i> — формує ÑиÑтемне Ð¿Ð¾Ð²Ñ–Ð´Ð¾Ð¼Ð»ÐµÐ½Ð½Ñ <i>mess</i> з категорією <i>cat</i>, рівнем <i>level</i> (-7...7). Ðегативне Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ Ñ€Ñ–Ð²Ð½Ñ Ñ„Ð¾Ñ€Ð¼ÑƒÑ” Ð¿Ð¾Ñ€ÑƒÑˆÐµÐ½Ð½Ñ â€” "Alarm".</li> <li><i>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 );</i> — формує ÑиÑтемне Ð¿Ð¾Ð²Ñ–Ð´Ð¾Ð¼Ð»ÐµÐ½Ð½Ñ <i>mess</i> з категорією <i>cat</i> та відповідним до назви рівнем.</li> <li><i>XMLNodeObj XMLNode( string name = "" );</i> — Ñтворює об'єкт вузла XML з ім'Ñм <i>name</i>.</li> <li><i>string cntrReq( XMLNodeObj req, string stat = "" );</i> — надÑилає запит <i>req</i> у виглÑді XML до <a href="API.html#CntrNode" title="Special:MyLanguage/Documents/API">ІнтерфейÑу УправліннÑ</a> програми. Повертає Ñ€Ñдок із помилкою у форматі "<b>{errCod}:{errText}</b>", Ñкий "0" Ð´Ð»Ñ ÑƒÑпіху. Запит загалом запиÑуєтьÑÑ Ñƒ виглÑді <b><get path="/OPath/%2felem" /></b> та із додатковими атрибутами, Ñпецифічними до конкретного запиту. При визначені Ñтанції <i>stat</i> здійÑнюєтьÑÑ Ð·Ð°Ð¿Ð¸Ñ‚ до вказаної зовнішньої Ñтанції. ÐдреÑу до атрибуту "path" можна дізнатиÑÑ Ñƒ конфігураторі OpenSCADA, а Ñаме у Ñ€Ñдку ÑтатуÑу, де Ñ†Ñ Ð°Ð´Ñ€ÐµÑа виникає при наведені курÑору миші на конфігураційне або інформаційне поле. ДеÑкі приклади розповÑюджених запитів, більше прикладів у <a href="API.html#CntrNode" title="Special:MyLanguage/Documents/API">опиÑÑ– ІнтерфейÑу УправліннÑ</a> та <a href="Libs_Service_procedures.html#releaseTests" title="Special:MyLanguage/Libs/Service procedures">releaseTests()</a>:<ul> <li>Ð§Ð¸Ñ‚Ð°Ð½Ð½Ñ Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ ÐµÐ»ÐµÐ¼ÐµÐ½Ñ‚Ñƒ (ім'Ñ ÐºÐ¾Ñ€Ð¸Ñтувача "test"): <div class="mw-highlight mw-content-ltr" dir="ltr"><pre><span class="nx">req</span> <span class="o">=</span> <span class="nx">SYS</span><span class="p">.</span><span class="nx">XMLNode</span><span class="p">(</span><span class="s2">"get"</span><span class="p">).</span><span class="nx">setAttr</span><span class="p">(</span><span class="s2">"path"</span><span class="p">,</span><span class="s2">"/sub_Security/usr_test/%2fprm%2fDESCR"</span><span class="p">);</span> <span class="nx">SYS</span><span class="p">.</span><span class="nx">cntrReq</span><span class="p">(</span><span class="nx">req</span><span class="p">);</span> <span class="nx">idSt</span> <span class="o">=</span> <span class="nx">req</span><span class="p">.</span><span class="nx">text</span><span class="p">();</span> </pre></div></li> <li>Ð—Ð°Ð¿Ð¸Ñ Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ ÐµÐ»ÐµÐ¼ÐµÐ½Ñ‚Ð° (ім'Ñ ÐºÐ¾Ñ€Ð¸Ñтувача "test"): <div class="mw-highlight mw-content-ltr" dir="ltr"><pre><span class="nx">req</span> <span class="o">=</span> <span class="nx">SYS</span><span class="p">.</span><span class="nx">XMLNode</span><span class="p">(</span><span class="s2">"set"</span><span class="p">).</span><span class="nx">setAttr</span><span class="p">(</span><span class="s2">"path"</span><span class="p">,</span><span class="s2">"/sub_Security/usr_test/%2fprm%2fDESCR"</span><span class="p">).</span><span class="nx">setText</span><span class="p">(</span><span class="s2">"New test user name"</span><span class="p">);</span> <span class="nx">SYS</span><span class="p">.</span><span class="nx">cntrReq</span><span class="p">(</span><span class="nx">req</span><span class="p">);</span> </pre></div></li> <li>Ð”Ð¾Ð´Ð°Ð½Ð½Ñ Ð½Ð¾Ð²Ð¾Ð³Ð¾ вузла (кориÑтувача "test"): <div class="mw-highlight mw-content-ltr" dir="ltr"><pre><span class="nx">req</span> <span class="o">=</span> <span class="nx">SYS</span><span class="p">.</span><span class="nx">XMLNode</span><span class="p">(</span><span class="s2">"add"</span><span class="p">).</span><span class="nx">setAttr</span><span class="p">(</span><span class="s2">"path"</span><span class="p">,</span><span class="s2">"/sub_Security/%2fbr%2fusr_"</span><span class="p">).</span><span class="nx">setText</span><span class="p">(</span><span class="s2">"test"</span><span class="p">);</span> <span class="nx">SYS</span><span class="p">.</span><span class="nx">cntrReq</span><span class="p">(</span><span class="nx">req</span><span class="p">);</span> </pre></div></li> <li>Ð’Ð¸Ð´Ð°Ð»ÐµÐ½Ð½Ñ Ð²ÑƒÐ·Ð»Ð° (кориÑтувача "test"): <div class="mw-highlight mw-content-ltr" dir="ltr"><pre><span class="nx">req</span> <span class="o">=</span> <span class="nx">SYS</span><span class="p">.</span><span class="nx">XMLNode</span><span class="p">(</span><span class="s2">"del"</span><span class="p">).</span><span class="nx">setAttr</span><span class="p">(</span><span class="s2">"path"</span><span class="p">,</span><span class="s2">"/sub_Security/%2fbr%2fusr_"</span><span class="p">).</span><span class="nx">setText</span><span class="p">(</span><span class="s2">"test"</span><span class="p">);</span> <span class="nx">SYS</span><span class="p">.</span><span class="nx">cntrReq</span><span class="p">(</span><span class="nx">req</span><span class="p">);</span> </pre></div></li> <li>Ð—Ð±ÐµÑ€ÐµÐ¶ÐµÐ½Ð½Ñ Ð·Ð¼Ñ–Ð½ вузла у БД (кориÑтувача "test"): <div class="mw-highlight mw-content-ltr" dir="ltr"><pre><span class="nx">req</span> <span class="o">=</span> <span class="nx">SYS</span><span class="p">.</span><span class="nx">XMLNode</span><span class="p">(</span><span class="s2">"save"</span><span class="p">).</span><span class="nx">setAttr</span><span class="p">(</span><span class="s2">"path"</span><span class="p">,</span><span class="s2">"/sub_Security/usr_test/%2fobj"</span><span class="p">);</span> <span class="nx">SYS</span><span class="p">.</span><span class="nx">cntrReq</span><span class="p">(</span><span class="nx">req</span><span class="p">);</span> </pre></div></li> <li>Ð—Ð°Ð²Ð°Ð½Ñ‚Ð°Ð¶ÐµÐ½Ð½Ñ Ð²ÑƒÐ·Ð»Ð° з БД (кориÑтувача "test"): <div class="mw-highlight mw-content-ltr" dir="ltr"><pre><span class="nx">req</span> <span class="o">=</span> <span class="nx">SYS</span><span class="p">.</span><span class="nx">XMLNode</span><span class="p">(</span><span class="s2">"load"</span><span class="p">).</span><span class="nx">setAttr</span><span class="p">(</span><span class="s2">"path"</span><span class="p">,</span><span class="s2">"/sub_Security/usr_test/%2fobj"</span><span class="p">);</span> <span class="nx">SYS</span><span class="p">.</span><span class="nx">cntrReq</span><span class="p">(</span><span class="nx">req</span><span class="p">);</span> </pre></div></li> </ul></li> <li><i>string lang(string full);</i> — повертає ÑиÑтемну мову двома Ñимволами та повну мову у <i>full</i>.</li> <li><i>int sleep(real tm, int ntm = 0);</i> — заÑипає потік Ð²Ð¸ÐºÐ¾Ð½Ð°Ð½Ð½Ñ Ð½Ð° <i>tm</i> Ñекунд (з точніÑÑ‚ÑŽ до наноÑекунд) та <i>ntm</i> наноÑекунд. Ð§Ð°Ñ Ñну можна вÑтановити не більш STD_INTERF_TM (5 Ñекунд).</li> <li><i>int time( int usec );</i> — повертає абÑолютний Ñ‡Ð°Ñ Ñƒ Ñекундах від епохи 1.1.1970 та мікроÑекунди у <i>usec</i>, Ñкщо вказано.</li> <li><i>int utime( ); int mtime( );</i> — повертає абÑолютний Ñ‡Ð°Ñ Ñƒ мікроÑекундах та міліÑекундах від епохи 1.1.1970.</li> <li><i>int {localtime|gmtime}( int fullsec, int sec, int min, int hour, int mday, int month, int year, int wday, int yday, int isdst );</i> — повертає повну дату та Ñ‡Ð°Ñ Ñƒ Ñекундах (sec), хвилинах (min), годинах (hour), днÑÑ… міÑÑÑ†Ñ (mday), міÑÑцÑÑ… (month), роках (year), днÑÑ… Ñ‚Ð¸Ð¶Ð½Ñ (wday), днÑÑ… у році (yday) та ознаку літнього чаÑу (isdst), виходÑчи з абÑолютного чаÑу у Ñекундах <i>fullsec</i> від епохи 1.1.1970. <i>gmtime</i> повертає Ñ‡Ð°Ñ Ñƒ GMT(UTC).</li> <li><i>int {mktime|timegm}(int sec, int min, int hour, int mday, int month, int year, int wday, int yday, int isdst);</i> — формує Ñ‡Ð°Ñ Ð· епохи 1.1.1970 з окремо вказаних Ñекунд, хвилин, годин, днів, міÑÑців та інше. Ð—Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ Ð¾ÐºÑ€ÐµÐ¼Ð¸Ñ… одиниць чаÑу можуть вказуватиÑÑ Ð·Ð° межами Ñ—Ñ… звичного діапазону, що дозволÑÑ” викориÑтовувати цю функцію при переборі та у результаті чого одиниці чаÑу буде виправлено та повернуто у звичайному діапазоні. <i>timegm</i> працює з чаÑом у GMT(UTC). </li> <li><i>string {strftime|strftimegm}( int sec, string form = "%Y-%m-%d %H:%M:%S" );</i> — перетворює абÑолютний Ñ‡Ð°Ñ <i>sec</i> у Ñ€Ñдок потрібного формату <i>form</i>. Ð—Ð°Ð¿Ð¸Ñ Ñ„Ð¾Ñ€Ð¼Ð°Ñ‚Ñƒ відповідає POSIX-функції <i>strftime</i>. <i>strftimegm</i> повертає Ñ‡Ð°Ñ Ñƒ GMT(UTC).</li> <li><i>int {strptime|strptimegm}( string str, string form = "%Y-%m-%d %H:%M:%S" );</i> — повертає Ñ‡Ð°Ñ Ñƒ Ñекундах від епохи 1.1.1970, виходÑчи з Ñтрокового запиÑу чаÑу <i>str</i>, відповідно до вказаного шаблону <i>form</i>. Ðаприклад, шаблону "%Y-%m-%d %H:%M:%S" відповідає Ñ‡Ð°Ñ "2006-08-08 11:21:55". ÐžÐ¿Ð¸Ñ Ñ„Ð¾Ñ€Ð¼Ð°Ñ‚Ñƒ шаблону можна отримати з документації на POSIX-функцію <i>strptime</i>. <i>strptimegm</i> працює з чаÑом у GMT(UTC).</li> <li><i><span id="CRON" title="#CRON">int cron( string cronreq, int base = 0 );</span></i> — повертає чаÑ, Ñпланований у форматі Ñтандарту CRON, <i>cronreq</i>, починаючи від базового чаÑу <i>base</i> або від поточного, Ñкщо базовий не вказано. Форма Ñтандарту CRON це "* * * * *". <dl><dt> Де елементи по черзі</dt> <dd /></dl> <ul><li> хвилини (0-59);</li> <li> години (0-23);</li> <li> дні (1-31);</li> <li> міÑÑці (1-12);</li> <li> дні Ñ‚Ð¸Ð¶Ð½Ñ (0[ÐеділÑ]-6).</li></ul> <dl><dt> Де варіанти елементу</dt> <dd /></dl> <ul><li> "*" — будь Ñке значеннÑ;</li> <li> "1,2,3" — дозволені значеннÑ;</li> <li> "1-5" — діапазон дозволених значень;</li> <li> "*/2" — дільник загального діапазону дозволених значень.</li></ul> <dl><dt> Приклади</dt> <dd /></dl> <ul><li> "* * * * *" — кожна хвилина;</li> <li> "10 23 * * *" — лише 23Ñ Ð³Ð¾Ð´Ð¸Ð½Ð° та 10а хвилина будь Ñкого Ð´Ð½Ñ Ñ‚Ð° міÑÑцÑ;</li> <li> "*/2 * * * *" — Ð´Ð»Ñ Ñ…Ð²Ð¸Ð»Ð¸Ð½: 0,2,4,...,56,58;</li> <li> "* 2-4 * * *" — Ð´Ð»Ñ Ð±ÑƒÐ´ÑŒ Ñкої хвилини у годинах від 2 до 4(включно).</li></ul> </li> <li><i>string time2str( real tm, bool inParts = true );</i> — Перетворює інтервал чаÑу <i>tm</i> в Ñекундах у людÑький Ñ€Ñдок на кшталт "1година 23хвилини 10Ñ" при вÑтановлені <i>inParts</i> або "1.5 година" інакше.</li> <li><i>string cpct2str( real cnt );</i> — Перетворює обÑÑг <i>cnt</i> в байтах у Ñ€Ñдок людÑького предÑтавленнÑ.</li> <li><i>string str2time( string val, bool inParts = true );</i> — Перетворює відноÑний Ñ‡Ð°Ñ Ð»ÑŽÐ´Ñького предÑÑ‚Ð°Ð²Ð»ÐµÐ½Ð½Ñ <i>val</i> функції <i>time2str()</i> у Ñ‡Ð°Ñ Ð² Ñекундах, із розбором чаÑтин при вÑтановлені <i>inParts</i>.</li> <li><i>string strFromCharCode( int char1, int char2, int char3, ... );</i> — Ñтворює Ñ€Ñдок з кодів Ñимволів <i>char1</i>, <i>char2</i> ... <i>charN</i>.</li> <li><i>string strFromCharUTF([string type = "UTF-8",] int char1, int char2, int char3, ...);</i> — Ñтворює Ñ€Ñдок з UTF Ñимволів <i>char1</i>, <i>char2</i> ... <i>charN</i>. ÐаÑтупні типи Ñимволу підтримуютьÑÑ: UTF-8, UTF-16, UTF-16LE, UTF-16BE, UTF-32, UTF-32LE, UTF-32BE.</li> <li><i>string strCodeConv( string src, string fromCP, string toCP );</i> — перекодовує текÑÑ‚ <i>src</i> з ÐºÐ¾Ð´ÑƒÐ²Ð°Ð½Ð½Ñ <i>fromCP</i> у <i>toCP</i>. Якщо ÐºÐ¾Ð´ÑƒÐ²Ð°Ð½Ð½Ñ Ð¾Ð¿ÑƒÑ‰ÐµÐ½Ð¾ (порожній Ñ€Ñдок), то викориÑтовуєтьÑÑ Ð²Ð½ÑƒÑ‚Ñ€Ñ–ÑˆÐ½Ñ”.</li> <li><i>string strEncode( string src, string tp = "Bin", string opt = "" );</i> — кодує Ñ€Ñдок <i>src</i> за правилом <i>tp</i> та опції <i>opt</i>. ДоÑтупні правила: <dl><dd>"PathEl" — Ñимволи <b>[/%]</b> у "%2f" та "%25", відповідно;</dd> <dd>"HttpURL" — Ñимволи <b>[ \t%]</b> та "> 0x80" у "%20", "%09", "%25" та інше;</dd> <dd>"HTML" — Ñимволи HTML-ÑутноÑтей <b>[><"&']</b> у "&gt;", "&lt;", "&quot;" та інше;</dd> <dd>"JavaScript" — Ñимвол '\n' екрануваннÑм "\\n";</dd> <dd>"SQL" — екрануваннÑ-захиÑÑ‚ Ñимволів <b>['"`\]</b>, доданнÑм Ñимволу '\' або Ð´ÑƒÐ±Ð»ÑŽÐ²Ð°Ð½Ð½Ñ Ð¿ÐµÑ€ÐµÐ»Ñ–Ñ‡ÐµÐ½Ð¸Ñ… у <i>opt</i> Ñимволів;</dd> <dd>"Custom" — Ñимволів вказаних у <i>opt</i> у виглÑд "%NN";</dd> <dd>"Base64" — бінарне ÐºÐ¾Ð´ÑƒÐ²Ð°Ð½Ð½Ñ Ñƒ Base 64, де у <i>opt</i> вÑтановлюютьÑÑ Ñимвол(и) Ð¿ÐµÑ€ÐµÑ€Ð¸Ð²Ð°Ð½Ð½Ñ Ñ€Ñдку піÑÐ»Ñ 57 Ñимволів;</dd> <dd>"FormatPrint" — Ñимвол '%' в "%%";</dd> <dd>"OscdID" — майже вÑÑ– Ñимволи на кшталт <b>[ /\&(]</b> у '_';</dd> <dd>"Bin" — перелік ASCII байтів ("XX XX XX XX ...") у бінарне предÑтавленнÑ;</dd> <dd>"Reverse" — інверÑÑ–Ñ Ð¿Ð¾ÑлідовноÑÑ‚Ñ–;</dd> <dd>"ToLower" — Ñимволи до нижнього регіÑтру;</dd> <dd>"Limit" — Ð¾Ð±Ð¼ÐµÐ¶ÐµÐ½Ð½Ñ Ñ€Ñдку довжиною у <i>opt</i>, враховуючи змінну довжину UTF-8;</dd> <dd>"ShieldSymb" — захиÑÑ‚ Ñимволів із <i>opt</i> (типово ['"`]) Ñимволом Ñлешу "\" на кшталт '\n', '\r', ..., '\0NNN';</dd> <dd>"ShieldBin" — захиÑÑ‚ уÑÑ–Ñ… бінарних Ñимволів [\x0-\x8\xB-\xC\x0E-\x1F] Ñимволом Ñлешу "\".</dd></dl> </li> <li><i>string strDecode( string src, string tp = "Bin", string opt = "" );</i> — декодує Ñ€Ñдок <i>src</i> за правилом <i>tp</i> та опції <i>opt</i>. ДоÑтупні правила: <dl><dd>"PathEl", "HttpURL", "Custom" — Ñимволи виглÑду "%NN" у бінарне предÑтавленнÑ;</dd> <dd>"Base64" — відповідно з Base 64;</dd> <dd>"Bin" — бінарний Ñ€Ñдок у ASCII байти ("XX XX XX XX .. A.b.c.."), <i>opt</i> вказує на роздільник або "<text>", Ð´Ð»Ñ Ð²ÐºÐ»ÑŽÑ‡ÐµÐ½Ð½Ñ Ð·Ð¼Ñ–Ñ‰ÐµÐ½Ð½Ñ Ð»Ñ–Ð²Ð¾Ñ€ÑƒÑ‡ та текÑтової чаÑтини праворуч;</dd> <dd>"ShieldSymb" — захищені Ñимволи на кшталт '\n', '\r', ..., '\0NNN', '\xNN' у бінарне предÑтавленнÑ.</dd></dl> </li></ul> <h2><span class="mw-headline" id=".D0.91.D1.83.D0.B4.D1.8C_.D1.8F.D0.BA.D0.B8.D0.B9_.D0.BE.D0.B1.27.D1.94.D0.BA.D1.82_.28TCntrNode.29_.D0.B4.D0.B5.D1.80.D0.B5.D0.B2.D0.B0_OpenSCADA_.28SYS..2A.29"><span class="mw-headline-number">4</span> <span id="TCntrNode" title="#TCntrNode">Будь Ñкий об'єкт (TCntrNode) дерева OpenSCADA (SYS.*)</span></span></h2> <p>Функції об'єкту: </p> <ul><li> <i>PropTp property(string id, PropTp val = NULL);</i> — Повертає влаÑтивіÑÑ‚ÑŒ <i>id</i> об'єкту Ð´Ð»Ñ Ð³Ñ€ÑƒÐ¿Ð¸ <i>grp</i> із вÑтановленнÑм Ñ—Ñ— у <i>val</i> не NULL Ñ– EVAL. Де <i>val</i> у EVAL очищує влаÑтивіÑÑ‚ÑŒ Ñ– NULL (без аргументу) проÑто нічого не вÑтановлює. Ви можете <a href="#Object">звертатиÑÑ Ð¿Ñ€Ñмо</a> до влаÑтивоÑтей об'єктів TCntrNode, звіÑно за Ñ—Ñ… відÑутноÑÑ‚Ñ– у Моделі Об'єктів.</li> <li> <i>TArrayObj nodeList( string grp = "", string path = "" );</i> — повертає перелік повних ідентифікаторів дочірніх вузлів Ð´Ð»Ñ Ð³Ñ€ÑƒÐ¿Ð¸ <i>grp</i> та вузла за шлÑхом <i>path</i>. Якщо <i>grp</i> Ð¿Ð¾Ñ€Ð¾Ð¶Ð½Ñ Ñ‚Ð¾ повертаютьÑÑ Ð²ÑƒÐ·Ð»Ð¸ вÑÑ–Ñ… груп. Повний ідентифікатор, це "{grp}{nID}".</li> <li> <i>TCntrNodeObj nodeAt( string path, string sep = "" );</i> — під'єднує до вузла <i>path</i> у дереві об'єктів OpenSCADA (риÑ.1). Якщо вказуєтьÑÑ Ñ€Ð¾Ð·Ð´Ñ–Ð»ÑŒÐ½Ð¸Ðº у <i>sep</i> то шлÑÑ… оброблÑєтьÑÑ Ñк Ñ€Ñдок з роздільником. Ð”Ð»Ñ Ð²Ñ–Ð´Ñутніх Ñ– некоректних вузлів Ñ†Ñ Ñ„ÑƒÐ½ÐºÑ†Ñ–Ñ Ð¿Ð¾Ð²ÐµÑ€Ñ‚Ð°Ñ‚Ð¸Ð¼Ðµ "false", тоді Ñк коректний вузол при перетворені у BOOLEAN повертатиме "true".</li> <li> <i>TCntrNodeObj nodePrev( );</i> — повертає попередній-батьківÑький вузол.</li> <li> <i>string nodePath( string sep = "", bool from_root = true );</i> — повертає шлÑÑ… до поточного вузла у дереві об'єктів OpenSCADA (риÑ.1). Символ роздільника вказуєтьÑÑ Ñƒ <i>sep</i>, Ð´Ð»Ñ Ð¾Ñ‚Ñ€Ð¸Ð¼Ð°Ð½Ð½Ñ ÑˆÐ»Ñху через роздільник, наприклад — "DAQ.ModBus.PLC1.P1.var", інакше — "/DAQ/ModBus/PLC1/P1/var". <i>from_root</i> вказує на необхідніÑÑ‚ÑŒ формувати шлÑÑ… від ÐºÐ¾Ñ€ÐµÐ½Ñ Ñ‚Ð° без Ð²ÐºÐ°Ð·Ð°Ð½Ð½Ñ Ñ–Ð´ÐµÐ½Ñ‚Ð¸Ñ„Ñ–ÐºÐ°Ñ‚Ð¾Ñ€Ñƒ Ñтанції.</li> <li> <i>int messSys( int level, string mess )</i> — формує ÑиÑтемне Ð¿Ð¾Ð²Ñ–Ð´Ð¾Ð¼Ð»ÐµÐ½Ð½Ñ <i>mess</i> з рівнем <i>level</i>, зі шлÑхом вузла у ÑкоÑÑ‚Ñ– категорії та з читабельним шлÑхом перед повідомленнÑм.</li></ul> <h2><span class="mw-headline" id=".D0.9F.D1.96.D0.B4.D1.81.D0.B8.D1.81.D1.82.D0.B5.D0.BC.D0.B0_.22.D0.91.D0.B5.D0.B7.D0.BF.D0.B5.D0.BA.D0.B0.22_.28SYS.Security.29"><span class="mw-headline-number">5</span> ПідÑиÑтема "Безпека" (SYS.Security)</span></h2> <p>Функції об'єкту підÑиÑтеми (SYS.Security): </p> <ul><li> <i>int access( string user, int mode, string owner, string group, int perm )</i> — перевірÑÑ” доÑтуп кориÑтувача <i>user</i> до реÑурÑу, Ñкий належить <i>owner</i> та <i>group</i> з правами <i>perm</i> Ñ– Ð´Ð»Ñ Ñ€ÐµÐ¶Ð¸Ð¼Ñƒ <i>mode</i>:</li></ul> <dl><dd><dl><dd><i>user</i> — кориÑтувач перевірки доÑтупу;</dd> <dd><i>mode</i> — режим доÑтупу (4-R, 2-W, 1-X);</dd> <dd><i>owner</i> — влаÑник реÑурÑу;</dd> <dd><i>group</i> — група реÑурÑу;</dd> <dd><i>perm</i> — права реÑурÑу (RWXRWXRWX — 0777).</dd></dl></dd></dl> <p>Функції об'єкту "КориÑтувач" (SYS.Security["usr_{User}"]): </p> <ul><li> <i>ElTp cfg( string nm )</i> — отримує Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ ÐºÐ¾Ð½Ñ„Ñ–Ð³ÑƒÑ€Ð°Ñ†Ñ–Ð¹Ð½Ð¾Ð³Ð¾ Ð¿Ð¾Ð»Ñ <i>nm</i> об'єкту.</li> <li> <i>bool cfgSet( string nm, ElTp val )</i> [<span style="color:red">доÑтуп до відповідної підÑиÑтеми</span>] — вÑтановлює конфігураційне поле <i>nm</i> об'єкту у Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ <i>val</i>.</li> <li> <i>bool auth( string pass )</i> — повертає TRUE у випадку вдалої автентифікації кориÑтувача за <i>pass</i>.</li> <li> <i>Array groups( )</i> — повертає перелік груп кориÑтувача.</li></ul> <p>Функції об'єкту "Група кориÑтувачів" (SYS.Security["grp_{Group}"]): </p> <ul><li> <i>ElTp cfg( string nm )</i> — отримує Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ ÐºÐ¾Ð½Ñ„Ñ–Ð³ÑƒÑ€Ð°Ñ†Ñ–Ð¹Ð½Ð¾Ð³Ð¾ Ð¿Ð¾Ð»Ñ <i>nm</i> об'єкту.</li> <li> <i>bool cfgSet( string nm, ElTp val )</i> [<span style="color:red">доÑтуп до відповідної підÑиÑтеми</span>] — вÑтановлює конфігураційне поле <i>nm</i> об'єкту у Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ <i>val</i>.</li> <li> <i>bool user( string nm )</i> — перевірÑÑ” приÑутніÑÑ‚ÑŒ кориÑтувача <i>nm</i> у даній групі.</li></ul> <h2><span class="mw-headline" id=".D0.9F.D1.96.D0.B4.D1.81.D0.B8.D1.81.D1.82.D0.B5.D0.BC.D0.B0_.22.D0.91.D0.94.22_.28SYS.BD.29"><span class="mw-headline-number">6</span> <span id="SYS.BD" title="#SYS.BD">ПідÑиÑтема "БД" (SYS.BD)</span></span></h2> <p>Функції об'єкту бази даних (SYS.BD["TypeDB"]["DB"]): </p> <ul> <li><i>ElTp cfg( string nm )</i> — отримує Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ ÐºÐ¾Ð½Ñ„Ñ–Ð³ÑƒÑ€Ð°Ñ†Ñ–Ð¹Ð½Ð¾Ð³Ð¾ Ð¿Ð¾Ð»Ñ <i>nm</i> об'єкту.</li> <li><i>bool cfgSet( string nm, ElTp val )</i> [<span style="color:red">доÑтуп до відповідної підÑиÑтеми</span>] — вÑтановлює конфігураційне поле <i>nm</i> об'єкту у Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ <i>val</i>.</li> <li><i>Array SQLReq( string req, bool tr = EVAL );</i> — здійÑнює SQL-запит <i>req</i> до БД, вÑередині (<i>tr</i>=true), назовні (<i>tr</i>=false) або байдуже (<i>tr</i>=EVAL) до транзакції. Повертає маÑив Ñ€Ñдків таблиці результату з полÑми за індекÑами Ñ– за іменами Ñтовпців. У випадку помилки Ñ—Ñ— Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ Ñ€Ð¾Ð·Ñ‚Ð°ÑˆÐ¾Ð²ÑƒÑ”Ñ‚ÑŒÑÑ Ñƒ влаÑтивоÑÑ‚Ñ– "err" результату. <div class="mw-highlight mw-content-ltr" dir="ltr"><pre><span class="nx">DBTbl</span> <span class="o">=</span> <span class="nx">SYS</span><span class="p">.</span><span class="nx">BD</span><span class="p">.</span><span class="nx">MySQL</span><span class="p">.</span><span class="nx">GenDB</span><span class="p">.</span><span class="nx">SQLReq</span><span class="p">(</span><span class="s2">"SELECT * from DB;"</span><span class="p">);</span> <span class="k">if</span><span class="p">(</span><span class="nx">DBTbl</span><span class="p">.</span><span class="nx">err</span><span class="p">.</span><span class="nx">length</span><span class="p">)</span> <span class="nx">SYS</span><span class="p">.</span><span class="nx">messInfo</span><span class="p">(</span><span class="s2">"TEST DB"</span><span class="p">,</span><span class="s2">"Error: "</span><span class="o">+</span><span class="nx">DBTbl</span><span class="p">.</span><span class="nx">err</span><span class="p">);</span> <span class="k">else</span> <span class="k">for</span><span class="p">(</span><span class="kd">var</span> <span class="nx">iRw</span> <span class="o">=</span> <span class="mi">0</span><span class="p">;</span> <span class="nx">iRw</span> <span class="o"><</span> <span class="nx">DBTbl</span><span class="p">.</span><span class="nx">length</span><span class="p">;</span> <span class="nx">iRw</span><span class="o">++</span><span class="p">)</span> <span class="p">{</span> <span class="kd">var</span> <span class="nx">rec</span> <span class="o">=</span> <span class="s2">""</span><span class="p">;</span> <span class="k">for</span><span class="p">(</span><span class="kd">var</span> <span class="nx">iFld</span> <span class="o">=</span> <span class="mi">0</span><span class="p">;</span> <span class="nx">iFld</span> <span class="o"><</span> <span class="nx">DBTbl</span><span class="p">[</span><span class="nx">iRw</span><span class="p">].</span><span class="nx">length</span><span class="p">;</span> <span class="nx">iFld</span><span class="o">++</span><span class="p">)</span> <span class="nx">rec</span> <span class="o">+=</span> <span class="nx">DBTbl</span><span class="p">[</span><span class="nx">iRw</span><span class="p">][</span><span class="nx">iFld</span><span class="p">]</span> <span class="o">+</span> <span class="s2">"\t"</span><span class="p">;</span> <span class="nx">SYS</span><span class="p">.</span><span class="nx">messInfo</span><span class="p">(</span><span class="s2">"TEST DB"</span><span class="p">,</span> <span class="s2">"Row "</span><span class="o">+</span><span class="nx">iRw</span><span class="o">+</span><span class="s2">": "</span><span class="o">+</span><span class="nx">rec</span><span class="p">);</span> <span class="c1">//Get column value by the name</span> <span class="k">if</span><span class="p">(</span><span class="nx">iRw</span><span class="p">)</span> <span class="nx">SYS</span><span class="p">.</span><span class="nx">messInfo</span><span class="p">(</span><span class="s2">"TEST DB"</span><span class="p">,</span> <span class="s2">"Row "</span><span class="o">+</span><span class="nx">iRw</span><span class="o">+</span><span class="s2">": 'NAME'"</span><span class="o">+</span><span class="nx">DBTbl</span><span class="p">[</span><span class="nx">iRw</span><span class="p">][</span><span class="s2">"NAME"</span><span class="p">]);</span> <span class="p">}</span> </pre></div></li> </ul> <p>Функції об'єкту таблиці (SYS.BD["TypeDB"]["DB"]["Table"]): </p> <ul> <li><i>XMLNodeObj fieldStruct( );</i> — отримує Ñтруктуру таблиці у виглÑді XML вузла "field" з дочірніми вузлами-Ñтовпчиками <b><RowId type="real" len="10.2" key="1" def="Default value">{Value}</RowId></b>, де:<ul> <li>{RowId} — ідентифікатор Ñтовпчика;</li> <li>{Value} — Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ Ñтовпчика;</li> <li>type — тип Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ Ñтовпчика: <i>str</i> — Ñ€Ñдок, <i>int</i> — ціле, <i>real</i> — реальне та <i>bool</i> — логічне;</li> <li>len — розмір Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ Ñтовпчика, у знаках;</li> <li>key — ознака того, що Ñтовпчик Ñ” ключем, та пошук здійÑнюєтьÑÑ Ð·Ð° його значеннÑм;</li> <li>def — Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ Ñтовпчика по замовченню.</li> </ul></li> <li><i>string fieldSeek( int row, XMLNodeObj fld );</i> — запитує поле <i>row</i> таблиці. Якщо поле отримано то повертаєтьÑÑ "1" інакше "0". У випадку помилки повертаєтьÑÑ "0:Error".</li> <li><i>string fieldGet( XMLNodeObj fld );</i> — запитує Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ Ð¿Ð¾Ð»Ñ. У випадку помилки повертаєтьÑÑ "0:Error". <div class="mw-highlight mw-content-ltr" dir="ltr"><pre><span class="nx">req</span> <span class="o">=</span> <span class="nx">SYS</span><span class="p">.</span><span class="nx">XMLNode</span><span class="p">(</span><span class="s2">"field"</span><span class="p">);</span> <span class="nx">req</span><span class="p">.</span><span class="nx">childAdd</span><span class="p">(</span><span class="s2">"user"</span><span class="p">).</span><span class="nx">setAttr</span><span class="p">(</span><span class="s2">"type"</span><span class="p">,</span><span class="s2">"str"</span><span class="p">).</span><span class="nx">setAttr</span><span class="p">(</span><span class="s2">"key"</span><span class="p">,</span><span class="s2">"1"</span><span class="p">).</span><span class="nx">setText</span><span class="p">(</span><span class="s2">"root"</span><span class="p">);</span> <span class="nx">req</span><span class="p">.</span><span class="nx">childAdd</span><span class="p">(</span><span class="s2">"id"</span><span class="p">).</span><span class="nx">setAttr</span><span class="p">(</span><span class="s2">"type"</span><span class="p">,</span><span class="s2">"str"</span><span class="p">).</span><span class="nx">setAttr</span><span class="p">(</span><span class="s2">"key"</span><span class="p">,</span><span class="s2">"1"</span><span class="p">).</span><span class="nx">setText</span><span class="p">(</span><span class="s2">"/Lang2CodeBase"</span><span class="p">);</span> <span class="nx">req</span><span class="p">.</span><span class="nx">childAdd</span><span class="p">(</span><span class="s2">"val"</span><span class="p">).</span><span class="nx">setAttr</span><span class="p">(</span><span class="s2">"type"</span><span class="p">,</span><span class="s2">"str"</span><span class="p">);</span> <span class="nx">SYS</span><span class="p">.</span><span class="nx">BD</span><span class="p">.</span><span class="nx">MySQL</span><span class="p">.</span><span class="nx">GenDB</span><span class="p">.</span><span class="nx">SYS</span><span class="p">.</span><span class="nx">fieldGet</span><span class="p">(</span><span class="nx">req</span><span class="p">);</span> <span class="nx">SYS</span><span class="p">.</span><span class="nx">messDebug</span><span class="p">(</span><span class="s2">"TEST DB"</span><span class="p">,</span><span class="s2">"Value: "</span><span class="o">+</span><span class="nx">req</span><span class="p">.</span><span class="nx">childGet</span><span class="p">(</span><span class="mi">2</span><span class="p">).</span><span class="nx">text</span><span class="p">());</span> </pre></div></li> <li><i>string fieldSet( XMLNodeObj fld );</i> — вÑтановлює поле. У випадку помилки повертаєтьÑÑ "0:Error".</li> <li><i>string fieldDel( XMLNodeObj fld );</i> — видалÑÑ” поле. У випадку помилки повертаєтьÑÑ "0:Error".</li> </ul> <h2><span class="mw-headline" id=".D0.9F.D1.96.D0.B4.D1.81.D0.B8.D1.81.D1.82.D0.B5.D0.BC.D0.B0_.22.D0.97.D0.B1.D1.96.D1.80_.D0.B4.D0.B0.D0.BD.D0.B8.D1.85.22_.28SYS.DAQ.29"><span class="mw-headline-number">7</span> <span id="SYS.DAQ" title="#SYS.DAQ">ПідÑиÑтема "Збір даних" (SYS.DAQ)</span></span></h2> <p>Функції об'єкту підÑиÑтеми (SYS.DAQ): </p> <ul> <li><i>TCntrNodeObj daqAt(string path, string sep = "", waitForAttr = true)</i> — підключаєтьÑÑ Ð´Ð¾ DAQ вузла (об'єкт контролеру, параметр, атрибут) за шлÑхом <i>path</i> або поділюваним Ñ€Ñдком за поділювачем <i>sep</i>, від DAQ-підÑиÑтеми. ПеревірÑти на атрибут у кінці шлÑху, за <i>waitForAttr</i>.</li> <li><i>bool funcCall( string progLang, TVarObj args, string prog, string fixId = "", string err = "" );</i> — виконує текÑÑ‚ функції <i>prog</i> з аргументами у об'єкті <i>args</i> на мові Ð¿Ñ€Ð¾Ð³Ñ€Ð°Ð¼ÑƒÐ²Ð°Ð½Ð½Ñ <i>progLang</i> та з ідентифікатором фікÑації <i>fixId</i> (автоматично Ñкщо порожній). Повертає "true" при коректному виконанні, інакше "false" та вÑтановлюєтьÑÑ "err". ФікÑована Ñ„ÑƒÐ½ÐºÑ†Ñ–Ñ Ð²Ñ–Ð´Ñ€Ñ–Ð·Ð½ÑєтьÑÑ Ð²Ñ–Ð´ автоматичної тим, що вона не видалÑєтьÑÑ Ð¿Ñ–ÑÐ»Ñ Ð²Ð¸ÐºÐ¾Ð½Ð°Ð½Ð½Ñ, а викориÑтовуєтьÑÑ Ð¿Ð¾Ð²Ñ‚Ð¾Ñ€Ð½Ð¾ за адреÑою у <i>fixId</i>, Ñка замінює оригінальний ідентифікатор при першому виклику. Ð”Ð»Ñ Ð¿ÐµÑ€ÐµÑ„Ð¾Ñ€Ð¼ÑƒÐ²Ð°Ð½Ð½Ñ Ñ„ÑƒÐ½ÐºÑ†Ñ–Ñ— треба змінити програму або очиÑтити <i>fixId</i> у Ñ—Ñ— оригінальний ідентифікатор. <div class="mw-highlight mw-content-ltr" dir="ltr"><pre><span class="kd">var</span> <span class="nx">args</span> <span class="o">=</span> <span class="k">new</span> <span class="nb">Object</span><span class="p">();</span> <span class="nx">args</span><span class="p">.</span><span class="nx">y</span> <span class="o">=</span> <span class="mi">0</span><span class="p">;</span> <span class="nx">args</span><span class="p">.</span><span class="nx">x</span> <span class="o">=</span> <span class="mi">123</span><span class="p">;</span> <span class="nx">SYS</span><span class="p">.</span><span class="nx">DAQ</span><span class="p">.</span><span class="nx">funcCall</span><span class="p">(</span><span class="s2">"JavaLikeCalc.JavaScript"</span><span class="p">,</span><span class="nx">args</span><span class="p">,</span><span class="s2">"y=2*x;"</span><span class="p">);</span> <span class="nx">SYS</span><span class="p">.</span><span class="nx">messDebug</span><span class="p">(</span><span class="s2">"TEST Calc"</span><span class="p">,</span><span class="s2">"TEST Calc rezult: "</span><span class="o">+</span><span class="nx">args</span><span class="p">.</span><span class="nx">y</span><span class="p">);</span> </pre></div></li> <li><i>string funcSnthHgl(string progLang);</i> — запит правил підÑÐ²Ñ–Ñ‚Ð»ÐµÐ½Ð½Ñ ÑинтакÑиÑу мови програми <i>progLang</i> у <a href="API.html#SnthHgl" title="Special:MyLanguage/Documents/API">XML-тегу <i>SnthHgl</i></a>.</li> </ul> <p>Функції об'єкту контролеру (SYS.DAQ["Modul"]["Controller"]): </p> <ul><li> <i>ElTp cfg( string nm )</i> — отримує Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ ÐºÐ¾Ð½Ñ„Ñ–Ð³ÑƒÑ€Ð°Ñ†Ñ–Ð¹Ð½Ð¾Ð³Ð¾ Ð¿Ð¾Ð»Ñ <i>nm</i> об'єкту.</li> <li> <i>bool cfgSet( string nm, ElTp val )</i> [<span style="color:red">доÑтуп до відповідної підÑиÑтеми</span>] — вÑтановлює конфігураційне Ð¿Ð¾Ð»Ñ <i>nm</i> об'єкту у Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ <i>val</i>.</li> <li> <i>string name( )</i> — ім'Ñ Ð¾Ð±'єкту контролера.</li> <li> <i>string descr( )</i> — Ð¾Ð¿Ð¸Ñ Ð¾Ð±'єкту та контролеру.</li> <li> <i>string status( )</i> — ÑÑ‚Ð°Ñ‚ÑƒÑ ÐºÐ¾Ð½Ñ‚Ñ€Ð¾Ð»ÐµÑ€Ñƒ.</li> <li> <i>bool messSet( string mess, int lev, string type2Code = "OP", string prm = "", string cat = "")</i> — вÑтановлює Ð¿Ð¾Ð²Ñ–Ð´Ð¾Ð¼Ð»ÐµÐ½Ð½Ñ Ð´Ð¶ÐµÑ€ÐµÐ»Ð° даних <i>mess</i> із рівнем <i>lev</i>, Ð´Ð»Ñ Ð¿Ð°Ñ€Ð°Ð¼ÐµÑ‚Ñ€Ñƒ <i>prm</i> (<b>{PrmId}</b>), додатковою інформацією категорії <i>cat</i> та кодом типу <i>type2Code</i>. Ð¦Ñ Ñ„ÑƒÐ½ÐºÑ†Ñ–Ñ <a href="Program_manual.html#ArchMess" title="Special:MyLanguage/Documents/Program manual">формує повідомленнÑ</a> з уніфікованою категорією транÑÐ¿Ð¾Ñ€Ñ‚ÑƒÐ²Ð°Ð½Ð½Ñ Ñ‡ÐµÑ€ÐµÐ· джерело даних <b>{type2Code}{ModId}:{CntrId}[.{PrmId}][:{cat}]</b>, де: <ul><li> <i>type2Code</i> — двоÑимвольний код типу повідомленнÑ, по замовченню означає дію оператору "OP";</li> <li> <i>ModId</i> — ідентифікатор модулÑ;</li> <li> <i>CntrId</i> — ідентифікатор об'єкту контролера;</li> <li> <i>PrmId</i> — ідентифікатор параметру, з аргументу <i>prm</i>;</li> <li> <i>cat</i> — додаткова Ñ–Ð½Ñ„Ð¾Ñ€Ð¼Ð°Ñ†Ñ–Ñ ÐºÐ°Ñ‚ÐµÐ³Ð¾Ñ€Ñ–Ñ— Ñку визначено Ð´Ð»Ñ Ñ‚Ð¸Ð¿Ñƒ <i>type2Code</i>.</li></ul></li> <li> <i>bool alarmSet( string mess, int lev = -5, string prm = "", bool force = false )</i> — вÑтановлює/знімає Ð¿Ð¾Ñ€ÑƒÑˆÐµÐ½Ð½Ñ <i>mess</i> із рівнем <i>lev</i> (негативне Ð´Ð»Ñ Ð²ÑÑ‚Ð°Ð½Ð¾Ð²Ð»ÐµÐ½Ð½Ñ Ñ–Ð½Ð°ÐºÑˆÐµ знÑÑ‚Ñ‚Ñ), Ð´Ð»Ñ Ð¿Ð°Ñ€Ð°Ð¼ÐµÑ‚Ñ€Ñƒ <i>prm</i> (<b>{PrmId}\n{PrmNm}</b>). ÐžÑ‡Ð¸Ñ‰ÐµÐ½Ð½Ñ Ð¿Ð¾Ñ€ÑƒÑˆÐµÐ½ÑŒ, так Ñк Ñ– вÑтановленнÑ, працює у режимі перемикача, що передбачає пропуÑк повідомлень Ð¾Ñ‡Ð¸Ñ‰ÐµÐ½Ð½Ñ Ð´Ð¾ буферу повідомлень, та Ñаме очищеннÑ, лише за наÑвноÑÑ‚Ñ– відповідного порушеннÑ, що може бути вимкнено вÑтановленнÑм <i>force</i>. Ð¤ÑƒÐ½ÐºÑ†Ñ–Ñ Ñ„Ð¾Ñ€Ð¼ÑƒÑ” Ð¿Ð¾Ñ€ÑƒÑˆÐµÐ½Ð½Ñ Ð· категорією <b>al{ModId}:{CntrId}[.{PrmId}]</b> та текÑтом <b>{CntrNm} > {PrmNm}: {MessText}</b>, де: <ul><li> <i>ModId</i> — ідентифікатор модулÑ;</li> <li> <i>CntrId</i> — ідентифікатор об'єкту контролера;</li> <li> <i>PrmId</i> — ідентифікатор параметру, з аргументу <i>prm</i>;</li> <li> <i>CntrNm</i> — назва об'єкту контролера;</li> <li> <i>PrmNm</i> — назва параметру, з аргументу <i>prm</i>;</li> <li> <i>MessText</i> — текÑÑ‚ повідомленнÑ.</li></ul></li> <li> <i>bool enable( bool newSt = EVAL )</i> — отримує Ñтан "Включений" або змінює його призначеннÑм атрибуту <i>newSt</i>.</li> <li> <i>bool start( bool newSt = EVAL)</i> — отримує Ñтан "ВиконуєтьÑÑ" або змінює його призначеннÑм атрибуту <i>newSt</i>.</li></ul> <p>Функції об'єкту параметру контролера (SYS.DAQ["Modul"]["Controller"]["Parameter"]): </p> <ul><li> <i>ElTp cfg( string nm )</i> — отримує Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ ÐºÐ¾Ð½Ñ„Ñ–Ð³ÑƒÑ€Ð°Ñ†Ñ–Ð¹Ð½Ð¾Ð³Ð¾ Ð¿Ð¾Ð»Ñ <i>nm</i> об'єкту.</li> <li> <i>bool cfgSet( string nm, ElTp val )</i> [<span style="color:red">доÑтуп до відповідної підÑиÑтеми</span>] — вÑтановлює конфігураційне Ð¿Ð¾Ð»Ñ <i>nm</i> об'єкту у Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ <i>val</i>.</li> <li> <i>TCntrNodeObj cntr( )</i> — повертає об'єкт контролеру цього параметру, незалежно від вкладеноÑÑ‚Ñ–.</li> <li> <i>bool messSet( string mess, int lev, string type2Code = "OP", string cat = "")</i> — вÑтановлює Ð¿Ð¾Ð²Ñ–Ð´Ð¾Ð¼Ð»ÐµÐ½Ð½Ñ Ð´Ð¶ÐµÑ€ÐµÐ»Ð° даних <i>mess</i> із рівнем <i>lev</i>, Ð´Ð»Ñ Ð¿Ð°Ñ€Ð°Ð¼ÐµÑ‚Ñ€Ñƒ.</li> <li> <i>bool alarmSet( string mess, int lev = -5, bool force = false )</i> — вÑтановлює/знімає Ð¿Ð¾Ñ€ÑƒÑˆÐµÐ½Ð½Ñ <i>mess</i> з рівнем <i>lev</i> (негативне Ð´Ð»Ñ Ð²ÑÑ‚Ð°Ð½Ð¾Ð²Ð»ÐµÐ½Ð½Ñ Ñ–Ð½Ð°ÐºÑˆÐµ знÑÑ‚Ñ‚Ñ) Ð´Ð»Ñ Ñ†ÑŒÐ¾Ð³Ð¾ параметру. ÐžÑ‡Ð¸Ñ‰ÐµÐ½Ð½Ñ Ð¿Ð¾Ñ€ÑƒÑˆÐµÐ½ÑŒ, так Ñк Ñ– вÑтановленнÑ, працює у режимі перемикача, що передбачає пропуÑк повідомлень Ð¾Ñ‡Ð¸Ñ‰ÐµÐ½Ð½Ñ Ð´Ð¾ буферу повідомлень, та Ñаме очищеннÑ, лише за наÑвноÑÑ‚Ñ– відповідного порушеннÑ, що може бути вимкнено вÑтановленнÑм <i>force</i>.</li></ul> <p>Функції об'єкту атрибута параметра контролера (SYS.DAQ["Modul"]["Controller"]["Parameter"]["Attribute"]): </p> <ul><li> <i>ElTp get( int tm = 0, int utm = 0, bool sys = false )</i> — запитує Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ Ð°Ñ‚Ñ€Ð¸Ð±ÑƒÑ‚Ñƒ на Ñ‡Ð°Ñ <i>tm.utm</i> та ознакою ÑиÑтемного доÑтупу <i>sys</i>. Ðтрибути чаÑу <i>tm.utm</i> Ñ” також виходами, відтак реальний Ñ‡Ð°Ñ Ð¾Ñ‚Ñ€Ð¸Ð¼Ð°Ð½Ð¾Ð³Ð¾ Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ Ñ€Ð¾Ð·Ð¼Ñ–Ñ‰ÑƒÑ”Ñ‚ÑŒÑÑ Ñƒ них, Ñкщо це змінні.</li> <li> <i>bool set( ElTp val, int tm = 0, int utm = 0, bool sys = false )</i> — запиÑує Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ <i>val</i> до атрибуту з міткою чаÑу <i>tm:utm</i> та ознакою ÑиÑтемного доÑтупу <i>sys</i>.</li> <li> <i>TCntrNodeObj arch( )</i> — отримує об'єкт архіву, пов'Ñзаний з цим атрибутом. У випадку відÑутноÑÑ‚Ñ– пов'Ñзаного архіву повертаєтьÑÑ "false".</li> <li> <i>string descr( )</i> — Ð¾Ð¿Ð¸Ñ Ð°Ñ‚Ñ€Ð¸Ð±ÑƒÑ‚Ñƒ.</li> <li> <i>int time( int utm )</i> — Ñ‡Ð°Ñ Ð¾Ñтаннього Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ Ñƒ Ñекундах та мікроÑекундах у <i>utm</i>, Ñкщо вказано та Ñ” змінною.</li> <li> <i>int len( )</i> — довжина Ð¿Ð¾Ð»Ñ Ñƒ БД.</li> <li> <i>int dec( )</i> — роздільна здатніÑÑ‚ÑŒ реального чиÑла Ð¿Ð¾Ð»Ñ Ñƒ БД.</li> <li> <i>int flg( )</i> — прапорці полÑ.</li> <li> <i>string def( )</i> — Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ Ð¿Ð¾ замовченню.</li> <li> <i>string values( )</i> — перелік допуÑтимих значень або діапазон.</li> <li> <i>string selNames( )</i> — перелік імен допуÑтимих значень.</li> <li> <i>string reserve( )</i> — резервна влаÑтивіÑÑ‚ÑŒ значеннÑ.</li></ul> <p>Функції об'єкта бібліотеки шаблона (SYS.DAQ[tmplb_Lib"]) та шаблону (SYS.DAQ[tmplb_Lib"]["Tmpl"]) параметра контролеру: </p> <ul><li> <i>ElTp cfg( string nm )</i> — отримує Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ ÐºÐ¾Ð½Ñ„Ñ–Ð³ÑƒÑ€Ð°Ñ†Ñ–Ð¹Ð½Ð¾Ð³Ð¾ Ð¿Ð¾Ð»Ñ <i>nm</i> об'єкту.</li> <li> <i>bool cfgSet( string nm, ElTp val )</i> [<span style="color:red">доÑтуп до відповідної підÑиÑтеми</span>] — вÑтановлює конфігураційне Ð¿Ð¾Ð»Ñ <i>nm</i> об'єкту у Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ <i>val</i>.</li></ul> <h3><span class="mw-headline" id=".D0.9C.D0.BE.D0.B4.D1.83.D0.BB.D1.8C_DAQ.JavaLikeCalc"><span class="mw-headline-number">7.1</span> Модуль <a href="Modules/JavaLikeCalc.html" title="Special:MyLanguage/Modules/JavaLikeCalc">DAQ.JavaLikeCalc</a></span></h3> <div class="floatright"><a class="image" href="http://oscada.org/wiki/File:Oscada_UserOM_JavaLikeCalc_uk.png" title="Об'єктна модель кориÑтувача Ð¼Ð¾Ð´ÑƒÐ»Ñ JavaLikeCalc."><img alt="Об'єктна модель кориÑтувача Ð¼Ð¾Ð´ÑƒÐ»Ñ JavaLikeCalc." height="214" src="files/Oscada_UserOM_JavaLikeCalc_uk.png" width="223" /></a></div> <p><b>Об'єкт "Бібліотека функцій" (SYS.DAQ.JavaLikeCalc["lib_Lfunc"])</b> </p> <ul><li> <i>ElTp {funcID}(ElTp prm1, ...)</i> — викликає функцію "funcID" бібліотеки "Lfunc" з параметрами <i>prm{N}</i>. Повертає результат викликаної функції. ÐŸÑ€ÐµÑ„Ñ–ÐºÑ "lib_" перед ідентифікатором бібліотеки обов'Ñзковий!</li></ul> <p><b>Об'єкт "КориÑтувацька функціÑ" (SYS.DAQ.JavaLikeCalc["lib_Lfunc"]["func"])</b> </p> <ul><li> <i>ElTp call(ElTp prm1, ...)</i> — викликає функцію "func" бібліотеки "Lfunc" з параметрами <i>prm{N}</i>. Повертає результат викликаної функції. ÐŸÑ€ÐµÑ„Ñ–ÐºÑ "lib_" перед ідентифікатором бібліотеки обов'Ñзковий!</li></ul> <h3><span class="mw-headline" id=".D0.9C.D0.BE.D0.B4.D1.83.D0.BB.D1.8C_DAQ.LogicLev"><span class="mw-headline-number">7.2</span> Модуль <a href="Modules/LogicLev.html" title="Special:MyLanguage/Modules/LogicLev">DAQ.LogicLev</a></span></h3> <p><b>Об'єкт "Параметр" [this]</b> </p> <ul><li> <i>bool attrAdd( string id, string name, string tp = "real", string selValsNms = "" )</i> [<span style="color: red">Ð´Ð»Ñ Ð²ÐºÐ»ÑŽÑ‡ÐµÐ½Ð¾Ð³Ð¾ параметру логічного типу</span>] — Ð´Ð¾Ð´Ð°Ð½Ð½Ñ Ð°Ñ‚Ñ€Ð¸Ð±ÑƒÑ‚Ñƒ <i>id</i> з ім'Ñм <i>name</i> та типом <i>tp</i>. Якщо атрибут вже приÑутній то будуть заÑтоÑовані влаÑтивоÑÑ‚Ñ–, Ñкі можливо змінити "на ходу": ім'Ñ, режим вибору та параметри вибору. <ul><li> <i>id, name</i> — ідентифікатор та ім'Ñ Ð½Ð¾Ð²Ð¾Ð³Ð¾ атрибуту;</li> <li> <i>tp</i> — тип атрибута [boolean | integer | real | string | text | object] + режим вибору [sel | seled] + тільки Ð´Ð»Ñ Ñ‡Ð¸Ñ‚Ð°Ð½Ð½Ñ [ro];</li> <li> <i>selValsNms</i> — два Ñ€Ñдки зі значеннÑми у першому та Ñ—Ñ… іменами у другому, поділені ";".</li></ul></li> <li> <i>bool attrDel( string id )</i> [<span style="color: red">Ð´Ð»Ñ Ð²ÐºÐ»ÑŽÑ‡ÐµÐ½Ð¾Ð³Ð¾ параметру логічного типу</span>] — Ð²Ð¸Ð´Ð°Ð»ÐµÐ½Ð½Ñ Ð°Ñ‚Ñ€Ð¸Ð±ÑƒÑ‚Ñƒ <i>id</i>.</li></ul> <h3><span class="mw-headline" id=".D0.9C.D0.BE.D0.B4.D1.83.D0.BB.D1.8C_DAQ.BlockCalc"><span class="mw-headline-number">7.3</span> Модуль <a href="Modules/BlockCalc.html" title="Special:MyLanguage/Modules/BlockCalc">DAQ.BlockCalc</a></span></h3> <div class="floatright"><a class="image" href="http://oscada.org/wiki/File:Oscada_UserOM_BlockCalc_uk.png" title="Об'єктна модель кориÑтувача Ð¼Ð¾Ð´ÑƒÐ»Ñ BlockCalc."><img alt="Об'єктна модель кориÑтувача Ð¼Ð¾Ð´ÑƒÐ»Ñ BlockCalc." height="214" src="files/Oscada_UserOM_BlockCalc_uk.png" width="218" /></a></div> <p><b>Об'єкт "Блок" (SYS.DAQ.BlockCalc["cntr"]["blk_block"])</b> </p> <ul><li> <i>ElTp cfg(string nm)</i> — Ð¾Ñ‚Ñ€Ð¸Ð¼Ð°Ð½Ð½Ñ Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ ÐºÐ¾Ð½Ñ„Ñ–Ð³ÑƒÑ€Ð°Ñ†Ñ–Ð¹Ð½Ð¾Ð³Ð¾ Ð¿Ð¾Ð»Ñ <i>nm</i> об'єкта.</li> <li> <i>bool cfgSet(string nm, ElTp val)</i> [<span style="color:red">доÑтуп до відповідної підÑиÑтеми</span>] — уÑтановка конфігураційного Ð¿Ð¾Ð»Ñ <i>nm</i> об'єкта у Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ <i>val</i>.</li> <li> <i>TCntrNodeObj cntr()</i> — повертає об'єкт контролеру цього параметру, незалежно від вкладеноÑÑ‚Ñ–.</li></ul> <h3><span class="mw-headline" id=".D0.9C.D0.BE.D0.B4.D1.83.D0.BB.D1.8C_DAQ.ModBus"><span class="mw-headline-number">7.4</span> Модуль <a href="Modules/ModBus.html" title="Special:MyLanguage/Modules/ModBus">DAQ.ModBus</a></span></h3> <div class="floatright"><a class="image" href="http://oscada.org/wiki/File:Oscada_UserOM_ModBus_uk.png" title="Об'єктна модель кориÑтувача Ð¼Ð¾Ð´ÑƒÐ»Ñ ModBus."><img alt="Об'єктна модель кориÑтувача Ð¼Ð¾Ð´ÑƒÐ»Ñ ModBus." height="215" src="files/Oscada_UserOM_ModBus_uk.png" width="323" /></a></div> <p><b>Об'єкт "Контролер" [this.cntr()]</b> </p> <ul><li> <i>string messIO(string pdu)</i> — відправка PDU <i>pdu</i> через транÑпорт об'єкту контролеру за поÑередництвом ModBus протоколу. PDU результату запиту розташовуєтьÑÑ Ð·Ð°Ð¼Ñ–ÑÑ‚ÑŒ запиту у <i>pdu</i>, а помилка повертаєтьÑÑ Ñƒ результаті функції.</li></ul> <p><b>Об'єкт "Параметр" [this]</b> </p> <ul><li> <i>bool attrAdd( string id, string name, string tp = "real", string selValsNms = "" )</i> [<span style="color: red">Ð´Ð»Ñ Ð²ÐºÐ»ÑŽÑ‡ÐµÐ½Ð¾Ð³Ð¾ параметру логічного типу</span>] — Ð´Ð¾Ð´Ð°Ð½Ð½Ñ Ð°Ñ‚Ñ€Ð¸Ð±ÑƒÑ‚Ñƒ <i>id</i> з ім'Ñм <i>name</i> та типом <i>tp</i>. Якщо атрибут вже приÑутній то будуть заÑтоÑовані влаÑтивоÑÑ‚Ñ–, Ñкі можливо змінити "на ходу": ім'Ñ, режим вибору та параметри вибору. <ul><li> <i>id, name</i> — ідентифікатор та ім'Ñ Ð½Ð¾Ð²Ð¾Ð³Ð¾ атрибуту;</li> <li> <i>tp</i> — тип атрибута [boolean | integer | real | string | text | object] + режим вибору [sel | seled] + тільки Ð´Ð»Ñ Ñ‡Ð¸Ñ‚Ð°Ð½Ð½Ñ [ro];</li> <li> <i>selValsNms</i> — два Ñ€Ñдки зі значеннÑми у першому та Ñ—Ñ… іменами у другому, поділені ";".</li></ul></li> <li> <i>bool attrDel( string id )</i> [<span style="color: red">Ð´Ð»Ñ Ð²ÐºÐ»ÑŽÑ‡ÐµÐ½Ð¾Ð³Ð¾ параметру логічного типу</span>] — Ð²Ð¸Ð´Ð°Ð»ÐµÐ½Ð½Ñ Ð°Ñ‚Ñ€Ð¸Ð±ÑƒÑ‚Ñƒ <i>id</i>.</li></ul> <h3><span class="mw-headline" id=".D0.9C.D0.BE.D0.B4.D1.83.D0.BB.D1.8C_DAQ.Siemens"><span class="mw-headline-number">7.5</span> Модуль <a href="Modules/Siemens.html" title="Special:MyLanguage/Modules/Siemens">DAQ.Siemens</a></span></h3> <p><b>Об'єкт "Параметр" [this]</b> </p> <ul><li> <i>bool attrAdd( string id, string name, string tp = "real", string selValsNms = "" )</i> [<span style="color: red">Ð´Ð»Ñ Ð²ÐºÐ»ÑŽÑ‡ÐµÐ½Ð¾Ð³Ð¾ параметру логічного типу</span>] — Ð´Ð¾Ð´Ð°Ð½Ð½Ñ Ð°Ñ‚Ñ€Ð¸Ð±ÑƒÑ‚Ñƒ <i>id</i> з ім'Ñм <i>name</i> та типом <i>tp</i>. Якщо атрибут вже приÑутній то будуть заÑтоÑовані влаÑтивоÑÑ‚Ñ–, Ñкі можливо змінити "на ходу": ім'Ñ, режим вибору та параметри вибору. <ul><li> <i>id, name</i> — ідентифікатор та ім'Ñ Ð½Ð¾Ð²Ð¾Ð³Ð¾ атрибуту;</li> <li> <i>tp</i> — тип атрибута [boolean | integer | real | string | text | object] + режим вибору [sel | seled] + тільки Ð´Ð»Ñ Ñ‡Ð¸Ñ‚Ð°Ð½Ð½Ñ [ro];</li> <li> <i>selValsNms</i> — два Ñ€Ñдки зі значеннÑми у першому та Ñ—Ñ… іменами у другому, поділені ";".</li></ul></li> <li> <i>bool attrDel( string id )</i> [<span style="color: red">Ð´Ð»Ñ Ð²ÐºÐ»ÑŽÑ‡ÐµÐ½Ð¾Ð³Ð¾ параметру логічного типу</span>] — Ð²Ð¸Ð´Ð°Ð»ÐµÐ½Ð½Ñ Ð°Ñ‚Ñ€Ð¸Ð±ÑƒÑ‚Ñƒ <i>id</i>.</li></ul> <h3><span class="mw-headline" id=".D0.9C.D0.BE.D0.B4.D1.83.D0.BB.D1.8C_DAQ.OPC_UA"><span class="mw-headline-number">7.6</span> Модуль <a href="Modules/OPC_UA.html" title="Special:MyLanguage/Modules/OPC UA">DAQ.OPC_UA</a></span></h3> <p><b>Об'єкт "Параметр" [this]</b> </p> <ul><li> <i>bool attrAdd( string id, string name, string tp = "real", string selValsNms = "" )</i> [<span style="color: red">Ð´Ð»Ñ Ð²ÐºÐ»ÑŽÑ‡ÐµÐ½Ð¾Ð³Ð¾ параметру логічного типу</span>] — Ð´Ð¾Ð´Ð°Ð½Ð½Ñ Ð°Ñ‚Ñ€Ð¸Ð±ÑƒÑ‚Ñƒ <i>id</i> з ім'Ñм <i>name</i> та типом <i>tp</i>. Якщо атрибут вже приÑутній то будуть заÑтоÑовані влаÑтивоÑÑ‚Ñ–, Ñкі можливо змінити "на ходу": ім'Ñ, режим вибору та параметри вибору. <ul><li> <i>id, name</i> — ідентифікатор та ім'Ñ Ð½Ð¾Ð²Ð¾Ð³Ð¾ атрибуту;</li> <li> <i>tp</i> — тип атрибута [boolean | integer | real | string | text | object] + режим вибору [sel | seled] + тільки Ð´Ð»Ñ Ñ‡Ð¸Ñ‚Ð°Ð½Ð½Ñ [ro];</li> <li> <i>selValsNms</i> — два Ñ€Ñдки зі значеннÑми у першому та Ñ—Ñ… іменами у другому, поділені ";".</li></ul></li> <li> <i>bool attrDel( string id )</i> [<span style="color: red">Ð´Ð»Ñ Ð²ÐºÐ»ÑŽÑ‡ÐµÐ½Ð¾Ð³Ð¾ параметру логічного типу</span>] — Ð²Ð¸Ð´Ð°Ð»ÐµÐ½Ð½Ñ Ð°Ñ‚Ñ€Ð¸Ð±ÑƒÑ‚Ñƒ <i>id</i>.</li></ul> <p><br /> </p> <h2><span class="mw-headline" id=".D0.9F.D1.96.D0.B4.D1.81.D0.B8.D1.81.D1.82.D0.B5.D0.BC.D0.B0_.22.D0.90.D1.80.D1.85.D1.96.D0.B2.D0.B8-.D0.86.D1.81.D1.82.D0.BE.D1.80.D1.96.D1.8F.22_.28SYS.Archive.29"><span class="mw-headline-number">8</span> <span id="SYS.Archive" title="#SYS.Archive">ПідÑиÑтема "Ðрхіви-ІÑторіÑ" (SYS.Archive)</span></span></h2> <p>Функції об'єкту підÑиÑтеми: </p> <ul><li> <i>Array messGet( int btm, int etm, string cat = "", int lev = 0, string arch = "", int upTm = 0 );</i> — запитує Ð¿Ð¾Ð²Ñ–Ð´Ð¾Ð¼Ð»ÐµÐ½Ð½Ñ Ð¿Ñ€Ð¾Ð³Ñ€Ð°Ð¼Ð¸ або Ð¿Ð¾Ñ€ÑƒÑˆÐµÐ½Ñ (lev < 0) на Ñ‡Ð°Ñ Ð²Ñ–Ð´ <i>btm</i> по <i>etm</i> Ð´Ð»Ñ ÐºÐ°Ñ‚ÐµÐ³Ð¾Ñ€Ñ–Ñ— <i>cat</i>, Ñ€Ñ–Ð²Ð½Ñ <i>lev</i> (-7...7) та архіваторів <i>arch</i> (поділені Ñимволом ';'; "" — буфер та архіватори; "<buffer>" — буфер; "{ArhMod}.{Arh}" — конкретний архіватор модулÑ). <i>upTm</i> вÑтановлює Ð¾Ð±Ð¼ÐµÐ¶ÐµÐ½Ð½Ñ Ñ‚Ñ€Ð¸Ð²Ð°Ð»Ð¾ÑÑ‚Ñ– операції у визначений чаÑ; негативне Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ Ð²Ð¸ÐºÐ¾Ñ€Ð¸ÑтовуєтьÑÑ Ñк відноÑний чаÑ; менше ніж STD_INTERF_TM (5). ПовертаєтьÑÑ Ñ‡Ð°Ñ Ð·ÑƒÐ¿Ð¸Ð½ÐºÐ¸ Ñ‡Ð¸Ñ‚Ð°Ð½Ð½Ñ (атрибут "tm" маÑиву) та маÑив об'єктів повідомлень/порушень з влаÑтивоÑÑ‚Ñми: <ul><li> <i>tm</i> — Ñ‡Ð°Ñ Ð¿Ð¾Ð²Ñ–Ð´Ð¾Ð¼Ð»ÐµÐ½Ð½Ñ, Ñекунди;</li> <li> <i>utm</i> — Ñ‡Ð°Ñ Ð¿Ð¾Ð²Ñ–Ð´Ð¾Ð¼Ð»ÐµÐ½Ð½Ñ, мікроÑекунди;</li> <li> <i>categ</i> — ÐºÐ°Ñ‚ÐµÐ³Ð¾Ñ€Ñ–Ñ Ð¿Ð¾Ð²Ñ–Ð´Ð¾Ð¼Ð»ÐµÐ½Ð½Ñ;</li> <li> <i>level</i> — рівень повідомленнÑ;</li> <li> <i>mess</i> — текÑÑ‚ повідомленнÑ.</li></ul></li> <li> <i>bool messPut( int tm, int utm, string cat, int lev, string mess, string arch = "" );</i> — запиÑує Ð¿Ð¾Ð²Ñ–Ð´Ð¾Ð¼Ð»ÐµÐ½Ð½Ñ <i>mess</i> з категорією <i>cat</i>, рівнем <i>lev</i> (-7...7) та чаÑом <i>tm.utm</i> до архіваторів <i>arch</i> (поділені Ñимволом ';') та/або перелік порушень.</li></ul> <p>Функції об'єкту архіватору повідомлень (SYS.Archive["mod_Modul"]["mess_Archivator"]): </p> <ul><li> <i>ElTp cfg( string nm )</i> — отримує Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ ÐºÐ¾Ð½Ñ„Ñ–Ð³ÑƒÑ€Ð°Ñ†Ñ–Ð¹Ð½Ð¾Ð³Ð¾ Ð¿Ð¾Ð»Ñ <i>nm</i> об'єкту.</li> <li> <i>bool cfgSet( string nm, ElTp val )</i> [<span style="color:red">доÑтуп до відповідної підÑиÑтеми</span>] — вÑтановлює конфігураційне Ð¿Ð¾Ð»Ñ <i>nm</i> об'єкту у Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ <i>val</i>.</li> <li> <i>bool status( )</i> — ÑÑ‚Ð°Ñ‚ÑƒÑ Ð°Ñ€Ñ…Ñ–Ð²Ð°Ñ‚Ð¾Ñ€Ñƒ "ВиконаннÑ".</li> <li> <i>int end( )</i> — Ñ‡Ð°Ñ Ð·Ð°ÐºÑ–Ð½Ñ‡ÐµÐ½Ð½Ñ Ð´Ð°Ð½Ð¸Ñ… архіватору.</li> <li> <i>int begin( )</i> — Ñ‡Ð°Ñ Ð¿Ð¾Ñ‡Ð°Ñ‚ÐºÑƒ даних архіватору.</li></ul> <p>Функції об'єкту архіватору значень (SYS.Archive["val_Modul"]["val_Archivator"]): </p> <ul><li> <i>ElTp cfg( string nm )</i> — отримує Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ ÐºÐ¾Ð½Ñ„Ñ–Ð³ÑƒÑ€Ð°Ñ†Ñ–Ð¹Ð½Ð¾Ð³Ð¾ Ð¿Ð¾Ð»Ñ <i>nm</i> об'єкту.</li> <li> <i>bool cfgSet( string nm, ElTp val )</i> [<span style="color:red">доÑтуп до відповідної підÑиÑтеми</span>] — вÑтановлює конфігураційне Ð¿Ð¾Ð»Ñ <i>nm</i> об'єкту у Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ <i>val</i>.</li> <li> <i>bool status( )</i> — ÑÑ‚Ð°Ñ‚ÑƒÑ Ð°Ñ€Ñ…Ñ–Ð²Ð°Ñ‚Ð¾Ñ€Ñƒ "ВиконаннÑ".</li></ul> <p><span id="SYS.Archive" title="#SYS.Archive">Функції об'єкту архіву (SYS.Archive["va_Archive"]):</span> </p> <ul><li> <i>ElTp cfg( string nm )</i> — отримує Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ ÐºÐ¾Ð½Ñ„Ñ–Ð³ÑƒÑ€Ð°Ñ†Ñ–Ð¹Ð½Ð¾Ð³Ð¾ Ð¿Ð¾Ð»Ñ <i>nm</i> об'єкту.</li> <li> <i>bool cfgSet( string nm, ElTp val )</i> [<span style="color:red">доÑтуп до відповідної підÑиÑтеми</span>] — вÑтановлює конфігураційне Ð¿Ð¾Ð»Ñ <i>nm</i> об'єкту у Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ <i>val</i>.</li> <li> <i>bool status( )</i> — ÑÑ‚Ð°Ñ‚ÑƒÑ Ð°Ñ€Ñ…Ñ–Ð²Ñƒ "ВиконаннÑ".</li> <li> <i>int end( string arch = "" )</i> — Ñ‡Ð°Ñ Ð·Ð°ÐºÑ–Ð½Ñ‡ÐµÐ½Ð½Ñ Ð´Ð°Ð½Ð¸Ñ… архіву Ð´Ð»Ñ Ð°Ñ€Ñ…Ñ–Ð²Ð°Ñ‚Ð¾Ñ€Ñƒ <i>arch</i>, у мікроÑекундах.</li> <li> <i>int begin( string arch = "" )</i> — Ñ‡Ð°Ñ Ð¿Ð¾Ñ‡Ð°Ñ‚ÐºÑƒ даних архіву Ð´Ð»Ñ Ð°Ñ€Ñ…Ñ–Ð²Ð°Ñ‚Ð¾Ñ€Ñƒ <i>arch</i>, у мікроÑекундах.</li> <li> <i>int period( string arch = "" )</i> — період даних архіву Ð´Ð»Ñ Ð°Ñ€Ñ…Ñ–Ð²Ð°Ñ‚Ð¾Ñ€Ñƒ <i>arch</i>, у мікроÑекундах.</li> <li> <i>TArrayObj archivatorList( )</i> — перелік архіваторів, Ñкі викориÑтовують цей архів Ñк джерело.</li> <li> <i>VarType getVal( int tm, bool up_ord = false, string arch = "" )</i> — отримує Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ Ð· архіву на Ñ‡Ð°Ñ <i>tm</i>, підтÑгненнÑм догори <i>up_ord</i> та архіватору <i>arch</i>: <ul><li> <i>tm</i> — Ñ‡Ð°Ñ Ð·Ð°Ð¿Ð¸Ñ‚Ð°Ð½Ð¾Ð³Ð¾ значеннÑ, у мікроÑекундах, вÑтановити у 0 Ð´Ð»Ñ "end()"; цей атрибут Ñ” також виходом, відтак реальний Ñ‡Ð°Ñ Ð¾Ñ‚Ñ€Ð¸Ð¼Ð°Ð½Ð¾Ð³Ð¾ Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ Ð¿Ð¾Ð¼Ñ–Ñ‰Ð°Ñ”Ñ‚ÑŒÑÑ Ñюди, Ñкщо це змінна;</li> <li> <i>up_ord</i> — підтÑгувати Ñ‡Ð°Ñ Ð·Ð°Ð¿Ð¸Ñ‚Ð°Ð½Ð¾Ð³Ð¾ Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ Ð´Ð¾Ð³Ð¾Ñ€Ð¸ ґратки;</li> <li> <i>arch</i> — архіватор запиту, вÑтановити у порожній Ñ€Ñдок Ð´Ð»Ñ Ð¿ÐµÑ€ÐµÐ²Ñ–Ñ€ÐºÐ¸ вÑÑ–Ñ… архіваторів, вÑтановити у "<buffer>" Ð´Ð»Ñ Ð¾Ð±Ñ€Ð¾Ð±ÐºÐ¸ тільки буферу.</li></ul></li> <li> <i>bool setVal( int tm, VarType vl, string arch = "" )</i> [<span style="color:red">доÑтуп до підÑиÑтеми Ðрхіви-ІÑторіÑ</span>] — вÑтановлює Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ <i>vl</i> у архів на Ñ‡Ð°Ñ <i>tm</i> та архіватор <i>arch</i>: <ul><li> <i>tm</i> — Ñ‡Ð°Ñ Ð²Ñтановленого значеннÑ, у мікроÑекундах;</li> <li> <i>vl</i> — значеннÑ;</li> <li> <i>arch</i> — архіватор вÑтановленнÑ, вÑтановити у порожній Ñ€Ñдок Ð´Ð»Ñ Ð²ÑÑ–Ñ… архіваторів, вÑтановити у "<buffer>" Ð´Ð»Ñ Ð¾Ð±Ñ€Ð¾Ð±ÐºÐ¸ тільки буферу.</li></ul></li> <li> <i>Array getVals( int begTm, int endTm, int period, string arch = "" )</i> — отримує архів/Ñ–Ñторію значень з <i>begTm</i> та до <i>endTm</i> Ð´Ð»Ñ Ð°Ñ€Ñ…Ñ–Ð²Ð°Ñ‚Ð¾Ñ€Ñƒ <i>arch</i>: <ul><li> <i>begTm</i> — Ñ‡Ð°Ñ Ð¿Ð¾Ñ‡Ð°Ñ‚ÐºÑƒ запитаного діапазону даних, у мікроÑекундах, буде змінено у реальний початок даних;</li> <li> <i>endTm</i> — Ñ‡Ð°Ñ Ð·Ð°ÐºÑ–Ð½Ñ‡ÐµÐ½Ð½Ñ Ð·Ð°Ð¿Ð¸Ñ‚Ð°Ð½Ð¾Ð³Ð¾ діапазону даних, у мікроÑекундах;</li> <li> <i>period</i> — період даних, у мікроÑекундах, має бути обов'Ñзково визначене та буде викориÑтане макÑимальне Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ Ð´Ð»Ñ Ñ†ÑŒÐ¾Ð³Ð¾ архіву, буде змінено у періодичніÑÑ‚ÑŒ реальних даних;</li> <li> <i>arch</i> — архіватор запиту, вÑтановити у порожній Ñ€Ñдок Ð´Ð»Ñ Ð¿ÐµÑ€ÐµÐ²Ñ–Ñ€ÐºÐ¸ вÑÑ–Ñ… архіваторів, вÑтановити у "<buffer>" Ð´Ð»Ñ Ð¾Ð±Ñ€Ð¾Ð±ÐºÐ¸ тільки буферу.</li></ul></li> <li> <i>bool setVals( Array buf, int tm, int period, string arch = "" )</i> [<span style="color:red">доÑтуп до підÑиÑтеми Ðрхіви-ІÑторіÑ</span>] — вÑтановлює Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ Ð°Ñ€Ñ…Ñ–Ð²Ñƒ/Ñ–Ñторії <i>buf</i> у архів від чаÑу початку <i>tm</i>, Ð´Ð»Ñ Ð¿ÐµÑ€Ñ–Ð¾Ð´Ñƒ значень <i>period</i> та архіватору <i>arch</i>. <ul><li> <i>buf</i> — маÑив значень до вÑтановленнÑ;</li> <li> <i>tm</i> — Ñ‡Ð°Ñ Ð¿Ð¾Ñ‡Ð°Ñ‚ÐºÑƒ вÑтановлюваного діапазону даних, у мікроÑекундах;</li> <li> <i>period</i> — період вÑтановлюваних даних, у мікроÑекундах, має бути обов'Ñзково визначене та буде викориÑтане макÑимальне Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ Ð´Ð»Ñ Ñ†ÑŒÐ¾Ð³Ð¾ архіву, буде змінено у періодичніÑÑ‚ÑŒ реальних даних;</li> <li> <i>arch</i> — архіватор запиту, вÑтановити у порожній Ñ€Ñдок Ð´Ð»Ñ Ð¿ÐµÑ€ÐµÐ²Ñ–Ñ€ÐºÐ¸ вÑÑ–Ñ… архіваторів, вÑтановити у "<buffer>" Ð´Ð»Ñ Ð¾Ð±Ñ€Ð¾Ð±ÐºÐ¸ тільки буферу.</li></ul></li></ul> <h2><span class="mw-headline" id=".D0.9F.D1.96.D0.B4.D1.81.D0.B8.D1.81.D1.82.D0.B5.D0.BC.D0.B0_.22.D0.A2.D1.80.D0.B0.D0.BD.D1.81.D0.BF.D0.BE.D1.80.D1.82.D0.B8.22_.28SYS.Transport.29"><span class="mw-headline-number">9</span> <span id="SYSTransport" title="#SYSTransport">ПідÑиÑтема "ТранÑпорти" (SYS.Transport)</span></span></h2> <p>Функції об'єкту підÑиÑтеми: </p> <ul><li> <i>TCntrNodeObj outAt( string addr );</i> — загальне-уніфіковане Ð¿Ñ–Ð´ÐºÐ»ÑŽÑ‡ÐµÐ½Ð½Ñ Ð²Ð¸Ñ…Ñ–Ð´Ð½Ð¾Ð³Ð¾ транÑпорту за адреÑою <i>addr</i> у формі:</li></ul> <dl><dd><dl><dd> "<b>{TrModule}.[out_]{TrID}[:{TrAddr}]</b>" — типове вихідне із автоматичним ÑтвореннÑм <i>TrID</i> за відÑутноÑÑ‚Ñ– та наÑвноÑÑ‚Ñ– <i>TrAddr</i>;</dd> <dd> "<b>{TrModule}.in_{TrID}:{RemConId}</b>" — ініціативне вхідне із ідентифікатором Ð¿Ñ–Ð´ÐºÐ»ÑŽÑ‡ÐµÐ½Ð½Ñ Ñƒ <i>RemConId</i>.</dd></dl> <ul><li> <i>TrModule</i> — модуль транÑпорту, Ñк Ñ” <a href="Modules/Sockets.html" title="Special:MyLanguage/Modules/Sockets">Sockets</a>, <a href="Modules/SSL.html" title="Special:MyLanguage/Modules/SSL">SSL</a>, <a href="Modules/Serial.html" title="Special:MyLanguage/Modules/Serial">Serial</a>;</li> <li> <i>TrID</i> — ідентифікатор транÑпорту;</li> <li> <i>TrAddr</i> — Ñпецифічна адреÑа транÑпорту;</li> <li> <i>RemConId</i> — ІД віддаленого ініціативного підключеннÑ.</li></ul></dd></dl> <p>Функції об'єкту вхідного транÑпорту (SYS.Transport["Modul"]["in_Transp"]): </p> <ul><li> <i>ElTp cfg( string nm )</i> — отримує Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ ÐºÐ¾Ð½Ñ„Ñ–Ð³ÑƒÑ€Ð°Ñ†Ñ–Ð¹Ð½Ð¾Ð³Ð¾ Ð¿Ð¾Ð»Ñ <i>nm</i> об'єкту.</li> <li> <i>bool cfgSet( string nm, ElTp val )</i> [<span style="color:red">доÑтуп до відповідної підÑиÑтеми</span>] — вÑтановлює конфігураційне Ð¿Ð¾Ð»Ñ <i>nm</i> об'єкту у Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ <i>val</i>.</li> <li> <i>string status()</i> — Ñ€Ñдок ÑтатуÑу транÑпорту.</li> <li> <i>string addr( string vl = "" )</i> — адреÑа транÑпорту, вÑтановлює у непорожнє Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ <i>vl</i>.</li> <li> <i>string writeTo( string sender, string mess )</i> — відправлÑÑ” Ð¿Ð¾Ð²Ñ–Ð´Ð¾Ð¼Ð»ÐµÐ½Ð½Ñ <i>mess</i> відправнику <i>sender</i>, Ñк відповідь.</li> <li> <i>TArrayObj associateTrsList( )</i> — перелік аÑоційованих вихідних транÑпортів із цим вхідним.</li> <li> <i>TCntrNodeObj associateTr( string id )</i> — Ð¾Ñ‚Ñ€Ð¸Ð¼Ð°Ð½Ð½Ñ Ð°Ñоційованого транÑпорту за підключеннÑм <i>id</i>.</li> <li> <i>ElTp conPrm( string id, ElTp val = EVAL, string cfg = "" )</i> — загальне Ð¿Ð¾Ð²Ð¾Ð´Ð¶ÐµÐ½Ð½Ñ Ñ–Ð· параметром чаÑу Ð¿Ñ–Ð´ÐºÐ»ÑŽÑ‡ÐµÐ½Ð½Ñ <i>id</i> з вÑтановленнÑм у Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ <i>val</i> за наÑвноÑÑ‚Ñ–; запит конфігураційного параметру чаÑу Ð¿Ñ–Ð´ÐºÐ»ÑŽÑ‡ÐµÐ½Ð½Ñ Ñ–Ð· реєÑтрацією конфігурації <i>cfg</i> у форматі "{SRC}\n{NAME}\n{HELP}" вперше.</li> <li> <i>bool setConPrm( string id, ElTp val )</i> — вÑÑ‚Ð°Ð½Ð¾Ð²Ð»ÐµÐ½Ð½Ñ Ð¿Ð°Ñ€Ð°Ð¼ÐµÑ‚Ñ€Ñƒ чаÑу Ð¿Ñ–Ð´ÐºÐ»ÑŽÑ‡ÐµÐ½Ð½Ñ <i>id</i> у Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ <i>val</i>, лише Ð´Ð»Ñ ÑуміÑноÑÑ‚Ñ–.</li></ul> <p>Функції об'єкту вихідного транÑпорту (SYS.Transport["Modul"]["out_Transp"]): </p> <ul> <li><i>bool isNetwork()</i> — ознака — "ТранÑпорт мережевий", що визначає таймаути у Ñекундах.</li> <li><i>ElTp cfg(string nm)</i> — отримує Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ ÐºÐ¾Ð½Ñ„Ñ–Ð³ÑƒÑ€Ð°Ñ†Ñ–Ð¹Ð½Ð¾Ð³Ð¾ Ð¿Ð¾Ð»Ñ <i>nm</i> об'єкту.</li> <li><i>bool cfgSet(string nm, ElTp val)</i> [<span style="color:red">доÑтуп до відповідної підÑиÑтеми</span>] — вÑтановлює конфігураційне поле <i>nm</i> об'єкту у Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ <i>val</i>.</li> <li><i>string status()</i> — Ñ€Ñдок ÑтатуÑу транÑпорту.</li> <li><i>bool start( bool vl = EVAL, int tm = 0 )</i> — повертає ÑÑ‚Ð°Ñ‚ÑƒÑ "ВиконаннÑ", запуÑкає/зупинÑÑ” за <i>vl</i> (Ñкщо не <EVAL>). Ð”Ð»Ñ Ð·Ð°Ð¿ÑƒÑку можна вказувати оÑобливий таймаут <i>tm</i>.</li> <li><i>string addr( string vl = "" )</i> — адреÑа транÑпорту, вÑтановлює у непорожнє Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ <i>vl</i>.</li> <li><i>string timings( string vl = "", isDef = true )</i> — таймінги транÑпорту, вÑтановлює у непорожнє Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ <i>vl</i> та по замовченню Ð´Ð»Ñ <i>isDef</i>. </li> <li><i>int attempts( int vl = EVAL )</i> — Ñпроб підключень транÑпорту, вÑтановлює у не-EVAL Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ <i>vl</i>.</li> <li><i>ElTp conPrm( string id, ElTp val = EVAL, string cfg = "" )</i> — загальне Ð¿Ð¾Ð²Ð¾Ð´Ð¶ÐµÐ½Ð½Ñ Ñ–Ð· параметром чаÑу Ð¿Ñ–Ð´ÐºÐ»ÑŽÑ‡ÐµÐ½Ð½Ñ <i>id</i> з вÑтановленнÑм у Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ <i>val</i> за наÑвноÑÑ‚Ñ–; запит конфігураційного параметру чаÑу Ð¿Ñ–Ð´ÐºÐ»ÑŽÑ‡ÐµÐ½Ð½Ñ Ñ–Ð· реєÑтрацією конфігурації <i>cfg</i> у форматі "{SRC}\n{NAME}\n{HELP}" вперше.</li> <li><i>bool setConPrm( string id, ElTp val )</i> — вÑÑ‚Ð°Ð½Ð¾Ð²Ð»ÐµÐ½Ð½Ñ Ð¿Ð°Ñ€Ð°Ð¼ÐµÑ‚Ñ€Ñƒ чаÑу Ð¿Ñ–Ð´ÐºÐ»ÑŽÑ‡ÐµÐ½Ð½Ñ <i>id</i> у Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ <i>val</i>, лише Ð´Ð»Ñ ÑуміÑноÑÑ‚Ñ–.</li> <li><i>string messIO( string mess, real timeOut = 0, int inBufLen = -1 );</i> — відправлÑÑ” Ð¿Ð¾Ð²Ñ–Ð´Ð¾Ð¼Ð»ÐµÐ½Ð½Ñ <i>mess</i> через транÑпорт з таймаутом Ð¾Ñ‡Ñ–ÐºÑƒÐ²Ð°Ð½Ð½Ñ Ð²Ñ–Ð´Ð¿Ð¾Ð²Ñ–Ð´Ñ– <i>timeOut</i> (у Ñекундах) та читає відповідь (буфер) розміром <i>inBufLen</i> байт. У випадку нульового таймауту цей Ñ‡Ð°Ñ Ð±ÐµÑ€ÐµÑ‚ÑŒÑÑ Ð· налаштувань вихідного транÑпорту. Ðегативний Ñ‡Ð°Ñ <i>timeOut</i> (< -1e-3) вимикає роботу транÑпорту у режимі запит/відповідь та дозволÑÑ” незалежно читати/пиÑати у буфер Ð’Ð’, з таймаутом Ñ‡Ð¸Ñ‚Ð°Ð½Ð½Ñ <i>timeOut</i> у абÑолютному значенні. Ð”Ð»Ñ Ð½ÐµÐ³Ð°Ñ‚Ð¸Ð²Ð½Ð¾Ð³Ð¾ <i>inBufLen</i> розмір буферу вÑтановлюєтьÑÑ Ñƒ STR_BUF_LEN(10000), а "0" вимикає Ñ‡Ð¸Ñ‚Ð°Ð½Ð½Ñ Ð²Ð·Ð°Ð³Ð°Ð»Ñ–.<br /> <a class="image" href="http://oscada.org/wiki/File:At.png"><img alt="At.png" height="22" src="../en/files/At.png" width="22" /></a> Якщо Ваш транÑпорт у відповідь на запит передбачає Ð¾Ñ‚Ñ€Ð¸Ð¼Ð°Ð½Ð½Ñ Ð´Ð°Ð½Ð¸Ñ… чаÑтинами тоді викориÑтовуйте цю функцію у одному потоці Ð´Ð»Ñ Ð´ÐµÐºÑ–Ð»ÑŒÐºÐ¾Ñ… приÑтроїв на одній шині-транÑпорті оÑкільки тут не Ñ–Ñнує ÑпоÑобу Ð±Ð»Ð¾ÐºÑƒÐ²Ð°Ð½Ð½Ñ Ñ‚Ñ€Ð°Ð½Ñпорту з кориÑтувацького API. Один потік це об'єкт контролеру підÑиÑтеми "Збір даних", а <a href="Modules/UserProtocol.html" title="Special:MyLanguage/Modules/UserProtocol">модуль "Протокол кориÑтувача"</a> блокує транÑпорт вÑередині, перед виконаннÑм Ñвоїх кориÑтувацьких процедур. <div class="mw-highlight mw-content-ltr" dir="ltr"><pre><span class="nx">rez</span> <span class="o">=</span> <span class="nx">SYS</span><span class="p">.</span><span class="nx">Transport</span><span class="p">.</span><span class="nx">Serial</span><span class="p">.</span><span class="nx">out_ttyUSB0</span><span class="p">.</span><span class="nx">messIO</span><span class="p">(</span><span class="nx">SYS</span><span class="p">.</span><span class="nx">strFromCharCode</span><span class="p">(</span><span class="mh">0x4B</span><span class="p">,</span><span class="mh">0x00</span><span class="p">,</span><span class="mh">0x37</span><span class="p">,</span><span class="mh">0x40</span><span class="p">),</span><span class="mf">0.2</span><span class="p">);</span> <span class="c1">//Wait for all the message tail by timeout and empty result</span> <span class="k">while</span><span class="p">(</span><span class="nx">rez</span><span class="p">.</span><span class="nx">length</span> <span class="o">&&</span> <span class="p">(</span><span class="nx">trez</span><span class="o">=</span><span class="nx">SYS</span><span class="p">.</span><span class="nx">Transport</span><span class="p">.</span><span class="nx">Serial</span><span class="p">.</span><span class="nx">out_ttyUSB0</span><span class="p">.</span><span class="nx">messIO</span><span class="p">(</span><span class="s2">""</span><span class="p">)).</span><span class="nx">length</span><span class="p">)</span> <span class="nx">rez</span> <span class="o">+=</span> <span class="nx">trez</span><span class="p">;</span> </pre></div></li> <li><i>string messIO( XMLNodeObj req, string prt );</i> — відправлÑÑ” запити <i>req</i> до протоколу <i>prt</i> Ð´Ð»Ñ Ð·Ð´Ñ–Ð¹ÑÐ½ÐµÐ½Ð½Ñ ÑеанÑу зв'Ñзку через транÑпорт за поÑередництвом протоколу. Повертає Ñ€Ñдок із помилкою у форматі "<b>{errCod}:{errText}</b>", Ñкий порожній Ð´Ð»Ñ ÑƒÑпішного запиту. <div class="mw-highlight mw-content-ltr" dir="ltr"><pre><span class="nx">req</span> <span class="o">=</span> <span class="nx">SYS</span><span class="p">.</span><span class="nx">XMLNode</span><span class="p">(</span><span class="s2">"TCP"</span><span class="p">);</span> <span class="nx">req</span><span class="p">.</span><span class="nx">setAttr</span><span class="p">(</span><span class="s2">"id"</span><span class="p">,</span><span class="s2">"test"</span><span class="p">).</span><span class="nx">setAttr</span><span class="p">(</span><span class="s2">"reqTm"</span><span class="p">,</span><span class="mi">500</span><span class="p">).</span><span class="nx">setAttr</span><span class="p">(</span><span class="s2">"node"</span><span class="p">,</span><span class="mi">1</span><span class="p">).</span><span class="nx">setAttr</span><span class="p">(</span><span class="s2">"reqTry"</span><span class="p">,</span><span class="mi">2</span><span class="p">).</span><span class="nx">setText</span><span class="p">(</span><span class="nx">SYS</span><span class="p">.</span><span class="nx">strFromCharCode</span><span class="p">(</span><span class="mh">0x03</span><span class="p">,</span><span class="mh">0x00</span><span class="p">,</span><span class="mh">0x00</span><span class="p">,</span><span class="mh">0x00</span><span class="p">,</span><span class="mh">0x05</span><span class="p">));</span> <span class="nx">SYS</span><span class="p">.</span><span class="nx">Transport</span><span class="p">.</span><span class="nx">Sockets</span><span class="p">.</span><span class="nx">out_testModBus</span><span class="p">.</span><span class="nx">messIO</span><span class="p">(</span><span class="nx">req</span><span class="p">,</span><span class="s2">"ModBus"</span><span class="p">);</span> <span class="nx">test</span> <span class="o">=</span> <span class="nx">Special</span><span class="p">.</span><span class="nx">FLibSYS</span><span class="p">.</span><span class="nx">strDec4Bin</span><span class="p">(</span><span class="nx">req</span><span class="p">.</span><span class="nx">text</span><span class="p">());</span> </pre></div></li> </ul> <h2><span class="mw-headline" id=".D0.9F.D1.96.D0.B4.D1.81.D0.B8.D1.81.D1.82.D0.B5.D0.BC.D0.B0_.22.D0.9F.D1.80.D0.BE.D1.82.D0.BE.D0.BA.D0.BE.D0.BB.D0.B8.22_.28SYS.Protocols.29"><span class="mw-headline-number">10</span> ПідÑиÑтема "Протоколи" (SYS.Protocols)</span></h2> <h3><span class="mw-headline" id=".D0.9C.D0.BE.D0.B4.D1.83.D0.BB.D1.8C_Protocol.HTTP"><span class="mw-headline-number">10.1</span> Модуль <a href="Modules/HTTP.html" title="Special:MyLanguage/Modules/HTTP">Protocol.HTTP</a></span></h3> <p><b>Вхідна чаÑтина об'єкту Ð¼Ð¾Ð´ÑƒÐ»Ñ (SYS.Protocol.HTTP.{In})</b> </p> <ul><li> <i>bool setUser( string user )</i> — змінює кориÑтувача пов'Ñзаного із ідентифікатором ÑеанÑу автентифікації. <ul><li> <i>user</i> — кориÑтувач Ð´Ð»Ñ Ð·Ð¼Ñ–Ð½Ð¸.</li></ul></li> <li> <i>bool pgAccess(string URL)</i> — перевірÑÑ” доÑтупніÑÑ‚ÑŒ Ñторінки, визначеної у <i>URL</i>. <ul><li> <i>URL</i> — URL Ñторінки, що перевірÑєтьÑÑ.</li></ul></li> <li> <i>string pgCreator(string cnt, string rcode = "", string httpattrs = "Content-Type: text/html;charset={SYS}", string htmlHeadEls = "", string forceTmplFile = "")</i> — формує Ñторінку або реÑÑƒÑ€Ñ Ñ–Ð· вміÑтом <i>cnt</i>, загорнутим у HTTP з результатом <i>rcode</i>, із додатковими атрибутами HTTP <i>httpattrs</i>, додатковим елементом заголовку HTML <i>htmlHeadEls</i> та викориÑтаннÑм файлу шаблону <i>forceTmplFile</i> та Ð´Ð»Ñ Ð¼Ð¾Ð²Ð¸ <i>lang</i>. <ul><li> <i>cnt</i> — вміÑÑ‚ Ñторінки або реÑурÑу (зображеннÑ, XML, CSS, JavaScript, ...);</li> <li> <i>rcode</i> — результуючий код HTTP, на кшталт "200 OK"; порожнє Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ Ð²Ð¸Ð¼Ð¸ÐºÐ°Ñ” Ð´Ð¾Ð´Ð°Ð½Ð½Ñ HTTP заголовку;</li> <li> <i>httpattrs</i> — додаткові атрибути HTTP, переважно це "Content-Type" із значеннÑм по замовченню "text/html;charset={SYS}"; тільки Ð´Ð»Ñ "Content-Type: text/html" буде здійÑнюватиÑÑ Ð·Ð°Ð³Ð¾Ñ€Ñ‚Ð°Ð½Ð½Ñ Ñƒ внутрішній/ÑервіÑний, або визначений <i>forceTmplFile</i>, HTML-шаблон;</li> <li> <i>htmlHeadEls</i> — додатковий тег заголовку HTML, переважно це META з "Refresh" Ð´Ð»Ñ Ð²ÐºÐ°Ð·Ð°Ð½Ð¾Ð³Ð¾ URL;</li> <li> <i>forceTmplFile</i> — файл прÑмо визначеного шаблону Ð´Ð»Ñ Ð¿ÐµÑ€ÐµÐºÑ€Ð¸Ñ‚Ñ‚Ñ Ð²Ð½ÑƒÑ‚Ñ€Ñ–ÑˆÐ½ÑŒÐ¾Ð³Ð¾/ÑервіÑного або головної Ñторінки.</li></ul></li></ul> <p><br /> </p> <h2><span class="mw-headline" id=".D0.9F.D1.96.D0.B4.D1.81.D0.B8.D1.81.D1.82.D0.B5.D0.BC.D0.B0_.22.D0.9A.D0.BE.D1.80.D0.B8.D1.81.D1.82.D1.83.D0.B2.D0.B0.D1.86.D1.8C.D0.BA.D1.96_.D1.96.D0.BD.D1.82.D0.B5.D1.80.D1.84.D0.B5.D0.B9.D1.81.D0.B8.22_.28SYS.UI.29"><span class="mw-headline-number">11</span> <span id="SYSUI" title="#SYSUI">ПідÑиÑтема "КориÑтувацькі інтерфейÑи" (SYS.UI)</span></span></h2> <ul><li> <i>string mimeGet(string fnm);</i> — Ð¾Ñ‚Ñ€Ð¸Ð¼Ð°Ð½Ð½Ñ Ñ‚Ð¸Ð¿Ñƒ MIME за назвою файлу <i>fnm</i>.</li></ul> <h3><span class="mw-headline" id=".D0.9C.D0.BE.D0.B4.D1.83.D0.BB.D1.8C_QTStarter"><span class="mw-headline-number">11.1</span> Модуль <a href="Modules/QTStarter.html" title="Special:MyLanguage/Modules/QTStarter">QTStarter</a></span></h3> <p><b>Об'єкт Ð¼Ð¾Ð´ÑƒÐ»Ñ (SYS.UI.QTStarter)</b> </p> <ul><li> <i>Array sensors()</i> — отримати вÑÑ– наÑвні ÑенÑори від Qt mobility, повертає "false" Ñкщо не доÑтупно жодного ÑенÑору.</li></ul> <h3><span class="mw-headline" id=".D0.9C.D0.BE.D0.B4.D1.83.D0.BB.D1.8C_UI.VCAEngine"><span class="mw-headline-number">11.2</span> Модуль <a href="Modules/VCAEngine.html" title="Special:MyLanguage/Modules/VCAEngine">UI.VCAEngine</a></span></h3> <div class="floatright"><a class="image" href="http://oscada.org/wiki/File:Oscada_UserOM_VCAEngine_uk.png" title="Об'єктна модель кориÑтувача Ð¼Ð¾Ð´ÑƒÐ»Ñ VCAEngine."><img alt="Об'єктна модель кориÑтувача Ð¼Ð¾Ð´ÑƒÐ»Ñ VCAEngine." height="238" src="files/Oscada_UserOM_VCAEngine_uk.png" width="360" /></a></div> <p><b>Об'єкт "СеанÑ" ( this.ownerSess() )</b> </p> <ul><li> <i>string user( )</i> — поточний кориÑтувач ÑеанÑу.</li> <li> <i>int alrmQuietance( int quit_tmpl, string wpath = "", bool ret = false )</i> — Ñтишує Ð¿Ð¾Ñ€ÑƒÑˆÐµÐ½Ð½Ñ <i>wpath</i> з шаблоном <i>quit_tmpl</i>. Якщо <i>wpath</i> це порожній Ñ€Ñдок то здійÑнюєтьÑÑ Ð³Ð»Ð¾Ð±Ð°Ð»ÑŒÐ½Ðµ ÑтишеннÑ. У Ñ€Ñдку <i>wpath</i>, через Ñимвол ';', може бути перелічено адреÑи декількох віджетів. При вÑтановлені <i>ret</i> здійÑнюєтьÑÑ Ð¿Ð¾Ð²ÐµÑ€Ð½ÐµÐ½Ð½Ñ ÑтишеннÑ.</li> <li> <i>int reqTm( )</i> — Ñ‡Ð°Ñ Ð¾Ñтаннього запиту у Ñекундах від епохи 1.1.1970.</li> <li> <i>string reqUser( )</i> — кориÑтувач оÑтаннього запиту.</li> <li> <i>string reqLang( )</i> — мова оÑтаннього запиту.</li> <li> <i>int userActTm( )</i> — Ñ‡Ð°Ñ Ð¾Ñтанньої дії кориÑтувача у Ñекундах від епохи 1.1.1970.</li> <li> <i>bool uiCmd( string cmd, string prm, string src )</i> — надÑилає UI команду ÐºÐµÑ€ÑƒÐ²Ð°Ð½Ð½Ñ Ñторінками, Ñк то: "open", "next", "prev"; детальніше дивитьÑÑ Ñƒ <a href="#Events">Ñекції подій</a>. Ð¦Ñ Ñ„ÑƒÐ½ÐºÑ†Ñ–Ñ Ð¼Ð°Ñ” бути пріоритетною Ð´Ð»Ñ Ð²Ð¸ÐºÐ¾Ñ€Ð¸ÑÑ‚Ð°Ð½Ð½Ñ Ñƒ керуванні Ñторінками перед прÑмим запиÑом до атрибутів Ñторінок "pgOpen" та "pgOpenSrc", оÑкільки це єдиний метод коректної Ð¿Ð¾Ð²Ð¾Ð´Ð¶ÐµÐ½Ð½Ñ Ð· <a href="#Project">лінкованими Ñторінками</a>.</li> <li> <i>int period( bool isReal = false )</i> — Ð¾Ñ‚Ñ€Ð¸Ð¼Ð°Ð½Ð½Ñ Ð¿ÐµÑ€Ñ–Ð¾Ð´Ñƒ Ð¾Ð¿Ñ€Ð°Ñ†ÑŽÐ²Ð°Ð½Ð½Ñ ÑеанÑу, <i>isReal</i> Ð´Ð»Ñ Ñ€ÐµÐ°Ð»ÑŒÐ½Ð¾Ð³Ð¾ періоду.</li></ul> <p><b>Об'єкт "Віджет" (this)</b> </p> <ul><li> <i>TCntrNodeObj ownerSess( )</i> — об'єкт ÑеанÑу даного віджету.</li> <li> <i>TCntrNodeObj ownerPage( )</i> — об'єкт батьківÑької Ñторінки даного віджету.</li> <li> <i>TCntrNodeObj ownerWdg( bool base = false )</i> — об'єкт батьківÑького віджету даного віджету. При указанні <i>base</i> буде повернено й об'єкти Ñторінок.</li> <li> <i>TCntrNodeObj wdgAdd( string wid, string wname, string parent )</i> — додає віджет <i>wid</i> з ім'Ñм <i>wname</i> на оÑнові бібліотечного віджету <i>parent</i>.</li></ul> <div class="mw-highlight mw-content-ltr" dir="ltr" style="margin-left: 15px"><pre><span class="c1">//Додає новий віджет на оÑнові віджету текÑтового примітиву</span> <span class="nx">nw</span> <span class="o">=</span> <span class="k">this</span><span class="p">.</span><span class="nx">wdgAdd</span><span class="p">(</span><span class="s2">"nw"</span><span class="p">,</span> <span class="s2">"Ðовий віджет"</span><span class="p">,</span> <span class="s2">"/wlb_originals/wdg_Text"</span><span class="p">);</span> <span class="nx">nw</span><span class="p">.</span><span class="nx">attrSet</span><span class="p">(</span><span class="s2">"geomX"</span><span class="p">,</span> <span class="mi">50</span><span class="p">).</span><span class="nx">attrSet</span><span class="p">(</span><span class="s2">"geomY"</span><span class="p">,</span> <span class="mi">50</span><span class="p">);</span> </pre></div> <ul><li> <i>bool wdgDel( string wid )</i> — видалÑÑ” віджет <i>wid</i>.</li> <li> <i>TCntrNodeObj wdgAt( string wid, bool byPath = false )</i> — підключаєтьÑÑ Ð´Ð¾ дочірнього або глобального віджету, за поÑередництвом шлÑху <i>byPath</i>. Ð”Ð»Ñ Ð²Ñ–Ð´Ñутніх Ñ– некоректних віджетів Ñ†Ñ Ñ„ÑƒÐ½ÐºÑ†Ñ–Ñ Ð¿Ð¾Ð²ÐµÑ€Ñ‚Ð°Ñ‚Ð¸Ð¼Ðµ "false", тоді Ñк коректний віджет при перетворені у BOOLEAN повертатиме "true". У випадку глобального Ð¿Ñ–Ð´ÐºÐ»ÑŽÑ‡ÐµÐ½Ð½Ñ Ð¼Ð¾Ð¶Ð½Ð° викориÑтати абÑолютний або відноÑний шлÑÑ… до віджету. Точкою відліку абÑолютної адреÑи виÑтупає об'єкт ÐºÐ¾Ñ€ÐµÐ½Ñ Ð¼Ð¾Ð´ÑƒÐ»Ñ "VCAEngine", а значить, першим елементом абÑолютної адреÑи Ñ” ідентифікатор ÑеанÑу, Ñкий опуÑкаєтьÑÑ. ВідноÑна адреÑа бере відлік від поточного віджету. Спеціальним елементом відноÑної адреÑи Ñ” елемент вищеÑтоÑщого вузла "..".</li> <li> <i>Array attrList()</i> — перелік атрибутів віджету.</li> <li> <i>bool attrPresent( string attr )</i> — перевірÑÑ” атрибут віджета <i>attr</i> на факт приÑутноÑÑ‚Ñ–.</li> <li> <i>ElTp attr( string attr, bool fromSess = false )</i> — Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ Ð°Ñ‚Ñ€Ð¸Ð±ÑƒÑ‚Ñƒ віджету <i>attr</i> або з ÑеанÑу <i>fromSess</i>. Ð”Ð»Ñ Ð²Ñ–Ð´Ñутніх атрибутів повертає порожній Ñ€Ñдок.</li> <li> <i>TCntrNodeObj attrSet( string attr, ElTp vl, bool toSess = false )</i> — вÑтановлює Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ <i>vl</i> у атрибут віджету <i>attr</i> або ÑеанÑ, Ð´Ð»Ñ <i>toSess</i>. Повертає поточний об'єкт, Ð´Ð»Ñ ÐºÐ¾Ð½ÐºÐ°Ñ‚ÐµÐ½Ð°Ñ†Ñ–Ñ— функцій вÑтановленнÑ.</li> <li> <i>string link( string attr, bool prm = false )</i> — поÑÐ¸Ð»Ð°Ð½Ð½Ñ Ð°Ñ‚Ñ€Ð¸Ð±ÑƒÑ‚Ñƒ віджету <i>attr</i>. При вÑтановленні <i>prm</i> запитує поÑÐ¸Ð»Ð°Ð½Ð½Ñ Ð³Ñ€ÑƒÐ¿Ð¸ атрибутів (параметр), предÑтавлене вказаним атрибутом.</li> <li> <i>string linkSet( string attr, string vl, bool prm = false )</i> — вÑтановлює поÑÐ¸Ð»Ð°Ð½Ð½Ñ Ð°Ñ‚Ñ€Ð¸Ð±ÑƒÑ‚Ñƒ віджету <i>attr</i>. При вÑтановленні <i>prm</i> здійÑнює вÑÑ‚Ð°Ð½Ð¾Ð²Ð»ÐµÐ½Ð½Ñ Ð¿Ð¾ÑÐ¸Ð»Ð°Ð½Ð½Ñ Ð³Ñ€ÑƒÐ¿Ð¸ атрибутів (параметр), предÑтавленого вказаним атрибутом.</li></ul> <div class="mw-highlight mw-content-ltr" dir="ltr" style="margin-left: 15px"><pre><span class="c1">//Ð’Ñтановлює поÑÐ¸Ð»Ð°Ð½Ð½Ñ Ð²Ð¾Ñьмого тренду параметром</span> <span class="k">this</span><span class="p">.</span><span class="nx">linkSet</span><span class="p">(</span><span class="s2">"el8.name"</span><span class="p">,</span> <span class="s2">"prm:/LogicLev/experiment/Pi"</span><span class="p">,</span> <span class="kc">true</span><span class="p">);</span> </pre></div> <ul><li> <i>string {resource,mime}( string addr, string MIME = "" )</i> — реÑÑƒÑ€Ñ Ð¾Ð±'єкту за адреÑою <i>addr</i> (прÑме поÑÐ¸Ð»Ð°Ð½Ð½Ñ Ð½Ð° реÑÑƒÑ€Ñ Ð°Ð±Ð¾ атрибут віджету з цим поÑиланнÑм) з типом <i>MIME</i>, з таблиці ÑеанÑу або джерела. Призначено Ð´Ð»Ñ Ñ€ÐµÐ´Ð°Ð³ÑƒÐ²Ð°Ð½Ð½Ñ Ñ€ÐµÑурÑу об'єкта та підÑÑ‚Ð°Ð²Ð»ÐµÐ½Ð½Ñ Ð¹Ð¾Ð³Ð¾ у контекÑÑ‚Ñ– ÑеанÑу, наприклад, зображень SVG.</li> <li> <i>int {resourceSet,mimeSet}( string addr, string data, string MIME = "" )</i> — вÑтановлює реÑÑƒÑ€Ñ Ð¾Ð±'єкту у <i>data</i> з типом <i>MIME</i> за адреÑою <i>addr</i>.</li> <li> <i>int messDebug( string mess ); int messInfo( string mess ); int messNote( string mess ); int messWarning( string mess ); int messErr( string mess ); int messCrit( string mess ); int messAlert( string mess ); int messEmerg( string mess );</i> — формує Ð¿Ð¾Ð²Ñ–Ð´Ð¾Ð¼Ð»ÐµÐ½Ð½Ñ Ð¿Ñ€Ð¾Ð³Ñ€Ð°Ð¼Ð¸ <i>mess</i> з категорією — шлÑÑ… до даного віджету.</li> <li> <i>int calcPer( int set = EVAL )</i> — отриманнÑ, та вÑÑ‚Ð°Ð½Ð¾Ð²Ð»ÐµÐ½Ð½Ñ Ð·Ð° <i>set</i> не EVAL, щодо актуального періоду обчиÑленнÑ-опрацюваннÑ. Зарезервовано наÑтупні Ñпеціальні значеннÑ: <ul><li> <b>0</b> — Ñкщо бажаєте періодичного Ð¾Ð¿Ñ€Ð°Ñ†ÑŽÐ²Ð°Ð½Ð½Ñ ÑеанÑу;</li> <li> <b>-1</b> — Ñкщо бажаєте викориÑтати період Ð¾Ð¿Ñ€Ð°Ñ†ÑŽÐ²Ð°Ð½Ð½Ñ Ð±Ð°Ñ‚ÑŒÐºÑ–Ð²Ñького віджету/Ñторінки/проєкту каÑкадно;</li> <li> <b>-2</b> — Ð´Ð»Ñ Ñ†Ñ–Ð»ÐºÐ¾Ð²Ð¸Ñ‚Ð¾Ð³Ð¾ Ð²Ð¸Ð¼ÐºÐ½ÐµÐ½Ð½Ñ Ð¿ÐµÑ€Ñ–Ð¾Ð´Ð¸Ñ‡Ð½Ð¾Ð³Ð¾ опрацюваннÑ.</li> <li> <b>-3</b> — відÑутній період чаÑу ÑеанÑу, Ð¾Ñ‚Ñ€Ð¸Ð¼Ð°Ð½Ð½Ñ Ð¿Ñ€Ð¾Ñ”ÐºÑ‚Ð½Ð¾Ð³Ð¾.</li></ul></li></ul> <p><b>Об'єкт "Віджет", примітиву "Документ" (this)</b> </p> <ul><li> <i>string getArhDoc( int nDoc)</i> — текÑÑ‚ документу архіву на глибині <i>nDoc</i> (0-{aSize-1}).</li></ul> <p><br /> </p> <h2><span class="mw-headline" id=".D0.9F.D1.96.D0.B4.D1.81.D0.B8.D1.81.D1.82.D0.B5.D0.BC.D0.B0_.22.D0.A1.D0.BF.D0.B5.D1.86.D1.96.D0.B0.D0.BB.D1.8C.D0.BD.D1.96.22_.28SYS.Special.29"><span class="mw-headline-number">12</span> ПідÑиÑтема "Спеціальні" (SYS.Special)</span></h2> <h3><span class="mw-headline" id=".D0.9C.D0.BE.D0.B4.D1.83.D0.BB.D1.8C_.D0.91.D1.96.D0.B1.D0.BB.D1.96.D0.BE.D1.82.D0.B5.D0.BA.D0.B0_.D1.81.D0.B8.D1.81.D1.82.D0.B5.D0.BC.D0.BD.D0.BE.D0.B3.D0.BE_API_.D1.81.D0.B5.D1.80.D0.B5.D0.B4.D0.BE.D0.B2.D0.B8.D1.89.D0.B0_.D0.BA.D0.BE.D1.80.D0.B8.D1.81.D1.82.D1.83.D0.B2.D0.B0.D1.86.D1.8C.D0.BA.D0.BE.D0.B3.D0.BE_.D0.BF.D1.80.D0.BE.D0.B3.D1.80.D0.B0.D0.BC.D1.83.D0.B2.D0.B0.D0.BD.D0.BD.D1.8F_.28Special.FLibSYS.29"><span class="mw-headline-number">12.1</span> Модуль <a href="Modules/FLibSYS.html" title="Special:MyLanguage/Modules/FLibSYS">Бібліотека ÑиÑтемного API Ñередовища кориÑтувацького Ð¿Ñ€Ð¾Ð³Ñ€Ð°Ð¼ÑƒÐ²Ð°Ð½Ð½Ñ (Special.FLibSYS)</a></span></h3> <p><b>Об'єкт "Бібліотека функцій" (SYS.Special.FLibSYS)</b> </p> <ul><li> <i>ElTp {funcID}(ElTp prm1, ...)</i> — виклик функції бібліотеки <i>{funcID}</i>. Повертає результат викликаної функції.</li></ul> <p><b>Об'єкт "КориÑтувацька функціÑ" (SYS.Special.FLibSYS["funcID"])</b> </p> <ul><li> <i>ElTp call(ElTp prm1, ...)</i> — виклик цієї функції з параметрами <i><prm{N}></i>. Повертає результат викликаної функції.</li></ul> <h3><span class="mw-headline" id=".D0.9C.D0.BE.D0.B4.D1.83.D0.BB.D1.8C_.D0.91.D1.96.D0.B1.D0.BB.D1.96.D0.BE.D1.82.D0.B5.D0.BA.D0.B0_.D1.81.D1.82.D0.B0.D0.BD.D0.B4.D0.B0.D1.80.D1.82.D0.BD.D0.B8.D1.85_.D0.BC.D0.B0.D1.82.D0.B5.D0.BC.D0.B0.D1.82.D0.B8.D1.87.D0.BD.D0.B8.D1.85_.D1.84.D1.83.D0.BD.D0.BA.D1.86.D1.96.D0.B9_.28Special.FLibMath.29"><span class="mw-headline-number">12.2</span> Модуль <a href="Modules/FLibMath.html" title="Special:MyLanguage/Modules/FLibMath">Бібліотека Ñтандартних математичних функцій (Special.FLibMath)</a></span></h3> <p><b>Об'єкт "Бібліотека функцій" (SYS.Special.FLibMath)</b> </p> <ul><li> <i>ElTp {funcID}(ElTp prm1, ...)</i> — виклик функції бібліотеки <i>{funcID}</i>. Повертає результат викликаної функції.</li></ul> <p><b>Об'єкт "КориÑтувацька функціÑ" (SYS.Special.FLibMath["funcID"])</b> </p> <ul><li> <i>ElTp call(ElTp prm1, ...)</i> — виклик цієї функції з параметрами <i><prm{N}></i>. Повертає результат викликаної функції.</li></ul> <h3><span class="mw-headline" id=".D0.9C.D0.BE.D0.B4.D1.83.D0.BB.D1.8C_.D0.91.D1.96.D0.B1.D0.BB.D1.96.D0.BE.D1.82.D0.B5.D0.BA.D0.B0_.D1.84.D1.83.D0.BD.D0.BA.D1.86.D1.96.D0.B9_.D1.81.D1.83.D0.BC.D1.96.D1.81.D0.BD.D0.BE.D1.81.D1.82.D1.96_.D0.B7_SCADA_Complex1_.D1.84.D1.96.D1.80.D0.BC.D0.B8_.D0.A2.D0.9E.D0.92_.D0.9D.D0.86.D0.9F_.22DIYA.22_.28Special.FLibComplex1.29"><span class="mw-headline-number">12.3</span> Модуль <a href="Modules/FLibComplex1.html" title="Special:MyLanguage/Modules/FLibComplex1">Бібліотека функцій ÑуміÑноÑÑ‚Ñ– з SCADA Complex1 фірми ТОВ ÐІП "DIYA" (Special.FLibComplex1)</a></span></h3> <p><b>Об'єкт "Бібліотека функцій" (SYS.Special.FLibComplex1)</b> </p> <ul><li> <i>ElTp {funcID}(ElTp prm1, ...)</i> — виклик функції бібліотеки <i>{funcID}</i>. Повертає результат викликаної функції.</li></ul> <p><b>Об'єкт "КориÑтувацька функціÑ" (SYS.Special.FLibComplex1["funcID"])</b> </p> <ul><li> <i>ElTp call(ElTp prm1, ...)</i> — виклик цієї функції з параметрами <i><prm{N}></i>. Повертає результат викликаної функції.</li></ul> <p><br /> </p> <h2><span class="mw-headline" id=".D0.91.D1.96.D0.B1.D0.BB.D1.96.D0.BE.D1.82.D0.B5.D0.BA.D0.B8_.D1.84.D1.83.D0.BD.D0.BA.D1.86.D1.96.D0.B9_.D0.BA.D0.BE.D1.80.D0.B8.D1.81.D1.82.D1.83.D0.B2.D0.B0.D1.87.D0.B0"><span class="mw-headline-number">13</span> Бібліотеки функцій кориÑтувача</span></h2> <p>Ðа цей Ñ‡Ð°Ñ OpenSCADA має бібліотеки функцій кориÑтувача, напиÑані з викориÑтаннÑм цього API кориÑтувача. ДеÑкі з них розроблено Ð´Ð»Ñ Ð²Ð¸ÐºÐ»ÑŽÑ‡Ð½Ð¾Ð³Ð¾ викориÑÑ‚Ð°Ð½Ð½Ñ Ð· цього API. Ð’ÑÑ– бібліотеки кориÑтувача предÑтавлено у наÑтупній таблиці: </p> <table class="wikitable"> <tr> <th> Ðазва </th> <th> ВерÑÑ–Ñ </th> <th> Ð›Ñ–Ñ†ÐµÐ½Ð·Ñ–Ñ </th> <th> Джерело </th> <th> Мови </th></tr> <tr> <td colspan="5"> <i>Бібліотеки джерел даних, Ñлужб та обробки</i> </td></tr> <tr> <td> <a href="Libs_Main.html" title="Special:MyLanguage/Libs/Main">ОÑновна бібліотека</a> </td> <td> 2.3 </td> <td> GPLv2 </td> <td> OscadaLibs.db (<a class="external text" href="http://oscada.org/svn/trunk/OpenSCADA/data/LibsDB/OscadaLibs.sql" rel="nofollow noreferrer noopener" target="_blank">SQL</a>, <a class="external" href="http://oscada.org/wiki/File:OscadaLibs.db.gz" title="File:OscadaLibs.db.gz">GZip</a>) > DAQ.tmplb_base </td> <td> en, uk, ru </td></tr> <tr> <td> <a href="Libs_Devices.html" title="Special:MyLanguage/Libs/Devices">Бібліотека промиÑлових приÑтроїв</a> </td> <td> 3.1 </td> <td> GPLv2 </td> <td> OscadaLibs.db (<a class="external text" href="http://oscada.org/svn/trunk/OpenSCADA/data/LibsDB/OscadaLibs.sql" rel="nofollow noreferrer noopener" target="_blank">SQL</a>, <a class="external" href="http://oscada.org/wiki/File:OscadaLibs.db.gz" title="File:OscadaLibs.db.gz">GZip</a>) > DAQ.tmplb_DevLib </td> <td> en, uk, ru </td></tr> <tr> <td> <a href="Libs_LowLevelDevices.html" title="Special:MyLanguage/Libs/LowLevelDevices">Бібліотека низькорівневих ÑенÑорів та чипів</a> </td> <td> 1.6 </td> <td> GPLv2 </td> <td> OscadaLibs.db (<a class="external text" href="http://oscada.org/svn/trunk/OpenSCADA/data/LibsDB/OscadaLibs.sql" rel="nofollow noreferrer noopener" target="_blank">SQL</a>, <a class="external" href="http://oscada.org/wiki/File:OscadaLibs.db.gz" title="File:OscadaLibs.db.gz">GZip</a>) > DAQ.tmplb_LowDevLib </td> <td> en, uk, ru </td></tr> <tr> <td> <a href="Libs_Service_procedures.html" title="Special:MyLanguage/Libs/Service procedures">Бібліотека ÑервіÑних процедур</a> </td> <td> 1.2 </td> <td> GPLv2 </td> <td> OscadaLibs.db (<a class="external text" href="http://oscada.org/svn/trunk/OpenSCADA/data/LibsDB/OscadaLibs.sql" rel="nofollow noreferrer noopener" target="_blank">SQL</a>, <a class="external" href="http://oscada.org/wiki/File:OscadaLibs.db.gz" title="File:OscadaLibs.db.gz">GZip</a>) > DAQ.JavaLikeCalc.servProc </td> <td> en, uk, ru </td></tr> <tr> <td> <a href="Libs_Regulation_elements.html" title="Special:MyLanguage/Libs/Regulation elements">Бібліотека елементів регулюваннÑ</a> </td> <td> 1.0 </td> <td> GPLv2 </td> <td> OscadaLibs.db (<a class="external text" href="http://oscada.org/svn/trunk/OpenSCADA/data/LibsDB/OscadaLibs.sql" rel="nofollow noreferrer noopener" target="_blank">SQL</a>, <a class="external" href="http://oscada.org/wiki/File:OscadaLibs.db.gz" title="File:OscadaLibs.db.gz">GZip</a>) > DAQ.JavaLikeCalc.regEl </td> <td> en, uk, ru </td></tr> <tr> <td> <a href="Libs_Technological_apparatuses.html" title="Special:MyLanguage/Libs/Technological apparatuses">Бібліотека моделей апаратів технологічних процеÑів</a> </td> <td> 2.0 </td> <td> GPLv2 </td> <td> OscadaLibs.db (<a class="external text" href="http://oscada.org/svn/trunk/OpenSCADA/data/LibsDB/OscadaLibs.sql" rel="nofollow noreferrer noopener" target="_blank">SQL</a>, <a class="external" href="http://oscada.org/wiki/File:OscadaLibs.db.gz" title="File:OscadaLibs.db.gz">GZip</a>) > DAQ.JavaLikeCalc.techApp </td> <td> en, uk, ru </td></tr> <tr> <td colspan="5"> <i>Бібліотеки графічних елементів OpenSCADA Ð¼Ð¾Ð´ÑƒÐ»Ñ <a href="Modules/VCAEngine.html" title="Special:MyLanguage/Modules/VCAEngine">UI.VCAEngine</a></i> </td></tr> <tr> <td> <a href="Libs_Main_graphical_elements.html" title="Special:MyLanguage/Libs/Main graphical elements">Бібліотека оÑновних елементів інтерфейÑу кориÑтувача</a> </td> <td> 2.2 </td> <td> GPLv2 </td> <td> vcaBase.db (<a class="external text" href="http://oscada.org/svn/trunk/OpenSCADA/data/LibsDB/vcaBase.sql" rel="nofollow noreferrer noopener" target="_blank">SQL</a>, <a class="external" href="http://oscada.org/wiki/File:VcaBase.db.gz" title="File:VcaBase.db.gz">GZip</a>) > VCA.wlb_Main </td> <td> en, uk, ru </td></tr> <tr> <td> <a href="Libs_Mnemo_elements.html" title="Special:MyLanguage/Libs/Mnemo elements">Бібліотека елементів мнемоÑхем інтерфейÑу кориÑтувача</a> </td> <td> 1.0 </td> <td> GPLv2 </td> <td> vcaBase.db (<a class="external text" href="http://oscada.org/svn/trunk/OpenSCADA/data/LibsDB/vcaBase.sql" rel="nofollow noreferrer noopener" target="_blank">SQL</a>, <a class="external" href="http://oscada.org/wiki/File:VcaBase.db.gz" title="File:VcaBase.db.gz">GZip</a>) > VCA.wlb_mnEls </td> <td> en, uk, ru </td></tr> <tr> <td> <a href="Libs_Electrical_elements.html" title="Special:MyLanguage/Libs/Electrical elements">Бібліотека електричних елементів кориÑтувацького інтерфейÑу</a> </td> <td> 2.0 </td> <td> GPLv2 </td> <td> vcaElectroEls.db (<a class="external text" href="http://oscada.org/svn/trunk/OpenSCADA/data/LibsDB/vcaElectroEls.sql" rel="nofollow noreferrer noopener" target="_blank">SQL</a>, <a class="external" href="http://oscada.org/wiki/File:VcaElectroEls.db.gz" title="File:VcaElectroEls.db.gz">GZip</a>) > VCA.wlb_ElectroEls </td> <td> en, uk, ru </td></tr> <tr> <td colspan="5"> <i>Комбіновані бібліотеки</i> </td></tr> <tr> <td> <a href="Libs_Documents.html" title="Special:MyLanguage/Libs/Documents">Бібліотека звітів та документів</a> </td> <td> 2.0, 2.1 </td> <td> GPLv2 </td> <td> <p>OscadaLibs.db (<a class="external text" href="http://oscada.org/svn/trunk/OpenSCADA/data/LibsDB/OscadaLibs.sql" rel="nofollow noreferrer noopener" target="_blank">SQL</a>, <a class="external" href="http://oscada.org/wiki/File:OscadaLibs.db.gz" title="File:OscadaLibs.db.gz">GZip</a>) > DAQ.JavaLikeCalc.doc<br /> vcaBase.db (<a class="external text" href="http://oscada.org/svn/trunk/OpenSCADA/data/LibsDB/vcaBase.sql" rel="nofollow noreferrer noopener" target="_blank">SQL</a>, <a class="external" href="http://oscada.org/wiki/File:VcaBase.db.gz" title="File:VcaBase.db.gz">GZip</a>) > VCA.wlb_doc </p> </td> <td> en, uk, ru </td></tr> <tr> <td> <a href="Libs_Prescriptions.html" title="Special:MyLanguage/Libs/Prescriptions">Рецепти</a> </td> <td> 1.1, 1.1 </td> <td> GPLv2 </td> <td> <p>OscadaLibs.db (<a class="external text" href="http://oscada.org/svn/trunk/OpenSCADA/data/LibsDB/OscadaLibs.sql" rel="nofollow noreferrer noopener" target="_blank">SQL</a>, <a class="external" href="http://oscada.org/wiki/File:OscadaLibs.db.gz" title="File:OscadaLibs.db.gz">GZip</a>) > DAQ.tmplb_PrescrTempl<br /> vcaBase.db (<a class="external text" href="http://oscada.org/svn/trunk/OpenSCADA/data/LibsDB/vcaBase.sql" rel="nofollow noreferrer noopener" target="_blank">SQL</a>, <a class="external" href="http://oscada.org/wiki/File:VcaBase.db.gz" title="File:VcaBase.db.gz">GZip</a>) > VCA.wlb_prescr </p> </td> <td> en, uk, ru </td></tr></table> <p><br /> </p> <h2><span class="mw-headline" id=".D0.9F.D0.BE.D1.81.D0.B8.D0.BB.D0.B0.D0.BD.D0.BD.D1.8F"><span class="mw-headline-number">14</span> ПоÑиланнÑ</span></h2> <ul><li> <a class="external" href="http://oscada.org/wiki/File:Oscada_UserOM_uk.odg" title="File:Oscada UserOM uk.odg">Діаграма: КориÑтувацька об'єктна модель Ñдра OpenSCADA.</a></li></ul> </div><table style="border-top: dotted 2px #999999; margin-top: 20pt; color: gray;" width="100%"><tr><td style="text-align: left;" width="40%"><a href="http://oscada.org/wiki/Documents/User_API/uk">Documents/User_API/uk</a> - <a href="http://oscada.org/en/main/about-the-project/licenses/">GFDL</a></td><td style="text-align: center;">April 2025</td><td style="text-align: right;" width="40%">OpenSCADA 1+r3018</td></tr></table></body> </html>