<?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>Модули/Логический уровень - 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">Модули/Логический уровень</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&amp;group=page-Modules%2FLogicLev&amp;action=page&amp;filter=&amp;language=ru" rel="nofollow noreferrer noopener" target="_blank">translated version</a></span> of the page <a class="external" href="http://oscada.org/wiki/Modules/LogicLev" title="Modules/LogicLev">Modules/LogicLev</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/Modules/LogicLev.html" title="Modules/LogicLev (100% translated)">English</a>&nbsp;• ‎<span class="mw-pt-languages-selected mw-pt-progress mw-pt-progress--high">mRussian</span>&nbsp;• ‎<a class="mw-pt-progress mw-pt-progress--complete" href="../../uk/Modules/LogicLev.html" title="Модулі/Логічний рівень (100% translated)">Українська</a></div></div>
<table class="wikitable">

<tr>
<th> Модуль </th>
<th> Имя </th>
<th> Версия </th>
<th> Лицензия </th>
<th> Источник </th>
<th> Языки </th>
<th> Платформы </th>
<th> Тип </th>
<th> Автор </th>
<th> Описание
</th></tr>

<tr>
<td> <a href="../Modules/LogicLev.html" title="Special:MyLanguage/Modules/LogicLev">LogicLev</a> </td>
<td> Логический уровень
</td>
<td> 2.9 </td>
<td> GPL2 </td>
<td> daq_LogicLev.so </td>
<td> en,uk,ru,de </td>
<td> x86,x86_64,ARM
</td>
<td> DAQ </td>
<td> Роман Савоченко </td>
<td> Предоставляет чистый логический уровень параметров сбора данных.
</td></tr></table>
<p>Модуль является чистой реализацией механизма логического уровня, основанного на шаблонах параметров <a href="../Program_manual.html#DAQ" title="Special:MyLanguage/Documents/Program manual">подсистемы "Сбор данных (DAQ)"</a>. Реализация модуля основана на проекте "<a class="external" href="http://oscada.org/wiki/Special:MyLanguage/Sub-projects/Values_archivation" title="Special:MyLanguage/Sub-projects/Values archivation">Логический уровень параметров OpenSCADA</a>". Практически, данный модуль является реализацией подсистемы "Параметры" указанного проекта, без шаблонов и вынесенная в модуль.
</p><p>Модуль предоставляет механизм формирования параметров подсистемы "DAQ" уровня пользователя на основе других источников этой подсистемы. Фактически, модулем используются шаблоны подсистемы "DAQ" и специфический формат описания ссылок на атрибуты параметров подсистемы "DAQ".
</p><p>Также, модулем реализуются функции горизонтального резервирования, а именно — совместной работы с удалённой станцией этого-же уровня. Кроме синхронизации значений и архивов атрибутов параметров, модулем осуществляется синхронизация значений вычислительных шаблонов с целью безударного подхвата алгоритмов.
</p>
<div class="toc" id="toc"><div id="toctitle"><h2>Contents</h2></div>
<ul>
<li class="toclevel-1 tocsection-1"><a href="#.D0.9E.D0.B1.D1.8A.D0.B5.D0.BA.D1.82_.D0.BA.D0.BE.D0.BD.D1.82.D1.80.D0.BE.D0.BB.D0.BB.D0.B5.D1.80.D0.B0"><span class="tocnumber">1</span> <span class="toctext">Объект контроллера</span></a></li>
<li class="toclevel-1 tocsection-2"><a href="#Parameters"><span class="tocnumber">2</span> <span class="toctext">Parameters</span></a>
<ul>
<li class="toclevel-2 tocsection-3"><a href="#.D0.9B.D0.BE.D0.B3.D0.B8.D1.87.D0.B5.D1.81.D0.BA.D0.B8.D0.B9_.28Prm.29"><span class="tocnumber">2.1</span> <span class="toctext">Логический (Prm)</span></a></li>
<li class="toclevel-2 tocsection-4"><a href="#.D0.9E.D1.82.D1.80.D0.B0.D0.B6.D0.B5.D0.BD.D0.B8.D0.B5_.D0.BF.D0.B0.D1.80.D0.B0.D0.BC.D0.B5.D1.82.D1.80.D0.B0_.28PrmRefl.29"><span class="tocnumber">2.2</span> <span class="toctext">Отражение параметра (PrmRefl)</span></a></li>
</ul>
</li>
<li class="toclevel-1 tocsection-5"><a href="#API_.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"><span class="tocnumber">3</span> <span class="toctext">API пользовательского программирования</span></a></li>
<li class="toclevel-1 tocsection-6"><a href="#Service_commands-functions_of_the_Control_Interface"><span class="tocnumber">4</span> <span class="toctext">Service commands-functions of the Control Interface</span></a></li>
</ul>
</div>

