<?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&amp;group=page-Documents%2FUser+API&amp;action=page&amp;filter=&amp;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>&nbsp;• ‎<a class="mw-pt-progress mw-pt-progress--high" href="../ru/User_API.html" title="Документация/API пользователя (79% translated)">mRussian</a>&nbsp;• ‎<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>("&lt;EVAL&gt;").</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>("&lt;EVAL&gt;")<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>&lt;&lt;</td><td>Порозрядний зсув ліворуч</td></tr>
<tr><td>&gt;&gt;</td><td>Порозрядний зсув праворуч</td></tr>
<tr bgcolor="#FFFFC0"><td>&gt;</td><td>Більше</td></tr>
<tr bgcolor="#FFFFC0"><td>&gt;=</td><td>Більше або дорівнює</td></tr>
<tr bgcolor="#FFFFC0"><td>&lt;</td><td>Менше</td></tr>
<tr bgcolor="#FFFFC0"><td>&lt;=</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>&amp;</td><td>Порозрядне "ТАК"</td></tr>
<tr><td>^</td><td>Порозрядне "Виключне АБО"</td></tr>
<tr bgcolor="#FFFFC0"><td>&amp;&amp;</td><td>Логічне "ТАК"</td></tr>
<tr bgcolor="#FFFFC0"><td>||</td><td>Логічне "АБО"</td></tr>
<tr><td>?:</td><td>Умовна операція "i=(i&lt;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">&gt;=</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">&gt;</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">&lt;</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) та підвиразами (&gt;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) та підвиразами (&gt;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) та підвирази (&gt;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 — очищати сервісні теги: &lt;??&gt;, &lt;!-- --&gt;;</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&lt;XMLNodeObj&gt; 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 &amp;"). Функція надає користувачу 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>&lt;get path="/OPath/%2felem" /&gt;</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&nbsp;%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&nbsp;%H:%M:%S" );</i> — повертає час у секундах від епохи 1.1.1970, виходячи з строкового запису часу <i>str</i>, відповідно до вказаного шаблону <i>form</i>. Наприклад, шаблону "%Y-%m-%d&nbsp;%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> та "&gt; 0x80" у "%20", "%09", "%25" та інше;</dd>
<dd>"HTML" — символи HTML-сутностей <b>[&gt;&lt;"&amp;']</b> у "&amp;gt;", "&amp;lt;", "&amp;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>[ /\&amp;(]</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> вказує на роздільник або "&lt;text&gt;", для включення зміщення ліворуч та текстової частини праворуч;</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">&lt;</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">&lt;</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>&lt;RowId type="real" len="10.2" key="1" def="Default value"&gt;{Value}&lt;/RowId&gt;</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} &gt; {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="Об&#039;єктна модель користувача модуля JavaLikeCalc."><img alt="Об&#039;єктна модель користувача модуля 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="Об&#039;єктна модель користувача модуля BlockCalc."><img alt="Об&#039;єктна модель користувача модуля 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="Об&#039;єктна модель користувача модуля ModBus."><img alt="Об&#039;єктна модель користувача модуля 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 &lt; 0) на час від <i>btm</i> по <i>etm</i> для категорії <i>cat</i>, рівня <i>lev</i> (-7...7) та архіваторів <i>arch</i> (поділені символом ';'; "" — буфер та архіватори; "&lt;buffer&gt;" — буфер; "{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> — архіватор запиту, встановити у порожній рядок для перевірки всіх архіваторів, встановити у "&lt;buffer&gt;" для обробки тільки буферу.</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> — архіватор встановлення, встановити у порожній рядок для всіх архіваторів, встановити у "&lt;buffer&gt;" для обробки тільки буферу.</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> — архіватор запиту, встановити у порожній рядок для перевірки всіх архіваторів, встановити у "&lt;buffer&gt;" для обробки тільки буферу.</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> — архіватор запиту, встановити у порожній рядок для перевірки всіх архіваторів, встановити у "&lt;buffer&gt;" для обробки тільки буферу.</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> (якщо не &lt;EVAL&gt;). Для запуску можна вказувати особливий таймаут <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> (&lt; -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">&amp;&amp;</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="Об&#039;єктна модель користувача модуля VCAEngine."><img alt="Об&#039;єктна модель користувача модуля 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>&lt;prm{N}&gt;</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>&lt;prm{N}&gt;</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>&lt;prm{N}&gt;</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>) &gt; 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>) &gt; 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>) &gt; 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>) &gt; 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>) &gt; 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>) &gt; 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>) &gt; 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>) &gt; 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>) &gt; 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>) &gt; 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>) &gt; 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>) &gt; 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>) &gt; 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>