<?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&group=page-Modules%2FVCAEngine&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/Modules/VCAEngine" title="Modules/VCAEngine">Modules/VCAEngine</a> and the translation is 83% 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/VCAEngine.html" title="Modules/VCAEngine (100% translated)">English</a> • ‎<span class="mw-pt-languages-selected mw-pt-progress mw-pt-progress--complete">mRussian</span> • ‎<a class="mw-pt-progress mw-pt-progress--complete" href="../../uk/Modules/VCAEngine.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></tr> <tr> <td> <a href="../Modules/VCAEngine.html" title="Special:MyLanguage/Modules/VCAEngine">VCAEngine</a> </td> <td> Движок Среды Визуализации и Ð£Ð¿Ñ€Ð°Ð²Ð»ÐµÐ½Ð¸Ñ </td> <td> 7.16 </td> <td> GPL2 </td> <td> ui_VCAEngine.so </td> <td> en,uk,ru,de </td> <td> x86,x86_64,ARM </td> <td> UI </td> <td> Roman Savochenko<br /> <font size="-2"><i>Maxim Lysenko (2011-2012) — the page initial translation</i></font> </td></tr> <tr> <th colspan="9"> Description </th></tr> <tr> <td colspan="9"> The main engine of the visual control area. <ul><li> <b>Sponsored by, for finishing the changes obtaining mechanism on the visualisers runtime without spare requests and lost data on 1.5 <span title="human-days, 1 HD — 10 hours">HD<sup style="color: blue">[!]</sup></span>:</b> Vinnica Poultry Farm</li> <li> <b><a href="../../en/To_do.html" title="Special:MyLanguage/Works/To do">To Do</a>:</b></li></ul> <dl><dd> - append the image files edition user API for raster (PNG, JPEG, GIF), by LibGD2, and vector (SVG): <dl><dd>- implement the main functions of the GD object (into <a href="../Modules/FLibSYS.html" title="Special:MyLanguage/Modules/FLibSYS">Special.FLibSYS</a>).</dd></dl></dd> <dd> ... <i>for <a href="../Modules/Vision.html" title="Special:MyLanguage/Modules/Vision">Vision</a> also</i> ...</dd> <dd> - move the runtime requests to VCAEngine in the asynchronous mode; <dl><dd> !> has a problem with processing recursive events into event(), in the case of the mouse release events loss in processing the pressing mouse event.</dd></dl></dd> <dd> - implement the background execution of the edited pages in the development mode, for the visual diagram forming jointly <a href="../Modules/BlockCalc.html" title="Special:MyLanguage/Modules/BlockCalc">BlockCalc</a> and DAQ-sources at all.</dd> <dd> ... <i>for <a href="../Modules/Vision.html" title="Special:MyLanguage/Modules/Vision">Vision</a> and <a href="../Modules/WebVision.html" title="Special:MyLanguage/Modules/WebVision">WebVision</a> also</i> ...</dd> <dd> - append for the user-space global menu by the project-specific properties;</dd> <dd> - develop the block diagrams forming (dynamic frames) from the GUI;</dd> <dd> * adapt the widget libraries and the VCA projects to the inter-host copy.</dd></dl> </td></tr></table> <p>Модуль предоÑтавлÑет в OpenSCADA движок Ñреды визуализации и ÑƒÐ¿Ñ€Ð°Ð²Ð»ÐµÐ½Ð¸Ñ (СВУ). Сам модуль не реализует визуализации СВУ, а Ñодержит данные в ÑоответÑтвии Ñ ÐºÐ¾Ð½Ñ†ÐµÐ¿Ñ†Ð¸ÐµÐ¹ "Модель/данные – ИнтерфейÑ". Ð’Ð¸Ð·ÑƒÐ°Ð»Ð¸Ð·Ð°Ñ†Ð¸Ñ Ð´Ð°Ð½Ð½Ñ‹Ñ… Ñтого Ð¼Ð¾Ð´ÑƒÐ»Ñ Ð²Ñ‹Ð¿Ð¾Ð»Ð½ÑетÑÑ Ð¼Ð¾Ð´ÑƒÐ»Ñми визуализации СВУ, например, модулем <a href="../Modules/Vision.html" title="Special:MyLanguage/Modules/Vision">Vision</a> и <a href="../Modules/WebVision.html" title="Special:MyLanguage/Modules/WebVision">WebVision</a>. </p><p>Среда визуализации и ÑƒÐ¿Ñ€Ð°Ð²Ð»ÐµÐ½Ð¸Ñ (СВУ) ÑвлÑетÑÑ Ð½ÐµÐ¾Ñ‚ÑŠÐµÐ¼Ð»ÐµÐ¼Ð¾Ð¹ ÑоÑтавлÑющей SCADA ÑиÑтемы. Она применÑетÑÑ Ð½Ð° клиентÑких ÑтанциÑÑ… Ñ Ñ†ÐµÐ»ÑŒÑŽ доÑтупного предоÑÑ‚Ð°Ð²Ð»ÐµÐ½Ð¸Ñ Ð¸Ð½Ñ„Ð¾Ñ€Ð¼Ð°Ñ†Ð¸Ð¸ об объекте ÑƒÐ¿Ñ€Ð°Ð²Ð»ÐµÐ½Ð¸Ñ Ð¸ выдачи управлÑющих воздейÑтвий на объект. Ð’ различных практичеÑких ÑитуациÑÑ… и уÑловиÑÑ… могут применÑÑ‚ÑŒÑÑ Ð¡Ð’Ð£, поÑтроенные на различных принципах визуализации. Ðапример, Ñто могут быть библиотеки виджетов Qt, GTK+, wxWidgets или гипертекÑтовые механизмы на оÑнове технологий HTML, XHTML, XML, CSS и JavaScript или Ñторонние Ð¿Ñ€Ð¸Ð»Ð¾Ð¶ÐµÐ½Ð¸Ñ Ð²Ð¸Ð·ÑƒÐ°Ð»Ð¸Ð·Ð°Ñ†Ð¸Ð¸, реализованные на различных Ñзыках Ð¿Ñ€Ð¾Ð³Ñ€Ð°Ð¼Ð¼Ð¸Ñ€Ð¾Ð²Ð°Ð½Ð¸Ñ Java, Python и Ñ‚.д. Любой из Ñтих принципов имеет Ñвои преимущеÑтва и недоÑтатки, ÐºÐ¾Ð¼Ð±Ð¸Ð½Ð°Ñ†Ð¸Ñ ÐºÐ¾Ñ‚Ð¾Ñ€Ñ‹Ñ… может Ñтать непреодолимым препÑÑ‚Ñтвием в возможноÑти иÑÐ¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ð½Ð¸Ñ Ð¡Ð’Ð£ в том или ином практичеÑком Ñлучае. Ðапример, технологии вроде библиотеки Qt позволÑÑŽÑ‚ Ñоздавать выÑокопроизводительные СВУ, что неÑомненно важно Ð´Ð»Ñ Ñтанций оператора ÑƒÐ¿Ñ€Ð°Ð²Ð»ÐµÐ½Ð¸Ñ Ñ‚ÐµÑ…Ð½Ð¾Ð»Ð¾Ð³Ð¸Ñ‡ÐµÑким процеÑÑом (ТП). Однако, необходимоÑÑ‚ÑŒ инÑталлÑции данного клиентÑкого ПО может Ñделать его иÑпользование невозможным в отдельных ÑитуациÑÑ…. С другой Ñтороны, Web-технологии не требуют инÑталлÑции на клиентÑкие ÑиÑтемы и ÑвлÑÑŽÑ‚ÑÑ Ð¿Ñ€ÐµÐ´ÐµÐ»ÑŒÐ½Ð¾ многоплатформенными (доÑтаточно указать ÑÑылку на Web-Ñервер в любом Web-браузере), что наиболее важно Ð´Ð»Ñ Ñ€Ð°Ð·Ð»Ð¸Ñ‡Ð½Ñ‹Ñ… инженерных и админиÑтративных Ñтанций. С другой Ñтороны, производительноÑÑ‚ÑŒ и надёжноÑÑ‚ÑŒ таких интерфейÑов ниже, что практичеÑки иÑключает их иÑпользование на ÑтанциÑÑ… оператора ТП. </p><p>OpenSCADA имеет предельно гибкую архитектуру, ÐºÐ¾Ñ‚Ð¾Ñ€Ð°Ñ Ð¿Ð¾Ð·Ð²Ð¾Ð»Ñет Ñоздавать внешние интерфейÑÑ‹, в том чиÑле и пользовательÑкие, на любой оÑнове и вкуÑ. Ðапример, Ñреда конфигурации OpenSCADA доÑтупна как на Qt-библиотеке, так и на Web-оÑнове. </p><p>Ð’ тоже времÑ, незавиÑимое Ñоздание реализаций СВУ на различной оÑнове может повлечь за Ñобой невозможноÑÑ‚ÑŒ иÑÐ¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ð½Ð¸Ñ Ð´Ð°Ð½Ð½Ñ‹Ñ… конфигурации одной СВУ в другой. Что неудобно и ограничено Ñ Ð¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ñ‚ÐµÐ»ÑŒÑкой Ñтороны, а также накладно в плане реализации и поÑледующей поддержки. </p><p>С целью Ð¸Ð·Ð±ÐµÐ¶Ð°Ð½Ð¸Ñ Ñтих проблем, а также ÑÐ¾Ð·Ð´Ð°Ð½Ð¸Ñ Ð² кратчайшие Ñроки полного Ñпектра различных типов СВУ, оÑнован <a class="external" href="http://oscada.org/wiki/Special:MyLanguage/Sub-projects/VCA" title="Special:MyLanguage/Sub-projects/VCA">проект ÑÐ¾Ð·Ð´Ð°Ð½Ð¸Ñ ÐºÐ¾Ð½Ñ†ÐµÐ¿Ñ†Ð¸Ð¸ СВУ</a>. Результатом Ñтого проекта Ñтал данный модуль движка(модели данных) СВУ, а также модули непоÑредÑтвенной визуализации <a href="../Modules/Vision.html" title="Special:MyLanguage/Modules/Vision">Vision</a> и <a href="../Modules/WebVision.html" title="Special:MyLanguage/Modules/WebVision">WebVision</a>. </p> <div class="toc" id="toc"><div id="toctitle"><h2>Contents</h2></div> <ul> <li class="toclevel-1 tocsection-1"><a href="#.D0.9D.D0.B0.D0.B7.D0.BD.D0.B0.D1.87.D0.B5.D0.BD.D0.B8.D0.B5"><span class="tocnumber">1</span> <span class="toctext">Ðазначение</span></a></li> <li class="toclevel-1 tocsection-2"><a href="#.D0.9A.D0.BE.D0.BD.D1.84.D0.B8.D0.B3.D1.83.D1.80.D0.B0.D1.86.D0.B8.D1.8F_.D0.B8_.D1.84.D0.BE.D1.80.D0.BC.D0.B8.D1.80.D0.BE.D0.B2.D0.B0.D0.BD.D0.B8.D0.B5_.D0.B8.D0.BD.D1.82.D0.B5.D1.80.D1.84.D0.B5.D0.B9.D1.81.D0.BE.D0.B2_.D0.A1.D0.92.D0.A3"><span class="tocnumber">2</span> <span class="toctext">ÐšÐ¾Ð½Ñ„Ð¸Ð³ÑƒÑ€Ð°Ñ†Ð¸Ñ Ð¸ формирование интерфейÑов СВУ</span></a></li> <li class="toclevel-1 tocsection-3"><a href="#.D0.90.D1.80.D1.85.D0.B8.D1.82.D0.B5.D0.BA.D1.82.D1.83.D1.80.D0.B0"><span class="tocnumber">3</span> <span class="toctext">Ðрхитектура</span></a> <ul> <li class="toclevel-2 tocsection-4"><a href="#.D0.9A.D0.B0.D0.B4.D1.80.D1.8B_.D0.B8_.D1.8D.D0.BB.D0.B5.D0.BC.D0.B5.D0.BD.D1.82.D1.8B_.D0.BE.D1.82.D0.BE.D0.B1.D1.80.D0.B0.D0.B6.D0.B5.D0.BD.D0.B8.D1.8F_.28.D0.B2.D0.B8.D0.B4.D0.B6.D0.B5.D1.82.D1.8B.29"><span class="tocnumber">3.1</span> <span class="toctext">Кадры и Ñлементы Ð¾Ñ‚Ð¾Ð±Ñ€Ð°Ð¶ÐµÐ½Ð¸Ñ (виджеты)</span></a></li> <li class="toclevel-2 tocsection-5"><a href="#.D0.9F.D1.80.D0.BE.D0.B5.D0.BA.D1.82"><span class="tocnumber">3.2</span> <span class="toctext"><span>Проект</span></span></a></li> <li class="toclevel-2 tocsection-6"><a href="#.D0.A1.D0.B5.D0.B0.D0.BD.D1.81_.D0.B8.D1.81.D0.BF.D0.BE.D0.BB.D0.BD.D0.B5.D0.BD.D0.B8.D1.8F_.D0.BF.D1.80.D0.BE.D0.B5.D0.BA.D1.82.D0.B0"><span class="tocnumber">3.3</span> <span class="toctext">Ð¡ÐµÐ°Ð½Ñ Ð¸ÑÐ¿Ð¾Ð»Ð½ÐµÐ½Ð¸Ñ Ð¿Ñ€Ð¾ÐµÐºÑ‚Ð°</span></a></li> <li class="toclevel-2 tocsection-7"><a href="#.D0.A1.D1.82.D0.B8.D0.BB.D0.B8"><span class="tocnumber">3.4</span> <span class="toctext">Стили</span></a></li> <li class="toclevel-2 tocsection-8"><a href="#.D0.A1.D0.BE.D0.B1.D1.8B.D1.82.D0.B8.D1.8F.2C_.D0.B8.D1.85_.D0.BE.D0.B1.D1.80.D0.B0.D0.B1.D0.BE.D1.82.D0.BA.D0.B0_.D0.B8_.D0.BA.D0.B0.D1.80.D1.82.D1.8B_.D1.81.D0.BE.D0.B1.D1.8B.D1.82.D0.B8.D0.B9"><span class="tocnumber">3.5</span> <span class="toctext">СобытиÑ, их обработка и карты Ñобытий</span></a></li> <li class="toclevel-2 tocsection-9"><a href="#.D0.A1.D0.B8.D0.B3.D0.BD.D0.B0.D0.BB.D0.B8.D0.B7.D0.B0.D1.86.D0.B8.D1.8F"><span class="tocnumber">3.6</span> <span class="toctext"><span>СигнализациÑ</span></span></a></li> <li class="toclevel-2 tocsection-10"><a href="#.D0.A3.D0.BF.D1.80.D0.B0.D0.B2.D0.BB.D0.B5.D0.BD.D0.B8.D0.B5_.D0.BF.D1.80.D0.B0.D0.B2.D0.B0.D0.BC.D0.B8"><span class="tocnumber">3.7</span> <span class="toctext">Управление правами</span></a></li> <li class="toclevel-2 tocsection-11"><a href="#.D0.A1.D0.B2.D1.8F.D0.B7.D1.8B.D0.B2.D0.B0.D0.BD.D0.B8.D0.B5_.D1.81_.D0.B4.D0.B8.D0.BD.D0.B0.D0.BC.D0.B8.D0.BA.D0.BE.D0.B9"><span class="tocnumber">3.8</span> <span class="toctext">СвÑзывание Ñ Ð´Ð¸Ð½Ð°Ð¼Ð¸ÐºÐ¾Ð¹</span></a></li> <li class="toclevel-2 tocsection-12"><a href="#.D0.9F.D1.80.D0.B8.D0.BC.D0.B8.D1.82.D0.B8.D0.B2.D1.8B_.D0.B2.D0.B8.D0.B4.D0.B6.D0.B5.D1.82.D0.BE.D0.B2"><span class="tocnumber">3.9</span> <span class="toctext"><span>Примитивы виджетов</span></span></a> <ul> <li class="toclevel-3"><a href="#.D0.AD.D0.BB.D0.B5.D0.BC.D0.B5.D0.BD.D1.82.D0.B0.D1.80.D0.BD.D0.B0.D1.8F_.D0.B3.D1.80.D0.B0.D1.84.D0.B8.D1.87.D0.B5.D1.81.D0.BA.D0.B0.D1.8F_.D1.84.D0.B8.D0.B3.D1.83.D1.80.D0.B0_.28ElFigure.29"><span class="tocnumber">3.9.1</span> <span class="toctext"><span>ÐÐ»ÐµÐ¼ÐµÐ½Ñ‚Ð°Ñ€Ð½Ð°Ñ Ð³Ñ€Ð°Ñ„Ð¸Ñ‡ÐµÑÐºÐ°Ñ Ñ„Ð¸Ð³ÑƒÑ€Ð° (ElFigure)</span></span></a></li> <li class="toclevel-3"><a href="#.D0.AD.D0.BB.D0.B5.D0.BC.D0.B5.D0.BD.D1.82_.D1.84.D0.BE.D1.80.D0.BC.D1.8B_.28FormEl.29"><span class="tocnumber">3.9.2</span> <span class="toctext"><span>Ðлемент формы (FormEl)</span></span></a></li> <li class="toclevel-3"><a href="#.D0.AD.D0.BB.D0.B5.D0.BC.D0.B5.D0.BD.D1.82_.D1.82.D0.B5.D0.BA.D1.81.D1.82.D0.B0_.28Text.29"><span class="tocnumber">3.9.3</span> <span class="toctext"><span>Ðлемент текÑта (Text)</span></span></a></li> <li class="toclevel-3"><a href="#.D0.AD.D0.BB.D0.B5.D0.BC.D0.B5.D0.BD.D1.82_.D0.BE.D1.82.D0.BE.D0.B1.D1.80.D0.B0.D0.B6.D0.B5.D0.BD.D0.B8.D1.8F_.D0.BC.D0.B5.D0.B4.D0.B8.D0.B0-.D0.BC.D0.B0.D1.82.D0.B5.D1.80.D0.B8.D0.B0.D0.BB.D0.BE.D0.B2_.28Media.29"><span class="tocnumber">3.9.4</span> <span class="toctext"><span>Ðлемент Ð¾Ñ‚Ð¾Ð±Ñ€Ð°Ð¶ÐµÐ½Ð¸Ñ Ð¼ÐµÐ´Ð¸Ð°-материалов (Media)</span></span></a></li> <li class="toclevel-3"><a href="#.D0.AD.D0.BB.D0.B5.D0.BC.D0.B5.D0.BD.D1.82_.D0.BF.D0.BE.D1.81.D1.82.D1.80.D0.BE.D0.B5.D0.BD.D0.B8.D1.8F_.D0.B4.D0.B8.D0.B0.D0.B3.D1.80.D0.B0.D0.BC.D0.BC_.28Diagram.29"><span class="tocnumber">3.9.5</span> <span class="toctext"><span>Ðлемент поÑÑ‚Ñ€Ð¾ÐµÐ½Ð¸Ñ Ð´Ð¸Ð°Ð³Ñ€Ð°Ð¼Ð¼ (Diagram)</span></span></a></li> <li class="toclevel-3"><a href="#.D0.AD.D0.BB.D0.B5.D0.BC.D0.B5.D0.BD.D1.82_.D0.BF.D0.BE.D1.81.D1.82.D1.80.D0.BE.D0.B5.D0.BD.D0.B8.D1.8F_.D0.BF.D1.80.D0.BE.D1.82.D0.BE.D0.BA.D0.BE.D0.BB.D0.BE.D0.B2_.D0.BD.D0.B0_.D0.BE.D1.81.D0.BD.D0.BE.D0.B2.D0.B5_.D0.B0.D1.80.D1.85.D0.B8.D0.B2.D0.BE.D0.B2_.D1.81.D0.BE.D0.BE.D0.B1.D1.89.D0.B5.D0.BD.D0.B8.D0.B9_.28Protocol.29"><span class="tocnumber">3.9.6</span> <span class="toctext"><span>Ðлемент поÑÑ‚Ñ€Ð¾ÐµÐ½Ð¸Ñ Ð¿Ñ€Ð¾Ñ‚Ð¾ÐºÐ¾Ð»Ð¾Ð² на оÑнове архивов Ñообщений (Protocol)</span></span></a></li> <li class="toclevel-3"><a href="#.D0.AD.D0.BB.D0.B5.D0.BC.D0.B5.D0.BD.D1.82_.D1.84.D0.BE.D1.80.D0.BC.D0.B8.D1.80.D0.BE.D0.B2.D0.B0.D0.BD.D0.B8.D1.8F_.D0.BE.D1.82.D1.87.D1.91.D1.82.D0.BD.D0.BE.D0.B9_.D0.B4.D0.BE.D0.BA.D1.83.D0.BC.D0.B5.D0.BD.D1.82.D0.B0.D1.86.D0.B8.D0.B8_.28Document.29"><span class="tocnumber">3.9.7</span> <span class="toctext"><span>Ðлемент Ñ„Ð¾Ñ€Ð¼Ð¸Ñ€Ð¾Ð²Ð°Ð½Ð¸Ñ Ð¾Ñ‚Ñ‡Ñ‘Ñ‚Ð½Ð¾Ð¹ документации (Document)</span></span></a></li> <li class="toclevel-3"><a href="#.D0.9A.D0.BE.D0.BD.D1.82.D0.B5.D0.B9.D0.BD.D0.B5.D1.80_.28Box.29"><span class="tocnumber">3.9.8</span> <span class="toctext"><span>Контейнер (Box)</span></span></a></li> </ul> </li> <li class="toclevel-2 tocsection-13"><a href="#.D0.98.D1.81.D0.BF.D0.BE.D0.BB.D1.8C.D0.B7.D0.BE.D0.B2.D0.B0.D0.BD.D0.B8.D0.B5_.D0.91.D0.94_.D0.B4.D0.BB.D1.8F_.D1.85.D1.80.D0.B0.D0.BD.D0.B5.D0.BD.D0.B8.D1.8F_.D0.B1.D0.B8.D0.B1.D0.BB.D0.B8.D0.BE.D1.82.D0.B5.D0.BA_.D0.B2.D0.B8.D0.B4.D0.B6.D0.B5.D1.82.D0.BE.D0.B2_.D0.B8_.D0.BF.D1.80.D0.BE.D0.B5.D0.BA.D1.82.D0.BE.D0.B2"><span class="tocnumber">3.10</span> <span class="toctext">ИÑпользование БД Ð´Ð»Ñ Ñ…Ñ€Ð°Ð½ÐµÐ½Ð¸Ñ Ð±Ð¸Ð±Ð»Ð¸Ð¾Ñ‚ÐµÐº виджетов и проектов</span></a></li> <li class="toclevel-2 tocsection-14"><a href="#API_of_the_user_programming"><span class="tocnumber">3.11</span> <span class="toctext"><span>API of the user programming</span></span></a></li> <li class="toclevel-2 tocsection-15"><a href="#Service_commands-functions_of_the_Control_Interface"><span class="tocnumber">3.12</span> <span class="toctext">Service commands-functions of the Control Interface</span></a></li> </ul> </li> <li class="toclevel-1 tocsection-16"><a href="#.D0.9A.D0.BE.D0.BD.D1.84.D0.B8.D0.B3.D1.83.D1.80.D0.B0.D1.86.D0.B8.D1.8F_.D0.BC.D0.BE.D0.B4.D1.83.D0.BB.D1.8F_.D0.BF.D0.BE.D1.81.D1.80.D0.B5.D0.B4.D1.81.D1.82.D0.B2.D0.BE.D0.BC_.D0.B8.D0.BD.D1.82.D0.B5.D1.80.D1.84.D0.B5.D0.B9.D1.81.D0.B0_.D1.83.D0.BF.D1.80.D0.B0.D0.B2.D0.BB.D0.B5.D0.BD.D0.B8.D1.8F_OpenSCADA"><span class="tocnumber">4</span> <span class="toctext">ÐšÐ¾Ð½Ñ„Ð¸Ð³ÑƒÑ€Ð°Ñ†Ð¸Ñ Ð¼Ð¾Ð´ÑƒÐ»Ñ Ð¿Ð¾ÑредÑтвом интерфейÑа ÑƒÐ¿Ñ€Ð°Ð²Ð»ÐµÐ½Ð¸Ñ OpenSCADA</span></a></li> </ul> </div> <h2><span class="mw-headline" id=".D0.9D.D0.B0.D0.B7.D0.BD.D0.B0.D1.87.D0.B5.D0.BD.D0.B8.D0.B5"><span class="mw-headline-number">1</span> Ðазначение</span></h2> <p>Данный модуль движка(модели данных) СВУ предназначен Ð´Ð»Ñ Ñ„Ð¾Ñ€Ð¼Ð¸Ñ€Ð¾Ð²Ð°Ð½Ð¸Ñ Ð»Ð¾Ð³Ð¸Ñ‡ÐµÑкой Ñтруктуры СВУ и иÑÐ¿Ð¾Ð»Ð½ÐµÐ½Ð¸Ñ ÑеанÑов отдельных ÑкземплÑров проектов СВУ. Также, модуль предоÑтавлÑет конечным визуализаторам СВУ вÑе необходимые данные, как поÑредÑтвом локальных механизмов взаимодейÑÑ‚Ð²Ð¸Ñ OpenSCADA, так и интерфейÑа ÑƒÐ¿Ñ€Ð°Ð²Ð»ÐµÐ½Ð¸Ñ OpenSCADA, Ð´Ð»Ñ ÑƒÐ´Ð°Ð»Ñ‘Ð½Ð½Ð¾Ð³Ð¾ доÑтупа. </p><p>Ð¤Ð¸Ð½Ð°Ð»ÑŒÐ½Ð°Ñ Ð²ÐµÑ€ÑÐ¸Ñ Ñтого Ð¼Ð¾Ð´ÑƒÐ»Ñ Ð¡Ð’Ð£ обеÑпечит: </p><p>ПеречиÑлим возможноÑти, которые Ñможет и обеÑпечивает СВУ, поÑÑ‚Ñ€Ð¾ÐµÐ½Ð½Ð°Ñ Ð½Ð° оÑнове данного проекта: </p> <ul><li> три ÑƒÑ€Ð¾Ð²Ð½Ñ ÑложноÑти в формировании интерфейÑа визуализации, позволÑющие органично оÑваивать и применÑÑ‚ÑŒ инÑтрументарий по принципу — от проÑтого к Ñложному:</li></ul> <dl><dd><ol><li> формирование из шаблонных кадров, путём Ð½Ð°Ð·Ð½Ð°Ñ‡ÐµÐ½Ð¸Ñ Ð´Ð¸Ð½Ð°Ð¼Ð¸ÐºÐ¸ и без графичеÑкой конфигурации;</li> <li> графичеÑкое формирование новых кадров, путём иÑÐ¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ð½Ð¸Ñ Ð³Ð¾Ñ‚Ð¾Ð²Ñ‹Ñ… Ñлементов визуализации из библиотеки — мнемоÑхемы;</li> <li> формирование, в библиотеке, новых: кадров, шаблонных кадров и Ñлементов отображениÑ.</li></ol></dd></dl> <ul><li> поÑтроение интерфейÑов визуализации практичеÑки любой ÑложноÑти (ограниченную "диÑкретноÑтью" функций примитивов), Ð½Ð°Ñ‡Ð¸Ð½Ð°Ñ Ð¾Ñ‚ проÑÑ‚Ñ‹Ñ… интерфейÑов мониторинга и, Ð·Ð°ÐºÐ°Ð½Ñ‡Ð¸Ð²Ð°Ñ Ð¿Ð¾Ð»Ð½Ð¾Ñ†ÐµÐ½Ð½Ñ‹Ð¼Ð¸ иерархичеÑкими интерфейÑами, иÑпользуемыми в SCADA ÑиÑтемах;</li> <li> предоÑтавление различных ÑпоÑобов Ñ„Ð¾Ñ€Ð¼Ð¸Ñ€Ð¾Ð²Ð°Ð½Ð¸Ñ Ð¸ конфигурации пользовательÑкого интерфейÑа, оÑнованных на различных интерфейÑах графичеÑкого предÑÑ‚Ð°Ð²Ð»ÐµÐ½Ð¸Ñ (Qt, Web, ...), или-же поÑредÑтвом Ñтандартного интерфейÑа ÑƒÐ¿Ñ€Ð°Ð²Ð»ÐµÐ½Ð¸Ñ OpenSCADA;</li> <li> поÑтроение и ÐºÐ¾Ñ€Ñ€ÐµÐºÑ†Ð¸Ñ Ð¸Ð½Ñ‚ÐµÑ€Ñ„ÐµÐ¹Ñа, уÑтановка и Ñмена динамики в процеÑÑе иÑполнениÑ;</li> <li> поÑтроение, на уровне пользователÑ, новых шаблонных кадров и формирование Ñпециализированных, под облаÑÑ‚ÑŒ применениÑ, библиотек кадров (например, включение кадров параметров, графиков и других Ñлементов Ñ ÑƒÐ²Ñзкой их друг Ñ Ð´Ñ€ÑƒÐ³Ð¾Ð¼), ÑоглаÑно идее вторичного иÑпользованиÑ, Ð½Ð°ÐºÐ¾Ð¿Ð»ÐµÐ½Ð¸Ñ Ð¸ ÑовершенÑтвованиÑ;</li> <li> поÑтроение новых пользовательÑких Ñлементов визуализации и формирование Ñпециализированных, под облаÑÑ‚ÑŒ применениÑ, библиотек кадров, ÑоглаÑно идее вторичного иÑпользованиÑ, Ð½Ð°ÐºÐ¾Ð¿Ð»ÐµÐ½Ð¸Ñ Ð¸ ÑовершенÑтвованиÑ;</li> <li> опиÑание логики новых шаблонных кадров и пользовательÑких Ñлементов визуализации как проÑтыми ÑвÑзÑми, так и лаконичным, полноценным Ñзыком пользовательÑкого программированиÑ;</li> <li> возможноÑÑ‚ÑŒ включение, в пользовательÑкие Ñлементы визуализации, функций (или кадров вычиÑÐ»ÐµÐ½Ð¸Ñ Ñ„ÑƒÐ½ÐºÑ†Ð¸Ð¹) объектной модели OpenSCADA, практичеÑки ÑвÑÐ·Ñ‹Ð²Ð°Ñ Ð¿Ñ€ÐµÐ´Ñтавление Ñ Ð°Ð»Ð³Ð¾Ñ€Ð¸Ñ‚Ð¼Ð¾Ð¼ вычиÑлениÑ; например, Ð²Ð¸Ð·ÑƒÐ°Ð»Ð¸Ð·Ð¸Ñ€ÑƒÑ Ð±Ð¸Ð±Ð»Ð¸Ð¾Ñ‚ÐµÐºÑƒ моделей аппаратов ТП, Ð´Ð»Ñ Ð¿Ð¾Ñледующего визуального поÑÑ‚Ñ€Ð¾ÐµÐ½Ð¸Ñ Ð¼Ð¾Ð´ÐµÐ»ÐµÐ¹ ТП;</li> <li> разделение данных пользовательÑких интерфейÑов и интерфейÑов предÑÑ‚Ð°Ð²Ð»ÐµÐ½Ð¸Ñ Ñтих данных, позволÑющее Ñтроить Ð¸Ð½Ñ‚ÐµÑ€Ñ„ÐµÐ¹Ñ Ð¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ñ‚ÐµÐ»Ñ Ð² одной Ñреде, а иÑполнÑÑ‚ÑŒ во многих других (Qt, Web, ...);</li> <li> возможноÑÑ‚ÑŒ Ð¿Ð¾Ð´ÐºÐ»ÑŽÑ‡ÐµÐ½Ð¸Ñ Ðº иÑполнÑющемуÑÑ Ð¸Ð½Ñ‚ÐµÑ€Ñ„ÐµÐ¹Ñу Ð´Ð»Ñ Ð½Ð°Ð±Ð»ÑŽÐ´ÐµÐ½Ð¸Ñ Ð¸ коррекции дейÑтвий; например, при обучении операторов и ÐºÐ¾Ð½Ñ‚Ñ€Ð¾Ð»Ñ Ð·Ð° его дейÑтвиÑми в реальном времени;</li> <li> визуальное поÑтроение различных Ñхем Ñ Ð½Ð°Ð»Ð¾Ð¶ÐµÐ½Ð¸ÐµÐ¼ логичеÑких ÑвÑзей и поÑледующим централизованным иÑполнением в фоне — визуальное поÑтроение и иÑполнение математичеÑких моделей, логичеÑких Ñхем, релейных Ñхем и иного;</li> <li> предоÑтавление, в OpenSCADA, функций объектного API; может иÑпользоватьÑÑ Ð´Ð»Ñ ÑƒÐ¿Ñ€Ð°Ð²Ð»ÐµÐ½Ð¸Ñ ÑвойÑтвами интерфейÑа визуализации из пользовательÑких процедур;</li> <li> поÑтроение Ñерверов длÑ: кадров, Ñлементов визуализации и проектов интерфейÑов визуализации; Ñ Ð²Ð¾Ð·Ð¼Ð¾Ð¶Ð½Ð¾Ñтью обÑÐ»ÑƒÐ¶Ð¸Ð²Ð°Ð½Ð¸Ñ Ð¼Ð½Ð¾Ð¶ÐµÑтвенных клиентÑких Ñоединений;</li> <li> проÑÑ‚Ð°Ñ Ð¾Ñ€Ð³Ð°Ð½Ð¸Ð·Ð°Ñ†Ð¸Ñ ÐºÐ»Ð¸ÐµÐ½Ñ‚Ñких Ñтанций на различной оÑнове (Qt, Web, ...), Ñ Ð¿Ð¾Ð´ÐºÐ»ÑŽÑ‡ÐµÐ½Ð¸ÐµÐ¼ к центральному Ñерверу;</li> <li> полноценный механизм Ñ€Ð°Ð·Ð´ÐµÐ»ÐµÐ½Ð¸Ñ Ð¿Ð¾Ð»Ð½Ð¾Ð¼Ð¾Ñ‡Ð¸Ð¹ между пользователÑми, позволÑющий Ñоздавать и иÑполнÑÑ‚ÑŒ проекты Ñ Ñ€Ð°Ð·Ð»Ð¸Ñ‡Ð½Ñ‹Ð¼Ð¸ правами доÑтупа к его компонентам;</li> <li> гибкое формирование правил Ñигнализаций и уведомлениÑ, Ñ ÑƒÑ‡Ñ‘Ñ‚Ð¾Ð¼ и поддержкой различных ÑпоÑобов уведомлениÑ;</li> <li> поддержка пользовательÑкого Ñ„Ð¾Ñ€Ð¼Ð¸Ñ€Ð¾Ð²Ð°Ð½Ð¸Ñ Ð¿Ð°Ð»Ð¸Ñ‚Ñ€Ñ‹ и шрифтовых предпочтений интерфейÑа визуализации, в ÑтилÑÑ…;</li> <li> поддержка пользовательÑкого Ñ„Ð¾Ñ€Ð¼Ð¸Ñ€Ð¾Ð²Ð°Ð½Ð¸Ñ ÐºÐ°Ñ€Ñ‚ Ñобытий под различное оборудование ÑƒÐ¿Ñ€Ð°Ð²Ð»ÐµÐ½Ð¸Ñ Ð¸ пользовательÑкие предпочтениÑ;</li> <li> поддержка профилей пользователей, позволÑÑŽÑ‰Ð°Ñ Ð¾Ð¿Ñ€ÐµÐ´ÐµÐ»ÑÑ‚ÑŒ различные ÑвойÑтва интерфейÑа визуализации (Ñ†Ð²ÐµÑ‚Ð¾Ð²Ð°Ñ Ð³Ð°Ð¼Ð¼Ð°, шрифтовые оÑобенноÑти, предпочтительные карты Ñобытий);</li> <li> гибкое хранение и раÑпроÑтранение библиотек виджетов, кадров и проектов интерфейÑов визуализации в БД, поддерживаемых OpenSCADA; практичеÑки, пользователю нужно только зарегиÑтрировать полученную БД Ñ Ð´Ð°Ð½Ð½Ñ‹Ð¼Ð¸.</li></ul> <p><br /> </p> <h2><span class="mw-headline" id=".D0.9A.D0.BE.D0.BD.D1.84.D0.B8.D0.B3.D1.83.D1.80.D0.B0.D1.86.D0.B8.D1.8F_.D0.B8_.D1.84.D0.BE.D1.80.D0.BC.D0.B8.D1.80.D0.BE.D0.B2.D0.B0.D0.BD.D0.B8.D0.B5_.D0.B8.D0.BD.D1.82.D0.B5.D1.80.D1.84.D0.B5.D0.B9.D1.81.D0.BE.D0.B2_.D0.A1.D0.92.D0.A3"><span class="mw-headline-number">2</span> ÐšÐ¾Ð½Ñ„Ð¸Ð³ÑƒÑ€Ð°Ñ†Ð¸Ñ Ð¸ формирование интерфейÑов СВУ</span></h2> <p>Сам модуль не Ñодержит механизмов визуального Ñ„Ð¾Ñ€Ð¼Ð¸Ñ€Ð¾Ð²Ð°Ð½Ð¸Ñ Ð¸Ð½Ñ‚ÐµÑ€Ñ„ÐµÐ¹Ñов СВУ, такие инÑтрументы могут предоÑтавлÑÑ‚ÑŒÑÑ Ð¼Ð¾Ð´ÑƒÐ»Ñми конечной визуализации СВУ, например, он предоÑтавлÑетÑÑ Ð¼Ð¾Ð´ÑƒÐ»ÐµÐ¼ <a href="../Modules/Vision.html" title="Special:MyLanguage/Modules/Vision">Vision</a>. </p><p>Ð¥Ð¾Ñ‚Ñ Ð²Ð¸Ð·ÑƒÐ°Ð»ÑŒÐ½Ñ‹Ñ… механизмов Ñ„Ð¾Ñ€Ð¼Ð¸Ñ€Ð¾Ð²Ð°Ð½Ð¸Ñ Ð¡Ð’Ð£ модулем не предоÑтавлÑетÑÑ, Ð´Ð»Ñ ÑƒÐ¿Ñ€Ð°Ð²Ð»ÐµÐ½Ð¸Ñ Ð»Ð¾Ð³Ð¸Ñ‡ÐµÑкой Ñтруктурой предоÑтавлÑетÑÑ Ð¼ÐµÑ…Ð°Ð½Ð¸Ð·Ð¼, реализованный на оÑнове интерфейÑа ÑƒÐ¿Ñ€Ð°Ð²Ð»ÐµÐ½Ð¸Ñ OpenSCADA, а значит, доÑтупный Ð´Ð»Ñ Ð¸ÑÐ¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ð½Ð¸Ñ Ð² любом конфигураторе OpenSCADA. Диалоги Ñтого интерфейÑа раÑÑмотрены далее, в контекÑте раÑÑÐ¼Ð¾Ñ‚Ñ€ÐµÐ½Ð¸Ñ Ð°Ñ€Ñ…Ð¸Ñ‚ÐµÐºÑ‚ÑƒÑ€Ñ‹ Ð¼Ð¾Ð´ÑƒÐ»Ñ Ð¸ его данных. </p> <h2><span class="mw-headline" id=".D0.90.D1.80.D1.85.D0.B8.D1.82.D0.B5.D0.BA.D1.82.D1.83.D1.80.D0.B0"><span class="mw-headline-number">3</span> Ðрхитектура</span></h2> <p>СВУ, в целом, может работать в двух режимах — разработки и иÑполнениÑ. Ð’ режиме разработки формируетÑÑ Ð¸Ð½Ñ‚ÐµÑ€Ñ„ÐµÐ¹Ñ Ð¡Ð’Ð£ и его компоненты, определÑÑŽÑ‚ÑÑ Ð¼ÐµÑ…Ð°Ð½Ð¸Ð·Ð¼Ñ‹ взаимодейÑтвиÑ. Ð’ режиме иÑÐ¿Ð¾Ð»Ð½ÐµÐ½Ð¸Ñ Ð²Ñ‹Ð¿Ð¾Ð»Ð½ÑетÑÑ Ñ„Ð¾Ñ€Ð¼Ð¸Ñ€Ð¾Ð²Ð°Ð½Ð¸Ðµ интерфейÑа СВУ и производитÑÑ Ð²Ð·Ð°Ð¸Ð¼Ð¾Ð´ÐµÐ¹Ñтвие Ñ ÐºÐ¾Ð½ÐµÑ‡Ð½Ñ‹Ð¼ пользователем, на оÑнове разработанных СВУ. </p><p>Ð˜Ð½Ñ‚ÐµÑ€Ñ„ÐµÐ¹Ñ Ð¡Ð’Ð£ формируетÑÑ Ð¸Ð· кадров, каждый из которых, в Ñвою очередь, формируетÑÑ Ð¸Ð· Ñлементов примитивов или пользовательÑких Ñлементов интерфейÑа. При Ñтом, пользовательÑкие Ñлементы интерфейÑа также формируютÑÑ Ð¸Ð· примитивов или других пользовательÑких Ñлементов. Таким образом обеÑпечиваетÑÑ Ð¸ÐµÑ€Ð°Ñ€Ñ…Ð¸Ñ‡Ð½Ð¾ÑÑ‚ÑŒ и повторное иÑÐ¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ð½Ð¸Ñ ÑƒÐ¶Ðµ разработанных компонентов. </p><p>Кадры и пользовательÑкие Ñлементы размещаютÑÑ Ð² библиотеках виджетов. Из Ñлементов Ñтих библиотек формируютÑÑ Ð¿Ñ€Ð¾ÐµÐºÑ‚Ñ‹ интерфейÑов конечной визуализации СВУ. Ðа оÑнове-же Ñтих проектов формируютÑÑ ÑеанÑÑ‹ визуализации. </p><p>ОпиÑÐ°Ð½Ð½Ð°Ñ Ñтруктура СВУ приведена на риÑунке. </p> <div class="center"><div class="floatnone"><a class="image" href="http://oscada.org/wiki/File:VCA_struct_ru.png"><img alt="VCA struct ru.png" height="976" src="../files/VCA_struct_ru.png" width="855" /></a></div></div> <p>Ð”Ð°Ð½Ð½Ð°Ñ Ð°Ñ€Ñ…Ð¸Ñ‚ÐµÐºÑ‚ÑƒÑ€Ð° СВУ позволÑет реализовать поддержку трёх уровней ÑложноÑти у процеÑÑа разработки интерфейÑов управлениÑ: </p> <ul><li> Ð¤Ð¾Ñ€Ð¼Ð¸Ñ€Ð¾Ð²Ð°Ð½Ð¸Ñ Ð¸Ð½Ñ‚ÐµÑ€Ñ„ÐµÐ¹Ñа визуализации и ÑƒÐ¿Ñ€Ð°Ð²Ð»ÐµÐ½Ð¸Ñ (ВУ) Ñ Ð¿Ð¾Ð¼Ð¾Ñ‰ÑŒÑŽ библиотеки шаблонных кадров, путём Ð¿Ð¾Ð¼ÐµÑ‰ÐµÐ½Ð¸Ñ ÑˆÐ°Ð±Ð»Ð¾Ð½Ð¾Ð² кадров в проект и Ð½Ð°Ð·Ð½Ð°Ñ‡ÐµÐ½Ð¸Ñ Ð´Ð¸Ð½Ð°Ð¼Ð¸ÐºÐ¸.</li> <li> Ð’ дополнении к первому уровню производитÑÑ Ñ„Ð¾Ñ€Ð¼Ð¸Ñ€Ð¾Ð²Ð°Ð½Ð¸Ðµ ÑобÑтвенных кадров на оÑнове библиотеки производных и базовых виджетов. Возможно как прÑмое назначение динамики в виджете, так и поÑледующее её назначение в проекте.</li> <li> Ð’ дополнении ко второму уровню производитÑÑ ÑамоÑтоÑтельное формирование производных виджетов, новых шаблонных кадров, а также кадров Ñ Ð¸Ñпользованием механизма опиÑÐ°Ð½Ð¸Ñ Ð»Ð¾Ð³Ð¸ÐºÐ¸ взаимодейÑÑ‚Ð²Ð¸Ñ Ð¸ обработки Ñобытий на Ñзыке пользовательÑкого Ð¿Ñ€Ð¾Ð³Ñ€Ð°Ð¼Ð¼Ð¸Ñ€Ð¾Ð²Ð°Ð½Ð¸Ñ OpenSCADA.</li></ul> <p><br /> </p> <h3><span class="mw-headline" id=".D0.9A.D0.B0.D0.B4.D1.80.D1.8B_.D0.B8_.D1.8D.D0.BB.D0.B5.D0.BC.D0.B5.D0.BD.D1.82.D1.8B_.D0.BE.D1.82.D0.BE.D0.B1.D1.80.D0.B0.D0.B6.D0.B5.D0.BD.D0.B8.D1.8F_.28.D0.B2.D0.B8.D0.B4.D0.B6.D0.B5.D1.82.D1.8B.29"><span class="mw-headline-number">3.1</span> Кадры и Ñлементы Ð¾Ñ‚Ð¾Ð±Ñ€Ð°Ð¶ÐµÐ½Ð¸Ñ (виджеты)</span></h3> <p>Кадр Ñто окно, непоÑредÑтвенно предоÑтавлÑющее информацию пользователю в графичеÑкой и/или текÑтовой форме. Группа взаимоÑвÑзанных кадров формирует цельный пользовательÑкий Ð¸Ð½Ñ‚ÐµÑ€Ñ„ÐµÐ¹Ñ Ð’Ð£. </p><p>Содержимое кадра формируетÑÑ Ð¸Ð· Ñлементов Ð¾Ñ‚Ð¾Ð±Ñ€Ð°Ð¶ÐµÐ½Ð¸Ñ (виджетов). Виджеты могут быть базовыми примитивами (различные Ñлементарные фигуры, текÑÑ‚, тренд и Ñ‚.д.) и производными, Ñформированные из базовых или других производных виджетов. Ð’Ñе виджеты группируютÑÑ Ð¿Ð¾ библиотекам. Ð’ процеÑÑе работы, пользователь может формировать ÑобÑтвенные библиотеки производных виджетов. </p><p>СобÑтвенно Ñам кадр также ÑвлÑетÑÑ Ð²Ð¸Ð´Ð¶ÐµÑ‚Ð¾Ð¼, который иÑпользуетÑÑ Ð² роли конечного Ñлемента визуализации. Ð Ñто значит, что библиотеки виджетов могут хранить и заготовки кадров, и шаблоны результирующих Ñтраниц пользовательÑкого интерфейÑа. </p><p>Кадры и виджеты ÑвлÑÑŽÑ‚ÑÑ Ð¿Ð°ÑÑивными Ñлементами, которые обычно не Ñодержат ÑвÑзей Ñ Ð´Ð¸Ð½Ð°Ð¼Ð¸ÐºÐ¾Ð¹ и другими кадрами, а только предоÑтавлÑÑŽÑ‚ информацию о ÑвойÑтвах и характере динамики(конфигурации), подключаемой к ÑвойÑтвам. Ðктивированные кадры, Ñодержащие ÑÑылки на динамику и активные ÑвÑзи, формируют пользовательÑкий Ð¸Ð½Ñ‚ÐµÑ€Ñ„ÐµÐ¹Ñ Ð¸ хранÑÑ‚ÑÑ Ð² проектах. Ð’ некоторых ÑлучаÑÑ… возможно прÑмое назначение динамики в заготовках кадров. </p><p>Производные кадры/виджеты могут Ñодержать вложенные виджеты, которые могут быть Ñклеены-ÑвÑзаны один Ñ Ð´Ñ€ÑƒÐ³Ð¸Ð¼ логикой, Ñ Ð¿Ð¾Ð¼Ð¾Ñ‰ÑŒÑŽ Ñзыка пользовательÑкого Ð¿Ñ€Ð¾Ð³Ñ€Ð°Ð¼Ð¼Ð¸Ñ€Ð¾Ð²Ð°Ð½Ð¸Ñ OpenSCADA. </p> <div class="center"><div class="floatnone"><a class="image" href="http://oscada.org/wiki/File:VCA_widget_ru.png"><img alt="VCA widget ru.png" height="585" src="../files/VCA_widget_ru.png" width="800" /></a></div></div> <p>Виджет ÑвлÑетÑÑ Ñлементом, поÑредÑтвом которого обеÑпечиваетÑÑ: </p> <ul><li> Ð²Ð¸Ð·ÑƒÐ°Ð»Ð¸Ð·Ð°Ñ†Ð¸Ñ Ð¾Ð¿ÐµÑ€Ð°Ñ‚Ð¸Ð²Ð½Ð¾Ð¹ и архивной информации Ð²ÐµÐ´ÐµÐ½Ð¸Ñ Ð¢ÐŸ;</li> <li> ÑÐ¸Ð³Ð½Ð°Ð»Ð¸Ð·Ð°Ñ†Ð¸Ñ Ð¿Ñ€Ð¾ Ð½Ð°Ñ€ÑƒÑˆÐµÐ½Ð¸Ñ Ð²ÐµÐ´ÐµÐ½Ð¸Ñ Ð¢ÐŸ;</li> <li> переключение между кадрами ТП;</li> <li> управление технологичеÑким оборудованием и параметрами Ð²ÐµÐ´ÐµÐ½Ð¸Ñ Ð¢ÐŸ.</li></ul> <p>ÐаÑтройка и ÑвÑзывание виджетов производитÑÑ Ð¿Ð¾ÑредÑтвом их ÑвойÑтв. РодительÑкий виджет, и виджеты ÑодержащиеÑÑ Ð² нем, могут дополнÑÑ‚ÑŒÑÑ Ð¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ñ‚ÐµÐ»ÑŒÑкими ÑвойÑтвами. Ð’ поÑледÑтвии, пользовательÑкие и ÑтатичеÑкие атрибуты ÑвÑзываютÑÑ Ñо ÑвойÑтвами вложенных виджетов, поÑредÑтвом внутренней логики. Ð”Ð»Ñ Ð¾Ñ‚Ð¾Ð±Ñ€Ð°Ð¶ÐµÐ½Ð¸Ñ Ð´Ð¸Ð½Ð°Ð¼Ð¸ÐºÐ¸ (текущих и архивных данных) ÑвойÑтва виджетов динамизируютÑÑ, Ñ‚.е ÑвÑзываютÑÑ Ñ Ð°Ñ‚Ñ€Ð¸Ð±ÑƒÑ‚Ð°Ð¼Ð¸ параметров OpenSCADA или ÑвойÑтвами других виджетов. ИÑпользование, Ð´Ð»Ñ ÑвÑÐ·Ñ‹Ð²Ð°Ð½Ð¸Ñ Ð²Ð»Ð¾Ð¶ÐµÐ½Ð½Ñ‹Ñ… виджетов внутренней логикой, Ñзыка пользовательÑкого Ð¿Ñ€Ð¾Ð³Ñ€Ð°Ð¼Ð¼Ð¸Ñ€Ð¾Ð²Ð°Ð½Ð¸Ñ OpenSCADA Ñнимает Ð²Ð¾Ð¿Ñ€Ð¾Ñ Ñ€ÐµÐ°Ð»Ð¸Ð·Ð°Ñ†Ð¸Ð¸ Ñложной логики визуализации, обеÑÐ¿ÐµÑ‡Ð¸Ð²Ð°Ñ Ñ‚ÐµÐ¼ Ñамым выÑокую гибкоÑÑ‚ÑŒ. ПрактичеÑки, можно Ñоздавать полноÑтью динамизированные кадры Ñо Ñложными взаимоÑвÑзÑми на уровне пользователÑ. </p><p><br /> </p> <h3><span class="mw-headline" id=".D0.9F.D1.80.D0.BE.D0.B5.D0.BA.D1.82"><span class="mw-headline-number">3.2</span> <span id="Project" title="#Project">Проект</span></span></h3> <p>ÐепоÑредÑÑ‚Ð²ÐµÐ½Ð½Ð°Ñ ÐºÐ¾Ð½Ñ„Ð¸Ð³ÑƒÑ€Ð°Ñ†Ð¸Ñ, и ÑвойÑтва конечного интерфейÑа визуализации, ÑодержатÑÑ Ð² проекте интерфейÑа визуализации СВУ, которых может быть Ñоздано множеÑтво. </p><p>Каждый проект включает Ñтраницы из библиотек кадров-виджетов. Ð’ Ñ€Ñде режимов, Ñама Ñтраница может включать в ÑÐµÐ±Ñ Ð²Ð»Ð¾Ð¶ÐµÐ½Ð½Ñ‹Ðµ Ñтраницы как незавиÑимые от родительÑкой, так и Ñ Ð¸Ñпользованием родительÑкого в роли шаблона. Шаблонные Ñтраницы-виджеты позволÑÑŽÑ‚ предельно упроÑтить процеÑÑ ÑÐ¾Ð·Ð´Ð°Ð½Ð¸Ñ Ð¾Ð´Ð½Ð¾Ñ‚Ð¸Ð¿Ð½Ñ‹Ñ… кадров проÑтого мониторинга, инженером ÐСУ ТП или пользователем OpenSCADA. Примером таких однотипных кадров могут быть: группы контуров, группы графиков, протоколы и различные Ñводные таблицы. МнемоÑхемы технологичеÑких процеÑÑов редко подпадают под такую Ñхему и формируютÑÑ Ð² отдельной Ñтранице-виджете. </p><p>Страница, как и виджет на котором она оÑнована, предоÑтавлÑет возможноÑÑ‚ÑŒ привÑзки динамики к опиÑанным в ней ÑвойÑтвам — ÑвÑзи, которые могут быть уÑтановлены динамикой или конÑтантами. Кроме того, ÑвÑзывание непоÑредÑтвенно на уровне Ñтраницы проекта ÑвлÑетÑÑ Ð¿Ñ€ÐµÐ´Ð¿Ð¾Ñ‡Ñ‚Ð¸Ñ‚ÐµÐ»ÑŒÐ½Ñ‹Ð¼, чем оÑущеÑтвление Ñтого на уровне виджетов библиотек. </p><p>Пример иерархичеÑкого предÑÑ‚Ð°Ð²Ð»ÐµÐ½Ð¸Ñ ÐºÐ¾Ð¼Ð¿Ð¾Ð½ÐµÐ½Ñ‚Ð¾Ð² проекта клаÑÑичеÑкого интерфейÑа ВУ технологичеÑкого процеÑÑа, Ñ Ð¾Ð¿Ð¸Ñанием выражений Ñтандартных вызовов, приведен на риÑунке. </p> <div class="center"><div class="floatnone"><a class="image" href="http://oscada.org/wiki/File:VCA_prog_tree_ru.png"><img alt="VCA prog tree ru.png" height="681" src="../files/VCA_prog_tree_ru.png" width="437" /></a></div></div> <p>ПредуÑмотрены Ñледующие Ñпециальные ÑвойÑтва Ñтраниц: </p> <ul><li> <i>Контейнер</i> — Ñтраница ÑвлÑетÑÑ ÐºÐ¾Ð½Ñ‚ÐµÐ¹Ð½ÐµÑ€Ð¾Ð¼ вложенных Ñтраниц.</li> <li> <i>Шаблон</i> — Ñтраница ÑвлÑетÑÑ ÑˆÐ°Ð±Ð»Ð¾Ð½Ð¾Ð¼ вложенных Ñтраниц.</li> <li> <i>ПуÑто</i> — пуÑÑ‚Ð°Ñ Ð¸ Ð½ÐµÐ°ÐºÑ‚Ð¸Ð²Ð½Ð°Ñ Ñтраница. Ðто ÑвойÑтво иÑпользуетÑÑ ÑовмеÑтно Ñо ÑвойÑтвом <i>Контейнер</i>, Ð´Ð»Ñ Ð¾Ñ€Ð³Ð°Ð½Ð¸Ð·Ð°Ñ†Ð¸Ð¸ логичеÑких контейнеров Ñтраниц.</li> <li> <i>СвÑзь</i> — ÑвÑзь на другую Ñтраницу ка контейнер под-Ñтраниц, которые будут иÑпользоватьÑÑ Ð½Ð° Ñтороне иÑÐ¿Ð¾Ð»Ð½ÐµÐ½Ð¸Ñ Ð¿Ñ€Ð¾ÐµÐºÑ‚Ð¾Ð² (ÑеанÑов) без их отдельного ÑозданиÑ. </li></ul> <p>Ðа комбинациÑÑ… вышеуказанных Ñпециальных ÑвойÑтв Ñтраниц реализованы Ñледующие их типы: </p> <ul><li> <i>Стандарт</i> — ÑÑ‚Ð°Ð½Ð´Ð°Ñ€Ñ‚Ð½Ð°Ñ Ñтраница (не уÑтановлено ни одно из ÑвойÑтв), ÑвлÑетÑÑ Ð¿Ð¾Ð»Ð½Ð¾Ñ†ÐµÐ½Ð½Ð¾Ð¹ конечной Ñтраницей.</li> <li> <i>Контейнер</i> — Ð¿Ð¾Ð»Ð½Ð¾Ñ†ÐµÐ½Ð½Ð°Ñ Ñтраница Ñо ÑвойÑтвом контейнера (<i>Контейнер</i>).</li> <li> <i>ЛогичеÑкий контейнер</i> — логичеÑкий контейнер, фактичеÑки Ñам не ÑвлÑющийÑÑ Ñтраницей (<i>Контейнер</i>|<i>ПуÑто</i>), выполнÑет роль промежуточного и группирующего Ñлемента в дереве Ñтраниц.</li> <li> <i>Шаблон</i> — Ñтраница-шаблон (<i>Шаблон</i>). ЧиÑÑ‚Ð°Ñ ÑˆÐ°Ð±Ð»Ð¾Ð½Ð½Ð°Ñ Ñтраница, иÑпользуетÑÑ Ð´Ð»Ñ Ð¾Ð¿Ð¸ÑÐ°Ð½Ð¸Ñ Ð¾Ð±Ñ‰Ð¸Ñ… ÑвойÑтв и Ð´Ð¾Ð¾Ð¿Ñ€ÐµÐ´ÐµÐ»ÐµÐ½Ð¸Ñ Ð¸Ñ… во вложенных Ñтраницах, в чаÑтном порÑдке.</li> <li> <i>Контейнер и шаблон</i> — Ñтраница шаблон и контейнер (<i>Шаблон</i>|<i>Контейнер</i>), Ñовмещает функции шаблона и контейнера.</li> <li> <i>СвÑзь</i> — ÑвÑзь на другую Ñтраницу. СвÑзи могут быть иÑпользованы на полноÑтью динамичеÑких и выÑоко тиражируемых Ñтраницах, Ð´Ð»Ñ Ð¾Ð¿Ñ‚Ð¸Ð¼Ð¸Ð·Ð°Ñ†Ð¸Ð¸ иÑÐ¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ð½Ð¸Ñ Ð¿Ð°Ð¼Ñти. Ð”Ð»Ñ Ñ€Ð°Ð·Ð´ÐµÐ»ÐµÐ½Ð¸Ñ Ð¾Ñ‚ÐºÑ€Ñ‹Ñ‚Ð¸Ñ ÑвÑзанных Ñтраниц Ð’Ñ‹ должны иÑпользовать атрибут "path". Ð¤ÑƒÐ½ÐºÑ†Ð¸Ñ uiCmd() <a href="#UserAPI">пользовательÑкого API</a> должна иÑпользоватьÑÑ Ð´Ð»Ñ ÑƒÐ¿Ñ€Ð°Ð²Ð»ÐµÐ½Ð¸Ñ Ñтраницами Ñтого типа вмеÑто прÑмой запиÑи в атрибуты Ñтраниц "pgOpen" и "pgOpenSrc".</li></ul> <p>Ðа Ñтороне визуализации (RunTime) поÑтроена логика, Ñ€ÐµÐ³ÑƒÐ»Ð¸Ñ€ÑƒÑŽÑ‰Ð°Ñ ÐºÐ°ÐºÐ¸Ð¼ образом открывать Ñтраницы, на оÑнове Ñледующих атрибутов базового Ñлемента "Box": </p> <ul><li> <i>pgOpen</i> — признак "Страница открыта";</li> <li> <i>pgNoOpenProc</i> — признак "ИÑполнÑÑ‚ÑŒ Ñтраницу даже еÑли она не открыта";</li> <li> <i>pgOpenSrc</i> — Ñодержит Ð°Ð´Ñ€ÐµÑ Ð²Ð¸Ð´Ð¶ÐµÑ‚Ð°, или Ñтраницы, открывшей текущую Ñтраницу; в Ñлучае вложенного контейнерного виджета здеÑÑŒ ÑодержитÑÑ Ð°Ð´Ñ€ÐµÑ Ð²ÐºÐ»ÑŽÑ‡Ð°ÐµÐ¼Ð¾Ð¹ Ñтраницы; Ð´Ð»Ñ Ð¾Ñ‚ÐºÑ€Ñ‹Ñ‚Ð¸Ñ Ñтраницы из Ñкрипта доÑтаточно здеÑÑŒ указать Ð°Ð´Ñ€ÐµÑ Ð²Ð¸Ð´Ð¶ÐµÑ‚Ð°-иÑточника открытиÑ, но Ð´Ð»Ñ Ñтраниц типа "СвÑзь" Ð’Ñ‹ должны отдавать предпочтение иÑпользованию функции uiCmd() <a href="#UserAPI">пользовательÑкого API</a>, Ð´Ð»Ñ ÑƒÐ¿Ñ€Ð°Ð²Ð»ÐµÐ½Ð¸Ñ Ñтраницами;</li> <li> <i>pgGrp</i> — группа Ñтраниц, иÑпользуетÑÑ Ð´Ð»Ñ ÑвÑзки контейнеров Ñтраниц Ñо Ñтраницами, ÑоглаÑно общей группы. ПУСТÐЯ и "main" группа предуÑматривает иÑпользование Ñтой Ñтраницы как Корневую-оÑновную Ñтраницу, Ñ‚.е. Ñ‚Ð°ÐºÐ°Ñ Ð±ÑƒÐ´ÐµÑ‚ заменÑÑ‚ÑŒ другие Корневые-главные Ñтраницы; группа "fl" предназначена Ð´Ð»Ñ Ð¸ÑÐ¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ð½Ð¸Ñ Ð²Ð¾ внешних окнах, которые предуÑмотрены Ð´Ð»Ñ Ð¼Ð½Ð¾Ð³Ð¾Ñ€Ð°Ð·Ð¾Ð²Ð¾Ð³Ð¾ одновременного Ð¾Ñ‚ÐºÑ€Ñ‹Ñ‚Ð¸Ñ Ð¸ которые не должны отÑлеживатьÑÑ Ð½Ð° дубликаты; оÑтальные предуÑмотрено Ð´Ð»Ñ Ð²ÐºÐ»ÑŽÑ‡ÐµÐ½Ð¸Ñ Ð² контейнеры-бокÑÑ‹ или одноразового одновременного открытиÑ, Ñ‚.е. они принудительно проверÑÑŽÑ‚ÑÑ Ð½Ð° дубликаты, когда поÑледнее открываетÑÑ, а предыдущие закрываютÑÑ.</li></ul> <p>Логика Ð¾Ð¿Ñ€ÐµÐ´ÐµÐ»ÐµÐ½Ð¸Ñ ÑпоÑоба Ð¾Ñ‚ÐºÑ€Ñ‹Ñ‚Ð¸Ñ Ñтраниц работает Ñледующим образом: </p> <ul><li> еÑли Ñтраница имеет группу "main" или Ñовпадает Ñ Ð³Ñ€ÑƒÐ¿Ð¿Ð¾Ð¹ Ñтраницы в главном окне или нет Ñтраницы на главном окне, то открывать Ñтраницу в главном окне;</li> <li> еÑли Ñтраница имеет группу, ÐºÐ¾Ñ‚Ð¾Ñ€Ð°Ñ Ñовпадает Ñ Ð³Ñ€ÑƒÐ¿Ð¿Ð¾Ð¹ одного из контейнеров текущей Ñтраницы, то открыть в Ñтом контейнере;</li> <li> еÑли иÑточник Ð¾Ñ‚ÐºÑ€Ñ‹Ñ‚Ð¸Ñ Ñтраницы Ñовпадает Ñ Ñ‚ÐµÐºÑƒÑ‰ÐµÐ¹ Ñтраницей, то открыть в виде дополнительного окна над текущей Ñтраницей;</li> <li> передать вызов на Ð·Ð°Ð¿Ñ€Ð¾Ñ Ð¾Ñ‚ÐºÑ€Ñ‹Ñ‚Ð¸Ñ Ð´Ð¾Ð¿Ð¾Ð»Ð½Ð¸Ñ‚ÐµÐ»ÑŒÐ½Ñ‹Ð¼ окнам, Ñ Ð¾Ð±Ñ€Ð°Ð±Ð¾Ñ‚ÐºÐ¾Ð¹ у каждого по первым трем пунктам;</li> <li> еÑли никто из родÑтвенных окон не открыл новую Ñтраницу то открыть её как родÑтвенное окно главного окна.</li></ul> <p><br /> </p> <h3><span class="mw-headline" id=".D0.A1.D0.B5.D0.B0.D0.BD.D1.81_.D0.B8.D1.81.D0.BF.D0.BE.D0.BB.D0.BD.D0.B5.D0.BD.D0.B8.D1.8F_.D0.BF.D1.80.D0.BE.D0.B5.D0.BA.D1.82.D0.B0"><span class="mw-headline-number">3.3</span> Ð¡ÐµÐ°Ð½Ñ Ð¸ÑÐ¿Ð¾Ð»Ð½ÐµÐ½Ð¸Ñ Ð¿Ñ€Ð¾ÐµÐºÑ‚Ð°</span></h3> <p>Ð¡ÐµÐ°Ð½Ñ Ð¿Ñ€Ð¾ÐµÐºÑ‚Ð° Ñто развёрнутое дерево проекта непоÑредÑтвенного его иÑполнениÑ, включающего отдельную задачу иерархичеÑкого иÑÐ¿Ð¾Ð»Ð½ÐµÐ½Ð¸Ñ Ð¿Ñ€Ð¾Ñ†ÐµÐ´ÑƒÑ€ виджетов. Ð”Ð»Ñ ÐºÐ°Ð¶Ð´Ð¾Ð³Ð¾ проекта может быть открыто множеÑтво ÑеанÑов. Формирование конечного интерфейÑа визуализации оÑущеÑтвлÑетÑÑ Ð²Ð¸Ð·ÑƒÐ°Ð»Ð¸Ð·Ð°Ñ‚Ð¾Ñ€Ð°Ð¼Ð¸, иÑÑ…Ð¾Ð´Ñ Ð¸Ð· данных ÑеанÑа проекта, поÑле ÑÐ¾Ð·Ð´Ð°Ð½Ð¸Ñ ÑеанÑа по запроÑу. </p><p>Между виджетами, на различных уровнÑÑ… иерархии, в конечном Ñчёте выÑтраиваютÑÑ Ð´Ð¾Ñтаточно Ñложные наÑледÑтвенные ÑвÑзи, которые определÑÑŽÑ‚ÑÑ Ð²Ð¾Ð·Ð¼Ð¾Ð¶Ð½Ð¾Ñтью иÑÐ¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ð½Ð¸Ñ Ð¾Ð´Ð½Ð¸Ñ… виджетов другими, Ð½Ð°Ñ‡Ð¸Ð½Ð°Ñ Ñ Ð±Ð¸Ð±Ð»Ð¸Ð¾Ñ‚ÐµÑ‡Ð½Ð¾Ð³Ð¾ виджета и Ð·Ð°ÐºÐ°Ð½Ñ‡Ð¸Ð²Ð°Ñ Ð²Ð¸Ð´Ð¶ÐµÑ‚Ð¾Ð¼ ÑеанÑа. Ð”Ð»Ñ Ñ€Ð°Ð·ÑŠÑÑÐ½ÐµÐ½Ð¸Ñ Ñтих оÑобенноÑтей взаимодейÑтвиÑ, на риÑунке изображена иÑÑ‡ÐµÑ€Ð¿Ñ‹Ð²Ð°ÑŽÑ‰Ð°Ñ ÐºÐ°Ñ€Ñ‚Ð° "иÑпользующего" наÑледованиÑ. </p> <div class="center"><div class="floatnone"><a class="image" href="http://oscada.org/wiki/File:VCA_map_inher_ru.png"><img alt="VCA map inher ru.png" height="1083" src="../files/VCA_map_inher_ru.png" width="794" /></a></div></div> <p>Ðа уровне ÑеанÑов, виджет Ñодержит объект значений процедуры обÑчёта. Ðтот объект инициируетÑÑ Ð¸ иÑпользуетÑÑ Ð² Ñлучае Ð½Ð°Ð»Ð¸Ñ‡Ð¸Ñ Ñамой процедуры вычиÑлениÑ. Ð’ момент инициализации ÑоздаётÑÑ Ð¿ÐµÑ€ÐµÑ‡ÐµÐ½ÑŒ параметров процедуры и выполнÑетÑÑ ÐµÑ‘ компилÑÑ†Ð¸Ñ Ñ Ñтими параметрами, в модуле, реализующем выбранный Ñзык Ð¿Ñ€Ð¾Ð³Ñ€Ð°Ð¼Ð¼Ð¸Ñ€Ð¾Ð²Ð°Ð½Ð¸Ñ Ð¸ Ñ Ð½Ð°Ð·Ð²Ð°Ð½Ð¸ÐµÐ¼ результирующей процедуры в виде закодированного полного имени виджета. Ð¡ÐºÐ¾Ð¼Ð¿Ð¸Ð»Ð¸Ñ€Ð¾Ð²Ð°Ð½Ð½Ð°Ñ Ñ„ÑƒÐ½ÐºÑ†Ð¸Ñ Ð¿Ð¾Ð´ÐºÐ»ÑŽÑ‡Ð°ÐµÑ‚ÑÑ Ðº объекту значений процедуры обÑчёта, а далее выполнÑетÑÑ ÐµÑ‘ вычиÑление Ñ Ð¿ÐµÑ€Ð¸Ð¾Ð´Ð¾Ð¼ ÑеанÑа. </p><p>ВычиÑление и обработка виджета выполнÑетÑÑ Ð² Ñледующей поÑледовательноÑти: </p> <ul><li> выбираютÑÑ ÑобытиÑ, доÑтупные на момент вычиÑлениÑ, из атрибута "event" виджета;</li> <li> ÑÐ¾Ð±Ñ‹Ñ‚Ð¸Ñ Ð·Ð°Ð³Ñ€ÑƒÐ¶Ð°ÑŽÑ‚ÑÑ Ð² параметр "event" объекта вычиÑлениÑ; </li> <li> в объект вычиÑÐ»ÐµÐ½Ð¸Ñ Ð·Ð°Ð³Ñ€ÑƒÐ¶Ð°ÑŽÑ‚ÑÑ Ð·Ð½Ð°Ñ‡ÐµÐ½Ð¸Ñ Ð¿Ð¾ входным ÑвÑзÑм; </li> <li> в объект вычиÑÐ»ÐµÐ½Ð¸Ñ Ð·Ð°Ð³Ñ€ÑƒÐ¶Ð°ÑŽÑ‚ÑÑ Ð·Ð½Ð°Ñ‡ÐµÐ½Ð¸Ñ Ñпециальных переменных (f_frq, f_start и f_stop); </li> <li> в объект вычиÑÐ»ÐµÐ½Ð¸Ñ Ð·Ð°Ð³Ñ€ÑƒÐ¶Ð°ÑŽÑ‚ÑÑ Ð·Ð½Ð°Ñ‡ÐµÐ½Ð¸Ñ Ð²Ñ‹Ð±Ñ€Ð°Ð½Ð½Ñ‹Ñ… параметров виджета; </li> <li> вычиÑление; </li> <li> выгрузка значений объекта вычиÑÐ»ÐµÐ½Ð¸Ñ Ð² выбранные параметры виджета; </li> <li> выгрузка Ñобытий из параметра "event" объекта вычиÑлениÑ;</li> <li> обработка Ñобытий и передача необработанных на уровень выше.</li></ul> <p>Объекты ÑеанÑа наÑледуютÑÑ Ð¾Ñ‚ абÑтрактного объекта "Widget" и иÑпользуют ÑоответÑтвующие объекты проекта. Так, ÑÐµÐ°Ð½Ñ "Session" иÑпользует проект "Project" и формирует на оÑнове него развёрнутое дерево. Страница проекта "Page" прÑмо иÑпользуетÑÑ Ñтраницей ÑеанÑа "SessPage". ОÑтальные объекты "SessWdg" разворачиваютÑÑ Ð² ÑоответÑтвии Ñ Ð¸ÐµÑ€Ð°Ñ€Ñ…Ð¸ÐµÐ¹ Ñлементов Ñтраницы. </p><p>Ð’ дополнение к Ñтандартным ÑвойÑтвам абÑтрактного виджета "Widget", Ñлементы Ñтраницы и Ñами Ñтраницы ÑеанÑа получают ÑвойÑтва: Ñ…Ñ€Ð°Ð½ÐµÐ½Ð¸Ñ Ð¾Ð±ÑŠÐµÐºÑ‚Ð° значений вычиÑлительной процедуры, обÑчёта процедур и механизм обработки Ñобытий. Страницы ÑеанÑа, в дополнение ко вÑему, Ñодержат контейнер Ñледующих по иерархии Ñтраниц. СеанÑ, в целом, вычиÑлÑетÑÑ Ñ ÑƒÐºÐ°Ð·Ð°Ð½Ð½Ð¾Ð¹ периодичноÑтью и в поÑледовательноÑти: </p> <ul><li> "Страница верхнего уровнÑ" -> "Страница нижнего уровнÑ"</li> <li> "Виджет нижнего уровнÑ" -> "Виджет верхнего уровнÑ"</li></ul> <p>Ð¢Ð°ÐºÐ°Ñ Ð¿Ð¾Ð»Ð¸Ñ‚Ð¸ÐºÐ° позволÑет обходить Ñтраницы в ÑоответÑтвии Ñ Ð¸Ñ… иерархией, а ÑобытиÑм в виджетах "вÑплывать" на верх за одну итерацию. </p><p>СеанÑÑ‹ поддерживают многоÑзычноÑÑ‚ÑŒ на уровне <a href="../../en/API.html#CntrNode" title="Special:MyLanguage/Documents/API">интерфейÑа ÑƒÐ¿Ñ€Ð°Ð²Ð»ÐµÐ½Ð¸Ñ OpenSCADA</a>, ÐºÐ¾Ñ‚Ð¾Ñ€Ð°Ñ Ð·Ð°Ð²Ð¸Ñит от Ð·Ð½Ð°Ñ‡ÐµÐ½Ð¸Ñ Ð¾Ð±Ñ‰Ð¸Ñ… атрибутов "lang" и "user", и которые визуализатор может уÑтанавливать в ÑоответÑтвии Ñо Ñвоим Ñзыком. Ðта Ñ„ÑƒÐ½ÐºÑ†Ð¸Ñ Ð²ÐºÐ»ÑŽÑ‡Ð°ÐµÑ‚ÑÑ <a href="../Program_manual.html#Config" title="Special:MyLanguage/Documents/Program manual">динамичеÑким переводом Ñообщений OpenSCADA</a>. </p><p><br /> </p> <h3><span class="mw-headline" id=".D0.A1.D1.82.D0.B8.D0.BB.D0.B8"><span class="mw-headline-number">3.4</span> Стили</span></h3> <p>ИзвеÑтно, что человек может иметь индивидуальные оÑобенноÑти воÑприÑÑ‚Ð¸Ñ Ð³Ñ€Ð°Ñ„Ð¸Ñ‡ÐµÑкой информации. ЕÑли Ñти оÑобенноÑти не учитывать то можно получить неприÑтие и отторжение Ð¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ñ‚ÐµÐ»Ñ Ðº интерфейÑу ВУ. Такое неприÑтие и отторжение может привеÑти к фатальным ошибкам при управлении ТП, а также травмировать человека поÑтоÑнной работой Ñ Ð¸Ð½Ñ‚ÐµÑ€Ñ„ÐµÐ¹Ñом. Ð’ SCADA ÑиÑтемах принÑÑ‚Ñ‹ ÑоглашениÑ, которые регламентируют Ñ‚Ñ€ÐµÐ±Ð¾Ð²Ð°Ð½Ð¸Ñ Ð¿Ð¾ Ñозданию унифицированного интерфейÑа ВУ, нормально воÑпринимаемого большинÑтвом людей. При Ñтом, практичеÑки отÑутÑтвует учёт оÑобенноÑтей людей Ñ Ð½ÐµÐºÐ¾Ñ‚Ð¾Ñ€Ñ‹Ð¼Ð¸ отклонениÑми. </p><p>С целью учеÑÑ‚ÑŒ Ñто обÑтоÑтельÑтво, и предоÑтавить возможноÑÑ‚ÑŒ централизованно и проÑто изменÑÑ‚ÑŒ визуальные ÑвойÑтва интерфейÑа, проектом реализуетÑÑ Ð¼ÐµÐ½ÐµÐ´Ð¶ÐµÑ€ Ñтилей интерфейÑа визуализации. </p><p>Пользователем может быть Ñоздано множеÑтво Ñтилей, каждый из которых будет хранить цветовые, шрифтовые и другие ÑвойÑтва Ñлементов кадра. ПроÑÑ‚Ð°Ñ Ñмена ÑÑ‚Ð¸Ð»Ñ Ð¿Ð¾Ð·Ð²Ð¾Ð»Ð¸Ñ‚ быÑтро преобразить Ð¸Ð½Ñ‚ÐµÑ€Ñ„ÐµÐ¹Ñ Ð’Ð£, а возможноÑÑ‚ÑŒ Ð½Ð°Ð·Ð½Ð°Ñ‡ÐµÐ½Ð¸Ñ Ð¸Ð½Ð´Ð¸Ð²Ð¸Ð´ÑƒÐ°Ð»ÑŒÐ½Ð¾Ð³Ð¾ ÑÑ‚Ð¸Ð»Ñ Ð´Ð»Ñ Ð¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ñ‚ÐµÐ»Ñ Ð¿Ð¾Ð·Ð²Ð¾Ð»Ð¸Ñ‚ учеÑÑ‚ÑŒ его оÑобенноÑти. </p><p>Ð”Ð»Ñ Ñ€ÐµÐ°Ð»Ð¸Ð·Ð°Ñ†Ð¸Ð¸ Ñтой возможноÑти, при Ñоздании кадров, необходимо Ð´Ð»Ñ ÑвойÑтв цвета, шрифта и других уÑтановить параметр "КонфигурациÑ" (таблицы во вкладке "Обработка") в значение "Из ÑтилÑ". Рв параметре "Конфигурационный шаблон" указать идентификатор Ð¿Ð¾Ð»Ñ ÑтилÑ. Далее, Ñто поле автоматичеÑки поÑвитÑÑ Ð² менеджере Ñтилей и его можно будет там менÑÑ‚ÑŒ. Менеджер Ñтилей доÑтупен на Ñтранице конфигурации проекта во вкладке "Стили". Ðа Ñтой вкладке можно Ñтили Ñоздавать, удалÑÑ‚ÑŒ и изменÑÑ‚ÑŒ, удалÑÑ‚ÑŒ их полÑ. </p> <div class="center"><div class="thumb tnone"><div class="thumbinner" style="width:768px;"><a class="image" href="http://oscada.org/wiki/File:VCA_prj_stl.png"><img class="thumbimage" height="719" src="../../en/files/VCA_prj_stl.png" width="766" /></a> <div class="thumbcaption">РиÑунок. Вкладка "Стили" Ñтраницы конфигурации проекта.</div></div></div></div> <p>In general, the styles are available from the project level. At the level of the widget libraries you can only define the style fields for the widgets. At the project level, at the choice of style, it is started the work with styles, which includes access to the fields of styles instead of direct attribute values. In fact, this means that when reading or writing a widget attribute these operations will be carried out with the corresponding field of the chosen style. The configuration field "Write to style in the execution context" allows of dynamic changing the style fields in the execution context by writing to the proper attributes, but that can be done in wrong, so that is why the field is disabled by default. </p><p>When starting a project, the project-style will be used. The user can choose a style from the list of available styles of the running project. The user-selected style will be saved and used in next time the project is launched. </p><p><br /> </p> <h3><span class="mw-headline" id=".D0.A1.D0.BE.D0.B1.D1.8B.D1.82.D0.B8.D1.8F.2C_.D0.B8.D1.85_.D0.BE.D0.B1.D1.80.D0.B0.D0.B1.D0.BE.D1.82.D0.BA.D0.B0_.D0.B8_.D0.BA.D0.B0.D1.80.D1.82.D1.8B_.D1.81.D0.BE.D0.B1.D1.8B.D1.82.D0.B8.D0.B9"><span class="mw-headline-number">3.5</span> СобытиÑ, их обработка и карты Ñобытий</span></h3> <p>Ð£Ñ‡Ð¸Ñ‚Ñ‹Ð²Ð°Ñ Ñпектр задач, Ð´Ð»Ñ ÐºÐ¾Ñ‚Ð¾Ñ€Ñ‹Ñ… может иÑпользоватьÑÑ OpenSCADA, нужно предуÑмотреть механизм ÑƒÐ¿Ñ€Ð°Ð²Ð»ÐµÐ½Ð¸Ñ Ð¸Ð½Ñ‚ÐµÑ€Ð°ÐºÑ‚Ð¸Ð²Ð½Ñ‹Ð¼Ð¸ пользовательÑкими ÑобытиÑми. Ðто ÑвÑзано Ñ Ñ‚ÐµÐ¼, что при решении отдельных задач вÑтраиваемых ÑиÑтем, уÑтройÑтва ввода и ÑƒÐ¿Ñ€Ð°Ð²Ð»ÐµÐ½Ð¸Ñ Ð¼Ð¾Ð³ÑƒÑ‚ значительно отличатÑÑ. Впрочем, доÑтаточно взглÑнуть на обычную офиÑную клавиатуру и клавиатуру ноутбука, чтобы ÑнÑÑ‚ÑŒ любые ÑÐ¾Ð¼Ð½ÐµÐ½Ð¸Ñ Ð¾ необходимоÑти менеджера Ñобытий. </p><p>Менеджер Ñобытий должен работать иÑÐ¿Ð¾Ð»ÑŒÐ·ÑƒÑ ÐºÐ°Ñ€Ñ‚Ñ‹ Ñобытий. Карта Ñобытий — Ñто ÑпиÑок именованных Ñобытий Ñ ÑƒÐºÐ°Ð·Ð°Ð½Ð¸ÐµÐ¼ его проиÑхождениÑ. ПроиÑхождением ÑÐ¾Ð±Ñ‹Ñ‚Ð¸Ñ Ð¼Ð¾Ð¶ÐµÑ‚ быть клавиатура, манипулÑтор мыши, джойÑтик и Ñ‚.д. При возникновении ÑÐ¾Ð±Ñ‹Ñ‚Ð¸Ñ Ð¼ÐµÐ½ÐµÐ´Ð¶ÐµÑ€ Ñобытий ищет его в активной карте и ÑопоÑтавлÑет Ñ Ð¸Ð¼ÐµÐ½ÐµÐ¼ ÑобытиÑ. СопоÑтавленное Ð¸Ð¼Ñ ÑÐ¾Ð±Ñ‹Ñ‚Ð¸Ñ Ð¿Ð¾Ð¼ÐµÑ‰Ð°ÐµÑ‚ÑÑ Ð² очередь на обработку. Виджеты, в Ñтом Ñлучае, должны обрабатывать полученную очередь Ñобытий. </p><p>ÐÐºÑ‚Ð¸Ð²Ð½Ð°Ñ ÐºÐ°Ñ€Ñ‚Ð° Ñобытий указываетÑÑ Ð² профиле каждого Ð¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ñ‚ÐµÐ»Ñ Ð¸Ð»Ð¸ уÑтанавливаетÑÑ Ð¿Ð¾ умолчанию, <span style="color: red">в планах</span>. </p><p>Ð’ целом, предуÑмотрены четыре типа Ñобытий: </p> <ul><li> ÑÐ¾Ð±Ñ‹Ñ‚Ð¸Ñ Ð¾Ð±Ñ€Ð°Ð·Ð¾Ð²-примитивов СВУ (префикÑ: <b>ws_</b>), например, Ñобытие Ð½Ð°Ð¶Ð°Ñ‚Ð¸Ñ Ñкранной кнопки — "ws_BtPress";</li> <li> клавишные ÑÐ¾Ð±Ñ‹Ñ‚Ð¸Ñ (префикÑ: <b>key_</b>) — вÑе ÑÐ¾Ð±Ñ‹Ñ‚Ð¸Ñ Ð¾Ñ‚ клавиатуры и мыши в виде "key_presAlt1";</li> <li> пользовательÑкие ÑÐ¾Ð±Ñ‹Ñ‚Ð¸Ñ (префикÑ: <b>usr_</b>), генерируютÑÑ Ð¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ñ‚ÐµÐ»ÐµÐ¼ в процедурах обÑчёта виджетов;</li> <li> мапированные ÑÐ¾Ð±Ñ‹Ñ‚Ð¸Ñ (префикÑ: <b>map_</b>) — ÑобытиÑ, полученные из карты Ñобытий, <span style="color: red">в планах</span>.</li></ul> <p>Само Ñобытие предÑтавлÑет недоÑтаточно информации, оÑобенно еÑли его обработка проиÑходит на уровнÑÑ… выше. Ð”Ð»Ñ Ð¾Ð´Ð½Ð¾Ð·Ð½Ð°Ñ‡Ð½Ð¾Ð¹ идентификации ÑÐ¾Ð±Ñ‹Ñ‚Ð¸Ñ Ð¸ его иÑточника, Ñобытие, в целом, запиÑываетÑÑ Ñледующим образом: "ws_BtPress:/curtime". Где: </p> <dl><dd><i>ws_BtPress</i> — Ñобытие;</dd> <dd><i>/curtime</i> — путь к дочернему Ñлементу, Ñгенерировавшее Ñобытие.</dd></dl> <p>Ð’ таблице 3.5 приведён перечень Ñтандартных Ñобытий, поддержка которых должна быть обеÑпечена в визуализаторах СВУ. </p><p><b>Table 3.5.</b> Standard events </p> <table class="wikitable"> <tr> <th> Identifier </th> <th> Description </th></tr> <tr> <td colspan="2"> <i>Keyboard events:</i> <b>key_[pres|rels][Ctrl|Alt|Shift]{Key}</b> </td></tr> <tr> <td> *SC#3b </td> <td> Scan-code of the key. </td></tr> <tr> <td> *#2cd5 </td> <td> Code of the unnamed key. </td></tr> <tr> <td> *Esc </td> <td> "Esc". </td></tr> <tr> <td> *BackSpace </td> <td> Removing of the previous character — "<--". </td></tr> <tr> <td> *Return, *Enter </td> <td> Enter — "Enter". </td></tr> <tr> <td> *Insert </td> <td> Insertion — "Insert". </td></tr> <tr> <td> *Delete </td> <td> Deleting — "Delete". </td></tr> <tr> <td> *Pause </td> <td> Pause — "Pause". </td></tr> <tr> <td> *Print </td> <td> Print of the screen — "Print Screen". </td></tr> <tr> <td> *Home </td> <td> Home — "Home". </td></tr> <tr> <td> *End </td> <td> End — "End". </td></tr> <tr> <td> *Left </td> <td> To the left — "<-". </td></tr> <tr> <td> *Up </td> <td> To the up — '^'. </td></tr> <tr> <td> *Right </td> <td> To the right — "->". </td></tr> <tr> <td> *Down </td> <td> To the down — '\/'. </td></tr> <tr> <td> *PageUp </td> <td> Page up — "PageUp". </td></tr> <tr> <td> *PageDown </td> <td> Page down — "PageDown". </td></tr> <tr> <td> *F1 ... *F35 </td> <td> Function key from "F1" to "F35". </td></tr> <tr> <td> *Space </td> <td> Space — ' '. </td></tr> <tr> <td> *Apostrophe </td> <td> Apostrophe — '`'. </td></tr> <tr> <td> *Asterisk </td> <td> Asterisk on the additional field of the keyboard — '*'. </td></tr> <tr> <td> *Plus </td> <td> Plus on the additional field of the keyboard — '+'. </td></tr> <tr> <td> *Comma </td> <td> Comma — ','. </td></tr> <tr> <td> *Minus </td> <td> Minus — '-'. </td></tr> <tr> <td> *Period </td> <td> Period — '.'. </td></tr> <tr> <td> *Slash </td> <td> Slash — '\'. </td></tr> <tr> <td> *0 ... *9 </td> <td> Number from '0' to '9'. </td></tr> <tr> <td> *Semicolon </td> <td> Semicolon — ';'. </td></tr> <tr> <td> *Equal </td> <td> Equal — '='. </td></tr> <tr> <td> *A ... *Z </td> <td> Keys of Latin alphabet from 'A' to 'Z'. </td></tr> <tr> <td> *BracketLeft </td> <td> Left square bracket - '['. </td></tr> <tr> <td> *BackSlash </td> <td> Backslash — '/'. </td></tr> <tr> <td> *BracketRight </td> <td> Right square bracket — ']'. </td></tr> <tr> <td> *QuoteLeft </td> <td> Left quote — <b>.</b> </td></tr> <tr> <td colspan="2"> <i>Keyboard focus events.</i> </td></tr> <tr> <td> ws_FocusIn </td> <td> Focus is obtained by the widget. </td></tr> <tr> <td> ws_FocusOut </td> <td> Focus is lost by the widget. </td></tr> <tr> <td colspan="2"> <i>Mouse events:</i> </td></tr> <tr> <td> key_mouse[Pres|Rels][Left|Right|Midle] </td> <td> Pressed/released the mouse button. </td></tr> <tr> <td> key_mouseDblClick </td> <td> Double-click the left mouse button. </td></tr> <tr> <td colspan="2"> <i>Events of quietance on the side of the visualizer.</i> </td></tr> <tr> <td> ws_alarmChange </td> <td> Notifies about the alarm status change, the attribute "alarmSt". </td></tr> <tr> <td> ws_alarmLev </td> <td> Quietance of all violations by all notices methods and types. </td></tr> <tr> <td> ws_alarmNtf{N} </td> <td> Quietance of all violations by the type {N} (0...7). </td></tr> <tr> <td colspan="2"> <i>Events of the elementary figure primitive <b>ElFigure</b>:</i> </td></tr> <tr> <td> ws_Fig[Left|Right|Midle|DblClick] </td> <td> Activating of the figures (fills) by the mouse button. </td></tr> <tr> <td> ws_Fig{N}[Left|Right|Midle|DblClick] </td> <td> Activating of the figure (fill) <i>N</i> by the mouse button. </td></tr> <tr> <td colspan="2"> <i>Events of the form element primitive <b>FormEl</b>:</i> </td></tr> <tr> <td> ws_LnAccept </td> <td> A new value in the input line is set. </td></tr> <tr> <td> ws_TxtAccept </td> <td> The value of the text editor is changed. </td></tr> <tr> <td> ws_ChkChange </td> <td> The state of the flag is changed. </td></tr> <tr> <td> ws_BtPress </td> <td> The button is pressed. </td></tr> <tr> <td> ws_BtRelease </td> <td> The button is released. </td></tr> <tr> <td> ws_BtToggleChange </td> <td> The button toggle is changed. </td></tr> <tr> <td> ws_BtMenu={Item} </td> <td> Selection of the menu <i>Item</i> on the button. </td></tr> <tr> <td> ws_BtLoad </td> <td> The selected file loaded. </td></tr> <tr> <td> ws_CombChange </td> <td> The value of the combo box is changed. </td></tr> <tr> <td> ws_ListChange </td> <td> The current list item is changed. </td></tr> <tr> <td> ws_TreeChange </td> <td> The current tree item is changed. </td></tr> <tr> <td> ws_TableChangeSel </td> <td> The table item selection is changed. </td></tr> <tr> <td> ws_TableEdit_{colN}_{rowN} </td> <td> The table cell ({colN}:{rowN}) is edited. </td></tr> <tr> <td> ws_SliderChange </td> <td> The slider position is changed. </td></tr> <tr> <td colspan="2"> <i>Events of the media content primitive <b>Media</b>:</i> </td></tr> <tr> <td> ws_MapAct{N}[Left|Right|Midle] </td> <td> Media area with the number <i>N</i> is activated by the mouse button. </td></tr> <tr> <td> ws_MediaFinished </td> <td> Media-stream play is finished. </td></tr></table> <p>Ð¡Ð¾Ð±Ñ‹Ñ‚Ð¸Ñ ÑвлÑÑŽÑ‚ÑÑ Ð¾Ñновным механизмом ÑƒÐ²ÐµÐ´Ð¾Ð¼Ð»ÐµÐ½Ð¸Ñ Ð¸ активно иÑпользуютÑÑ Ð´Ð»Ñ Ð¾ÑущеÑÑ‚Ð²Ð»ÐµÐ½Ð¸Ñ Ð²Ð·Ð°Ð¸Ð¼Ð¾Ð´ÐµÐ¹ÑÑ‚Ð²Ð¸Ñ Ñ Ð¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ñ‚ÐµÐ»ÐµÐ¼. Ð”Ð»Ñ Ð¾Ð±Ñ€Ð°Ð±Ð¾Ñ‚ÐºÐ¸ Ñобытий предуÑмотрены два механизма: </p> <ul><li> Первичный — Ñценарий ÑƒÐ¿Ñ€Ð°Ð²Ð»ÐµÐ½Ð¸Ñ Ð¾Ñ‚ÐºÑ€Ñ‹Ñ‚Ð¸ÐµÐ¼ Ñтраниц.</li> <li> Вторичный — вычиÑÐ»Ð¸Ñ‚ÐµÐ»ÑŒÐ½Ð°Ñ Ð¿Ñ€Ð¾Ñ†ÐµÐ´ÑƒÑ€Ð° виджета.</li></ul> <p>Механизм "Сценарий ÑƒÐ¿Ñ€Ð°Ð²Ð»ÐµÐ½Ð¸Ñ Ð¾Ñ‚ÐºÑ€Ñ‹Ñ‚Ð¸ÐµÐ¼ Ñтраниц" оÑнован на базовом атрибуте виджета "evProc", в котором может опиÑыватьÑÑ Ð¾Ñ‚ÐºÑ€Ñ‹Ñ‚Ð¸Ðµ Ñтраниц. Сценарий Ñтого атрибута запиÑываетÑÑ Ð² виде ÑпиÑка команд Ñ ÑинтакÑиÑом: "<b>{event}:{evSrc}:{com}:{prm}</b>". Где: </p> <ul><li> <i>event</i> — ожидаемое Ñобытие;</li> <li> <i>evSrc</i> — путь вложенного виджета-иÑточника ÑобытиÑ;</li> <li> <i>com</i> — команда ÑеанÑа;</li> <li> <i>prm</i> — параметр команды.</li></ul> <p>Реализованы Ñледующие команды: </p> <ul><li> <i>open</i> — открытие Ñтраницы; Ð¾Ñ‚ÐºÑ€Ñ‹Ð²Ð°ÐµÐ¼Ð°Ñ Ñтраница указываетÑÑ Ð² параметре <i>prm</i> как прÑмо, так и в виде шаблона, например — <b>/pg_so/1/*/*</b>;</li> <li> <i>next</i> — открытие Ñледующей Ñтраницы; Ð¾Ñ‚ÐºÑ€Ñ‹Ð²Ð°ÐµÐ¼Ð°Ñ Ñтраница указываетÑÑ Ð² параметре <i>prm</i>, в виде шаблона, например: <b>/pg_so/*/*/$</b>;</li> <li> <i>prev</i> — открытие предыдущей Ñтраницы; Ð¾Ñ‚ÐºÑ€Ñ‹Ð²Ð°ÐµÐ¼Ð°Ñ Ñтраница указываетÑÑ Ð² параметре <i>prm</i>, в виде шаблона, например: <b>/pg_so/*/*/$</b>.</li></ul> <p>Специальные Ñимволы шаблона раÑшифровываютÑÑ Ñледующим образом: </p> <ul><li> <i>pg_so</i> — прÑмое Ð¸Ð¼Ñ Ñ‚Ñ€ÐµÐ±ÑƒÐµÐ¼Ð¾Ð¹-ÑтатичеÑкой Ñтраницы (Ñ Ð¿Ñ€ÐµÑ„Ð¸ÐºÑом), требует обÑзательного ÑоответÑÑ‚Ð²Ð¸Ñ Ð¸ иÑпользуетÑÑ Ð´Ð»Ñ Ð¸Ð´ÐµÐ½Ñ‚Ð¸Ñ„Ð¸ÐºÐ°Ñ†Ð¸Ð¸ предыдущей открытой Ñтраницы;</li> <li> <i>1</i> — Ð¸Ð¼Ñ Ð¸ меÑто новой Ñтраницы в общем пути (без префикÑа);</li> <li> <i>*</i> — Ñтраница берётÑÑ Ð¸Ð· имени предыдущей открытой Ñтраницы или подÑтавлÑетÑÑ Ð¿ÐµÑ€Ð²Ð°Ñ Ð´Ð¾ÑÑ‚ÑƒÐ¿Ð½Ð°Ñ Ñтраница, еÑли Ð¿Ñ€ÐµÐ´Ñ‹Ð´ÑƒÑ‰Ð°Ñ Ð¾Ñ‚ÐºÑ€Ñ‹Ñ‚Ð°Ñ Ð¾Ñ‚ÑутÑтвует;</li> <li> <i>$</i> — указывает на меÑто открытой Ñтраницы, отноÑительно которой необходимо иÑкать Ñледующую или предыдущую.</li></ul> <p>Ð”Ð»Ñ Ð¿Ñ€Ð°Ð²Ð¸Ð»ÑŒÐ½Ð¾Ð³Ð¾ Ð¿Ð¾Ð½Ð¸Ð¼Ð°Ð½Ð¸Ñ Ñ€Ð°Ð±Ð¾Ñ‚Ñ‹ механизма шаблонов, при выборе Ñтраницы, приведём неÑколько реальных примеров: </p> <ul><li> <i>Переключение объекта Ñигнализации:</i></li></ul> <dl><dd><dl><dd>ИÑходно: <b>/pg_so/pg_1/pg_mn/pg_1</b></dd> <dd>Команда: <b>open:/pg_so/2/*/*</b></dd> <dd>Результат: <b>/pg_so/pg_2/pg_mn/pg_1</b></dd></dl></dd></dl> <ul><li> <i>Переключение вида отображениÑ:</i></li></ul> <dl><dd><dl><dd>ИÑходно: <b>/pg_so/pg_1/pg_mn/pg_1</b></dd> <dd>Команда: <b>open:/pg_so/*/gkadr/*</b></dd> <dd>Результат: <b>/pg_so/pg_1/pg_gkadr/pg_1</b></dd></dl></dd></dl> <ul><li> <i>СледующаÑ/Ð¿Ñ€ÐµÐ´Ñ‹Ð´ÑƒÑ‰Ð°Ñ Ñтраница вида отображениÑ:</i></li></ul> <dl><dd><dl><dd>ИÑходно: <b>/pg_so/pg_1/pg_mn/pg_1</b></dd> <dd>Команда: <b>next:/pg_so/*/*/$</b></dd> <dd>Результат: <b>/pg_so/pg_1/pg_mn/pg_2</b></dd></dl></dd></dl> <p>Ð’ качеÑтве примера, приведём Ñценарий обеÑÐ¿ÐµÑ‡ÐµÐ½Ð¸Ñ Ñ€Ð°Ð±Ð¾Ñ‚Ñ‹ главной Ñтраницы интерфейÑа пользователÑ: </p> <pre style="white-space: pre-wrap;"> ws_BtPress:/prev:prev:/pg_so/*/*/$ ws_BtPress:/next:next:/pg_so/*/*/$ ws_BtPress:/go_mn:open:/pg_so/*/mn/* ws_BtPress:/go_graph:open:/pg_so/*/ggraph/* ws_BtPress:/go_cadr:open:/pg_so/*/gcadr/* ws_BtPress:/go_view:open:/pg_so/*/gview/* ws_BtPress:/go_doc:open:/pg_so/*/doc/* ws_BtPress:/go_resg:open:/pg_so/rg/rg/* ws_BtPress:/so1:open:/pg_so/1/*/* ws_BtPress:/so2:open:/pg_so/2/*/* ws_BtPress:/so3:open:/pg_so/3/*/* ws_BtPress:/so4:open:/pg_so/4/*/* ws_BtPress:/so5:open:/pg_so/5/*/* ws_BtPress:/so6:open:/pg_so/6/*/* ws_BtPress:/so7:open:/pg_so/7/*/* ws_BtPress:/so8:open:/pg_so/8/*/* ws_BtPress:/so9:open:/pg_so/9/*/* ws_BtPress:*:open:/pg_control/pg_terminator </pre> <p>The mechanism "Processing the events with the help of computational procedure of the widget" is based on the attribute "event" and the user procedure of calculating written with the help of the programming language of OpenSCADA. The events in process of receipt are accumulated in the attribute "event" till the moment of call of the computational procedure. The computational procedure is called with the specified frequency of calculating the widget and receives the attribute "event" value as the list of events. In the calculation procedure the user can: analyse, process and delete the processed events from the list, and add to the list new events. The remaining, after the procedure execution, and new events are analysed for compliance with the conditions of the call by means of script of the primary mechanism after which the remaining events are transmitted to the upper by the hierarchy widget to be processed by it, with the appending of the events path in accordance with the hierarchy of the penetration. When the widget is the top already, that is a page, then the remaining events are sent to a page who opened the source page and to the upper page, with the source page whole address. </p><p>Содержимым атрибута "event" ÑвлÑетÑÑ ÑпиÑок Ñобытий формата "<b>{event}:{evSrc}</b>", Ñ Ñобытием в отдельной Ñтроке. Приведём пример процедуры обработки Ñобытий на Java-подобном Ñзыке пользовательÑкого Ð¿Ñ€Ð¾Ð³Ñ€Ð°Ð¼Ð¼Ð¸Ñ€Ð¾Ð²Ð°Ð½Ð¸Ñ OpenSCADA: </p> <div class="mw-highlight mw-content-ltr" dir="ltr"><pre><span class="k">for</span><span class="p">(</span><span class="nx">ev_rez</span> <span class="o">=</span> <span class="s2">""</span><span class="p">,</span> <span class="nx">off</span> <span class="o">=</span> <span class="mi">0</span><span class="p">;</span> <span class="p">(</span><span class="nx">sval</span><span class="o">=</span><span class="nx">event</span><span class="p">.</span><span class="nx">parse</span><span class="p">(</span><span class="mi">0</span><span class="p">,</span><span class="s2">"\n"</span><span class="p">,</span><span class="nx">off</span><span class="p">)).</span><span class="nx">length</span><span class="p">;</span> <span class="p">)</span> <span class="p">{</span> <span class="k">if</span><span class="p">(</span><span class="nx">sval</span> <span class="o">==</span> <span class="s2">"ws_BtPress:/cvt_light"</span><span class="p">)</span> <span class="nx">alarmSt</span> <span class="o">=</span> <span class="mh">0x1000001</span><span class="p">;</span> <span class="k">else</span> <span class="k">if</span><span class="p">(</span><span class="nx">sval</span> <span class="o">==</span> <span class="s2">"ws_BtPress:/cvt_alarm"</span><span class="p">)</span> <span class="nx">alarmSt</span> <span class="o">=</span> <span class="mh">0x1000002</span><span class="p">;</span> <span class="k">else</span> <span class="k">if</span><span class="p">(</span><span class="nx">sval</span> <span class="o">==</span> <span class="s2">"ws_BtPress:/cvt_sound"</span><span class="p">)</span> <span class="nx">alarmSt</span> <span class="o">=</span> <span class="mh">0x1000004</span><span class="p">;</span> <span class="k">else</span> <span class="nx">ev_rez</span> <span class="o">+=</span> <span class="nx">sval</span><span class="o">+</span><span class="s2">"\n"</span><span class="p">;</span> <span class="p">}</span> <span class="nx">event</span> <span class="o">=</span> <span class="nx">ev_rez</span><span class="p">;</span> </pre></div> <p><br /> </p> <h3><span class="mw-headline" id=".D0.A1.D0.B8.D0.B3.D0.BD.D0.B0.D0.BB.D0.B8.D0.B7.D0.B0.D1.86.D0.B8.D1.8F"><span class="mw-headline-number">3.6</span> <span id="Alarms" title="#Alarms">СигнализациÑ</span></span></h3> <p><span id="Alarms" title="#Alarms">Важным Ñлементом</span> любого интерфейÑа визуализации ÑвлÑетÑÑ ÑƒÐ²ÐµÐ´Ð¾Ð¼Ð»ÐµÐ½Ð¸Ðµ Ð¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ñ‚ÐµÐ»Ñ Ð¿Ñ€Ð¾ Ð½Ð°Ñ€ÑƒÑˆÐµÐ½Ð¸Ñ â€” ÑигнализациÑ. Ð”Ð»Ñ ÑƒÐ¿Ñ€Ð¾Ñ‰ÐµÐ½Ð¸Ñ Ð²Ð¾ÑприÑтиÑ, а также в виду теÑной ÑвÑзи визуализации и ÑƒÐ²ÐµÐ´Ð¾Ð¼Ð»ÐµÐ½Ð¸Ñ (как правило, уведомление дополнÑет визуализацию) решено интегрировать Ð¸Ð½Ñ‚ÐµÑ€Ñ„ÐµÐ¹Ñ ÑƒÐ²ÐµÐ´Ð¾Ð¼Ð»ÐµÐ½Ð¸Ñ Ð² Ð¸Ð½Ñ‚ÐµÑ€Ñ„ÐµÐ¹Ñ Ð²Ð¸Ð·ÑƒÐ°Ð»Ð¸Ð·Ð°Ñ†Ð¸Ð¸. Ð”Ð»Ñ Ñтого, во вÑех виджетах, предуÑматриваютÑÑ Ð´Ð²Ð° дополнительных атрибута ÑƒÑ€Ð¾Ð²Ð½Ñ ÑеанÑа: "alarm" и "alarmSt". Ðтрибут "alarm" иÑпользуетÑÑ Ð´Ð»Ñ Ñ„Ð¾Ñ€Ð¼Ð¸Ñ€Ð¾Ð²Ð°Ð½Ð¸Ñ Ñигнала виджетом в ÑоответÑтвии Ñ ÐµÐ³Ð¾ логикой, а атрибут "alarmSt" иÑпользуетÑÑ Ð´Ð»Ñ ÐºÐ¾Ð½Ñ‚Ñ€Ð¾Ð»Ñ Ð·Ð° фактом Ñигнализации ветви дерева ÑеанÑа. </p><p>Ðтрибут "alarm" ÑвлÑетÑÑ Ñтрокой, ÐºÐ¾Ñ‚Ð¾Ñ€Ð°Ñ Ð¸Ð¼ÐµÐµÑ‚ Ñледующий формат: "<b>{lev}|{categ}|{message}|{type}|{tp_arg}</b>"<br /> Где: </p> <ul><li> <i>lev</i> — уровень Ñигнализации: чиÑло от 0 до 255;</li> <li> <i>categ</i> — ÐºÐ°Ñ‚ÐµÐ³Ð¾Ñ€Ð¸Ñ Ñигнала: параметр подÑиÑтемы Ñбора, объект, путь или комбинациÑ;</li> <li> <i>message</i> — Ñообщение Ñигнализации;</li> <li> <i>type</i> — типы уведомлениÑ, указываютÑÑ Ð² виде целого чиÑла (0...7), Ñодержащего флаги ÑпоÑобов уведомлений; типовые ÑпоÑобы уведомлениÑ: <ul><li> <i>1</i> — визуальнаÑ;</li> <li> <i>2</i> — гудок, чаÑто производитÑÑ Ñ‡ÐµÑ€ÐµÐ· PC-speaker;</li> <li> <i>4</i> — звуковой Ñигнал из файла звука или Ñинтез речи; еÑли в <i>tp_arg</i> указано Ð¸Ð¼Ñ Ñ€ÐµÑурÑа звукового файла, то воÑпроизводитÑÑ Ð¸Ð¼ÐµÐ½Ð½Ð¾ он, иначе выполнÑетÑÑ Ñинтез речи из текÑта, указанного в <i>message</i>.</li></ul></li> <li> <i>tp_arg</i> — аргумент типа; чаÑто иÑпользуетÑÑ Ð´Ð»Ñ Ð¿Ñ€Ñмого ÑƒÐºÐ°Ð·Ð°Ð½Ð¸Ñ Ñ€ÐµÑурÑа звукового Ñигнала — файл звукового формата, при оÑущеÑтвлении звуковой Ñигнализации.</li></ul> <p>Ðтрибут "alarmSt" ÑвлÑетÑÑ Ñ†ÐµÐ»Ñ‹Ð¼ чиÑлом, которое отражает макÑимальный уровень Ñигнала и факт ÐºÐ²Ð¸Ñ‚Ð¸Ñ€Ð¾Ð²Ð°Ð½Ð¸Ñ Ð²ÐµÑ‚Ð²Ð¸ дерева ÑеанÑа. Формат чиÑла имеет Ñледующий вид: </p> <ul><li> первый байт (0...255) характеризует уровень Ñигнала ветви;</li> <li> второй байт указывает тип уведомлениÑ, также как и в атрибуте "alarm";</li> <li> третий байт указывает тип неÑквитированного уведомлениÑ, также как и в атрибуте "alarm";</li> <li> четвёртый байт имеет Ñпециальное значение, определÑемое отдельными битами: <ul><li> бит 0 — указывает, уÑтановкой, на факт ÐºÐ²Ð¸Ñ‚Ð¸Ñ€Ð¾Ð²Ð°Ð½Ð¸Ñ ÑƒÐ²ÐµÐ´Ð¾Ð¼Ð»ÐµÐ½Ð¸Ð¹ в первом байте;</li> <li> бит 1 — указывает, при уÑтановке его и бита 0, на возврат ÐºÐ²Ð¸Ñ‚Ð¸Ñ€Ð¾Ð²Ð°Ð½Ð¸Ñ â€” включение уведомлениÑ.</li></ul></li></ul> <p><b>Формирование Ñигнала и получение его визуализатором.</b><br /> Формирование Ñигнала производитÑÑ Ñамим виджетом, путём уÑтановки ÑобÑтвенного атрибута "alarm" нужным образом и, в ÑоответÑтвии Ñ Ð½Ð¸Ð¼, автоматичеÑки уÑтанавливаетÑÑ Ð°Ñ‚Ñ€Ð¸Ð±ÑƒÑ‚ "alarmSt" текущего и вышеÑтоÑщих виджетов. Визуализаторы получают уведомление о Ñигнале Ñ Ð¿Ð¾Ð¼Ð¾Ñ‰ÑŒÑŽ Ñтандартного механизма ÑƒÐ²ÐµÐ´Ð¾Ð¼Ð»ÐµÐ½Ð¸Ñ Ð¾Ð± изменении атрибутов виджетов. </p><p>Ð£Ñ‡Ð¸Ñ‚Ñ‹Ð²Ð°Ñ Ñ‚Ð¾, что обработка уÑловий Ñигнализации оÑущеÑтвлÑетÑÑ Ð² виджетах, Ñтраницы, Ñодержащие объекты Ñигнализации, должны иÑполнÑÑ‚ÑŒÑÑ Ð² фоне, незавиÑимо от открытоÑти их в данный момент. Ðто оÑущеÑтвлÑетÑÑ Ð¿ÑƒÑ‚Ñ‘Ð¼ уÑтановки флага иÑÐ¿Ð¾Ð»Ð½ÐµÐ½Ð¸Ñ Ñтраницы в фоне. </p><p>Ð¥Ð¾Ñ‚Ñ Ð¼ÐµÑ…Ð°Ð½Ð¸Ð·Ð¼ Ñигнализации и поÑтроен в Ñреде визуализации, возможноÑÑ‚ÑŒ Ñ„Ð¾Ñ€Ð¼Ð¸Ñ€Ð¾Ð²Ð°Ð½Ð¸Ñ Ð½ÐµÐ²Ð¸Ð·ÑƒÐ°Ð»ÑŒÐ½Ñ‹Ñ… Ñлементов Ñигнализации оÑтаётÑÑ, например, путём ÑÐ¾Ð·Ð´Ð°Ð½Ð¸Ñ Ñтраницы, ÐºÐ¾Ñ‚Ð¾Ñ€Ð°Ñ Ð½Ð¸ÐºÐ¾Ð³Ð´Ð° не будет открыватьÑÑ. </p><p><b>КвитациÑ</b><br /> ÐšÐ²Ð¸Ñ‚Ð°Ñ†Ð¸Ñ (от quietance) — процеÑÑ Ð¿Ð¾Ð´Ñ‚Ð²ÐµÑ€Ð¶Ð´ÐµÐ½Ð¸Ñ Ñ„Ð°ÐºÑ‚Ð° того, что оперативный перÑонал обратил внимание на нарушение в работе ТП. Обычно Ñтот процеÑÑ Ð¿Ð¾Ð´Ñ€Ð°Ð·ÑƒÐ¼ÐµÐ²Ð°ÐµÑ‚ принÑтие мер оператором Ð´Ð»Ñ ÑƒÑÑ‚Ñ€Ð°Ð½ÐµÐ½Ð¸Ñ Ð½Ð°Ñ€ÑƒÑˆÐµÐ½Ð¸Ñ Ð¸ нажатие ÑоответÑтвующей кнопки Ð¿Ñ€ÐµÐºÑ€Ð°Ñ‰ÐµÐ½Ð¸Ñ Ñигнализации. </p><p>ÐšÐ²Ð¸Ñ‚Ð°Ñ†Ð¸Ñ Ð¿Ñ€Ð¾Ð¸Ð·Ð²Ð¾Ð´Ð¸Ñ‚ÑÑ Ð¿ÑƒÑ‚Ñ‘Ð¼ ÑƒÐºÐ°Ð·Ð°Ð½Ð¸Ñ ÐºÐ¾Ñ€Ð½Ñ Ð²ÐµÑ‚Ð²Ð¸ виджетов и типов уведомлениÑ, что позволÑет реализовать квитацию на Ñтороне визуализатора как по группам, например, по объектам Ñигнализации, так и индивидуально по объектам иÑточника. При Ñтом можно незавиÑимо квитировать разные типы Ñигнализаций. УÑтановка квитации производитÑÑ Ð¿Ñ€Ð¾Ñтой модификацией атрибута "alarmSt". </p><p>Пример Ñкрипта, Ð´Ð»Ñ Ñ€Ð°Ð±Ð¾Ñ‚Ñ‹ Ñ Ñигналами, приведён ниже: </p> <div class="mw-highlight mw-content-ltr" dir="ltr"><pre><span class="c1">//Выделение факта Ð½Ð°Ð»Ð¸Ñ‡Ð¸Ñ Ñигнализаций разных ÑпоÑобов-типов уведомлениÑ</span> <span class="nx">cvt_light_en</span> <span class="o">=</span> <span class="nx">alarmSt</span><span class="o">&</span><span class="mh">0x100</span><span class="p">;</span> <span class="nx">cvt_alarm_en</span> <span class="o">=</span> <span class="nx">alarmSt</span><span class="o">&</span><span class="mh">0x200</span><span class="p">;</span> <span class="nx">cvt_sound_en</span> <span class="o">=</span> <span class="nx">alarmSt</span><span class="o">&</span><span class="mh">0x400</span><span class="p">;</span> <span class="c1">//Выделение факта Ð½Ð°Ð»Ð¸Ñ‡Ð¸Ñ Ð½ÐµÑквитированных Ñигнализаций разных ÑпоÑобов уведомлениÑ</span> <span class="nx">cvt_light_active</span> <span class="o">=</span> <span class="nx">alarmSt</span><span class="o">&</span><span class="mh">0x10000</span><span class="p">;</span> <span class="nx">cvt_alarm_active</span> <span class="o">=</span> <span class="nx">alarmSt</span><span class="o">&</span><span class="mh">0x20000</span><span class="p">;</span> <span class="nx">cvt_sound_active</span> <span class="o">=</span> <span class="nx">alarmSt</span><span class="o">&</span><span class="mh">0x40000</span><span class="p">;</span> <span class="c1">//Обработка Ñобытий кнопок квитации и ÐºÐ²Ð¸Ñ‚Ð°Ñ†Ð¸Ñ Ñ€Ð°Ð·Ð½Ñ‹Ñ… ÑпоÑобов уведомлений</span> <span class="k">for</span><span class="p">(</span><span class="nx">ev_rez</span> <span class="o">=</span> <span class="s2">""</span><span class="p">,</span> <span class="nx">off</span> <span class="o">=</span> <span class="mi">0</span><span class="p">;</span> <span class="p">(</span><span class="nx">sval</span><span class="o">=</span><span class="nx">event</span><span class="p">.</span><span class="nx">parse</span><span class="p">(</span><span class="mi">0</span><span class="p">,</span><span class="s2">"\n"</span><span class="p">,</span><span class="nx">off</span><span class="p">)).</span><span class="nx">length</span><span class="p">;</span> <span class="p">)</span> <span class="p">{</span> <span class="k">if</span><span class="p">(</span><span class="nx">sval</span> <span class="o">==</span> <span class="s2">"ws_BtPress:/cvt_light"</span><span class="p">)</span> <span class="nx">alarmSt</span> <span class="o">=</span> <span class="mh">0x1000001</span><span class="p">;</span> <span class="k">else</span> <span class="k">if</span><span class="p">(</span><span class="nx">sval</span> <span class="o">==</span> <span class="s2">"ws_BtPress:/cvt_alarm"</span><span class="p">)</span> <span class="nx">alarmSt</span> <span class="o">=</span> <span class="mh">0x1000002</span><span class="p">;</span> <span class="k">else</span> <span class="k">if</span><span class="p">(</span><span class="nx">sval</span> <span class="o">==</span> <span class="s2">"ws_BtPress:/cvt_sound"</span><span class="p">)</span> <span class="nx">alarmSt</span> <span class="o">=</span> <span class="mh">0x1000004</span><span class="p">;</span> <span class="k">else</span> <span class="nx">ev_rez</span> <span class="o">+=</span> <span class="nx">sval</span> <span class="o">+</span> <span class="s2">"\n"</span><span class="p">;</span> <span class="p">}</span> <span class="nx">event</span> <span class="o">=</span> <span class="nx">ev_rez</span><span class="p">;</span> </pre></div> <p><b>Внешние методы уведомлениÑ</b><br /> ОÑновным и типовым ÑпоÑобом ÑƒÐ²ÐµÐ´Ð¾Ð¼Ð»ÐµÐ½Ð¸Ñ ÑвлÑетÑÑ Ð´Ð¸ÑÐ¿Ð»ÐµÐ¹Ð½Ð°Ñ ÑÐ²ÐµÑ‚Ð¾Ð²Ð°Ñ ÑÐ¸Ð³Ð½Ð°Ð»Ð¸Ð·Ð°Ñ†Ð¸Ñ Ð°Ð²Ð°Ñ€Ð¸Ð¹Ð½Ñ‹Ð¼Ð¸ цветами и их динамикой у Ñлементов визуализации, ÐºÐ¾Ñ‚Ð¾Ñ€Ð°Ñ Ð¿Ñ€Ð¸ÑутÑтвует вÑегда и не требует ÑпецифичеÑкой конфигурации. Однако, чаÑто нужны ÑƒÐ²ÐµÐ´Ð¾Ð¼Ð»ÐµÐ½Ð¸Ñ Ð²Ð½ÐµÑˆÐ½ÐµÐ³Ð¾ типа, например: внешней лампой, бузером PC или "ревуном", произвольным звуком, Ñинтезированной речью и Ñ‚.д. </p><p>Ð”Ð»Ñ Ð¾ÑущеÑÑ‚Ð²Ð»ÐµÐ½Ð¸Ñ Ñ‚Ð°ÐºÐ¾Ð¹ возможноÑти, внешние ÑпоÑобы уведомлениÑ, и ÑоответÑтвующие им типы уведомлениÑ, Ñвободно опиÑываютÑÑ Ð´Ð»Ñ Ñервера визуализации и Ñамого визуализатора. Ðа Ñтороне Ñервера визуализации опиÑываетÑÑ Ñ„Ð¾Ñ€Ð¼Ð¸Ñ€Ð¾Ð²Ð°Ð½Ð¸Ðµ/получение реÑурÑа ÑƒÐ²ÐµÐ´Ð¾Ð¼Ð»ÐµÐ½Ð¸Ñ Ð¸ Ñамо уведомление. Ðа Ñтороне визуализатора опиÑываетÑÑ ÑƒÐ²ÐµÐ´Ð¾Ð¼Ð»ÐµÐ½Ð¸Ðµ ÑоглаÑно реÑурÑам Ñервера визуализации. </p><p>ОпиÑание правил и Ñценариев внешних уведомлений оÑущеÑтвлÑетÑÑ Ñ Ð¿Ð¾Ð¼Ð¾Ñ‰ÑŒÑŽ пользовательÑких атрибутов текÑтового типа Ð´Ð»Ñ Ñтраниц проекта визуализации, которые применÑÑŽÑ‚ÑÑ Ð¿Ñ€Ð¸ открытии Ñтих Ñтраниц. Т.е. потенциально, Ð´Ð»Ñ ÐºÐ°Ð¶Ð´Ð¾Ð¹ открываемой Ñтраницы можно опиÑать ÑобÑтвенные правила уведомлениÑ, хотÑ, обычно доÑтаточно и опиÑываютÑÑ Ð¾Ð±Ñ‰Ð¸Ðµ правила ÑƒÐ²ÐµÐ´Ð¾Ð¼Ð»ÐµÐ½Ð¸Ñ Ð½Ð° главной Ñтранице проекта — Ñтранице, ÐºÐ¾Ñ‚Ð¾Ñ€Ð°Ñ Ð¾Ñ‚ÐºÑ€Ñ‹Ð²Ð°ÐµÑ‚ÑÑ Ð¾Ð´Ð¸Ð½ раз и не закрываетÑÑ Ð¿Ñ€Ð¸ работе: </p> <ul><li> Ð”Ð»Ñ Ñервера/движка визуализации, атрибутом "notify{N}" в формате:</li></ul> <div class="mw-highlight mw-content-ltr" dir="ltr" style="margin-left: 15px"><pre><span class="c1">//flags=notifyServ[{DL}][|resource[|queue[|qMergeMess]]];</span> <span class="c1">//resStatic={ResourceFile}</span> <span class="k">if</span><span class="p">(</span><span class="nx">doRes</span><span class="p">)</span> <span class="p">{</span> <span class="nx">ТекÑÑ‚</span> <span class="nx">команды</span> <span class="nx">формированиÑ</span> <span class="nx">реÑурÑа</span><span class="p">.</span> <span class="p">}</span> <span class="k">if</span><span class="p">(</span><span class="nx">doNtf</span><span class="p">)</span> <span class="p">{</span> <span class="nx">ТекÑÑ‚</span> <span class="nx">команды</span> <span class="nx">уведомлениÑ</span><span class="p">.</span> <span class="p">}</span> </pre></div> <ul><li> Ð”Ð»Ñ Ð²Ð¸Ð·ÑƒÐ°Ð»Ð¸Ð·Ð°Ñ‚Ð¾Ñ€Ð°, атрибутом "notifyVis[Vision|WebVision]{N}" в формате:</li></ul> <div class="mw-highlight mw-content-ltr" dir="ltr" style="margin-left: 15px"><pre><span class="c1">//flags=notify[{DL}][|resource[|queue[|quietanceRet]]];</span> <span class="c1">//name={Ð˜Ð¼Ñ ÑƒÐ²ÐµÐ´Ð¾Ð¼Ð¸Ñ‚ÐµÐ»Ñ}</span> <span class="c1">//ico={Ð˜Ð¼Ñ Ð¸ÐºÐ¾Ð½ÐºÐ¸}</span> <span class="p">{</span> <span class="nx">ТекÑÑ‚</span> <span class="nx">команды</span> <span class="nx">уведомлениÑ</span> <span class="nx">длÑ</span> <span class="nx">любого</span> <span class="nx">или</span> <span class="nx">конкретного</span> <span class="nx">визуализатора</span><span class="p">.</span> <span class="p">}</span> </pre></div> <p>Flags: </p> <ul><li> <i>notify[{DL}]</i>, <i>notifyServ[{DL}]</i> — enables the notification with the repeating by the time <i>DL</i>, if the set; for <i>DL</i> = 0 the repeat carried out immediately; <i>notifyServ[{DL}]</i> is used to force the server side notification instead visualiser with <i>notify[{DL}]</i>.</li> <li> <i>resource</i> — request-form (force) the notification resource from the visualisation server, can be an audio file, a text or other data for the notification produce; but currently the notifiers mostly expect audio.</li> <li> <i>queue</i> — the notification resources are determined not only by the global sign of alarming and quietance, but also according to the priority sources queue of the notification-resources. The queue is formed on the side of the visualisation server, and for the visualisers it is indicated the need to work with it when requesting resources.</li> <li> <i>qMergeMess</i> — merging the notifications in the queue by equality their messages.</li> <li> <i>quietanceRet</i> — possibility of the visualiser for the quietance recall-return i.e. in fact — the notification enable back.</li></ul> <p>Ðаличие Ð¿Ð¾Ð»Ñ "resStatic" включает получение реÑурÑа непоÑредÑтвенно из таблицы реÑурÑов или файла, указываетÑÑ Ð² ÑпоÑоб подобный <a href="#Media">примитиву "Медиа"</a>. </p><p>Переменные обмена: </p> <ul><li> <i>en</i>[0,1] — уведомление включить (1) или выключить (0);</li> <li> <i>doNtf</i>[0,1] — вызов ÑÑ†ÐµÐ½Ð°Ñ€Ð¸Ñ ÑƒÐ²ÐµÐ´Ð¾Ð¼Ð»ÐµÐ½Ð¸Ñ;</li> <li> <i>doRes</i>[0,1] — вызов ÑÑ†ÐµÐ½Ð°Ñ€Ð¸Ñ Ñ„Ð¾Ñ€Ð¼Ð¸Ñ€Ð¾Ð²Ð°Ð½Ð¸Ñ Ñ€ÐµÑурÑа;</li> <li> <i>res</i> — Ñодержимое или Ð¸Ð¼Ñ Ñ„Ð°Ð¹Ð»Ð° Ñ Ñодержимым реÑурÑа, Ð´Ð»Ñ Ð²Ð½ÐµÑˆÐ½Ð¸Ñ… Ñценариев;</li> <li> <i>resTp</i> — тип реÑурÑа, вроде "audio/ogg"; ÑвлÑетÑÑ Ð²Ð¾Ð·Ð²Ñ€Ð°Ñ‚Ð¾Ð¼ и помещаетÑÑ Ð² Ñтандартный выход (Ð´Ð»Ñ Shell) Ð´Ð»Ñ <i>doRes</i>;</li> <li> <i>mess</i> — Ñообщение-параметры Ñ„Ð¾Ñ€Ð¼Ð¸Ñ€Ð¾Ð²Ð°Ð½Ð¸Ñ Ñ€ÐµÑурÑа и уведомлениÑ;</li> <li> <i>lang</i> — Ñзык текущего Ð¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ñ‚ÐµÐ»Ñ Ð¸Ð»Ð¸ ÑиÑтемы;</li> <li> <i>prcID</i> — уникальный идентификатор процедуры (вроде "ses_AGLKS_ntf2"), в оÑновном Ð´Ð»Ñ Ð±ÐµÐ·Ð¾Ð¿Ð°Ñного ÑÐ¾Ð·Ð´Ð°Ð½Ð¸Ñ Ð²Ñ€ÐµÐ¼ÐµÐ½Ð½Ñ‹Ñ… файлов.</li></ul> <p>The examples and comments to work of the typical notification methods: </p> <ul><li> Beep (buzzer) on the visualiser (flags=notify0) or the visualisation server (flags=notifyServ0) side with repeating and control the playing:</li></ul> <dl><dd><ul><li> alarm = "10|Prm||0x02"</li> <li> notifyVisVision1 | notify1 = </li></ul></dd></dl> <div class="mw-highlight mw-content-ltr" dir="ltr" style="margin-left: 30px"><pre><span class="c1">//flags=notify0|notifyServ0</span> <span class="k">if</span><span class="p">(</span><span class="nx">en</span> <span class="o">&&</span> <span class="p">(</span><span class="nx">ntfPrg</span><span class="o">=</span><span class="nx">SYS</span><span class="p">.</span><span class="nx">system</span><span class="p">(</span><span class="s2">"which beep"</span><span class="p">)).</span><span class="nx">length</span> <span class="o">&&</span> <span class="p">(</span><span class="nx">SYS</span><span class="p">.</span><span class="nx">system</span><span class="p">(</span><span class="s2">"test -s "</span><span class="o">+</span><span class="nx">prcID</span><span class="o">+</span><span class="s2">".pid"</span><span class="p">,</span><span class="kc">true</span><span class="p">)</span> <span class="o">||</span> <span class="c1">//No PID file</span> <span class="nx">SYS</span><span class="p">.</span><span class="nx">system</span><span class="p">(</span><span class="s2">"ps -A -o \"pid cmd\" | grep \"^ *$(cat "</span><span class="o">+</span><span class="nx">prcID</span><span class="o">+</span><span class="s2">".pid).*"</span><span class="o">+</span><span class="nx">ntfPrg</span><span class="p">.</span><span class="nx">parseLine</span><span class="p">(</span><span class="mi">0</span><span class="p">)</span><span class="o">+</span><span class="s2">"\" > /dev/null"</span><span class="p">,</span><span class="kc">true</span><span class="p">))</span> <span class="p">)</span> <span class="c1">//No notify already</span> <span class="p">{</span> <span class="nx">ntfPrg</span> <span class="o">=</span> <span class="nx">ntfPrg</span><span class="p">.</span><span class="nx">parseLine</span><span class="p">(</span><span class="mi">0</span><span class="p">);</span> <span class="nx">SYS</span><span class="p">.</span><span class="nx">system</span><span class="p">(</span><span class="nx">ntfPrg</span><span class="o">+</span><span class="s2">" -f 1000 -l 100000 &\necho $! > "</span><span class="o">+</span><span class="nx">prcID</span><span class="o">+</span><span class="s2">".pid"</span><span class="p">,</span> <span class="kc">true</span><span class="p">);</span> <span class="p">}</span> <span class="k">else</span> <span class="k">if</span><span class="p">(</span><span class="o">!</span><span class="nx">en</span> <span class="o">&&</span> <span class="o">!</span><span class="nx">SYS</span><span class="p">.</span><span class="nx">system</span><span class="p">(</span><span class="s2">"test -s "</span><span class="o">+</span><span class="nx">prcID</span><span class="o">+</span><span class="s2">".pid"</span><span class="p">,</span><span class="kc">true</span><span class="p">))</span> <span class="nx">SYS</span><span class="p">.</span><span class="nx">system</span><span class="p">(</span><span class="s2">"kill $(cat "</span><span class="o">+</span><span class="nx">prcID</span><span class="o">+</span><span class="s2">".pid); rm "</span><span class="o">+</span><span class="nx">prcID</span><span class="o">+</span><span class="s2">".pid "</span><span class="o">+</span><span class="nx">prcID</span><span class="o">+</span><span class="s2">".res;"</span><span class="p">,</span> <span class="kc">true</span><span class="p">);</span> </pre></div> <dl><dd><ul><li> notifyVisVision1 | notify1 = </li></ul></dd></dl> <div class="mw-highlight mw-content-ltr" dir="ltr" style="margin-left: 30px"><pre><span class="c">#!/bin/sh</span> <span class="c">#flags=notify0|notifyServ0</span> <span class="k">if</span> <span class="nb">test</span> <span class="nv">$en</span> <span class="o">=</span> 1<span class="p">;</span> <span class="k">then</span> <span class="nv">ntfPrg</span><span class="o">=</span><span class="k">$(</span>which beep<span class="k">)</span> <span class="c">#No PID file || No notify already</span> <span class="k">if</span> <span class="nb">test</span> ! -s <span class="nv">$prcID</span>.pid <span class="o">||</span> ! ps -A -o <span class="s2">"pid cmd"</span> <span class="p">|</span> grep <span class="s2">"^ *</span><span class="k">$(</span>cat <span class="nv">$prcID</span>.pid<span class="k">)</span><span class="s2">.*</span><span class="nv">$ntfPrg</span><span class="s2">"</span> > /dev/null<span class="p">;</span> <span class="k">then</span> <span class="nv">$ntfPrg</span> -f <span class="m">1000</span> -l <span class="m">100000</span> <span class="p">&</span> <span class="nb">echo</span> <span class="nv">$!</span> > <span class="nv">$prcID</span>.pid <span class="k">fi</span> <span class="k">elif</span> <span class="nb">test</span> -s <span class="nv">$prcID</span>.pid<span class="p">;</span> <span class="k">then</span> <span class="nb">kill</span> <span class="k">$(</span>cat <span class="nv">$prcID</span>.pid<span class="k">)</span> rm <span class="nv">$prcID</span>.pid <span class="nv">$prcID</span>.res <span class="k">fi</span> </pre></div> <ul><li> Repeating play for a ready audio file, one common, on the visualiser (flags=notify2) or the visualisation server (flags=notifyServ2) side, duration of the audio file for the internal language must be not more 10 seconds:</li></ul> <dl><dd><ul><li> alarm = "10|Prm||0x04"</li> <li> notify2 | notifyVisVision2 =</li></ul></dd></dl> <div class="mw-highlight mw-content-ltr" dir="ltr" style="margin-left: 30px"><pre><span class="c1">//flags=notify2|notifyServ2</span> <span class="k">if</span><span class="p">(</span><span class="nx">en</span><span class="p">)</span> <span class="nx">SYS</span><span class="p">.</span><span class="nx">system</span><span class="p">(</span><span class="s2">"play -q alarm.ogg"</span><span class="p">);</span> </pre></div> <dl><dd><ul><li> notify2 | notifyVisVision2 =</li></ul></dd></dl> <div class="mw-highlight mw-content-ltr" dir="ltr" style="margin-left: 30px"><pre><span class="c">#!/bin/sh</span> <span class="c">#flags=notify2|notifyServ2</span> <span class="k">if</span> <span class="nb">test</span> <span class="nv">$en</span> <span class="o">=</span> 1<span class="p">;</span> <span class="k">then</span> play -q alarm.ogg<span class="p">;</span> <span class="k">fi</span> </pre></div> <ul><li> Play an individual audio file for the source, on the visualisation server side, duration of the audio file for the internal language must be not more 10 seconds:</li></ul> <dl><dd><ul><li> alarm = "10|Prm||0x04|res:al_prm1"</li> <li> notify2 =</li></ul></dd></dl> <div class="mw-highlight mw-content-ltr" dir="ltr" style="margin-left: 30px"><pre><span class="c1">//flags=queue</span> </pre></div> <dl><dd><ul><li> notifyVisVision2 =</li></ul></dd></dl> <div class="mw-highlight mw-content-ltr" dir="ltr" style="margin-left: 30px"><pre><span class="c1">//flags=notify2|queue</span> <span class="k">if</span><span class="p">(</span><span class="nx">doNtf</span> <span class="o">&&</span> <span class="nx">en</span> <span class="o">&&</span> <span class="nx">res</span><span class="p">.</span><span class="nx">length</span><span class="p">)</span> <span class="p">{</span> <span class="nx">SYS</span><span class="p">.</span><span class="nx">fileWrite</span><span class="p">(</span><span class="s2">"tmpPlay"</span><span class="p">,</span> <span class="nx">res</span><span class="p">);</span> <span class="nx">SYS</span><span class="p">.</span><span class="nx">system</span><span class="p">(</span><span class="s2">"play -q tmpPlay"</span><span class="p">);</span> <span class="nx">SYS</span><span class="p">.</span><span class="nx">fileRemove</span><span class="p">(</span><span class="s2">"tmpPlay"</span><span class="p">);</span> <span class="p">}</span> </pre></div> <dl><dd><ul><li> notifyVisVision2 =</li></ul></dd></dl> <div class="mw-highlight mw-content-ltr" dir="ltr" style="margin-left: 30px"><pre><span class="c">#!/bin/sh</span> <span class="c">#flags=notify2|queue</span> <span class="k">if</span> <span class="nb">test</span> <span class="nv">$doNtf</span> <span class="o">=</span> <span class="m">1</span> -a <span class="nv">$en</span> <span class="o">=</span> <span class="m">1</span> -a -s <span class="nv">$res</span><span class="p">;</span> <span class="k">then</span> play -q <span class="nv">$res</span><span class="p">;</span> <span class="k">fi</span> </pre></div> <ul><li> Speech synth for an individual message for the source, on the visualiser side, duration of the message for the internal language must be not more 10 seconds:</li></ul> <dl><dd><ul><li> alarm = "10|Prm|Text message of the speech synth|0x04"</li> <li> notify2 =</li></ul></dd></dl> <div class="mw-highlight mw-content-ltr" dir="ltr" style="margin-left: 30px"><pre><span class="c1">//flags=queue</span> </pre></div> <dl><dd><ul><li> notifyVisVision2 = </li></ul></dd></dl> <div class="mw-highlight mw-content-ltr" dir="ltr" style="margin-left: 30px"><pre><span class="c1">//flags=notify2|queue</span> <span class="k">if</span><span class="p">(</span><span class="nx">doNtf</span> <span class="o">&&</span> <span class="nx">en</span> <span class="o">&&</span> <span class="nx">mess</span><span class="p">.</span><span class="nx">length</span><span class="p">)</span> <span class="p">{</span> <span class="nx">SYS</span><span class="p">.</span><span class="nx">fileWrite</span><span class="p">(</span><span class="s2">"tmpForSpeech"</span><span class="p">,</span> <span class="nx">mess</span><span class="p">);</span> <span class="nx">SYS</span><span class="p">.</span><span class="nx">system</span><span class="p">(</span><span class="s2">"festival --tts tmpForSpeech"</span><span class="p">);</span> <span class="nx">SYS</span><span class="p">.</span><span class="nx">fileRemove</span><span class="p">(</span><span class="s2">"tmpForSpeech"</span><span class="p">);</span> <span class="p">}</span> </pre></div> <dl><dd><ul><li> notifyVisVision2 = </li></ul></dd></dl> <div class="mw-highlight mw-content-ltr" dir="ltr" style="margin-left: 30px"><pre><span class="c">#!/bin/sh</span> <span class="c">#flags=notify2|queue</span> <span class="k">if</span> <span class="nb">test</span> <span class="nv">$doNtf</span> <span class="o">=</span> <span class="m">1</span> -a <span class="nv">$en</span> <span class="o">=</span> <span class="m">1</span> -a <span class="s2">"x"</span> !<span class="o">=</span> <span class="s2">"x</span><span class="nv">$mess</span><span class="s2">"</span><span class="p">;</span> <span class="k">then</span> <span class="nb">echo</span> <span class="nv">$mess</span> > tmpForSpeech festival --tts tmpForSpeech rm tmpForSpeech <span class="k">fi</span> </pre></div> <ul><li> Preparing a sound file, one common, and playing it on the side of the visualiser (flags=notifyServ2) or the visualisation server (flags=notifyServ2), duration of the audio file for the internal language must be not more 10 seconds:</li></ul> <dl><dd><ul><li> alarm = "10|Prm||0x04"</li> <li> notify2 = </li></ul></dd></dl> <div class="mw-highlight mw-content-ltr" dir="ltr" style="margin-left: 30px"><pre><span class="c1">//flags=notify2|notifyServ2|resource</span> <span class="k">if</span><span class="p">(</span><span class="nx">doRes</span><span class="p">)</span> <span class="nx">res</span> <span class="o">=</span> <span class="nx">SYS</span><span class="p">.</span><span class="nx">fileRead</span><span class="p">(</span><span class="s2">"alarm.ogg"</span><span class="p">);</span> <span class="c1">//Insert here a different method of the generation</span> <span class="k">if</span><span class="p">(</span><span class="nx">doNtf</span> <span class="o">&&</span> <span class="nx">en</span> <span class="o">&&</span> <span class="nx">res</span><span class="p">.</span><span class="nx">length</span><span class="p">)</span> <span class="p">{</span> <span class="nx">SYS</span><span class="p">.</span><span class="nx">fileWrite</span><span class="p">(</span><span class="s2">"tmpPlay"</span><span class="p">,</span> <span class="nx">res</span><span class="p">);</span> <span class="nx">SYS</span><span class="p">.</span><span class="nx">system</span><span class="p">(</span><span class="s2">"play -q tmpPlay"</span><span class="p">);</span> <span class="nx">SYS</span><span class="p">.</span><span class="nx">fileRemove</span><span class="p">(</span><span class="s2">"tmpPlay"</span><span class="p">);</span> <span class="p">}</span> </pre></div> <dl><dd><ul><li> notify2 = </li></ul></dd></dl> <div class="mw-highlight mw-content-ltr" dir="ltr" style="margin-left: 30px"><pre><span class="c">#!/bin/sh</span> <span class="c">#flags=notify2|notifyServ2|resource</span> <span class="k">if</span> <span class="nb">test</span> <span class="nv">$doRes</span> <span class="o">=</span> 1<span class="p">;</span> <span class="k">then</span> cp -f alarm.ogg <span class="nv">$res</span><span class="p">;</span> <span class="k">fi</span> <span class="c">#Insert here a different method of the generation</span> <span class="k">if</span> <span class="nb">test</span> <span class="nv">$doNtf</span> <span class="o">=</span> <span class="m">1</span> -a <span class="nv">$en</span> <span class="o">=</span> <span class="m">1</span> -a -s <span class="nv">$res</span><span class="p">;</span> <span class="k">then</span> play -q <span class="nv">$res</span><span class="p">;</span> <span class="k">fi</span> </pre></div> <dl><dd><ul><li> notifyVisVision2 =</li></ul></dd></dl> <div class="mw-highlight mw-content-ltr" dir="ltr" style="margin-left: 30px"><pre><span class="c1">//flags=notify2|resource</span> <span class="k">if</span><span class="p">(</span><span class="nx">en</span> <span class="o">&&</span> <span class="nx">res</span><span class="p">.</span><span class="nx">length</span><span class="p">)</span> <span class="p">{</span> <span class="nx">SYS</span><span class="p">.</span><span class="nx">fileWrite</span><span class="p">(</span><span class="s2">"tmpPlay"</span><span class="p">,</span> <span class="nx">res</span><span class="p">);</span> <span class="nx">SYS</span><span class="p">.</span><span class="nx">system</span><span class="p">(</span><span class="s2">"play -q tmpPlay"</span><span class="p">);</span> <span class="nx">SYS</span><span class="p">.</span><span class="nx">fileRemove</span><span class="p">(</span><span class="s2">"tmpPlay"</span><span class="p">);</span> <span class="p">}</span> </pre></div> <dl><dd><ul><li> notifyVisVision2 =</li></ul></dd></dl> <div class="mw-highlight mw-content-ltr" dir="ltr" style="margin-left: 30px"><pre><span class="c">#!/bin/sh</span> <span class="c">#flags=notify2|resource</span> <span class="k">if</span> <span class="nb">test</span> <span class="nv">$en</span> <span class="o">=</span> <span class="m">1</span> -a -s <span class="nv">$res</span><span class="p">;</span> <span class="k">then</span> play -q <span class="nv">$res</span><span class="p">;</span> <span class="k">fi</span> </pre></div> <ul><li> Prepare an individual audio file for the source of notification through the speech synth, on side of the visualiser (flags=notify2) or the visualisation server (flags=notifyServ2), duration of the message for the internal language must be not more 10 seconds:</li></ul> <dl><dd><ul><li> alarm = "10|Prm|Text message of the speech synth|0x04"</li> <li> notify2 =</li></ul></dd></dl> <div class="mw-highlight mw-content-ltr" dir="ltr" style="margin-left: 30px"><pre><span class="c1">//flags=notify2|notifyServ2|queue</span> <span class="k">if</span><span class="p">(</span><span class="nx">doRes</span> <span class="o">&&</span> <span class="nx">mess</span><span class="p">.</span><span class="nx">length</span><span class="p">)</span> <span class="p">{</span> <span class="nx">SYS</span><span class="p">.</span><span class="nx">fileWrite</span><span class="p">(</span><span class="s2">"tmpText"</span><span class="p">,</span> <span class="nx">mess</span><span class="p">);</span> <span class="nx">SYS</span><span class="p">.</span><span class="nx">system</span><span class="p">(</span><span class="s2">"text2wave tmpText -o tmpWAV"</span><span class="p">);</span> <span class="nx">res</span> <span class="o">=</span> <span class="nx">SYS</span><span class="p">.</span><span class="nx">fileRead</span><span class="p">(</span><span class="s2">"tmpWAV"</span><span class="p">);</span> <span class="nx">SYS</span><span class="p">.</span><span class="nx">fileRemove</span><span class="p">(</span><span class="s2">"tmpText"</span><span class="p">);</span> <span class="nx">SYS</span><span class="p">.</span><span class="nx">fileRemove</span><span class="p">(</span><span class="s2">"tmpWAV"</span><span class="p">);</span> <span class="p">}</span> <span class="k">if</span><span class="p">(</span><span class="nx">doNtf</span> <span class="o">&&</span> <span class="nx">en</span> <span class="o">&&</span> <span class="nx">res</span><span class="p">.</span><span class="nx">length</span><span class="p">)</span> <span class="p">{</span> <span class="nx">SYS</span><span class="p">.</span><span class="nx">fileWrite</span><span class="p">(</span><span class="s2">"tmpPlay"</span><span class="p">,</span> <span class="nx">res</span><span class="p">);</span> <span class="nx">SYS</span><span class="p">.</span><span class="nx">system</span><span class="p">(</span><span class="s2">"play -q tmpPlay"</span><span class="p">);</span> <span class="nx">SYS</span><span class="p">.</span><span class="nx">fileRemove</span><span class="p">(</span><span class="s2">"tmpPlay"</span><span class="p">);</span> <span class="p">}</span> </pre></div> <dl><dd><ul><li> notify2 =</li></ul></dd></dl> <div class="mw-highlight mw-content-ltr" dir="ltr" style="margin-left: 30px"><pre><span class="c">#!/bin/sh</span> <span class="c">#flags=notify2|notifyServ2|queue</span> <span class="k">if</span> <span class="nb">test</span> <span class="nv">$doRes</span> <span class="o">=</span> <span class="m">1</span> -a <span class="s2">"x"</span> !<span class="o">=</span> <span class="s2">"x</span><span class="nv">$mess</span><span class="s2">"</span><span class="p">;</span> <span class="k">then</span> <span class="nb">echo</span> <span class="nv">$mess</span> > tmpText text2wave tmpText -o <span class="nv">$res</span> rm tmpText <span class="k">fi</span> <span class="k">if</span> <span class="nb">test</span> <span class="nv">$doNtf</span> <span class="o">=</span> <span class="m">1</span> -a <span class="nv">$en</span> <span class="o">=</span> <span class="m">1</span> -a -s <span class="nv">$res</span><span class="p">;</span> <span class="k">then</span> play -q <span class="nv">$res</span><span class="p">;</span> <span class="k">fi</span> </pre></div> <dl><dd><ul><li> notifyVisVision2 =</li></ul></dd></dl> <div class="mw-highlight mw-content-ltr" dir="ltr" style="margin-left: 30px"><pre><span class="c1">//flags=notify2|queue</span> <span class="k">if</span><span class="p">(</span><span class="nx">en</span> <span class="o">&&</span> <span class="nx">res</span><span class="p">.</span><span class="nx">length</span><span class="p">)</span> <span class="p">{</span> <span class="nx">SYS</span><span class="p">.</span><span class="nx">fileWrite</span><span class="p">(</span><span class="s2">"tmpPlay"</span><span class="p">,</span> <span class="nx">res</span><span class="p">);</span> <span class="nx">SYS</span><span class="p">.</span><span class="nx">system</span><span class="p">(</span><span class="s2">"play -q tmpPlay"</span><span class="p">);</span> <span class="nx">SYS</span><span class="p">.</span><span class="nx">fileRemove</span><span class="p">(</span><span class="s2">"tmpPlay"</span><span class="p">);</span> <span class="p">}</span> </pre></div> <dl><dd><ul><li> notifyVisVision2 =</li></ul></dd></dl> <div class="mw-highlight mw-content-ltr" dir="ltr" style="margin-left: 30px"><pre><span class="c">#!/bin/sh</span> <span class="c">#flags=notify2|queue</span> <span class="k">if</span> <span class="nb">test</span> <span class="nv">$en</span> <span class="o">=</span> <span class="m">1</span> -a -s <span class="nv">$res</span><span class="p">;</span> <span class="k">then</span> play -q <span class="nv">$res</span><span class="p">;</span> <span class="k">fi</span> </pre></div> <p><br /> </p> <h3><span class="mw-headline" id=".D0.A3.D0.BF.D1.80.D0.B0.D0.B2.D0.BB.D0.B5.D0.BD.D0.B8.D0.B5_.D0.BF.D1.80.D0.B0.D0.B2.D0.B0.D0.BC.D0.B8"><span class="mw-headline-number">3.7</span> Управление правами</span></h3> <p>Ð”Ð»Ñ Ñ€Ð°Ð·Ð´ÐµÐ»ÐµÐ½Ð¸Ñ Ð´Ð¾Ñтупа к интерфейÑу ВУ и его ÑоÑтавлÑющим, каждый виджет Ñодержит информацию о владельце, его групах и правах доÑтупа. Права доÑтупа запиÑываютÑÑ Ð² виде триады: "<b>{пользователь}{группа[,группа1,группаN]}{оÑтальные}</b>", где каждый Ñлемент ÑоÑтоит из двух признаков доÑтупа, Ð´Ð»Ñ ÐºÐ¾Ñ‚Ð¾Ñ€Ñ‹Ñ… принÑта ÑÐ»ÐµÐ´ÑƒÑŽÑ‰Ð°Ñ Ð¸Ð½Ñ‚ÐµÑ€Ð¿Ñ€ÐµÑ‚Ð°Ñ†Ð¸Ñ: </p> <ul><li> <b>r</b> — право на проÑмотр виджета;</li> <li> <b>w</b> — право на контроль над виджетом.</li></ul> <p>Ð’ режиме разработки иÑпользуетÑÑ Ð¿Ñ€Ð¾ÑÑ‚Ð°Ñ Ñхема доÑтупа "root:UI|RWRWR_", что означает — вÑе пользователи могут открывать и проÑматривать библиотеки, их компоненты и проекты; а редактировать могут вÑе пользователи группы "UI" (пользовательÑкие интерфейÑÑ‹). </p><p>Ð’ режиме иÑÐ¿Ð¾Ð»Ð½ÐµÐ½Ð¸Ñ Ñ€Ð°Ð±Ð¾Ñ‚Ð°ÑŽÑ‚ права, опиÑанные в компонентах интерфейÑа, которые предуÑматривают возможноÑÑ‚ÑŒ наÑÐ»ÐµÐ´Ð¾Ð²Ð°Ð½Ð¸Ñ Ð²Ð»Ð°Ð´ÐµÐ»ÑŒÑ†Ð° и прав, Ñверху вниз. Причём, по умолчанию, наÑледование включено в каждом виджете, а значит — они получат владельца и права проекта. Ð’ тоже времÑ, прÑÐ¼Ð°Ñ ÑƒÑтановка прав ÑоÑтавного виджета раÑпроÑтранит их на вÑе компоненты Ñтого виджета. </p><p><br /> </p> <h3><span class="mw-headline" id=".D0.A1.D0.B2.D1.8F.D0.B7.D1.8B.D0.B2.D0.B0.D0.BD.D0.B8.D0.B5_.D1.81_.D0.B4.D0.B8.D0.BD.D0.B0.D0.BC.D0.B8.D0.BA.D0.BE.D0.B9"><span class="mw-headline-number">3.8</span> СвÑзывание Ñ Ð´Ð¸Ð½Ð°Ð¼Ð¸ÐºÐ¾Ð¹</span></h3> <p>Ð”Ð»Ñ Ð¿Ñ€ÐµÐ´Ð¾ÑÑ‚Ð°Ð²Ð»ÐµÐ½Ð¸Ñ Ð² Ð¸Ð½Ñ‚ÐµÑ€Ñ„ÐµÐ¹Ñ Ð²Ð¸Ð·ÑƒÐ°Ð»Ð¸Ð·Ð°Ñ†Ð¸Ð¸ актуальных данных, должны иÑпользоватьÑÑ Ð´Ð°Ð½Ð½Ñ‹Ðµ подÑиÑтемы "Сбор данных (DAQ)". Природа Ñтих данных ÑледующаÑ: </p> <ol><li> параметры, Ñодержащие некоторое количеÑтво атрибутов;</li> <li> атрибуты параметра могут предоÑтавлÑÑ‚ÑŒ данные пÑти базовых типов: ЛогичеÑкий, Целый, ВещеÑтвенный, Строковый и Объект;<br /> которые дополнено СВУ модификаторами: "ВыбираетÑÑ"; вариантами Строки: "ТекÑÑ‚", "Перевод", "Цвет", "Изображение", "Шрифт", "ÐдреÑ"; вариантами Целого: "ДатаВремÑ".</li> <li> атрибуты параметра могут иметь архив (иÑторию);</li> <li> атрибуты параметра могут быть на чтение, запиÑÑŒ и Ñ Ð¿Ð¾Ð»Ð½Ñ‹Ð¼ доÑтупом.</li></ol> <p>Ð£Ñ‡Ð¸Ñ‚Ñ‹Ð²Ð°Ñ Ð¿ÐµÑ€Ð²Ñ‹Ð¹ пункт, нужно обеÑпечить возможноÑÑ‚ÑŒ группового Ð½Ð°Ð·Ð½Ð°Ñ‡ÐµÐ½Ð¸Ñ ÑÑылки. Ð”Ð»Ñ Ñтого иÑпользуем <a href="../DAQ.html#LogicLev" title="Special:MyLanguage/Documents/DAQ">концепцию логичеÑкого уровнÑ</a>. </p><p>Ð’ ÑоответÑтвии Ñ Ð¿ÑƒÐ½ÐºÑ‚Ð¾Ð¼ 2, ÑвÑзи обеÑпечивают прозрачное преобразование типов и не требуют Ñпециальной конфигурации. </p><p>Ð”Ð»Ñ ÑƒÐ´Ð¾Ð²Ð»ÐµÑ‚Ð²Ð¾Ñ€ÐµÐ½Ð¸Ñ Ð²Ð¾Ð·Ð¼Ð¾Ð¶Ð½Ð¾Ñти доÑтупа к архивам, в ÑоответÑтвии Ñ Ð¿ÑƒÐ½ÐºÑ‚Ð¾Ð¼ 3, ÑвÑзи выполнÑÑŽÑ‚ проверку типа атрибута и, в Ñлучае Ð¿Ð¾Ð´ÐºÐ»ÑŽÑ‡ÐµÐ½Ð¸Ñ Ðº "ÐдреÑу", в значение помещаетÑÑ Ð°Ð´Ñ€ÐµÑ ÑвÑзи. </p><p>Ð’ терминах СВУ, динамичеÑкие ÑвÑзи и ÐºÐ¾Ð½Ñ„Ð¸Ð³ÑƒÑ€Ð°Ñ†Ð¸Ñ Ð´Ð¸Ð½Ð°Ð¼Ð¸ÐºÐ¸ ÑвлÑÑŽÑ‚ÑÑ Ð¾Ð´Ð½Ð¸Ð¼ процеÑÑом, Ð´Ð»Ñ Ð¾Ð¿Ð¸ÑÐ°Ð½Ð¸Ñ ÐºÐ¾Ð½Ñ„Ð¸Ð³ÑƒÑ€Ð°Ñ†Ð¸Ð¸ которого предуÑматриваетÑÑ Ð²ÐºÐ»Ð°Ð´ÐºÐ° "Обработка" виджетов. Вкладка Ñодержит таблицу конфигурации ÑвойÑтв атрибутов и текÑÑ‚ процедуры вычиÑÐ»ÐµÐ½Ð¸Ñ Ð²Ð¸Ð´Ð¶ÐµÑ‚Ð°. </p> <div class="center"><div class="thumb tnone"><div class="thumbinner" style="width:1088px;"><a class="image" href="http://oscada.org/wiki/File:VCA_wdg_proc_ru.png"><img class="thumbimage" height="766" src="../files/VCA_wdg_proc_ru.png" width="1086" /></a> <div class="thumbcaption">РиÑунок. Вкладка "Обработка" Ñтраницы конфигурации виджета.</div></div></div></div> <p>Кроме полей конфигурации атрибутов, в таблице предуÑматриваетÑÑ ÐºÐ¾Ð»Ð¾Ð½ÐºÐ° "Обработка", Ð´Ð»Ñ Ð¸Ð·Ð±Ð¸Ñ€Ð°Ñ‚ÐµÐ»ÑŒÐ½Ð¾Ð³Ð¾ иÑÐ¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ð½Ð¸Ñ Ð°Ñ‚Ñ€Ð¸Ð±ÑƒÑ‚Ð¾Ð² в вычиÑлительной процедуре виджета, и колонки "КонфигурациÑ", "Конфигурационный шаблон" Ð´Ð»Ñ Ð¾Ð¿Ð¸ÑÐ°Ð½Ð¸Ñ ÐºÐ¾Ð½Ñ„Ð¸Ð³ÑƒÑ€Ð°Ñ†Ð¸Ð¸ ÑвÑзей. </p><p>ЕÑли в колонке "Обработка" Ñтоит true, то в вычиÑлительной процедуре ÑтановитÑÑ Ð´Ð¾Ñтупной Ð¿ÐµÑ€ÐµÐ¼ÐµÐ½Ð½Ð°Ñ <i>{идентификатор виджета}_{идентификатор атрибута}</i>, например <i>cw_value</i>. </p><p>Колонка "КонфигурациÑ" позволÑет указать тип ÑвÑзи атрибута виджета: </p> <ul><li> <i>ПоÑтоÑннаÑ</i> — во вкладке ÑвÑзей виджета поÑвлÑетÑÑ Ð¿Ð¾Ð»Ðµ ÑƒÐºÐ°Ð·Ð°Ð½Ð¸Ñ Ð¿Ð¾ÑтоÑнной, например, оÑобого цвета или заголовка шаблонных кадров.</li> <li> <i>Ð’Ñ…Ð¾Ð´Ð½Ð°Ñ ÑвÑзь</i> — ÑвÑзь Ñ Ð´Ð¸Ð½Ð°Ð¼Ð¸ÐºÐ¾Ð¹ только Ð´Ð»Ñ Ñ‡Ñ‚ÐµÐ½Ð¸Ñ.</li> <li> <i>Ð’Ñ‹Ñ…Ð¾Ð´Ð½Ð°Ñ ÑвÑзь</i> — ÑвÑзь Ñ Ð´Ð¸Ð½Ð°Ð¼Ð¸ÐºÐ¾Ð¹ только Ð´Ð»Ñ Ð·Ð°Ð¿Ð¸Ñи.</li> <li> <i>ÐŸÐ¾Ð»Ð½Ð°Ñ ÑвÑзь</i> — Ð¿Ð¾Ð»Ð½Ð°Ñ ÑвÑзь Ñ Ð´Ð¸Ð½Ð°Ð¼Ð¸ÐºÐ¾Ð¹, чтение и запиÑÑŒ.</li> <li> <i>Из ÑтилÑ</i> — брать значение из ÑÑ‚Ð¸Ð»Ñ Ð¿Ñ€Ð¾ÐµÐºÑ‚Ð°.</li></ul> <p>Колонка "Конфигурационный шаблон" позволÑет ÑвÑзать группы динамичеÑких атрибутов. Ðапример, Ñто могут быть разные типы параметров подÑиÑтемы "DAQ" и другие виджеты интерфейÑа. При корректном формировании Ñтого Ð¿Ð¾Ð»Ñ Ñ€Ð°Ð±Ð¾Ñ‚Ð°ÐµÑ‚ механизм автоматичеÑкого Ð½Ð°Ð·Ð½Ð°Ñ‡ÐµÐ½Ð¸Ñ Ð°Ñ‚Ñ€Ð¸Ð±ÑƒÑ‚Ð¾Ð², при указании только параметра подÑиÑтемы "DAQ" или виджета интерфейÑа, что упрощает и уÑкорÑет процеÑÑ ÐºÐ¾Ð½Ñ„Ð¸Ð³ÑƒÑ€Ð°Ñ†Ð¸Ð¸. Значение Ñтой колонки имеет Ñледующий формат: </p> <ul><li> <i>Ð”Ð»Ñ Ð¿Ð¾ÑтоÑнной:</i> прÑмое значение атрибута.</li> <li> <i>Ð”Ð»Ñ ÑвÑзи:</i> "<b>{параметр}|{идентификатор}</b>", где: <ul><li> <i>параметр</i> — группа атрибутов;</li> <li> <i>идентификатор</i> — идентификатор атрибута; именно значение в Ñтом поле ÑопоÑтавлÑетÑÑ Ñ Ð°Ñ‚Ñ€Ð¸Ð±ÑƒÑ‚Ð°Ð¼Ð¸ параметров DAQ поÑле ÑƒÐºÐ°Ð·Ð°Ð½Ð¸Ñ Ð³Ñ€ÑƒÐ¿Ð¿Ð¾Ð²Ð¾Ð¹ ÑвÑзи, при автоматичеÑком ÑвÑзывании;</li></ul></li> <li> <i>Ð”Ð»Ñ ÑтилÑ:</i> идентификатор-Ð¸Ð¼Ñ Ð¿Ð¾Ð»Ñ ÑтилÑ.</li></ul> <p>УÑтановка ÑвÑзей может быть неÑкольких типов, который определÑетÑÑ Ð¿Ñ€ÐµÑ„Ð¸ÐºÑом: </p> <ul><li> <i>val:</i> — ПрÑÐ¼Ð°Ñ Ð·Ð°Ð³Ñ€ÑƒÐ·ÐºÐ° Ð·Ð½Ð°Ñ‡ÐµÐ½Ð¸Ñ Ñ‡ÐµÑ€ÐµÐ· механизм ÑвÑзей. Ðапример, ÑвÑзь "val:100" загружает значение 100 в атрибут виджета. ЧаÑто иÑпользуетÑÑ Ð² Ñлучае отÑутÑÑ‚Ð²Ð¸Ñ ÐºÐ¾Ð½ÐµÑ‡Ð½Ð¾Ð¹ точки ÑвÑзи, Ñ Ñ†ÐµÐ»ÑŒÑŽ прÑмой уÑтановки значениÑ.</li> <li> <i>prm:</i> — СвÑзь на атрибут параметра или параметр, в целом, Ð´Ð»Ñ Ð³Ñ€ÑƒÐ¿Ð¿Ñ‹ атрибутов подÑиÑтемы "Сбор данных". Ðапример, ÑвÑзь "prm:/LogicLev/experiment/Pi/var" оÑущеÑтвлÑет доÑтуп атрибута виджета к атрибуту параметра подÑиÑтемы "Сбор данных". Знак "(+)", в конце адреÑа, указывает на уÑпешную линковку и приÑутÑтвие целевого объекта. Ð”Ð»Ñ Ð°Ñ‚Ñ€Ð¸Ð±ÑƒÑ‚Ð¾Ð² объектного типа допуÑтим иерархичеÑкий доÑтуп к конкретному ÑвойÑтву объекта, путём ÑƒÐºÐ°Ð·Ð°Ð½Ð¸Ñ ÐµÐ³Ð¾ пути через Ñимвол '#', например: "prm:/LogicLev/experiment/Pi/var#pr1/pr2".</li> <li> <i>wdg:</i> — СвÑзь на атрибут другого виджета или виджет, в целом, Ð´Ð»Ñ Ð³Ñ€ÑƒÐ¿Ð¿Ñ‹ атрибутов. Ðапример, ÑвÑзь "wdg:/ses_AGLKS/pg_so/pg_1/pg_ggraph/pg_1/a_bordColor" оÑущеÑтвлÑет доÑтуп атрибута одного виджета к атрибуту другого. ПоддерживаютÑÑ ÐºÐ°Ðº абÑолютные, так и отноÑительные пути ÑвÑзей. Точкой отÑчёта адреÑа абÑолютной ÑвÑзи выÑтупает объект ÐºÐ¾Ñ€Ð½Ñ Ð¼Ð¾Ð´ÑƒÐ»Ñ "VCAEngine", а значит — первым Ñлементом абÑолютного адреÑа ÑвлÑетÑÑ Ð¸Ð´ÐµÐ½Ñ‚Ð¸Ñ„Ð¸ÐºÐ°Ñ‚Ð¾Ñ€ ÑеанÑа или проекта. Первый Ñлемент, на Ñтороне ÑеанÑа, опуÑкаетÑÑ, поÑтому ÑвÑзи, уÑтановленные в проекте, там работают. ОтноÑительные ÑвÑзи берут отÑчёт от виджета, где ÑвÑзь указана. Специальным Ñлементом отноÑительной ÑвÑзи ÑвлÑетÑÑ Ñлемент вышеÑтоÑщего узла "..".</li> <li> <i>arh:</i> — ОÑобый тип ÑвÑзи, доÑтупный только Ð´Ð»Ñ Ð¾Ñ‚Ð´ÐµÐ»ÑŒÐ½Ð¾Ð³Ð¾ атрибута типа "ÐдреÑ", который позволÑет подключитьÑÑ Ð¿Ñ€Ñмо к архиву значений ("arh:CPU_load"). Может быть полезен Ð´Ð»Ñ ÑƒÐºÐ°Ð·Ð°Ð½Ð¸Ñ Ð°Ñ€Ñ…Ð¸Ð²Ð° в качеÑтве иÑточника данных примитива "Диаграмма".</li></ul> <p>Обработка ÑвÑзей проиÑходит Ñ Ð¿ÐµÑ€Ð¸Ð¾Ð´Ð¸Ñ‡Ð½Ð¾Ñтью вычиÑÐ»ÐµÐ½Ð¸Ñ Ð²Ð¸Ð´Ð¶ÐµÑ‚Ð°, в порÑдке: </p> <ul><li> получение данных входных ÑвÑзей;</li> <li> выполнение вычиÑÐ»ÐµÐ½Ð¸Ñ Ð¿Ñ€Ð¾Ñ†ÐµÐ´ÑƒÑ€Ñ‹ виджета;</li> <li> передача значений по выходным ÑвÑзÑм.</li></ul> <p>Ðа риÑунке предÑтавлена вкладка ÑвÑзей Ñ Ð³Ñ€ÑƒÐ¿Ð¿Ð¾Ð²Ñ‹Ð¼ назначением атрибутов, путём ÑƒÐºÐ°Ð·Ð°Ð½Ð¸Ñ Ñ‚Ð¾Ð»ÑŒÐºÐ¾ параметра. Ðа Ñледующем риÑунке предÑтавлено индивидуальное назначение атрибутов. </p> <div class="center"><div class="thumb tnone"><div class="thumbinner" style="width:753px;"><a class="image" href="http://oscada.org/wiki/File:VCA_wdg_lnk_grp_ru.png"><img class="thumbimage" height="531" src="../files/VCA_wdg_lnk_grp_ru.png" width="751" /></a> <div class="thumbcaption">РиÑунок. Вкладка "СвÑзи" Ñтраницы конфигурации виджета c групповым назначением атрибутов путём ÑƒÐºÐ°Ð·Ð°Ð½Ð¸Ñ Ñ‚Ð¾Ð»ÑŒÐºÐ¾ параметра.</div></div></div></div> <div class="center"><div class="thumb tnone"><div class="thumbinner" style="width:753px;"><a class="image" href="http://oscada.org/wiki/File:VCA_wdg_lnk_attr_ru.png"><img class="thumbimage" height="531" src="../files/VCA_wdg_lnk_attr_ru.png" width="751" /></a> <div class="thumbcaption">РиÑунок. Вкладка "СвÑзи" Ñтраницы конфигурации виджета c индивидуальным назначением атрибутов.</div></div></div></div> <p>При размещении виджета в контейнер виджетов вÑе ÑвÑзи иÑходного виджета добавлÑÑŽÑ‚ÑÑ Ð² ÑпиÑок результирующих ÑвÑзей контейнера виджетов, однако, только на глубину в один уровень вложениÑ. </p> <div class="center"><div class="thumb tnone"><div class="thumbinner" style="width:851px;"><a class="image" href="http://oscada.org/wiki/File:VCA_cntwdg_lnk_ru.png"><img class="thumbimage" height="665" src="../files/VCA_cntwdg_lnk_ru.png" width="849" /></a> <div class="thumbcaption">РиÑунок. Вкладка "СвÑзи" Ñтраницы конфигурации контейнера виджетов, включающего виджеты Ñо ÑвÑзÑми.</div></div></div></div> <p>Из вышеÑказанного видно, что ÑвÑзи уÑтанавливаютÑÑ Ð¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ñ‚ÐµÐ»ÐµÐ¼ в процеÑÑе конфигурации интерфейÑа. Однако, Ð´Ð»Ñ Ð¿Ñ€ÐµÐ´Ð¾ÑÑ‚Ð°Ð²Ð»ÐµÐ½Ð¸Ñ Ð²Ð¾Ð·Ð¼Ð¾Ð¶Ð½Ð¾Ñти ÑÐ¾Ð·Ð´Ð°Ð½Ð¸Ñ ÐºÐ°Ð´Ñ€Ð¾Ð² общего Ð½Ð°Ð·Ð½Ð°Ñ‡ÐµÐ½Ð¸Ñ Ñ Ñ„ÑƒÐ½ÐºÑ†Ð¸ÐµÐ¹ предоÑÑ‚Ð°Ð²Ð»ÐµÐ½Ð¸Ñ Ð´ÐµÑ‚Ð°Ð»Ð¸Ð·Ð¸Ñ€Ð¾Ð²Ð°Ð½Ð½Ñ‹Ñ… данных разных иÑточников одного типа, необходим механизм <span id="DynLink" title="#DynLink">динамичеÑкой уÑтановки ÑвÑзей</span>. Такой механизм предуÑматриваетÑÑ: </p> <ul><li> резервированием ключевого идентификатора "<b><page></b>" Ð´Ð»Ñ Ð³Ñ€ÑƒÐ¿Ð¿Ñ‹ атрибутов ÑвÑзей у кадров общего назначениÑ;</li> <li> динамичеÑким назначением ÑвÑзей Ñ Ð¸Ð´ÐµÐ½Ñ‚Ð¸Ñ„Ð¸ÐºÐ°Ñ‚Ð¾Ñ€Ð¾Ð¼ "<b><page></b>", в процеÑÑе Ð¾Ñ‚ÐºÑ€Ñ‹Ñ‚Ð¸Ñ ÐºÐ°Ð´Ñ€Ð° общего Ð½Ð°Ð·Ð½Ð°Ñ‡ÐµÐ½Ð¸Ñ Ñигналом от другого виджета.</li></ul> <p>РаÑÑмотрим пример, когда имеетÑÑ ÐºÐ°Ð´Ñ€ общего Ð½Ð°Ð·Ð½Ð°Ñ‡ÐµÐ½Ð¸Ñ "Панель ÐºÐ¾Ð½Ñ‚Ñ€Ð¾Ð»Ñ Ð³Ñ€Ð°Ñ„Ð¸ÐºÐ¾Ð¼" и множеÑтво "Графиков" на разных кадрах. "Панель ÐºÐ¾Ð½Ñ‚Ñ€Ð¾Ð»Ñ Ð³Ñ€Ð°Ñ„Ð¸ÐºÐ¾Ð¼" имеет ÑвÑзи Ñ ÑˆÐ°Ð±Ð»Ð¾Ð½Ð°Ð¼Ð¸: </p> <ul><li> tSek -> "<page>|tSek"</li> <li> tSize -> "<page>|tSize"</li> <li> trcPer -> "<page>|trcPer"</li> <li> valArch -> "<page>|valArch"</li></ul> <p>При Ñтом, каждый виджет "График" имеет атрибуты "tSek", "tSize", "trcPer" и "valArch". При вызове Ñигнала Ð¾Ñ‚ÐºÑ€Ñ‹Ñ‚Ð¸Ñ "Панели ÐºÐ¾Ð½Ñ‚Ñ€Ð¾Ð»Ñ Ð³Ñ€Ð°Ñ„Ð¸ÐºÐ¾Ð¼" из любого виджета "График", проиÑходит ÑвÑÐ·Ñ‹Ð²Ð°Ð½Ð¸Ñ Ð°Ñ‚Ñ€Ð¸Ð±ÑƒÑ‚Ð¾Ð² "Панели ÐºÐ¾Ð½Ñ‚Ñ€Ð¾Ð»Ñ Ð³Ñ€Ð°Ñ„Ð¸ÐºÐ¾Ð¼" Ñ Ð°Ñ‚Ñ€Ð¸Ð±ÑƒÑ‚Ð°Ð¼Ð¸ виджета "График", ÑоглаÑно шаблону. Как результат, вÑе Ð¸Ð·Ð¼ÐµÐ½ÐµÐ½Ð¸Ñ Ð½Ð° "Панели ÐºÐ¾Ð½Ñ‚Ñ€Ð¾Ð»Ñ Ð³Ñ€Ð°Ñ„Ð¸ÐºÐ¾Ð¼" будут отражатьÑÑ Ð½Ð° графике, поÑредÑтвом Ñтих ÑвÑзей. </p><p>ЕÑли у виджета "График" приÑутÑтвуют внешние ÑвÑзи на параметры подÑиÑтемы "Сбор данных", ÑвÑзи "Панели ÐºÐ¾Ð½Ñ‚Ñ€Ð¾Ð»Ñ Ð³Ñ€Ð°Ñ„Ð¸ÐºÐ¾Ð¼" будут уÑтанавливатьÑÑ Ð½Ð° внешний иÑточник. Кроме того, еÑли у "Панели ÐºÐ¾Ð½Ñ‚Ñ€Ð¾Ð»Ñ Ð³Ñ€Ð°Ñ„Ð¸ÐºÐ¾Ð¼" будут заÑвлены ÑвÑзи на атрибуты, отÑутÑтвующие непоÑредÑтвенно у виджета "График", то будет производитÑÑ Ð¿Ð¾Ð¸Ñк Ð½Ð°Ð»Ð¸Ñ‡Ð¸Ñ Ñ‚Ð°ÐºÐ¸Ñ… атрибутов у внешнего иÑточника — первого на который уÑтановлена прÑÐ¼Ð°Ñ ÑвÑзь, выполнÑÑ, тем Ñамым, дополнение недоÑтающих ÑвÑзей. </p><p>Ð”Ð»Ñ Ð½Ð°Ð³Ð»Ñдного Ð¸Ð·Ð¾Ð±Ñ€Ð°Ð¶ÐµÐ½Ð¸Ñ Ñтого механизма приведена таблица. </p><p><b>Таблица.</b> Механизм динамичеÑкой линковки. </p> <table class="wikitable"> <tr> <th> Ðтрибуты "Панели ÐºÐ¾Ð½Ñ‚Ñ€Ð¾Ð»Ñ Ð³Ñ€Ð°Ñ„Ð¸ÐºÐ¾Ð¼" (шаблон динамичеÑкой ÑвÑзи) </th> <th> Ðтрибуты "Графика" </th> <th> Ðтрибуты внешнего "Параметра" </th> <th> Ð ÐµÐ·ÑƒÐ»ÑŒÑ‚Ð¸Ñ€ÑƒÑŽÑ‰Ð°Ñ ÑвÑзь или значение ÑвÑзующегоÑÑ Ð°Ñ‚Ñ€Ð¸Ð±ÑƒÑ‚Ð° </th></tr> <tr> <td> tSek (<page>|tSek) </td> <td> tSek </td> <td> - </td> <td> "График".tSek </td></tr> <tr> <td> tSize (<page>|tSize) </td> <td> tSize </td> <td> - </td> <td> "График".tSize </td></tr> <tr> <td> trcPer (<page>|trcPer) </td> <td> trcPer </td> <td> - </td> <td> "График".trcPer </td></tr> <tr> <td> valArch (<page>|valArch) </td> <td> valArch </td> <td> - </td> <td> "График".valArch </td></tr> <tr> <td> var (<page>|var) </td> <td> var </td> <td> var </td> <td> "Параметр".var </td></tr> <tr> <td> ed (<page>|ed) </td> <td> - </td> <td> ed </td> <td> "Параметр".ed </td></tr> <tr> <td> max (<page>|max) </td> <td> - </td> <td> - </td> <td> EVAL </td></tr> <tr> <td> min (<page>|min) </td> <td> - </td> <td> - </td> <td> EVAL </td></tr></table> <p><br /> </p> <h3><span class="mw-headline" id=".D0.9F.D1.80.D0.B8.D0.BC.D0.B8.D1.82.D0.B8.D0.B2.D1.8B_.D0.B2.D0.B8.D0.B4.D0.B6.D0.B5.D1.82.D0.BE.D0.B2"><span class="mw-headline-number">3.9</span> <span id="WidgetPrimitives" title="#WidgetPrimitives">Примитивы виджетов</span></span></h3> <p>Любой вновь Ñоздаваемый виджет оÑновываетÑÑ Ð½Ð° одном из неÑкольких примитивов — конечном Ñлементе визуализации, путём уÑтановки родÑтвенной ÑвÑзи как прÑмо на примитив, так и поÑредÑтвом неÑкольких промежуточных пользовательÑких виджетов. Каждый из примитивов Ñодержит механизм модели данных. ÐкземплÑÑ€ виджета хранит Ð·Ð½Ð°Ñ‡ÐµÐ½Ð¸Ñ ÑвойÑтв ÑобÑтвенной конфигурации примитива. </p><p>Ð’ задачи интерфейÑа визуализации входит поддержка и работа Ñ Ð¼Ð¾Ð´ÐµÐ»ÑŒÑŽ данных примитивов виджетов. Примитивы виджетов должны быть тщательно проработаны и унифицированы, Ñ Ñ†ÐµÐ»ÑŒÑŽ охватить как можно больше возможноÑтей в как можно меньшем количеÑтве Ñлабо ÑвÑзанных друг Ñ Ð´Ñ€ÑƒÐ³Ð¾Ð¼, по назначению, примитивов. </p><p><b>Таблица.</b> Библиотека примитивов виджетов — базовые Ñлементы Ð¾Ñ‚Ð¾Ð±Ñ€Ð°Ð¶ÐµÐ½Ð¸Ñ </p> <table class="wikitable"> <tr> <th> Идентификатор </th> <th> Ðаименование </th> <th> Ð¤ÑƒÐ½ÐºÑ†Ð¸Ñ </th></tr> <tr> <td> ElFigure </td> <td> ÐÐ»ÐµÐ¼ÐµÐ½Ñ‚Ð°Ñ€Ð½Ð°Ñ Ð³Ñ€Ð°Ñ„Ð¸Ñ‡ÐµÑÐºÐ°Ñ Ñ„Ð¸Ð³ÑƒÑ€Ð° </td> <td> <p>Примитив ÑвлÑетÑÑ Ð¾Ñновой отриÑовки Ñлементарных графичеÑких фигур Ñо вÑевозможной комбинацией их в одном объекте. ПредуÑматриваетÑÑ Ð¿Ð¾Ð´Ð´ÐµÑ€Ð¶ÐºÐ° Ñледующих Ñлементарных фигур: </p> <ul><li> ЛиниÑ.</li> <li> Дуга.</li> <li> ÐšÑ€Ð¸Ð²Ð°Ñ Ð‘ÐµÐ·ÑŒÐµ.</li> <li> Заливка замкнутого проÑтранÑтва.<br /></li></ul> <p>Ð”Ð»Ñ Ð²Ñех фигур, ÑодержащихÑÑ Ð² виджете, уÑтанавливаютÑÑ ÐµÐ´Ð¸Ð½Ñ‹Ðµ ÑвойÑтва толщины, цвета и Ñ‚.д., также, предуÑматриваетÑÑ Ð²Ð¾Ð·Ð¼Ð¾Ð¶Ð½Ð¾ÑÑ‚ÑŒ ÑƒÐºÐ°Ð·Ð°Ð½Ð¸Ñ Ð²Ñ‹ÑˆÐµÐ¿ÐµÑ€ÐµÑ‡Ð¸Ñленных атрибутов Ð´Ð»Ñ ÐºÐ°Ð¶Ð´Ð¾Ð¹ фигуры отдельно и их динамизациÑ. </p> </td></tr> <tr> <td> FormEl </td> <td> Ðлемент формы </td> <td> <p>Включает поддержку Ñтандартных компонентов формы: </p> <ul><li> Редактирование Ñтроки.</li> <li> Редактирование текÑта.</li> <li> Флажок.</li> <li> Кнопка.</li> <li> Выбор из ÑпиÑка.</li> <li> СпиÑок.</li> <li> Дерево.</li> <li> Таблица.</li> <li> Слайдер.</li> <li> Строка прокрутки. </li></ul> </td></tr> <tr> <td> Text </td> <td> ТекÑÑ‚ </td> <td> Ðлемент текÑта-метка. ХарактеризуетÑÑ Ñ‚Ð¸Ð¿Ð¾Ð¼ шрифта, цветом, ориентацией и выравниванием. ПредуÑматриваетÑÑ Ð¿Ð¾Ð´Ð´ÐµÑ€Ð¶ÐºÐ° аргументов. </td></tr> <tr> <td> Media </td> <td> Медиа </td> <td> Ðлемент Ð¾Ñ‚Ð¾Ð±Ñ€Ð°Ð¶ÐµÐ½Ð¸Ñ Ñ€Ð°Ñтровых и векторных изображений различных форматов, Ð¿Ñ€Ð¾Ð¸Ð³Ñ€Ñ‹Ð²Ð°Ð½Ð¸Ñ Ð°Ð½Ð¸Ð¼Ð¸Ñ€Ð¾Ð²Ð°Ð½Ð½Ñ‹Ñ… изображений, проигрывание аудио-фрагментов и проÑмотр видео-фрагментов. </td></tr> <tr> <td> Diagram </td> <td> Диаграмма </td> <td> Ðлемент диаграммы Ñ Ð¿Ð¾Ð´Ð´ÐµÑ€Ð¶ÐºÐ¾Ð¹ возможноÑти Ð¾Ñ‚Ð¾Ð±Ñ€Ð°Ð¶ÐµÐ½Ð¸Ñ Ð½ÐµÑкольких потоков в реальном времени длÑ: трендов (временных графиков), чаÑтотного Ñпектра, XY диаграмм. </td></tr> <tr> <td> Protocol </td> <td> Протокол </td> <td> Ðлемент протокола — визуализатор Ñообщений программы, Ñ Ð¿Ð¾Ð´Ð´ÐµÑ€Ð¶ÐºÐ¾Ð¹ неÑкольких режимов работы. </td></tr> <tr> <td> Document </td> <td> Документ </td> <td> Ðлемент Ñ„Ð¾Ñ€Ð¼Ð¸Ñ€Ð¾Ð²Ð°Ð½Ð¸Ñ Ð¾Ñ‚Ñ‡Ñ‘Ñ‚Ð¾Ð², журналов и другой документации на оÑнове доÑтупных данных. </td></tr> <tr> <td> Box </td> <td> Контейнер </td> <td> Содержит механизм размещениÑ-Ð²ÐºÐ»ÑŽÑ‡ÐµÐ½Ð¸Ñ Ð´Ñ€ÑƒÐ³Ð¸Ñ… виджетов Ð´Ð»Ñ Ñ„Ð¾Ñ€Ð¼Ð¸Ñ€Ð¾Ð²Ð°Ð½Ð¸Ñ Ð½Ð¾Ð²Ñ‹Ñ…, более Ñложных, виджетов и Ñтраниц конечной визуализации. </td></tr> <tr> <td> Function, <span style="color: red">в планах</span> </td> <td> Ð¤ÑƒÐ½ÐºÑ†Ð¸Ñ API объектной модели OpenSCADA </td> <td> Ðевизуальный виджет, на Ñтороне иÑполнениÑ, позволÑющий включать вычиÑлительные функции объектной модели OpenSCADA в СВУ. </td></tr></table> <p><b>Таблица.</b> Общий набор ÑвойÑтв/атрибутов виджета </p> <table class="wikitable"> <tr> <th> Идентификатор </th> <th> Ð˜Ð¼Ñ </th> <th> Ðомер </th> <th> Значение </th></tr> <tr> <td> id </td> <td> Идентификатор </td> <td> - </td> <td> Идентификатор Ñлемента. Ðтрибут только Ð´Ð»Ñ Ñ‡Ñ‚ÐµÐ½Ð¸Ñ, призванный предоÑтавить информацию об идентификаторе Ñлемента. </td></tr> <tr> <td> path </td> <td> Путь </td> <td> - </td> <td> Путь к Ñтому виджету. Ðтрибут только Ð´Ð»Ñ Ñ‡Ñ‚ÐµÐ½Ð¸Ñ Ð¸ предоÑÑ‚Ð°Ð²Ð»ÐµÐ½Ð¸Ñ Ð¸Ñчерпывающей информации о раÑÐ¿Ð¾Ð»Ð¾Ð¶ÐµÐ½Ð¸Ñ Ñлемента. </td></tr> <tr> <td> parent </td> <td> Родитель </td> <td> - </td> <td> Путь к родительÑкому виджету. Ðтрибут только Ð´Ð»Ñ Ñ‡Ñ‚ÐµÐ½Ð¸Ñ Ð¸ предоÑÑ‚Ð°Ð²Ð»ÐµÐ½Ð¸Ñ Ð¸Ð½Ñ„Ð¾Ñ€Ð¼Ð°Ñ†Ð¸Ð¸ о раÑположении предка от которого унаÑледован виджет. </td></tr> <tr> <td> owner </td> <td> Владелец </td> <td> - </td> <td> Владелец и группы виджета, в виде "<b>{владелец}:{группа[,группа2,группаN]}</b>", по умолчанию "root:UI". </td></tr> <tr> <td> perm </td> <td> ДоÑтуп </td> <td> - </td> <td> <p>Права доÑтупа к виджету, в виде "<b>{пользователь}{группы}{другие}</b>" Ð¿Ð»ÑŽÑ Ñ„Ð»Ð°Ð³ наÑледованиÑ, включающий наÑледование владельца и его прав от вышеÑтоÑщего виджета.<br /> Где "<b>пользователь</b>", "<b>группы</b>" и "<b>другие</b>" Ñто: </p> <ul><li> "__" — нет доÑтупа;</li> <li> "R_" — только чтение;</li> <li> "RW" — чтение и запиÑÑŒ.<br /></li></ul> <p>По умолчанию 01000 — наÑледование. </p> </td></tr> <tr> <td> root </td> <td> Корень </td> <td> 1 </td> <td> Идентификатор виджета-примитива (базового Ñлемента), который лежит в оÑнове образа визуализации виджета. </td></tr> <tr> <td> name </td> <td> Ð˜Ð¼Ñ </td> <td> - </td> <td> Ð˜Ð¼Ñ Ñлемента. Модифицируемое Ð¸Ð¼Ñ Ñлемента. </td></tr> <tr> <td> dscr </td> <td> ОпиÑание </td> <td> - </td> <td> ОпиÑание Ñлемента. ТекÑтовое поле краткого опиÑаниÑ. </td></tr> <tr> <td> en </td> <td> Включен </td> <td> 5 </td> <td> СоÑтоÑние "Включен" Ñлемента. Отключенный Ñлемент не отображаетÑÑ Ð¿Ñ€Ð¸ иÑполнении. </td></tr> <tr> <td> active </td> <td> Ðктивный </td> <td> 6 </td> <td> СоÑтоÑние "Ðктивный" Ñлемента. Ðктивный Ñлемент может получать Ñ„Ð¾ÐºÑƒÑ Ð¿Ñ€Ð¸ иÑполнении, а значит — получать клавиатурные и иные ÑÐ¾Ð±Ñ‹Ñ‚Ð¸Ñ Ñ Ð¿Ð¾Ñледующей их обработкой. </td></tr> <tr> <td> geomX </td> <td> ГеометриÑ: x </td> <td> 7 </td> <td> ГеометриÑ, координата 'x' Ð¿Ð¾Ð»Ð¾Ð¶ÐµÐ½Ð¸Ñ Ñлемента. </td></tr> <tr> <td> geomY </td> <td> ГеометриÑ: y </td> <td> 8 </td> <td> ГеометриÑ, координата 'y' Ð¿Ð¾Ð»Ð¾Ð¶ÐµÐ½Ð¸Ñ Ñлемента. </td></tr> <tr> <td> geomW </td> <td> ГеометриÑ: ширина </td> <td> 9 </td> <td> ГеометриÑ, ширина Ñлемента. </td></tr> <tr> <td> geomH </td> <td> ГеометриÑ: выÑота </td> <td> 10 </td> <td> ГеометриÑ, выÑота Ñлемента. </td></tr> <tr> <td> geomXsc </td> <td> ГеометриÑ: x маÑштаб </td> <td> 13 </td> <td> МаÑштаб Ñлемента по горизонтали. </td></tr> <tr> <td> geomYsc </td> <td> ГеометриÑ: y маÑштаб </td> <td> 14 </td> <td> МаÑштаб Ñлемента по вертикали. </td></tr> <tr> <td> geomZ </td> <td> ГеометриÑ: z </td> <td> 11 </td> <td> ГеометриÑ, координата 'z' (уровень) Ñлемента на кадре. Также определÑет порÑдок передачи фокуÑа между активными Ñлементами. </td></tr> <tr> <td> geomMargin </td> <td> ГеометриÑ: отÑтуп </td> <td> 12 </td> <td> ГеометриÑ, полÑ-отÑтупы Ñлемента. </td></tr> <tr> <td> tipTool </td> <td> Помощь: подÑказка </td> <td> 15 </td> <td> ТекÑÑ‚ краткой помощи или подÑказки по данному Ñлементу. Обычно реализуетÑÑ ÐºÐ°Ðº вÑÐ¿Ð»Ñ‹Ð²Ð°ÑŽÑ‰Ð°Ñ Ð¿Ð¾Ð´Ñказка, при удержании курÑора мыши над Ñлементом. </td></tr> <tr> <td> tipStatus </td> <td> Помощь: ÑоÑтоÑние </td> <td> 16 </td> <td> <p>ТекÑÑ‚ информации о ÑоÑтоÑнии Ñлемента или руководÑтва к дейÑтвию над Ñлементом. Обычно реализуетÑÑ Ð² виде ÑÐ¾Ð¾Ð±Ñ‰ÐµÐ½Ð¸Ñ Ð² Ñтроке ÑтатуÑа, при удержании курÑора мыши над Ñлементом. </p> <dl><dd> * ÐœÐ¾Ð´Ð¸Ñ„Ð¸ÐºÐ°Ñ†Ð¸Ñ Ð´Ð°Ð½Ð½Ð¾Ð³Ð¾ атрибута из ÑеанÑа корневой Ñтраницы оÑущеÑтвлÑет запиÑÑŒ ÑÐ¾Ð¾Ð±Ñ‰ÐµÐ½Ð¸Ñ Ð² Ñтроку ÑтатуÑа окна визуализации ÑеанÑа.</dd></dl> </td></tr> <tr> <td> contextMenu </td> <td> КонтекÑтное меню </td> <td> 17 </td> <td> <p>КонтекÑтное меню в виде ÑпиÑка Ñтрок: "<b>{ItName}:{Signal}</b>".<br /> Где: </p> <ul><li> "ItName" — Ð¸Ð¼Ñ Ñлемента;</li> <li> "Signal" — Ð¸Ð¼Ñ Ñигнала, формирующегоÑÑ Ð¿Ñ€Ð¸ выборе: "<b>usr_{Signal}</b>". </li></ul> </td></tr> <tr> <td> evProc </td> <td> Обработка Ñобытий </td> <td> - </td> <td> <p>Ðтрибут Ñ…Ñ€Ð°Ð½ÐµÐ½Ð¸Ñ ÑÑ†ÐµÐ½Ð°Ñ€Ð¸Ñ Ð¾Ð±Ñ€Ð°Ð±Ð¾Ñ‚ÐºÐ¸ Ñобытий непоÑредÑтвенного ÑƒÐ¿Ñ€Ð°Ð²Ð»ÐµÐ½Ð¸Ñ Ð¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ñ‚ÐµÐ»ÑŒÑким интерфейÑом. Сценарий предÑтавлÑет Ñобой ÑпиÑок команд интерфейÑу визуализации, генерируемых при поÑтуплении ÑÐ¾Ð±Ñ‹Ñ‚Ð¸Ñ (атрибут <b>event</b>). ПрÑÐ¼Ð°Ñ Ð¾Ð±Ñ€Ð°Ð±Ð¾Ñ‚ÐºÐ° Ñобытий Ð´Ð»Ñ ÑƒÐ¿Ñ€Ð°Ð²Ð»ÐµÐ½Ð¸Ñ Ñтраницами в виде: "<b>{event}:{evSrc}:{com}:{prm}</b>". Где: </p> <ul><li> "event" — ожидаемое Ñобытие;</li> <li> "evSrc" — иÑточник ÑобытиÑ;</li> <li> "com" — команда ÑеанÑа: open, next, prev;</li> <li> "prm" — параметр команды, где иÑпользуетÑÑ: <ul><li> pg_so — прÑмое Ð¸Ð¼Ñ Ð¶ÐµÐ»Ð°ÐµÐ¼Ð¾Ð¹ Ñтраницы, Ñ Ð¿Ñ€ÐµÑ„Ð¸ÐºÑом;</li> <li> 1 — Ð¸Ð¼Ñ Ð½Ð¾Ð²Ð¾Ð¹ Ñтраницы в общем пути, без префикÑа;</li> <li> * — Ð¸Ð¼Ñ Ñтраницы берётÑÑ Ð¸Ð· имени предыдущей Ñтраницы;</li> <li> $ — указывает на меÑто, отноÑительно которого открываетÑÑ Ñтраница.<br /></li></ul></li></ul> <p>Примеры: </p> <ul><li> ws_BtPress:/prev:prev:/pg_so/*/*/$</li> <li> ws_BtPress:/next:next:/pg_so/*/*/$</li> <li> ws_BtPress:/go_mn:open:/pg_so/*/mn/*</li> <li> ws_BtPress:/go_graph:open:/pg_so/*/ggraph </li></ul> </td></tr> <tr> <td> <i>Дополнительные атрибуты Ñлементов, помещённых в проект в роли Ñтраницы.</i> </td></tr> <tr> <td> pgOpen </td> <td> Страница: открыта </td> <td> - </td> <td> <p>Признак "Страница открыта". </p> <dl><dd> * ÐœÐ¾Ð´Ð¸Ñ„Ð¸ÐºÐ°Ñ†Ð¸Ñ Ð¸Ð· ÑеанÑа оÑущеÑтвлÑет немедленное открытие/закрытие данной Ñтраницы, но Ð´Ð»Ñ Ñтраниц типа "СвÑзь" Ð’Ñ‹ должны отдавать предпочтение иÑпользованию функции uiCmd() <a href="#UserAPI">пользовательÑкого API</a>, Ð´Ð»Ñ ÑƒÐ¿Ñ€Ð°Ð²Ð»ÐµÐ½Ð¸Ñ Ñтраницами. </dd></dl> </td></tr> <tr> <td> pgNoOpenProc </td> <td> Страница: обрабатывать закрытой </td> <td> - </td> <td> Признак "ИÑполнÑÑ‚ÑŒ Ñтраницу даже еÑли она закрыта". </td></tr> <tr> <td> pgOpenSrc </td> <td> Страница: иÑточник Ð¾Ñ‚ÐºÑ€Ñ‹Ñ‚Ð¸Ñ </td> <td> 3 </td> <td> <p>Полный Ð°Ð´Ñ€ÐµÑ Ñтраницы, открывшей данную. </p> <dl><dd> * ЗапиÑÑŒ/очиÑтка адреÑа виджета (инициатора открытиÑ), оÑущеÑтвлÑет немедленное открытие/закрытие Ñтраницы. Ð’ Ñлучае запиÑи адреÑа, и Ð²Ñ‹Ð¿Ð¾Ð»Ð½ÐµÐ½Ð¸Ñ <a href="#DynLink">других уÑловий</a>, оÑущеÑтвлÑетÑÑ Ð´Ð¸Ð½Ð°Ð¼Ð¸Ñ‡ÐµÑкое ÑвÑзывание текущего виджета Ñ Ð¸Ð½Ð¸Ñ†Ð¸Ð°Ñ‚Ð¾Ñ€Ð¾Ð¼. Ðо Ð´Ð»Ñ Ñтраниц типа "СвÑзь" Ð’Ñ‹ должны отдавать предпочтение иÑпользованию функции uiCmd() <a href="#UserAPI">пользовательÑкого API</a>, Ð´Ð»Ñ ÑƒÐ¿Ñ€Ð°Ð²Ð»ÐµÐ½Ð¸Ñ Ñтраницами.</dd></dl> </td></tr> <tr> <td> pgGrp </td> <td> Страница: группа </td> <td> 4 </td> <td> Группа Ñтраницы. ПУСТÐЯ и "main" группа предуÑматривает иÑпользование Ñтой Ñтраницы как Корневую-оÑновную Ñтраницу, Ñ‚.е. Ñ‚Ð°ÐºÐ°Ñ Ð±ÑƒÐ´ÐµÑ‚ заменÑÑ‚ÑŒ другие Корневые-главные Ñтраницы; группа "fl" предназначена Ð´Ð»Ñ Ð¸ÑÐ¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ð½Ð¸Ñ Ð²Ð¾ внешних окнах, которые предуÑмотрены Ð´Ð»Ñ Ð¼Ð½Ð¾Ð³Ð¾Ñ€Ð°Ð·Ð¾Ð²Ð¾Ð³Ð¾ одновременного Ð¾Ñ‚ÐºÑ€Ñ‹Ñ‚Ð¸Ñ Ð¸ которые не должны отÑлеживатьÑÑ Ð½Ð° дубликаты; оÑтальные предуÑмотрено Ð´Ð»Ñ Ð²ÐºÐ»ÑŽÑ‡ÐµÐ½Ð¸Ñ Ð² контейнеры-бокÑÑ‹ или одноразового одновременного открытиÑ, Ñ‚.е. они принудительно проверÑÑŽÑ‚ÑÑ Ð½Ð° дубликаты, когда поÑледнее открываетÑÑ, а предыдущие закрываютÑÑ. </td></tr> <tr> <td colspan="4"> <i>Дополнительные атрибуты режима иÑÐ¿Ð¾Ð»Ð½ÐµÐ½Ð¸Ñ â€” ÑеанÑа.</i><br />(Виртуальные атрибуты не доÑтупны в процедуре виджета) </td></tr> <tr> <td> event </td> <td> Ð¡Ð¾Ð±Ñ‹Ñ‚Ð¸Ñ </td> <td> - </td> <td> Специальный атрибут Ñбора Ñобытий виджета в ÑпиÑке, разделённом новой Ñтрокой. ДоÑтуп к атрибуту защищён критичеÑкой Ñекцией Ð´Ð»Ñ Ð¸Ð·Ð±ÐµÐ¶Ð°Ð½Ð¸Ñ Ð¿Ð¾Ñ‚ÐµÑ€Ð¸ Ñобытий. Ðтрибут вÑегда доÑтупен в процедуре виджета. </td></tr> <tr> <td> load </td> <td> Загрузка </td> <td> -1 </td> <td> Ð’Ð¸Ñ€Ñ‚ÑƒÐ°Ð»ÑŒÐ½Ð°Ñ ÐºÐ¾Ð¼Ð°Ð½Ð´Ð° групповой загрузки данных. </td></tr> <tr> <td> focus </td> <td> Ð¤Ð¾ÐºÑƒÑ </td> <td> -2 </td> <td> Специальный атрибут индикации факта Ð¿Ð¾Ð»ÑƒÑ‡ÐµÐ½Ð¸Ñ Ñ„Ð¾ÐºÑƒÑа, активным виджетом. Ðтрибут Ñтого виджета и вложенных виджетов доÑтупен в процедурах виджета. </td></tr> <tr> <td> perm </td> <td> ДоÑтуп </td> <td> -3 </td> <td> Виртуальный атрибут прав активного Ð¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ñ‚ÐµÐ»Ñ Ð½Ð° проÑмотр и контроль над виджетом. </td></tr></table> <dl><dd> * — Ð¡Ð¿ÐµÑ†Ð¸Ð°Ð»ÑŒÐ½Ð°Ñ Ñ„ÑƒÐ½ÐºÑ†Ð¸Ñ Ð°Ñ‚Ñ€Ð¸Ð±ÑƒÑ‚Ð° виджета, выполнÑÐµÐ¼Ð°Ñ Ð² ÑеанÑе проекта при пользовательÑкой модификации.</dd></dl> <p>Движок Ñреды визуализации предуÑматривает активацию атрибутов, Ñпецифичных Ð´Ð»Ñ Ð²Ð¸Ð·ÑƒÐ°Ð»Ð¸Ð·Ð°Ñ‚Ð¾Ñ€Ð°. ПроцеÑÑ Ð°ÐºÑ‚Ð¸Ð²Ð°Ñ†Ð¸Ð¸ оÑущеÑтвлÑетÑÑ Ð¿Ñ€Ð¸ открытии ÑеанÑа визуализации проекта и предуÑматривает, в Ñтом проекте: Ñоздание Ñпецифичного атрибута Ñ ÑƒÐºÐ°Ð·Ð°Ð½Ð½Ñ‹Ð¼Ð¸ ÑвойÑтвами, еÑли он отÑутÑтвует, и активацию отÑÐ»ÐµÐ¶Ð¸Ð²Ð°Ð½Ð¸Ñ ÐµÐ³Ð¾ модификации движком Ñреды визуализации, как Ð´Ð»Ñ Ð°Ñ‚Ñ€Ð¸Ð±ÑƒÑ‚Ð¾Ð² Ñ„Ð¾Ñ€Ð¼Ð¸Ñ€Ð¾Ð²Ð°Ð½Ð¸Ñ Ð¾Ð±Ñ€Ð°Ð·Ð¾Ð² примитивов. Ð”Ð»Ñ Ð½ÐµÐ¿Ð¾ÑредÑтвенного Ð¾Ð¿Ñ€ÐµÐ´ÐµÐ»ÐµÐ½Ð¸Ñ Ñ‚Ð°ÐºÐ¾Ð³Ð¾ атрибута можно также иÑпользовать Ð¿Ñ€ÐµÑ„Ð¸ÐºÑ Ð¸Ð´ÐµÐ½Ñ‚Ð¸Ñ„Ð¸ÐºÐ°Ñ‚Ð¾Ñ€Ð° атрибута "vs_", что быÑтрее и иÑключает Ñтадию активации. С перечнем Ñпецифичных Ð´Ð»Ñ Ð²Ð¸Ð·ÑƒÐ°Ð»Ð¸Ð·Ð°Ñ‚Ð¾Ñ€Ð° атрибутов можно ознакомитьÑÑ Ð² документации ÑоответÑтвующего визуализатора. </p> <h4><span class="mw-headline" id=".D0.AD.D0.BB.D0.B5.D0.BC.D0.B5.D0.BD.D1.82.D0.B0.D1.80.D0.BD.D0.B0.D1.8F_.D0.B3.D1.80.D0.B0.D1.84.D0.B8.D1.87.D0.B5.D1.81.D0.BA.D0.B0.D1.8F_.D1.84.D0.B8.D0.B3.D1.83.D1.80.D0.B0_.28ElFigure.29"><span class="mw-headline-number">3.9.1</span> <span id="ElFigure" title="#ElFigure">ÐÐ»ÐµÐ¼ÐµÐ½Ñ‚Ð°Ñ€Ð½Ð°Ñ Ð³Ñ€Ð°Ñ„Ð¸Ñ‡ÐµÑÐºÐ°Ñ Ñ„Ð¸Ð³ÑƒÑ€Ð° (ElFigure)</span></span></h4> <p>Примитив ÑвлÑетÑÑ Ð¾Ñновой в отриÑовке Ñлементарных графичеÑких фигур Ñо вÑевозможной их комбинацией в одном объекте. Ð£Ñ‡Ð¸Ñ‚Ñ‹Ð²Ð°Ñ ÑˆÐ¸Ñ€Ð¾ÐºÐ¸Ð¹ Ñпектр вÑевозможных фигур, которые должен поддерживать примитив, и, в тоже времÑ, ÑвлÑÑ‚ÑŒÑÑ Ð´Ð¾Ñтаточно проÑтым в иÑпользовании и, по возможноÑти, в реализации, было решено ограничить перечень базовых фигур, иÑпользуемых Ð´Ð»Ñ Ð¿Ð¾ÑÑ‚Ñ€Ð¾ÐµÐ½Ð¸Ñ Ñ€ÐµÐ·ÑƒÐ»ÑŒÑ‚Ð¸Ñ€ÑƒÑŽÑ‰Ð¸Ñ… графичеÑких объектов, до таких: линиÑ, дуга, ÐºÑ€Ð¸Ð²Ð°Ñ Ð‘ÐµÐ·ÑŒÐµ и заливка замкнутых контуров. ОÑновываÑÑÑŒ уже на Ñтих базовых фигурах, можно Ñтроить производные фигуры, ÐºÐ¾Ð¼Ð±Ð¸Ð½Ð¸Ñ€ÑƒÑ Ð±Ð°Ð·Ð¾Ð²Ñ‹Ðµ. Ð’ рамках примитива ÑущеÑтвует возможноÑÑ‚ÑŒ Ð·Ð°Ð´Ð°Ð½Ð¸Ñ Ð¿Ñ€Ð¾Ð·Ñ€Ð°Ñ‡Ð½Ð¾Ñти цвета в диапазоне [0...255], где '0' — Ð¿Ð¾Ð»Ð½Ð°Ñ Ð¿Ñ€Ð¾Ð·Ñ€Ð°Ñ‡Ð½Ð¾ÑÑ‚ÑŒ. </p><p><b>Таблица.</b> Ðабор дополнительных ÑвойÑтв/атрибутов примитива "ÐÐ»ÐµÐ¼ÐµÐ½Ñ‚Ð°Ñ€Ð½Ð°Ñ Ñ„Ð¸Ð³ÑƒÑ€Ð° (ElFigure)" </p> <table class="wikitable"> <tr> <th> Идентификатор </th> <th> Ð˜Ð¼Ñ </th> <th> Ðомер </th> <th> Значение </th></tr> <tr> <td> lineWdth </td> <td> ЛиниÑ: ширина </td> <td> 20 </td> <td> Ширина линии. </td></tr> <tr> <td> lineClr </td> <td> ЛиниÑ: цвет </td> <td> 21 </td> <td> <p>Ð˜Ð¼Ñ Ñ†Ð²ÐµÑ‚Ð° в виде "<b>{color}[-{alpha}]</b>", где: </p> <ul><li> "color" — Ñтандартное Ð¸Ð¼Ñ Ñ†Ð²ÐµÑ‚Ð° или его чиÑловое предÑтавление из трёх шеÑтнадцатеричных чиÑел отдельных цветов "#RRGGBB";</li> <li> "alpha" — уровень альфа-канала [0...255], где 0 — полноÑтью прозрачный.<br /></li></ul> <p>Примеры: </p> <ul><li> "red" — Ñплошной краÑный цвет;</li> <li> "#FF0000" — Ñплошной краÑный цвет в цифровом коде;</li> <li> "red-127" — полупрозрачный краÑный цвет.</li></ul> </td></tr> <tr> <td> lineStyle </td> <td> ЛиниÑ: Ñтиль </td> <td> 22 </td> <td> Стиль линии: ÑплошнаÑ, пунктир, точечнаÑ. </td></tr> <tr> <td> bordWdth </td> <td> Граница: ширина </td> <td> 23 </td> <td> Ширина бордюра линии. ÐÑƒÐ»ÐµÐ²Ð°Ñ ÑˆÐ¸Ñ€Ð¸Ð½Ð° указывает на отÑутÑтвие бордюра. </td></tr> <tr> <td> bordClr </td> <td> Граница: цвет </td> <td> 24 </td> <td> Цвет бордюра (детали в атрибуте 21). </td></tr> <tr> <td> fillColor </td> <td> Заполнение: цвет </td> <td> 25 </td> <td> Цвет заливки (детали в атрибуте 21). </td></tr> <tr> <td> fillImg </td> <td> Заполнение: изображение </td> <td> 26 </td> <td> <p>Ð˜Ð¼Ñ Ð¸Ð·Ð¾Ð±Ñ€Ð°Ð¶ÐµÐ½Ð¸Ñ Ð² виде "<b>[{src}:]{name}</b>", где: </p> <ul><li> "src" — иÑточник изображениÑ: <ul><li> <i>file</i> — прÑмо из локального файла по пути;</li> <li> <i>res</i> — из таблицы реÑурÑов БД.</li></ul></li> <li> "name" — путь файла или идентификатор реÑурÑа.<br /></li></ul> <p>Примеры: </p> <ul><li> "res:backLogo" — из таблицы реÑурÑов БД Ð´Ð»Ñ Ð¸Ð´ÐµÐ½Ñ‚Ð¸Ñ„Ð¸ÐºÐ°Ñ‚Ð¾Ñ€Ð° "backLogo";</li> <li> "backLogo" — как и предыдущий;</li> <li> "file:/var/tmp/backLogo.png" — из локального файла по пути "/var/tmp/backLogo.png".</li></ul> </td></tr> <tr> <td> orient </td> <td> Угол поворота </td> <td> 28 </td> <td> Угол поворота Ñодержимого виджета. </td></tr> <tr> <td> mirror </td> <td> Отражение </td> <td> 29 </td> <td> Отражение Ñодержимого виджета, <span>ограничено на данный момент</span>. </td></tr> <tr> <td> elLst </td> <td> СпиÑок Ñлементов </td> <td> 27 </td> <td> <p>СпиÑок графичеÑких Ñлементов в формате: </p> <ul><li> ЛиниÑ. ÐžÐ±Ñ‰Ð°Ñ Ñ„Ð¾Ñ€Ð¼Ð° запиÑи в ÑпиÑке, Ð´Ð»Ñ ÑтатичеÑких и динамичеÑких параметров (могут ÑмешиватьÑÑ):</li></ul> <dl><dd><dl><dd>"<b>line:({x}|{y}):({x}|{y})[:{width}[:{color}[:{bord_w}[:{bord_clr}[:{line_stl}]]]]]</b>"</dd> <dd>"<b>line:{p1}:{p2}[:w{n}[:c{n}[:w{n}[:c{n}[:s{n}]]]]]</b>"</dd></dl></dd></dl> <ul><li> Дуга. ÐžÐ±Ñ‰Ð°Ñ Ñ„Ð¾Ñ€Ð¼Ð° запиÑи в ÑпиÑке, Ð´Ð»Ñ ÑтатичеÑких и динамичеÑких параметров (могут ÑмешиватьÑÑ):</li></ul> <dl><dd><dl><dd>"<b>arc:({x}|{y}):({x}|{y}):({x}|{y}):({x}|{y}):({x}|{y})[:{width}[:{color}[:{bord_w}[:{bord_clr}[:{line_stl}]]]]]</b>"</dd> <dd>"<b>arc:{p1}:{p2}:{p3}:{p4}:{p5}[:w{n}[:c{n}[:w{n}[:c{n}[:s{n}]]]]]</b>"</dd></dl></dd> <dd><a class="image" href="http://oscada.org/wiki/File:VCA_arc.png"><img alt="VCA arc.png" height="215" src="../../en/files/VCA_arc.png" width="164" /></a> <dl><dd>p1, p2 — Ð½Ð°Ñ‡Ð°Ð»ÑŒÐ½Ð°Ñ Ð¸ ÐºÐ¾Ð½ÐµÑ‡Ð½Ð°Ñ Ñ‚Ð¾Ñ‡ÐºÐ¸ ÑллиптичеÑкой дуги, ÑоответÑтвенно;</dd> <dd>p3 — центр дуги;</dd> <dd>p4 — первый радиуÑ;</dd> <dd>p5 — второй радиуÑ.</dd></dl></dd></dl> <ul><li> ÐšÑ€Ð¸Ð²Ð°Ñ Ð‘ÐµÐ·ÑŒÐµ. Форма запиÑи в ÑпиÑке, Ð´Ð»Ñ ÑтатичеÑких и динамичеÑких параметров (могут ÑмешиватьÑÑ):</li></ul> <dl><dd><dl><dd>"<b>bezier:({x}|{y}):({x}|{y}):({x}|{y}):({x}|{y})[:{width}[:{color}[:{bord_w}[:{bord_clr}[:{line_stl}]]]]]</b>"</dd> <dd>"<b>bezier:{p1}:{p2}:{p3}:{p4}[:w{n}[:c{n}[:w{n}[:c{n}[:s{n}]]]]]</b>"</dd></dl></dd></dl> <ul><li> Заливка. Форма запиÑи в ÑпиÑке, Ð´Ð»Ñ ÑтатичеÑких и динамичеÑких параметров (могут ÑмешиватьÑÑ):</li></ul> <dl><dd><dl><dd>"<b>fill:({x}|{y}):({x}|{y}):...:({x}|{y})[:{fill_clr}[:{fill_img}]]</b>"</dd> <dd>"<b>fill:{p1}:{p2}:...:{pN}[:c{n}[:i{n}]]</b>"<br /></dd></dl></dd></dl> <p>Где: </p> <dl><dd><i>x, y</i> — прÑÐ¼Ð°Ñ Ñ‚Ð¾Ñ‡ÐºÐ° (x,y), координаты в пикÑелах Ñ Ð¿Ð»Ð°Ð²Ð°ÑŽÑ‰ÐµÐ¹ точкой;</dd> <dd><i>p1 ... pN</i> — динамичеÑÐºÐ°Ñ Ñ‚Ð¾Ñ‡ÐºÐ° 1...N;</dd> <dd><i>width, bord_w</i> — прÑÐ¼Ð°Ñ ÑˆÐ¸Ñ€Ð¸Ð½Ð° линии и бордюра в пикÑелах Ñ Ð¿Ð»Ð°Ð²Ð°ÑŽÑ‰ÐµÐ¹ точкой;</dd> <dd><i>w{n}</i> — динамичеÑÐºÐ°Ñ ÑˆÐ¸Ñ€Ð¸Ð½Ð° 'n';</dd> <dd><i>color, bord_clr, fill_clr</i> — прÑмой цвет линии, бордюра и заполнениÑ, в виде имени или 32-битного кода Ñ Ð°Ð»ÑŒÑ„Ð°: {имÑ}[-{AAA}], #RRGGBB-AAA;</dd> <dd><i>c{n}</i> — динамичеÑкий цвет 'n';</dd> <dd><i>line_stl</i> — прÑмой Ñтиль линии: 0-СплошнаÑ, 1-ПунктирнаÑ, 2-ТочечнаÑ;</dd> <dd><i>s{n}</i> — динамичеÑкий Ñтиль 'n';</dd> <dd><i>fill_img</i> — прÑмое изображение Ð·Ð°Ð¿Ð¾Ð»Ð½ÐµÐ½Ð¸Ñ Ð² виде "[{src}%3A]{name}", где: <dl><dd>"src" — иÑточник изображениÑ: <dl><dd><i>file</i> — непоÑредÑтвенно из локального файла по пути;</dd> <dd><i>res</i> — из таблицы реÑурÑов БД.</dd></dl></dd> <dd>"name" — путь файла или идентификатор реÑурÑа.</dd></dl></dd> <dd><i>i{n}</i> — динамичеÑкое изображение Ð·Ð°Ð¿Ð¾Ð»Ð½ÐµÐ½Ð¸Ñ 'n'.<br /></dd></dl> <p>Ðапример: </p> <ul><li> line:(50|25):(90.5|25):2:yellow:3:green:2</li> <li> arc:(25|50):(25|50):1:4:(25|50)::#000000-0</li> <li> fill:(25|50):(25|50):c2:i2</li> <li> fill:(50|25):(90.5|25):(90|50):(50|50):#d3d3d3:h_31 </li></ul> </td></tr> <tr> <td colspan="4"> <i>Ðтрибуты каждой точки из ÑпиÑка графичеÑких фигур <b>elLst</b></i> </td></tr> <tr> <td> p{n}x </td> <td> Точка {n}:x </td> <td> 30+n*6 </td> <td> Координата 'x' точки <i>n</i>. </td></tr> <tr> <td> p{n}y </td> <td> Точка {n}:y </td> <td> 30+n*6+1 </td> <td> Координата 'y' точки <i>n</i>. </td></tr> <tr> <td> w{n} </td> <td> Ширина {n} </td> <td> 30+n*6+2 </td> <td> Ширина <i>n</i>. </td></tr> <tr> <td> Ñ{n} </td> <td> Цвет {n} </td> <td> 30+n*6+3 </td> <td> Цвет <i>n</i> (детали в атрибуте 21). </td></tr> <tr> <td> i{n} </td> <td> Изображение {n} </td> <td> 30+n*6+4 </td> <td> Изображение <i>n</i> (детали в атрибуте 26). </td></tr> <tr> <td> s{n} </td> <td> Стиль {n} </td> <td> 30+n*6+5 </td> <td> Стиль <i>n</i>. </td></tr></table> <h4><span class="mw-headline" id=".D0.AD.D0.BB.D0.B5.D0.BC.D0.B5.D0.BD.D1.82_.D1.84.D0.BE.D1.80.D0.BC.D1.8B_.28FormEl.29"><span class="mw-headline-number">3.9.2</span> <span id="FormEl" title="#FormEl">Ðлемент формы (FormEl)</span></span></h4> <p>Примитив, предназначенный Ð´Ð»Ñ Ð¿Ñ€ÐµÐ´Ð¾ÑтавлениÑ, в раÑпорÑжение пользователÑ, Ñтандартных Ñлементов формы. Общий перечень атрибутов завиÑит от типа Ñлемента. </p><p><b>Table.</b> List of additional properties/attributes of the primitive "Element of the form (FormEl)" </p> <table class="wikitable"> <tr> <th> Identifier </th> <th> Name </th> <th> Number </th> <th> Value </th></tr> <tr> <td> elType </td> <td> Element type </td> <td> 20 </td> <td> Type of the element, from which depends the list of additional attributes: <ul><li> Line edit (0)</li> <li> Text edit (1)</li> <li> Check Box (2)</li> <li> Button (3)</li> <li> Combo box (4)</li> <li> List (5)</li> <li> Tree (8)</li> <li> Table (9)</li> <li> Slider (6)</li> <li> Scroll bar (7)</li></ul> </td></tr> <tr> <td colspan="4"> <i>Line edit:</i> </td></tr> <tr> <td> value </td> <td> Value </td> <td> 21 </td> <td> Contents of the line. </td></tr> <tr> <td> view </td> <td> View </td> <td> 22 </td> <td> View of the editing line: <ul><li> Text (0)</li> <li> Combo Box (1)</li> <li> Integer (2)</li> <li> Real (3)</li> <li> Time (4)</li> <li> Date (5)</li> <li> Date and Time (6)</li> <li> Password (7)</li></ul> </td></tr> <tr> <td> cfg </td> <td> Configuration </td> <td> 23 </td> <td> Configuration of the line. Format of the value of the field for different views of the lines: <dl><dd><i>Text</i> — configuration of the formatted input at the template with the parameters (supported only by Qt in <a href="../Modules/Vision.html" title="Special:MyLanguage/Modules/Vision">UI.Vision</a>): <dl><dd><dl><dd><b>A</b> — ASCII alphabetic character required, [A-Za-z].</dd> <dd><b>a</b> — ASCII alphabetic character permitted but not required.</dd> <dd><b>N</b> — ASCII alphanumeric character required, [A-Za-z0-9].</dd> <dd><b>n</b> — ASCII alphanumeric character permitted but not required.</dd> <dd><b>X</b> — Any character required.</dd> <dd><b>x</b> — Any character permitted but not required.</dd> <dd><b>9</b> — ASCII digit required, [0-9].</dd> <dd><b>0</b> — ASCII digit permitted but not required.</dd> <dd><b>D</b> — ASCII digit required, [1-9].</dd> <dd><b>d</b> — ASCII digit permitted but not required.</dd> <dd><b>#</b> — ASCII digit or plus/minus sign permitted but not required.</dd> <dd><b>H</b> — Hexadecimal character required, [A-Fa-f0-9].</dd> <dd><b>h</b> — Hexadecimal character permitted but not required.</dd> <dd><b>B</b> — Binary character required, [0-1].</dd> <dd><b>b</b> — Binary character permitted but not required.</dd> <dd><b>></b> — All following alphabetic characters are uppercased.</dd> <dd><b><</b> — All following alphabetic characters are lowercased.</dd> <dd><b>!</b> — Switch off case conversion.</dd> <dd><b>\\</b> — Use to shield the special characters listed above to use them as separators.</dd></dl></dd></dl></dd> <dd><i>Combobox</i> — list of values the editable combobox by lines.</dd> <dd><i>Integer</i> — integer value in the form: "<b>{Min}:{Max}:{ChangeStep}:{Prefix}:{Suffix}</b>".</dd> <dd><i>Real</i> — real value in the form: "<b>{Min}:{Max}:{ChangeStep}:{Prefix}:{Suffix}:{SignsAfterDot}</b>".</dd> <dd><i>Time</i>, <i>Date</i>, <i>Date and time</i> — to form the date following the template with the parameters: <dl><dd><dl><dd><b>d</b> — number of the day (1-31);</dd> <dd><b>dd</b> — number of the day (01-31);</dd> <dd><b>ddd</b> — acronym of the day ("Mon" ... "Sun");</dd> <dd><b>dddd</b> — full name of the day ("Monday" ... "Sunday");</dd> <dd><b>M</b> — number of the month (1-12);</dd> <dd><b>MM</b> — number of the month (01-12);</dd> <dd><b>MMM</b> — acronym of the month ("Jan" ... "Dec");</dd> <dd><b>MMMM</b> — full name of the month ("January" ... "December");</dd> <dd><b>yy</b> — last two digits of the year;</dd> <dd><b>yyyy</b> — full year;</dd> <dd><b>h</b> — hour (0-23);</dd> <dd><b>hh</b> — hour (00-23);</dd> <dd><b>m</b> — minutes (0-59);</dd> <dd><b>mm</b> — minutes (00-59);</dd> <dd><b>s</b> — seconds (0-59);</dd> <dd><b>ss</b> — seconds (00-59);</dd> <dd><b>AP,ap</b> — to display AM/PM or am/pm.</dd></dl></dd></dl></dd></dl> </td></tr> <tr> <td> confirm </td> <td> Confirm </td> <td> 24 </td> <td> Enable the confirming mode. </td></tr> <tr> <td> font </td> <td> Font </td> <td> 25 </td> <td> Font name in the form "<b>{family} {size} {bold} {italic} {underline} {strike}</b>", where: <ul><li> "family" — font family, for spaces use symbol '_', like: "Arial", "Courier", "Times_New_Roman";</li> <li> "size" — font size in pixels;</li> <li> "bold" — font bold (0 or 1);</li> <li> "italic" — font italic (0 or 1);</li> <li> "underline" — font underlined (0 or 1);</li> <li> "strike" — font struck (0 or 1).<br /></li></ul> <p>Examples: </p> <ul><li> "Arial 10 1 0 0 0" — Arial font size 10 pixels and bold.</li></ul> </td></tr> <tr> <td colspan="4"> <i>Text edit:</i> </td></tr> <tr> <td> value </td> <td> Value </td> <td> 21 </td> <td> Content of the editor. </td></tr> <tr> <td> wordWrap </td> <td> Word wrap </td> <td> 22 </td> <td> Automatically wrap text by words. </td></tr> <tr> <td> confirm </td> <td> Confirm </td> <td> 24 </td> <td> Enable the confirming mode. </td></tr> <tr> <td> font </td> <td> Font </td> <td> 25 </td> <td> Font name in the form "<b>{family} {size} {bold} {italic} {underline} {strike}</b>" (details above). </td></tr> <tr> <td colspan="4"> <i>Check box:</i> </td></tr> <tr> <td> name </td> <td> Name </td> <td> 26 </td> <td> Name/label of the checkbox. </td></tr> <tr> <td> value </td> <td> Value </td> <td> 21 </td> <td> Value of the checkbox. </td></tr> <tr> <td> font </td> <td> Font </td> <td> 25 </td> <td> Font name in the form "<b>{family} {size} {bold} {italic} {underline} {strike}</b>" (details above). </td></tr> <tr> <td colspan="4"> <i>Button:</i> </td></tr> <tr> <td> name </td> <td> Name </td> <td> 26 </td> <td> Name-inscription on the button. Allowed symbols '\n' for multiple line names. </td></tr> <tr> <td> value </td> <td> Value </td> <td> 21 </td> <td> The value, different for modes: <ul><li> "Standard" — repeating parameters of events on holding <b>{delay}-{interval}</b>, time in milliseconds;</li> <li> "Checkable" — toggle value;</li> <li> "Menu" — list of addresses of the menu elements like to <b>/grp1/grp2/item1</b>;</li> <li> "Load" — description line <b>{FilesTemplate}|{Header}|{FileByDefaultAndLoaded}|{FileMime}</b> and loaded file content from next line. The files template like to "Images (*.png *.xpm *.jpg);;CSV-file (*.csv)".</li> <li> "Save" — description line <b>{FilesTemplate}|{Header}|{FileByDefault}|{FileMime}</b> and saving file content from next line. The files template like to before one.</li></ul> </td></tr> <tr> <td> img </td> <td> Image </td> <td> 22 </td> <td> Image on the button. Image name in the view <b>[{src}:]{name}</b>, where: <ul><li> "src" — source of the image: <ul><li> <i>file</i> — directly from the local file by the path;</li> <li> <i>res</i> — from the resources table of DB.</li></ul></li> <li> "name" — file path or identifier of the resource.<br /></li></ul> <p>Examples: </p> <ul><li> "res:backLogo" — from the resources table of DB for the identifier "backLogo";</li> <li> "backLogo" — like toe the previous;</li> <li> "file:/var/tmp/backLogo.png" — from local file by the path "/var/tmp/backLogo.png".</li></ul> </td></tr> <tr> <td> color </td> <td> Color </td> <td> 23 </td> <td> Color of the button. Color name form "<b>{color}[-{alpha}]</b>", where: <ul><li> "color" — standard color name or its numeric representation of three hexadecimal numbers of individual colors "#RRGGBB";</li> <li> "alpha" — level of the alpha [0...255], where 0 — completely transparent.<br /></li></ul> <p>Examples: </p> <ul><li> "red" — solid red color;</li> <li> "#FF0000" — solid red color by the digital code;</li> <li> "red-127" — half transparent red color.</li></ul> </td></tr> <tr> <td> colorText </td> <td> Color:text </td> <td> 27 </td> <td> Color of the text (details above). </td></tr> <tr> <td> mode </td> <td> Mode </td> <td> 24 </td> <td> Operation mode of the button: <ul><li> "Standard" — normal button which allows repeating events on it hold, the parameters in "value";</li> <li> "Checkable" — check button, values in "value";</li> <li> "Menu" — opens menu on press, items list in "value";</li> <li> "Load" — provides for loading of the user-space small files through the visual interface; on the mode the button press will open the selection file dialog for loading and the file content next saving to the attribute "value";</li> <li> "Save" — provides for saving of the user-space small files through the visual interface; on the file content writing to the attribute "value" for user will: open the selecting/setting file dialog, save the attribute "value" content to the file, after the selecting, and set clean the attribute "value".</li></ul> </td></tr> <tr> <td> font </td> <td> Font </td> <td> 25 </td> <td> Font name in the form "<b>{family} {size} {bold} {italic} {underline} {strike}</b>" (details above). </td></tr> <tr> <td colspan="4"> <i>List:</i> </td></tr> <tr> <td> value </td> <td> Value </td> <td> 21 </td> <td> Current value of the list. </td></tr> <tr> <td> items </td> <td> Items </td> <td> 22 </td> <td> Entries of the list. </td></tr> <tr> <td> font </td> <td> Font </td> <td> 25 </td> <td> Font name in the form "<b>{family} {size} {bold} {italic} {underline} {strike}</b>" (details above). </td></tr> <tr> <td> mult </td> <td> Multiple selection </td> <td> 23 </td> <td> Allow for multiple entries selection of the list. </td></tr> <tr> <td colspan="4"> <i>Combo box, Tree:</i> </td></tr> <tr> <td> value </td> <td> Value </td> <td> 21 </td> <td> Current value of the list. </td></tr> <tr> <td> items </td> <td> Items </td> <td> 22 </td> <td> Entries of the list or hierarchical items list of the tree in path "<b>/{DIR}/{DIR}/{ITEM}</b>". </td></tr> <tr> <td> font </td> <td> Font </td> <td> 25 </td> <td> Font name in the form "<b>{family} {size} {bold} {italic} {underline} {strike}</b>" (details above). </td></tr> <tr> <td colspan="4"> <i>Table:</i> </td></tr> <tr> <td> set </td> <td> Setting value </td> <td> 23 </td> <td> Value of edition of a cell of the table which address in the event "<b>ws_TableEdit_{colN}_{rowN}</b>". </td></tr> <tr> <td> value </td> <td> Value </td> <td> 21 </td> <td> Address of the selected item. It changing follows by the event "<b>ws_TableChangeSel</b>". The address format depends from the table's selection mode: <ul><li> "Cell" — cell address in the format "<b>{row}:{col}</b>".</li> <li> "Row", "Column" — row-column number or cell content of the row-column key, which sets by the attribute "keyID".</li></ul> </td></tr> <tr> <td> items </td> <td> Elements </td> <td> 22 </td> <td> <p>The table structure and content in the XML view: </p> <div class="mw-highlight mw-content-ltr" dir="ltr"><pre><span class="nt"><tbl></span> <span class="nt"><h><s></span>{Header1}<span class="nt"></s><s></span>{Header2}<span class="nt"></s></h></span> <span class="nt"><r><s></span>{Row1Column1String}<span class="nt"></s><i></span>{Row1Column1Integer}<span class="nt"></i></r></span> <span class="nt"><r><b></span>{Row2Column1Logical}<span class="nt"></b><r></span>{Row2Column2Real}<span class="nt"></r></r></span> <span class="nt"></tbl></span> </pre></div> <p>The tags: </p> <dl><dd>"tbl" — Table, the properties at all: <ul><li> "sel" — selection mode of the table items: "row" — by rows, "col" — by columns, "cell" — by cells (by default);</li> <li> "keyID" — row-column number of the key, for the selection value get;</li> <li> "colsWdthFit" — fits the columns size, in the unfixed size, to fill the full width of the table;</li> <li> "hHdrVis", "vHdrVis" — visibility of the headers, for horizontal and vertical;</li> <li> "sortEn" — enables sorting directly by the columns.</li></ul></dd> <dd>"h" — Row of the headers. Possible attributes of the header cell tag for the column as a whole: <ul><li> "width" — column width, in pixels or percents (10%);</li> <li> "edit" — allowing to the cells of the row edition (0 or 1), by default — no (0);</li> <li> "color" — column color as a whole in the color name or code;</li> <li> "colorText" — color of the column text as a whole in the color name or code;</li> <li> "font" — font of the column text in the typical OpenSCADA string;</li> <li> "prec" — value precision of the real type cells in the column;</li> <li> "sort" — sorting by the column [0 - Ascending-default; 1 - Descending];</li> <li> "align" — alignment the column for: "left", "right" and "center".</li></ul></dd> <dd>"r" — Row of the values. Possible attributes of the row cell tag for the row as a whole: <ul><li> "color" — row color as a whole in the color name or code;</li> <li> "colorText" — color of the row text as a whole in the color name or code;</li> <li> "font" — font of the cell text in the typical OpenSCADA string;</li> <li> "prec" — value precision of the real type cells in the row.</li></ul></dd> <dd>"s", "t", "i", "r", "b" — cells of the data types "String", "Text", "Integer", "Real" and "Logical". Possible attributes: <ul><li> "color" — cell color;</li> <li> "colorText" — color of the cell text in the color name or code;</li> <li> "font" — font of the cell text in the typical OpenSCADA string;</li> <li> "prec" — value precision of the real type cell;</li> <li> "img" — image of the cell in the form "<b>[{src}:]{name}</b>", the details above;</li> <li> "edit" — allowing the cell edition (0 or 1), by default - no (0);</li> <li> "align" — alignment the cell for: "left", "right" and "center".</li></ul></dd></dl> </td></tr> <tr> <td> font </td> <td> Font </td> <td> 25 </td> <td> Font name in the form "<b>{family} {size} {bold} {italic} {underline} {strike}</b>" (the details above). </td></tr> <tr> <td colspan="4"> <i>Slider and Scroll Bar:</i> </td></tr> <tr> <td> value </td> <td> Value </td> <td> 21 </td> <td> Slider position. </td></tr> <tr> <td> cfg </td> <td> Configuration </td> <td> 22 </td> <td> Configuration of the slider in the format: "<b>{VertOrient}:{Min}:{Max}:{SinglStep}:{PageStep}</b>".<br /> <p>Where: </p> <ul><li> "VertOrient" — sign (0 or 1) of the vertical orientation, the default is the horizontal orientation;</li> <li> "Min" — minimum value;</li> <li> "Max" — maximum value;</li> <li> "SinglStep" — size of a single step;</li> <li> "PageStep" — size of a page step. </li></ul> </td></tr></table> <h4><span class="mw-headline" id=".D0.AD.D0.BB.D0.B5.D0.BC.D0.B5.D0.BD.D1.82_.D1.82.D0.B5.D0.BA.D1.81.D1.82.D0.B0_.28Text.29"><span class="mw-headline-number">3.9.3</span> <span id="Text" title="#Text">Ðлемент текÑта (Text)</span></span></h4> <p>Данный примитив предназначен Ð´Ð»Ñ Ð²Ñ‹Ð²Ð¾Ð´Ð° проÑтого и HTML текÑта, иÑпользуемого в роли меток и различных подпиÑей. С целью ÑÐ¾Ð·Ð´Ð°Ð½Ð¸Ñ Ð´ÐµÐºÐ¾Ñ€Ð°Ñ‚Ð¸Ð²Ð½Ñ‹Ñ… оформлений, примитив поддерживает обвод текÑта рамкой. </p><p><b>Таблица.</b> Ðабор дополнительных ÑвойÑтв/атрибутов примитива "Ðлемент текÑта (Text)" </p> <table class="wikitable"> <tr> <th> Идентификатор </th> <th> Ð˜Ð¼Ñ </th> <th> Ðомер </th> <th> Значение </th></tr> <tr> <td> backColor </td> <td> Фон: цвет </td> <td> 20 </td> <td> <p>Фоновый цвет. Ð˜Ð¼Ñ Ñ†Ð²ÐµÑ‚Ð° в виде "<b>{color}[-{alpha}]</b>", где: </p> <ul><li> "color" — Ñтандартное Ð¸Ð¼Ñ Ñ†Ð²ÐµÑ‚Ð° или его чиÑловое предÑтавление из трёх шеÑтнадцатеричных чиÑел отдельных цветов "#RRGGBB";</li> <li> "alpha" — уровень альфа-канала [0...255], где 0 — полноÑтью прозрачный.<br /></li></ul> <p>Примеры: </p> <ul><li> "red" — Ñплошной краÑный цвет;</li> <li> "#FF0000" — Ñплошной краÑный цвет в цифровом коде;</li> <li> "red-127" — полупрозрачный краÑный цвет.</li></ul> </td></tr> <tr> <td> backImg </td> <td> Фон: изображение </td> <td> 21 </td> <td> <p>Фоновое изображение. Ð˜Ð¼Ñ Ð¸Ð·Ð¾Ð±Ñ€Ð°Ð¶ÐµÐ½Ð¸Ñ Ð² виде "<b>[{src}:]{name}</b>", где: </p> <ul><li> "src" — иÑточник изображениÑ: <ul><li> <i>file</i> — прÑмо из локального файла по пути;</li> <li> <i>res</i> — из таблицы реÑурÑов БД.</li></ul></li> <li> "name" — путь файла или идентификатор реÑурÑа.<br /></li></ul> <p>Примеры: </p> <ul><li> "res:backLogo" — из таблицы реÑурÑов БД Ð´Ð»Ñ Ð¸Ð´ÐµÐ½Ñ‚Ð¸Ñ„Ð¸ÐºÐ°Ñ‚Ð¾Ñ€Ð° "backLogo";</li> <li> "backLogo" — как и предыдущий;</li> <li> "file:/var/tmp/backLogo.png" — из локального файла по пути "/var/tmp/backLogo.png". </li></ul> </td></tr> <tr> <td> bordWidth </td> <td> Граница: ширина </td> <td> 22 </td> <td> Ширина бордюра. </td></tr> <tr> <td> bordColor </td> <td> Граница: цвет </td> <td> 23 </td> <td> Цвет бордюра (детальнее в атрибуте 20). </td></tr> <tr> <td> bordStyle </td> <td> Граница: Ñтиль </td> <td> 24 </td> <td> Стиль бордюра: "Ðет" (0), "Точечный" (1), "Пунктирный" (2), "Сплошной" (3), "Двойной" (4), "Канавка" (5), "Кромка" (6), "Вдавлен" (7), "Ð’Ñ‹Ñтупающий" (8). </td></tr> <tr> <td> font </td> <td> Шрифт </td> <td> 25 </td> <td> <p>Ð˜Ð¼Ñ ÑˆÑ€Ð¸Ñ„Ñ‚Ð° в виде "<b>{family} {size} {bold} {italic} {underline} {strike}</b>", где: </p> <ul><li> "family" — ÑемейÑтво шрифта, Ð´Ð»Ñ Ð¿Ñ€Ð¾Ð±ÐµÐ»Ð¾Ð² иÑпользуйте Ñимвол '_', вроде: "Arial", "Courier", "Times_New_Roman";</li> <li> "size" — размер шрифта в пикÑелÑÑ…;</li> <li> "bold" — уÑиление шрифта (0 или 1);</li> <li> "italic" — наклонноÑÑ‚ÑŒ шрифта (0 или 1);</li> <li> "underline" — подчёркивание шрифта (0 или 1);</li> <li> "strike" — перечёркивание шрифта (0 или 1).<br /></li></ul> <p>Примеры: </p> <ul><li> "Arial 10 1 0 0 0" — Arial шрифт размером 10 пикÑелей и уÑиленный.</li></ul> </td></tr> <tr> <td> color </td> <td> Цвет </td> <td> 26 </td> <td> Цвет текÑта (детальнее в атрибуте 20). </td></tr> <tr> <td> orient </td> <td> Угол поворота </td> <td> 27 </td> <td> ÐžÑ€Ð¸ÐµÐ½Ñ‚Ð°Ñ†Ð¸Ñ Ñ‚ÐµÐºÑта, угол поворота. </td></tr> <tr> <td> wordWrap </td> <td> ÐŸÐµÑ€ÐµÐ½Ð¾Ñ Ñлов </td> <td> 28 </td> <td> ÐвтоматичеÑкий Ð¿ÐµÑ€ÐµÐ½Ð¾Ñ Ñ‚ÐµÐºÑта по Ñловам. </td></tr> <tr> <td> alignment </td> <td> Выравнивание </td> <td> 29 </td> <td> Выравнивание текÑта: "Вверху Ñлева" (0), "Вверху Ñправа" (1), "Вверху по центру" (2), "Вверху по ширине" (3), "Внизу Ñлева" (4), "Внизу Ñправа" (5), "Внизу по центру" (6), "Внизу по ширине" (7), "По центру Ñлева" (8), "По центру Ñправа" (9), "По Ñередине" (10), "По центру по ширине" (11). </td></tr> <tr> <td> inHtml </td> <td> Ð’ HTML </td> <td> 31 </td> <td> Отображение и поддержка Ñодержимого аргумента <i>text</i> в HTML. </td></tr> <tr> <td> text </td> <td> ТекÑÑ‚ </td> <td> 30 </td> <td> Значение текÑта. ИÑпользуйте "<b>%{x}</b>" Ð´Ð»Ñ Ð¿Ð¾Ð¼ÐµÑ‰ÐµÐ½Ð¸Ñ Ð·Ð½Ð°Ñ‡ÐµÐ½Ð¸Ñ Ð°Ñ€Ð³ÑƒÐ¼ÐµÐ½Ñ‚Ð° "x" (от 1). </td></tr> <tr> <td> numbArg </td> <td> КоличеÑтво аргументов </td> <td> 40 </td> <td> КоличеÑтво аргументов. </td></tr> <tr> <td colspan="4"> <i>Ðтрибуты аргументов</i> </td></tr> <tr> <td> arg{x}val </td> <td> Ðргумент {x}: значение </td> <td> 50+10*x </td> <td> Значение аргумента <i>x</i>. </td></tr> <tr> <td> arg{x}tp </td> <td> Ðргумент {x}: тип </td> <td> 50+10*x+1 </td> <td> Тип аргумента <i>x</i>: "Целый" (0), "ВещеÑтвенный" (1), "Строка" (2). </td></tr> <tr> <td> arg{x}cfg </td> <td> Ðргумент {x}: ÐºÐ¾Ð½Ñ„Ð¸Ð³ÑƒÑ€Ð°Ñ†Ð¸Ñ </td> <td> 50+10*x+2 </td> <td> <p>ÐšÐ¾Ð½Ñ„Ð¸Ð³ÑƒÑ€Ð°Ñ†Ð¸Ñ Ð°Ñ€Ð³ÑƒÐ¼ÐµÐ½Ñ‚Ð° <i>x</i>: </p> <ul><li> "Строка": <b>{len}</b> — ширина Ñтроки;</li> <li> "ВещеÑтвенный": <b>{wdth};{form};{prec}</b> — ширина, форма ('g', 'e', 'f') и точноÑÑ‚ÑŒ значениÑ;</li> <li> "Целый": <b>{len}</b> — ширина значениÑ. </li></ul> </td></tr></table> <h4><span class="mw-headline" id=".D0.AD.D0.BB.D0.B5.D0.BC.D0.B5.D0.BD.D1.82_.D0.BE.D1.82.D0.BE.D0.B1.D1.80.D0.B0.D0.B6.D0.B5.D0.BD.D0.B8.D1.8F_.D0.BC.D0.B5.D0.B4.D0.B8.D0.B0-.D0.BC.D0.B0.D1.82.D0.B5.D1.80.D0.B8.D0.B0.D0.BB.D0.BE.D0.B2_.28Media.29"><span class="mw-headline-number">3.9.4</span> <span id="Media" title="#Media">Ðлемент Ð¾Ñ‚Ð¾Ð±Ñ€Ð°Ð¶ÐµÐ½Ð¸Ñ Ð¼ÐµÐ´Ð¸Ð°-материалов (Media)</span></span></h4> <p>Данный примитив предназначен Ð´Ð»Ñ Ð¿Ñ€Ð¾Ð¸Ð³Ñ€Ñ‹Ð²Ð°Ð½Ð¸Ñ Ñ€Ð°Ð·Ð»Ð¸Ñ‡Ð½Ñ‹Ñ… медиа-материалов, Ð½Ð°Ñ‡Ð¸Ð½Ð°Ñ Ð¾Ñ‚ проÑÑ‚Ñ‹Ñ… изображений и Ð·Ð°ÐºÐ°Ð½Ñ‡Ð¸Ð²Ð°Ñ Ð¿Ð¾Ð»Ð½Ð¾Ñ†ÐµÐ½Ð½Ñ‹Ð¼Ð¸ аудио и видео потоками. </p><p><b>Table.</b> List of additional properties/attributes of the primitive "Element of visualization of media-materials (Media)" </p> <table class="wikitable"> <tr> <th> Identifier </th> <th> Name </th> <th> Number </th> <th> Value </th></tr> <tr> <td> backColor </td> <td> Background: color </td> <td> 20 </td> <td> Background color. Color name in the view "<b>{color}[-{alpha}]</b>", where: <ul><li> "color" — standard color name or its numeric representation of three hexadecimal numbers of individual colors "#RRGGBB";</li> <li> "alpha" — level of the alpha [0...255], where 0 — completely transparent.<br /></li></ul> <p>Examples: </p> <ul><li> "red" — solid red color;</li> <li> "#FF0000" — solid red color by the digital code;</li> <li> "red-127" — half transparent red color. </li></ul> </td></tr> <tr> <td> backImg </td> <td> Background: image </td> <td> 21 </td> <td> Background image. The image name in the view "<b>[{src}:]{name}</b>", where: <ul><li> "src" — source of the image: <ul><li> <i>file</i> — directly from the local file by the path;</li> <li> <i>res</i> — from the resources table of DB.</li></ul></li> <li> "name" — file path or identifier of the resource.<br /></li></ul> <p>Examples: </p> <ul><li> "res:backLogo" — from the resources table of DB for the identifier "backLogo";</li> <li> "backLogo" — like toe the previous;</li> <li> "file:/var/tmp/backLogo.png" — from local file by the path "/var/tmp/backLogo.png".</li></ul> </td></tr> <tr> <td> bordWidth </td> <td> Border: width </td> <td> 22 </td> <td> Border width. </td></tr> <tr> <td> bordColor </td> <td> Border: color </td> <td> 23 </td> <td> Border color (details in attribute 20). </td></tr> <tr> <td> bordStyle </td> <td> Border: style </td> <td> 24 </td> <td> Border style: "None", "Dotted", "Dashed", "Solid", "Double", "Groove", "Ridge", "Inset", "Outset". </td></tr> <tr> <td> src </td> <td> Source </td> <td> 25 </td> <td> <p>Name of the Media source in the view "<b>[{src}:]{name}</b>", where: </p> <ul><li> "src" — source: <ul><li> <i>file</i> — directly from the local file, visualizer and engine, by the path;</li> <li> <i>res</i> — from the resources table of DB;</li> <li> <i>data</i> — directly data in the form "data:{mime}\n{base64}";</li> <li> <i>stream</i> — stream URL for playback video and audio.</li></ul></li> <li> "name" — file path or identifier of the resource.<br /></li></ul> <p>Examples: </p> <ul><li> "res:workMedia" — from the resources table of DB for the identifier "workMedia";</li> <li> "workMedia" — like to previous;</li> <li> "file:/var/tmp/workMedia.mng" — from the local file by the path "/var/tmp/workMedia.mng";</li> <li> "stream:http://localhost.localhost:5050" — playback for video and audio stream from the URL.</li></ul> </td></tr> <tr> <td> type </td> <td> Type </td> <td> 27 </td> <td> <p>Media type: </p> <ul><li> "Image" — raster or vector (can not support) image, like to: PNG, JPEG, GIF, SVG;</li> <li> "Animation" — simple animation image, like to: GIF, MNG;</li> <li> "Video" — full video or stream, like to: OGM, AVI, MKV, MPG, MP4;</li> <li> "Audio" — just audio or stream, like to: OGG, MP3, WAV.</li></ul> </td></tr> <tr> <td> areas </td> <td> Map areas </td> <td> 28 </td> <td> Number of the active areas. </td></tr> <tr> <td colspan="4"> <i>Attributes of the image (Image)</i> </td></tr> <tr> <td> fit </td> <td> Fit to the widget size </td> <td> 26 </td> <td> Sign of coordination the contents with the widget size. </td></tr> <tr> <td> keepAspect </td> <td> Keep aspect ratio at fitting </td> <td> 35 </td> <td> Sign of keeping image aspect ratio at fitting to whole size of the widget. </td></tr> <tr> <td colspan="4"> <i>Attributes of the animation-video (Animation)</i> </td></tr> <tr> <td> fit </td> <td> Fit to the widget size </td> <td> 26 </td> <td> Sign of coordination the contents with the widget size. </td></tr> <tr> <td> speed </td> <td> Play speed </td> <td> 29 </td> <td> Speed of playback, as a percentage from the original speed. If the value is less or even than 1%, the playback stops. </td></tr> <tr> <td colspan="4"> <i>Attributes of the full video (Full video)</i> </td></tr> <tr> <td> play </td> <td> Play </td> <td> 29 </td> <td> Video/audio — "Play". </td></tr> <tr> <td> roll </td> <td> Roll play </td> <td> 30 </td> <td> Roll play on the finish. </td></tr> <tr> <td> pause </td> <td> Pause </td> <td> 31 </td> <td> Playing pause. </td></tr> <tr> <td> size </td> <td> Size </td> <td> 32 </td> <td> Total video size, in milliseconds. </td></tr> <tr> <td> seek </td> <td> Seek </td> <td> 33 </td> <td> Seek video playing, in milliseconds. </td></tr> <tr> <td> volume </td> <td> Volume </td> <td> 34 </td> <td> Sound volume [0...100]. </td></tr> <tr> <td colspan="4"> <i>Active areas</i> </td></tr> <tr> <td> area{x}shp </td> <td> Area {x}: shape </td> <td> 40+3*x </td> <td> Type of the area <i>x</i>: "Rect", "Poly", "Circle". </td></tr> <tr> <td> area{x}coord </td> <td> Area {x}: coordinates </td> <td> 40+3*x+1 </td> <td> Coordinates of the area <i>x</i>, are separated by commas: "x1,y1,x2,y2,xN,yN". </td></tr> <tr> <td> area{x}title </td> <td> Area {x}: title </td> <td> 40+3*x+2 </td> <td> Title of the area <i>x</i>. </td></tr></table> <h4><span class="mw-headline" id=".D0.AD.D0.BB.D0.B5.D0.BC.D0.B5.D0.BD.D1.82_.D0.BF.D0.BE.D1.81.D1.82.D1.80.D0.BE.D0.B5.D0.BD.D0.B8.D1.8F_.D0.B4.D0.B8.D0.B0.D0.B3.D1.80.D0.B0.D0.BC.D0.BC_.28Diagram.29"><span class="mw-headline-number">3.9.5</span> <span id="Diagram" title="#Diagram">Ðлемент поÑÑ‚Ñ€Ð¾ÐµÐ½Ð¸Ñ Ð´Ð¸Ð°Ð³Ñ€Ð°Ð¼Ð¼ (Diagram)</span></span></h4> <p>Данный примитив предназначен Ð´Ð»Ñ Ð¿Ð¾ÑÑ‚Ñ€Ð¾ÐµÐ½Ð¸Ñ Ñ€Ð°Ð·Ð»Ð¸Ñ‡Ð½Ñ‹Ñ… диаграмм во времени, Ð²ÐºÐ»ÑŽÑ‡Ð°Ñ Ð³Ñ€Ð°Ñ„Ð¸ÐºÐ¸-тренды Ð¾Ñ‚Ð¾Ð±Ñ€Ð°Ð¶ÐµÐ½Ð¸Ñ Ñ‚ÐµÐºÑƒÑ‰ÐµÐ³Ð¾ процеÑÑа и архивных данных. Реализованы Ñледующие типы диаграмм: </p> <ul><li> "График-тренд" — Ñтроит график значений параметра во времени.</li> <li> "Спектр" — Ñтроит чаÑтотный Ñпектр из значений параметров. Окно данных чаÑтотного Ñпектра формируетÑÑ Ð¸ÑÑ…Ð¾Ð´Ñ Ð¸Ð· размера виджета по горизонтали, в пикÑелÑÑ…, и доÑтупных данных параметров, наложенных на Ñетку горизонтального размера. Ð’ ÑвÑзи Ñ Ñтим, Ð¼Ð¸Ð½Ð¸Ð¼Ð°Ð»ÑŒÐ½Ð°Ñ Ð²Ñ‹Ð´ÐµÐ»ÑÐµÐ¼Ð°Ñ Ñ‡Ð°Ñтота определÑетÑÑ Ð·Ð½Ð°Ñ‡ÐµÐ½Ð¸ÐµÐ¼ атрибута "tSize" — "<b>1/tSize</b>", а макÑимальнаÑ, половинной шириной графика в пикÑелÑÑ… умноженной на минимальную чаÑтоту "<b>width/(2*tSize)</b>".</li> <li> "XY" — Ñтроит двумерный график значений параметров, парами на график, где чётные по оÑи Y (0,2,4...) и нечётные по оÑи X (1,3,5...). Указанный временной диапазон данных иÑпользуетÑÑ Ð² получении значений параметров оÑи X и Y, Ñ Ð¿Ð¾Ñледующим изображением.</li></ul> <p>Ð”Ð»Ñ Ð²Ñех типов диаграмм возможно указание, в качеÑтве иÑточника данных: </p> <ul><li> параметра подÑиÑтемы "Сбор Данных";</li> <li> архива значений;</li> <li> прÑмого блока данных пользователÑ.</li></ul> <p>ПоддерживаетÑÑ Ñ€ÐµÐ¶Ð¸Ð¼ ÑÐ»ÐµÐ¶Ð¸Ð²Ð°Ð½Ð¸Ñ Ð·Ð° текущими значениÑми и значениÑми Ñ Ð°Ñ€Ñ…Ð¸Ð²Ð°, а также, возможно поÑтроение графиков параметров, не имеющих архива значений, путём Ð½Ð°ÐºÐ¾Ð¿Ð»ÐµÐ½Ð¸Ñ Ñ‚ÐµÐºÑƒÑ‰Ð¸Ñ… значений в буфере диаграммы и только на момент активного Ð¾Ñ‚Ð¾Ð±Ñ€Ð°Ð¶ÐµÐ½Ð¸Ñ Ñтой диаграммы. </p><p>ПроцеÑÑ Ð´Ð¾Ñтупа к архивным данным оптимизирован путём Ð²ÐµÐ´ÐµÐ½Ð¸Ñ Ð¿Ñ€Ð¾Ð¼ÐµÐ¶ÑƒÑ‚Ð¾Ñ‡Ð½Ð¾Ð³Ð¾ буфера отображениÑ, а также, упаковки трафика данных при запроÑе, путем Ð¿Ñ€Ð¸Ð²ÐµÐ´ÐµÐ½Ð¸Ñ Ð´Ð°Ð½Ð½Ñ‹Ñ… к качеÑтву доÑтаточного Ð´Ð»Ñ Ð¾Ñ‚Ð¾Ð±Ñ€Ð°Ð¶ÐµÐ½Ð¸Ñ. </p><p><b>Таблица.</b> Ðабор дополнительных ÑвойÑтв/атрибутов примитива "Ðлемент поÑÑ‚Ñ€Ð¾ÐµÐ½Ð¸Ñ Ð´Ð¸Ð°Ð³Ñ€Ð°Ð¼Ð¼ (Diagram)" </p> <table class="wikitable"> <tr> <th> Идентификатор </th> <th> Ð˜Ð¼Ñ </th> <th> Ðомер </th> <th> Значение </th></tr> <tr> <td> backColor </td> <td> Фон: цвет </td> <td> 20 </td> <td> <p>Фоновый цвет. Ð˜Ð¼Ñ Ñ†Ð²ÐµÑ‚Ð° в виде "<b>{color}[-{alpha}]</b>", где: </p> <ul><li> "color" — Ñтандартное Ð¸Ð¼Ñ Ñ†Ð²ÐµÑ‚Ð° или его чиÑловое предÑтавление из трёх шеÑтнадцатеричных чиÑел отдельных цветов "#RRGGBB";</li> <li> "alpha" — уровень альфа-канала [0...255], где 0 — полноÑтью прозрачный.<br /></li></ul> <p>Примеры: </p> <ul><li> "red" — Ñплошной краÑный цвет;</li> <li> "#FF0000" — Ñплошной краÑный цвет в цифровом коде;</li> <li> "red-127" — полупрозрачный краÑный цвет.</li></ul> </td></tr> <tr> <td> backImg </td> <td> Фон: изображение </td> <td> 21 </td> <td> <p>Фоновое изображение. Ð˜Ð¼Ñ Ð¸Ð·Ð¾Ð±Ñ€Ð°Ð¶ÐµÐ½Ð¸Ñ Ð² виде "<b>[{src}:]{name}</b>", где: </p> <ul><li> "src" — иÑточник изображениÑ: <ul><li> <i>file</i> — прÑмо из локального файла по пути;</li> <li> <i>res</i> — из таблицы реÑурÑов БД.</li></ul></li> <li> "name" — путь файла или идентификатор реÑурÑа.<br /></li></ul> <p>Примеры: </p> <ul><li> "res:backLogo" — из таблицы реÑурÑов БД Ð´Ð»Ñ Ð¸Ð´ÐµÐ½Ñ‚Ð¸Ñ„Ð¸ÐºÐ°Ñ‚Ð¾Ñ€Ð° "backLogo";</li> <li> "backLogo" — как и предыдущий;</li> <li> "file:/var/tmp/backLogo.png" — из локального файла по пути "/var/tmp/backLogo.png". </li></ul> </td></tr> <tr> <td> bordWidth </td> <td> Граница: ширина </td> <td> 22 </td> <td> Ширина бордюра. </td></tr> <tr> <td> bordColor </td> <td> Граница: цвет </td> <td> 23 </td> <td> Цвет бордюра (детальнее в атрибуте 20). </td></tr> <tr> <td> bordStyle </td> <td> Граница: Ñтиль </td> <td> 24 </td> <td> Стиль бордюра: "Ðет", "Точечный", "Пунктирный", "Сплошной", "Двойной", "Канавка", "Кромка", "Вдавлен", "Ð’Ñ‹Ñтупающий". </td></tr> <tr> <td> trcPer </td> <td> Период ÑлежениÑ, Ñекунд </td> <td> 25 </td> <td> Режим и периодичноÑÑ‚ÑŒ ÑлежениÑ. </td></tr> <tr> <td> type </td> <td> Тип </td> <td> 26 </td> <td> Тип диаграммы: "График", "Спектр", "XY". </td></tr> <tr> <td colspan="4"> <i>Ðтрибуты, общие Ð´Ð»Ñ Ð²Ñех типов</i> </td></tr> <tr> <td> tSek </td> <td> ВремÑ: Ñекунды </td> <td> 27 </td> <td> Текущее времÑ, Ñекунд. </td></tr> <tr> <td> tUSek </td> <td> ВремÑ: микроÑекунды </td> <td> 28 </td> <td> Текущее времÑ, микроÑекунды. </td></tr> <tr> <td> tSize </td> <td> Размер, Ñекунды </td> <td> 29 </td> <td> Размер данных, Ñекунды. </td></tr> <tr> <td> curSek </td> <td> КурÑор: Ñекунды </td> <td> 30 </td> <td> Положение курÑора, Ñекунды. </td></tr> <tr> <td> curUSek </td> <td> КурÑор: микроÑекунды </td> <td> 31 </td> <td> Положение курÑора, микроÑекунды. </td></tr> <tr> <td> curColor </td> <td> КурÑор: цвет </td> <td> 32 </td> <td> Цвет курÑора. </td></tr> <tr> <td> sclColor </td> <td> Шкала: цвет </td> <td> 33 </td> <td> Цвет шкалы-решетки (детальнее в атрибуте 20). </td></tr> <tr> <td> sclHor </td> <td> Шкала: Ð³Ð¾Ñ€Ð¸Ð·Ð¾Ð½Ñ‚Ð°Ð»ÑŒÐ½Ð°Ñ </td> <td> 34 </td> <td> Режим горизонтальной шкалы-решетки: "Ðе риÑовать", "Решетка", "Маркеры", "Решетка и маркеры", "Решетка (лог)", "Маркеры (лог)", "Решетка и маркеры (лог)". </td></tr> <tr> <td> sclHorScl </td> <td> Шкала: гориз. маÑштаб (%) </td> <td> 44 </td> <td> Горизонтальный маÑштаб графика в процентах, иÑключительно Ð´Ð»Ñ Ñ‚Ð¸Ð¿Ð° "XY". </td></tr> <tr> <td> sclHorSclOff </td> <td> Шкала: Ñмещ. гориз. маÑштаба (%) </td> <td> 45 </td> <td> Смещение горизонтального маштаба в процентах, иÑключительно Ð´Ð»Ñ Ñ‚Ð¸Ð¿Ð° "XY". </td></tr> <tr> <td> sclVer </td> <td> Шкала: Ð²ÐµÑ€Ñ‚Ð¸ÐºÐ°Ð»ÑŒÐ½Ð°Ñ </td> <td> 35 </td> <td> Режим вертикальной шкалы-решетки: "Ðе риÑовать", "Решетка", "Маркеры", "Решетка и маркеры", "Решетка (лог)", "Маркеры (лог)", "Решетка и маркеры (лог)". </td></tr> <tr> <td> sclVerScl </td> <td> Шкала: верт. маÑштаб (%) </td> <td> 40 </td> <td> Вертикальный маÑштаб графика в процентах. </td></tr> <tr> <td> sclVerSclOff </td> <td> Шкала: Ñмещ. верт. маÑштаба (%) </td> <td> 41 </td> <td> Смещение вертикального маÑштаба в процентах. </td></tr> <tr> <td> sclMarkColor </td> <td> Шкала: Маркеры: цвет </td> <td> 36 </td> <td> Цвет маркеров шкалы-решетки (детальнее в атрибуте 20). </td></tr> <tr> <td> sclMarkFont </td> <td> Шкала: Маркеры: шрифт </td> <td> 37 </td> <td> <p>Шрифт маркеров шкалы-решетки. Ð˜Ð¼Ñ ÑˆÑ€Ð¸Ñ„Ñ‚Ð° в виде "<b>{family} {size} {bold} {italic} {underline} {strike}</b>", где: </p> <ul><li> "family" — ÑемейÑтво шрифта, Ð´Ð»Ñ Ð¿Ñ€Ð¾Ð±ÐµÐ»Ð¾Ð² иÑпользуйте Ñимвол '_', вроде: "Arial", "Courier", "Times_New_Roman";</li> <li> "size" — размер шрифта в пикÑелÑÑ…;</li> <li> "bold" — уÑиление шрифта (0 или 1);</li> <li> "italic" — наклонноÑÑ‚ÑŒ шрифта (0 или 1);</li> <li> "underline" — подчёркивание шрифта (0 или 1);</li> <li> "strike" — перечёркивание шрифта (0 или 1).<br /></li></ul> <p>Примеры: </p> <ul><li> "Arial 10 1 0 0 0" — Arial шрифт размером 10 пикÑелей и уÑиленный.</li></ul> </td></tr> <tr> <td> valArch </td> <td> Ðрхиватор значений </td> <td> 38 </td> <td> Ðрхиватор значений в виде "<b>{МодульÐрхивов}.{IdÐрхиватора}</b>". </td></tr> <tr> <td> valsForPix </td> <td> Значений на пикÑель </td> <td> 42 </td> <td> КоличеÑтво значений на пикÑель. Увеличить Ð´Ð»Ñ Ñ€Ð°ÑÑˆÐ¸Ñ€ÐµÐ½Ð¸Ñ Ñ‚Ð¾Ñ‡Ð½Ð¾Ñти ÑкÑпорта на больших интервалах времени. </td></tr> <tr> <td> parNum </td> <td> КоличеÑтво параметров </td> <td> 39 </td> <td> КоличеÑтво параметров, отображаемых на одном тренде. </td></tr> <tr> <td colspan="4"> <i>Ðтрибуты типа: "График"</i> </td></tr> <tr> <td> sclHorPer </td> <td> Шкала: размер гор. решетки, Ñекунды </td> <td> 43 </td> <td> ФикÑированный период решётки горизонтальной шкалы — отключает автоматичеÑкое вычиÑление периода решётки. ÐктивируетÑÑ ÐµÑли количеÑтво периодов на общий размер более двух и размер одного периода не менее 15 пикÑелей. </td></tr> <tr> <td colspan="4"> <i><u>Индивидуальные атрибуты параметров</u></i> </td></tr> <tr> <td> prm{X}addr </td> <td> Параметр {X}: Ð°Ð´Ñ€ÐµÑ </td> <td> 50+10*{X} </td> <td> <p>Полный Ð°Ð´Ñ€ÐµÑ Ðº атрибуту параметра <i>X</i> DAQ или архиву.<br /> ПоддерживаетÑÑ Ð¿Ñ€ÑÐ¼Ð°Ñ ÑƒÑтановка данных по префикÑу: </p> <ul><li> "<b>data:{XMLNodeData}</b>" — изображение из прÑмо уÑтановленных данных;</li> <li> "<b>line:{значение}</b>" — изображение горизонтальной линии по значению, не имеет ÑмыÑла Ð´Ð»Ñ Ñ‚Ð¸Ð¿Ð° "XY".<br /></li></ul> <p>Пример: </p> <ul><li> "/DAQ/System/AutoDA/MemInfo/use" — Ð°Ð´Ñ€ÐµÑ Ðº атрибуту "use" параметра "MemInfo" объекта контроллера "AutoDA" DAQ Ð¼Ð¾Ð´ÑƒÐ»Ñ "System";</li> <li> "/Archive/va_CPULoad_load" — Ð°Ð´Ñ€ÐµÑ Ðº архиву "CPULoad_load";</li> <li> "data:<d s="1" aprox="1" tm="1369465209" tm_grnd="1369465200" per="1"></li></ul> <dl><dd>0 3.14</dd> <dd>1 3.141</dd> <dd>5 3.1415</d>" — 10 Ñекунд данных Ñ Ð¿ÐµÑ€Ð¸Ð¾Ð´Ð¾Ð¼ 1 Ñекунда от "25.05.2013 10:00:00"; возможно "tm" и "tm_grnd" не указывать, в результате чего будут подÑтавлены Ð·Ð½Ð°Ñ‡ÐµÐ½Ð¸Ñ Ð´Ð¸Ð°Ð¿Ð°Ð·Ð¾Ð½Ð° диаграммы, также, уÑтановкой атрибута "s", можно указать на Ð²Ñ€ÐµÐ¼Ñ Ð² Ñекундах; "aprox" — аппрокÑимировать переход от одной точки к другой вмеÑто подÑтановки предыдущего Ð·Ð½Ð°Ñ‡ÐµÐ½Ð¸Ñ Ð²Ð¾ вÑе точки периодичноÑти от упаковки;</dd></dl> <ul><li> "line:3.14159265" — Ð³Ð¾Ñ€Ð¸Ð·Ð¾Ð½Ñ‚Ð°Ð»ÑŒÐ½Ð°Ñ Ð»Ð¸Ð½Ð¸Ñ Ð¿Ð¾ значению "3.14159265".</li></ul> </td></tr> <tr> <td> prm{X}bordL </td> <td> Параметр {X}: граница отображ.: нижнÑÑ </td> <td> 50+10*{X}+1 </td> <td> ÐижнÑÑ Ð³Ñ€Ð°Ð½Ð¸Ñ†Ð° значений параметра <i>X</i>. </td></tr> <tr> <td> prm{X}bordU </td> <td> Параметр {X}: граница отображ.: верхнÑÑ </td> <td> 50+10*{X}+2 </td> <td> ВерхнÑÑ Ð³Ñ€Ð°Ð½Ð¸Ñ†Ð° значений параметра <i>X</i>. </td></tr> <tr> <td> prm{X}color </td> <td> Параметр {X}: цвет </td> <td> 50+10*{X}+3 </td> <td> Цвет Ð¾Ñ‚Ð¾Ð±Ñ€Ð°Ð¶ÐµÐ½Ð¸Ñ Ð³Ñ€Ð°Ñ„Ð¸ÐºÐ° параметра <i>X</i> (детальнее в атрибуте 20). </td></tr> <tr> <td> prm{X}width </td> <td> Параметр {X}: ширина </td> <td> 50+10*{X}+6 </td> <td> Ширина линии графика параметра <i>X</i>, в пикÑелÑÑ…. </td></tr> <tr> <td> prm{X}scl </td> <td> Параметр {X}: шкала </td> <td> 50+10*{X}+5 </td> <td> Режим отдельной вертикальной шкалы параметра <i>X</i>: "Глобально", "Маркеры", "Решетка и маркеры", "Маркеры (лог)", "Решетка и маркеры (лог)". </td></tr> <tr> <td> prm{X}val </td> <td> Параметр {X}: значение </td> <td> 50+10*{X}+4 </td> <td> Значение параметра <i>X</i> под курÑором, или на текущее времÑ, Ð´Ð»Ñ Ñ‚Ð¸Ð¿Ð° "XY". </td></tr> <tr> <td> prm{X}prop </td> <td> Параметр {X}: ÑвойÑтва </td> <td> 50+10*{X}+7 </td> <td> СвойÑтва реального архива в виде "<b>{BegArh}:{EndArh}:{DataPeriod}</b>", где "BegArh", "EndArh", "DataPeriod" — начало, конец и период данных архива, в Ñекундах, в вещеÑтвенном предÑтавлении, вплоть до микроÑекунд (1e-6). </td></tr></table> <h4><span class="mw-headline" id=".D0.AD.D0.BB.D0.B5.D0.BC.D0.B5.D0.BD.D1.82_.D0.BF.D0.BE.D1.81.D1.82.D1.80.D0.BE.D0.B5.D0.BD.D0.B8.D1.8F_.D0.BF.D1.80.D0.BE.D1.82.D0.BE.D0.BA.D0.BE.D0.BB.D0.BE.D0.B2_.D0.BD.D0.B0_.D0.BE.D1.81.D0.BD.D0.BE.D0.B2.D0.B5_.D0.B0.D1.80.D1.85.D0.B8.D0.B2.D0.BE.D0.B2_.D1.81.D0.BE.D0.BE.D0.B1.D1.89.D0.B5.D0.BD.D0.B8.D0.B9_.28Protocol.29"><span class="mw-headline-number">3.9.6</span> <span id="Protocol" title="#Protocol">Ðлемент поÑÑ‚Ñ€Ð¾ÐµÐ½Ð¸Ñ Ð¿Ñ€Ð¾Ñ‚Ð¾ÐºÐ¾Ð»Ð¾Ð² на оÑнове архивов Ñообщений (Protocol)</span></span></h4> <p>Данный примитив предназначен Ð´Ð»Ñ Ð²Ð¸Ð·ÑƒÐ°Ð»Ð¸Ð·Ð°Ñ†Ð¸Ð¸ данных архива Ñообщений путём Ñ„Ð¾Ñ€Ð¼Ð¸Ñ€Ð¾Ð²Ð°Ð½Ð¸Ñ Ð¿Ñ€Ð¾Ñ‚Ð¾ÐºÐ¾Ð»Ð¾Ð² Ñ Ñ€Ð°Ð·Ð»Ð¸Ñ‡Ð½Ñ‹Ð¼Ð¸ ÑпоÑобами визуализации, Ð½Ð°Ñ‡Ð¸Ð½Ð°Ñ Ð¾Ñ‚ ÑтатичеÑкого Ñканирующего проÑмотра и Ð·Ð°ÐºÐ°Ð½Ñ‡Ð¸Ð²Ð°Ñ Ð´Ð¸Ð½Ð°Ð¼Ð¸Ñ‡ÐµÑким Ñлеживанием. </p><p><b>Таблица.</b> Ðабор дополнительных ÑвойÑтв/атрибутов примитива "Ðлемент поÑÑ‚Ñ€Ð¾ÐµÐ½Ð¸Ñ Ð¿Ñ€Ð¾Ñ‚Ð¾ÐºÐ¾Ð»Ð¾Ð² на оÑнове архивов Ñообщений (Protocol)" </p> <table class="wikitable"> <tr> <th> Идентификатор </th> <th> Ð˜Ð¼Ñ </th> <th> Ðомер </th> <th> Значение </th></tr> <tr> <td> backColor </td> <td> Фон: цвет </td> <td> 20 </td> <td> <p>Фоновый цвет. Ð˜Ð¼Ñ Ñ†Ð²ÐµÑ‚Ð° в виде "<b>{color}[-{alpha}]</b>", где: </p> <ul><li> "color" — Ñтандартное Ð¸Ð¼Ñ Ñ†Ð²ÐµÑ‚Ð° или его чиÑловое предÑтавление из трёх шеÑтнадцатеричных чиÑел отдельных цветов "#RRGGBB";</li> <li> "alpha" — уровень альфа-канала [0...255], где 0 — полноÑтью прозрачный.<br /></li></ul> <p>Примеры: </p> <ul><li> "red" — Ñплошной краÑный цвет;</li> <li> "#FF0000" — Ñплошной краÑный цвет в цифровом коде;</li> <li> "red-127" — полупрозрачный краÑный цвет.</li></ul> </td></tr> <tr> <td> backImg </td> <td> Фон: изображение </td> <td> 21 </td> <td> <p>Фоновое изображение. Ð˜Ð¼Ñ Ð¸Ð·Ð¾Ð±Ñ€Ð°Ð¶ÐµÐ½Ð¸Ñ Ð² виде "<b>[{src}:]{name}</b>", где: </p> <ul><li> "src" — иÑточник изображениÑ: <ul><li> <i>file</i> — прÑмо из локального файла по пути;</li> <li> <i>res</i> — из таблицы реÑурÑов БД.</li></ul></li> <li> "name" — путь файла или идентификатор реÑурÑа.<br /></li></ul> <p>Примеры: </p> <ul><li> "res:backLogo" — из таблицы реÑурÑов БД Ð´Ð»Ñ Ð¸Ð´ÐµÐ½Ñ‚Ð¸Ñ„Ð¸ÐºÐ°Ñ‚Ð¾Ñ€Ð° "backLogo";</li> <li> "backLogo" — как и предыдущий;</li> <li> "file:/var/tmp/backLogo.png" — из локального файла по пути "/var/tmp/backLogo.png".</li></ul> </td></tr> <tr> <td> font </td> <td> Шрифт </td> <td> 22 </td> <td> <p>Ð˜Ð¼Ñ ÑˆÑ€Ð¸Ñ„Ñ‚Ð° в виде "<b>{family} {size} {bold} {italic} {underline} {strike}</b>", где: </p> <ul><li> "family" — ÑемейÑтво шрифта, Ð´Ð»Ñ Ð¿Ñ€Ð¾Ð±ÐµÐ»Ð¾Ð² иÑпользуйте Ñимвол '_', вроде: "Arial", "Courier", "Times_New_Roman";</li> <li> "size" — размер шрифта в пикÑелÑÑ…;</li> <li> "bold" — уÑиление шрифта (0 или 1);</li> <li> "italic" — наклонноÑÑ‚ÑŒ шрифта (0 или 1);</li> <li> "underline" — подчёркивание шрифта (0 или 1);</li> <li> "strike" — перечёркивание шрифта (0 или 1).<br /></li></ul> <p>Примеры: </p> <ul><li> "Arial 10 1 0 0 0" — Arial шрифт размером 10 пикÑелей и уÑиленный.</li></ul> </td></tr> <tr> <td> headVis </td> <td> Заголовок видим </td> <td> 23 </td> <td> ВидимоÑÑ‚ÑŒ заголовка таблицы. </td></tr> <tr> <td> time </td> <td> ВремÑ, Ñекунды </td> <td> 24 </td> <td> Текущее времÑ, Ñекунды. </td></tr> <tr> <td> tSize </td> <td> Размер, Ñекунды </td> <td> 25 </td> <td> Размер запроÑа данных, Ñекунды. УÑтановить значение в '0' Ð´Ð»Ñ Ð¿Ð¾Ð»ÑƒÑ‡ÐµÐ½Ð¸Ñ Ð²Ñех нарушений, Ð´Ð»Ñ "lev" < 0. </td></tr> <tr> <td> trcPer </td> <td> Период ÑлежениÑ, Ñекунды </td> <td> 26 </td> <td> Режим и периодичноÑÑ‚ÑŒ ÑлежениÑ. </td></tr> <tr> <td> arch </td> <td> Ðрхиватор </td> <td> 27 </td> <td> Ðрхиватор Ñообщений в виде "<b>{МодульÐрхивов}.{IdÐрхиватора}</b>". </td></tr> <tr> <td> tmpl </td> <td> Шаблон </td> <td> 28 </td> <td> <p>Шаблон категории или регулÑрное выражение "<b>/{re}/</b>". Ð”Ð»Ñ ÑˆÐ°Ð±Ð»Ð¾Ð½Ð° зарезервированы Ñимволы: </p> <ul><li> '*' — множеÑтво любых, группа Ñимволов;</li> <li> '?' — любой, один Ñимвол;</li> <li> '\\' — иÑпользуйте Ð´Ð»Ñ ÑÐºÑ€Ð°Ð½Ð¸Ñ€Ð¾Ð²Ð°Ð½Ð¸Ñ Ñпециальных Ñимволов.</li></ul> </td></tr> <tr> <td> lev </td> <td> Уровень </td> <td> 29 </td> <td> Уровень Ñообщений. УÑтановите значение < 0 Ð´Ð»Ñ Ð¿Ð¾Ð»ÑƒÑ‡ÐµÐ½Ð¸Ñ Ñ‚ÐµÐºÑƒÑ‰Ð¸Ñ… нарушений. </td></tr> <tr> <td> viewOrd </td> <td> ПорÑдок Ð¾Ñ‚Ð¾Ð±Ñ€Ð°Ð¶ÐµÐ½Ð¸Ñ </td> <td> 30 </td> <td> ПорÑдок отображениÑ: "По времени", "По уровню", "По категории", "По Ñообщению", "По времени (обратно)", "По уровню (обратно)", "По категории (обратно)", "По Ñообщению (обратно)". </td></tr> <tr> <td> col </td> <td> Показать колонки </td> <td> 31 </td> <td> <p>СпиÑок видимых и порÑдок колонок, разделённый Ñимволом ';'. ПредуÑматриваютÑÑ ÐºÐ¾Ð»Ð¾Ð½ÐºÐ¸: </p> <ul><li> "pos" — номер Ñтроки;</li> <li> "tm" — дата и Ð²Ñ€ÐµÐ¼Ñ ÑообщениÑ;</li> <li> "utm" — микроÑÐµÐºÑƒÐ½Ð´Ð½Ð°Ñ Ñ‡Ð°ÑÑ‚ÑŒ времени ÑообщениÑ;</li> <li> "lev" — уровень ÑообщениÑ;</li> <li> "cat" — ÐºÐ°Ñ‚ÐµÐ³Ð¾Ñ€Ð¸Ñ ÑообщениÑ;</li> <li> "mess" — текÑÑ‚ ÑообщениÑ. </li></ul> </td></tr> <tr> <td> itProp </td> <td> СвойÑтва Ñлемента </td> <td> 32 </td> <td> КоличеÑтво ÑвойÑтв Ñлемента. </td></tr> <tr> <td colspan="4"> <i><u>Индивидуальные атрибуты ÑвойÑтв Ñлемента</u></i> </td></tr> <tr> <td> it{X}lev </td> <td> Ðлемент {X}: уровень </td> <td> 40+5*{X} </td> <td> Критерий: уровень Ñлемента <i>X</i> более или равно указанному. </td></tr> <tr> <td> it{X}tmpl </td> <td> Ðлемент {X}: шаблон </td> <td> 40+5*{X}+1 </td> <td> Критерий: шаблон категории Ñлемента <i>X</i> (детальнее в атрибуте 28). </td></tr> <tr> <td> it{X}fnt </td> <td> Ðлемент {X}: шрифт </td> <td> 40+5*{X}+2 </td> <td> Шрифт Ñлемента <i>X</i> (детальнее в атрибуте 22). </td></tr> <tr> <td> it{X}Ñolor </td> <td> Ðлемент {X}: цвет </td> <td> 40+5*{X}+3 </td> <td> Цвет Ñлемента <i>X</i> (детальнее в атрибуте 20). </td></tr></table> <h4><span class="mw-headline" id=".D0.AD.D0.BB.D0.B5.D0.BC.D0.B5.D0.BD.D1.82_.D1.84.D0.BE.D1.80.D0.BC.D0.B8.D1.80.D0.BE.D0.B2.D0.B0.D0.BD.D0.B8.D1.8F_.D0.BE.D1.82.D1.87.D1.91.D1.82.D0.BD.D0.BE.D0.B9_.D0.B4.D0.BE.D0.BA.D1.83.D0.BC.D0.B5.D0.BD.D1.82.D0.B0.D1.86.D0.B8.D0.B8_.28Document.29"><span class="mw-headline-number">3.9.7</span> <span id="Document" title="#Document">Ðлемент Ñ„Ð¾Ñ€Ð¼Ð¸Ñ€Ð¾Ð²Ð°Ð½Ð¸Ñ Ð¾Ñ‚Ñ‡Ñ‘Ñ‚Ð½Ð¾Ð¹ документации (Document)</span></span></h4> <p>Примитив предназначен Ð´Ð»Ñ Ñ„Ð¾Ñ€Ð¼Ð¸Ñ€Ð¾Ð²Ð°Ð½Ð¸Ñ Ð¾Ñ‚Ñ‡Ñ‘Ñ‚Ð½Ð¾Ð¹, оперативной и иной документации на оÑнове шаблонов документов. </p><p><b>Таблица.</b> Ðабор дополнительных ÑвойÑтв/атрибутов примитиве "Ðлемент Ñ„Ð¾Ñ€Ð¼Ð¸Ñ€Ð¾Ð²Ð°Ð½Ð¸Ñ Ð¾Ñ‚Ñ‡Ñ‘Ñ‚Ð½Ð¾Ð¹ документации (Document)" </p> <table class="wikitable"> <tr> <th> Идентификатор </th> <th> Ð˜Ð¼Ñ </th> <th> Ðомер </th> <th> Значение </th></tr> <tr> <td> style </td> <td> CSS </td> <td> 20 </td> <td> Правила CSS в Ñтроках, вида "<b>body { background-color:#818181; }</b>". </td></tr> <tr> <td> tmpl </td> <td> Шаблон </td> <td> 21 </td> <td> <p>Шаблон документа в XHTML, Ð½Ð°Ñ‡Ð¸Ð½Ð°Ñ Ñ Ñ‚ÐµÐ³Ð° "body" и Ð²ÐºÐ»ÑŽÑ‡Ð°Ñ Ð¿Ñ€Ð¾Ñ†ÐµÐ´ÑƒÑ€Ð½Ñ‹Ðµ вÑтавки: </p> <div class="mw-highlight mw-content-ltr" dir="ltr"><pre><span class="nt"><body</span> <span class="na">docProcLang=</span><span class="s">"JavaLikeCalc.JavaScript"</span><span class="nt">></span> <span class="nt"><h1></span>Значение<span class="cp"><?dp return wCod+1.314;?></span><span class="nt"></h1></span> <span class="nt"></body></span> </pre></div> </td></tr> <tr> <td> doc </td> <td> Документ </td> <td> 22 </td> <td> Финальный документ в XHTML, начинаетÑÑ Ñ Ñ‚ÐµÐ³Ð° "body". </td></tr> <tr> <td> font </td> <td> Шрифт </td> <td> 26 </td> <td> <p>Базовый шрифт текÑта документа. Ð˜Ð¼Ñ ÑˆÑ€Ð¸Ñ„Ñ‚Ð° в виде "<b>{family} {size} {bold} {italic} {underline} {strike}</b>", где: </p> <ul><li> "family" — ÑемейÑтво шрифта, Ð´Ð»Ñ Ð¿Ñ€Ð¾Ð±ÐµÐ»Ð¾Ð² иÑпользуйте Ñимвол '_', вроде: "Arial", "Courier", "Times_New_Roman";</li> <li> "size" — размер шрифта в пикÑелÑÑ…;</li> <li> "bold" — уÑиление шрифта (0 или 1);</li> <li> "italic" — наклонноÑÑ‚ÑŒ шрифта (0 или 1);</li> <li> "underline" — подчёркивание шрифта (0 или 1);</li> <li> "strike" — перечёркивание шрифта (0 или 1).<br /></li></ul> <p>Примеры: </p> <ul><li> "Arial 10 1 0 0 0" — Arial шрифт размером 10 пикÑелей и уÑиленный.</li></ul> </td></tr> <tr> <td> bTime </td> <td> ВремÑ: начало </td> <td> 24 </td> <td> Ð’Ñ€ÐµÐ¼Ñ Ð½Ð°Ñ‡Ð°Ð»Ð° документа, Ñекунды. </td></tr> <tr> <td> time </td> <td> ВремÑ: текущее </td> <td> 23 </td> <td> Ð’Ñ€ÐµÐ¼Ñ Ð³ÐµÐ½ÐµÑ€Ð°Ñ†Ð¸Ð¸ документа, Ñекунды. ЗапиÑать Ð²Ñ€ÐµÐ¼Ñ Ð´Ð»Ñ Ð³ÐµÐ½ÐµÑ€Ð°Ñ†Ð¸Ð¸ документа от Ñтой точки или нуль Ð´Ð»Ñ Ð¿ÐµÑ€ÐµÐ³ÐµÐ½ÐµÑ€Ð°Ñ†Ð¸Ð¸. </td></tr> <tr> <td> process </td> <td> Ð’ процеÑÑе </td> <td> 27 </td> <td> Признак процеÑÑа Ñ„Ð¾Ñ€Ð¼Ð¸Ñ€Ð¾Ð²Ð°Ð½Ð¸Ñ Ð´Ð¾ÐºÑƒÐ¼ÐµÐ½Ñ‚Ð° отдельным потоком. </td></tr> <tr> <td> n </td> <td> Размер архива </td> <td> 25 </td> <td> КоличеÑтво документов или глубина архива. </td></tr> <tr> <td colspan="4"> <i>Ðтрибуты включеного режима архивированиÑ</i> </td></tr> <tr> <td> aCur </td> <td> Ðрхив: курÑор: текущий </td> <td> - </td> <td> ÐŸÐ¾Ð·Ð¸Ñ†Ð¸Ñ Ñ‚ÐµÐºÑƒÑ‰ÐµÐ³Ð¾ документа в архиве. ЗапиÑÑŒ Ð·Ð½Ð°Ñ‡ÐµÐ½Ð¸Ñ <i><0</i> производит архивацию текущего документа. </td></tr> <tr> <td> vCur </td> <td> Ðрхив: курÑор: вид </td> <td> - </td> <td> <p>Текущий визуализируемый документ архива. ЗапиÑÑŒ значениÑ: </p> <ul><li> <i>-1</i> — выбор Ñледующего документа;</li> <li> <i>-2</i> — выбор предыдущего документа.</li></ul> </td></tr> <tr> <td> aDoc </td> <td> Ðрхив: текущий документ </td> <td> - </td> <td> Текущий документ архива в XHTML, начинаетÑÑ Ñ Ñ‚ÐµÐ³Ð° "body". </td></tr> <tr> <td> aSize </td> <td> Ðрхив: размер </td> <td> - </td> <td> Реальный размер архива документа. </td></tr></table> <p>ВозможноÑти примитива "Документ": </p> <ul><li> Гибкое формирование Ñтруктуры документа на оÑнове Ñзыка гипертекÑтовой разметки, что предоÑтавлÑет поддержку широких возможноÑтей Ñ„Ð¾Ñ€Ð¼Ð°Ñ‚Ð¸Ñ€Ð¾Ð²Ð°Ð½Ð¸Ñ Ð´Ð¾ÐºÑƒÐ¼ÐµÐ½Ñ‚Ð¾Ð².</li> <li> Формирование документов по команде или раÑпиÑанию, что необходимо Ð´Ð»Ñ Ñ„Ð¾Ñ€Ð¼Ð¸Ñ€Ð¾Ð²Ð°Ð½Ð¸Ñ Ð¾Ñ‚Ñ‡Ñ‘Ñ‚Ð½Ð¾Ð¹ документации в архив, Ñ Ð¿Ð¾Ñледующим проÑмотром архива.</li> <li> Формирование документов в режиме реального времени, Ð´Ð»Ñ Ð¿Ñ€ÐµÐ´Ð¾ÑÑ‚Ð°Ð²Ð»ÐµÐ½Ð¸Ñ Ð¸Ñ… полноÑтью динамичеÑки и на оÑнове архивов за указанное времÑ.</li> <li> ИÑпользование атрибутов виджета Ð´Ð»Ñ Ð¿ÐµÑ€ÐµÐ´Ð°Ñ‡Ð¸ в документ значений и адреÑов на архивы, что позволÑет иÑпользовать виджет документа как шаблон, при формировании отчётов Ñ Ð´Ñ€ÑƒÐ³Ð¸Ð¼Ð¸ входными данными.</li></ul> <p>Ð’ оÑнове любого документа лежит XHTML-шаблон. XHTML-шаблон Ñто тег "body" WEB-Ñтраницы, Ñодержащий Ñтатику документа в Ñтандарте XHTML 1.0 и Ñлементы иÑполнÑемых инÑтрукций на Ñзыке пользовательÑкого Ð¿Ñ€Ð¾Ð³Ñ€Ð°Ð¼Ð¼Ð¸Ñ€Ð¾Ð²Ð°Ð½Ð¸Ñ OpenSCADA, в виде <b><?dp {procedure} ?></b>. Результирующий документ формируетÑÑ Ð¿ÑƒÑ‚Ñ‘Ð¼ иÑÐ¿Ð¾Ð»Ð½ÐµÐ½Ð¸Ñ Ð¿Ñ€Ð¾Ñ†ÐµÐ´ÑƒÑ€ и вÑтавки их результата в документ. </p><p>ИÑточником значений иÑполнÑемых инÑтрукций ÑвлÑÑŽÑ‚ÑÑ Ð°Ñ‚Ñ€Ð¸Ð±ÑƒÑ‚Ñ‹ виджета Ñтого примитива, а также вÑе механизмы Ñзыка пользовательÑкого Ð¿Ñ€Ð¾Ð³Ñ€Ð°Ð¼Ð¼Ð¸Ñ€Ð¾Ð²Ð°Ð½Ð¸Ñ OpenSCADA. Ðтрибуты могут добавлÑÑ‚ÑŒÑÑ Ð¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ñ‚ÐµÐ»ÐµÐ¼ и линковатьÑÑ Ð½Ð° реальные атрибуты параметров или-же ÑвлÑÑ‚ÑŒÑÑ Ð°Ð²Ñ‚Ð¾Ð½Ð¾Ð¼Ð½Ñ‹Ð¼Ð¸, Ð·Ð½Ð°Ñ‡ÐµÐ½Ð¸Ñ ÐºÐ¾Ñ‚Ð¾Ñ€Ñ‹Ñ… будут формироватьÑÑ Ð² процедуре виджета. Ð’ Ñлучае Ñо Ñлинкованными атрибутами, Ð·Ð½Ð°Ñ‡ÐµÐ½Ð¸Ñ Ð¼Ð¾Ð³ÑƒÑ‚ извлекатьÑÑ Ð¸Ð· архива-иÑтории. </p><p>Ðа риÑунке изображена ÑÑ‚Ñ€ÑƒÐºÑ‚ÑƒÑ€Ð½Ð°Ñ Ñхема виджета примитива "Документ". СоглаÑно Ñтой Ñтруктуре, "Документ" Ñодержит: XHTML-шаблон, результирующие документы и процедуру обработки данных. ИÑточником данных процедуры и результирующих документов ÑвлÑÑŽÑ‚ÑÑ Ð°Ñ‚Ñ€Ð¸Ð±ÑƒÑ‚Ñ‹ виджета. </p> <div class="center"><div class="thumb tnone"><div class="thumbinner" style="width:556px;"><a class="image" href="http://oscada.org/wiki/File:VCA_document_ru.png"><img class="thumbimage" height="381" src="../files/VCA_document_ru.png" width="554" /></a> <div class="thumbcaption">РиÑунок. Ð¡Ñ‚Ñ€ÑƒÐºÑ‚ÑƒÑ€Ð½Ð°Ñ Ñхема примитива "Документ".</div></div></div></div> <p>ПредуÑматриваетÑÑ Ñ€Ð°Ð±Ð¾Ñ‚Ð° виджета в двух режимах: "ДинамичеÑкий" и "Ðрхивный". Отличием архивного режима ÑвлÑетÑÑ Ð½Ð°Ð»Ð¸Ñ‡Ð¸Ðµ архива указанной глубины и атрибутов, позволÑющих управлÑÑ‚ÑŒ процеÑÑом Ð°Ñ€Ñ…Ð¸Ð²Ð¸Ñ€Ð¾Ð²Ð°Ð½Ð¸Ñ Ð¸ проÑмотра указанного документа в архиве. </p><p>Ð“ÐµÐ½ÐµÑ€Ð°Ñ†Ð¸Ñ Ð´Ð¾ÐºÑƒÐ¼ÐµÐ½Ñ‚Ð° вÑегда производитÑÑ Ð² момент уÑтановки атрибута времени <i>time</i> отноÑительно уÑтановленного ранее начального времени документа в атрибуте <i>bTime</i>. При выключенном архиве, результирующий документ помещаетÑÑ Ð½ÐµÐ¿Ð¾ÑредÑтвенно в атрибут <i>doc</i>. При включенном архиве, результирующий документ помещаетÑÑ Ð² Ñчейку под курÑором, атрибут <i>aCur</i>, а так-же в <i>doc</i>, еÑли значение курÑора архива <i>aCur</i> и курÑора визуализируемого документа <i>vCur</i> Ñовпадают. Ðтрибуты архивных курÑоров предуÑматривают неÑколько командных значений: </p> <ul><li> "aCur < 0" — перемещает курÑор архиватора на Ñледующую позицию, тем Ñамым оÑтавлÑÑ Ð¿Ñ€ÐµÐ´Ñ‹Ð´ÑƒÑ‰Ð¸Ð¹ документ в архиве и Ð¾Ñ‡Ð¸Ñ‰Ð°Ñ Ð´Ð¾ÐºÑƒÐ¼ÐµÐ½Ñ‚ под курÑором, еÑли кольцевой архив замкнулÑÑ.</li> <li> "vCur == -1" — выбор Ñледующего документа Ð´Ð»Ñ Ð¾Ñ‚Ð¾Ð±Ñ€Ð°Ð¶ÐµÐ½Ð¸Ñ, выбранный документ копируетÑÑ Ð² атрибут <i>doc</i>.</li> <li> "vCur == -2" — выбор предыдущего документа Ð´Ð»Ñ Ð¾Ñ‚Ð¾Ð±Ñ€Ð°Ð¶ÐµÐ½Ð¸Ð¹, выбранный документ копируетÑÑ Ð² атрибут <i>doc</i>.</li></ul> <p>Как было указано выше, динамика шаблона документа определÑетÑÑ Ð²Ñтавками иÑполнÑемых инÑтрукций вида "<b><?dp {procedure} ?></b>". Ð’ процедурах могут иÑпользоватьÑÑ Ð¾Ð´Ð½Ð¾Ð¸Ð¼Ñ‘Ð½Ð½Ñ‹Ðµ атрибуты виджета и функции пользовательÑкого интерфейÑа Ð¿Ñ€Ð¾Ð³Ñ€Ð°Ð¼Ð¼Ð¸Ñ€Ð¾Ð²Ð°Ð½Ð¸Ñ OpenSCADA. Кроме атрибутов виджета, зарезервированы Ñпециальные атрибуты, Ñмотри таблицу. </p><p><b>Таблица.</b> Специальные и зарезервированные Ñлементы шаблона. </p> <table class="wikitable"> <tr> <th> Ð˜Ð¼Ñ </th> <th> Ðазначение </th></tr> <tr> <td colspan="2"> <i>Ðтрибуты</i> </td></tr> <tr> <td> rez </td> <td> Ðтрибут результата иÑÐ¿Ð¾Ð»Ð½ÐµÐ½Ð¸Ñ Ð¿Ñ€Ð¾Ñ†ÐµÐ´ÑƒÑ€Ñ‹, Ñодержимое которого помещаетÑÑ Ð² дерево документа. </td></tr> <tr> <td> lTime </td> <td> Ð’Ñ€ÐµÐ¼Ñ Ð¿Ð¾Ñледнего формированиÑ. ЕÑли документ формируетÑÑ Ð²Ð¿ÐµÑ€Ð²Ñ‹Ðµ то <i>lTime</i> равен <i>bTime</i>. </td></tr> <tr> <td> rTime </td> <td> Содержит Ð²Ñ€ÐµÐ¼Ñ Ð¿ÐµÑ€ÐµÐ±Ð¸Ñ€Ð°ÐµÐ¼Ñ‹Ñ… значений, Ñекунды, определÑетÑÑ Ð²Ð½ÑƒÑ‚Ñ€Ð¸ тегов Ñ Ð°Ñ‚Ñ€Ð¸Ð±ÑƒÑ‚Ð¾Ð¼ "docRept". </td></tr> <tr> <td> rTimeU </td> <td> Содержит Ð²Ñ€ÐµÐ¼Ñ Ð¿ÐµÑ€ÐµÐ±Ð¸Ñ€Ð°ÐµÐ¼Ñ‹Ñ… значений, микроÑекунды, определÑетÑÑ Ð²Ð½ÑƒÑ‚Ñ€Ð¸ тегов Ñ Ð°Ñ‚Ñ€Ð¸Ð±ÑƒÑ‚Ð¾Ð¼ "docRept". </td></tr> <tr> <td> rPer </td> <td> Содержит период перебора значений, атрибут "docRept". </td></tr> <tr> <td> mTime, mTimeU, mLev, mCat, mVal </td> <td> <p>ОпределÑÑŽÑ‚ÑÑ Ð²Ð½ÑƒÑ‚Ñ€Ð¸ тегов Ñ Ð°Ñ‚Ñ€Ð¸Ð±ÑƒÑ‚Ð¾Ð¼ "docAMess" при разборе Ñообщений архива Ñообщений: </p> <dl><dd><i>mTime</i> — Ð²Ñ€ÐµÐ¼Ñ ÑообщениÑ, Ñекунды;</dd> <dd><i>mTimeU</i> — Ð²Ñ€ÐµÐ¼Ñ ÑообщениÑ, микроÑекунды;</dd> <dd><i>mLev</i> — уровень ÑообщениÑ;</dd> <dd><i>mCat</i> — ÐºÐ°Ñ‚ÐµÐ³Ð¾Ñ€Ð¸Ñ ÑообщениÑ;</dd> <dd><i>mVal</i> — значение ÑообщениÑ.</dd></dl> </td></tr> <tr> <td colspan="2"> <i>Специальные теги</i> </td></tr> <tr> <td colspan="2"> <i>Специальные атрибуты Ñтандартных тегов</i> </td></tr> <tr> <td> body.docProcLang </td> <td> Язык иÑполнÑемых процедур документа, по умолчанию Ñто "JavaLikeCalc.JavaScript". </td></tr> <tr> <td> *.docRept="1s" </td> <td> Тег Ñ ÑƒÐºÐ°Ð·Ð°Ð½Ð½Ñ‹Ð¼ атрибутом размножаетÑÑ, при формировании, путём ÑÐ¼ÐµÑ‰ÐµÐ½Ð¸Ñ Ð²Ñ€ÐµÐ¼ÐµÐ½Ð¸ в атрибуте "rTime" на значение, указанное в данном атрибуте. </td></tr> <tr> <td> *.docAMess="1:PLC*" </td> <td> Указывает на необходимоÑÑ‚ÑŒ Ñ€Ð°Ð·Ð¼Ð½Ð¾Ð¶ÐµÐ½Ð¸Ñ Ñ‚ÐµÐ³Ð° Ñ Ð°Ñ‚Ñ€Ð¸Ð±ÑƒÑ‚Ð¾Ð¼, ÑообщениÑми из архива Ñообщений за указанный интервал времени, ÑоглаÑно ÑƒÑ€Ð¾Ð²Ð½Ñ "1" и шаблона запроÑа "PLC*", по категории ÑообщениÑ. Ð’ шаблоне запроÑа могут указыватьÑÑ <a class="extiw" href="https://en.wikipedia.org/wiki/Regular_expression" title="wikipedia:Regular expression">регулÑрные выражениÑ</a> в виде "<b>/{re}/</b>". Ð”Ð»Ñ Ð´Ð°Ð½Ð½Ð¾Ð³Ð¾ тега, в процеÑÑе размножениÑ, определÑÑŽÑ‚ÑÑ Ð°Ñ‚Ñ€Ð¸Ð±ÑƒÑ‚Ñ‹: "mTime", "mTimeU", "mLev", "mCat" и "mVal". </td></tr> <tr> <td> *.docAMessArchs="ArchMod0.Archivator0[;ArchModN.ArchivatorN]" </td> <td> ДополнÑет атрибут "*.docAMess" перечнем архиваторов Ð´Ð»Ñ Ñ‡Ñ‚ÐµÐ½Ð¸Ñ Ñообщений. </td></tr> <tr> <td> *.docRevers="1" </td> <td> Указывает на инвертирование порÑдка Ñ€Ð°Ð·Ð¼Ð½Ð¾Ð¶ÐµÐ½Ð¸Ñ â€” поÑледний Ñверху. </td></tr> <tr> <td> *.docAppend="1" </td> <td> Признак необходимоÑти Ð´Ð¾Ð±Ð°Ð²Ð»ÐµÐ½Ð¸Ñ Ñ€ÐµÐ·ÑƒÐ»ÑŒÑ‚Ð°Ñ‚Ð° Ð²Ñ‹Ð¿Ð¾Ð»Ð½ÐµÐ½Ð¸Ñ Ð¿Ñ€Ð¾Ñ†ÐµÐ´ÑƒÑ€Ñ‹ в тег процедуры. Иначе результат иÑÐ¿Ð¾Ð»Ð½ÐµÐ½Ð¸Ñ Ð·Ð°Ð¼ÐµÐ½Ñет Ñодержимое тега. </td></tr> <tr> <td> body.docTime </td> <td> Ð’Ñ€ÐµÐ¼Ñ Ñ„Ð¾Ñ€Ð¼Ð¸Ñ€Ð¾Ð²Ð°Ð½Ð¸Ñ Ð´Ð¾ÐºÑƒÐ¼ÐµÐ½Ñ‚Ð°, иÑпользуетÑÑ Ð´Ð»Ñ ÑƒÑтановки атрибута <i>lTime</i> при Ñледующем формировании документа. Ðе уÑтанавливаетÑÑ Ð¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ñ‚ÐµÐ»ÐµÐ¼! </td></tr> <tr> <td> table.export="1" </td> <td> Включение возможноÑти ÑкÑпорта Ñодержимого указанной таблицы в CSV-файл и другие табличные форматы. </td></tr></table> <h4><span class="mw-headline" id=".D0.9A.D0.BE.D0.BD.D1.82.D0.B5.D0.B9.D0.BD.D0.B5.D1.80_.28Box.29"><span class="mw-headline-number">3.9.8</span> <span id="Box" title="#Box">Контейнер (Box)</span></span></h4> <p>Примитив контейнера, иÑпользуетÑÑ Ð´Ð»Ñ Ñ„Ð¾Ñ€Ð¼Ð¸Ñ€Ð¾Ð²Ð°Ð½Ð¸Ñ ÑоÑтавных виджетов и/или Ñтраниц пользовательÑкого интерфейÑа. </p><p><b>Таблица.</b> Ðабор дополнительных ÑвойÑтв/атрибутов примитива "Контейнер (Box)" </p> <table class="wikitable"> <tr> <th> Идентификатор </th> <th> Ð˜Ð¼Ñ </th> <th> Ðомер </th> <th> Значение </th></tr> <tr> <td> pgOpenSrc </td> <td> Страница: иÑточник Ð¾Ñ‚ÐºÑ€Ñ‹Ñ‚Ð¸Ñ </td> <td> 3 </td> <td> Полный Ð°Ð´Ñ€ÐµÑ Ñтраницы, ÐºÐ¾Ñ‚Ð¾Ñ€Ð°Ñ Ð²ÐºÐ»ÑŽÑ‡ÐµÐ½Ð° внутрь данного контейнера. </td></tr> <tr> <td> pgGrp </td> <td> Страница: группа </td> <td> 4 </td> <td> Группа контейнера включаемых Ñтраниц. Только Ñтраницы в такой группе будут включатьÑÑ Ð² Ñтот Ð±Ð¾ÐºÑ ÐºÐ°Ðº контейнер. </td></tr> <tr> <td> backColor </td> <td> Фон: цвет </td> <td> 20 </td> <td> <p>Фоновый цвет. Ð˜Ð¼Ñ Ñ†Ð²ÐµÑ‚Ð° в виде "<b>{color}[-{alpha}]</b>", где: </p> <ul><li> "color" — Ñтандартное Ð¸Ð¼Ñ Ñ†Ð²ÐµÑ‚Ð° или его чиÑловое предÑтавление из трёх шеÑтнадцатеричных чиÑел отдельных цветов "#RRGGBB";</li> <li> "alpha" — уровень альфа-канала [0...255], где 0 — полноÑтью прозрачный.<br /></li></ul> <p>Примеры: </p> <ul><li> "red" — Ñплошной краÑный цвет;</li> <li> "#FF0000" — Ñплошной краÑный цвет в цифровом коде;</li> <li> "red-127" — полупрозрачный краÑный цвет.</li></ul> </td></tr> <tr> <td> backImg </td> <td> Фон: изображение </td> <td> 21 </td> <td> <p>Фоновое изображение. Ð˜Ð¼Ñ Ð¸Ð·Ð¾Ð±Ñ€Ð°Ð¶ÐµÐ½Ð¸Ñ Ð² виде "<b>[{src}:]{name}</b>", где: </p> <ul><li> "src" — иÑточник изображениÑ: <ul><li> <i>file</i> — прÑмо из локального файла по пути;</li> <li> <i>res</i> — из таблицы реÑурÑов БД.</li></ul></li> <li> "name" — путь файла или идентификатор реÑурÑа.<br /></li></ul> <p>Примеры: </p> <ul><li> "res:backLogo" — из таблицы реÑурÑов БД Ð´Ð»Ñ Ð¸Ð´ÐµÐ½Ñ‚Ð¸Ñ„Ð¸ÐºÐ°Ñ‚Ð¾Ñ€Ð° "backLogo";</li> <li> "backLogo" — как и предыдущий;</li> <li> "file:/var/tmp/backLogo.png" — из локального файла по пути "/var/tmp/backLogo.png". </li></ul> </td></tr> <tr> <td> bordWidth </td> <td> Граница: ширина </td> <td> 22 </td> <td> Ширина бордюра. </td></tr> <tr> <td> bordColor </td> <td> Граница: цвет </td> <td> 23 </td> <td> Цвет бордюра (детальнее в атрибуте 20). </td></tr> <tr> <td> bordStyle </td> <td> Граница: Ñтиль </td> <td> 24 </td> <td> Стиль бордюра: "Ðет", "Точечный", "Пунктирный", "Сплошной", "Двойной", "Канавка", "Кромка", "Вдавлен", "Ð’Ñ‹Ñтупающий". </td></tr></table> <p><br /> </p> <h3><span class="mw-headline" id=".D0.98.D1.81.D0.BF.D0.BE.D0.BB.D1.8C.D0.B7.D0.BE.D0.B2.D0.B0.D0.BD.D0.B8.D0.B5_.D0.91.D0.94_.D0.B4.D0.BB.D1.8F_.D1.85.D1.80.D0.B0.D0.BD.D0.B5.D0.BD.D0.B8.D1.8F_.D0.B1.D0.B8.D0.B1.D0.BB.D0.B8.D0.BE.D1.82.D0.B5.D0.BA_.D0.B2.D0.B8.D0.B4.D0.B6.D0.B5.D1.82.D0.BE.D0.B2_.D0.B8_.D0.BF.D1.80.D0.BE.D0.B5.D0.BA.D1.82.D0.BE.D0.B2"><span class="mw-headline-number">3.10</span> ИÑпользование БД Ð´Ð»Ñ Ñ…Ñ€Ð°Ð½ÐµÐ½Ð¸Ñ Ð±Ð¸Ð±Ð»Ð¸Ð¾Ñ‚ÐµÐº виджетов и проектов</span></h3> <p>Хранение данных виджетов, библиотек виджетов и проектов реализовано в БД, доÑтупных OpenSCADA. БД организована по принадлежноÑти данных к библиотеке-проекту. Т.е. Ð¾Ñ‚Ð´ÐµÐ»ÑŒÐ½Ð°Ñ Ð±Ð¸Ð±Ð»Ð¸Ð¾Ñ‚ÐµÐºÐ°-проект хранитÑÑ Ð² отдельной группе таблиц БД. Перечень библиотек виджетов хранитÑÑ Ð² индекÑной таблице библиотек Ñ Ð¸Ð¼ÐµÐ½ÐµÐ¼ "VCALibs" и Ñтруктурой "Libs", а перечень проектов в индекÑной таблице "VCAPrjs" и Ñтруктурой "Projs". ÐкземплÑÑ€ Ñтих таблиц ÑоздаётÑÑ Ð² каждой БД, где хранÑÑ‚ÑÑ Ð´Ð°Ð½Ð½Ñ‹Ðµ Ñтого модулÑ. Ð’ ÑоÑтав таблиц, принадлежащих библиотеке виджетов и проекту, входÑÑ‚ Ñледующие: </p> <ul><li> "<b>{DB_TBL}</b>" — таблица виджетов, принадлежащих библиотеке (Ñтруктура "LibWigets"), или Ñтраниц, принадлежащих проекту (Ñтруктура "ProjPages");</li> <li> "<b>{DB_TBL}_io</b>" — таблица рабочих ÑвойÑтв виджетов и вложенных виджетов библиотеки (Ñтруктура "LibWidgetIO") или ÑвойÑтв Ñтраниц проектов (Ñтруктура "ProjPageIO");</li> <li> "<b>{DB_TBL}_uio</b>" — таблица пользовательÑких ÑвойÑтв виджетов и вложенных виджетов Ñтой библиотеки (Ñтруктура "LibWidgetUserIO") или пользовательÑких ÑвойÑтв Ñтраниц (Ñтруктура "ProjPageUserIO");</li> <li> "<b>{DB_TBL}_incl</b>" — таблица виджетов, вложенных в виджеты-контейнеры, библиотеки (Ñтруктура "LibWidgetIncl") или проекта (Ñтруктура "ProjPageWIncl");</li> <li> "<b>{DB_TBL}_mime</b>" — таблица реÑурÑов библиотеки и её виджетов (Ñтруктура "LibWidgetMime"), или проекта и его Ñтраниц (Ñтруктура "ProjMime");</li> <li> "<b>{DB_TBL}_stls</b>" — таблица значений Ñтилевых параметров проекта (Ñтруктура "PrjStlsIO");</li> <li> "<b>{DB_TBL}_stl</b>" — уÑÑ‚Ð°Ñ€ÐµÐ²ÑˆÐ°Ñ Ñ‚Ð°Ð±Ð»Ð¸Ñ†Ð° значений Ñтилевых параметров проекта (Ñтруктура "PrjStlIO");</li> <li> "<b>{DB_TBL}_ses</b>" — таблица данных режима иÑÐ¿Ð¾Ð»Ð½ÐµÐ½Ð¸Ñ Ð¿Ñ€Ð¾ÐµÐºÑ‚Ð°, Ñ‚.е. ÑеанÑов (Ñтруктура "PrjSesIO").</li></ul> <p><a class="image" href="http://oscada.org/wiki/File:At.png"><img alt="At.png" height="22" src="../../en/files/At.png" width="22" /></a> <b>{DB_TBL}</b> ÑÐµÐ¹Ñ‡Ð°Ñ Ñ„Ð¾Ñ€Ð¼Ð¸Ñ€ÑƒÐµÑ‚ÑÑ Ð² виде "<b>wlb_{ID}</b>" Ð´Ð»Ñ Ð±Ð¸Ð±Ð»Ð¸Ð¾Ñ‚ÐµÐº и "<b>prj_{ID}</b>" Ð´Ð»Ñ Ð¿Ñ€Ð¾ÐµÐºÑ‚Ð¾Ð², а отдельное поле <i>DB_TBL</i> таблиц "Libs", "Projs" заÑтарело и будет удалено в випуÑке OpenSCADA 1.0! </p><p>Проекции (Ñтруктуры) оÑновных таблиц таковы: </p> <ul><li> <b>Libs(<u>ID</u>, NAME, DSCR, DB_TBL, ICO)</b> — библиотеки виджетов <i>ID</i>.</li></ul> <dl><dd><dl><dd><i>ID</i> — идентификатор;</dd> <dd><i>NAME</i> — имÑ;</dd> <dd><i>DSCR</i> — опиÑание;</dd> <dd><i>DB_TBL</i> (УСТÐРЕЛО) — корень таблиц БД Ñ Ð²Ð¸Ð´Ð¶ÐµÑ‚Ð°Ð¼Ð¸;</dd> <dd><i>ICO</i> — закодированное (Base64) изображение иконки библиотеки.</dd></dl></dd></dl> <ul><li> <b>LibWigets(<u>ID</u>, ICO, PARENT, PROC, PROC_PER, ATTRS, TIMESTAMP)</b> — виджеты <i>ID</i> библиотеки.</li></ul> <dl><dd><dl><dd><i>ID</i> — идентификатор;</dd> <dd><i>ICO</i> — закодированное (Base64) изображение иконки виджета;</dd> <dd><i>PARENT</i> — Ð°Ð´Ñ€ÐµÑ Ð²Ð¸Ð´Ð¶ÐµÑ‚Ð° оÑновы, в виде <i>/wlb_originals/wdg_Box</i>;</dd> <dd><i>PROC</i> — внутреннÑÑ Ð¿Ñ€Ð¾Ñ†ÐµÐ´ÑƒÑ€Ð° и Ñзык процедуры виджета;</dd> <dd><i>PROC_PER</i> — период вычиÑÐ»ÐµÐ½Ð¸Ñ Ð¿Ñ€Ð¾Ñ†ÐµÐ´ÑƒÑ€Ñ‹ виджета;</dd> <dd><i>ATTRS</i> — перечень атрибутов виджета, модифицированных пользователем;</dd> <dd><i>TIMESTAMP</i> — метка времени поÑледней модификации.</dd></dl></dd></dl> <ul><li> <b>LibWidgetIO(<u>IDW</u>, <u>ID</u>, <u>IDC</u>, IO_VAL, SELF_FLG, CFG_TMPL, CFG_VAL)</b> — рабочие атрибуты <i>ID</i> виджета <i>IDW</i> дочернего виджета <i>IDC</i>.</li></ul> <dl><dd><dl><dd><i>IDW</i> — идентификатор виджета;</dd> <dd><i>ID</i> — идентификатор атрибута;</dd> <dd><i>IDC</i> — идентификатор дочернего виджета;</dd> <dd><i>IO_VAL</i> — значение атрибута;</dd> <dd><i>SELF_FLG</i> — внутренние флаги атрибутов;</dd> <dd><i>CFG_TMPL</i> — шаблон Ñлемента конфигурации, оÑнованного на данном атрибуте;</dd> <dd><i>CFG_VAL</i> — значение Ñлемента конфигурации (ÑÑылка, конÑтанта ...).</dd></dl></dd></dl> <ul><li> <b>LibWidgetUserIO(<u>IDW</u>, <u>ID</u>, <u>IDC</u>, NAME, IO_TP, IO_VAL, SELF_FLG, CFG_TMPL, CFG_VAL)</b> — пользовательÑкие атрибуты <i>ID</i> виджета <i>IDW</i> дочернего виджета <i>IDC</i>.</li></ul> <dl><dd><dl><dd><i>IDW</i> — идентификатор виджета;</dd> <dd><i>ID</i> — идентификатор атрибута;</dd> <dd><i>IDC</i> — идентификатор дочернего виджета;</dd> <dd><i>NAME</i> — Ð¸Ð¼Ñ Ð°Ñ‚Ñ€Ð¸Ð±ÑƒÑ‚Ð°;</dd> <dd><i>IO_TP</i> — тип и главные флаги атрибута;</dd> <dd><i>IO_VAL</i> — значение атрибута;</dd> <dd><i>SELF_FLG</i> — внутренние флаги атрибута;</dd> <dd><i>CFG_TMPL</i> — шаблон Ñлемента конфигурации, оÑнованного на данном атрибуте;</dd> <dd><i>CFG_VAL</i> — значение Ñлемента конфигурации (ÑÑылка, конÑтанта ...).</dd></dl></dd></dl> <ul><li> <b>LibWidgetIncl(<u>IDW</u>, <u>ID</u>, PARENT, ATTRS)</b> — включенные в контейнер <i>IDW</i> виджеты <i>ID</i>.</li></ul> <dl><dd><dl><dd><i>IDW</i> — идентификатор виджета;</dd> <dd><i>ID</i> — идентификатор ÑкземплÑра вложенного виджета;</dd> <dd><i>PARENT</i> — Ð°Ð´Ñ€ÐµÑ Ð²Ð¸Ð´Ð¶ÐµÑ‚Ð° оÑновы, в виде <i>/wlb_originals/wdg_Box</i>;</dd> <dd><i>ATTRS</i> — перечень атрибутов виджета, модифицированных пользователем.</dd></dl></dd></dl> <ul><li> <b>LibWidgetMime(<u>ID</u>, MIME, DATA)</b> — audio, video, media и другие реÑурÑÑ‹ виджетов <i>ID</i> библиотеки.</li></ul> <dl><dd><dl><dd><i>ID</i> — идентификатор реÑурÑа;</dd> <dd><i>MIME</i> — MIME реÑурÑа, в формате — "<b>{MIME};{Size}</b>";</dd> <dd><i>DATA</i> — данные реÑурÑа, кодированные Base64.</dd></dl></dd></dl> <ul><li> <b>Projs(<u>ID</u>, NAME, DSCR, DB_TBL, ICO, USER, GRP, PERMIT, PER, FLGS, STYLE)</b> — проекты <i>ID</i> интерфейÑа визуализации.</li></ul> <dl><dd><dl><dd><i>ID</i> — идентификатор проекта;</dd> <dd><i>NAME</i> — Ð¸Ð¼Ñ Ð¿Ñ€Ð¾ÐµÐºÑ‚Ð°;</dd> <dd><i>DSCR</i> — опиÑание проекта;</dd> <dd><i>DB_TBL</i> (УСТÐРЕЛО) — корень таблиц БД Ñо Ñтраницами;</dd> <dd><i>ICO</i> — закодированное (Base64) изображение иконки проекта;</dd> <dd><i>USER</i> — Ð¸Ð¼Ñ Ð²Ð»Ð°Ð´ÐµÐ»ÑŒÑ†Ð° проекта;</dd> <dd><i>GRP</i> — Ð¸Ð¼Ñ Ð³Ñ€ÑƒÐ¿Ð¿Ñ‹ пользователей проекта;</dd> <dd><i>PERMIT</i> — права доÑтупа к проекту;</dd> <dd><i>PER</i> — период вычиÑÐ»ÐµÐ½Ð¸Ñ Ð¿Ñ€Ð¾ÐµÐºÑ‚Ð°, в миллиÑекундах;</dd> <dd><i>FLGS</i> — флаги проекта;</dd> <dd><i>STYLE</i> — типовой Ñтиль проекта.</dd></dl></dd></dl> <ul><li> <b>ProjPages(<u>OWNER</u>, <u>ID</u>, ICO, PARENT, PROC, PROC_PER, FLGS, ATTRS, TIMESTAMP)</b> — Ñтраницы <i>ID</i>, ÑодержащиеÑÑ Ð² проекте-Ñтранице <i>OWNER</i>.</li></ul> <dl><dd><dl><dd><i>OWNER</i> — проект-Ñтраница — владелец данной Ñтраницы, в виде — "/AGLKS/so/1/gcadr";</dd> <dd><i>ID</i> — идентификатор Ñтраницы;</dd> <dd><i>ICO</i> — закодированное (Base64) изображение иконки Ñтраницы;</dd> <dd><i>PARENT</i> — Ð°Ð´Ñ€ÐµÑ Ð²Ð¸Ð´Ð¶ÐµÑ‚Ð° оÑновы, в виде <i>/wlb_originals/wdg_Box</i>;</dd> <dd><i>PROC</i> — внутреннÑÑ Ð¿Ñ€Ð¾Ñ†ÐµÐ´ÑƒÑ€Ð° и Ñзык процедуры Ñтраницы;</dd> <dd><i>PROC_PER</i> — период вычиÑÐ»ÐµÐ½Ð¸Ñ Ð¿Ñ€Ð¾Ñ†ÐµÐ´ÑƒÑ€Ñ‹ Ñтраницы;</dd> <dd><i>FLGS</i> — флаги типов Ñтраницы;</dd> <dd><i>ATTRS</i> — перечень атрибутов Ñтраницы, модифицированных пользователем;</dd> <dd><i>TIMESTAMP</i> — метка времени поÑледней модификации.</dd></dl></dd></dl> <ul><li> <b>ProjPageIO(<u>IDW</u>, <u>ID</u>, <u>IDC</u>, IO_VAL, SELF_FLG, CFG_TMPL, CFG_VAL)</b> — рабочие атрибуты Ñтраниц, Ñтруктура фактичеÑки Ñовпадает Ñ Ñ‚Ð°Ð±Ð»Ð¸Ñ†ÐµÐ¹ "LibWidgetIO".</li> <li> <b>ProjPageUserIO(<u>IDW</u>, <u>ID</u>, <u>IDC</u>, NAME, IO_TP, IO_VAL, SELF_FLG, CFG_TMPL, CFG_VAL)</b> — пользовательÑкие атрибуты Ñтраниц, Ñтруктура фактичеÑки Ñовпадает Ñ Ñ‚Ð°Ð±Ð»Ð¸Ñ†ÐµÐ¹ "LibWidgetUserIO".</li> <li> <b>ProjPageWIncl(<u>IDW</u>, <u>ID</u>, PARENT, ATTRS)</b> — виджеты, включенные на Ñтраницы, Ñтруктура фактичеÑки Ñовпадает Ñ Ñ‚Ð°Ð±Ð»Ð¸Ñ†ÐµÐ¹ "LibWidgetIncl".</li> <li> <b>ProjMime(<u>ID</u>, MIME, DATA)</b> — audio, video, media и другие реÑурÑÑ‹ Ñтраниц проектов, Ñтруктура фактичеÑки Ñовпадает Ñ Ñ‚Ð°Ð±Ð»Ð¸Ñ†ÐµÐ¹ "LibWidgetMime".</li> <li> <b>PrjStls(<u>SID</u>, <u>ID</u>, VAL)</b> — значение <i>VAL</i> Ð¿Ð¾Ð»Ñ <i>ID</i> ÑÑ‚Ð¸Ð»Ñ <i>IDS</i> проекта.</li></ul> <dl><dd><dl><dd><i>IDS</i> — идентификатор ÑтилÑ;</dd> <dd><i>ID</i> — идентификатор Ð¿Ð¾Ð»Ñ ÑтилÑ;</dd> <dd><i>VAL</i> — значение Ð¿Ð¾Ð»Ñ ÑтилÑ.</dd></dl></dd></dl> <ul><li> <b>PrjStl(<u>ID</u>, V_0, V_1, V_2, V_3, V_4, V_5, V_6, V_7, V_8, V_9)</b> — Ð·Ð½Ð°Ñ‡ÐµÐ½Ð¸Ñ Ð¿Ð¾Ð»Ñ ÑÑ‚Ð¸Ð»Ñ <i>ID</i> проекта.</li></ul> <dl><dd><dl><dd><i>ID</i> — идентификатор Ð¿Ð¾Ð»Ñ ÑтилÑ;</dd> <dd><i>V_{N}</i> — значение Ð¿Ð¾Ð»Ñ ÑÑ‚Ð¸Ð»Ñ Ð´Ð»Ñ ÑÑ‚Ð¸Ð»Ñ <i>N</i>.</dd></dl></dd></dl> <ul><li> <b>ProjSess(<u>IDW</u>, <u>ID</u>, IO_VAL)</b> — таблица проекта <i>IDW</i> Ð´Ð»Ñ Ñ…Ñ€Ð°Ð½ÐµÐ½Ð¸Ñ Ð´Ð°Ð½Ð½Ñ‹Ñ… ÑеанÑов, иÑполнÑющих проект.</li></ul> <dl><dd><dl><dd><i>IDW</i> — полный путь Ñлемента проекта;</dd> <dd><i>ID</i> — атрибут Ñлемента;</dd> <dd><i>IO_VAL</i> — значение атрибута.</dd></dl></dd></dl> <p><br /> </p> <h3><span class="mw-headline" id="API_of_the_user_programming"><span class="mw-headline-number">3.11</span> <span id="UserAPI" title="#UserAPI">API of the user programming</span></span></h3> <p>API of the user programming of the visualization engine are represented directly by the OpenSCADA objects, which form the user interface, that is by the "Session" and "Widgets-pages". For the user, these objects provide a set of control functions: </p> <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>Object "Widget" of the primitive "Document" (this)</b> </p> <ul><li> <i>string getArhDoc( int nDoc)</i> — text of the archive document to "nDoc" depth (0-{aSize-1}).</li></ul> <p><br /> Deprecated but supported API is represented by a group of functions directly in the module of the VCA Engine. Calling these functions from the widget procedure can be done directly by the identifier with the "<b>vca</b>" prefix since their namespace is defined in the execution context of the widget procedures. </p><p><b>Widgets list (WdgList)</b><br /> <i>Description:</i> Returns a list of the widgets, in the widgets container, or the child list. If set <i>pg</i> then returns the pages list for projects and sessions.<br /> <i>Parameters:</i> </p> <table class="wikitable"> <tr> <th> Identifier </th> <th> Name </th> <th> Type </th> <th> Mode </th> <th> By default </th></tr> <tr> <td> list </td> <td> List </td> <td> String </td> <td> Return </td> <td> </td></tr> <tr> <td> addr </td> <td> Address </td> <td>String </td> <td> Input </td> <td> </td></tr> <tr> <td> pg </td> <td> Pages </td> <td> Boolean </td> <td> Input </td> <td> 0 </td></tr></table> <p><b>Node presence (NodePresent)</b><br /> <i>Description:</i> Checking for the node presence, including widgets, attributes and other.<br /> <i>Parameters:</i> </p> <table class="wikitable"> <tr> <th> Identifier </th> <th> Name </th> <th> Type </th> <th> Mode </th> <th> By default </th></tr> <tr> <td> rez </td> <td> Result </td> <td> Boolean </td> <td> Return </td> <td> </td></tr> <tr> <td> addr </td> <td> Address </td> <td> String </td> <td> Input </td> <td> </td></tr></table> <p><b>Attributes list (AttrList)</b><br /> <i>Description:</i> Returns an attributes list of the widget. If set <i>noUser</i> then returns only not user attributes.<br /> <i>Parameters:</i> </p> <table class="wikitable"> <tr> <th> Identifier </th> <th> Name </th> <th> Type </th> <th> Mode </th> <th> By default </th></tr> <tr> <td> list </td> <td> List </td> <td> String </td> <td> Return </td> <td> </td></tr> <tr> <td> addr </td> <td> Address </td> <td> String </td> <td> Input </td> <td> </td></tr> <tr> <td> noUser </td> <td> Not user </td> <td> Boolean </td> <td> Input </td> <td> 1 </td></tr></table> <p><b>Get the attribute (AttrGet)</b><br /> <i>Description:</i> Getting value of the widget attribute. The request can be done as by indicating the full address of the attribute in <i>addr</i>, and by: indicating separately the address of the widget in <i>addr</i> and the the attribute identifier in the <i>attr</i>.<br /> <i>Parameters:</i> </p> <table class="wikitable"> <tr> <th> Identifier </th> <th> Name </th> <th> Type </th> <th> Mode </th> <th> By default </th></tr> <tr> <td> val </td> <td> Value </td> <td> String </td> <td> Return </td> <td> </td></tr> <tr> <td> addr </td> <td> Address </td> <td> String </td> <td> Input </td> <td> </td></tr> <tr> <td> attr </td> <td> Attribute </td> <td> Boolean </td> <td> Input </td> <td> </td></tr></table> <p><b>Set the attribute (AttrSet)</b><br /> <i>Description:</i> Setting value of the widget attribute. Setting can be done as by indicating the full address of the attribute in <i>addr</i>, and by: indicating separately the address of the widget in <i>addr</i> and the the attribute identifier in the <i>attr</i>.<br /> <i>Parameters:</i> </p> <table class="wikitable"> <tr> <th> Identifier </th> <th> Name </th> <th> Type </th> <th> Mode </th> <th> By default </th></tr> <tr> <td> addr </td> <td> Address </td> <td> String </td> <td> Input </td> <td> </td></tr> <tr> <td> val </td> <td> Value </td> <td> String </td> <td> Input </td> <td> </td></tr> <tr> <td> attr </td> <td> Attribute </td> <td> Boolean </td> <td> Input </td> <td> </td></tr></table> <p><b>Session user (SesUser)</b><br /> <i>Description:</i> Returns the session user by the session widget path.<br /> <i>Parameters:</i> </p> <table class="wikitable"> <tr> <th> Identifier </th> <th> Name </th> <th> Type </th> <th> Mode </th> <th> By default </th></tr> <tr> <td> user </td> <td> User </td> <td> String </td> <td> Return </td> <td> </td></tr> <tr> <td> addr </td> <td> Address </td> <td> String </td> <td> Input </td> <td> </td></tr></table> <p><br /> </p> <h3><span class="mw-headline" id="Service_commands-functions_of_the_Control_Interface"><span class="mw-headline-number">3.12</span> Service commands-functions of the Control Interface</span></h3> <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><b><u>The common widgets</u></b><br /> </p> <dl><dd><b><u>Getting for values of specified or all visual attributes of the widget</u></b><br /></dd> <dd>REQ: <i><get path="/UI/VCAEngine/<b>{wAddr}</b>/%2fserv%2fattr"><b>{attributes}</b></get></i> <ul><li> <i>wAddr</i> — the widget local address, like to "/wlb_AGLKS/wdg_CM101/wdg_ElFigure1";</li> <li> <i>attributes</i> — the only requested attributes in the tags "el" with only one attribute of the identifier "id"; there can be no the attribute tags for requesting all available ones.</li></ul></dd> <dd>RESP: <i><get path="/UI/VCAEngine/{wAddr}/%2fserv%2fattr" rez="<b>0</b>"><b>{attributes}</b></get></i> <ul><li> <i>attributes</i> — processed attributes in the tags "el": <i><el id="<b>{ID}</b>" p="<b>{pos}</b>" act="<b>{active}</b>"><b>{value}</b></el></i> <ul><li> <i>ID</i> — identifier of the attribute;</li> <li> <i>pos</i> — position-index of the attribute for the standard ones;</li> <li> <i>active</i> — activity state of the attribute, only at the direct requesting;</li> <li> <i>value</i> — value of the attribute.</li></ul></li></ul></dd></dl> <div class="mw-highlight mw-content-ltr" dir="ltr" style="margin-left: 20pt"><pre><span class="nt"><get</span> <span class="na">path=</span><span class="s">"/UI/VCAEngine/wlb_AGLKS/wdg_CM101/wdg_ElFigure1/%2fserv%2fattr"</span> <span class="na">rez=</span><span class="s">"0"</span> <span class="na">user=</span><span class="s">"roman"</span><span class="nt">></span> <span class="nt"><el</span> <span class="na">id=</span><span class="s">"id"</span><span class="nt">></span>ElFigure1<span class="nt"></el></span> <span class="nt"><el</span> <span class="na">id=</span><span class="s">"path"</span><span class="nt">></span>/wlb_AGLKS/wdg_CM101/wdg_ElFigure1<span class="nt"></el></span> <span class="nt"><el</span> <span class="na">id=</span><span class="s">"parent"</span><span class="nt">></span>/wlb_originals/wdg_ElFigure<span class="nt"></el></span> <span class="nt"><el</span> <span class="na">id=</span><span class="s">"owner"</span><span class="nt">></span>root:UI<span class="nt"></el></span> <span class="nt"><el</span> <span class="na">id=</span><span class="s">"perm"</span><span class="nt">></span>948<span class="nt"></el></span> <span class="nt"><el</span> <span class="na">id=</span><span class="s">"root"</span> <span class="na">p=</span><span class="s">"1"</span><span class="nt">></span>ElFigure<span class="nt"></el></span> <span class="nt"><el</span> <span class="na">id=</span><span class="s">"name"</span> <span class="nt">/></span> <span class="nt"><el</span> <span class="na">id=</span><span class="s">"dscr"</span> <span class="nt">/></span> <span class="nt"></get></span> </pre></div> <dl><dd><b><u>Setting for group values of the specified widget attributes</u></b><br /></dd> <dd>REQ[<b>root-UI</b>]: <i><set path="/UI/VCAEngine/<b>{wAddr}</b>/%2fserv%2fattr"><b>{attributes}</b></set></i> <ul><li> <i>wAddr</i> — the widget local address in the module, like to "/wlb_AGLKS/wdg_CM101/wdg_ElFigure1";</li> <li> <i>attributes</i> — attributes with values in the tags "el": <i><el id="<b>{ID}</b>"><b>{value}</b></el></i> <ul><li> <i>ID</i> — identifier of the attribute;</li> <li> <i>value</i> — setting value of the attribute.</li></ul></li></ul></dd></dl> <div class="mw-highlight mw-content-ltr" dir="ltr" style="margin-left: 20pt"><pre><span class="nt"><set</span> <span class="na">path=</span><span class="s">"/UI/VCAEngine/wlb_AGLKS/wdg_CM101/wdg_ElFigure1/%2fserv%2fattr"</span><span class="nt">></span> <span class="nt"><el</span> <span class="na">id=</span><span class="s">"name"</span><span class="nt">></span>New name<span class="nt"></el></span> <span class="nt"><el</span> <span class="na">id=</span><span class="s">"dscr"</span><span class="nt">></span>New description<span class="nt"></el></span> <span class="nt"></set></span> </pre></div> <dl><dd><b><u>Getting for values of the visual attributes of the widget branch, optimised for the networks</u></b><br /></dd> <dd>REQ: <i><get path="/UI/VCAEngine/<b>{wAddr}</b>/%2fserv%2fattrBr" /></i> <ul><li> <i>wAddr</i> — the widget local address in the module, like to "/wlb_AGLKS/wdg_CM101/wdg_ElFigure1".</li></ul></dd> <dd>RESP: <i><get path="/UI/VCAEngine/{wAddr}/%2fserv%2fattrBr" rez="<b>0</b>"><b>{attributes}</b> <b>{widgets}</b></get></i> <ul><li> <i>attributes</i> — processed attributes in the tags "el": <i><el id="<b>{ID}</b>" p="<b>{pos}</b>"><b>{value}</b></el></i> <ul><li> <i>ID</i> — identifier of the attribute;</li> <li> <i>pos</i> — position-index of the attribute for the standard ones;</li> <li> <i>value</i> — value of the attribute.</li></ul></li> <li> <i>widgets</i> — child widgets in the tags "w": <i><w id="<b>{ID}</b>" lnkPath="<b>{lnkPath}</b>"><b>{attributes}</b> <b>{widgets}</b></w></i> <ul><li> <i>ID</i> — identifier of the widget;</li> <li> <i>lnkPath</i> — path to the linked widget for child widgets of the widget libraries.</li></ul></li></ul></dd></dl> <div class="mw-highlight mw-content-ltr" dir="ltr" style="margin-left: 20pt"><pre><span class="nt"><get</span> <span class="na">path=</span><span class="s">"/UI/VCAEngine/wlb_AGLKS/wdg_CM101/%2fserv%2fattrBr"</span> <span class="na">rez=</span><span class="s">"0"</span> <span class="na">user=</span><span class="s">"roman"</span><span class="nt">></span> <span class="nt"><el</span> <span class="na">id=</span><span class="s">"id"</span><span class="nt">></span>CM101<span class="nt"></el></span> <span class="nt"><el</span> <span class="na">id=</span><span class="s">"path"</span><span class="nt">></span>/wlb_AGLKS/wdg_CM101<span class="nt"></el></span> <span class="nt"><el</span> <span class="na">id=</span><span class="s">"parent"</span><span class="nt">></span>/wlb_originals/wdg_Box<span class="nt"></el></span> <span class="nt"><el</span> <span class="na">id=</span><span class="s">"owner"</span><span class="nt">></span>root:UI<span class="nt"></el></span> <span class="nt"><el</span> <span class="na">id=</span><span class="s">"perm"</span><span class="nt">></span>948<span class="nt"></el></span> <span class="nt"><el</span> <span class="na">id=</span><span class="s">"root"</span> <span class="na">p=</span><span class="s">"1"</span><span class="nt">></span>Box<span class="nt"></el></span> <span class="nt"><el</span> <span class="na">id=</span><span class="s">"name"</span><span class="nt">></span>CM101<span class="nt"></el></span> <span class="nt"><w</span> <span class="na">id=</span><span class="s">"AT101_1"</span> <span class="na">lnkPath=</span><span class="s">"/wlb_mnEls/wdg_cooler"</span><span class="nt">></span> <span class="nt"><el</span> <span class="na">id=</span><span class="s">"id"</span><span class="nt">></span>AT101_1<span class="nt"></el></span> <span class="nt"><el</span> <span class="na">id=</span><span class="s">"path"</span><span class="nt">></span>/wlb_AGLKS/wdg_CM101/wdg_AT101_1<span class="nt"></el></span> <span class="nt"><el</span> <span class="na">id=</span><span class="s">"parent"</span><span class="nt">></span>/wlb_mnEls/wdg_cooler<span class="nt"></el></span> <span class="nt"><el</span> <span class="na">id=</span><span class="s">"owner"</span><span class="nt">></span>root:UI<span class="nt"></el></span> <span class="nt"><el</span> <span class="na">id=</span><span class="s">"perm"</span><span class="nt">></span>948<span class="nt"></el></span> <span class="nt"><el</span> <span class="na">id=</span><span class="s">"root"</span> <span class="na">p=</span><span class="s">"1"</span><span class="nt">></span>ElFigure<span class="nt"></el></span> <span class="nt"><el</span> <span class="na">id=</span><span class="s">"name"</span><span class="nt">></span>ÐТ101 1<span class="nt"></el></span> <span class="nt"></w></span> <span class="nt"></get></span> </pre></div> <p><b><u>The widget libraries</u></b><br /> </p> <dl><dd><b><u>Obtaining the widget libraries' tree, optimised for the networks</u></b><br /></dd> <dd>REQ: <i><get path="/UI/VCAEngine/%2fserv%2fwlbBr" item="<b>{item}</b>" disIconsW="<b>{disIconsW}</b>" disIconsCW="<b>{disIconsCW}</b>" /></i> <ul><li> <i>item</i> — the library item for obtaining, as the path "wlb_<b>{WLib}</b>[/wdg_<b>{Wdg}</b>[/wdg_<b>{ChildWdg}</b>]]", for empty there will be obtained all the tree;</li> <li> <i>disIconsW</i> — disable for obtaining the icon data of the widgets [0|1];</li> <li> <i>disIconsCW</i> — disable for obtaining the icon data of the child widgets [0|1].</li></ul></dd> <dd>RESP: <i><get path="/UI/VCAEngine/%2fserv%2fwlbBr" item="{item}" disIconsW="{disIconsW}" disIconsCW="{disIconsCW}" rez="<b>0</b>"><b>{wlibs}</b></get></i> <ul><li> <i>wlibs</i> — the widget libraries in the "wlb" tags: <i><wlb id="{ID}" doc="{doc}">{name} <b>{icon}</b> <b>{widgets}</b></wlb></i> <ul><li> <i>icon</i> — the "icon" tag with the Base64 encoded data of the icon;</li> <li> <i>widgets</i> — the "w" tags with the library widgets description: <i><w id="{ID}" doc="{doc}" parent="<b>{parent}</b>">{name} {icon} <b>{widgets}</b></w></i> <ul><li> <i>parent</i> — address of the widget parent;</li> <li> <i>widgets</i> — the "Ñw" tags with the child widgets description: <i><cw id="{ID}" doc="{doc}">{name} {icon}</cw></i></li></ul></li></ul></li></ul></dd></dl> <div class="mw-highlight mw-content-ltr" dir="ltr" style="margin-left: 20pt"><pre><span class="nt"><get</span> <span class="na">disIconsCW=</span><span class="s">"1"</span> <span class="na">disIconsW=</span><span class="s">"1"</span> <span class="na">item=</span><span class="s">"/wlb_AGLKS"</span> <span class="na">path=</span><span class="s">"/UI/VCAEngine/%2fserv%2fwlbBr"</span> <span class="na">rez=</span><span class="s">"0"</span> <span class="na">user=</span><span class="s">"roman"</span><span class="nt">></span> <span class="nt"><wlb</span> <span class="na">id=</span><span class="s">"AGLKS"</span><span class="nt">></span>AGLKS <span class="nt"><ico></span>iVBORw0KGgoAA...U5ErkJggg==<span class="nt"></ico></span> <span class="nt"><w</span> <span class="na">id=</span><span class="s">"CM101"</span> <span class="na">parent=</span><span class="s">"/wlb_originals/wdg_Box"</span><span class="nt">></span>CM101 <span class="nt"><cw</span> <span class="na">id=</span><span class="s">"AT101_1"</span><span class="nt">></span>ÐТ101 1<span class="nt"></cw></span> <span class="nt"><cw</span> <span class="na">id=</span><span class="s">"AT101_2"</span><span class="nt">></span>ÐТ101 1<span class="nt"></cw></span> <span class="nt"><cw</span> <span class="na">id=</span><span class="s">"C101_1"</span><span class="nt">></span>C101/1<span class="nt"></cw></span> <span class="nt"><cw</span> <span class="na">id=</span><span class="s">"C101_2"</span><span class="nt">></span>C101/1<span class="nt"></cw></span> <span class="nt"><cw</span> <span class="na">id=</span><span class="s">"C101_3"</span><span class="nt">></span>C101/1<span class="nt"></cw></span> <span class="nt"><cw</span> <span class="na">id=</span><span class="s">"CM101"</span><span class="nt">></span>CM101<span class="nt"></cw></span> <span class="nt"><cw</span> <span class="na">id=</span><span class="s">"CM101_1"</span><span class="nt">></span>CM101_1<span class="nt"></cw></span> <span class="nt"><cw</span> <span class="na">id=</span><span class="s">"CM101_2"</span><span class="nt">></span>CM101_2<span class="nt"></cw></span> <span class="nt"><cw</span> <span class="na">id=</span><span class="s">"ElFigure1"</span><span class="nt">></span>ElFigure1<span class="nt"></cw></span> <span class="nt"><cw</span> <span class="na">id=</span><span class="s">"ElFigure2"</span><span class="nt">></span>ElFigure2<span class="nt"></cw></span> <span class="nt"><cw</span> <span class="na">id=</span><span class="s">"ElFigure3"</span><span class="nt">></span>ElFigure3<span class="nt"></cw></span> <span class="nt"><cw</span> <span class="na">id=</span><span class="s">"ElFigure4"</span><span class="nt">></span>ElFigure4<span class="nt"></cw></span> <span class="nt"><cw</span> <span class="na">id=</span><span class="s">"ElFigure5"</span><span class="nt">></span>ElFigure5<span class="nt"></cw></span> <span class="nt"><cw</span> <span class="na">id=</span><span class="s">"ElFigure6"</span><span class="nt">></span>ElFigure6<span class="nt"></cw></span> <span class="nt"><cw</span> <span class="na">id=</span><span class="s">"ElFigure7"</span><span class="nt">></span>ElFigure7<span class="nt"></cw></span> <span class="nt"></w></span> <span class="nt"><w</span> <span class="na">id=</span><span class="s">"KCH_MN1"</span> <span class="na">parent=</span><span class="s">"/wlb_originals/wdg_Box"</span><span class="nt">></span>KCH_MN1 <span class="nt"><cw</span> <span class="na">id=</span><span class="s">"BC1"</span><span class="nt">></span>Ball crane<span class="nt"></cw></span> <span class="nt"><cw</span> <span class="na">id=</span><span class="s">"BC2"</span><span class="nt">></span>Ball crane<span class="nt"></cw></span> <span class="nt"><cw</span> <span class="na">id=</span><span class="s">"BC21"</span><span class="nt">></span>Ball crane<span class="nt"></cw></span> <span class="nt"><cw</span> <span class="na">id=</span><span class="s">"BC22"</span><span class="nt">></span>Ball crane<span class="nt"></cw></span> <span class="nt"></w></span> <span class="nt"><w</span> <span class="na">id=</span><span class="s">"comprEn"</span> <span class="na">parent=</span><span class="s">"/wlb_originals/wdg_ElFigure"</span><span class="nt">></span>Compressor run<span class="nt"></w></span> <span class="nt"></wlb></span> <span class="nt"></get></span> </pre></div> <p><b><u>The VCA projects</u></b><br /> </p> <dl><dd><b><u>Obtaining the project list expanded by some options</u></b><br /></dd> <dd>REQ: <i><get path="/UI/VCAEngine/[%2fbr%2fprj_|%2fprm%2fcfg%2fprj]" chkUserPerm="<b>{chkUserPerm}</b>" getChPgN="<b>{getChPgN}</b>" noName="<b>{noName}</b>" /></i> <ul><li> <i>chkUserPerm</i> — checking for the user permition before listing [0|1];</li> <li> <i>getChPgN</i> — requesting for quantity of the child pages in the projects [0|1];</li> <li> <i>noName</i> — do not return for names of the pages [0|1].</li></ul></dd> <dd>RESP: <i><get path="/UI/VCAEngine/[%2fbr%2fprj_|%2fprm%2fcfg%2fprj]" chkUserPerm="{chkUserPerm}" getChPgN="{getChPgN}" noName="{noName}" rez="<b>0</b>"><b>{projects}</b></get></i> <ul><li> <i>projects</i> — projects list in the tags "el", where the name is in the tag text and the identifier in the attribute "id". Expanded by the extra attributes: <ul><li> "chPgN" — quantity of the child pages in the project at setting "getChPgN".</li></ul></li></ul></dd></dl> <div class="mw-highlight mw-content-ltr" dir="ltr" style="margin-left: 20pt"><pre><span class="nt"><get</span> <span class="na">getChPgN=</span><span class="s">"1"</span> <span class="na">path=</span><span class="s">"/UI/VCAEngine/%2fbr%2fprj_"</span> <span class="na">rez=</span><span class="s">"0"</span> <span class="na">user=</span><span class="s">"roman"</span><span class="nt">></span> <span class="nt"><el</span> <span class="na">chPgN=</span><span class="s">"2"</span> <span class="na">id=</span><span class="s">"AGLKS"</span><span class="nt">></span>AGLKS<span class="nt"></el></span> <span class="nt"><el</span> <span class="na">chPgN=</span><span class="s">"2"</span> <span class="na">id=</span><span class="s">"archBrowser"</span><span class="nt">></span>Archives browser<span class="nt"></el></span> <span class="nt"><el</span> <span class="na">chPgN=</span><span class="s">"2"</span> <span class="na">id=</span><span class="s">"tmplSO"</span><span class="nt">></span>Signal groups (template)<span class="nt"></el></span> <span class="nt"></get></span> </pre></div> <dl><dd><b><u>Checking for read access to the project from the user of the request</u></b><br /></dd> <dd>REQ: <i><read path="/UI/VCAEngine/prj_<b>{proj}</b>/%2fserv%2faccess" /></i> <ul><li> <i>proj</i> — identifier of the project.</li></ul></dd> <dd>RESP: <i><read path="/UI/VCAEngine/prj_{proj}/%2fserv%2faccess" rez="<b>0</b>"><b>{access}</b></get></i> <ul><li> <i>access</i> — the access presence status [0|1].</li></ul></dd></dl> <div class="mw-highlight mw-content-ltr" dir="ltr" style="margin-left: 20pt"><pre><span class="nt"><read</span> <span class="na">path=</span><span class="s">"/UI/VCAEngine/prj_AGLKS/%2fserv%2faccess"</span> <span class="na">rez=</span><span class="s">"0"</span> <span class="na">user=</span><span class="s">"roman"</span><span class="nt">></span>1<span class="nt"></read></span> </pre></div> <p><b><u>The project sessions</u></b><br /> </p> <dl><dd><b><u>Obtaining the session list expanded by some options</u></b><br /></dd> <dd>REQ: <i><get path="/UI/VCAEngine/[%2fbr%2fses_|%2fses%2fses]" chkUserPerm="<b>{chkUserPerm}</b>" onlyMy="<b>{onlyMy}</b>" /></i> <ul><li> <i>chkUserPerm</i> — checking for the user permition before listing [0|1];</li> <li> <i>onlyMy</i> — listening only my own sessions [0|1].</li></ul></dd> <dd>RESP: <i><get path="/UI/VCAEngine/[%2fbr%2fses_|%2fses%2fses]" chkUserPerm="{chkUserPerm}" onlyMy="{onlyMy}" rez="<b>0</b>"><b>{sessions}</b></get></i> <ul><li> <i>sessions</i> — sessions list in the tags "el", where the identifier is in the tag text. Expanded by the extra attributes: <ul><li> "user" — user of the session;</li> <li> "proj" — project of the session.</li></ul></li></ul></dd></dl> <div class="mw-highlight mw-content-ltr" dir="ltr" style="margin-left: 20pt"><pre><span class="nt"><get</span> <span class="na">path=</span><span class="s">"/UI/VCAEngine/%2fses%2fses"</span> <span class="na">rez=</span><span class="s">"0"</span> <span class="na">onlyMy=</span><span class="s">"1"</span> <span class="na">user=</span><span class="s">"roman"</span><span class="nt">></span> <span class="nt"><el</span> <span class="na">user=</span><span class="s">"roman"</span> <span class="na">proj=</span><span class="s">"AGLKS"</span><span class="nt">></span>AGLKS<span class="nt"></el></span> <span class="nt"><el</span> <span class="na">user=</span><span class="s">"roman"</span> <span class="na">proj=</span><span class="s">"AGLKS"</span><span class="nt">></span>AGLKS0<span class="nt"></el></span> <span class="nt"></get></span> </pre></div> <dl><dd><b><u>Obtaining the sessions list of the specified VCA project</u></b><br /></dd> <dd>REQ: <i><list path="/UI/VCAEngine/%2fserv%2fsess" prj="<b>{project}</b>" /></i> <ul><li> <i>project</i> — identifier of the requested project.</li></ul></dd> <dd>RESP: <i><list path="/UI/VCAEngine/%2fserv%2fsess" prj="{project}" rez="<b>0</b>"><b>{sessions}</b></list></i> <ul><li> <i>sessions</i> — sessions in the "el" tags.</li></ul></dd></dl> <div class="mw-highlight mw-content-ltr" dir="ltr" style="margin-left: 20pt"><pre><span class="nt"><list</span> <span class="na">path=</span><span class="s">"/UI/VCAEngine/%2fserv%2fsess"</span> <span class="na">prj=</span><span class="s">"AGLKS"</span> <span class="na">rez=</span><span class="s">"0"</span> <span class="na">user=</span><span class="s">"roman"</span><span class="nt">></span> <span class="nt"><el></span>AGLKS<span class="nt"></el></span> <span class="nt"></list></span> </pre></div> <dl><dd><b><u>Connection to the specified VCA project or the project session</u></b><br /></dd> <dd>REQ: <i><connect path="/UI/VCAEngine/%2fserv%2fsess" prj="<b>{project}</b>" sess="<b>{session}</b>" userChange="<b>{userChange}</b>" onlyMy="<b>{onlyMy}</b>" /></i> <ul><li> <i>project</i> — identifier of the requested project, empty for connection to the available session;</li> <li> <i>session</i> — identifier of the already present session, empty at a new session creation;</li> <li> <i>onlyMy</i> — sign of connection-reconnection to the session only when it is my;</li> <li> <i>userChange</i> — sign of the user changing [0|1] of the session, that is updation the user information.</li></ul></dd> <dd>RESP: <i><connect path="/UI/VCAEngine/%2fserv%2fsess" prj="<b>{project}</b>" sess="<b>{session}</b>" userChange="{userChange}" onlyMy="{onlyMy}" rez="<b>0</b>" conId="<b>{conId}</b>" userIsRoot="<b>{userIsRoot}</b>" /></i> <ul><li> <i>conId</i> — the session connection identifier, used in next requests;</li> <li> <i>project</i> — the project identifier of the successfully connected session;</li> <li> <i>session</i> — identifier of the new created session of the successfully connected project;</li> <li> <i>userIsRoot</i> — the user has the root permition [0|1].</li></ul></dd></dl> <div class="mw-highlight mw-content-ltr" dir="ltr" style="margin-left: 20pt"><pre><span class="nt"><connect</span> <span class="na">conId=</span><span class="s">"50860885"</span> <span class="na">path=</span><span class="s">"/UI/VCAEngine/%2fserv%2fsess"</span> <span class="na">prj=</span><span class="s">"AGLKS"</span> <span class="na">rez=</span><span class="s">"0"</span> <span class="na">sess=</span><span class="s">"AGLKS"</span> <span class="na">user=</span><span class="s">"roman"</span> <span class="na">userIsRoot=</span><span class="s">"1"</span> <span class="nt">/></span> </pre></div> <dl><dd><b><u>Disconnection the specified VCA project session</u></b><br /></dd> <dd>Sessions with zero connections are closed here also.<br /></dd> <dd>REQ: <i><disconnect path="/UI/VCAEngine/%2fserv%2fsess" sess="<b>{session}</b>" conId="<b>{conId}</b>" /></i> <ul><li> <i>session</i> — identifier of the present session;</li> <li> <i>conId</i> — the session connection identifier.</li></ul></dd></dl> <div class="mw-highlight mw-content-ltr" dir="ltr" style="margin-left: 20pt"><pre><span class="nt"><disconnect</span> <span class="na">path=</span><span class="s">"/UI/VCAEngine/%2fserv%2fsess"</span> <span class="na">sess=</span><span class="s">"AGLKS"</span> <span class="na">conId=</span><span class="s">"50860885"</span> <span class="nt">/></span> </pre></div> <dl><dd><b><u>Getting for the opened pages list of the project session</u></b><br /></dd> <dd>REQ[<b>{owner}-{grp}</b>]: <i><openlist path="/UI/VCAEngine/ses_<b>{session}</b>/%2fserv%2fpg" conId="<b>{conId}</b>" tm="<b>{clock}</b>" /></i> <ul><li> <i>owner</i>, <i>grp</i> — reading access for the project owner or a user in group and regarding to the project permissions;</li> <li> <i>session</i> — identifier of the session;</li> <li> <i>conId</i> — the session connection identifier;</li> <li> <i>clock</i> — the internal clock (the live cycle) value from the previous processed request, for checking of the changed ones.</li></ul></dd> <dd>RESP: <i><openlist path="/UI/VCAEngine/ses_{session}/%2fserv%2fpg" conId="{conId}" tm="<b>{clock}</b>" rez="<b>0</b>"><b>{pages}</b></openlist></i> <ul><li> <i>clock</i> — the internal clock (the live cycle) value - 1 at the request time;</li> <li> <i>pages</i> — pages in the tags "pg": <i><pg pgGrp="<b>{pgGrp}</b>" updWdg="<b>{nUpdWdgs}</b>"><b>{ID}</b></pg></i> <ul><li> <i>ID</i> — identifier of the page;</li> <li> <i>pgGrp</i> — the pages group for early calculation the page including;</li> <li> <i>nUpdWdgs</i> — quantity of the updated widgets after the last request and for not empty "clock".</li></ul></li></ul></dd></dl> <div class="mw-highlight mw-content-ltr" dir="ltr" style="margin-left: 20pt"><pre><span class="nt"><openlist</span> <span class="na">conId=</span><span class="s">"52760577"</span> <span class="na">path=</span><span class="s">"/UI/VCAEngine/ses_AGLKS/%2fserv%2fpg"</span> <span class="na">rez=</span><span class="s">"0"</span> <span class="na">tm=</span><span class="s">"1403"</span> <span class="na">user=</span><span class="s">"roman"</span><span class="nt">></span> <span class="nt"><pg></span>/ses_AGLKS/pg_so<span class="nt"></pg></span> <span class="nt"><pg</span> <span class="na">pgGrp=</span><span class="s">"so"</span><span class="nt">></span>/ses_AGLKS/pg_so/pg_1/pg_mn/pg_1<span class="nt"></pg></span> <span class="nt"><pg</span> <span class="na">pgGrp=</span><span class="s">"cntr"</span><span class="nt">></span>/ses_AGLKS/pg_control/pg_ElCadr<span class="nt"></pg></span> <span class="nt"></openlist></span> </pre></div> <dl><dd><b><u>Opening or closing for the specified page of the project session</u></b><br /></dd> <dd>REQ[<b>{owner}-{grp}</b>]: <i><[open|close] path="/UI/VCAEngine/ses_<b>{session}</b>/%2fserv%2fpg" pg="<b>{page}</b>" /></i> <ul><li> <i>owner</i>, <i>grp</i> — writing access for the project owner or a user in group and regarding to the project permissions;</li> <li> <i>session</i> — identifier of the session;</li> <li> <i>page</i> — address of the page in the session context, like to "/ses_AGLKS/pg_so/pg_1/pg_mn/pg_1".</li></ul></dd></dl> <dl><dd><b><u>Getting for the alarm status and the notification resource of the project session</u></b><br /></dd> <dd>REQ[<b>{owner}-{grp}</b>]: <i><get path="/UI/VCAEngine/ses_<b>{session}</b>/%2fserv%2falarm" mode="<b>{mode}</b>" tp="<b>{typeNtf}</b>" wdg="<b>{widget}</b>" /></i> <ul><li> <i>owner</i>, <i>grp</i> — reading access for the project owner or a user in group and regarding to the project permissions;</li> <li> <i>session</i> — identifier of the session;</li> <li> <i>mode</i> — the requesting mode, only "resource" for obtaining the notification resources and empty for the status only;</li> <li> <i>typeNtf</i> — the notification type of obtaining the notification resource, see the <a href="#Alarms">alarming section</a>;</li> <li> <i>widget</i> — address of the widget for forming the notification resource, empty for global.</li></ul></dd> <dd>RESP: <i><get path="/UI/VCAEngine/ses_{session}/%2fserv%2falarm" mode="{mode}" tp="{typeNtf}" rez="<b>0</b>" alarmSt="<b>{alarmSt}</b>" tm="<b>{clock}</b>" wdg="<b>{widget}</b>" resTp="<b>{resTp}</b>" mess="<b>{message}</b>" lang="<b>{language}</b>"><b>{resource}</b></get></i> <ul><li> <i>alarmSt</i> — the alarm status as that described in the <a href="#Alarms">alarming section</a>;</li> <li> <i>clock</i> — the internal clock (the live cycle) value at the notification resource form;</li> <li> <i>widget</i> — address of the source widget at the notification resource form;</li> <li> <i>message</i> — message of notification from the text;</li> <li> <i>language</i> — language of the notification, for the "message" mostly;</li> <li> <i>resTp</i> — type of the notification resource;</li> <li> <i>resource</i> — resource of the notification encoded by Base64 for the binary data.</li></ul></dd></dl> <div class="mw-highlight mw-content-ltr" dir="ltr" style="margin-left: 20pt"><pre><span class="nt"><get</span> <span class="na">path=</span><span class="s">"/UI/VCAEngine/ses_AGLKS/%2fserv%2falarm"</span> <span class="na">mode=</span><span class="s">"resource"</span> <span class="na">tp=</span><span class="s">"1"</span> <span class="na">rez=</span><span class="s">"0"</span> <span class="na">user=</span><span class="s">"roman"</span> <span class="na">alarmSt=</span><span class="s">"460554"</span> <span class="na">tm=</span><span class="s">"0"</span> <span class="na">resTp=</span><span class="s">"audio/ogg;73.3428"</span> <span class="na">lang=</span><span class="s">"en_US.UTF-8"</span><span class="nt">></span> T2dnUwACA...Dg6gwAjo+PAQ== <span class="nt"></get></span> </pre></div> <dl><dd><b><u>Quietance of the alarm notification of the project session</u></b><br /></dd> <dd>REQ[<b>{owner}-{grp}</b>]: <i><quietance path="/UI/VCAEngine/ses_<b>{session}</b>/%2fserv%2falarm" wdg="<b>{widget}</b>" tmpl="<b>{template}</b>" ret="<b>{return}</b>" /></i> <ul><li> <i>owner</i>, <i>grp</i> — reading access for the project owner or a user in group and regarding to the project permissions;</li> <li> <i>session</i> — identifier of the session;</li> <li> <i>widget</i> — address of the widget for quietance the notification, empty for global;</li> <li> <i>template</i> — template of the quietance, that is bitset corresponding to the quieting notification types;</li> <li> <i>return</i> — sign of the notification return, that is the quietance disabling.</li></ul></dd></dl> <div class="mw-highlight mw-content-ltr" dir="ltr" style="margin-left: 20pt"><pre><span class="nt"><quietance</span> <span class="na">path=</span><span class="s">"/UI/VCAEngine/ses_AGLKS/%2fserv%2falarm"</span> <span class="na">tmpl=</span><span class="s">"7"</span> <span class="nt">/></span> </pre></div> <dl><dd><b><u>Getting for values of the modified visual attributes of the session widget</u></b><br /></dd> <dd>Redefines the common service request of the widgets "<i><get path='/UI/VCAEngine/{wAddr}/%2fserv%2fattr' /></i>" for the session specific.<br /></dd> <dd>REQ: <i><get path="/UI/VCAEngine/ses_<b>{wAddr}</b>/%2fserv%2fattr" tm="<b>{clock}</b>" /></i> <ul><li> <i>wAddr</i> — the session widget local address, like to "/ses_AGLKS/pg_so/pg_2/pg_mn/pg_CM101/wdg_ElFigure1";</li> <li> <i>clock</i> — the internal clock (the live cycle) value from the previous processed request, for checking of the changed ones; at zero value there force appended the service-virtual attributes: "perm", "name".</li></ul></dd> <dd>RESP: <i><get path="/UI/VCAEngine/ses_{wAddr}/%2fserv%2fattr" tm="{clock}" rez="<b>0</b>"><b>{attributes}</b></get></i> <ul><li> <i>attributes</i> — modified from "clock" attributes in the tags "el": <i><el id="<b>{ID}</b>" p="<b>{pos}</b>"><b>{value}</b></el></i> <ul><li> <i>ID</i> — identifier of the attribute;</li> <li> <i>pos</i> — position-index of the attribute for the standard ones;</li> <li> <i>value</i> — value of the attribute.</li></ul></li></ul></dd></dl> <div class="mw-highlight mw-content-ltr" dir="ltr" style="margin-left: 20pt"><pre><span class="nt"><get</span> <span class="na">path=</span><span class="s">"/UI/VCAEngine/ses_AGLKS/pg_so/pg_2/pg_mn/pg_CM101/wdg_ElFigure1/%2fserv%2fattr"</span> <span class="na">rez=</span><span class="s">"0"</span> <span class="na">tm=</span><span class="s">"0"</span> <span class="na">user=</span><span class="s">"roman"</span><span class="nt">></span> <span class="nt"><el</span> <span class="na">id=</span><span class="s">"perm"</span> <span class="na">p=</span><span class="s">"-3"</span><span class="nt">></span>6<span class="nt"></el></span> <span class="nt"><el</span> <span class="na">id=</span><span class="s">"root"</span> <span class="na">p=</span><span class="s">"1"</span><span class="nt">></span>ElFigure<span class="nt"></el></span> <span class="nt"><el</span> <span class="na">id=</span><span class="s">"en"</span> <span class="na">p=</span><span class="s">"5"</span><span class="nt">></span>1<span class="nt"></el></span> <span class="nt"><el</span> <span class="na">id=</span><span class="s">"active"</span> <span class="na">p=</span><span class="s">"6"</span><span class="nt">></span>0<span class="nt"></el></span> <span class="nt"><el</span> <span class="na">id=</span><span class="s">"geomX"</span> <span class="na">p=</span><span class="s">"7"</span><span class="nt">></span>488<span class="nt"></el></span> <span class="nt"><el</span> <span class="na">id=</span><span class="s">"geomY"</span> <span class="na">p=</span><span class="s">"8"</span><span class="nt">></span>250<span class="nt"></el></span> <span class="nt"><el</span> <span class="na">id=</span><span class="s">"geomW"</span> <span class="na">p=</span><span class="s">"9"</span><span class="nt">></span>16<span class="nt"></el></span> <span class="nt"><el</span> <span class="na">id=</span><span class="s">"geomH"</span> <span class="na">p=</span><span class="s">"10"</span><span class="nt">></span>100<span class="nt"></el></span> <span class="nt"><el</span> <span class="na">id=</span><span class="s">"geomXsc"</span> <span class="na">p=</span><span class="s">"13"</span><span class="nt">></span>1<span class="nt"></el></span> <span class="nt"><el</span> <span class="na">id=</span><span class="s">"geomYsc"</span> <span class="na">p=</span><span class="s">"14"</span><span class="nt">></span>0.75<span class="nt"></el></span> <span class="nt"><el</span> <span class="na">id=</span><span class="s">"geomZ"</span> <span class="na">p=</span><span class="s">"11"</span><span class="nt">></span>-9<span class="nt"></el></span> <span class="nt"></get></span> </pre></div> <dl><dd><b><u>Setting for group values of the specified attributes of the session widget</u></b><br /></dd> <dd>Redefines the common service request of the widgets "<i><set path='/UI/VCAEngine/{wAddr}/%2fserv%2fattr' /></i>" for the session specific like to the "event" attribute processing and detection the user activity-inactivity.<br /></dd> <dd>REQ[<b>{owner}-{grp}</b>]: <i><set path="/UI/VCAEngine/ses_<b>{wAddr}</b>/%2fserv%2fattr" noUser="<b>{noUser}</b>"><b>{attributes}</b></set></i> <ul><li> <i>owner</i>, <i>grp</i> — writing access for the project owner or a user in group and regarding to the project permissions;</li> <li> <i>wAddr</i> — the session widget local address, like to "/ses_AGLKS/pg_so/pg_2/pg_mn/pg_CM101/wdg_ElFigure1";</li> <li> <i>noUser</i> — don't mark that as a user activity;</li> <li> <i>attributes</i> — attributes with values in the tags "el": <i><el id="<b>{ID}</b>"><b>{value}</b></el></i> <ul><li> <i>ID</i> — identifier of the attribute;</li> <li> <i>value</i> — setting value of the attribute.</li></ul></li></ul></dd></dl> <div class="mw-highlight mw-content-ltr" dir="ltr" style="margin-left: 20pt"><pre><span class="nt"><set</span> <span class="na">path=</span><span class="s">"/UI/VCAEngine/ses_AGLKS/pg_so/pg_2/pg_mn/pg_CM101/wdg_ElFigure1/%2fserv%2fattr"</span><span class="nt">></span> <span class="nt"><el</span> <span class="na">id=</span><span class="s">"name"</span><span class="nt">></span>New name<span class="nt"></el></span> <span class="nt"><el</span> <span class="na">id=</span><span class="s">"dscr"</span><span class="nt">></span>New description<span class="nt"></el></span> <span class="nt"></set></span> </pre></div> <dl><dd><b><u>Activating the attribute for using as the visual one and creating that at missing</u></b><br /></dd> <dd>REQ: <i><activate path="/UI/VCAEngine/ses_<b>{wAddr}</b>/%2fserv%2fattr%2f<b>{aID}</b>" aNm="<b>{aName}</b>" aTp="<b>{aType}</b>" aFlg="<b>{aFlags}</b>" aVls="<b>{aValues}</b>" aNms="<b>{aNames}</b>"><b>{aDef}</b></activate></i> <ul><li> <i>wAddr</i> — the session widget local address, like to "/ses_AGLKS/pg_so/pg_2/pg_mn/pg_CM101/wdg_ElFigure1";</li> <li> <i>aID</i> — identifier of the attribute;</li> <li> <i>aName</i> — name of the attribute at it creation;</li> <li> <i>aType</i> — type of the attribute at it creation, see to the <a href="../../en/API.html#TFld" title="Special:MyLanguage/Documents/API">object TFld</a>;</li> <li> <i>aFlags</i> — flags of the attribute at it creation, see to the <a href="../../en/API.html#TFld" title="Special:MyLanguage/Documents/API">object TFld</a>;</li> <li> <i>aDef</i> — default value of the attribute at it creation;</li> <li> <i>aValues</i> — the attribute values for the selective types at it creation;</li> <li> <i>aNames</i> — names to values of the attribute for the selective types at it creation.</li></ul></dd></dl> <div class="mw-highlight mw-content-ltr" dir="ltr" style="margin-left: 20pt"><pre><span class="nt"><activate</span> <span class="na">path=</span><span class="s">"/UI/VCAEngine/ses_AGLKS/pg_so/%2fserv%2fattr%2frunWin"</span> <span class="na">aNm=</span><span class="s">"Run window"</span> <span class="na">aTp=</span><span class="s">"1"</span> <span class="na">aFlg=</span><span class="s">"1"</span> <span class="na">aVls=</span><span class="s">"0;1;2"</span> <span class="na">aNms=</span><span class="s">"Original size;Maximize;Full screen"</span><span class="nt">></span>0<span class="nt"></activate></span> </pre></div> <dl><dd><b><u>Getting for values of the visual attributes of the widget branch of the session, optimised for the networks</u></b><br /></dd> <dd>Redefines the common service request of the widgets "<i><get path='/UI/VCAEngine/{wAddr}/%2fserv%2fattrBr' /></i>" for the session specific.<br /></dd> <dd>REQ: <i><get path="/UI/VCAEngine/ses_<b>{wAddr}</b>/%2fserv%2fattrBr" tm="<b>{clock}</b>" FullTree="<b>{FullTree}</b>" /></i> <ul><li> <i>wAddr</i> — the session widget local address, like to "/ses_AGLKS/pg_so/pg_2/pg_mn/pg_CM101/wdg_ElFigure1";</li> <li> <i>clock</i> — the internal clock (the live cycle) value from the previous processed request, for checking of the changed ones; at zero value there force appended the service-virtual attributes: "perm", "name";</li> <li> <i>fullTree</i> — obtaining the full widgets tree independent from presence the changes, without the attributes.</li></ul></dd> <dd>RESP: <i><get path="/UI/VCAEngine/ses_{wAddr}/%2fserv%2fattrBr" tm="{clock}" FullTree="{FullTree}" rez="<b>0</b>"><b>{attributes}</b> <b>{widgets}</b></get></i> <ul><li> <i>attributes</i> — processed attributes in the tags "el": <i><el id="<b>{ID}</b>" p="<b>{pos}</b>"><b>{value}</b></el></i> <ul><li> <i>ID</i> — identifier of the attribute;</li> <li> <i>pos</i> — position-index of the attribute for the standard ones;</li> <li> <i>value</i> — value of the attribute.</li></ul></li> <li> <i>widgets</i> — child widgets in the tags "w": <i><w id="<b>{ID}</b>"><b>{attributes}</b> <b>{widgets}</b></w></i> <ul><li> <i>ID</i> — identifier of the widget.</li></ul></li></ul></dd></dl> <div class="mw-highlight mw-content-ltr" dir="ltr" style="margin-left: 20pt"><pre><span class="nt"><get</span> <span class="na">path=</span><span class="s">"/UI/VCAEngine/ses_AGLKS/pg_so/pg_2/pg_mn/pg_CM101/%2fserv%2fattrBr"</span> <span class="na">rez=</span><span class="s">"0"</span> <span class="na">tm=</span><span class="s">"0"</span> <span class="na">user=</span><span class="s">"roman"</span><span class="nt">></span> <span class="nt"><el</span> <span class="na">id=</span><span class="s">"name"</span> <span class="na">p=</span><span class="s">"-4"</span><span class="nt">></span>CM101<span class="nt"></el></span> <span class="nt"><el</span> <span class="na">id=</span><span class="s">"perm"</span> <span class="na">p=</span><span class="s">"-3"</span><span class="nt">></span>6<span class="nt"></el></span> <span class="nt"><el</span> <span class="na">id=</span><span class="s">"root"</span> <span class="na">p=</span><span class="s">"1"</span><span class="nt">></span>Box<span class="nt"></el></span> <span class="nt"><el</span> <span class="na">id=</span><span class="s">"en"</span> <span class="na">p=</span><span class="s">"5"</span><span class="nt">></span>1<span class="nt"></el></span> <span class="nt"><el</span> <span class="na">id=</span><span class="s">"active"</span> <span class="na">p=</span><span class="s">"6"</span><span class="nt">></span>0<span class="nt"></el></span> <span class="nt"><el</span> <span class="na">id=</span><span class="s">"geomX"</span> <span class="na">p=</span><span class="s">"7"</span><span class="nt">></span>0<span class="nt"></el></span> <span class="nt"><el</span> <span class="na">id=</span><span class="s">"geomY"</span> <span class="na">p=</span><span class="s">"8"</span><span class="nt">></span>0<span class="nt"></el></span> <span class="nt"><el</span> <span class="na">id=</span><span class="s">"geomW"</span> <span class="na">p=</span><span class="s">"9"</span><span class="nt">></span>900<span class="nt"></el></span> <span class="nt"><el</span> <span class="na">id=</span><span class="s">"geomH"</span> <span class="na">p=</span><span class="s">"10"</span><span class="nt">></span>580<span class="nt"></el></span> <span class="nt"><w</span> <span class="na">id=</span><span class="s">"AT101_1"</span><span class="nt">></span> <span class="nt"><el</span> <span class="na">id=</span><span class="s">"perm"</span> <span class="na">p=</span><span class="s">"-3"</span><span class="nt">></span>6<span class="nt"></el></span> <span class="nt"><el</span> <span class="na">id=</span><span class="s">"root"</span> <span class="na">p=</span><span class="s">"1"</span><span class="nt">></span>ElFigure<span class="nt"></el></span> <span class="nt"><el</span> <span class="na">id=</span><span class="s">"en"</span> <span class="na">p=</span><span class="s">"5"</span><span class="nt">></span>1<span class="nt"></el></span> <span class="nt"><el</span> <span class="na">id=</span><span class="s">"active"</span> <span class="na">p=</span><span class="s">"6"</span><span class="nt">></span>0<span class="nt"></el></span> <span class="nt"><el</span> <span class="na">id=</span><span class="s">"geomX"</span> <span class="na">p=</span><span class="s">"7"</span><span class="nt">></span>338<span class="nt"></el></span> <span class="nt"><el</span> <span class="na">id=</span><span class="s">"geomY"</span> <span class="na">p=</span><span class="s">"8"</span><span class="nt">></span>320<span class="nt"></el></span> <span class="nt"><el</span> <span class="na">id=</span><span class="s">"geomW"</span> <span class="na">p=</span><span class="s">"9"</span><span class="nt">></span>80<span class="nt"></el></span> <span class="nt"><el</span> <span class="na">id=</span><span class="s">"geomH"</span> <span class="na">p=</span><span class="s">"10"</span><span class="nt">></span>100<span class="nt"></el></span> <span class="nt"></w></span> <span class="nt"></get></span> </pre></div> <dl><dd><b><u>Getting for value of the session specific attribute of the session widget</u></b><br /></dd> <dd>REQ: <i><get path="/UI/VCAEngine/ses_<b>{wAddr}</b>/%2fserv%2fattrSess%2f<b>{aID}</b>" /></i> <ul><li> <i>wAddr</i> — the session widget local address, like to "/ses_AGLKS/pg_so/pg_2/pg_mn/pg_CM101/wdg_ElFigure1";</li> <li> <i>aID</i> — identifier of the session specific attribute.</li></ul></dd> <dd>RESP: <i><get path="/UI/VCAEngine/ses_{wAddr}/%2fserv%2fattrSess%2f{aID}" rez="<b>0</b>"><b>{value}</b></get></i> <ul><li> <i>value</i> — value of the attribute.</li></ul></dd></dl> <div class="mw-highlight mw-content-ltr" dir="ltr" style="margin-left: 20pt"><pre><span class="nt"><get</span> <span class="na">path=</span><span class="s">"/UI/VCAEngine/ses_AGLKS/pg_so/pg_2/pg_mn/pg_CM101/%2fserv%2fattrSess%2ftestA"</span> <span class="na">rez=</span><span class="s">"0"</span> <span class="na">user=</span><span class="s">"roman"</span><span class="nt">></span>test val<span class="nt"></get></span> </pre></div> <dl><dd><b><u>Setting for value of the session specific attribute of the session widget</u></b><br /></dd> <dd>REQ[<b>{owner}-{grp}</b>]: <i><set path="/UI/VCAEngine/ses_<b>{wAddr}</b>/%2fserv%2fattrSess%2f<b>{aID}</b>"><b>{value}</b></get></i> <ul><li> <i>owner</i>, <i>grp</i> — writing access for the project owner or a user in group and regarding to the project permissions;</li> <li> <i>wAddr</i> — the session widget local address, like to "/ses_AGLKS/pg_so/pg_2/pg_mn/pg_CM101/wdg_ElFigure1";</li> <li> <i>aID</i> — identifier of the session specific attribute;</li> <li> <i>value</i> — value of the attribute.</li></ul></dd></dl> <div class="mw-highlight mw-content-ltr" dir="ltr" style="margin-left: 20pt"><pre><span class="nt"><set</span> <span class="na">path=</span><span class="s">"/UI/VCAEngine/ses_AGLKS/pg_so/pg_2/pg_mn/pg_CM101/%2fserv%2fattrSess%2ftestA"</span><span class="nt">></span>test val<span class="nt"></set></span> </pre></div> <p><br /> </p> <h2><span class="mw-headline" id=".D0.9A.D0.BE.D0.BD.D1.84.D0.B8.D0.B3.D1.83.D1.80.D0.B0.D1.86.D0.B8.D1.8F_.D0.BC.D0.BE.D0.B4.D1.83.D0.BB.D1.8F_.D0.BF.D0.BE.D1.81.D1.80.D0.B5.D0.B4.D1.81.D1.82.D0.B2.D0.BE.D0.BC_.D0.B8.D0.BD.D1.82.D0.B5.D1.80.D1.84.D0.B5.D0.B9.D1.81.D0.B0_.D1.83.D0.BF.D1.80.D0.B0.D0.B2.D0.BB.D0.B5.D0.BD.D0.B8.D1.8F_OpenSCADA"><span class="mw-headline-number">4</span> ÐšÐ¾Ð½Ñ„Ð¸Ð³ÑƒÑ€Ð°Ñ†Ð¸Ñ Ð¼Ð¾Ð´ÑƒÐ»Ñ Ð¿Ð¾ÑредÑтвом интерфейÑа ÑƒÐ¿Ñ€Ð°Ð²Ð»ÐµÐ½Ð¸Ñ OpenSCADA</span></h2> <p>ПоÑредÑтвом интерфейÑа ÑƒÐ¿Ñ€Ð°Ð²Ð»ÐµÐ½Ð¸Ñ OpenSCADA компоненты, которые его иÑпользуют, можно конфигурировать из любого конфигуратора OpenSCADA. Данным модулем предоÑтавлÑетÑÑ Ð¸Ð½Ñ‚ÐµÑ€Ñ„ÐµÐ¹Ñ Ð´Ð¾Ñтупа ко вÑем объектам данных СВУ. Ð“Ð»Ð°Ð²Ð½Ð°Ñ Ð²ÐºÐ»Ð°Ð´ÐºÐ° конфигурационной Ñтраницы Ð¼Ð¾Ð´ÑƒÐ»Ñ Ð¿Ñ€ÐµÐ´Ð¾ÑтавлÑет доÑтуп к библиотекам виджетов и проектам (риÑ.4.1). Вкладка "СеанÑÑ‹" предоÑтавлÑет доÑтуп и открытым ÑеанÑам проектов (риÑ.4.2). </p> <div class="center"><div class="thumb tnone"><div class="thumbinner" style="width:761px;"><a class="image" href="http://oscada.org/wiki/File:VCAeng_main_ru.png"><img class="thumbimage" height="577" src="../files/VCAeng_main_ru.png" width="759" /></a> <div class="thumbcaption">РиÑ.4.1. Ð“Ð»Ð°Ð²Ð½Ð°Ñ ÐºÐ¾Ð½Ñ„Ð¸Ð³ÑƒÑ€Ð°Ñ†Ð¸Ð¾Ð½Ð½Ð°Ñ Ñтраница модулÑ.</div></div></div></div> <div class="center"><div class="thumb tnone"><div class="thumbinner" style="width:742px;"><a class="image" href="http://oscada.org/wiki/File:VCAeng_sess_ru.png"><img class="thumbimage" height="563" src="../files/VCAeng_sess_ru.png" width="740" /></a> <div class="thumbcaption">РиÑ.4.2. Вкладка "СеанÑÑ‹" конфигурационной Ñтраницы модулÑ.</div></div></div></div> <p>Кроме ÑпиÑка открытых ÑеанÑов, вкладка на риÑунке 4.2 Ñодержит таблицу Ñ Ð¿ÐµÑ€ÐµÑ‡Ð½ÐµÐ¼ ÑеанÑов, которые должны ÑоздаватьÑÑ Ð¸ запуÑкатьÑÑ Ð² момент загрузки OpenSCADA. Создание ÑеанÑов поÑредÑтвом Ñтого механизма может быть полезным Ð´Ð»Ñ Web-интерфейÑа. Ð’ таком Ñлучае, при подключении Web-пользователÑ, вÑе данные уже готовы и обеÑпечиваетÑÑ Ð½ÐµÐ¿Ñ€ÐµÑ€Ñ‹Ð²Ð½Ð¾ÑÑ‚ÑŒ Ñ„Ð¾Ñ€Ð¼Ð¸Ñ€Ð¾Ð²Ð°Ð½Ð¸Ñ Ð°Ñ€Ñ…Ð¸Ð²Ð½Ñ‹Ñ… документов. </p><p>ÐšÐ¾Ð½Ñ„Ð¸Ð³ÑƒÑ€Ð°Ñ†Ð¸Ñ ÐºÐ¾Ð½Ñ‚ÐµÐ¹Ð½ÐµÑ€Ð¾Ð² виджетов в лице библиотек виджетов и проектов выполнÑетÑÑ Ð¿Ð¾ÑредÑтвом Ñтраниц на риÑунке 4.3 (Ð´Ð»Ñ Ð¿Ñ€Ð¾ÐµÐºÑ‚Ð°) и риÑунке 4.5 (Ð´Ð»Ñ Ð±Ð¸Ð±Ð»Ð¸Ð¾Ñ‚ÐµÐºÐ¸ виджетов). Библиотека виджетов Ñодержит виджеты, а проект — Ñтраницы. Оба типа контейнера Ñодержат вкладку конфигурации реÑурÑов, иÑпользуемых виджетами (риÑ.4.6). Страница проекта также Ñодержит вкладку "ДиагноÑтика" (риÑ.4.4) Ð´Ð»Ñ Ð¾Ñ‚Ð»Ð°Ð´ÐºÐ¸ и ÐºÐ¾Ð½Ñ‚Ñ€Ð¾Ð»Ñ Ð·Ð° иÑполнением Ñтраницы в ÑеанÑах. </p> <div class="center"><div class="thumb tnone"><div class="thumbinner" style="width:782px;"><a class="image" href="http://oscada.org/wiki/File:VCAeng_pg.png"><img class="thumbimage" height="690" src="../../en/files/VCAeng_pg.png" width="780" /></a> <div class="thumbcaption">РиÑ.4.3. Страница конфигурации проектов.</div></div></div></div> <p>From this page you can set: </p> <ul><li> State of the container, same: "Enabled", name of the storage (containing the configuration and with tracking the availability of the data in different storages and providing the sequentially removing duplicates), date and time of last modification, counter of the use.</li></ul> <dl><dd> <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 object still supports of specifying the spare storage addresses with tables before you rename the table in the standard form "<b>prj_{ObjID}</b>".</dd></dl> <ul><li> Identifier, name, description and icon of the container.</li> <li> Owner, group and access rights to the container.</li> <li> Period for computing of the sessions based on the given project.</li> <li> Signal of enabling as needed.</li></ul> <div class="center"><div class="thumb tnone"><div class="thumbinner" style="width:1042px;"><a class="image" href="http://oscada.org/wiki/File:VCAeng_pg_diag_ru.png"><img class="thumbimage" height="542" src="../files/VCAeng_pg_diag_ru.png" width="1040" /></a> <div class="thumbcaption">РиÑ.4.4. Вкладка "ДиагноÑтика" проекта.</div></div></div></div> <p>Ð’ Ñтой вкладке Ð’Ñ‹ можете выбрать Ð²Ñ€ÐµÐ¼Ñ (или обновить к текущему) и размер Ð´Ð»Ñ Ð¿Ð¾Ð»ÑƒÑ‡ÐµÐ½Ð¸Ñ Ð´Ð¸Ð°Ð³Ð½Ð¾ÑтичеÑких Ñообщений ÑеанÑов иÑÐ¿Ð¾Ð»Ð½ÐµÐ½Ð¸Ñ Ð´Ð°Ð½Ð½Ð¾Ð³Ð¾ проекта. </p> <div class="center"><div class="thumb tnone"><div class="thumbinner" style="width:810px;"><a class="image" href="http://oscada.org/wiki/File:VCAeng_wlb.png"><img class="thumbimage" height="616" src="../../en/files/VCAeng_wlb.png" width="808" /></a> <div class="thumbcaption">РиÑ.4.5. Страница конфигурации библиотек виджетов.</div></div></div></div> <p>From this page you can set: </p> <ul><li> State of the container, same: "Enabled", name of the storage (containing the configuration and with tracking the availability of the data in different storages and providing the sequentially removing duplicates), date and time of last modification, counter of the use.</li></ul> <dl><dd> <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 object still supports of specifying the spare storage addresses with tables before you rename the table in the standard form "<b>wlb_{ObjID}</b>".</dd></dl> <ul><li> Identifier, name, description and icon of the container.</li></ul> <div class="center"><div class="thumb tnone"><div class="thumbinner" style="width:693px;"><a class="image" href="http://oscada.org/wiki/File:VCAeng_mime_ru.png"><img class="thumbimage" height="603" src="../files/VCAeng_mime_ru.png" width="691" /></a> <div class="thumbcaption">РиÑ.4.6. Вкладка конфигурации реÑурÑов контейнера.</div></div></div></div> <p>ÐšÐ¾Ð½Ñ„Ð¸Ð³ÑƒÑ€Ð°Ñ†Ð¸Ñ ÑеанÑа проекта значительно отличаетÑÑ Ð¾Ñ‚ конфигурации проекта (риÑ.4.7), однако, также, Ñодержит Ñтраницы проекта. </p> <div class="center"><div class="thumb tnone"><div class="thumbinner" style="width:998px;"><a class="image" href="http://oscada.org/wiki/File:VCAeng_pg_ses_ru.png"><img class="thumbimage" height="642" src="../files/VCAeng_pg_ses_ru.png" width="996" /></a> <div class="thumbcaption">РиÑ.4.7. Страница конфигурации ÑеанÑов проектов.</div></div></div></div> <p>С помощью Ñтой Ñтраницы можно уÑтановить: </p> <ul><li> СоÑтоÑние ÑеанÑа, а именно: "Включен"; "ИÑполнÑетÑÑ"; пользователь; владелец; группа пользователей; доÑтуп; иÑходный проект; режим иÑÐ¿Ð¾Ð»Ð½ÐµÐ½Ð¸Ñ Ð² фоне; Ð²Ñ€ÐµÐ¼Ñ Ð¸ÑÐ¿Ð¾Ð»Ð½ÐµÐ½Ð¸Ñ ÑеанÑа; Ñчётчик клиентÑких подключений; времÑ, пользователь, Ñзык поÑледнего запроÑа; поÑледнее дейÑтвие Ð¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ñ‚ÐµÐ»Ñ Ð¸ оÑтаток времени до принудительного закрытиÑ.</li> <li> Период обÑчёта ÑеанÑа.</li> <li> Текущий Ñтиль проекта.</li> <li> Перечень открытых Ñтраниц.</li></ul> <p>Configuration pages of the visual elements, placed in different containers, may be very different, but this difference is the presence or absence of individual tabs. Main tab of the visual elements in fact is the same everywhere, differing in one configuration field and three into the session (Fig.4.8). The pages contains the tabs of the child pages and included widgets. The container widgets contains the tab of the included widgets. All visual elements contain attributes tab (Fig.4.9), except the logical containers of the projects. Elements, at the level of which it is possible to build the user procedure and to determine the links, contain the tab "Processing" (Fig.4.10) and "Links" (Fig.4.11). <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 attribute name's rows in the "Processing" tab after the first one treat as help. </p> <div class="center"><div class="thumb tnone"><div class="thumbinner" style="width:825px;"><a class="image" href="http://oscada.org/wiki/File:VCAeng_vit_main.png"><img class="thumbimage" height="766" src="../../en/files/VCAeng_vit_main.png" width="823" /></a> <div class="thumbcaption">РиÑ.4.8. Ð“Ð»Ð°Ð²Ð½Ð°Ñ Ð²ÐºÐ»Ð°Ð´ÐºÐ° конфигурации визуальных Ñлементов.</div></div></div></div> <p>From this page you can obtain: </p> <ul><li> State of the element; for information: "Enabled", counter of the use, date of the last modification, state of the calculation procedure; for control: "Enabled", the page type (for pages), parent element and jump to it.</li> <li> State of the element in the runtime session's mode; for information: modification, the periodic processing period, "Processing", spent time on execution of the subtree and item, into the <a href="../Program_manual.html#Config" title="Special:MyLanguage/Documents/Program manual">debug mode</a>, "Opened"; for control: "Opened", "Processing".</li> <li> Identifier, type, root, path, name, description and icon of the element.</li> <li> Periodic processing in milliseconds — for common control of the periodic processing of any element including ones who have not any calculation procedure, but that value can be used in the cascade for child elements. There reserved the special values: <ul><li> <b>0</b> — you want periodic processing with the session period;</li> <li> <b>-1</b> — you want to use processing period of the parent widget/page/project in the cascade;</li> <li> <b>-2</b> — for disable the periodic processing in whole.</li></ul></li> <li> Command — clear the widget changes.</li> <li> Command — lower down the widget changes to its parent.</li></ul> <div class="center"><div class="thumb tnone"><div class="thumbinner" style="width:885px;"><a class="image" href="http://oscada.org/wiki/File:VCAeng_vit_attr_ru.png"><img class="thumbimage" height="740" src="../files/VCAeng_vit_attr_ru.png" width="883" /></a> <div class="thumbcaption">РиÑ.4.9. Вкладка атрибутов визуальных Ñлементов.</div></div></div></div> <div class="center"><div class="thumb tnone"><div class="thumbinner" style="width:1002px;"><a class="image" href="http://oscada.org/wiki/File:VCAeng_vit_proc_ru.png"><img class="thumbimage" height="766" src="../files/VCAeng_vit_proc_ru.png" width="1000" /></a> <div class="thumbcaption">РиÑ.4.10. Вкладка обработки визуальных Ñлементов.</div></div></div></div> <div class="center"><div class="thumb tnone"><div class="thumbinner" style="width:1085px;"><a class="image" href="http://oscada.org/wiki/File:VCAeng_vit_lnk_ru.png"><img class="thumbimage" height="582" src="../files/VCAeng_vit_lnk_ru.png" width="1083" /></a> <div class="thumbcaption">РиÑ.4.11. Вкладка ÑвÑзей визуальных Ñлементов.</div></div></div></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/VCAEngine/ru">Modules/VCAEngine/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>