<h2><span class="mw-headline" id=".D0.9E.D0.B1.D1.8A.D0.B5.D0.BA.D1.82_.D0.BA.D0.BE.D0.BD.D1.82.D1.80.D0.BE.D0.BB.D0.BB.D0.B5.D1.80.D0.B0"><span class="mw-headline-number">1</span> Объект контроллера</span></h2>
<p>Для добавления источника данных параметров логического уровня создаётся и конфигурируется объект контроллера OpenSCADA. Пример вкладки конфигурации объекта контроллера данного типа изображен на рисунке 1.
</p>
<div class="center"><div class="thumb tnone"><div class="thumbinner" style="width:783px;"><a class="image" href="http://oscada.org/wiki/File:LogicLev_cntr.png"><img class="thumbimage" height="619" src="../../en/files/LogicLev_cntr.png" width="781" /></a>  <div class="thumbcaption">Рис.1. Вкладка конфигурации объекта контроллера.</div></div></div></div>
<p>With this tab you can set:
</p>
<ul><li> State of the controller object, as follows: status, "Enabled", "Running" and the storage name containing the configuration.</li>
<li> Identifier, name and description of the controller.</li>
<li> The state "Enabled" and "Running", in which the controller object must be translated at start up.</li>
<li> Policy of scheduling and priority of the data acquisition task.</li></ul>
<h2><span class="mw-headline" id="Parameters"><span class="mw-headline-number">2</span> Parameters</span></h2>
<p>The module provides two types of parameters: "Logical (Prm)" and "Reflection parameter (PrmRefl)". The additional configuration fields of the parameters of this module (Fig. 2) are:
</p>
<ul><li> <i><b>Logical (Prm)</b></i>, with the parameters table name "LogLev{TypeId}_{CntrId}":
<ul><li> <i>Parameter template</i> — address of the DAQ parameter template.</li></ul></li>
<li> <i><b>Reflection parameter (PrmRefl)</b></i>, with the parameters table name "LogLev{TypeId}_{CntrId}":
<ul><li> <i>Source parameter</i> — address of the source of the reflecting parameter.</li></ul></li></ul>
<div class="center"><div class="thumb tnone"><div class="thumbinner" style="width:879px;"><a class="image" href="http://oscada.org/wiki/File:LogicLev_prm_ru.png"><img class="thumbimage" height="580" src="../files/LogicLev_prm_ru.png" width="877" /></a>  <div class="thumbcaption">Рис.2. Вкладка конфигурации параметра.</div></div></div></div>
<h3><span class="mw-headline" id=".D0.9B.D0.BE.D0.B3.D0.B8.D1.87.D0.B5.D1.81.D0.BA.D0.B8.D0.B9_.28Prm.29"><span class="mw-headline-number">2.1</span> Логический (Prm)</span></h3>
<p>При формировании шаблона логического типа параметра этого модуля нужно учитывать особенность формата ссылки шаблона. Ссылка должна записываться в виде: <b>{Параметр}|{Идентификатор}</b>, где:
</p>
<ul><li> <i>{Параметр}</i> — строка, характеризующая параметр;</li>
<li> <i>{Идентификатор}</i> — идентификатор атрибута параметра.</li></ul>
<p>Подобная запись позволяет группировать несколько атрибутов одного исходного параметра и назначать их выбором только самого параметра. Т.е., в диалоге конфигурации шаблона (рис.3) будет указываться только параметр. Это однако не исключает возможности назначать атрибуты параметров отдельно каждый, кроме того, если опустить в конфигурации шаблона описание ссылки в указанном формате, то назначаться будет атрибут параметра (рис.4).
</p><p>Модулем предусмотрена особая обработка ряда атрибутов шаблона:
</p>
<ul><li> <i>f_frq</i> — частота вычисления процедуры шаблона или время после последнего вычисления (отрицательное в секундах) для планирования по CRON, только чтение.</li>
<li> <i>f_start</i> — флаг первого выполнения процедуры шаблона — запуск, только чтение.</li>
<li> <i>f_stop</i> — флаг последнего выполнения процедуры шаблона — останов, только чтение.</li>
<li> <i>f_err</i> — ошибка параметра, полный доступ. Значение этого атрибута шаблона попадает в атрибут ошибки параметра "err". Записать сюда <b>EVAL</b> для возможности установки извне атрибута "err" и всех других в режиме Только для Чтения.</li>
<li> <i>SHIFR</i> — значение шифра параметра, только чтение.</li>
<li> <i>NAME</i> — значение имени параметра, только чтение.</li>
<li> <i>DESCR</i> — значение описания параметра, только чтение.</li>
<li> <i>this</i> — объект данного параметра, позволяет получить доступ к атрибутам параметра, например, для доступа к архивам-истории.</li></ul>
<p>Знак "(+)", в конце адреса, сигнализирует об успешном связывании и присутствии целевого объекта. Для атрибутов объектного типа допустим иерархический доступ к конкретному свойству объекта путём указания его пути через символ '#', например: "LogicLev.experiment.Pi.var#pr1.pr2".
</p>
<div class="center"><div class="thumb tnone"><div class="thumbinner" style="width:879px;"><a class="image" href="http://oscada.org/wiki/File:LogicLev_prm_tmpl_ru.png"><img class="thumbimage" height="580" src="../files/LogicLev_prm_tmpl_ru.png" width="877" /></a>  <div class="thumbcaption">Рис.3. Вкладка конфигурации шаблона параметра.</div></div></div></div>
<div class="center"><div class="thumb tnone"><div class="thumbinner" style="width:879px;"><a class="image" href="http://oscada.org/wiki/File:LogicLev_prm_tmpl1_ru.png"><img class="thumbimage" height="580" src="../files/LogicLev_prm_tmpl1_ru.png" width="877" /></a>  <div class="thumbcaption">Рис.4. Вкладка конфигурации шаблона параметра. Показывать только атрибуты.</div></div></div></div>
<p>В соответствии с шаблоном, лежащим в основе параметра, мы получаем набор атрибутов параметра как на рисунке 5.
</p>
<div class="center"><div class="thumb tnone"><div class="thumbinner" style="width:881px;"><a class="image" href="http://oscada.org/wiki/File:LogicLev_prm_attr_ru.png"><img class="thumbimage" height="567" src="../files/LogicLev_prm_attr_ru.png" width="879" /></a>  <div class="thumbcaption">Рис.5. Вкладка атрибутов параметра.</div></div></div></div>
<h3><span class="mw-headline" id=".D0.9E.D1.82.D1.80.D0.B0.D0.B6.D0.B5.D0.BD.D0.B8.D0.B5_.D0.BF.D0.B0.D1.80.D0.B0.D0.BC.D0.B5.D1.82.D1.80.D0.B0_.28PrmRefl.29"><span class="mw-headline-number">2.2</span> Отражение параметра (PrmRefl)</span></h3>
<p>Все атрибуты указанного для отражения параметра просто становятся доступными у данного параметра, тем самым осуществляя функцию проксирования, например, для сведения параметров других источников в один — экспортный объект контроллера (для ПЛК).
</p>
<h2><span class="mw-headline" id="API_.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"><span class="mw-headline-number">3</span> API пользовательского программирования</span></h2>
<p>В виду поддержки параметров логического типа, имеет смысл предоставление ряда функций пользовательского API для их вызова из шаблона логического параметра.
</p><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="Service_commands-functions_of_the_Control_Interface"><span class="mw-headline-number">4</span> Service commands-functions of the Control Interface</span></h2>
<p>Service functions are an interface for accessing OpenSCADA from external systems through the <a href="../../en/API.html#CntrNode" title="Special:MyLanguage/Documents/API">Control Interface</a>. This mechanism is the basis of all exchange within OpenSCADA, implemented through weak links and <a href="../Modules/SelfSystem.html" title="Special:MyLanguage/Modules/SelfSystem">OpenSCADA's own exchange protocol</a>.
</p><p><br />
<b><u>Getting for values of the template IO of the Logical Level parameter of the controller object</u></b><br />
REQ: <i>&lt;get path="/DAQ/LogicLev/<b>{CNTR}</b>/prm_<b>{PRM}</b>[/prm_<b>{PRM}</b>]/%2fserv%2ftmplAttr" /&gt;</i>
</p>
<ul><li> <i>CNTR</i>, <i>PRM</i> — controller object and parameters.</li></ul>
<p>RESP: <i>&lt;get path="/DAQ/LogicLev/{CNTR}/prm_{PRM}[/prm_{PRM}]/%2fserv%2ftmplAttr" rez="<b>0</b>"&gt;<b>{IOs}</b>&lt;/get&gt;</i>
</p>
<ul><li> <i>IOs</i> — IOs of the template execution context of the Logical Level parameters in the tags "ta": <i>&lt;ta id="<b>{ID}</b>"&gt;<b>{value}</b>&lt;/ta&gt;</i>
<ul><li> <i>ID</i> — identifier of the IO;</li>
<li> <i>value</i> — value of the IO.</li></ul></li></ul>
<div class="mw-highlight mw-content-ltr" dir="ltr" style="margin-left: 10pt"><pre><span class="nt">&lt;get</span> <span class="na">path=</span><span class="s">"/DAQ/LogicLev/gen/prm_F3/%2fserv%2ftmplAttr"</span> <span class="na">rez=</span><span class="s">"0"</span> <span class="na">user=</span><span class="s">"roman"</span><span class="nt">&gt;</span>
  <span class="nt">&lt;ta</span> <span class="na">id=</span><span class="s">"in"</span><span class="nt">&gt;</span>44.9998202036118<span class="nt">&lt;/ta&gt;</span>
  <span class="nt">&lt;ta</span> <span class="na">id=</span><span class="s">"inProc"</span> <span class="nt">/&gt;</span>
  <span class="nt">&lt;ta</span> <span class="na">id=</span><span class="s">"var"</span><span class="nt">&gt;</span>44.9999585116556<span class="nt">&lt;/ta&gt;</span>
  <span class="nt">&lt;ta</span> <span class="na">id=</span><span class="s">"ed"</span><span class="nt">&gt;</span>ton/h<span class="nt">&lt;/ta&gt;</span>
  <span class="nt">&lt;ta</span> <span class="na">id=</span><span class="s">"min"</span><span class="nt">&gt;</span>0<span class="nt">&lt;/ta&gt;</span>
  <span class="nt">&lt;ta</span> <span class="na">id=</span><span class="s">"max"</span><span class="nt">&gt;</span>100<span class="nt">&lt;/ta&gt;</span>
  <span class="nt">&lt;ta</span> <span class="na">id=</span><span class="s">"scSqr"</span><span class="nt">&gt;</span>0<span class="nt">&lt;/ta&gt;</span>
