<?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="ru">ДокументациÑ/API пользователÑ</h1> </div><div class="mw-content-ltr" dir="ltr" id="mw-content-text" lang="ru"><div class="mw-pt-translate-header noprint" dir="ltr" lang="en">This page is a <span class="plainlinks"><a class="external text" href="http://oscada.org/wiki/index.php?title=Special:Translate&group=page-Documents%2FUser+API&action=page&filter=&language=ru" 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 79% 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> • ‎<span class="mw-pt-languages-selected mw-pt-progress mw-pt-progress--high">mRussian</span> • ‎<a class="mw-pt-progress mw-pt-progress--complete" href="../uk/User_API.html" title="ДокументаціÑ/API кориÑтувача (100% translated)">УкраїнÑька</a></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_ru.png"><img class="thumbimage" height="541" src="files/Oscada_UserOM_ru.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.9F.D0.BE.D0.BB.D1.8C.D0.B7.D0.BE.D0.B2.D0.B0.D1.82.D0.B5.D0.BB.D1.8C.D1.81.D0.BA.D0.B8.D0.B9_.D1.8F.D0.B7.D1.8B.D0.BA_.D0.BF.D1.80.D0.BE.D0.B3.D1.80.D0.B0.D0.BC.D0.BC.D0.B8.D1.80.D0.BE.D0.B2.D0.B0.D0.BD.D0.B8.D1.8F_JavaLikeCalc"><span class="tocnumber">1</span> <span class="toctext"><span>ПользовательÑкий Ñзык Ð¿Ñ€Ð¾Ð³Ñ€Ð°Ð¼Ð¼Ð¸Ñ€Ð¾Ð²Ð°Ð½Ð¸Ñ JavaLikeCalc</span></span></a> <ul> <li class="toclevel-2"><a href="#.D0.AD.D0.BB.D0.B5.D0.BC.D0.B5.D0.BD.D1.82.D1.8B_.D1.8F.D0.B7.D1.8B.D0.BA.D0.B0"><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.D0.B8.D0.B8_.D1.8F.D0.B7.D1.8B.D0.BA.D0.B0"><span class="tocnumber">1.2</span> <span class="toctext">Операции Ñзыка</span></a></li> <li class="toclevel-2"><a href="#.D0.92.D1.81.D1.82.D1.80.D0.BE.D0.B5.D0.BD.D0.BD.D1.8B.D0.B5_.D1.84.D1.83.D0.BD.D0.BA.D1.86.D0.B8.D0.B8_.D1.8F.D0.B7.D1.8B.D0.BA.D0.B0"><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.D1.8B_.D1.8F.D0.B7.D1.8B.D0.BA.D0.B0"><span class="tocnumber">1.4</span> <span class="toctext">Операторы Ñзыка</span></a> <ul> <li class="toclevel-3"><a href="#.D0.A3.D1.81.D0.BB.D0.BE.D0.B2.D0.BD.D1.8B.D0.B5_.D0.BE.D0.BF.D0.B5.D1.80.D0.B0.D1.82.D0.BE.D1.80.D1.8B"><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.D1.8B"><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.D0.B5.D0.BD.D0.BD.D0.B8.D0.B5_.D1.84.D1.83.D0.BD.D0.BA.D1.86.D0.B8.D0.B8"><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.D0.B8.D0.B0.D0.BB.D1.8C.D0.BD.D1.8B.D0.B5_.D1.81.D0.B8.D0.BC.D0.B2.D0.BE.D0.BB.D1.8B_.D1.81.D1.82.D1.80.D0.BE.D0.BA.D0.BE.D0.B2.D1.8B.D1.85_.D0.BF.D0.B5.D1.80.D0.B5.D0.BC.D0.B5.D0.BD.D0.BD.D1.8B.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.9E.D0.B1.D1.89.D0.B5.D1.81.D0.B8.D1.81.D1.82.D0.B5.D0.BC.D0.BD.D1.8B.D0.B5_.D0.BF.D0.BE.D0.BB.D1.8C.D0.B7.D0.BE.D0.B2.D0.B0.D1.82.D0.B5.D0.BB.D1.8C.D1.81.D0.BA.D0.B8.D0.B5_.D0.BE.D0.B1.D1.8A.D0.B5.D0.BA.D1.82.D1.8B"><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.D1.8A.D0.B5.D0.BA.D1.82_.D0.BC.D0.B0.D1.81.D1.81.D0.B8.D0.B2.D0.B0_.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.D1.8A.D0.B5.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.D1.8B.D1.80.D0.B0.D0.B6.D0.B5.D0.BD.D0.B8.D1.8F_.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="#XML_node-tag_object_.28XMLNodeObj.29"><span class="tocnumber">2.3</span> <span class="toctext">XML node-tag object (XMLNodeObj)</span></a></li> </ul> </li> <li class="toclevel-1 tocsection-6"><a href="#Program-system_.28SYS.29"><span class="tocnumber">3</span> <span class="toctext"><span>Program-system (SYS)</span></span></a></li> <li class="toclevel-1 tocsection-7"><a href="#Any_object_.28TCntrNode.29_of_OpenSCADA_objects_tree_.28SYS..2A.29"><span class="tocnumber">4</span> <span class="toctext"><span>Any object (TCntrNode) of OpenSCADA objects tree (SYS.*)</span></span></a></li> <li class="toclevel-1 tocsection-8"><a href="#Subsystem_.22Security.22_.28SYS.Security.29"><span class="tocnumber">5</span> <span class="toctext">Subsystem "Security" (SYS.Security)</span></a></li> <li class="toclevel-1 tocsection-9"><a href="#.D0.9F.D0.BE.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.D0.BE.D0.B4.D1.81.D0.B8.D1.81.D1.82.D0.B5.D0.BC.D0.B0_.22.D0.A1.D0.B1.D0.BE.D1.80_.D0.B4.D0.B0.D0.BD.D0.BD.D1.8B.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.D0.BE.D0.B4.D1.81.D0.B8.D1.81.D1.82.D0.B5.D0.BC.D0.B0_.22.D0.90.D1.80.D1.85.D0.B8.D0.B2.D1.8B-.D0.98.D1.81.D1.82.D0.BE.D1.80.D0.B8.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="#Subsystem_.22Transports.22_.28SYS.Transport.29"><span class="tocnumber">9</span> <span class="toctext"><span>Subsystem "Transports" (SYS.Transport)</span></span></a></li> <li class="toclevel-1 tocsection-19"><a href="#.D0.9F.D0.BE.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.D1.8B.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="#Subsystem_.22User_interfaces.22_.28SYS.UI.29"><span class="tocnumber">11</span> <span class="toctext"><span>Subsystem "User interfaces" (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.D0.BE.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.D0.B8.D0.B0.D0.BB.D1.8C.D0.BD.D1.8B.D0.B5.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.D0.B8.D0.B1.D0.BB.D0.B8.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.D1.80.D0.B5.D0.B4.D1.8B_.D0.BF.D0.BE.D0.BB.D1.8C.D0.B7.D0.BE.D0.B2.D0.B0.D1.82.D0.B5.D0.BB.D1.8C.D1.81.D0.BA.D0.BE.D0.B3.D0.BE_.D0.BF.D1.80.D0.BE.D0.B3.D1.80.D0.B0.D0.BC.D0.BC.D0.B8.D1.80.D0.BE.D0.B2.D0.B0.D0.BD.D0.B8.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.D0.B8.D0.B1.D0.BB.D0.B8.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.D1.8B.D1.85_.D0.BC.D0.B0.D1.82.D0.B5.D0.BC.D0.B0.D1.82.D0.B8.D1.87.D0.B5.D1.81.D0.BA.D0.B8.D1.85_.D1.84.D1.83.D0.BD.D0.BA.D1.86.D0.B8.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.D0.B8.D0.B1.D0.BB.D0.B8.D0.BE.D1.82.D0.B5.D0.BA.D0.B0_.D1.84.D1.83.D0.BD.D0.BA.D1.86.D0.B8.D0.B9_.D1.81.D0.BE.D0.B2.D0.BC.D0.B5.D1.81.D1.82.D0.B8.D0.BC.D0.BE.D1.81.D1.82.D0.B8_.D1.81.D0.BE_SCADA_Complex1_.D1.84.D0.B8.D1.80.D0.BC.D1.8B_.D0.9E.D0.9E.D0.9E_.D0.9D.D0.98.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.D0.B8.D0.B1.D0.BB.D0.B8.D0.BE.D1.82.D0.B5.D0.BA.D0.B8_.D1.84.D1.83.D0.BD.D0.BA.D1.86.D0.B8.D0.B9_.D0.BF.D0.BE.D0.BB.D1.8C.D0.B7.D0.BE.D0.B2.D0.B0.D1.82.D0.B5.D0.BB.D1.8F"><span class="tocnumber">13</span> <span class="toctext">Библиотеки функций пользователÑ</span></a></li> <li class="toclevel-1 tocsection-29"><a href="#.D0.A1.D1.81.D1.8B.D0.BB.D0.BA.D0.B8"><span class="tocnumber">14</span> <span class="toctext">СÑылки</span></a></li> </ul> </div> <h2><span class="mw-headline" id=".D0.9F.D0.BE.D0.BB.D1.8C.D0.B7.D0.BE.D0.B2.D0.B0.D1.82.D0.B5.D0.BB.D1.8C.D1.81.D0.BA.D0.B8.D0.B9_.D1.8F.D0.B7.D1.8B.D0.BA_.D0.BF.D1.80.D0.BE.D0.B3.D1.80.D0.B0.D0.BC.D0.BC.D0.B8.D1.80.D0.BE.D0.B2.D0.B0.D0.BD.D0.B8.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.AD.D0.BB.D0.B5.D0.BC.D0.B5.D0.BD.D1.82.D1.8B_.D1.8F.D0.B7.D1.8B.D0.BA.D0.B0"><span class="mw-headline-number">1.1</span> Ðлементы Ñзыка</span></h3> <p><i>Ключевые Ñлова:</i> <b>if</b>, <b>else</b>, <b>while</b>, <b>for</b>, <b>in</b>, <b>break</b>, <b>continue</b>, <b>return</b>, <b>function</b>, <b>using</b>.<br /> <i>ПоÑтоÑнные:</i> </p> <ul><li> деÑÑтичные: цифры <b>0-9</b> (12, 111, 678);</li> <li> воÑьмеричные: цифры <b>0-7</b> (012, 011, 076);</li> <li> шеÑтнадцатеричные: цифры <b>0-9</b>, буквы <b>a-f</b> или <b>A-F</b> (0x12, 0XAB);</li> <li> вещеÑтвенные: <b>345.23</b>, <b>2.1e5</b>, <b>3.4E-5</b>, <b>3e6</b>;</li> <li> логичеÑкие: <b>true</b>, <b>false</b>;</li> <li> Ñтроковые: <b>"hello"</b>, без перехода на другую Ñтроку однако Ñ Ð¿Ð¾Ð´Ð´ÐµÑ€Ð¶ÐºÐ¾Ð¹ прÑмой конкатенации Ñтроковых конÑтант.</li></ul> <p><i>Типы переменных:</i> </p> <ul><li> целое: <b>-2<sup>63</sup></b> ... <b>2<sup>63</sup></b>, <b>EVAL_INT</b>(-9223372036854775807);</li> <li> вещеÑтвенное: <b>3.4*10<sup>308</sup></b>, <b>EVAL_REAL</b>(-1.79E308);</li> <li> логичеÑкое: <b>false</b>, <b>true</b>, <b>EVAL_BOOL</b>(2);</li> <li> Ñтрока: поÑледовательноÑÑ‚ÑŒ Ñимволов-байтов (0...255) любой длины, ограниченной объёмом памÑти и хранилищем в БД; <b>EVAL_STR</b>("<EVAL>").</li></ul> <p><i>Ð’Ñтроенные конÑтанты:</i> <b>pi</b> = 3.14159265..., <b>e</b> = 2.71828182..., <b>EVAL_BOOL</b>(2), <b>EVAL_INT</b>(-9223372036854775807), <b>null</b>,<b>EVAL</b>,<b>EVAL_REAL</b>(-1.79E308), <b>EVAL_STR</b>("<EVAL>")<br /> <i>Глобальные атрибуты параметров DAQ (Ð½Ð°Ñ‡Ð¸Ð½Ð°Ñ Ñ Ð¿Ð¾Ð´ÑиÑтемы "DAQ" и в виде <b>{Тип Ð¼Ð¾Ð´ÑƒÐ»Ñ DAQ}.{Объект контроллера}.{Параметр}.{Ðтрибут}</b>).</i><br /> <i>Функции и параметры <a href="User_API.html" title="Special:MyLanguage/Documents/User API">объектной модели OpenSCADA</a>.</i> </p><p><a class="image" href="http://oscada.org/wiki/File:At.png"><img alt="At.png" height="22" src="../en/files/At.png" width="22" /></a> The <b>EVAL</b> (Error VALue) variants and <b>null</b> are processed specially in conversion one to one depending on used the base type, that is you are free in use only <b>null</b> or <b>EVAL</b> for any cases. </p> <h3><span class="mw-headline" id=".D0.9E.D0.BF.D0.B5.D1.80.D0.B0.D1.86.D0.B8.D0.B8_.D1.8F.D0.B7.D1.8B.D0.BA.D0.B0"><span class="mw-headline-number">1.2</span> Операции Ñзыка</span></h3> <p>Операции, поддерживаемые Ñзыком, предÑтавлены в таблице ниже. Приоритет операций уменьшаетÑÑ Ñверху вниз. Операции Ñ Ð¾Ð´Ð¸Ð½Ð°ÐºÐ¾Ð²Ñ‹Ð¼ приоритетом входÑÑ‚ в одну цветовую группу. </p> <table bgcolor="#FFFFF0" border="1" cellspacing="0"> <tr align="center" bgcolor="#83D8FF"><td><b>Символ</b></td><td><b>ОпиÑание</b></td></tr> <tr bgcolor="#FFFFC0"><td>()</td><td>Вызов функции.</td></tr> <tr><td>{}</td><td>Программные блоки.</td></tr> <tr><td>++</td><td>Инкремент (поÑÑ‚ и пре).</td></tr> <tr><td>--</td><td>Декремент (поÑÑ‚ и пре).</td></tr> <tr bgcolor="#FFFFC0"><td>-</td><td>Унарный минуÑ.</td></tr> <tr bgcolor="#FFFFC0"><td>!</td><td>ЛогичеÑкое отрицание.</td></tr> <tr bgcolor="#FFFFC0"><td>~</td><td>Побитовое отрицание.</td></tr> <tr><td>*</td><td>Умножение.</td></tr> <tr><td>/</td><td>Деление.</td></tr> <tr><td>%</td><td>ОÑтаток от целочиÑленного делениÑ.</td></tr> <tr bgcolor="#FFFFC0"><td>+</td><td>Сложение</td></tr> <tr bgcolor="#FFFFC0"><td>-</td><td>Вычитание</td></tr> <tr><td><<</td><td>ПоразрÑдный Ñдвиг влево</td></tr> <tr><td>>></td><td>ПоразрÑдный Ñдвиг вправо</td></tr> <tr bgcolor="#FFFFC0"><td>></td><td>Больше</td></tr> <tr bgcolor="#FFFFC0"><td>>=</td><td>Больше или равно</td></tr> <tr bgcolor="#FFFFC0"><td><</td><td>Меньше</td></tr> <tr bgcolor="#FFFFC0"><td><=</td><td>Меньше или равно</td></tr> <tr bgcolor="#FFFFC0"><td>==</td><td>Равно</td></tr> <tr bgcolor="#FFFFC0"><td>!=</td><td>Ðе равно</td></tr> <tr><td>|</td><td>ПоразрÑдное "ИЛИ"</td></tr> <tr><td>&</td><td>ПоразрÑдное "И"</td></tr> <tr><td>^</td><td>ПоразрÑдное "ИÑключающее ИЛИ"</td></tr> <tr bgcolor="#FFFFC0"><td>&&</td><td>ЛогичеÑкий "И"</td></tr> <tr bgcolor="#FFFFC0"><td>||</td><td>ЛогичеÑкий "ИЛИ"</td></tr> <tr><td>?:</td><td>УÑÐ»Ð¾Ð²Ð½Ð°Ñ Ð¾Ð¿ÐµÑ€Ð°Ñ†Ð¸Ñ "i=(i<0)?0:i;"</td></tr> <tr bgcolor="#FFFFC0"><td>=</td><td>ПриÑваивание.</td></tr> <tr bgcolor="#FFFFC0"><td>+=</td><td>ПриÑваивание Ñо Ñложением.</td></tr> <tr bgcolor="#FFFFC0"><td>-=</td><td>ПриÑваивание Ñ Ð²Ñ‹Ñ‡Ð¸Ñ‚Ð°Ð½Ð¸ÐµÐ¼.</td></tr> <tr bgcolor="#FFFFC0"><td>*=</td><td>ПриÑваивание Ñ ÑƒÐ¼Ð½Ð¾Ð¶ÐµÐ½Ð¸ÐµÐ¼.</td></tr> <tr bgcolor="#FFFFC0"><td>/=</td><td>ПриÑваивание Ñ Ð´ÐµÐ»ÐµÐ½Ð¸ÐµÐ¼.</td></tr> </table> <h3><span class="mw-headline" id=".D0.92.D1.81.D1.82.D1.80.D0.BE.D0.B5.D0.BD.D0.BD.D1.8B.D0.B5_.D1.84.D1.83.D0.BD.D0.BA.D1.86.D0.B8.D0.B8_.D1.8F.D0.B7.D1.8B.D0.BA.D0.B0"><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.D1.8B_.D1.8F.D0.B7.D1.8B.D0.BA.D0.B0"><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.D1.81.D0.BB.D0.BE.D0.B2.D0.BD.D1.8B.D0.B5_.D0.BE.D0.BF.D0.B5.D1.80.D0.B0.D1.82.D0.BE.D1.80.D1.8B"><span class="mw-headline-number">1.4.1</span> УÑловные операторы</span></h4> <p>Языком поддерживаютÑÑ Ð´Ð²Ð° типа уÑловий. Первый — Ñто операции уÑÐ»Ð¾Ð²Ð¸Ñ Ð´Ð»Ñ Ð¸ÑÐ¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ð½Ð¸Ñ Ð²Ð½ÑƒÑ‚Ñ€Ð¸ выражениÑ, второй — глобальный, оÑнованный на уÑловных операторах. </p><p>УÑловие внутри Ð²Ñ‹Ñ€Ð°Ð¶ÐµÐ½Ð¸Ñ ÑтроитÑÑ Ð½Ð° операциÑÑ… '?' и ':'. Ð’ качеÑтве примера можно запиÑать Ñледующее практичеÑкое выражение: </p> <div class="mw-highlight mw-content-ltr" dir="ltr"><pre><span class="nx">st_open</span> <span class="o">=</span> <span class="p">(</span><span class="nx">pos</span> <span class="o">>=</span> <span class="mi">100</span><span class="p">)</span> <span class="o">?</span> <span class="kc">true</span> <span class="o">:</span> <span class="kc">false</span><span class="p">;</span> </pre></div> <p>Что читаетÑÑ ÐºÐ°Ðº — еÑли Ð¿ÐµÑ€ÐµÐ¼ÐµÐ½Ð½Ð°Ñ <i>pos</i> больше или равна <b>100</b>, то переменной <i>st_open</i> приÑваиваетÑÑ Ð·Ð½Ð°Ñ‡ÐµÐ½Ð¸Ðµ <b>true</b>, иначе — <b>false</b>. </p><p>Глобальное уÑловие ÑтроитÑÑ Ð½Ð° оÑнове уÑловных операторов "if" и "else". Ð’ качеÑтве примера можно привеÑти тоже выражение, но запиÑанное другим ÑпоÑобом: </p> <div class="mw-highlight mw-content-ltr" dir="ltr"><pre><span class="k">if</span><span class="p">(</span><span class="nx">pos</span> <span class="o">></span> <span class="mi">100</span><span class="p">)</span> <span class="nx">st_open</span> <span class="o">=</span> <span class="kc">true</span><span class="p">;</span> <span class="k">else</span> <span class="nx">st_open</span> <span class="o">=</span> <span class="kc">false</span><span class="p">;</span> </pre></div> <h4><span class="mw-headline" id=".D0.A6.D0.B8.D0.BA.D0.BB.D1.8B"><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.D0.B5.D0.BD.D0.BD.D0.B8.D0.B5_.D1.84.D1.83.D0.BD.D0.BA.D1.86.D0.B8.D0.B8"><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.D0.B8.D0.B0.D0.BB.D1.8C.D0.BD.D1.8B.D0.B5_.D1.81.D0.B8.D0.BC.D0.B2.D0.BE.D0.BB.D1.8B_.D1.81.D1.82.D1.80.D0.BE.D0.BA.D0.BE.D0.B2.D1.8B.D1.85_.D0.BF.D0.B5.D1.80.D0.B5.D0.BC.D0.B5.D0.BD.D0.BD.D1.8B.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.9E.D0.B1.D1.89.D0.B5.D1.81.D0.B8.D1.81.D1.82.D0.B5.D0.BC.D0.BD.D1.8B.D0.B5_.D0.BF.D0.BE.D0.BB.D1.8C.D0.B7.D0.BE.D0.B2.D0.B0.D1.82.D0.B5.D0.BB.D1.8C.D1.81.D0.BA.D0.B8.D0.B5_.D0.BE.D0.B1.D1.8A.D0.B5.D0.BA.D1.82.D1.8B"><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>. Очевидно, что первый механизм Ñтатичен, а второй позволÑет указывать Ð¸Ð¼Ñ ÑвойÑтва через переменную. Удалить ÑвойÑтво объекта можно директивой "delete". Ð˜Ð¼Ñ ÑвойÑтва через точку не должно начинатьÑÑ Ñ Ñ†Ð¸Ñ„Ñ€Ñ‹ и Ñодержать Ñимволы операций, иначе, Ð´Ð»Ñ Ð¿ÐµÑ€Ð²Ð¾Ð¹ цифры, должен иÑпользоватьÑÑ <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>, Ð´Ð»Ñ Ñимволов операций в названии. Чтение неопределённого ÑвойÑтва вернёт <b>null</b>-<b>EVAL</b>. Создание объекта оÑущеÑтвлÑетÑÑ Ð¿Ð¾ÑредÑтвом ключевого Ñлова <i>new</i>: <b>varO = new Object()</b>. Базовое определение объекта не Ñодержит функций. Операции ÐºÐ¾Ð¿Ð¸Ñ€Ð¾Ð²Ð°Ð½Ð¸Ñ Ð¾Ð±ÑŠÐµÐºÑ‚Ð°, на Ñамом деле, делают ÑÑылку на иÑходный объект. При удалении объекта оÑущеÑтвлÑетÑÑ ÑƒÐ¼ÐµÐ½ÑŒÑˆÐµÐ½Ð¸Ðµ Ñчётчика ÑÑылок, а при доÑтижении Ñчётчика нулÑ, объект удалÑетÑÑ Ñ„Ð¸Ð·Ð¸Ñ‡ÐµÑки. </p><p>Разные компоненты OpenSCADA могут доопределÑÑ‚ÑŒ базовый объект оÑобыми ÑвойÑтвами и функциÑми. Стандартным раÑширением объекта ÑвлÑетÑÑ Ð¼Ð°ÑÑив "Array", который ÑоздаётÑÑ ÐºÐ¾Ð¼Ð°Ð½Ð´Ð¾Ð¹ <b>varO = new Array(prm1,prm2,prm3,...,prmN)</b>. ПеречиÑленные через запÑтую параметры помещаютÑÑ Ð² маÑÑив в иÑходном порÑдке. ЕÑли параметр только один то маÑÑив инициируетÑÑ ÑƒÐºÐ°Ð·Ð°Ð½Ð½Ñ‹Ð¼ количеÑтвом пуÑÑ‚Ñ‹Ñ… Ñлементов. ОÑобенноÑтью маÑÑива ÑвлÑетÑÑ Ñ‚Ð¾, что он работает Ñо ÑвойÑтвами, как Ñ Ð¸Ð½Ð´ÐµÐºÑами и оÑновным механизмом Ð¾Ð±Ñ€Ð°Ñ‰ÐµÐ½Ð¸Ñ ÑвлÑетÑÑ Ð·Ð°ÐºÐ»ÑŽÑ‡ÐµÐ½Ð¸Ðµ индекÑа в квадратные Ñкобки <i>arr[1]</i>. МаÑÑив хранит ÑвойÑтва в ÑобÑтвенном контейнере одномерного маÑÑива. Цифровые ÑвойÑтва маÑÑива иÑпользуютÑÑ Ð´Ð»Ñ Ð´Ð¾Ñтупа непоÑредÑтвенно к маÑÑиву, а Ñимвольные работают как ÑвойÑтва объекта. Детальнее про ÑвойÑтва и функции маÑÑива можно прочитать по <a href="User_API.html#Array" title="Special:MyLanguage/Documents/User API">ÑÑылке</a>. </p><p>Объект регулÑрного Ð²Ñ‹Ñ€Ð°Ð¶ÐµÐ½Ð¸Ñ "RegExp" ÑоздаётÑÑ ÐºÐ¾Ð¼Ð°Ð½Ð´Ð¾Ð¹ <b>varO = new RegExp(pat, flg)</b>, где <i>pat</i> — шаблон регулÑрного выражениÑ, а <i>flg</i> — флаги поиÑка. Объект работы Ñ Ñ€ÐµÐ³ÑƒÐ»Ñрными выражениÑми оÑнован на библиотеке "PCRE". При глобальном поиÑке уÑтанавливаетÑÑ Ð°Ñ‚Ñ€Ð¸Ð±ÑƒÑ‚ объекта "lastIndex", что позволÑет продолжить поиÑк при Ñледующем вызове функции. Ð’ Ñлучае неудачного поиÑка атрибут "lastIndex" ÑбраÑываетÑÑ Ð² ноль. Детальнее про ÑвойÑтва и функции объекта регулÑрного Ð²Ñ‹Ñ€Ð°Ð¶ÐµÐ½Ð¸Ñ Ð¼Ð¾Ð¶Ð½Ð¾ прочитать по <a href="User_API.html#RegExp" title="Special:MyLanguage/Documents/User API">ÑÑылке</a>. </p><p>Ð”Ð»Ñ Ð¿Ñ€Ð¾Ð¸Ð·Ð²Ð¾Ð»ÑŒÐ½Ð¾Ð³Ð¾ доÑтупа к аргументам функции предуÑмотрен объект аргументов, обратитьÑÑ Ðº которому можно поÑредÑтвом Ñимвола "arguments". Ðтот объект Ñодержит ÑвойÑтво "length" Ñ ÐºÐ¾Ð»Ð¸Ñ‡ÐµÑтвом аргументов у функции и позволÑет обратитьÑÑ Ðº значению аргумента поÑредÑтвом его <b>номера</b> или <b>идентификатора</b>. РаÑÑмотрим перебор аргументов по циклу: </p> <div class="mw-highlight mw-content-ltr" dir="ltr"><pre><span class="nx">args</span> <span class="o">=</span> <span class="k">new</span> <span class="nb">Array</span><span class="p">();</span> <span class="k">for</span><span class="p">(</span><span class="kd">var</span> <span class="nx">i</span> <span class="o">=</span> <span class="mi">0</span><span class="p">;</span> <span class="nx">i</span> <span class="o"><</span> <span class="nx">arguments</span><span class="p">.</span><span class="nx">length</span><span class="p">;</span> <span class="nx">i</span><span class="o">++</span><span class="p">)</span> <span class="nx">args</span><span class="p">[</span><span class="nx">i</span><span class="p">]</span> <span class="o">=</span> <span class="nx">arguments</span><span class="p">[</span><span class="nx">i</span><span class="p">];</span> </pre></div> <p>ЧаÑтичными ÑвойÑтвами объекта обладают и базовые типы. СвойÑтва и функции базовых типов приведены ниже: </p> <ul><li> Ðулевой тип, функции: <ul><li> <i>bool isEVal();</i> — возвращает "true".</li></ul></li></ul> <ul><li> ЛогичеÑкий тип, функции: <ul><li> <i>bool isEVal(); bool isNaN( );</i> — проверÑет значение на <b>null</b>-<b>EVAL</b>.</li> <li> <i>string toString();</i> — предÑтавлÑет значение в виде Ñтроки "true" или "false".</li></ul></li></ul> <dl><dd><ul><li> <i>real toReal();</i> — читает логичеÑкое значение как вещеÑтвенное чиÑло.</li> <li> <i>int toInt();</i> — читает логичеÑкое значение как целое чиÑло.</li></ul></dd></dl> <ul><li> Целое и вещеÑтвенное чиÑло:</li></ul> <dl><dd><dl><dt> <i>СвойÑтва:</i></dt></dl> <ul><li> <i>MAX_VALUE</i> — макÑимальное значение;</li> <li> <i>MIN_VALUE</i> — минимальное значение;</li> <li> <i>NaN</i> — недоÑтоверное значение.</li></ul> <dl><dt> <i>Функции:</i></dt></dl> <ul><li> <i>bool isEVal(); bool isNaN( );</i> — проверÑет значение на <b>null</b>-<b>EVAL</b>, и не чиÑло Ð´Ð»Ñ Ð’ÐµÑ‰ÐµÑтвенного.</li> <li> <i>string toExponential( int numbs = -1 );</i> — возвращает Ñтроку отформатированного чиÑла, в ÑкÑпоненциальной нотации и количеÑтвом значащих цифр <i>numbs</i>. ЕÑли <i>numbs</i> отÑутÑтвует то цифр будет Ñтолько Ñколько необходимо.</li> <li> <i>string toFixed( int numbs = 0, int len = 0, bool sign = false );</i> — возвращает Ñтроку отформатированного чиÑла в нотации Ñ Ñ„Ð¸ÐºÑированной точкой и количеÑтвом цифр поÑле деÑÑтичной точки <i>numbs</i>, Ñ Ð¼Ð¸Ð½Ð¸Ð¼Ð°Ð»ÑŒÐ½Ð¾Ð¹ длиной <i>len</i> и обÑзательным знаком <i>sign</i>. ЕÑли <i>numbs</i> отÑутÑтвует то количеÑтво цифр поÑле деÑÑтичной точки равно нулю.</li> <li> <i>string toPrecision( int prec = -1 );</i> — возвращает Ñтроку отформатированного чиÑла Ñ ÐºÐ¾Ð»Ð¸Ñ‡ÐµÑтвом значащих цифр <i>prec</i>. </li> <li> <i>string toString( int base = 10, int len = -1, bool sign = false );</i> — возвращает Ñтроку отформатированного чиÑла целого типа Ñ Ð±Ð°Ð·Ð¾Ð¹ предÑÑ‚Ð°Ð²Ð»ÐµÐ½Ð¸Ñ <i>base</i> (2-36), Ñ Ð¼Ð¸Ð½Ð¸Ð¼Ð°Ð»ÑŒÐ½Ð¾Ð¹ длиной <i>len</i> и обÑзательным знаком <i>sign</i>.</li> <li> <i>real toReal();</i> — читает целое-вещеÑтвенное значение как вещеÑтвенное чиÑло.</li> <li> <i>int toInt();</i> — читает целое-вещеÑтвенное значение как целое чиÑло.</li></ul></dd></dl> <ul><li> String: </li></ul> <dl><dd><dl><dt> <i>Properties:</i></dt></dl> <ul><li> <i>int length</i> — string length. </li></ul> <dl><dt> <i>Functions:</i></dt></dl> <ul><li> <i>bool isEVal();</i> — checks value to <b>null</b>-<b>EVAL</b>.</li> <li> <i>bool isNaN( bool whole = true );</i> — checks the string to Not A Number and in whole for <i>whole</i>. </li> <li> <i>string charAt( int symb, string type = "" );</i> — extracts from the string the symbol <i>symb</i> for the <i>type</i>. These types of the symbol are supported: ""-ASCII and raw one byte code, UTF-8, UTF-16, UTF-32. In the case of UTF-8, the symbol position <i>symb</i> is changed to the next symbol position due to length of this symbols type is variable one.</li> <li> <i>int charCodeAt( int symb, string type = "" );</i> — extracts from the string the symbol code <i>symb</i> for the <i>type</i>. These types of the symbol are supported: ""-ASCII and raw one byte code, UTF-8, UTF-16, UTF-16LE, UTF-16BE, UTF-32, UTF-32LE, UTF-32BE. In the case of UTF-8, the symbol position <i>symb</i> is changed to the next symbol position due to length of this symbols type is variable one.</li> <li> <i>string concat( string val1, string val2, ... );</i> — returns a new string formed by joining the values <i>val1</i> etc. to the original one.</li> <li> <i>int indexOf( string substr, int start = 0 );</i> — returns the position of the required string <i>substr</i> in the original row from the position <i>start</i>. If the initial position is not specified then the search starts from the beginning. If the search string is not found then "-1" is returned.</li> <li> <i>int lastIndexOf( string substr, int start = {end} );</i> — returns the position of the search string <i>substr</i> in the original one beginning from the position of <i>start</i> when searching from the end. If the initial position is not specified then the search begins from the end. If the search string is not found then "-1" is returned.</li> <li> <i>int search( string pat, string flg = "" );</i> — searches into the string by the pattern <i>pat</i> and pattern's flags <i>flg</i>. Returns found substring position or "-1" for else.</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> — searches into the string by the "RegExp" pattern <i>pat</i>. Returns found substring position or "-1" for else.</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> — calls match for the string by the pattern <i>pat</i> and flags <i>flg</i>. Returns matched substring (0) and subexpressions (>0) array. Sets "index" attribute of the array to the substring position. Sets the "input" attribute to the source string. Sets the "err" attribute to the operation error code.</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 plus 2 plus 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> — calls match for the string and "RegExp" pattern <i>pat</i>. Returns matched substring (0) and subexpressions (>0) array. Sets the "index" attribute of the array to substring position. Sets the "input" attribute to the source string. Sets the "err" attribute to the operation error code.</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 plus 2 plus 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> — returns the string extracted from the original one starting from the <i>beg</i> position and ending before the <i>end</i> (not included), numbering from zero. If the begin or end is negative, then the count is conducted from the end of the line. If the end is not specified, then the end is the end of the line. For example, the construction <b>substring(-2)</b> return two last symbols of the string.</li> <li> <i>Array split( string sep, int limit = 0 );</i> — returns the array of strings separated by <i>sep</i> with the <i>limit</i> of the number of elements (0 for no limit).</li> <li> <i>Array split( RegExp pat, int limit = 0 );</i> — returns the array of strings separated by the RegExp pattern <i>pat</i> with the <i>limit</i> of the number of elements (0 for no limit).</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> — inserts the substring <i>substr</i> into this string's position <i>pos</i>.</li> <li> <i>string replace( int pos, int n, string str );</i> — replaces substring into the position <i>pos</i> and length <i>n</i> to the string <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> — replaces all the substrings <i>substr</i> to the string <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> — replaces substrings by the pattern <i>pat</i> to the string <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> — converts this string to a real number.</li> <li> <i>int toInt( int base = 0 );</i> — converts this string to an integer number in accordance with <i>base</i> (from 2 to 36). If the base is 0, then the prefix will be considered a prefix for determining the base (123-decimal; 0123-octal; 0x123-hex).</li> <li> <i>string {parse,parseEnd}( int pos, string sep = ".", int off = {0,{length}}, bool mergeSepSymb = false );</i> — gets a token with the number <i>pos</i> from the string when separated by <i>sep</i> and from the offset <i>off</i> (stopping on the next token begin, end for <i>parseEnd</i>). <i>mergeSepSymb</i> specifies of allowing of merging of the group of identical symbols to one separator. Result offset is returned back to <i>off</i>. <i>parseEnd()</i> does the same but from the end.</li> <li> <i>string parseLine( int pos, int off = 0 );</i> — gets a line with the number <i>pos</i> from the string and from the offset <i>off</i>. Result offset is returned back to <i>off</i> (stopping on the next token begin).</li> <li> <i>string parsePath( int pos, int offCmptbl = 0, int off = 0 );</i> — gets a path token with the number <i>pos</i> from the string and from the offset <i>off</i> (stopping on the next token begin) or <i>offCmtbl</i> (stopping on next symbol of the current token end — for compatibility). Result offset is returned back to <i>off</i> or <i>offCmptbl</i>.</li> <li> <i>string parsePathEnd( int pos, int off = {length} );</i> — gets a path token with the number <i>pos</i> from the string end and from the offset <i>off</i> (stopping on the next token end). Result offset is returned back to <i>off</i>.</li> <li> <i>string path2sep( string sep = "." );</i> — converts path into this string to separated by <i>sep</i> string.</li> <li> <i>string trim( string cfg = " \n\t\r" );</i> — trims the string at the begin and the end for the symbols <i>cfg</i>.</li></ul></dd></dl> <p><br /> </p> <h3><span class="mw-headline" id=".D0.9E.D0.B1.D1.8A.D0.B5.D0.BA.D1.82_.D0.BC.D0.B0.D1.81.D1.81.D0.B8.D0.B2.D0.B0_.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.D1.8A.D0.B5.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.D1.8B.D1.80.D0.B0.D0.B6.D0.B5.D0.BD.D0.B8.D1.8F_.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>As arguments for creating the object, a string with regular expression text and a flags box in the form of a character string is passed: </p> <ul><li> 'g' — global match mode, that is meant the request repeating for processing all expressions up to empty result array;</li> <li> 'i' — case insensitive match mode;</li> <li> 'm' — multi-line match mode;</li> <li> 'u' — compulsion for UTF-8 characters resolution, for other locales;</li> <li> 'p' — testing the expression by the usual template rule with the key characters: '?', '*' and '\'.</li></ul> <p>СвойÑтва объекта: </p> <ul><li> <i>source</i> — иÑходный шаблон регулÑрного выражениÑ, только чтение.</li> <li> <i>global</i> — признак глобального поиÑка, только чтение.</li> <li> <i>ignoreCase</i> — признак Ð¸Ð³Ð½Ð¾Ñ€Ð¸Ñ€Ð¾Ð²Ð°Ð½Ð¸Ñ Ñ€ÐµÐ³Ð¸Ñтра Ñимволов при поиÑке, только чтение.</li> <li> <i>multiline</i> — признак многоÑтрочного поиÑка, только чтение.</li> <li> <i>UTF8</i> — признак Ñ€Ð°Ð·Ñ€ÐµÑˆÐµÐ½Ð¸Ñ UTF-8 Ñимволов, только чтение.</li> <li> <i>lastIndex</i> — Ð¸Ð½Ð´ÐµÐºÑ Ñимвола за подÑтрокой поÑледнего поиÑка, иÑпользуетÑÑ Ð² глобальном режиме Ð´Ð»Ñ Ð¿Ñ€Ð¾Ð´Ð¾Ð»Ð¶ÐµÐ½Ð¸Ñ ÑканированиÑ, при Ñледующем вызове.</li></ul> <p>Функции объекта: </p> <ul> <li><i>Array exec(string val);</i> — вызывает поиÑк по Ñтроке <i>val</i>. Возвращает найденную подÑтроку (0) и Ð¿Ð¾Ð´Ð²Ñ‹Ñ€Ð°Ð¶ÐµÐ½Ð¸Ñ (>0) в маÑÑиве. УÑтанавливает атрибут маÑÑива "index" в позицию найденной подÑтроки. УÑтанавливает атрибут маÑÑива "input" в значение иÑходной Ñтроки. <div class="mw-highlight mw-content-ltr" dir="ltr"><pre><span class="kd">var</span> <span class="nx">re</span> <span class="o">=</span> <span class="k">new</span> <span class="nb">RegExp</span><span class="p">(</span><span class="s2">"(\\d\\d)[-/](\\d\\d)[-/](\\d\\d(?:\\d\\d)?)"</span><span class="p">,</span><span class="s2">""</span><span class="p">);</span> <span class="kd">var</span> <span class="nx">rez</span> <span class="o">=</span> <span class="nx">re</span><span class="p">.</span><span class="nx">exec</span><span class="p">(</span><span class="s2">"12/30/1969"</span><span class="p">);</span> <span class="kd">var</span> <span class="nx">month</span> <span class="o">=</span> <span class="nx">rez</span><span class="p">[</span><span class="mi">1</span><span class="p">];</span> <span class="kd">var</span> <span class="nx">day</span> <span class="o">=</span> <span class="nx">rez</span><span class="p">[</span><span class="mi">2</span><span class="p">];</span> <span class="kd">var</span> <span class="nx">year</span> <span class="o">=</span> <span class="nx">rez</span><span class="p">[</span><span class="mi">3</span><span class="p">];</span> </pre></div></li> <li><i>bool test(string val);</i> — возвращает "true" еÑли подÑтрока найдена в <i>val</i>. <div class="mw-highlight mw-content-ltr" dir="ltr"><pre><span class="kd">var</span> <span class="nx">re</span> <span class="o">=</span> <span class="k">new</span> <span class="nb">RegExp</span><span class="p">(</span><span class="s2">"(\\d\\d)[-/](\\d\\d)[-/](\\d\\d(?:\\d\\d)?)"</span><span class="p">,</span><span class="s2">""</span><span class="p">);</span> <span class="kd">var</span> <span class="nx">OK</span> <span class="o">=</span> <span class="nx">re</span><span class="p">.</span><span class="nx">test</span><span class="p">(</span><span class="s2">"12/30/1969"</span><span class="p">);</span> </pre></div></li> </ul> <h3><span class="mw-headline" id="XML_node-tag_object_.28XMLNodeObj.29"><span class="mw-headline-number">2.3</span> XML node-tag object (XMLNodeObj)</span></h3> <p>Functions: </p> <ul><li> <i>string name( )</i> — the name of the node, XML-tag.</li> <li> <i>string text( bool full = false )</i> — the text of the node, contents of the XML-tag. Set <i>full</i> for get the combined text of all included nodes.</li> <li> <i>string attr( string id )</i> — the value of the node attribute <i>id</i>.</li> <li> <i>XMLNodeObj setName( string vl )</i> — sets of the node name to <i>vl</i>. Returns the current node.</li> <li> <i>XMLNodeObj setText( string vl )</i> — sets of the node text to <i>vl</i>. Returns the current node.</li> <li> <i>XMLNodeObj setAttr( string id, string vl )</i> — sets the attribute <i>id</i> to the value <i>vl</i>. Returns the current node.</li> <li> <i>XMLNodeObj clear( bool full = false )</i> — clears the node for the childs, removes the text and attributes for <i>full</i>.</li> <li> <i>int childSize( )</i> — quantity of the included nodes.</li> <li> <i>XMLNodeObj childAdd( ElTp no = XMLNodeObj ); XMLNodeObj childAdd( string no )</i> — addition of the object <i>no</i> as the included one. <i>no</i> may be the direct object-result of the function "SYS.XMLNode()", and the string with the name of a new tag. Returns the included node.</li> <li> <i>XMLNodeObj childIns( int id, ElTp no = XMLNodeObj ); XMLNodeObj childIns( int id, string no )</i> — insert of the object <i>no</i> as the included one to the position <i>id</i>. <i>no</i> may be the direct object-result of the function "SYS.XMLNode()", and the string with the name of a new tag. Returns the embedded node.</li> <li> <i>XMLNodeObj childDel( int id )</i> — deletes the included node from the position <i>id</i>. Returns current node.</li> <li> <i>XMLNodeObj childGet( int id )</i> — gets the included node in the position <i>id</i>. Returns <b>0</b> at missing one.</li> <li> <i>XMLNodeObj childGet( string name, int num = 0 )</i> — gets the included node with the tag <i>name</i> and the position number <i>num</i>. Returns <b>0</b> at missing one.</li> <li> <i>XMLNodeObj parent( )</i> — gets the parent node. Returns <b>false</b> at missing one.</li> <li> <i>string load( string str, bool file = false, int flg = 0, string cp = "UTF-8" )</i> — loads the XML from the string <i>str</i> or from the file with the path in <i>str</i> if the <i>file</i> equal "true", with the source encoding <i>cp</i>. Returns a string with error in the format "<b>{errCod}:{errText}</b>", which is "0" for successful loading. Where <i>flg</i> — loading flags:</li></ul> <dl><dd><dl><dd>0x01 — full loading, with texts and comments blocks into special nodes;</dd> <dd>0x02 — does not remove spaces from the begin and end of the tag text.</dd></dl></dd></dl> <ul><li> <i>string save( int flg = 0, string path = "", string cp = "UTF-8" )</i> — saves the XML tree to the string or to the file <i>path</i> with the formatting flags <i>flg</i> and target encoding <i>cp</i>. Returns the XML text or the error code. The following formatting options <i>flg</i> are provided:</li></ul> <dl><dd><dl><dd>0x01 — end line before the opening tag;</dd> <dd>0x02 — end line after the opening tag;</dd> <dd>0x04 — end line after the closing tag;</dd> <dd>0x08 — end line after the text;</dd> <dd>0x10 — end line after the instruction;</dd> <dd>0x1E — end line after all ones;</dd> <dd>0x20 — inserts the standard XML-header;</dd> <dd>0x40 — inserts the standard XHTML-header;</dd> <dd>0x80 — cleans the service tags: <??>, <!-- -->;</dd> <dd>0x100 — does not encode the tag name;</dd> <dd>0x200 — does not encode the attribute;</dd> <dd>0x400 — shield the binary symbols [\x0-\x8\xB-\xC\x0E-\x1F] and wrong UTF-8.</dd></dl></dd></dl> <ul><li> <i>XMLNodeObj getElementBy( string val, string attr = "id" )</i> — gets an element from the tree by the attribute <i>attr</i> in value <i>val</i>.</li> <li> <i>TArrayObj<XMLNodeObj> getElementsBy( string tag, string attrVal = "", string attr = "id", int limit = 0, int from = 0 )</i> — gets an elements array from the tree by the <i>tag</i> (empty for all) and attribute <i>attr</i> in value <i>attrVal</i> (empty for pass), also starting the tag number <i>from</i> and limiting them number in <i>limit</i> (zero for no limit).</li></ul> <h2><span class="mw-headline" id="Program-system_.28SYS.29"><span class="mw-headline-number">3</span> <span id="SYS" title="#SYS">Program-system (SYS)</span></span></h2> <p>Object functions: </p> <ul> <li><i>{string|int} system( string cmd, bool noPipe = false );</i> — calls the console commands <i>cmd</i> of the OS returning the result by the channel. If <i>noPipe</i> is set then the callback code is returned and program can be started in the background ("sleep 5 &"). The function provides OpenSCADA with a wide range of capabilities by calling any system programs, utilities, and scripts, as well as by providing them with access to a huge amount of system data. For example the command "ls-l" returns the detailed content of the working directory.</li> <li><i>int fileSize( string file );</i> — returns the <i>file</i> size.</li> <li><i>string fileRead( string file, int off = 0, int sz = -1 );</i> — returns a string of part of the <i>file</i> for the offset <i>off</i> and the block size <i>sz</i>.</li> <li><i>int fileWrite( string file, string str, bool append = false );</i> — writes the string <i>str</i> to the <i>file</i>, removes presented one, at <i>append</i>. Returns the wrote bytes count.</li> <li><i>int fileRemove( string file );</i> — removes the <i>file</i>. Returns the removing result.</li> <li><i>int message( string cat, int level, string mess );</i> — forms of the system message <i>mess</i> with the category <i>cat</i>, level <i>level</i> (-7...7). The negative value of the level forms the alarms.</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> — forms of the system message <i>mess</i> with the category <i>cat</i> and the appropriate level by the name.</li> <li><i>XMLNodeObj XMLNode( string name = "" );</i> — creates of the XML node object with the <i>name</i>.</li> <li><i>string cntrReq( XMLNodeObj req, string stat = "" );</i> — sends a request <i>req</i> in XML view to the <a href="../en/API.html#CntrNode" title="Special:MyLanguage/Documents/API">Control Interface</a> of the program. Returns a string with error in the format "<b>{errCod}:{errText}</b>", which is "0" for successful. A request is generally written in the form <b><get path="/OPath/%2felem" /></b> and with additional attributes specific to the particular request. If the station <i>stat</i> is specified into the request then the request will be sent to this external station. The address for the attribute "path" you can obtain into the OpenSCADA configurator, that is into the status line where the address appear at the mouse cursor point to a field of configuration or information. Some examples of common requests, more examples in <a href="../en/API.html#CntrNode" title="Special:MyLanguage/Documents/API">description the Control Interface</a> and <a href="Libs_Service_procedures.html#releaseTests" title="Special:MyLanguage/Libs/Service procedures">releaseTests()</a>: <ul> <li>Reading a value of the element (the user name "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>Writing a value to the element (the user name "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>Adding a new node (the user "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>Deleting a node (the user "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>Saving the node changes to DB (the user "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>Loading the node from DB (the user "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> — returns the system language in two symbols and the full language in <i>full</i>.</li> <li><i>int sleep( real tm, int ntm = 0 );</i> — puts the execution thread to sleep on the <i>tm</i> seconds (precised up to nanoseconds) and <i>ntm</i> nanoseconds. The sleeping time you can set up to STD_INTERF_TM (5 seconds).</li> <li><i>int time( int usec );</i> — returns the absolute time in seconds from the epoch of 1/1/1970 and the microseconds part into <i>usec</i> if specified.</li> <li><i>int utime( ); int mtime( );</i> — returns the absolute time in microseconds and milliseconds from the epoch of 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> — returns the full date in seconds (sec), minutes (min), hours (hour), days of the month (mday), months (month), years (year), days in the week (wday), days in the year (yday) and sign of the summer time (isdst), based on the absolute time in seconds <i>fullsec</i> from the epoch 1/1/1970. <i>gmtime</i> returns time in 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> — forms the time since Epoch 1/1/1970 from separated seconds, minutes, hours, days, month etc. The values for separated time items can be set out from this typical range, which allows you to use this function during checking, and as a result, units of time will be fixed and rotated in the normal range. <i>timegm</i> runs in time at GMT(UTC).</li> <li><i>string {strftime|strftimegm}( int sec, string form = "%Y-%m-%d %H:%M:%S" );</i> — converts an absolute time <i>sec</i> to the string of the desired format <i>form</i>. Record of the format corresponds to the POSIX-function <i>strftime</i>. <i>strftimegm</i> returns time into GMT(UTC).</li> <li><i>int {strptime|strptimegm}( string str, string form = "%Y-%m-%d %H:%M:%S" );</i> — returns the time in seconds from the epoch of 1/1/1970, based on the string record of time <i>str</i>, in accordance with the specified template <i>form</i>. For example the template "%Y-%m-%d %H:%M:%S" corresponds with the time "2006-08-08 11:21:55". Description of the template format can be obtained from the documentation on POSIX-function <i>strptime</i>. <i>strptimegm</i> works into GMT(UTC) time.</li> <li><i><span id="CRON" title="#CRON">int cron( string cronreq, int base = 0 );</span></i> — returns the time, planned in the format of the standard CRON, <i>cronreq</i>, beginning from the basic time <i>base</i> or current, if the basic is not specified. CRON is the standard form "* * * * *". <dl><dt> Where items by the order</dt> <dd /></dl> <ul><li> minutes (0-59);</li> <li> hours (0-23);</li> <li> days (1-31);</li> <li> month (1-12);</li> <li> week day (0[Sunday]-6).</li></ul> <dl><dt> Where the item variants</dt> <dd /></dl> <ul><li> "*" — any value;</li> <li> "1,2,3" — list of the allowed values;</li> <li> "1-5" — raw range of the allowed values;</li> <li> "*/2" — divider to the all allowed values range.</li></ul> <dl><dt> Examples</dt> <dd /></dl> <ul><li> "* * * * *" — each minute;</li> <li> "10 23 * * *" — only at 23 hour and 10 minute for any day and month;</li> <li> "*/2 * * * *" — for minutes: 0,2,4,...,56,58;</li> <li> "* 2-4 * * *" — for any minutes in hours from 2 to 4(include).</li></ul> </li> <li><i>string time2str( real tm, bool inParts = true );</i> — Converts the time interval <i>tm</i> in seconds to human string like "1hour 23minutes 10s" at setting <i>inParts</i> or "1.5 hour" else.</li> <li><i>string cpct2str( real cnt );</i> — Converts the capacity <i>cnt</i> in bytes to the human representing string.</li> <li><i>string str2time( string val, bool inParts = true );</i> — Converts the human representing relative time <i>val</i> of the function <i>time2str()</i> to the time in seconds, with parsing parts at setting <i>inParts</i>.</li> <li><i>string strFromCharCode( int char1, int char2, int char3, ... );</i> — creates a string from symbol codes <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> — creates a string from UTF symbols <i>char1</i>, <i>char2</i> ... <i>charN</i>. These types of the symbol are supported: 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> — transcodes the text <i>src</i> from the encoding <i>fromCP</i> to <i>toCP</i>. If the encoding is omitted (empty string), it is used the internal one.</li> <li><i>string strEncode( string src, string tp = "Bin", string opt = "" );</i> — encodes the string <i>src</i> by the rule <i>tp</i> and the option <i>opt</i>. Allowed rules: <dl><dd>"PathEl" — symbols <b>[/%]</b> to "%2f" and "%25", respectively;</dd> <dd>"HttpURL" — symbols <b>[ \t%]</b> and "> 0x80" to "%20", "%09", "%25" and etc.;</dd> <dd>"HTML" — symbols of the HTML-entities <b>[><"&']</b> to "&gt;", "&lt;", "&quot;" and etc.;</dd> <dd>"JavaScript" — symbol '\n' shielding to "\\n";</dd> <dd>"SQL" — shielding of the symbols <b>['"`\]</b> by appending '\' or doubling of the listed symbols into <i>opt</i>;</dd> <dd>"Custom" — symbols into <i>opt</i> to the view "%NN";</dd> <dd>"Base64" — same Base 64 binary encoding, into <i>opt</i> sets a line termination symbol(s) after 57 symbols;</dd> <dd>"FormatPrint" — symbol '%' to "%%";</dd> <dd>"OscdID" — almost all symbols like <b>[ /\&(]</b> to '_';</dd> <dd>"Bin" — ASCII bytes list ("XX XX XX XX ...") to the binary represent;</dd> <dd>"Reverse" — reversion the sequence;</dd> <dd>"ToLower" — symbols to the lower register;</dd> <dd>"Limit" — limiting the string to the length into <i>opt</i>, counting UTF-8 variable length;</dd> <dd>"ShieldSymb" — shielding symbols from <i>opt</i> (by default ['"`]) with the slash symbol "\" like to '\n', '\r', ..., '\0NNN';</dd> <dd>"ShieldBin" — shielding all binary symbols [\x0-\x8\xB-\xC\x0E-\x1F] with the slash symbol "\".</dd></dl> </li> <li><i>string strDecode( string src, string tp = "Bin", string opt = "" );</i> — decodes the string <i>src</i> by the rule <i>tp</i> and the option <i>opt</i>. Allowed rules: <dl><dd>"PathEl", "HttpURL", "Custom" — symbols like "%NN" to the binary represent;</dd> <dd>"Base64" — same from Base 64;</dd> <dd>"Bin" — the binary string to ASCII bytes ("XX XX XX XX .. A.b.c.."), <i>opt</i> points to the separator or "<text>" for enable the offset to the left and the text part to the right;</dd> <dd>"ShieldSymb" — shielded symbols like to '\n', '\r', ..., '\0NNN', '\xNN' to the binary represent.</dd></dl> </li></ul> <h2><span class="mw-headline" id="Any_object_.28TCntrNode.29_of_OpenSCADA_objects_tree_.28SYS..2A.29"><span class="mw-headline-number">4</span> <span id="TCntrNode" title="#TCntrNode">Any object (TCntrNode) of OpenSCADA objects tree (SYS.*)</span></span></h2> <p>Object functions: </p> <ul><li> <i>PropTp property(string id, PropTp val = NULL);</i> — Returns of the object's property <i>id</i> for the group <i>grp</i> with setting its at <i>val</i> non NULL and EVAL. Where <i>val</i> in EVAL is clearing the property and NULL (no the argument) just sets nothing. You can <a href="#Object">access directly</a> the properties for the TCntrNode objects, of course at their absency in the Object Model.</li> <li> <i>TArrayObj nodeList( string grp = "", string path = "" );</i> — Get child nodes full identifiers list for group <i>grp</i> and node from path <i>path</i>. If <i>grp</i> empty then return nodes for all groups. The full identifier is "{grp}{nID}".</li> <li> <i>TCntrNodeObj nodeAt( string path, string sep="" );</i> — Attach to node <i>path</i> into OpenSCADA objects tree. If a separator set into <i>sep</i> then path process as separated string. For missing and invalid nodes the function will return "false" when a correct node in it conversion to BOOLEAN will return "true".</li> <li> <i>TCntrNodeObj nodePrev( );</i> — Get previous, parent, node.</li> <li> <i>string nodePath( string sep = "", bool from_root = true );</i> — Getting the path of the current node in the object tree OpenSCADA. One separator character is specified in <i>sep</i> to get the path through the separator, for example, "DAQ.ModBus.PLC1.P1.var", otherwise "/DAQ/ModBus/PLC1/P1/var". <i>from_root</i> indicates a need to form a path from the root, and without the Station ID.</li> <li> <i>int messSys( int level, string mess )</i> — Formation of the system message <i>mess</i> with the <i>level</i> with the node path as a category and with the human readable path before the message.</li></ul> <h2><span class="mw-headline" id="Subsystem_.22Security.22_.28SYS.Security.29"><span class="mw-headline-number">5</span> Subsystem "Security" (SYS.Security)</span></h2> <p>Functions of the subsystem object (SYS.Security): </p> <ul><li> <i>int access( string user, int mode, string owner, string group, int perm )</i> — checking for access of the <i>user</i> to resource which owned by the <i>owner</i> and <i>group</i> and for the <i>perm</i> and <i>mode</i>:</li></ul> <dl><dd><dl><dd><i>user</i> — user of the access checking;</dd> <dd><i>mode</i> — access mode (4-R, 2-W, 1-X);</dd> <dd><i>owner</i> — owner of the resource;</dd> <dd><i>group</i> — group of the resource;</dd> <dd><i>perm</i> — permition of the resource (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.D0.BE.D0.B4.D1.81.D0.B8.D1.81.D1.82.D0.B5.D0.BC.D0.B0_.22.D0.91.D0.94.22_.28SYS.BD.29"><span class="mw-headline-number">6</span> <span id="SYS.BD" title="#SYS.BD">ПодÑиÑтема "БД" (SYS.BD)</span></span></h2> <p>Функции объекта "БД" (SYS.BD["TypeDB"]["DB"]): </p> <ul> <li><i>ElTp cfg(string nm)</i> — получает значение конфигурационного Ð¿Ð¾Ð»Ñ <i>nm</i> объекта.</li> <li><i>bool cfgSet(string nm, ElTp val)</i> [<span style="color:red">доÑтуп к ÑоответÑтвующей подÑиÑтеме</span>] — уÑтанавливает конфигурационное Ð¿Ð¾Ð»Ñ <i>nm</i> объекта в значение <i>val</i>.</li> <li><i>Array SQLReq( string req, bool tr = EVAL );</i> — оÑущеÑтвлÑет SQL-Ð·Ð°Ð¿Ñ€Ð¾Ñ <i>req</i> к БД, внутри (<i>tr</i>=true), вне (<i>tr</i>=false) или безразлично (<i>tr</i>=EVAL) к транзакции. Возвращает маÑÑив Ñтрок таблицы результата Ñ Ð¿Ð¾Ð»Ñми по индекÑам и по именам колонок. Ð’ Ñлучае ошибки её значение помещаетÑÑ Ð² ÑвойÑтво "err" результата. <div class="mw-highlight mw-content-ltr" dir="ltr"><pre><span class="nx">DBTbl</span> <span class="o">=</span> <span class="nx">SYS</span><span class="p">.</span><span class="nx">BD</span><span class="p">.</span><span class="nx">MySQL</span><span class="p">.</span><span class="nx">GenDB</span><span class="p">.</span><span class="nx">SQLReq</span><span class="p">(</span><span class="s2">"SELECT * from DB;"</span><span class="p">);</span> <span class="k">if</span><span class="p">(</span><span class="nx">DBTbl</span><span class="p">.</span><span class="nx">err</span><span class="p">.</span><span class="nx">length</span><span class="p">)</span> <span class="nx">SYS</span><span class="p">.</span><span class="nx">messInfo</span><span class="p">(</span><span class="s2">"TEST DB"</span><span class="p">,</span><span class="s2">"Error: "</span><span class="o">+</span><span class="nx">DBTbl</span><span class="p">.</span><span class="nx">err</span><span class="p">);</span> <span class="k">else</span> <span class="k">for</span><span class="p">(</span><span class="kd">var</span> <span class="nx">iRw</span> <span class="o">=</span> <span class="mi">0</span><span class="p">;</span> <span class="nx">iRw</span> <span class="o"><</span> <span class="nx">DBTbl</span><span class="p">.</span><span class="nx">length</span><span class="p">;</span> <span class="nx">iRw</span><span class="o">++</span><span class="p">)</span> <span class="p">{</span> <span class="kd">var</span> <span class="nx">rec</span> <span class="o">=</span> <span class="s2">""</span><span class="p">;</span> <span class="k">for</span><span class="p">(</span><span class="kd">var</span> <span class="nx">iFld</span> <span class="o">=</span> <span class="mi">0</span><span class="p">;</span> <span class="nx">iFld</span> <span class="o"><</span> <span class="nx">DBTbl</span><span class="p">[</span><span class="nx">iRw</span><span class="p">].</span><span class="nx">length</span><span class="p">;</span> <span class="nx">iFld</span><span class="o">++</span><span class="p">)</span> <span class="nx">rec</span> <span class="o">+=</span> <span class="nx">DBTbl</span><span class="p">[</span><span class="nx">iRw</span><span class="p">][</span><span class="nx">iFld</span><span class="p">]</span> <span class="o">+</span> <span class="s2">"\t"</span><span class="p">;</span> <span class="nx">SYS</span><span class="p">.</span><span class="nx">messInfo</span><span class="p">(</span><span class="s2">"TEST DB"</span><span class="p">,</span> <span class="s2">"Row "</span><span class="o">+</span><span class="nx">iRw</span><span class="o">+</span><span class="s2">": "</span><span class="o">+</span><span class="nx">rec</span><span class="p">);</span> <span class="c1">//Get column value by the name</span> <span class="k">if</span><span class="p">(</span><span class="nx">iRw</span><span class="p">)</span> <span class="nx">SYS</span><span class="p">.</span><span class="nx">messInfo</span><span class="p">(</span><span class="s2">"TEST DB"</span><span class="p">,</span> <span class="s2">"Row "</span><span class="o">+</span><span class="nx">iRw</span><span class="o">+</span><span class="s2">": 'NAME'"</span><span class="o">+</span><span class="nx">DBTbl</span><span class="p">[</span><span class="nx">iRw</span><span class="p">][</span><span class="s2">"NAME"</span><span class="p">]);</span> <span class="p">}</span> </pre></div></li> </ul> <p>Функции объекта "Таблица" (SYS.BD["TypeDB"]["DB"]["Table"]): </p> <ul> <li><i>XMLNodeObj fieldStruct( );</i> — получает Ñтруктуру таблицы в виде XML узла "field" Ñ Ð´Ð¾Ñ‡ÐµÑ€Ð½Ð¸Ð¼Ð¸ узлами-колонками <b><RowId type="real" len="10.2" key="1" def="Default value">{Value}</RowId></b>, где:<ul> <li>{RowId} — идентификатор колонки;</li> <li>{Value} — значение колонки;</li> <li>type — тип Ð·Ð½Ð°Ñ‡ÐµÐ½Ð¸Ñ ÐºÐ¾Ð»Ð¾Ð½ÐºÐ¸: <i>str</i> — Ñтрока, <i>int</i> — целое, <i>real</i> — вещеÑтвенное и <i>bool</i> — логичеÑкое;</li> <li>len — размер Ð·Ð½Ð°Ñ‡ÐµÐ½Ð¸Ñ ÐºÐ¾Ð»Ð¾Ð½ÐºÐ¸, в знаках;</li> <li>key — признак того, что колонка ÑвлÑетÑÑ ÐºÐ»ÑŽÑ‡Ð¾Ð¼, и поиÑк оÑущеÑтвлÑетÑÑ Ð¿Ð¾ его значению;</li> <li>def — значение колонки по умолчанию.</li> </ul></li> <li><i>string fieldSeek( int row, XMLNodeObj fld );</i> — запрашивает поле <i>row</i> таблицы. ЕÑли поле получено то возвращаетÑÑ "1" иначе "0". Ð’ Ñлучае ошибки возвращаетÑÑ "0:Error".</li> <li><i>string fieldGet( XMLNodeObj fld );</i> — запрашивает значение полÑ. Ð’ Ñлучае ошибки возвращаетÑÑ "0:Error". <div class="mw-highlight mw-content-ltr" dir="ltr"><pre><span class="nx">req</span> <span class="o">=</span> <span class="nx">SYS</span><span class="p">.</span><span class="nx">XMLNode</span><span class="p">(</span><span class="s2">"field"</span><span class="p">);</span> <span class="nx">req</span><span class="p">.</span><span class="nx">childAdd</span><span class="p">(</span><span class="s2">"user"</span><span class="p">).</span><span class="nx">setAttr</span><span class="p">(</span><span class="s2">"type"</span><span class="p">,</span><span class="s2">"str"</span><span class="p">).</span><span class="nx">setAttr</span><span class="p">(</span><span class="s2">"key"</span><span class="p">,</span><span class="s2">"1"</span><span class="p">).</span><span class="nx">setText</span><span class="p">(</span><span class="s2">"root"</span><span class="p">);</span> <span class="nx">req</span><span class="p">.</span><span class="nx">childAdd</span><span class="p">(</span><span class="s2">"id"</span><span class="p">).</span><span class="nx">setAttr</span><span class="p">(</span><span class="s2">"type"</span><span class="p">,</span><span class="s2">"str"</span><span class="p">).</span><span class="nx">setAttr</span><span class="p">(</span><span class="s2">"key"</span><span class="p">,</span><span class="s2">"1"</span><span class="p">).</span><span class="nx">setText</span><span class="p">(</span><span class="s2">"/Lang2CodeBase"</span><span class="p">);</span> <span class="nx">req</span><span class="p">.</span><span class="nx">childAdd</span><span class="p">(</span><span class="s2">"val"</span><span class="p">).</span><span class="nx">setAttr</span><span class="p">(</span><span class="s2">"type"</span><span class="p">,</span><span class="s2">"str"</span><span class="p">);</span> <span class="nx">SYS</span><span class="p">.</span><span class="nx">BD</span><span class="p">.</span><span class="nx">MySQL</span><span class="p">.</span><span class="nx">GenDB</span><span class="p">.</span><span class="nx">SYS</span><span class="p">.</span><span class="nx">fieldGet</span><span class="p">(</span><span class="nx">req</span><span class="p">);</span> <span class="nx">SYS</span><span class="p">.</span><span class="nx">messDebug</span><span class="p">(</span><span class="s2">"TEST DB"</span><span class="p">,</span><span class="s2">"Value: "</span><span class="o">+</span><span class="nx">req</span><span class="p">.</span><span class="nx">childGet</span><span class="p">(</span><span class="mi">2</span><span class="p">).</span><span class="nx">text</span><span class="p">());</span> </pre></div></li> <li><i>string fieldSet( XMLNodeObj fld );</i> — уÑтанавливает поле. Ð’ Ñлучае ошибки возвращаетÑÑ "0:Error".</li> <li><i>string fieldDel(XMLNodeObj fld);</i> — удалÑет поле. Ð’ Ñлучае ошибки возвращаетÑÑ "0:Error".</li> </ul> <h2><span class="mw-headline" id=".D0.9F.D0.BE.D0.B4.D1.81.D0.B8.D1.81.D1.82.D0.B5.D0.BC.D0.B0_.22.D0.A1.D0.B1.D0.BE.D1.80_.D0.B4.D0.B0.D0.BD.D0.BD.D1.8B.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="../en/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>CntrId</i> — идентификатор объекта контроллера;</li> <li> <i>PrmId</i> — идентификатор параметра, из аргумента <i>prm</i>;</li> <li> <i>CntrNm</i> — название объекта контроллера;</li> <li> <i>cat</i> — Ð´Ð¾Ð¿Ð¾Ð»Ð½Ð¸Ñ‚ÐµÐ»ÑŒÐ½Ð°Ñ Ð¸Ð½Ñ„Ð¾Ñ€Ð¼Ð°Ñ†Ð¸Ñ ÐºÐ°Ñ‚ÐµÐ³Ð¾Ñ€Ð¸Ð¸ которую определено Ð´Ð»Ñ Ñ‚Ð¸Ð¿Ð° <i>type2Code</i>.</li></ul></li> <li> <i>bool alarmSet( string mess, int lev = -5, string prm = "", bool force = false )</i> — уÑтанавливает/Ñнимает нарушение <i>mess</i> Ñ ÑƒÑ€Ð¾Ð²Ð½ÐµÐ¼ <i>lev</i> (отрицательный Ð´Ð»Ñ ÑƒÑтановки иначе ÑнÑтие), Ð´Ð»Ñ Ð¿Ð°Ñ€Ð°Ð¼ÐµÑ‚Ñ€Ð° <i>prm</i> (<b>{PrmId}\n{PrmNm}</b>). ОчиÑтка нарушений, как и уÑтановка, работает в режиме переключателÑ, что предуÑматривает пропуÑк Ñообщений очиÑтки в буфер Ñообщений, и Ñаму очиÑтку, только при наличии ÑоответÑтвующего нарушениÑ, что может быть отключено уÑтановкой <i>force</i>. Ð¤ÑƒÐ½ÐºÑ†Ð¸Ñ Ñ„Ð¾Ñ€Ð¼Ð¸Ñ€ÑƒÐµÑ‚ нарушение Ñ ÐºÐ°Ñ‚ÐµÐ³Ð¾Ñ€Ð¸ÐµÐ¹ <b>al{ModId}:{CntrId}[.{PrmId}]</b> и текÑтом <b>{CntrNm} > {PrmNm}: {MessText}</b>, где: <ul><li> <i>ModId</i> — идентификатор модулÑ;</li> <li> <i>CntrId</i> — идентификатор объекта контроллера;</li> <li> <i>PrmId</i> — идентификатор параметра, из аргумента <i>prm</i>;</li> <li> <i>CntrNm</i> — название объекта контроллера;</li> <li> <i>PrmNm</i> — название параметра, из аргумента <i>prm</i>;</li> <li> <i>MessText</i> — текÑÑ‚ ÑообщениÑ.</li></ul></li> <li> <i>bool enable( bool newSt = EVAL )</i> — получает ÑоÑтоÑние "Включен" или изменÑет его назначением атрибута <i>newSt</i>.</li> <li> <i>bool start( bool newSt = EVAL )</i> — получает ÑоÑтоÑние "ИмполнÑетÑÑ" или изменÑет его назначением атрибута <i>newSt</i>.</li></ul> <p>Функции объекта параметра контроллера (SYS.DAQ["Modul"]["Controller"]["Parameter"]): </p> <ul><li> <i>ElTp cfg( string nm )</i> — получает значение конфигурационного Ð¿Ð¾Ð»Ñ <i>nm</i> объекта.</li> <li> <i>bool cfgSet( string nm, ElTp val )</i> [<span style="color:red">доÑтуп к ÑоответÑтвующей подÑиÑтеме</span>] — уÑтанавливает конфигурационное Ð¿Ð¾Ð»Ñ <i>nm</i> объекта в значение <i>val</i>.</li> <li> <i>TCntrNodeObj cntr( )</i> — возвращает объект контроллера Ñтого параметра, незавиÑимо от вложенноÑти.</li> <li> <i>bool messSet( string mess, int lev, string type2Code = "OP", string cat = "")</i> — уÑтанавливает Ñообщение иÑточника данных <i>mess</i> Ñ ÑƒÑ€Ð¾Ð²Ð½ÐµÐ¼ <i>lev</i>, Ð´Ð»Ñ Ð¿Ð°Ñ€Ð°Ð¼ÐµÑ‚Ñ€Ð°.</li> <li> <i>bool alarmSet( string mess, int lev = -5, bool force = false )</i> — уÑтанавливает/Ñнимает нарушение <i>mess</i> Ñ ÑƒÑ€Ð¾Ð²Ð½ÐµÐ¼ <i>lev</i> (отрицательный Ð´Ð»Ñ ÑƒÑтановки иначе ÑнÑтие) Ð´Ð»Ñ Ñтого параметра. ОчиÑтка нарушений, как и уÑтановка, работает в режиме переключателÑ, что предуÑматривает пропуÑк Ñообщений очиÑтки в буфер Ñообщений, и Ñаму очиÑтку, только при наличии ÑоответÑтвующего нарушениÑ, что может быть отключено уÑтановкой <i>force</i>.</li></ul> <p>Функции объекта атрибута параметра контроллера (SYS.DAQ["Modul"]["Controller"]["Parameter"]["Attribute"]): </p> <ul><li> <i>ElTp get( int tm = 0, int utm = 0, bool sys = false )</i> — запрашивает значение атрибута на Ð²Ñ€ÐµÐ¼Ñ <i>tm.utm</i> и признаком ÑиÑтемного доÑтупа <i>sys</i>. Ðтрибуты времени <i>tm.utm</i> ÑвлÑÑŽÑ‚ÑÑ Ñ‚Ð°ÐºÐ¶Ðµ выходами, ÑоответÑтвенно реальное Ð²Ñ€ÐµÐ¼Ñ Ð¿Ð¾Ð»ÑƒÑ‡ÐµÐ½Ð½Ð¾Ð³Ð¾ Ð·Ð½Ð°Ñ‡ÐµÐ½Ð¸Ñ Ð¿Ð¾Ð¼ÐµÑ‰Ð°ÐµÑ‚ÑÑ Ð² них, еÑли Ñто переменные.</li> <li> <i>bool set( ElTp val, int tm = 0, int utm = 0, bool sys = false )</i> — запиÑывает значение <i>val</i> в атрибут Ñ Ð¼ÐµÑ‚ÐºÐ¾Ð¹ времени <i>tm:utm</i> и признаком ÑиÑтемного доÑтупа <i>sys</i>.</li> <li> <i>TCntrNodeObj arch( )</i> — получает объект архива, ÑвÑзанный Ñ Ñтим атрибутом. Ð’ Ñлучае отÑутÑÑ‚Ð²Ð¸Ñ ÑвÑзанного архива возвращаетÑÑ "false".</li> <li> <i>string descr( )</i> — опиÑание атрибута.</li> <li> <i>int time( int utm )</i> — Ð²Ñ€ÐµÐ¼Ñ Ð¿Ð¾Ñледнего Ð·Ð½Ð°Ñ‡ÐµÐ½Ð¸Ñ Ð² Ñекундах и микроÑекундах в <i>utm</i>, еÑли указан и ÑвлÑетÑÑ Ð¿ÐµÑ€ÐµÐ¼ÐµÐ½Ð½Ð¾Ð¹.</li> <li> <i>int len( )</i> — длина Ð¿Ð¾Ð»Ñ Ð² БД.</li> <li> <i>int dec( )</i> — разрешение вещеÑтвенного чиÑла Ð¿Ð¾Ð»Ñ Ð² БД.</li> <li> <i>int flg( )</i> — флаги полÑ.</li> <li> <i>string def( )</i> — значение по умолчанию.</li> <li> <i>string values( )</i> — ÑпиÑок допуÑтимых значений или диапазон.</li> <li> <i>string selNames( )</i> — ÑпиÑок имён допуÑтимых значений.</li> <li> <i>string reserve( )</i> — резервное ÑвойÑтво значениÑ.</li></ul> <p>Функции объекта библиотеки шаблона (SYS.DAQ[tmplb_Lib"]) и шаблона (SYS.DAQ[tmplb_Lib"]["Tmpl"]) параметра контроллера: </p> <ul><li> <i>ElTp cfg( string nm )</i> — получает значение конфигурационного Ð¿Ð¾Ð»Ñ <i>nm</i> объекта.</li> <li> <i>bool cfgSet( string nm, ElTp val )</i> [<span style="color:red">доÑтуп к ÑоответÑтвующей подÑиÑтеме</span>] — уÑтанавливает конфигурационное Ð¿Ð¾Ð»Ñ <i>nm</i> объекта в значение <i>val</i>.</li></ul> <h3><span class="mw-headline" id=".D0.9C.D0.BE.D0.B4.D1.83.D0.BB.D1.8C_DAQ.JavaLikeCalc"><span class="mw-headline-number">7.1</span> Модуль <a href="Modules/JavaLikeCalc.html" title="Special:MyLanguage/Modules/JavaLikeCalc">DAQ.JavaLikeCalc</a></span></h3> <div class="floatright"><a class="image" href="http://oscada.org/wiki/File:Oscada_UserOM_JavaLikeCalc_ru.png" title="ÐžÐ±ÑŠÐµÐºÑ‚Ð½Ð°Ñ Ð¼Ð¾Ð´ÐµÐ»ÑŒ Ð¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ñ‚ÐµÐ»Ñ Ð¼Ð¾Ð´ÑƒÐ»Ñ JavaLikeCalc."><img alt="ÐžÐ±ÑŠÐµÐºÑ‚Ð½Ð°Ñ Ð¼Ð¾Ð´ÐµÐ»ÑŒ Ð¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ñ‚ÐµÐ»Ñ Ð¼Ð¾Ð´ÑƒÐ»Ñ JavaLikeCalc." height="214" src="files/Oscada_UserOM_JavaLikeCalc_ru.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_ru.png" title="ÐžÐ±ÑŠÐµÐºÑ‚Ð½Ð°Ñ Ð¼Ð¾Ð´ÐµÐ»ÑŒ Ð¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ñ‚ÐµÐ»Ñ Ð¼Ð¾Ð´ÑƒÐ»Ñ BlockCalc."><img alt="ÐžÐ±ÑŠÐµÐºÑ‚Ð½Ð°Ñ Ð¼Ð¾Ð´ÐµÐ»ÑŒ Ð¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ñ‚ÐµÐ»Ñ Ð¼Ð¾Ð´ÑƒÐ»Ñ BlockCalc." height="214" src="files/Oscada_UserOM_BlockCalc_ru.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_ru.png" title="ÐžÐ±ÑŠÐµÐºÑ‚Ð½Ð°Ñ Ð¼Ð¾Ð´ÐµÐ»ÑŒ Ð¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ñ‚ÐµÐ»Ñ Ð¼Ð¾Ð´ÑƒÐ»Ñ ModBus."><img alt="ÐžÐ±ÑŠÐµÐºÑ‚Ð½Ð°Ñ Ð¼Ð¾Ð´ÐµÐ»ÑŒ Ð¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ñ‚ÐµÐ»Ñ Ð¼Ð¾Ð´ÑƒÐ»Ñ ModBus." height="213" src="files/Oscada_UserOM_ModBus_ru.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.D0.BE.D0.B4.D1.81.D0.B8.D1.81.D1.82.D0.B5.D0.BC.D0.B0_.22.D0.90.D1.80.D1.85.D0.B8.D0.B2.D1.8B-.D0.98.D1.81.D1.82.D0.BE.D1.80.D0.B8.D1.8F.22_.28SYS.Archive.29"><span class="mw-headline-number">8</span> <span id="SYS.Archive" title="#SYS.Archive">ПодÑиÑтема "Ðрхивы-ИÑториÑ" (SYS.Archive)</span></span></h2> <p>Функции объекта подÑиÑтемы: </p> <ul><li> <i>Array messGet( int btm, int etm, string cat = "", int lev = 0, string arch = "", int upTm = 0 );</i> — запрашивает ÑÐ¾Ð¾Ð±Ñ‰ÐµÐ½Ð¸Ñ Ð¿Ñ€Ð¾Ð³Ñ€Ð°Ð¼Ð¼Ñ‹ или Ð½Ð°Ñ€ÑƒÑˆÐµÐ½Ð¸Ñ (lev < 0) за Ð²Ñ€ÐµÐ¼Ñ Ð¾Ñ‚ <i>btm</i> до <i>etm</i> Ð´Ð»Ñ ÐºÐ°Ñ‚ÐµÐ³Ð¾Ñ€Ð¸Ð¸ <i>cat</i>, ÑƒÑ€Ð¾Ð²Ð½Ñ <i>lev</i> (-7...7) и архиваторов <i>arch</i> (разделены Ñимволом ';'; "" — буфер и архиваторы; "<buffer>" — буфер; "{ArhMod}.{Arh}" — конкретный архиватор модулÑ). <i>upTm</i> уÑтанавливает ограничение продолжительноÑти операции в указанное времÑ; отрицательное значение иÑпользуетÑÑ ÐºÐ°Ðº отноÑительное времÑ; менее чем STD_INTERF_TM (5). ВозвращаетÑÑ Ð²Ñ€ÐµÐ¼Ñ Ð¾Ñтанова Ñ‡Ñ‚ÐµÐ½Ð¸Ñ (атрибут "tm" маÑÑива) и маÑÑив объектов Ñообщений/нарушений Ñо ÑвойÑтвами: <ul><li> <i>tm</i> — Ð²Ñ€ÐµÐ¼Ñ ÑообщениÑ, Ñекунды;</li> <li> <i>utm</i> — Ð²Ñ€ÐµÐ¼Ñ ÑообщениÑ, микроÑекунды;</li> <li> <i>categ</i> — ÐºÐ°Ñ‚ÐµÐ³Ð¾Ñ€Ð¸Ñ ÑообщениÑ;</li> <li> <i>level</i> — уровень ÑообщениÑ;</li> <li> <i>mess</i> — текÑÑ‚ ÑообщениÑ.</li></ul></li> <li> <i>bool messPut( int tm, int utm, string cat, int lev, string mess, string arch = "" );</i> — запиÑывает Ñообщение <i>mess</i> Ñ ÐºÐ°Ñ‚ÐµÐ³Ð¾Ñ€Ð¸ÐµÐ¹ <i>cat</i>, уровнем <i>lev</i> (-7...7) и временем <i>tm.utm</i> в архиваторы <i>arch</i> (разделены Ñимволом ';') и/или ÑпиÑок нарушений.</li></ul> <p>Функции объекта архиватора Ñообщений (SYS.Archive["mod_Modul"]["mess_Archivator"]): </p> <ul><li> <i>ElTp cfg( string nm )</i> — получает значение конфигурационного Ð¿Ð¾Ð»Ñ <i>nm</i> объекта.</li> <li> <i>bool cfgSet( string nm, ElTp val )</i> [<span style="color:red">доÑтуп к ÑоответÑтвующей подÑиÑтеме</span>] — уÑтанавливает конфигурационное Ð¿Ð¾Ð»Ñ <i>nm</i> объекта в значение <i>val</i>.</li> <li> <i>bool status( )</i> — ÑÑ‚Ð°Ñ‚ÑƒÑ Ð°Ñ€Ñ…Ð¸Ð²Ð°Ñ‚Ð¾Ñ€Ð° "ИÑполнение".</li> <li> <i>int end( )</i> — Ð²Ñ€ÐµÐ¼Ñ Ð¾ÐºÐ¾Ð½Ñ‡Ð°Ð½Ð¸Ñ Ð´Ð°Ð½Ð½Ñ‹Ñ… архиватора.</li> <li> <i>int begin( )</i> — Ð²Ñ€ÐµÐ¼Ñ Ð½Ð°Ñ‡Ð°Ð»Ð° данных архиватора.</li></ul> <p>Функции объекта архиватора значений (SYS.Archive["val_Modul"]["val_Archivator"]): </p> <ul><li> <i>ElTp cfg( string nm )</i> — получает значение конфигурационного Ð¿Ð¾Ð»Ñ <i>nm</i> объекта.</li> <li> <i>bool cfgSet( string nm, ElTp val )</i> [<span style="color:red">доÑтуп к ÑоответÑтвующей подÑиÑтеме</span>] — уÑтанавливает конфигурационное Ð¿Ð¾Ð»Ñ <i>nm</i> объекта в значение <i>val</i>.</li> <li> <i>bool status( )</i> — ÑÑ‚Ð°Ñ‚ÑƒÑ Ð°Ñ€Ñ…Ð¸Ð²Ð°Ñ‚Ð¾Ñ€Ð° "ИÑполнение".</li></ul> <p><span id="SYS.Archive" title="#SYS.Archive">Функции объекта архива (SYS.Archive["va_Archive"]):</span> </p> <ul><li> <i>ElTp cfg( string nm )</i> — получает значение конфигурационного Ð¿Ð¾Ð»Ñ <i>nm</i> объекта.</li> <li> <i>bool cfgSet( string nm, ElTp val )</i> [<span style="color:red">доÑтуп к ÑоответÑтвующей подÑиÑтеме</span>] — уÑтанавливает конфигурационное Ð¿Ð¾Ð»Ñ <i>nm</i> объекта в значение <i>val</i>.</li> <li> <i>bool status( )</i> — ÑÑ‚Ð°Ñ‚ÑƒÑ Ð°Ñ€Ñ…Ð¸Ð²Ð°Ñ‚Ð¾Ñ€Ð° "ИÑполнение".</li> <li> <i>int end( string arch = "" )</i> — Ð²Ñ€ÐµÐ¼Ñ ÐºÐ¾Ð½Ñ†Ð° данных архива Ð´Ð»Ñ Ð°Ñ€Ñ…Ð¸Ð²Ð°Ñ‚Ð¾Ñ€Ð° <i>arch</i>, в микроÑекундах.</li> <li> <i>int begin( string arch = "" )</i> — Ð²Ñ€ÐµÐ¼Ñ Ð½Ð°Ñ‡Ð°Ð»Ð° данных архива Ð´Ð»Ñ Ð°Ñ€Ñ…Ð¸Ð²Ð°Ñ‚Ð¾Ñ€Ð° <i>arch</i>, в микроÑекундах.</li> <li> <i>int period( string arch = "" )</i> — период данных архива Ð´Ð»Ñ Ð°Ñ€Ñ…Ð¸Ð²Ð°Ñ‚Ð¾Ñ€Ð° <i>arch</i>, в микроÑекундах.</li> <li> <i>TArrayObj archivatorList( )</i> — ÑпиÑок архиваторов, иÑпользующих данный архив как иÑточник.</li> <li> <i>VarType getVal( int tm, bool up_ord = false, string arch = "" )</i> — получает значение из архива на Ð²Ñ€ÐµÐ¼Ñ <i>tm</i>, подтÑжкой к верху <i>up_ord</i> и архиватора <i>arch</i>: <ul><li> <i>tm</i> — Ð²Ñ€ÐµÐ¼Ñ Ð·Ð°Ð¿Ñ€Ð°ÑˆÐ¸Ð²Ð°ÐµÐ¼Ð¾Ð³Ð¾ значениÑ, в микроÑекундах, уÑтановить в 0 Ð´Ð»Ñ "end()"; Ñтот атрибут также ÑвлÑетÑÑ Ð²Ñ‹Ñ…Ð¾Ð´Ð¾Ð¼, ÑоответÑтвенно реальное Ð²Ñ€ÐµÐ¼Ñ Ð¿Ð¾Ð»ÑƒÑ‡ÐµÐ½Ð½Ð¾Ð³Ð¾ Ð·Ð½Ð°Ñ‡ÐµÐ½Ð¸Ñ Ð¿Ð¾Ð¼ÐµÑ‰Ð°ÐµÑ‚ÑÑ Ñюда, еÑли Ñто переменнаÑ; </li> <li> <i>up_ord</i> — подтÑгивать Ð²Ñ€ÐµÐ¼Ñ Ð·Ð°Ð¿Ñ€Ð°ÑˆÐ¸Ð²Ð°ÐµÐ¼Ð¾Ð³Ð¾ Ð·Ð½Ð°Ñ‡ÐµÐ½Ð¸Ñ Ðº верху Ñетки;</li> <li> <i>arch</i> — архиватор запроÑа, уÑтановить в пуÑтую Ñтроку Ð´Ð»Ñ Ð¿Ñ€Ð¾Ð²ÐµÑ€ÐºÐ¸ вÑех архиваторов, уÑтановить в "<buffer>" Ð´Ð»Ñ Ð¾Ð±Ñ€Ð°Ð±Ð¾Ñ‚ÐºÐ¸ только буфера.</li></ul></li> <li> <i>bool setVal( int tm, VarType vl, string arch = "" )</i> [<span style="color:red">доÑтуп к подÑиÑтеме Ðрхивы-ИÑториÑ</span>] — уÑтанавливает значение <i>vl</i> в архив на Ð²Ñ€ÐµÐ¼Ñ <i>tm</i> и архиватор <i>arch</i>: <ul><li> <i>tm</i> — Ð²Ñ€ÐµÐ¼Ñ ÑƒÑтанавливаемого значениÑ, в микроÑекундах;</li> <li> <i>vl</i> — значение;</li> <li> <i>arch</i> — архиватор уÑтановки, уÑтановить в пуÑтую Ñтроку Ð´Ð»Ñ Ð²Ñех архиваторов, уÑтановить в "<buffer>" Ð´Ð»Ñ Ð¾Ð±Ñ€Ð°Ð±Ð¾Ñ‚ÐºÐ¸ только буфера.</li></ul></li> <li> <i>Array getVals( int begTm, int endTm, int period, string arch = "" )</i> — получает архив/иÑторию значений от <i>begTm</i> и по <i>endTm</i> Ð´Ð»Ñ Ð°Ñ€Ñ…Ð¸Ð²Ð°Ñ‚Ð¾Ñ€Ð° <i>arch</i>: <ul><li> <i>begTm</i> — Ð²Ñ€ÐµÐ¼Ñ Ð½Ð°Ñ‡Ð°Ð»Ð° запрошенного диапазона данных, в микроÑекундах, будет изменено в реальное начало данных;</li> <li> <i>endTm</i> — Ð²Ñ€ÐµÐ¼Ñ Ð¾ÐºÐ¾Ð½Ñ‡Ð°Ð½Ð¸Ñ Ð·Ð°Ð¿Ñ€Ð¾ÑˆÐµÐ½Ð½Ð¾Ð³Ð¾ диапазона данных, в микроÑекундах;</li> <li> <i>period</i> — период данных, в микроÑекундах, должно быть обÑзательно определено и будет иÑпользовано макÑимальное значение Ð´Ð»Ñ Ñтого архива, будет изменено в периодичноÑÑ‚ÑŒ реальных данных;</li> <li> <i>arch</i> — архиватор запроÑа, уÑтановить в пуÑтую Ñтроку Ð´Ð»Ñ Ð¿Ñ€Ð¾Ð²ÐµÑ€ÐºÐ¸ вÑех архиваторов, уÑтановить в "<buffer>" Ð´Ð»Ñ Ð¾Ð±Ñ€Ð°Ð±Ð¾Ñ‚ÐºÐ¸ только буфера.</li></ul></li> <li> <i>bool setVals( Array buf, int tm, int period, string arch = "" )</i> [<span style="color:red">доÑтуп к подÑиÑтеме Ðрхивы-ИÑториÑ</span>] — уÑтанавливает значение архиву/иÑтории <i>buf</i> в архив от времени начала <i>tm</i>, Ð´Ð»Ñ Ð¿ÐµÑ€Ð¸Ð¾Ð´Ð° значений <i>period</i> и архиватора <i>arch</i>. <ul><li> <i>buf</i> — маÑÑив значений к уÑтановке;</li> <li> <i>tm</i> — Ð²Ñ€ÐµÐ¼Ñ Ð½Ð°Ñ‡Ð°Ð»Ð° уÑтанавливаемого диапазона данных, в микроÑекундах;</li> <li> <i>period</i> — период уÑтанавливаемых данных, в микроÑекундах, должно быть обÑзательно определено и будет иÑпользовано макÑимальное значение Ð´Ð»Ñ Ñтого архива, будет изменено в периодичноÑÑ‚ÑŒ реальных данных;</li> <li> <i>arch</i> — архиватор запроÑа, уÑтановить в пуÑтую Ñтроку Ð´Ð»Ñ Ð¿Ñ€Ð¾Ð²ÐµÑ€ÐºÐ¸ вÑех архиваторов, уÑтановить в "<buffer>" Ð´Ð»Ñ Ð¾Ð±Ñ€Ð°Ð±Ð¾Ñ‚ÐºÐ¸ только буфера.</li></ul></li></ul> <h2><span class="mw-headline" id="Subsystem_.22Transports.22_.28SYS.Transport.29"><span class="mw-headline-number">9</span> <span id="SYSTransport" title="#SYSTransport">Subsystem "Transports" (SYS.Transport)</span></span></h2> <p>Functions of the subsystem object: </p> <ul><li> <i>TCntrNodeObj outAt( string addr );</i> — common-unified output transport connection at the address <i>addr</i> in the forms:</li></ul> <dl><dd><dl><dd> "<b>{TrModule}.[out_]{TrID}[:{TrAddr}]</b>" — typical output with automatic creation <i>TrID</i> at it missing and allowing <i>TrAddr</i>;</dd> <dd> "<b>{TrModule}.in_{TrID}:{RemConId}</b>" — initiative input with the connection identifier in <i>RemConId</i>.</dd></dl> <ul><li> <i>TrModule</i> — transport module, as is <a href="Modules/Sockets.html" title="Special:MyLanguage/Modules/Sockets">Sockets</a>, <a href="../en/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> — transport identifier;</li> <li> <i>TrAddr</i> — transport specific address;</li> <li> <i>RemConId</i> — remote initiative connection ID.</li></ul></dd></dl> <p>Functions of the input transport object (SYS.Transport["Modul"]["in_Transp"]): </p> <ul><li> <i>ElTp cfg( string nm )</i> — gets the value of the configuration field <i>nm</i> of the object.</li> <li> <i>bool cfgSet( string nm, ElTp val )</i> [<span style="color:red">access to the appropriate subsystem</span>] — sets the configuration field <i>nm</i> of the object to the value <i>val</i>.</li> <li> <i>string status()</i> — string status of the transport.</li> <li> <i>string addr( string vl = "" )</i> — address of the transport, sets the non-empty value <i>vl</i>.</li> <li> <i>string writeTo(string sender, string mess)</i> — sends the message <i>mess</i> to the sender <i>sender</i>, as a reply.</li> <li> <i>TArrayObj associateTrsList()</i> — associated output transports list to that input one.</li> <li> <i>TCntrNodeObj associateTr( string id )</i> — getting the associated transport at that connection <i>id</i>.</li> <li> <i>ElTp conPrm( string id, ElTp val = EVAL, string cfg = "" )</i> — common handling the connection time parameter <i>id</i> with setting to the value <i>val</i> at presence; request for configuration parameter of the connection time with registration at the first time from the configuration <i>cfg</i> in the form "{SRC}\n{NAME}\n{HELP}".</li> <li> <i>bool setConPrm( string id, ElTp val )</i> — setting the connection time parameter <i>id</i> to the value <i>val</i>, only for compatibility.</li></ul> <p>Functions of the output transport object (SYS.Transport["Modul"]["out_Transp"]): </p> <ul> <li><i>bool isNetwork( )</i> — the sign — "The transport is network one", what is specified by the timeouts in seconds.</li> <li><i>ElTp cfg( string nm )</i> — gets the value of the configuration field <i>nm</i> of the object.</li> <li><i>bool cfgSet( string nm, ElTp val )</i> [<span style="color:red">access to the appropriate subsystem</span>] — sets the configuration field <i>nm</i> of the object to the value <i>val</i>.</li> <li><i>string status()</i> — string status of the transport.</li> <li><i>bool start( bool vl = EVAL, int tm = 0 )</i> — returns the transport status "Running", starts/stops it by <i>vl</i> (if it is not EVAL). For starting you can set the specific timeout <i>tm</i>.</li> <li><i>string addr( string vl = "" )</i> — address of the transport, sets the non-empty value <i>vl</i>.</li> <li><i>string timings( string vl = "", isDef = true )</i> — timings of the transport, sets the non-empty value <i>vl</i> and as default one for <i>isDef</i>.</li> <li><i>int attempts( int vl = EVAL )</i> — attempts of the transport connection, sets the non-EVAL value <i>vl</i>.</li> <li><i>ElTp conPrm( string id, ElTp val = EVAL, string cfg = "" )</i> — common handling the connection time parameter <i>id</i> with setting to the value <i>val</i> at presence; request for configuration parameter of the connection time with registration at the first time from the configuration <i>cfg</i> in the form "{SRC}\n{NAME}\n{HELP}".</li> <li><i>bool setConPrm( string id, ElTp val )</i> — setting the connection time parameter <i>id</i> to the value <i>val</i>, only for compatibility.</li> <li><i>string messIO( string mess, real timeOut = 0, int inBufLen = -1 );</i> — sends the message <i>mess</i> via the transport with the waiting time of the response <i>timeOut</i> (in seconds) and reads an response (Buffer) in <i>inBufLen</i> byte. In the case of a zero timeout, this time is taken from the settings of the output transport. The <i>timeOut</i> in negative (< -1e-3) disables the transport request/respond mode and allows for independent reading/writing to a buffer IO, with the reading timeout <i>timeOut</i> in absolute. For negative <i>inBufLen</i> the buffer size sets to STR_BUF_LEN(10000) and "0" disables the reading at all.<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> If your transport means getting data in parts for a request then for several devices on single bus-transport, use the function into single thread but there is not a way to lock the transport into the user API. Single thread that is any object of controller of DAQ and <a href="Modules/UserProtocol.html" title="Special:MyLanguage/Modules/UserProtocol">the module "User protocol"</a> locks the transport internally before self user procedures execution. <div class="mw-highlight mw-content-ltr" dir="ltr"><pre><span class="nx">rez</span> <span class="o">=</span> <span class="nx">SYS</span><span class="p">.</span><span class="nx">Transport</span><span class="p">.</span><span class="nx">Serial</span><span class="p">.</span><span class="nx">out_ttyUSB0</span><span class="p">.</span><span class="nx">messIO</span><span class="p">(</span><span class="nx">SYS</span><span class="p">.</span><span class="nx">strFromCharCode</span><span class="p">(</span><span class="mh">0x4B</span><span class="p">,</span><span class="mh">0x00</span><span class="p">,</span><span class="mh">0x37</span><span class="p">,</span><span class="mh">0x40</span><span class="p">),</span><span class="mf">0.2</span><span class="p">);</span> <span class="c1">//Wait for all the message tail by timeout and empty result</span> <span class="k">while</span><span class="p">(</span><span class="nx">rez</span><span class="p">.</span><span class="nx">length</span> <span class="o">&&</span> <span class="p">(</span><span class="nx">trez</span><span class="o">=</span><span class="nx">SYS</span><span class="p">.</span><span class="nx">Transport</span><span class="p">.</span><span class="nx">Serial</span><span class="p">.</span><span class="nx">out_ttyUSB0</span><span class="p">.</span><span class="nx">messIO</span><span class="p">(</span><span class="s2">""</span><span class="p">)).</span><span class="nx">length</span><span class="p">)</span> <span class="nx">rez</span> <span class="o">+=</span> <span class="nx">trez</span><span class="p">;</span> </pre></div></li> <li><i>string messIO( XMLNodeObj req, string prt );</i> — sends the request <i>req</i> to the protocol <i>prt</i> to perform a communication session through the transport and in assistance of the protocol. Returns a string with error in the format "<b>{errCod}:{errText}</b>" which empty for successful request. <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.D0.BE.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.D1.8B.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>. <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="Subsystem_.22User_interfaces.22_.28SYS.UI.29"><span class="mw-headline-number">11</span> <span id="SYSUI" title="#SYSUI">Subsystem "User interfaces" (SYS.UI)</span></span></h2> <p>Functions of the subsystem object: </p> <ul><li> <i>string mimeGet(string fnm);</i> — obtaining the MIME type at the file name <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.png" title="User object model of the module VCAEngine."><img alt="User object model of the module VCAEngine." height="238" src="../en/files/Oscada_UserOM_VCAEngine.png" width="352" /></a></div> <p><b>Object "Session" ( this.ownerSess() )</b> </p> <ul><li> <i>string user( )</i> — current session user.</li> <li> <i>int alrmQuietance( int quit_tmpl, string wpath = "", bool ret = false )</i> — quiets of the violations <i>wpath</i> with the template <i>quit_tmpl</i>. If <i>wpath</i> is empty string then the global quietance makes. In the string <i>wpath</i>, by symbol ';', can be enumerated addresses of several widgets. When set the <i>ret</i>, the quietance return is performed.</li> <li> <i>int reqTm( )</i> — last request time in seconds from the epoch of 1/1/1970.</li> <li> <i>string reqUser( )</i> — last request user.</li> <li> <i>string reqLang( )</i> — last request language.</li> <li> <i>int userActTm( )</i> — last user action time in seconds from the epoch of 1/1/1970.</li> <li> <i>bool uiCmd( string cmd, string prm, string src )</i> — sends a UI command of the pages managing, that is: "open", "next", "prev"; for more details see in <a href="#Events">the events section</a>. This function must be in the priority of using to the pages managing before the direct writing to the page attributes "pgOpen" and "pgOpenSrc" due it is single method of the correct work with <a href="#Project">the linked pages</a>.</li> <li> <i>int period( bool isReal = false )</i> — getting the session processing period, <i>isReal</i> for the real one.</li></ul> <p><b>Object "Widget" (this)</b> </p> <ul><li> <i>TCntrNodeObj ownerSess( )</i> — session object for the current widget.</li> <li> <i>TCntrNodeObj ownerPage( )</i> — parent page object for the current widget.</li> <li> <i>TCntrNodeObj ownerWdg( bool base = false )</i> — parent widget object for the current widget. If set <i>base</i> then returns the parent page objects also.</li> <li> <i>TCntrNodeObj wdgAdd( string wid, string wname, string parent )</i> — adds the new widget <i>wid</i> with the name <i>wname</i> and based on the library widget <i>parent</i>.</li></ul> <div class="mw-highlight mw-content-ltr" dir="ltr" style="margin-left: 15px"><pre><span class="c1">//Adds the new widget, based at the text primitive</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">"New widget"</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> — deletes the widget <i>wid</i>.</li> <li> <i>TCntrNodeObj wdgAt( string wid, bool byPath = false )</i> — attaches to child or global widget, by the path <i>byPath</i>. For missing and invalid widgets the function will return "false" when a correct widget in it conversion to BOOLEAN will return "true". In the case of global connection, you can use absolute or relative path to the widget. For starting point of the absolute address acts the root object of the module "VCAEngine", which means the first element of the absolute address is session identifier, which is ignored. The relative address takes the countdown from the current widget. Special element of the relative address is an element of parent node "..".</li> <li> <i>Array attrList()</i> — list of the widget attributes.</li> <li> <i>bool attrPresent( string attr )</i> — checks to presence fact of the attribute <i>attr</i> of the widget.</li> <li> <i>ElTp attr( string attr, bool fromSess = false )</i> — value of the attribute <i>attr</i> of the widget or from the session <i>fromSess</i>. For missing attributes will be return empty string.</li> <li> <i>TCntrNodeObj attrSet( string attr, ElTp vl, bool toSess = false )</i> — sets the value <i>vl</i> to the attribute <i>attr</i> of the widget or to the session, by <i>toSess</i>. The object is returned for the function concatenation.</li> <li> <i>string link( string attr, bool prm = false )</i> — link for the widget attribute <i>attr</i>. At set <i>prm</i> requests the link for the attributes block (parameter), represented by the attribute. </li> <li> <i>string linkSet( string attr, string vl, bool prm = false )</i> — sets the link for the widget attribute <i>attr</i>. At set <i>prm</i>, sets the link for the attributes block (parameter), represented by the attribute.</li></ul> <div class="mw-highlight mw-content-ltr" dir="ltr" style="margin-left: 15px"><pre><span class="c1">//Sets the link to the parameter for the eight trend</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> — resource object by the address <i>addr</i> (the direct link to the resource or the widget attribute contained the link) with the <i>MIME</i>, from the session table or the source. It is designed for the resource objects edition and that substitution to this session's context, for example, images SVG.</li> <li> <i>int {resourceSet,mimeSet}( string addr, string data, string MIME = "" )</i> — sets the resource object to <i>data</i> with <i>MIME</i> by the address <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> — formats of the program message <i>mess</i> with the category — the widget path.</li> <li> <i>int calcPer( int set = EVAL )</i> — the actual calculation-processing period getting and setting at <i>set</i> not EVAL. There reserved the special values: <ul><li> <b>0</b> — if you want the session period processing;</li> <li> <b>-1</b> — if you want to use the parent widget/page/project processing period in the cascade;</li> <li> <b>-2</b> — for disable the periodic processing in whole;</li> <li> <b>-3</b> — no session time period, getting the projecting one.</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.D0.BE.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.D0.B8.D0.B0.D0.BB.D1.8C.D0.BD.D1.8B.D0.B5.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.D0.B8.D0.B1.D0.BB.D0.B8.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.D1.80.D0.B5.D0.B4.D1.8B_.D0.BF.D0.BE.D0.BB.D1.8C.D0.B7.D0.BE.D0.B2.D0.B0.D1.82.D0.B5.D0.BB.D1.8C.D1.81.D0.BA.D0.BE.D0.B3.D0.BE_.D0.BF.D1.80.D0.BE.D0.B3.D1.80.D0.B0.D0.BC.D0.BC.D0.B8.D1.80.D0.BE.D0.B2.D0.B0.D0.BD.D0.B8.D1.8F_.28Special.FLibSYS.29"><span class="mw-headline-number">12.1</span> Модуль <a href="Modules/FLibSYS.html" title="Special:MyLanguage/Modules/FLibSYS">Библиотека ÑиÑтемного API Ñреды пользовательÑкого Ð¿Ñ€Ð¾Ð³Ñ€Ð°Ð¼Ð¼Ð¸Ñ€Ð¾Ð²Ð°Ð½Ð¸Ñ (Special.FLibSYS)</a></span></h3> <p><b>Объект "Библиотека функций" (SYS.Special.FLibSYS)</b> </p> <ul><li> <i>ElTp {funcID}(ElTp prm1, ...)</i> — вызов функции библиотеки <i>{funcID}</i>. Возвращает результат вызываемой функции.</li></ul> <p><b>Объект "ПользовательÑÐºÐ°Ñ Ñ„ÑƒÐ½ÐºÑ†Ð¸Ñ" (SYS.Special.FLibSYS["funcID"])</b> </p> <ul><li> <i>ElTp call(ElTp prm1, ...)</i> — вызов данной функции Ñ Ð¿Ð°Ñ€Ð°Ð¼ÐµÑ‚Ñ€Ð°Ð¼Ð¸ <i><prm{N}></i>. Возвращает результат вызываемой функции.</li></ul> <h3><span class="mw-headline" id=".D0.9C.D0.BE.D0.B4.D1.83.D0.BB.D1.8C_.D0.91.D0.B8.D0.B1.D0.BB.D0.B8.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.D1.8B.D1.85_.D0.BC.D0.B0.D1.82.D0.B5.D0.BC.D0.B0.D1.82.D0.B8.D1.87.D0.B5.D1.81.D0.BA.D0.B8.D1.85_.D1.84.D1.83.D0.BD.D0.BA.D1.86.D0.B8.D0.B9_.28Special.FLibMath.29"><span class="mw-headline-number">12.2</span> Модуль <a href="Modules/FLibMath.html" title="Special:MyLanguage/Modules/FLibMath">Библиотека Ñтандартных математичеÑких функций (Special.FLibMath)</a></span></h3> <p><b>Объект "Библиотека функций" (SYS.Special.FLibMath)</b> </p> <ul><li> <i>ElTp {funcID}(ElTp prm1, ...)</i> — вызов функции библиотеки <i>{funcID}</i>. Возвращает результат вызываемой функции.</li></ul> <p><b>Объект "ПользовательÑÐºÐ°Ñ Ñ„ÑƒÐ½ÐºÑ†Ð¸Ñ" (SYS.Special.FLibMath["funcID"])</b> </p> <ul><li> <i>ElTp call(ElTp prm1, ...)</i> — вызов данной функции Ñ Ð¿Ð°Ñ€Ð°Ð¼ÐµÑ‚Ñ€Ð°Ð¼Ð¸ <i><prm{N}></i>. Возвращает результат вызываемой функции.</li></ul> <h3><span class="mw-headline" id=".D0.9C.D0.BE.D0.B4.D1.83.D0.BB.D1.8C_.D0.91.D0.B8.D0.B1.D0.BB.D0.B8.D0.BE.D1.82.D0.B5.D0.BA.D0.B0_.D1.84.D1.83.D0.BD.D0.BA.D1.86.D0.B8.D0.B9_.D1.81.D0.BE.D0.B2.D0.BC.D0.B5.D1.81.D1.82.D0.B8.D0.BC.D0.BE.D1.81.D1.82.D0.B8_.D1.81.D0.BE_SCADA_Complex1_.D1.84.D0.B8.D1.80.D0.BC.D1.8B_.D0.9E.D0.9E.D0.9E_.D0.9D.D0.98.D0.9F_.22DIYA.22_.28Special.FLibComplex1.29"><span class="mw-headline-number">12.3</span> Модуль <a href="Modules/FLibComplex1.html" title="Special:MyLanguage/Modules/FLibComplex1">Библиотека функций ÑовмеÑтимоÑти Ñо SCADA Complex1 фирмы ООО ÐИП "DIYA" (Special.FLibComplex1)</a></span></h3> <p><b>Объект "Библиотека функций" (SYS.Special.FLibComplex1)</b> </p> <ul><li> <i>ElTp {funcID}(ElTp prm1, ...)</i> — вызов функции библиотеки <i>{funcID}</i>. Возвращает результат вызываемой функции.</li></ul> <p><b>Объект "ПользовательÑÐºÐ°Ñ Ñ„ÑƒÐ½ÐºÑ†Ð¸Ñ" (SYS.Special.FLibComplex1["funcID"])</b> </p> <ul><li> <i>ElTp call(ElTp prm1, ...)</i> — вызов данной функции Ñ Ð¿Ð°Ñ€Ð°Ð¼ÐµÑ‚Ñ€Ð°Ð¼Ð¸ <i><prm{N}></i>. Возвращает результат вызываемой функции.</li></ul> <p><br /> </p> <h2><span class="mw-headline" id=".D0.91.D0.B8.D0.B1.D0.BB.D0.B8.D0.BE.D1.82.D0.B5.D0.BA.D0.B8_.D1.84.D1.83.D0.BD.D0.BA.D1.86.D0.B8.D0.B9_.D0.BF.D0.BE.D0.BB.D1.8C.D0.B7.D0.BE.D0.B2.D0.B0.D1.82.D0.B5.D0.BB.D1.8F"><span class="mw-headline-number">13</span> Библиотеки функций пользователÑ</span></h2> <p>Ðа данное Ð²Ñ€ÐµÐ¼Ñ OpenSCADA имеет библиотеки функций пользователÑ, напиÑанные Ñ Ð¸Ñпользованием Ñтого API пользователÑ. Ðекоторые из них разработаны Ð´Ð»Ñ Ð¸ÑÐ¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ð½Ð¸Ñ Ð¸Ñключительно из Ñтого API. Ð’Ñе библиотеки Ð¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ñ‚ÐµÐ»Ñ Ð¿Ñ€ÐµÐ´Ñтавлены в Ñледующей таблице: </p> <table class="wikitable"> <tr> <th> Ðаименование </th> <th> ВерÑÐ¸Ñ </th> <th> Ð›Ð¸Ñ†ÐµÐ½Ð·Ð¸Ñ </th> <th> ИÑточник </th> <th> Языки </th></tr> <tr> <td colspan="5"> <i>Библиотеки иÑточников данных, Ñлужб и обработки</i> </td></tr> <tr> <td> <a href="Libs_Main.html" title="Special:MyLanguage/Libs/Main">ОÑÐ½Ð¾Ð²Ð½Ð°Ñ Ð±Ð¸Ð±Ð»Ð¸Ð¾Ñ‚ÐµÐºÐ°</a> </td> <td> 2.3 </td> <td> GPLv2 </td> <td> OscadaLibs.db (<a class="external text" href="http://oscada.org/svn/trunk/OpenSCADA/data/LibsDB/OscadaLibs.sql" rel="nofollow noreferrer noopener" target="_blank">SQL</a>, <a class="external" href="http://oscada.org/wiki/File:OscadaLibs.db.gz" title="File:OscadaLibs.db.gz">GZip</a>) > DAQ.tmplb_base </td> <td> en, uk, ru </td></tr> <tr> <td> <a href="Libs_Devices.html" title="Special:MyLanguage/Libs/Devices">Библиотека промышленных уÑтройÑтв</a> </td> <td> 3.1 </td> <td> GPLv2 </td> <td> OscadaLibs.db (<a class="external text" href="http://oscada.org/svn/trunk/OpenSCADA/data/LibsDB/OscadaLibs.sql" rel="nofollow noreferrer noopener" target="_blank">SQL</a>, <a class="external" href="http://oscada.org/wiki/File:OscadaLibs.db.gz" title="File:OscadaLibs.db.gz">GZip</a>) > DAQ.tmplb_DevLib </td> <td> en, uk, ru </td></tr> <tr> <td> <a href="Libs_LowLevelDevices.html" title="Special:MyLanguage/Libs/LowLevelDevices">Библиотека низкоуровневых ÑенÑоров и чипов</a> </td> <td> 1.6 </td> <td> GPLv2 </td> <td> OscadaLibs.db (<a class="external text" href="http://oscada.org/svn/trunk/OpenSCADA/data/LibsDB/OscadaLibs.sql" rel="nofollow noreferrer noopener" target="_blank">SQL</a>, <a class="external" href="http://oscada.org/wiki/File:OscadaLibs.db.gz" title="File:OscadaLibs.db.gz">GZip</a>) > DAQ.tmplb_LowDevLib </td> <td> en, uk, ru </td></tr> <tr> <td> <a href="Libs_Service_procedures.html" title="Special:MyLanguage/Libs/Service procedures">Библиотека ÑервиÑных процедур</a> </td> <td> 1.2 </td> <td> GPLv2 </td> <td> OscadaLibs.db (<a class="external text" href="http://oscada.org/svn/trunk/OpenSCADA/data/LibsDB/OscadaLibs.sql" rel="nofollow noreferrer noopener" target="_blank">SQL</a>, <a class="external" href="http://oscada.org/wiki/File:OscadaLibs.db.gz" title="File:OscadaLibs.db.gz">GZip</a>) > DAQ.JavaLikeCalc.servProc </td> <td> en, uk, ru </td></tr> <tr> <td> <a href="Libs_Regulation_elements.html" title="Special:MyLanguage/Libs/Regulation elements">Библиотека Ñлементов регулированиÑ</a> </td> <td> 1.0 </td> <td> GPLv2 </td> <td> OscadaLibs.db (<a class="external text" href="http://oscada.org/svn/trunk/OpenSCADA/data/LibsDB/OscadaLibs.sql" rel="nofollow noreferrer noopener" target="_blank">SQL</a>, <a class="external" href="http://oscada.org/wiki/File:OscadaLibs.db.gz" title="File:OscadaLibs.db.gz">GZip</a>) > DAQ.JavaLikeCalc.regEl </td> <td> en, uk, ru </td></tr> <tr> <td> <a href="Libs_Technological_apparatuses.html" title="Special:MyLanguage/Libs/Technological apparatuses">Библиотека моделей аппаратов технологичеÑких процеÑÑов</a> </td> <td> 2.0 </td> <td> GPLv2 </td> <td> OscadaLibs.db (<a class="external text" href="http://oscada.org/svn/trunk/OpenSCADA/data/LibsDB/OscadaLibs.sql" rel="nofollow noreferrer noopener" target="_blank">SQL</a>, <a class="external" href="http://oscada.org/wiki/File:OscadaLibs.db.gz" title="File:OscadaLibs.db.gz">GZip</a>) > DAQ.JavaLikeCalc.techApp </td> <td> en, uk, ru </td></tr> <tr> <td colspan="5"> <i>Библиотеки графичеÑких Ñлементов OpenSCADA Ð¼Ð¾Ð´ÑƒÐ»Ñ <a href="Modules/VCAEngine.html" title="Special:MyLanguage/Modules/VCAEngine">UI.VCAEngine</a></i> </td></tr> <tr> <td> <a href="Libs_Main_graphical_elements.html" title="Special:MyLanguage/Libs/Main graphical elements">Библиотека оÑновных Ñлементов интерфейÑа пользователÑ</a> </td> <td> 2.2 </td> <td> GPLv2 </td> <td> vcaBase.db (<a class="external text" href="http://oscada.org/svn/trunk/OpenSCADA/data/LibsDB/vcaBase.sql" rel="nofollow noreferrer noopener" target="_blank">SQL</a>, <a class="external" href="http://oscada.org/wiki/File:VcaBase.db.gz" title="File:VcaBase.db.gz">GZip</a>) > VCA.wlb_Main </td> <td> en, uk, ru </td></tr> <tr> <td> <a href="Libs_Mnemo_elements.html" title="Special:MyLanguage/Libs/Mnemo elements">Библиотека Ñлементов мнемоÑхем интерфейÑа пользователÑ</a> </td> <td> 1.0 </td> <td> GPLv2 </td> <td> vcaBase.db (<a class="external text" href="http://oscada.org/svn/trunk/OpenSCADA/data/LibsDB/vcaBase.sql" rel="nofollow noreferrer noopener" target="_blank">SQL</a>, <a class="external" href="http://oscada.org/wiki/File:VcaBase.db.gz" title="File:VcaBase.db.gz">GZip</a>) > VCA.wlb_mnEls </td> <td> en, uk, ru </td></tr> <tr> <td> <a href="Libs_Electrical_elements.html" title="Special:MyLanguage/Libs/Electrical elements">Библиотека ÑлектричеÑких Ñлементов пользовательÑкого интерфейÑа</a> </td> <td> 2.0 </td> <td> GPLv2 </td> <td> vcaElectroEls.db (<a class="external text" href="http://oscada.org/svn/trunk/OpenSCADA/data/LibsDB/vcaElectroEls.sql" rel="nofollow noreferrer noopener" target="_blank">SQL</a>, <a class="external" href="http://oscada.org/wiki/File:VcaElectroEls.db.gz" title="File:VcaElectroEls.db.gz">GZip</a>) > VCA.wlb_ElectroEls </td> <td> en, uk, ru </td></tr> <tr> <td colspan="5"> <i>Комбинированные библиотеки</i> </td></tr> <tr> <td> <a href="Libs_Documents.html" title="Special:MyLanguage/Libs/Documents">Библиотека отчётов и документов</a> </td> <td> 2.0, 2.1 </td> <td> GPLv2 </td> <td> <p>OscadaLibs.db (<a class="external text" href="http://oscada.org/svn/trunk/OpenSCADA/data/LibsDB/OscadaLibs.sql" rel="nofollow noreferrer noopener" target="_blank">SQL</a>, <a class="external" href="http://oscada.org/wiki/File:OscadaLibs.db.gz" title="File:OscadaLibs.db.gz">GZip</a>) > DAQ.JavaLikeCalc.doc<br /> vcaBase.db (<a class="external text" href="http://oscada.org/svn/trunk/OpenSCADA/data/LibsDB/vcaBase.sql" rel="nofollow noreferrer noopener" target="_blank">SQL</a>, <a class="external" href="http://oscada.org/wiki/File:VcaBase.db.gz" title="File:VcaBase.db.gz">GZip</a>) > VCA.wlb_doc </p> </td> <td> en, uk, ru </td></tr> <tr> <td> <a href="Libs_Prescriptions.html" title="Special:MyLanguage/Libs/Prescriptions">Рецепты</a> </td> <td> 1.1, 1.1 </td> <td> GPLv2 </td> <td> <p>OscadaLibs.db (<a class="external text" href="http://oscada.org/svn/trunk/OpenSCADA/data/LibsDB/OscadaLibs.sql" rel="nofollow noreferrer noopener" target="_blank">SQL</a>, <a class="external" href="http://oscada.org/wiki/File:OscadaLibs.db.gz" title="File:OscadaLibs.db.gz">GZip</a>) > DAQ.tmplb_PrescrTempl<br /> vcaBase.db (<a class="external text" href="http://oscada.org/svn/trunk/OpenSCADA/data/LibsDB/vcaBase.sql" rel="nofollow noreferrer noopener" target="_blank">SQL</a>, <a class="external" href="http://oscada.org/wiki/File:VcaBase.db.gz" title="File:VcaBase.db.gz">GZip</a>) > VCA.wlb_prescr </p> </td> <td> en, uk, ru </td></tr></table> <p><br /> </p> <h2><span class="mw-headline" id=".D0.A1.D1.81.D1.8B.D0.BB.D0.BA.D0.B8"><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/ru">Documents/User_API/ru</a> - <a href="http://oscada.org/en/main/about-the-project/licenses/">GFDL</a></td><td style="text-align: center;">March 2025</td><td style="text-align: right;" width="40%">OpenSCADA 1+r3012</td></tr></table></body> </html>