<span class="nt">&lt;/get&gt;</span>
</pre></div>
<p><b><u>Setting for values of the template IO of the Logical Level parameter of the controller object</u></b><br />
REQ[<b>root-DAQ</b>]: <i>&lt;set path="/DAQ/LogicLev/<b>{CNTR}</b>/prm_<b>{PRM}</b>[/prm_<b>{PRM}</b>]/%2fserv%2ftmplAttr"&gt;<b>{IOs}</b>&lt;/set&gt;</i>
</p>
<ul><li> <i>CNTR</i>, <i>PRM</i> — controller object and parameters;</li>
<li> <i>IOs</i> — IOs of the template execution context of the Logical Level parameters in the tags "ta": <i>&lt;ta id="<b>{ID}</b>"&gt;<b>{value}</b>&lt;/ta&gt;</i>
<ul><li> <i>ID</i> — identifier of the IO;</li>
<li> <i>value</i> — value of the IO.</li></ul></li></ul>
<div class="mw-highlight mw-content-ltr" dir="ltr" style="margin-left: 10pt"><pre><span class="nt">&lt;set</span> <span class="na">path=</span><span class="s">"/DAQ/LogicLev/gen/prm_F3/%2fserv%2ftmplAttr"</span><span class="nt">&gt;</span>
  <span class="nt">&lt;ta</span> <span class="na">id=</span><span class="s">"in"</span><span class="nt">&gt;</span>44.9998202036118<span class="nt">&lt;/ta&gt;</span>
  <span class="nt">&lt;ta</span> <span class="na">id=</span><span class="s">"var"</span><span class="nt">&gt;</span>44.9999585116556<span class="nt">&lt;/ta&gt;</span>
<span class="nt">&lt;/set&gt;</span>
</pre></div>






</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/Modules/LogicLev/ru">Modules/LogicLev/ru</a> - <a href="http://oscada.org/en/main/about-the-project/licenses/">GFDL</a></td><td style="text-align: center;">April 2025</td><td style="text-align: right;" width="40%">OpenSCADA 1+r3018</td></tr></table></body>
</html>