<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="ru">
	<id>https://docs.kb-agava.ru/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=SharipovRR</id>
	<title>docs.kb-agava.ru - Вклад участника [ru]</title>
	<link rel="self" type="application/atom+xml" href="https://docs.kb-agava.ru/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=SharipovRR"/>
	<link rel="alternate" type="text/html" href="https://docs.kb-agava.ru/view/%D0%A1%D0%BB%D1%83%D0%B6%D0%B5%D0%B1%D0%BD%D0%B0%D1%8F:%D0%92%D0%BA%D0%BB%D0%B0%D0%B4/SharipovRR"/>
	<updated>2026-05-17T04:02:11Z</updated>
	<subtitle>Вклад участника</subtitle>
	<generator>MediaWiki 1.35.1</generator>
	<entry>
		<id>https://docs.kb-agava.ru/index.php?title=%D0%A3%D0%B7%D0%BB%D1%8B_%D0%BF%D1%80%D0%BE%D0%B5%D0%BA%D1%82%D0%B0_AgavaSCADA/AgavaPLC&amp;diff=3314</id>
		<title>Узлы проекта AgavaSCADA/AgavaPLC</title>
		<link rel="alternate" type="text/html" href="https://docs.kb-agava.ru/index.php?title=%D0%A3%D0%B7%D0%BB%D1%8B_%D0%BF%D1%80%D0%BE%D0%B5%D0%BA%D1%82%D0%B0_AgavaSCADA/AgavaPLC&amp;diff=3314"/>
		<updated>2025-10-30T11:57:56Z</updated>

		<summary type="html">&lt;p&gt;SharipovRR: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Узлы проекта ==&lt;br /&gt;
Узел - элементарная сущность проекта, осуществляющая хранение информации или реализующая определенный функционал. Каждый узел обладает набором [[Свойства узлов в AgavaSCADA/AgavaPLC|свойств]]. Все узлы, объединенные в иерархическую структуру, образуют проект.&lt;br /&gt;
&lt;br /&gt;
== Проект ==&lt;br /&gt;
[[Файл:AgavaPLC–Дерево проекта.png|мини|Рисунок 21 – Дерево проекта]]&lt;br /&gt;
Узел &amp;quot;Проект&amp;quot; (&amp;quot;Корневой узел&amp;quot;, &amp;quot;Корень&amp;quot;) предназначен для хранения общей информации о проекте и связывания других узлов проекта.&lt;br /&gt;
&lt;br /&gt;
== Станция ==&lt;br /&gt;
Станция – важнейший узел, управляющий работой собственных систем и выполняющий обмен данными с другими станциями. Физически станция представляет собой устройство, на котором исполняется проект (компьютер, панель оператора, МПР-60 или другое устройство).&lt;br /&gt;
&lt;br /&gt;
Для использования в проекте доступны несколько типов станций. например:&lt;br /&gt;
&lt;br /&gt;
* '''Станция''' - общий тип станции. Проекты с такой станцией могут выполняться на большинстве устройств - контроллеры, панели, персональные компьютеры. Чаще всего используется для проектов, предназначенных для выполнения на персональном компьютере.&lt;br /&gt;
* '''Панель ПО-40''' - специализированный тип для проектов на панелях оператора ПО-40. Станция такого типа по отношению к общему дополнительно предоставляет возможность управления оборудованием панели оператора (светодиоды индикации и др.), использования корзины субмодулей.&lt;br /&gt;
* '''Панель ПО-50''' - специализированный тип для проектов на панелях оператора ПО-50. Станция такого типа по отношению к общему дополнительно предоставляет возможность управления оборудованием панели оператора (светодиоды индикации и др.).&lt;br /&gt;
* '''Контроллер МПР-60''' - специализированный тип для проектов на программируемых реле МПР-60. Станция такого типа по отношению к общему дополнительно предоставляет возможность управления оборудованием устройства (светодиоды индикации и др.), использования корзины субмодулей.&lt;br /&gt;
* '''Контроллер ПЛК-70.A''' - специализированный тип для проектов, предназначенных для контроллеров АГАВА ПЛК-70.А. Станция такого типа по отношению к общему дополнительно предоставляет возможность управления оборудованием контроллера (светодиоды индикации и др.), использования корзины субмодулей.&lt;br /&gt;
&lt;br /&gt;
При построении больших проектов станций в проекте может быть несколько, и они могут выполнять разные задачи. Например, станция-сервер выполняет сбор и регистрацию данных, клиентские станции выполняют визуализацию данных на рабочих местах и т. д.&lt;br /&gt;
&lt;br /&gt;
Станции подчиняются узлы типа &amp;quot;Система&amp;quot; - Транспортная система, Система архивирования, Система визуализации и т. д.&lt;br /&gt;
&lt;br /&gt;
== Транспортная система ==&lt;br /&gt;
Транспортная система управляет передачей данных по различным каналам связи. Система управляет работой &amp;quot;Транспортов&amp;quot; - узлов, выполняющих обмен данными с устройствами по определенному протоколу.&lt;br /&gt;
&lt;br /&gt;
С одной стороны, транспортная система обращается непосредственно к сигналам и каналам устройства, а с другой стороны, представляет их в виде неких универсальных единиц – узлов-источников. Каждый источник однозначно соответствует определенному сигналу или параметру устройства.  При изменении сигнала меняется и значение источника.  При записи данных в источник производится подача команды устройству на установку определенного значения конкретного параметра.&lt;br /&gt;
&lt;br /&gt;
Транспортная система допускает использование нескольких транспортов, что дает возможность одновременного обмена данными с большим количеством устройств по разным протоколам.&lt;br /&gt;
&lt;br /&gt;
=== Транспорт ===&lt;br /&gt;
Транспорт предназначен для обмена данными с устройствами по определенному протоколу. Один транспорт, в зависимости от типа, позволяет обмениваться данными с одним или несколькими устройствами.&lt;br /&gt;
&lt;br /&gt;
Доступны для использования следующие виды транспортов:&lt;br /&gt;
&lt;br /&gt;
* Транспорт Modbus-TCP;&lt;br /&gt;
* Транспорт Modbus-RTU;&lt;br /&gt;
* Транспорт SNMP;&lt;br /&gt;
* Транспорт OPC UA;&lt;br /&gt;
* Транспорт OPC DA (только для Windows);&lt;br /&gt;
* Транспорт MQTT;&lt;br /&gt;
* Последовательный транспорт (устаревший);&lt;br /&gt;
* TCP/IP транспорт (устаревший).&lt;br /&gt;
Подробное описание транспортов приведено в отдельном документе &amp;quot;[[Транспорты AgavaSCADA/AgavaPLC]]&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
==Система визуализации==&lt;br /&gt;
{{Внимание|Тип=Восклицание желтый.png|Текст=Система визуализации недоступна в проектах для контроллеров МПР}}&lt;br /&gt;
 &lt;br /&gt;
Задачей этой системы является отображение данных в виде набора мнемонических схем (экранов, мнемосхем), а также предоставление пользователю возможности управления. &lt;br /&gt;
&lt;br /&gt;
Каждый экран позволяет в схематичном, понятном пользователю виде представить участок технологической схемы с отображением необходимых параметров технологического процесса.&lt;br /&gt;
&lt;br /&gt;
Изображение на экране строится с помощью окон, на которых размещаются объекты визуализации – виджеты. Виджетами могут быть текстовые метки, изображения, в том числе анимированные, элементы управления, графики и т. д. Виджеты можно объединять в слои для удобного управления отображением виджетов.&lt;br /&gt;
&lt;br /&gt;
Виджеты могут быть статическими и динамическими.  Динамические виджеты привязаны к одному или нескольким сигналам и их отображение зависит от значений этих сигналов. Статические виджеты не имеют привязки к сигналам и их изображение всегда постоянно.&lt;br /&gt;
&lt;br /&gt;
Для перехода по экранам, изменения значений параметров и иного управления служат специальные виджеты: кнопки управления, поля ввода и другие.&lt;br /&gt;
&lt;br /&gt;
Для повышения быстродействия и увеличения комфортности работы с системой система визуализации хранит в памяти кэш из нескольких последних открытых экранов. Когда при последовательном открытии экранов этот кэш заполняется, наиболее старые экраны удаляются из него.  Это связано с тем, что, как правило, в работе используются несколько одних и тех же экранов, которые отображают сводную информацию о техпроцессе и оператор в штатном режиме переключается только между ними. Сохраняя их в памяти, система ускоряет переключение между ними, поскольку при этом не требуется каждый раз создавать экран, все находящиеся на нем объекты и запускать процессы обновления параметров.&lt;br /&gt;
&lt;br /&gt;
Когда экран переходит в кэш, обновление параметров на нем прекращается для снижения нагрузки на центральный процессор. Если все же необходимо, чтобы экран всегда производил обновление данных (по разным причинам), даже находясь в кэше, необходимо в его настройках включить опцию «Постоянно обновляемый».&lt;br /&gt;
&lt;br /&gt;
Подчиненные типы узлов:&lt;br /&gt;
&lt;br /&gt;
*фрейм;&lt;br /&gt;
*окно;&lt;br /&gt;
*композиция.&lt;br /&gt;
&lt;br /&gt;
===Фрейм===&lt;br /&gt;
[[Файл:AgavaPLC–Пример структуры сложного фрейма, состоящего из двух форм и одного окна с многослойной композицией.png|мини|Рисунок 23 – Пример структуры сложного фрейма, состоящего из двух форм и одного окна с многослойной композицией]]&lt;br /&gt;
Фрейм – узел, предназначенный для группировки окон, отображаемых на определенном дисплее. Обеспечивает организацию окон в пространстве экрана, управление мониторами и границами отображения. &lt;br /&gt;
&lt;br /&gt;
Если необходимо отобразить информацию на нескольких дисплеях одновременно, то для каждого из них нужно использовать отдельный фрейм. Окон во фрейме может быть несколько, однако они не могут накладываться друг на друга.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Наименование свойства&lt;br /&gt;
!Идентификатор&lt;br /&gt;
!Тип&lt;br /&gt;
!Описание&lt;br /&gt;
!Допустимые значения&lt;br /&gt;
|-&lt;br /&gt;
|Позиция X&lt;br /&gt;
|XCoord&lt;br /&gt;
|int&lt;br /&gt;
|Координата X левого верхнего угла фрейма&lt;br /&gt;
|Целое число&lt;br /&gt;
|-&lt;br /&gt;
|Позиция Y&lt;br /&gt;
|YCoord&lt;br /&gt;
|int&lt;br /&gt;
|Координата Y левого верхнего угла фрейма&lt;br /&gt;
|Целое число&lt;br /&gt;
|-&lt;br /&gt;
|Ширина&lt;br /&gt;
|XSize&lt;br /&gt;
|int&lt;br /&gt;
|Ширина фрейма в пикселях&lt;br /&gt;
|Целое число &amp;gt; 0&lt;br /&gt;
|-&lt;br /&gt;
|Высота&lt;br /&gt;
|YSize&lt;br /&gt;
|int&lt;br /&gt;
|Высота фрейма в пикселях&lt;br /&gt;
|Целое число &amp;gt; 0&lt;br /&gt;
|-&lt;br /&gt;
|Окна&lt;br /&gt;
|Windows&lt;br /&gt;
|NodesArray&lt;br /&gt;
|Список окон, принадлежащих фрейму&lt;br /&gt;
|Узлы типа: Window&lt;br /&gt;
|-&lt;br /&gt;
|Номер монитора&lt;br /&gt;
|DisplayNo&lt;br /&gt;
|int&lt;br /&gt;
|Номер монитора для отображения фрейма&lt;br /&gt;
|0 - по умолчанию&lt;br /&gt;
≥1 - конкретные мониторы&lt;br /&gt;
|-&lt;br /&gt;
|Тип границы&lt;br /&gt;
|BorderType&lt;br /&gt;
|enum&lt;br /&gt;
|Тип границы фрейма&lt;br /&gt;
|0: Не определен (ошибка)&lt;br /&gt;
1: Отсутствует&lt;br /&gt;
&lt;br /&gt;
2: Фиксированная&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== Позиция и размеры (XCoord, YCoord, XSize, YSize) ====&lt;br /&gt;
&lt;br /&gt;
* '''Тип:''' int.&lt;br /&gt;
* '''Описание:''' Определяют положение и размеры фрейма на экране.&lt;br /&gt;
* '''Значения по умолчанию:''' (0, 0, 640, 480).&lt;br /&gt;
* '''Применение:''' Задание области экрана, которую занимает фрейм.&lt;br /&gt;
&lt;br /&gt;
==== Окна (Windows) ====&lt;br /&gt;
'''Тип:''' NodesArray.&lt;br /&gt;
&lt;br /&gt;
'''Описание:''' Коллекция окон, которые управляются данным фреймом. Окна могут добавляться только из существующих узлов.&lt;br /&gt;
&lt;br /&gt;
'''Особенности:'''&lt;br /&gt;
&lt;br /&gt;
* Поддерживаются только узлы типа Window.&lt;br /&gt;
&lt;br /&gt;
==== Номер монитора (DisplayNo) ====&lt;br /&gt;
'''Тип:''' int.&lt;br /&gt;
&lt;br /&gt;
'''Описание:''' Определяет, на каком мониторе системы отображается фрейм. Значение 0 соответствует монитору по умолчанию.&lt;br /&gt;
&lt;br /&gt;
'''Использование:'''&lt;br /&gt;
&lt;br /&gt;
* 0 - основной монитор.&lt;br /&gt;
* 1, 2, ... - дополнительные мониторы.&lt;br /&gt;
* Свойство важно для многомониторных конфигураций.&lt;br /&gt;
&lt;br /&gt;
==== Тип границы (BorderType) ====&lt;br /&gt;
'''Тип:''' enum.&lt;br /&gt;
&lt;br /&gt;
'''Описание:''' Определяет тип обрамления фрейма. Влияет на внешний вид и поведение границ.&lt;br /&gt;
&lt;br /&gt;
'''Значения:'''&lt;br /&gt;
&lt;br /&gt;
* '''Отсутствует''' - фрейм без видимых границ.&lt;br /&gt;
* '''Фиксированная''' - стандартная граница окна.&lt;br /&gt;
* '''Не определен''' - используется только для обработки ошибок.&lt;br /&gt;
&lt;br /&gt;
==== Наследование привилегий ====&lt;br /&gt;
Фрейм автоматически добавляет доступные привилегии для работы с окнами:&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;OpenWindow&amp;lt;/code&amp;gt; - привилегия на открытие окон.&lt;br /&gt;
* &amp;lt;code&amp;gt;CloseWindow&amp;lt;/code&amp;gt; - привилегия на закрытие окон.&lt;br /&gt;
&lt;br /&gt;
===Окна===&lt;br /&gt;
Окно – узел, осуществляющий отображение видеокадра (мнемонической схемы).&lt;br /&gt;
&lt;br /&gt;
Существуют несколько видов окон:&lt;br /&gt;
&lt;br /&gt;
1. «Форма», предназначенная для вывода простого набора данных без необходимости управления видимостью или внешним видом его элементов. Для вывода информации в такое окно кроме создания окна и добавления к нему виджетов ничего более не требуется.&lt;br /&gt;
[[Файл:AgavaPLC-Меню.png|мини|164x164пкс|Рисунок 24 — Внешний вид меню в среде исполнения]]&lt;br /&gt;
2. «Окно с композицией», предназначенное для вывода большого количества информации и позволяющее организовать группировку элементов по слоям, управлять внешним видом элементов, видимостью слоев и отдельных элементов, а также дающее возможность регулирования работы пользователя с элементами. Для вывода информации в такое окно нужно к окну привязать композицию, содержащую минимум один слой, в который уже добавляются виджеты.&lt;br /&gt;
&lt;br /&gt;
=== Форма ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Наименование свойства&lt;br /&gt;
!Идентификатор&lt;br /&gt;
!Тип&lt;br /&gt;
!Описание&lt;br /&gt;
!Допустимые значения&lt;br /&gt;
!Режим доступа&lt;br /&gt;
|-&lt;br /&gt;
|Модальность&lt;br /&gt;
|Modality&lt;br /&gt;
|enum&lt;br /&gt;
|Режим модальности окна&lt;br /&gt;
|0: Не определен (ошибка)&lt;br /&gt;
1: Немодальное&lt;br /&gt;
&lt;br /&gt;
2: Модальное (Фрейм)&lt;br /&gt;
&lt;br /&gt;
3: Модальное (Система)&lt;br /&gt;
|Чтение/Запись&lt;br /&gt;
|-&lt;br /&gt;
|Тип границы&lt;br /&gt;
|BorderType&lt;br /&gt;
|enum&lt;br /&gt;
|Тип границы окна&lt;br /&gt;
|0: Не определен (ошибка)&lt;br /&gt;
1: Фиксированная&lt;br /&gt;
&lt;br /&gt;
2: Изменяемая&lt;br /&gt;
&lt;br /&gt;
3: Отсутствует&lt;br /&gt;
|Чтение/Запись&lt;br /&gt;
|-&lt;br /&gt;
|Отображать строку заголовка&lt;br /&gt;
|TitleEnabled&lt;br /&gt;
|bool&lt;br /&gt;
|Отображать строку заголовка&lt;br /&gt;
|true/false&lt;br /&gt;
|Чтение/Запись&lt;br /&gt;
|-&lt;br /&gt;
|Отображать кнопку &amp;quot;Закрыть&amp;quot;&lt;br /&gt;
|CloseEnabled&lt;br /&gt;
|bool&lt;br /&gt;
|Отображать кнопку &amp;quot;Закрыть&amp;quot;&lt;br /&gt;
|true/false&lt;br /&gt;
|Чтение/Запись&lt;br /&gt;
|-&lt;br /&gt;
|Цвет фона&lt;br /&gt;
|BackgroundColor&lt;br /&gt;
|NColor&lt;br /&gt;
|Цвет фона окна&lt;br /&gt;
|Цвет в формате RGBA&lt;br /&gt;
|Чтение/Запись&lt;br /&gt;
|-&lt;br /&gt;
|Затемнение&lt;br /&gt;
|NeedDarkenApplication&lt;br /&gt;
|bool&lt;br /&gt;
|Затемнение других окон приложения при открытии этого окна&lt;br /&gt;
|true/false&lt;br /&gt;
|Чтение/Запись&lt;br /&gt;
|-&lt;br /&gt;
|Цвет затемнения&lt;br /&gt;
|ColorDarkenApplication&lt;br /&gt;
|NColor&lt;br /&gt;
|Цвет затемнения&lt;br /&gt;
|Цвет в формате RGBA&lt;br /&gt;
|Чтение/Запись&lt;br /&gt;
|-&lt;br /&gt;
|Интервал обновления&lt;br /&gt;
|UpdateInterval&lt;br /&gt;
|int&lt;br /&gt;
|Интервал обновления виджетов, мс&lt;br /&gt;
|0 - без задержки&lt;br /&gt;
&amp;gt;0 - интервал в мс&lt;br /&gt;
|Чтение/Запись&lt;br /&gt;
|-&lt;br /&gt;
|Действия OnShow&lt;br /&gt;
|ActionsOnShow&lt;br /&gt;
|NodesContainer&lt;br /&gt;
|Действия при показе окна&lt;br /&gt;
|Узлы типа: Action&lt;br /&gt;
|Чтение/Запись&lt;br /&gt;
|-&lt;br /&gt;
|Действия OnClose&lt;br /&gt;
|ActionsOnClose&lt;br /&gt;
|NodesContainer&lt;br /&gt;
|Действия при закрытии окна&lt;br /&gt;
|Узлы типа: Action&lt;br /&gt;
|Чтение/Запись&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== Модальность (Modality) ====&lt;br /&gt;
'''Тип:''' enum.&lt;br /&gt;
&lt;br /&gt;
'''Описание:''' Определяет поведение окна относительно других окон приложения.&lt;br /&gt;
&lt;br /&gt;
'''Значения:'''&lt;br /&gt;
&lt;br /&gt;
* '''Немодальное''' - позволяет взаимодействовать с другими окнами.&lt;br /&gt;
* '''Модальное (Фрейм)''' - блокирует взаимодействие с окнами в том же фрейме.&lt;br /&gt;
* '''Модальное (Система)''' - блокирует все окна приложения.&lt;br /&gt;
&lt;br /&gt;
==== Тип границы (BorderType) ====&lt;br /&gt;
'''Тип:''' enum.&lt;br /&gt;
&lt;br /&gt;
'''Описание:''' Определяет тип и поведение границ окна.&lt;br /&gt;
&lt;br /&gt;
'''Значения:'''&lt;br /&gt;
&lt;br /&gt;
* '''Фиксированная''' - окно нельзя изменять размер.&lt;br /&gt;
* '''Изменяемая''' - пользователь может изменять размер окна.&lt;br /&gt;
* '''Отсутствует''' - окно без видимых границ.&lt;br /&gt;
&lt;br /&gt;
==== Управление заголовком (TitleEnabled, CloseEnabled) ====&lt;br /&gt;
'''Тип:''' bool.&lt;br /&gt;
&lt;br /&gt;
'''Описание:''' Контролируют отображение элементов заголовка окна.&lt;br /&gt;
&lt;br /&gt;
==== Фон и затемнение (BackgroundColor, NeedDarkenApplication, ColorDarkenApplication) ====&lt;br /&gt;
'''Тип:''' NColor, bool, NColor.&lt;br /&gt;
&lt;br /&gt;
'''Описание:''' Управляют визуальным оформлением окна и его влиянием на другие окна.&lt;br /&gt;
&lt;br /&gt;
'''Особенности:'''&lt;br /&gt;
&lt;br /&gt;
* Затемнение применяется только при NeedDarkenApplication = true.&lt;br /&gt;
* Цвет затемнения по умолчанию: черный с прозрачностью 50%.&lt;br /&gt;
&lt;br /&gt;
==== Интервал обновления (UpdateInterval) ====&lt;br /&gt;
'''Тип:''' int.&lt;br /&gt;
&lt;br /&gt;
'''Описание:''' Определяет частоту обновления виджетов в окне.&lt;br /&gt;
&lt;br /&gt;
'''Рекомендации:'''&lt;br /&gt;
&lt;br /&gt;
* 0 - 100 мс для композиций с критичным временем отклика.&lt;br /&gt;
* 100 - 500 мс хорошо подходит для большинства случаев.&lt;br /&gt;
* более 1000 мс - для статических или редко меняющихся данных.&lt;br /&gt;
&lt;br /&gt;
==== Обработчики событий (ActionsOnShow, ActionsOnClose) ====&lt;br /&gt;
'''Тип:''' NodesContainer.&lt;br /&gt;
&lt;br /&gt;
'''Описание:''' Коллекции действий, выполняемых при показе и закрытии окна.&lt;br /&gt;
&lt;br /&gt;
=== Окно с композицией ===&lt;br /&gt;
Данный узел имеет те же свойства, что и форма, а также собственные:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Наименование свойства&lt;br /&gt;
!Идентификатор&lt;br /&gt;
!Тип&lt;br /&gt;
!Описание&lt;br /&gt;
!Допустимые значения&lt;br /&gt;
!Режим доступа&lt;br /&gt;
|-&lt;br /&gt;
|Композиция&lt;br /&gt;
|CompositionId&lt;br /&gt;
|NodeLink&lt;br /&gt;
|Основная композиция окна&lt;br /&gt;
|Узлы типа: CompositionLayered, CompositionTemplated&lt;br /&gt;
|Чтение/Запись&lt;br /&gt;
|-&lt;br /&gt;
|Описание текущей композиции&lt;br /&gt;
|CurrentCompositionDesc&lt;br /&gt;
|string&lt;br /&gt;
|Описание текущей загруженной композиции&lt;br /&gt;
|Автоматически формируется&lt;br /&gt;
|Только чтение&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== Композиция (CompositionId) ====&lt;br /&gt;
'''Тип:''' NodeLink.&lt;br /&gt;
&lt;br /&gt;
'''Описание:''' Ссылка на композицию, отображаемую в окне.&lt;br /&gt;
&lt;br /&gt;
'''Поддерживаемые типы:''' CompositionLayered, CompositionTemplated.&lt;br /&gt;
&lt;br /&gt;
==== Описание текущей композиции (CurrentCompositionDesc) ====&lt;br /&gt;
'''Тип:''' string.&lt;br /&gt;
&lt;br /&gt;
'''Описание:''' Автоматически обновляемое описание загруженной композиции.&lt;br /&gt;
&lt;br /&gt;
'''Особенности:''' Свойство только для чтения, обновляется системой автоматически.[[Файл:AgavaPLC-Настройка меню в среде разработки.png|мини|226x226пкс|Рисунок 25 — Настройка меню в среде разработки]]&lt;br /&gt;
&lt;br /&gt;
===Композиция===&lt;br /&gt;
Композиция – узел, представляющий составленную при разработке проекта мнемоническую схему в виде набора элементов визуализации (виджетов), сгруппированных в один или несколько слоев.&lt;br /&gt;
&lt;br /&gt;
Композиция дает возможность организовать виджеты в слои, видимостью которых можно управлять во время работы проекта.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Наименование свойства&lt;br /&gt;
!Идентификатор&lt;br /&gt;
!Тип&lt;br /&gt;
!Описание&lt;br /&gt;
!Допустимые значения&lt;br /&gt;
!Режим доступа&lt;br /&gt;
|-&lt;br /&gt;
|Размеры&lt;br /&gt;
|Size&lt;br /&gt;
|NSize&lt;br /&gt;
|Размеры композиции&lt;br /&gt;
|Структура {ширина, высота}&lt;br /&gt;
|Чтение/Запись&lt;br /&gt;
|-&lt;br /&gt;
|Кэширование&lt;br /&gt;
|Cacheable&lt;br /&gt;
|bool&lt;br /&gt;
|Кэширование данных композиции для быстрого повторного открытия&lt;br /&gt;
|true/false&lt;br /&gt;
|Чтение/Запись&lt;br /&gt;
|-&lt;br /&gt;
|Источник интервала обновления&lt;br /&gt;
|UpdateIntervalSource&lt;br /&gt;
|enum&lt;br /&gt;
|Определяет источник интервала обновления виджетов&lt;br /&gt;
|0: Окно&lt;br /&gt;
1: Композиция&lt;br /&gt;
|Чтение/Запись&lt;br /&gt;
|-&lt;br /&gt;
|Интервал обновления&lt;br /&gt;
|UpdateInterval&lt;br /&gt;
|int&lt;br /&gt;
|Интервал обновления виджетов в миллисекундах&lt;br /&gt;
|Целое число ≥ 0&lt;br /&gt;
|Чтение/Запись&lt;br /&gt;
|-&lt;br /&gt;
|Действия OnLoad&lt;br /&gt;
|ActionsOnLoad&lt;br /&gt;
|NodesContainer&lt;br /&gt;
|Действия при загрузке композиции&lt;br /&gt;
|Узлы типа: Action&lt;br /&gt;
|Чтение/Запись&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== Размеры (Size) ====&lt;br /&gt;
'''Тип:''' NSize (ширина, высота).&lt;br /&gt;
&lt;br /&gt;
'''Описание:''' Определяет размеры композиции в пикселях. По умолчанию установлены значения 800x600.&lt;br /&gt;
&lt;br /&gt;
==== Кэширование (Cacheable) ====&lt;br /&gt;
'''Тип:''' bool.&lt;br /&gt;
&lt;br /&gt;
'''Описание:''' Включает или отключает кэширование данных композиции. При включенном кэшировании композиция сохраняется в памяти для быстрого повторного открытия.&lt;br /&gt;
&lt;br /&gt;
'''Преимущества кэширования:'''&lt;br /&gt;
&lt;br /&gt;
* Быстрое переключение между композициями.&lt;br /&gt;
* Снижение нагрузки на систему при частом использовании.&lt;br /&gt;
* Сохранение состояния элементов.&lt;br /&gt;
&lt;br /&gt;
'''Рекомендации:''' Включать для часто используемых композиций, отключать для редко используемых или ресурсоемких.&lt;br /&gt;
&lt;br /&gt;
==== Источник интервала обновления (UpdateIntervalSource) ====&lt;br /&gt;
'''Тип:''' enum.&lt;br /&gt;
&lt;br /&gt;
'''Описание:''' Определяет, откуда виджеты композиции получают интервал обновления.&lt;br /&gt;
&lt;br /&gt;
'''Значения:'''&lt;br /&gt;
&lt;br /&gt;
* '''Окно''' - интервал обновления наследуется от родительского окна.&lt;br /&gt;
* '''Композиция''' - используется собственный интервал обновления композиции.&lt;br /&gt;
&lt;br /&gt;
'''Применение:''' Централизованное управление производительностью через окно или индивидуальная настройка для каждой композиции.&lt;br /&gt;
&lt;br /&gt;
==== Интервал обновления (UpdateInterval) ====&lt;br /&gt;
'''Тип:''' int.&lt;br /&gt;
&lt;br /&gt;
'''Описание:''' Задает интервал обновления виджетов в миллисекундах. При значении 0 отрисовка виджетов выполняется без задержки (максимальная частота).&lt;br /&gt;
&lt;br /&gt;
'''Особенности:'''&lt;br /&gt;
&lt;br /&gt;
* 0 - обновление без задержек (может создать высокую нагрузку).&lt;br /&gt;
* &amp;gt; 0 - обновление с заданным интервалом.   Учитывается только при UpdateIntervalSource = &amp;quot;Композиция&amp;quot;&lt;br /&gt;
&lt;br /&gt;
'''Рекомендации:'''&lt;br /&gt;
&lt;br /&gt;
* 0 - 100 мс для композиций с критичным временем отклика.&lt;br /&gt;
* 100 - 500 мс хорошо подходит для большинства случаев.&lt;br /&gt;
* более 1000 мс - для статических или редко меняющихся данных.&lt;br /&gt;
&lt;br /&gt;
==== Обработчик событий ActionsOnLoad ====&lt;br /&gt;
'''Тип:''' NodesContainer.&lt;br /&gt;
&lt;br /&gt;
'''Описание:''' Коллекции действий, выполняемых после загрузки композиции &amp;lt;code&amp;gt;AS 1.6.27+&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
===Слой===&lt;br /&gt;
Слой – набор виджетов, объединенных каким-то общим структурным признаком. В многослойных композициях слой обеспечивает организацию виджетов в z-порядке, управление видимостью и взаимодействием с пользователем. С помошью свойства &amp;quot;Видимость&amp;quot; слоя можно управлять видимостью виджетов, размещенных на слое.&lt;br /&gt;
&lt;br /&gt;
Свойства&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Наименование свойства&lt;br /&gt;
!Идентификатор&lt;br /&gt;
!Тип&lt;br /&gt;
!Описание&lt;br /&gt;
!Допустимые значения&lt;br /&gt;
!Режим доступа&lt;br /&gt;
|-&lt;br /&gt;
|Z-Порядок&lt;br /&gt;
|ZOrder&lt;br /&gt;
|int&lt;br /&gt;
|Порядок слоя в композиции&lt;br /&gt;
|Целое число (чем выше значение, тем выше слой)&lt;br /&gt;
|Чтение/Запись&lt;br /&gt;
|-&lt;br /&gt;
|Прозрачность для действий&lt;br /&gt;
|ActionTransparency&lt;br /&gt;
|enum&lt;br /&gt;
|Определяет поведение слоя при взаимодействии с пользователем&lt;br /&gt;
|0: Не определен (ошибка)&lt;br /&gt;
1: Непрозрачный&lt;br /&gt;
&lt;br /&gt;
2: Прозрачный&lt;br /&gt;
|Чтение/Запись&lt;br /&gt;
|-&lt;br /&gt;
|Видимость&lt;br /&gt;
|Visible&lt;br /&gt;
|bool&lt;br /&gt;
|Видимость слоя и всех его виджетов&lt;br /&gt;
|true/false&lt;br /&gt;
|Чтение/Запись&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== Z-Порядок (ZOrder) ====&lt;br /&gt;
'''Тип:''' int&lt;br /&gt;
&lt;br /&gt;
'''Описание:''' Определяет порядок отображения слоя относительно других слоев в композиции. Слои с большим значением ZOrder отображаются поверх слоев с меньшим значением.&lt;br /&gt;
&lt;br /&gt;
'''Пример использования:'''&lt;br /&gt;
&lt;br /&gt;
* Фоновый слой: ZOrder = 1.&lt;br /&gt;
* Основной контент: ZOrder = 2.&lt;br /&gt;
* Контекстные виджеты: ZOrder = 3.&lt;br /&gt;
&lt;br /&gt;
==== Прозрачность для действий (ActionTransparency) ====&lt;br /&gt;
'''Тип:''' enum&lt;br /&gt;
&lt;br /&gt;
'''Описание:''' Управляет взаимодействием слоя с пользовательскими действиями (клики, наведения и т.д.)&lt;br /&gt;
&lt;br /&gt;
'''Значения:'''&lt;br /&gt;
&lt;br /&gt;
* '''Непрозрачный''' - слой полностью перехватывает пользовательские действия, элементы под ним недоступны, даже если они видимы.&lt;br /&gt;
* '''Прозрачный''' - пользовательские действия проходят сквозь слой к элементам ниже.&lt;br /&gt;
&lt;br /&gt;
Обратите внимание: если на слое размещается изображение с прозрачной областью, то такие виджеты не позволяют пользователю взаимодействовать с видимыми и размещенными под ним виджетами.&lt;br /&gt;
&lt;br /&gt;
==== Видимость (Visible) ====&lt;br /&gt;
'''Тип:''' bool&lt;br /&gt;
&lt;br /&gt;
'''Описание:''' Определяет видимость всего слоя и всех его дочерних виджетов. При значении false слой и все его содержимое становится невидимым.&lt;br /&gt;
&lt;br /&gt;
'''Применение:''' Временное скрытие виджетов или переключение их видимости.&lt;br /&gt;
&lt;br /&gt;
===Виджет===&lt;br /&gt;
Виджет – элемент визуализации, предназначенный для отображения информации в заданном виде.&lt;br /&gt;
&lt;br /&gt;
===Меню===&lt;br /&gt;
Меню – элемент визуализации, сочетающий в себе несколько виджетов «Кнопка». Используется для более удобного управления проектом (см. Рисунок 24).&lt;br /&gt;
&lt;br /&gt;
Для добавления меню, необходимо в среде разработки назначить [[Универсальная среда разработки#.D0.94.D0.B5.D0.B9.D1.81.D1.82.D0.B2.D0.B8.D0.B5 .C2.AB.D0.9E.D1.82.D0.BE.D0.B1.D1.80.D0.B0.D0.B6.D0.B5.D0.BD.D0.B8.D0.B5 .D0.BC.D0.B5.D0.BD.D1.8E.C2.BB|действие «Отображение меню»]] для кнопки (или любого другого виджета). После добавления действия необходимо выделить его и нажать на кнопку настроек на панели вверху окна действий. Открывшееся окно (см. Рисунок 25) содержит дерево со структурой меню, в который можно добавлять элементы двух типов:&lt;br /&gt;
&lt;br /&gt;
*меню – элемент, который позволяет группировать элементы меню, выводя их в виде раскрывающегося списка. На рисунках 24 и 25 этим элементом являются кнопки «Арочник» и «БПО».&lt;br /&gt;
*элемент меню – элемент, который предоставляет функционал, аналогичный [[Универсальная среда разработки#.D0.92.D0.B8.D0.B4.D0.B6.D0.B5.D1.82 .C2.AB.D0.9A.D0.BD.D0.BE.D0.BF.D0.BA.D0.B0.C2.BB|виджету «Кнопка»]]. Для добавления действия, выполняющегося при нажатии на элемент меню в среде исполнения, необходимо нажать на него ПКМ в дереве структуры меню и выбрать &amp;quot;Создать действие&amp;quot;. На рисунках 24 и 25 этим элементом являются кнопки «Котельная», «Котёл №1», «Котёл №2» и «Котёл №3».&lt;br /&gt;
&lt;br /&gt;
=== Создание многомониторных систем визуализации ===&lt;br /&gt;
AgavaSCADA предоставляет возможность реализации систем визуализации в составе проектов, использующих для отображения информации более одного дисплея.&lt;br /&gt;
&lt;br /&gt;
Для вывода информации в окнах на нескольких дисплеях в проект необходимо внести следующие корректировки относительно проекта, использующего только один дисплей:&lt;br /&gt;
&lt;br /&gt;
# Добавить дополнительные фреймы, чтобы их количество в проекте соответствовало количеству дисплеев. Каждому фрейму назначить порядковый номер, начиная с 1. Фреймы связываются с дисплеями по номеру.&lt;br /&gt;
# Добавить дополнительное окно (или окна, если в исходном фрейме их несколько или дополнительных фреймов больше одного).&lt;br /&gt;
# Добавить в дополнительные фреймы созданные на этапе 2 окна, чтобы повторить структуру основоного фрейма.&lt;br /&gt;
&lt;br /&gt;
Базовая настройка на этом закончена. После запуска такого проекта на двух или более дисплеях должны отображаться созданные окна.&lt;br /&gt;
&lt;br /&gt;
Если в проекте используется навигация по окнам, то необходимо в каждом окне, включенном в фрейм, скорректировать действия, размещаемые на кнопках, меню или друигх виджетах таким образом, чтобы действия открывали окна или загружали композиции в нужном окне.&lt;br /&gt;
&lt;br /&gt;
===Виджеты===&lt;br /&gt;
====Виджет «Текстовая метка»====&lt;br /&gt;
[[Файл:AgavaPLC–Примеры оформления виджетов типа &amp;quot;Текстовая метка&amp;quot;.png|мини|Рисунок 26 – Примеры оформления виджетов типа &amp;quot;Текстовая метка&amp;quot;]]&lt;br /&gt;
Виджет «Текстовая метка» – наиболее часто применяемый виджет, с помощью которого можно реализовать разные способы отображения текстовой информации.&lt;br /&gt;
&lt;br /&gt;
Виджет «Текстовая метка» может использоваться для отображения статичного текста, значений параметров (одного или нескольких) и их комбинаций.&lt;br /&gt;
&lt;br /&gt;
При необходимости отображения значений параметров они указываются в свойстве «Источник». Для задания определенного формата отображения используются спецификаторы формата в стиле языка «Си»:&lt;br /&gt;
&lt;br /&gt;
*%f – значение в виде числа с плавающей точкой;&lt;br /&gt;
* %s – строка;&lt;br /&gt;
*%i – целое число со знаком;&lt;br /&gt;
*%u – целое число без знака;&lt;br /&gt;
* %d – целое число со знаком в десятичной системе исчисления.&lt;br /&gt;
&lt;br /&gt;
Для разных типов свойств необходимо использовать строго определенные для них спецификаторы, с другими спецификаторами значения выводиться не будут.&lt;br /&gt;
&lt;br /&gt;
Для отображения знака «%» необходимо указать его дважды: «%%».&lt;br /&gt;
&lt;br /&gt;
===== Отображение нескольких значений =====&lt;br /&gt;
Одна текстовая метка может использоваться для отображения нескольких значений. Для этого все значения, которые нужно отобразить, указываются в свойстве «Источник», а в свойстве «Текст» указываются последовательно несколько спецификаторов формата соответственно порядку перечисления значений в свойстве «Источник».&lt;br /&gt;
&lt;br /&gt;
Пример: текстовая метка, отображающая текущую позицию в очереди:&lt;br /&gt;
&lt;br /&gt;
* Текст: &amp;lt;code&amp;gt;Позиция %i из %i&amp;lt;/code&amp;gt;&lt;br /&gt;
* Источник: два узла из проекта.&lt;br /&gt;
&lt;br /&gt;
=====Модификаторы спецификаторов формата=====&lt;br /&gt;
&lt;br /&gt;
======Модификатор минимальной ширины поля======&lt;br /&gt;
Целое число, расположенное между знаком % и кодом формата, играет роль модификатора минимальной ширины поля. Если указан модификатор минимальной ширины поля, то, чтобы ширина поля вывода была не меньше указанной минимальной величины, вывод при необходимости будет дополнен пробелами. Если же выводятся строки или числа, которые длиннее указанного минимума, то они все равно будут отображаться полностью. По умолчанию для дополнения используются пробелы. А если для этого надо использовать нули, то перед модификатором ширины поля следует поместить 0. Например, %05i означает, что любое число, количество цифр которого меньше пяти, будет дополнено таким количеством нулей, чтобы состоять из пяти цифр.&lt;br /&gt;
&lt;br /&gt;
Примеры&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Значение&lt;br /&gt;
!Спецификатор формата&lt;br /&gt;
!Выводимое значение&lt;br /&gt;
|-&lt;br /&gt;
|10.123&lt;br /&gt;
|%i&lt;br /&gt;
|10&lt;br /&gt;
|-&lt;br /&gt;
|10.123&lt;br /&gt;
|%d&lt;br /&gt;
|10&lt;br /&gt;
|-&lt;br /&gt;
|10.123&lt;br /&gt;
|%05i&lt;br /&gt;
|00010&lt;br /&gt;
|-&lt;br /&gt;
|10.123&lt;br /&gt;
|%f&lt;br /&gt;
|10.123000&lt;br /&gt;
|-&lt;br /&gt;
|10.123&lt;br /&gt;
|%.1f&lt;br /&gt;
| 10.1&lt;br /&gt;
|-&lt;br /&gt;
|10.123&lt;br /&gt;
|%10f&lt;br /&gt;
|&amp;lt;пробел&amp;gt;10.123000&lt;br /&gt;
|-&lt;br /&gt;
|10.123&lt;br /&gt;
|%012f&lt;br /&gt;
|00010.123000&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
======Модификатор точности======&lt;br /&gt;
Модификатор точности следует за модификатором минимальной ширины поля (если таковой имеется). Он состоит из точки и расположенного за ней целого числа. Значение этого модификатора зависит от типа данных, к которым его применяют.&lt;br /&gt;
&lt;br /&gt;
Когда модификатор точности применяется к данным с плавающей точкой, для преобразования которых используются спецификаторы преобразования %f, %e или %E, то он определяет количество выводимых десятичных разрядов. Например, %10.4f означает, что ширина поля вывода будет не менее 10 символов, причем для десятичных разрядов будет отведено четыре позиции.&lt;br /&gt;
&lt;br /&gt;
Если модификатор точности применяется к %g или %G, то он определяет количество значащих цифр.&lt;br /&gt;
&lt;br /&gt;
Примененный к строкам, модификатор точности определяет максимальную длину поля. Например, %5.7s означает, что длина выводимой строки будет составлять минимум пять и максимум семь символов. Если строка окажется длиннее, чем максимальная длина поля, то конечные символы выводиться не будут.&lt;br /&gt;
&lt;br /&gt;
Если модификатор точности применяется к целым типам, то он определяет минимальное количество цифр, которые будут выведены для каждого из чисел. Чтобы получилось требуемое количество цифр, добавляется некоторое количество ведущих нулей.&lt;br /&gt;
&lt;br /&gt;
Примеры:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Значение&lt;br /&gt;
!Спецификатор формата&lt;br /&gt;
!Выводимое значение&lt;br /&gt;
|-&lt;br /&gt;
|10.123&lt;br /&gt;
|%f&lt;br /&gt;
|10.123000&lt;br /&gt;
|-&lt;br /&gt;
|10.123&lt;br /&gt;
|%.1f&lt;br /&gt;
|10.1&lt;br /&gt;
|-&lt;br /&gt;
|10.123&lt;br /&gt;
|%10.4f&lt;br /&gt;
|&amp;lt;пробел&amp;gt;&amp;lt;пробел&amp;gt;&amp;lt;пробел&amp;gt;10.1230&lt;br /&gt;
|-&lt;br /&gt;
|10.123&lt;br /&gt;
|%010.3f&lt;br /&gt;
|000010.123&lt;br /&gt;
|-&lt;br /&gt;
| Это простая проверка&lt;br /&gt;
|%10.15s&lt;br /&gt;
|Это простая про&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
====Виджет «Условная метка» ====&lt;br /&gt;
[[Файл:AgavaPLC–Список сопоставлений виджета &amp;quot;Условная метка&amp;quot;.png|мини|Рисунок 27 – Список сопоставлений виджета &amp;quot;Условная метка&amp;quot;|ссылка=Файл:AgavaPLC–Список_сопоставлений_виджета_%22Условная_метка%22.png]]&lt;br /&gt;
Виджет «Условная метка» позволяет изменять выводимую строку в соответствии с изменениями привязанной к ней переменной.&lt;br /&gt;
&lt;br /&gt;
Задать соответствие текста необходимому условию можно в свойстве «Список сопоставлений».&lt;br /&gt;
&lt;br /&gt;
==== Виджет «Изображение»====&lt;br /&gt;
Виджет «Изображение» предназначен для отображения на окнах статичных изображений форматов png, gif, jpg, bmp или анимированных изображений в формате gif. Отображаемая картинка выбирается в разделе «Оформление» - «Изображение». Она должна находиться в папке проекта.&lt;br /&gt;
&lt;br /&gt;
====Виджет «Условное изображение»====&lt;br /&gt;
[[Файл:AgavaPLC–Список сопоставлений виджета &amp;quot;Условное изображение&amp;quot;.png|мини|Рисунок 28 – Список сопоставлений виджета &amp;quot;Условное изображение&amp;quot;|ссылка=Файл:AgavaPLC–Список_сопоставлений_виджета_%22Условное_изображение%22.png]]&lt;br /&gt;
Виджет «Условное изображение» позволяет изменять отображаемое изображение в соответствии с изменениями привязанной к нему переменной.&lt;br /&gt;
&lt;br /&gt;
Задать соответствие изображения необходимому условию можно в свойстве «Список сопоставлений».&lt;br /&gt;
&lt;br /&gt;
====Виджет «Движущееся изображение»====&lt;br /&gt;
Виджет предназначен для отображения на окнах изображений, перемещающихся в пределах области виджета. В основном используются на экране спящего режима.&lt;br /&gt;
&lt;br /&gt;
Отображаемая картинка выбирается в разделе «Оформление» - «Изображение». Она должна находиться в папке проекта.&lt;br /&gt;
&lt;br /&gt;
====Виджет «Кнопка»====&lt;br /&gt;
Виджет «Кнопка» предназначен для реализации функций управления:&lt;br /&gt;
&lt;br /&gt;
*ввод данных;&lt;br /&gt;
*передача управляющих воздействий;&lt;br /&gt;
* смена режима работы АРМ или иного устройства, исполняющего проект.&lt;br /&gt;
&lt;br /&gt;
Выполнение всех функций виджета обеспечивается с помощью узлов типа «Действие», добавляемых в соответствующее свойство (см. раздел [[#Действия]]).&lt;br /&gt;
&lt;br /&gt;
====Виджет «Гистограмма»====&lt;br /&gt;
[[Файл:AgavaPLC–Виджет &amp;quot;Гистограмма&amp;quot;.png|мини|Рисунок 29 – Виджет &amp;quot;Гистограмма&amp;quot;|ссылка=Файл:AgavaPLC–Виджет_%22Гистограмма%22.png]]&lt;br /&gt;
Виджет предназначен для отображения значений сигналов в виде столбчатой диаграммы.&lt;br /&gt;
&lt;br /&gt;
Виджету необходимо задать источник (регистр/сигнал, с которого он будет получать данные), а также минимальное и максимальное значения.&lt;br /&gt;
&lt;br /&gt;
====Виджет «Исторический график»====&lt;br /&gt;
Виджет «Исторический график» предназначен для отображения графиков параметров на двухкоординатной области изображения с привязкой к осям времени и значений.&lt;br /&gt;
&lt;br /&gt;
Виджет может работать с данными, архивируемыми в БД, и напрямую с сигналами, значения которых вычисляются в ходе работы.  &lt;br /&gt;
&lt;br /&gt;
При работе с архивируемыми данными интервал обновления графика зависит от режима выдачи значения у базы данных: при выборе сохраняемых в БД он будет соответствовать интервалу архивирования, а при сохраненных в БД - интервалу сохранения БД на диск. Независимо от режима выдачи, график не может обновляться меньше чем за 300 мс.&lt;br /&gt;
&lt;br /&gt;
При работе напрямую с сигналами график обновляется при изменении значения сигнала, но также не чаще чем раз в 300 мс.&lt;br /&gt;
[[Файл:AgavaPLC–Экран «Архив» с виджетом «Исторический график».png|мини|Рисунок 30 – Виджет «Исторический график». Области кнопок-пиктограмм. В нижней части отображена легенда]]&lt;br /&gt;
Виджет «Исторический график» состоит из нескольких областей:&lt;br /&gt;
&lt;br /&gt;
*область осей Х, Y;&lt;br /&gt;
*область легенды, содержащей список кривых и их параметры (цвет кривой, наименование кривой, текущее значение, время последнего зарегистрированного значения);&lt;br /&gt;
*область вывода данных.&lt;br /&gt;
&lt;br /&gt;
На виджете имеются несколько областей, содержащих кнопки-пиктограммы управления внешним видом графика (см. Рисунок 28):&lt;br /&gt;
&lt;br /&gt;
#область пиктограмм графика;&lt;br /&gt;
#область пиктограмм оси времени (X);&lt;br /&gt;
#область пиктограмм оси значений (Y);&lt;br /&gt;
#область легенды.&lt;br /&gt;
&lt;br /&gt;
В области пиктограмм графика слева направо расположены следующие кнопки-пиктограммы:&lt;br /&gt;
&lt;br /&gt;
* кнопка переключения режима отображения точек на всех кривых;&lt;br /&gt;
* кнопка переключения видимости легенды;&lt;br /&gt;
*кнопка включения режима визирной линии.&lt;br /&gt;
&lt;br /&gt;
В области пиктограмм оси времени (X) слева направо расположены следующие кнопки-пиктограммы:&lt;br /&gt;
&lt;br /&gt;
*кнопка открытия окна выбора интервала времени для оси Х, текст кнопки отображает текущий выбранный интервал, например: 5М – 5 минут, 6Ч – 6 часов, 30М – 30 минут;&lt;br /&gt;
*кнопка-индикатор включения следящего режима.&lt;br /&gt;
&lt;br /&gt;
В области пиктограмм оси значений (Y) расположена кнопка-пиктограмма «A» – кнопка переключения режима автоматического масштабирования значений.&lt;br /&gt;
&lt;br /&gt;
=====Легенда=====&lt;br /&gt;
[[Файл:AgavaPLC–Легенда с четырьмя выключенными параметрами.png|мини|Рисунок 31 – Легенда с четырьмя выключенными параметрами]]&lt;br /&gt;
Легенда – специальная область в нижней части экрана архива, предназначенная для отображения параметров (наименование, текущее значение и т. д.) выводимых графиков в виде таблицы. Для ознакомления с примерным видом легенды см. Рисунок 31. Информация о каждом сигнале в легенде выводится в несколько колонок:&lt;br /&gt;
&lt;br /&gt;
*«Цвет» – индицирует цвет, которым выводится соответствующая кривая на графике, колонка «Цвет» позволяет нажатием переключать видимость соответствующей кривой на графике (см. Рисунок 29). Также в колонке &amp;quot;Цвет&amp;quot; отображается номер пера, которым выводится кривая параметра на графике;&lt;br /&gt;
* «Имя» («Наименование») – содержит наименование параметра;&lt;br /&gt;
*«Время» – содержит время последнего зарегистрированного значения параметра;&lt;br /&gt;
*«Значение» – содержит последнее зарегистрированное значение параметра.&lt;br /&gt;
&lt;br /&gt;
=====Режимы просмотра графиков=====&lt;br /&gt;
Пользователю доступно два режима просмотра графиков:&lt;br /&gt;
&lt;br /&gt;
*следящий режим;&lt;br /&gt;
*режим просмотра истории.&lt;br /&gt;
&lt;br /&gt;
В следящем режиме на графике всегда отображаются актуальные значения параметров, тренд периодически дочитывает поступившие данные из базы и обновляет графики. &lt;br /&gt;
&lt;br /&gt;
В режиме просмотра истории на графике отображаются исторические значения параметров. Просмотр истории технологического процесса осуществляется с помощью кнопок перемещения по осям и кнопок изменения масштаба.&lt;br /&gt;
&lt;br /&gt;
Режим просмотра истории включается автоматически при прокрутке графика назад по времени.&lt;br /&gt;
&lt;br /&gt;
=====Визирная линия=====&lt;br /&gt;
[[Файл:AgavaPLC–График в режиме просмотра истории с установленной визирной линией.png|мини|Рисунок 32 – График в режиме просмотра истории с установленной визирной линией]]&lt;br /&gt;
Для просмотра значений параметров в нужный момент времени служит визирная линия, отображаемая на графике как вертикальная линия.&lt;br /&gt;
&lt;br /&gt;
При щелчке левой кнопкой мыши (ЛКМ) в области графиков визирная линия будет отображена в выбранном месте графика.&lt;br /&gt;
&lt;br /&gt;
В точке пересечения визирной линии и кривых параметров отображаются значения этих параметров. Также в нижней части области графиков, возле оси времени, визирная линия отображает время.&lt;br /&gt;
&lt;br /&gt;
====Виджет «График кусочно-линейной функции»====&lt;br /&gt;
Виджет предназначен для отображения графика зависимости двух параметров, расположенном на осях X и Y.&lt;br /&gt;
[[Файл:AgavaPLC–Виджет «График кусочно-линейной функции». Области кнопок-пиктограмм..png|мини|Рисунок 33 – Виджет «График кусочно-линейной функции». Области кнопок-пиктограмм.]]&lt;br /&gt;
Виджет состоит из нескольких областей:&lt;br /&gt;
&lt;br /&gt;
*область осей Х, Y;&lt;br /&gt;
*область легенды, содержащей список кривых и их параметры (цвет кривой, наименование кривой, текущее значение, время последнего зарегистрированного значения);&lt;br /&gt;
*область вывода графика.&lt;br /&gt;
&lt;br /&gt;
На области вывода графика виджета имеются несколько областей, содержащих кнопки-пиктограммы управления внешним видом графика (см. Рисунок 33):&lt;br /&gt;
&lt;br /&gt;
#Область пиктограмм графика.&lt;br /&gt;
#Область пиктограмм оси первого параметра (X).&lt;br /&gt;
#Область пиктограмм оси второго параметра (Y).&lt;br /&gt;
&lt;br /&gt;
В области пиктограмм графика расположены следующие кнопки-пиктограммы:&lt;br /&gt;
&lt;br /&gt;
*кнопка переключения режима отображения точек на всех кривых;&lt;br /&gt;
*кнопка переключения видимости легенды;&lt;br /&gt;
*кнопка включения режима визирной линии.&lt;br /&gt;
&lt;br /&gt;
В области пиктограмм оси первого (X) и второго (Y) параметров расположены кнопки-пиктограммы «А» – кнопка переключения режима автоматического масштабирования значений.[[Файл:AgavaPLC–Виджет &amp;quot;Список событий&amp;quot;.png|мини|Рисунок 34 – Виджет &amp;quot;Список событий&amp;quot;|ссылка=Файл:AgavaPLC–Виджет_%22Список_событий%22.png]]&lt;br /&gt;
====Виджет «Список событий»====&lt;br /&gt;
[[Файл:AgavaPLC–Окно выбора интервала.png|мини|Рисунок 35 – Окно выбора интервала]]Виджет предназначен для отображения регистрируемых событий в работе.&lt;br /&gt;
&lt;br /&gt;
В верхней части виджета расположена панель управления (1).&lt;br /&gt;
&lt;br /&gt;
Панель управления содержит органы управления журналом:&lt;br /&gt;
&lt;br /&gt;
*кнопка отображения фильтра событий;&lt;br /&gt;
*кнопка включения следящего режима журнала;&lt;br /&gt;
*кнопка изменения интервала на один день назад;&lt;br /&gt;
*кнопка-индикатор выбора интервала, за который отображаются события;&lt;br /&gt;
*кнопка изменения интервала на один день вперед;&lt;br /&gt;
*кнопка вызова окна со списком активных тревог.&lt;br /&gt;
&lt;br /&gt;
Ниже панели управления, в основном поле экрана, расположена таблица, содержащая зарегистрированные события.&lt;br /&gt;
&lt;br /&gt;
Заголовок таблицы позволяет изменять порядок столбцов и включать сортировку по столбцам. Например, возможно включение сортировки событий сначала по времени, затем по группе. Заголовок таблицы имеет возможность отключения / включения отображения любого столбца.&lt;br /&gt;
&lt;br /&gt;
При большом количестве записей в правой части таблицы появляется полоса прокрутки, позволяющая пролистывать список событий.&lt;br /&gt;
&lt;br /&gt;
Нажатие на кнопку-индикатор выбора интервала вызывает окно выбора интервала (см. Рисунок 35):[[Файл:AgavaPLC–Окно &amp;quot;Фильтр&amp;quot;.png|мини|Рисунок 36 – Окно &amp;quot;Фильтр&amp;quot;|ссылка=Файл:AgavaPLC–Окно_%22Фильтр%22.png]]После выбора нужного интервала для сохранения выбора необходимо нажать кнопку «ОК». После сохранения будут отображены зарегистрированные события за выбранный интервал.&lt;br /&gt;
Нажатие на кнопку отображения окна фильтра вызывает соответствующее окно. Окно фильтра позволяет изменить содержимое основного окна журнала событий путем выбора групп и подгрупп событий, перечисленных в окне фильтра (см. Рисунок 36).&lt;br /&gt;
&lt;br /&gt;
После выбора нужных групп и подгрупп для сохранения выбора необходимо нажать кнопку «ОК». После сохранения будут отображены зарегистрированные события, принадлежащих выбранным группам.&lt;br /&gt;
&lt;br /&gt;
====Виджет «Ввод значения»====&lt;br /&gt;
Виджет «Ввод значения» предназначен для отображения значения привязанного сигнала и его редактирования.&lt;br /&gt;
[[Файл:AgavaPLC–Виджет «Ввод значения» с отображением экранной цифровой клавиатуры.png|мини|Рисунок 37 – Виджет «Ввод значения» с отображением экранной цифровой клавиатуры|212x212пкс]]&lt;br /&gt;
После выбора узла для чтения/записи и соответствующего типа значения необходимо выбрать нужный тип ввода в разделе «Оформление».&lt;br /&gt;
&lt;br /&gt;
Доступны следующие типы ввода:&lt;br /&gt;
&lt;br /&gt;
*кнопки изменения – при нажатии на виджет появляются кнопки увеличения и уменьшения на заданный шаг изменения;&lt;br /&gt;
*кнопка редактирования – при нажатии на виджет появляется кнопка, при клике на которую открывается экранная цифровая клавиатура;&lt;br /&gt;
&lt;br /&gt;
Виджет имеет возможность проверки вводимых значений, при активации которой запись будет осуществляться только тогда, когда записываемое значение будет находиться в диапазоне между заданными минимальным и максимальными значениями.&lt;br /&gt;
&lt;br /&gt;
====Виджет «Выбор значения из списка»====&lt;br /&gt;
[[Файл:AgavaPLC–Виджет «Выбор значения из списка».png|мини|Рисунок 38 – Виджет «Выбор значения из списка»]]&lt;br /&gt;
Виджет «Выбор значения из списка» предназначен для отображения значения привязанного сигнала и его изменения в удобном для пользователя текстовом виде (см. Рисунок 37).&lt;br /&gt;
&lt;br /&gt;
С помощью свойства «Список сопоставлений» задается соответствие между значением сигнала и выводимой в виджете строкой.&lt;br /&gt;
&lt;br /&gt;
При нажатии на кнопку в правой части виджета отображается список всех сопоставлений. При выборе нужного элемента в списке в установленный узел производится запись нового значения.&lt;br /&gt;
&lt;br /&gt;
====Виджет «Флаг»====&lt;br /&gt;
[[Файл:AgavaPLC–Варианты внешнего вида виджета «Флаг».png|мини|Рисунок 39 – Варианты внешнего вида виджета «Флаг»]]&lt;br /&gt;
Виджет «Флаг» предназначен для отображения значения и изменения булевой переменной (true/false). Состояние true отображается в виде галочки (см. Рисунок 38).&lt;br /&gt;
&lt;br /&gt;
При нажатии на виджет значение переменной изменяется на противоположное.&lt;br /&gt;
&lt;br /&gt;
В случае, если флаг необходимо использовать только для отображения информации, поставьте галочку в свойстве «Отключен»&lt;br /&gt;
&lt;br /&gt;
====Виджет «Отчет»====&lt;br /&gt;
[[Файл:AgavaPLC–Виджет «Отчет» в режиме отображения сформированного отчета.png|мини|Рисунок 40 – Виджет «Отчет» в режиме отображения сформированного отчета]]&lt;br /&gt;
Виджет «Отчет» предназначен для формирования отчетов по заранее спроектированному макету.&lt;br /&gt;
&lt;br /&gt;
Подробный порядок создания и редактирования отчетов приведен в разделе [[#Отчеты]].&lt;br /&gt;
[[Файл:AgavaPLC–Окно выбора интервала отчета.png|мини|Рисунок 41 – Окно выбора интервала отчета]]&lt;br /&gt;
В верхней части виджета размещена панель управления, содержащая кнопки вызова команд:&lt;br /&gt;
&lt;br /&gt;
* печать сформированного отчета на установленном в системе принтере;&lt;br /&gt;
*сохранение сформированного отчета в файле формата PDF;&lt;br /&gt;
*переход к предыдущей странице отчета;&lt;br /&gt;
*переход к следующей странице отчета;&lt;br /&gt;
*масштабирование экрана по ширине листа отчета;&lt;br /&gt;
*масштабирование экрана по высоте листа отчета.&lt;br /&gt;
&lt;br /&gt;
При формировании отчета для изменения интервала времени, за который будет формироваться отчет, необходимо на панели управления щелкнуть кнопку выбора интервала (на ней отображается текущий выбранный интервал, например, «Начало суток без смещения – Конец суток без смещения»). Далее появится окно «Интервал», в котором можно выбрать начало и конец интервала (см. Рисунок 41). &lt;br /&gt;
&lt;br /&gt;
В качестве начала и конца интервала можно выбрать как конкретную дату по календарю, так относительную, например, «Начало дня», &amp;quot;Конец недели&amp;quot;. После выбора желаемого интервала необходимо нажать кнопку «ОК».&lt;br /&gt;
&lt;br /&gt;
Выбранный интервал отобразится на панели управления отчетом. Для формирования отчета за выбранный интервал необходимо нажать кнопку «Сформировать отчет». Через некоторое время, после загрузки данных из БД и их обработки, экран обновится и сформированный отчет за выбранный интервал будет отображен.&lt;br /&gt;
&lt;br /&gt;
{{Шаблон:Действия AgavaSCADA/AgavaPLC}}&lt;br /&gt;
&lt;br /&gt;
==Система тревог==&lt;br /&gt;
Система тревог предназначена для оповещения пользователя об обнаруженных нарушениях.&lt;br /&gt;
&lt;br /&gt;
Система содержит два типа узлов:&lt;br /&gt;
&lt;br /&gt;
*Группа событий.&lt;br /&gt;
*Контроллер событий.&lt;br /&gt;
&lt;br /&gt;
===Группа событий===&lt;br /&gt;
Группа событий – узел, предназначенный для взаимодействия с виджетом «Список событий». Группы событий позволяют группировать события по какому-то признаку, например по уровню тревоги (авария, предупреждение, квитирование и т.д.), технологическому участку и т.д.&lt;br /&gt;
&lt;br /&gt;
Для каждой группы можно выбрать свой цвет шрифта и фона, которые будут использоваться для вывода событий, принадлежащих этой группе в виджете &amp;quot;Список событий&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
В свойстве «Описание» группы событий указывается текст, который будет отображаться в фильтре списка событий.&lt;br /&gt;
&lt;br /&gt;
===Монитор событий===&lt;br /&gt;
Монитор событий (ранее - Контроллер событий) – узел, реализующий логику проверки соответствия выбранных сигналов контролируемым условиям. Контроллеры событий выполняют всю работу по проверке значений контролируемых параметров и выполнению соответствующих действий.&lt;br /&gt;
&lt;br /&gt;
Монитор событий проверяет значения заданных узлов на соответствие заданным условиям и при их совпадении выполняет заданные действия.&lt;br /&gt;
&lt;br /&gt;
В качестве действий можно указать не только действие &amp;quot;Создание события&amp;quot;, но и другие (см. раздел [[#Действия]]).&lt;br /&gt;
[[Файл:AgavaPLC-Cистема тревог.png|мини|Cистема тревог]]&lt;br /&gt;
&lt;br /&gt;
===Порядок настройки системы===&lt;br /&gt;
Порядок настройки системы тревог следующий:&lt;br /&gt;
#Добавить в проект систему тревог. Для этого нажать ПКМ по узлу «Станция» в дереве проекта, затем выбрать «Добавить узел» - «Система» - «Система тревог».&lt;br /&gt;
#Добавить узел «События» в систему тревог. Для этого нажать ПКМ по системе тревог в дереве проекта, затем выбрать «Добавить узел» - «Группа» - «События». При необходимости настроить цвет шрифта и фона, которые будут отображаться у события в окне тревог или журнале.&lt;br /&gt;
#Добавить нужные [[Узлы проекта AgavaSCADA/AgavaPLC#.D0.93.D1.80.D1.83.D0.BF.D0.BF.D0.B0 .D1.81.D0.BE.D0.B1.D1.8B.D1.82.D0.B8.D0.B9|группы событий]] в узел «События». Для этого нажать ПКМ по узлу «События» в дереве проекта, затем выбрать «Добавить узел» - «Группа событий».&lt;br /&gt;
#Добавить [[Узлы проекта AgavaSCADA/AgavaPLC#.D0.9A.D0.BE.D0.BD.D1.82.D1.80.D0.BE.D0.BB.D0.BB.D0.B5.D1.80 .D1.81.D0.BE.D0.B1.D1.8B.D1.82.D0.B8.D0.B9|контроллеры событий]] в систему тревог. Для этого нажать ПКМ по системе тревог в дереве проекта, затем выбрать «Добавить узел» - «Контроллер событий».&lt;br /&gt;
#Добавить в свойство «Сигналы» контроллеров событий узлы, состояние которых необходимо контролировать.&lt;br /&gt;
#Задать для этих узлов контролируемые условия в соответствующем свойстве контроллера событий.&lt;br /&gt;
#Настроить [[Узлы проекта AgavaSCADA/AgavaPLC#.D0.94.D0.B5.D0.B9.D1.81.D1.82.D0.B2.D0.B8.D1.8F|действия]], которые будут выполняться при выполнении контролируемого условия. Для вывода аварий, предупреждений или информационных сообщений необходимо добавить действие «Создание события».&lt;br /&gt;
# Настроить действие «Создание события». В его свойстве «Группа событий» указать группу из созданных в пункте 2. Ввести тексты сообщения активации и деактивации (при необходимости), указать уровень события. Теперь, при срабатывании контролируемого условия, будет появляться окно тревог с сообщением активации.&lt;br /&gt;
&lt;br /&gt;
== Система архивирования==&lt;br /&gt;
Система архивирования предназначена для управления процессом сохранения значений параметров в базы данных. Параметры, сохраненные в базу данных, могут использоваться для построения графиков параметров и генерации отчетов.&lt;br /&gt;
&lt;br /&gt;
Архивация параметров производится с помощью архиваторов. Архиваторы SQLite и PostgreSQL могут выполнять [[Узлы проекта AgavaSCADA/AgavaPLC#Прореживание данных|прореживание данных]].&lt;br /&gt;
[[Файл:AgavaPLC-Настройка архиватора.png|мини|505x505пкс|Настройка архиватора]]&lt;br /&gt;
&lt;br /&gt;
===Порядок настройки системы===&lt;br /&gt;
Для сохранения истории изменения значений параметров в БД необходимо выполнить следующие действия: &lt;br /&gt;
&lt;br /&gt;
#Добавить в проект систему архивации. Для этого нажать ПКМ по узлу «Станция» в дереве проекта, затем выбрать «Добавить узел» - «Система» - «Система архивации».&lt;br /&gt;
#Добавить в систему архивации архиватор. Для этого нажать ПКМ по узлу «Система архивации» в дереве проекта, затем выбрать «Добавить узел» - «Архиватор в БД SQLite».&lt;br /&gt;
#Настроить параметры архиватора, такие как: путь до файла БД, интервал архивирования (как часто система архивации будет опрашивать значение параметра), интервал сохранения БД на диск (как часто эти значения будут записываться в постоянную память), разбиение БД (будет ли система архивации создавать новый файл БД каждые сутки), период хранения и режим выдачи значений для построения графика (сохраняемые значения будут обновляться с частотой интервала архивирования, а сохраненные - с частотой интервала сохранения).&lt;br /&gt;
#Добавить параметры в коннекторы база данных. Для этого необходимо открыть свойство архиватора «Коннекторы БД», выбрать «Создать новый» - «Коннектор БД». После этого нужно нажать по добавленному коннектору, открыть его свойство «Сигналы» и добавить параметр, значение которого необходимо сохранять в БД.&lt;br /&gt;
&lt;br /&gt;
=== Архиватор SQLite===&lt;br /&gt;
Архиватор SQLite предназначен для сохранения значений параметров в БД формата SQLite.&lt;br /&gt;
&lt;br /&gt;
Для извлечения и просмотра баз данных формата SQLite с устройств может использоваться программа «[[Архиватор]]».&lt;br /&gt;
&lt;br /&gt;
====Свойства узла &amp;quot;Архиватор SQLite&amp;quot;====&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Наименование свойства&lt;br /&gt;
!Идентификатор&lt;br /&gt;
!Тип&lt;br /&gt;
!Доступ&lt;br /&gt;
!Описание&lt;br /&gt;
|-&lt;br /&gt;
|Путь до файла БД&lt;br /&gt;
|FilePath&lt;br /&gt;
|STRING&lt;br /&gt;
|Чтение / запись&lt;br /&gt;
|Путь до файла БД. Абсолютный или относительный.&lt;br /&gt;
|-&lt;br /&gt;
|Интервал архивирования&lt;br /&gt;
|Interval&lt;br /&gt;
|INT&lt;br /&gt;
|Чтение / запись&lt;br /&gt;
|Интервал архивирования, мс.&lt;br /&gt;
|-&lt;br /&gt;
|Период хранения&lt;br /&gt;
|Retention&lt;br /&gt;
|INT&lt;br /&gt;
|Чтение / запись&lt;br /&gt;
|Период хранения, дней.&lt;br /&gt;
|-&lt;br /&gt;
|Разбиение БД&lt;br /&gt;
|DBSplitting&lt;br /&gt;
|BOOL&lt;br /&gt;
|Чтение / запись&lt;br /&gt;
|Разбиение БД на файлы. При включении база данных будет разделяться на отдельные файлы, содержащие данные за одни сутки.&lt;br /&gt;
|-&lt;br /&gt;
|Интервал сохранения БД на диск&lt;br /&gt;
|StoringInterval&lt;br /&gt;
|INT&lt;br /&gt;
|Чтение / запись&lt;br /&gt;
|Интервал сохранения БД на диск, мс.&lt;br /&gt;
|-&lt;br /&gt;
|Режим выдачи значений&lt;br /&gt;
|ValueReturnMode&lt;br /&gt;
|ENUM&lt;br /&gt;
|Чтение / запись&lt;br /&gt;
|Режим выдачи значений. Режим &amp;quot;Сохраняемые в БД&amp;quot; — данные выдаются сразу после получения архиватором, возможно до фактического сохранения в БД. Режим &amp;quot;Сохраненные в БД&amp;quot; — данные выдаются только после фактической записи в БД на диск.&lt;br /&gt;
|-&lt;br /&gt;
|Коннекторы БД&lt;br /&gt;
|Signals&lt;br /&gt;
|NODESARRAY&lt;br /&gt;
|Чтение / запись&lt;br /&gt;
|Список коннекторов, содержащих сигналы для архивирования.&lt;br /&gt;
|-&lt;br /&gt;
|Текущий размер БД&lt;br /&gt;
|DBCurrentSize&lt;br /&gt;
|INT&lt;br /&gt;
|Только чтение&lt;br /&gt;
|Текущий размер БД, Мб.&lt;br /&gt;
|-&lt;br /&gt;
|Максимальный размер БД&lt;br /&gt;
|DBMaxSize&lt;br /&gt;
|INT&lt;br /&gt;
|Только чтение&lt;br /&gt;
|Максимальный размер БД, Мб.&lt;br /&gt;
|-&lt;br /&gt;
|Состояние БД&lt;br /&gt;
|DBStatus&lt;br /&gt;
|INT&lt;br /&gt;
|Только чтение&lt;br /&gt;
|Текущий статус операций SQLite (числовой код). Для расшифровки см. раздел [[Узлы проекта AgavaSCADA/AgavaPLC#Статусы операций SQLite|Статусы операций SQLite]].&lt;br /&gt;
|-&lt;br /&gt;
|Включить прореживание&lt;br /&gt;
|ThinningEnabled&lt;br /&gt;
|BOOL&lt;br /&gt;
|Чтение / запись&lt;br /&gt;
|Включение режима прореживания архива. При включении применяется фильтрация по изменению значения.&lt;br /&gt;
|-&lt;br /&gt;
|Тип допуска&lt;br /&gt;
|ToleranceType&lt;br /&gt;
|ENUM&lt;br /&gt;
|Чтение / запись&lt;br /&gt;
|Тип допуска для прореживания. Возможные значения: &amp;quot;[[Узлы проекта AgavaSCADA/AgavaPLC#Абсолютный допуск|Абсолютные единицы]]&amp;quot;, &amp;quot;[[Узлы проекта AgavaSCADA/AgavaPLC#Процент от последнего значения|Процент от последнего значения]]&amp;quot;, &amp;quot;[[Узлы проекта AgavaSCADA/AgavaPLC#Процент от среднего N последних|Процент от среднего значения]]&amp;quot; и &amp;quot;[[Узлы проекта AgavaSCADA/AgavaPLC#Процент от среднего по временному окну|Процент от среднего значения (окно по времени)]]&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
|Допуск&lt;br /&gt;
|ThinningTolerance&lt;br /&gt;
|FLOAT&lt;br /&gt;
|Чтение / запись&lt;br /&gt;
|Величина допуска: в абсолютных единицах для режима «Абсолютные единицы», в процентах для режимов «Процент от…».&lt;br /&gt;
|-&lt;br /&gt;
|Период обязательной записи (мс)&lt;br /&gt;
|MandatoryPeriod&lt;br /&gt;
|UINT&lt;br /&gt;
|Чтение / запись&lt;br /&gt;
|Максимальный интервал между записями данных в архив, даже если значение не изменилось.&lt;br /&gt;
|-&lt;br /&gt;
|Размер окна среднего (N)&lt;br /&gt;
|AverageWindowN&lt;br /&gt;
|UINT&lt;br /&gt;
|Чтение / запись&lt;br /&gt;
|Количество последних значений для расчёта среднего. Используется только в режиме «Процент от среднего значения». В остальных режимах игнорируется.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== Статусы операций SQLite ====&lt;br /&gt;
В ходе работы SQLite возвращает статус выполнения операций в виде целочисленных значений. Далее приведена расшифровка этих кодов и возможные пути разрешения ошибок.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Код&lt;br /&gt;
!Расшифровка&lt;br /&gt;
!Что предпринять чтобы починить?&lt;br /&gt;
|-&lt;br /&gt;
|'''0'''&lt;br /&gt;
|Операция выполнена успешно.&lt;br /&gt;
|Не ошибка. Действий не требуется.&lt;br /&gt;
|-&lt;br /&gt;
|'''1'''&lt;br /&gt;
|Общая ошибка выполнения операции.&lt;br /&gt;
|Повторите операцию. Проверьте доступность пути к базе и прав доступа, наличие свободного места на диске, отсутствие блокировки антивирусом/резервным копированием. Перезапустите приложение.&lt;br /&gt;
|-&lt;br /&gt;
|'''2'''&lt;br /&gt;
|Внутренняя ошибка SQLite (ошибка логики).&lt;br /&gt;
|Перезапустите приложение (при необходимости — ПК). Убедитесь, что не запущено несколько копий программы.&lt;br /&gt;
|-&lt;br /&gt;
|'''3'''&lt;br /&gt;
|Недостаточно прав для доступа к файлу или базе данных.&lt;br /&gt;
|Проверьте, что у пользователя или службы, от имени которой работает программа, есть разрешение на чтение и запись в каталог базы данных. Если база на сетевом диске — убедитесь, что доступ не заблокирован.&lt;br /&gt;
|-&lt;br /&gt;
|'''4'''&lt;br /&gt;
|Операция прервана внутренним процессом.&lt;br /&gt;
|Обычно это означает, что выполнение запроса было остановлено из-за внутреннего условия или сигнала прерывания. Повторите операцию. Если ошибка повторяется — перезапустите программу.&lt;br /&gt;
|-&lt;br /&gt;
|'''5'''&lt;br /&gt;
|Файл базы данных удерживается другой программой/процессом.&lt;br /&gt;
|Подождите 5–30 секунд и повторите операцию. Закройте другие копии программы/станции, отчёты, резервное копирование, антивирусное сканирование. Если база на сетевом диске — убедитесь, что её не открывают с других машин.&lt;br /&gt;
|-&lt;br /&gt;
|'''6'''&lt;br /&gt;
|Заблокирована таблица внутри базы.&lt;br /&gt;
|Дождитесь завершения текущей операции в программе. Закройте окна/отчёты, которые используют ту же таблицу. Если запущено несколько экземпляров на одной станции — оставьте один. Перезапустите программу.&lt;br /&gt;
|-&lt;br /&gt;
|'''7'''&lt;br /&gt;
|Недостаточно оперативной памяти.&lt;br /&gt;
|Закройте лишние приложения/тяжёлые отчёты и повторите. Перезапустите программу или ПК. Убедитесь, что хватает ОЗУ и места под файл подкачки. При систематическом повторении — используйте машину с большим объёмом памяти.&lt;br /&gt;
|-&lt;br /&gt;
|'''8'''&lt;br /&gt;
|Попытка записи в базу «только для чтения».&lt;br /&gt;
|Снимите атрибут «Только чтение» с файла .db и каталога. Проверьте права на запись (локально/на сетевой шаре). Убедитесь, что диск/том не смонтирован как «только чтение» и в настройках программы не выбран режим «только чтение».&lt;br /&gt;
|-&lt;br /&gt;
|'''9'''&lt;br /&gt;
|Операция была прервана системой/другим процессом.&lt;br /&gt;
|Повторите операцию и дождитесь завершения. Не закрывайте окно и не переключайте станцию во время выполнения. Убедитесь, что на станции не идут параллельно резервное копирование/антивирусное сканирование. Перезапустите приложение (при необходимости — ПК). Если повторяется — сохраните лог и время сбоя и обратитесь в поддержку.&lt;br /&gt;
|-&lt;br /&gt;
|'''10'''&lt;br /&gt;
|Ошибка чтения/записи на диск.&lt;br /&gt;
|Проверьте свободное место и доступ к диску; исключите блокировку антивирусом; проверьте доступность сетевого пути.&lt;br /&gt;
|-&lt;br /&gt;
|'''11'''&lt;br /&gt;
|Файл базы повреждён.&lt;br /&gt;
|Сделайте копию файла; восстановите из резервной копии. Если её нет — переименуйте/удалите базу (создастся заново; история будет потеряна).&lt;br /&gt;
|-&lt;br /&gt;
|'''12'''&lt;br /&gt;
|Запрошена неподдерживаемая низкоуровневая операция хранения.&lt;br /&gt;
|Если работа продолжается — действий не требуется. Если операция с базой данных не выполняется: перезапустите приложение; проверьте доступность диска/сетевого пути; по возможности временно перенесите базу на локальный диск.&lt;br /&gt;
|-&lt;br /&gt;
|'''13'''&lt;br /&gt;
|На диске закончилось место.&lt;br /&gt;
|Освободите место; уменьшите период хранения; включите разбиение БД на файлы.&lt;br /&gt;
|-&lt;br /&gt;
|'''14'''&lt;br /&gt;
|Не удаётся открыть файл базы.&lt;br /&gt;
|Проверьте путь и существование папки; права доступа; при необходимости укажите новый путь.&lt;br /&gt;
|-&lt;br /&gt;
|'''15'''&lt;br /&gt;
|Ошибка протокола блокировок (нарушен порядок совместного доступа).&lt;br /&gt;
|Закройте все окна/станции, которые используют базу. Подождите 30–60 секунд и запустите снова. Убедитесь, что не идут резервное копирование/антивирусное сканирование. Если база доступна по сети — временно скопируйте её на локальный диск и проверьте работу.&lt;br /&gt;
|-&lt;br /&gt;
|'''16'''&lt;br /&gt;
|Внутренняя ошибка SQLite (служебный код).&lt;br /&gt;
|Перезапустите приложение.&lt;br /&gt;
|-&lt;br /&gt;
|'''17'''&lt;br /&gt;
|Изменилась структура базы во время работы.&lt;br /&gt;
|Закройте другие экземпляры/станции, которые могли менять структуру. Перезапустите приложение. Если база обновлялась — дождитесь завершения обновления.&lt;br /&gt;
|-&lt;br /&gt;
|'''18'''&lt;br /&gt;
|Слишком большой блок данных.&lt;br /&gt;
|Уменьшите размер добавляемых данных.&lt;br /&gt;
|-&lt;br /&gt;
|'''19'''&lt;br /&gt;
|Нарушено ограничение данных (дубликат, пустое обязательное поле и т.п.).&lt;br /&gt;
|Проверьте вводимые значения: уникальные имена/ID, заполнение обязательных полей, корректные ссылки на объекты. Исправьте данные и повторите. Если источник данных внешний — исправьте файл/настройки импорта.&lt;br /&gt;
|-&lt;br /&gt;
|'''20'''&lt;br /&gt;
|Несовместимый тип данных (текст вместо числа и т.п.).&lt;br /&gt;
|Проверьте формат значений и региональные настройки (разделитель дроби, дата/время). Исправьте файл/настройки импорта или параметры тега и повторите.&lt;br /&gt;
|-&lt;br /&gt;
|'''21'''&lt;br /&gt;
|Ошибка использования библиотеки (ошибка приложения).&lt;br /&gt;
|Перезапустите приложение. Убедитесь, что не запускаете несколько конфликтующих копий.&lt;br /&gt;
|-&lt;br /&gt;
|'''22'''&lt;br /&gt;
|Файловая система/операционная система не поддерживает большие файлы/нужные функции.&lt;br /&gt;
|Вероятная причина — устаревшая файловая система или сетевое хранилище. Обратитесь к администратору для переноса базы на современную ФС/носитель. Как временная мера — уменьшите размер базы (сократите период хранения/включите ротацию).&lt;br /&gt;
|-&lt;br /&gt;
|'''23'''&lt;br /&gt;
|Отказ в авторизации (нет прав на действие).&lt;br /&gt;
|Войдите под учётной записью с нужными правами или запросите доступ у администратора. Если используется сеть — проверьте подключение и актуальность прав.&lt;br /&gt;
|-&lt;br /&gt;
|'''24'''&lt;br /&gt;
|Не используется (оставлен для обратной совместимости).&lt;br /&gt;
|Действий не требуется.&lt;br /&gt;
|-&lt;br /&gt;
|'''25'''&lt;br /&gt;
|Неверные параметры запроса (внутренняя ошибка приложения).&lt;br /&gt;
|Перезапустите приложение.&lt;br /&gt;
|-&lt;br /&gt;
|'''26'''&lt;br /&gt;
|Открыт файл, который не является базой данных.&lt;br /&gt;
|Проверьте путь и что выбран именно файл БД. Если файл повреждён — восстановите из резервной копии или создайте новую БД.&lt;br /&gt;
|-&lt;br /&gt;
|'''27'''&lt;br /&gt;
|Уведомление (информационное сообщение).&lt;br /&gt;
|Действий не требуется. В случае частых появлений кода проверьте логи базы данных для выяснения причины.&lt;br /&gt;
|-&lt;br /&gt;
|'''28'''&lt;br /&gt;
|Предупреждение (некритичная проблема).&lt;br /&gt;
|Действий не требуется. В случае частых появлений кода проверьте логи базы данных для выяснения причины.&lt;br /&gt;
|-&lt;br /&gt;
|'''100'''&lt;br /&gt;
|Доступна следующая строка данных.&lt;br /&gt;
|Не ошибка. Действий не требуется.&lt;br /&gt;
|-&lt;br /&gt;
|'''101'''&lt;br /&gt;
|Операция завершена, данных больше нет.&lt;br /&gt;
|Не ошибка. Действий не требуется.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Архиватор PostgreSQL ===&lt;br /&gt;
Архиватор PostgreSQL предназначен для сохранения значений параметров в базы данных под управлением сервера PostgreSQL.&lt;br /&gt;
&lt;br /&gt;
=== Прореживание данных ===&lt;br /&gt;
Прореживание данных — это процесс фильтрации и уменьшения количества точек данных, сохраняемых в архиве. Вместо того чтобы записывать каждое полученное значение, система анализирует поток данных и сохраняет только те значения, которые представляют значимое изменение.&lt;br /&gt;
&lt;br /&gt;
'''Назначение прореживания'''&lt;br /&gt;
&lt;br /&gt;
Поток данных от датчиков и устройств зачастую содержит незначительные колебания (шум) или избыточные данные, когда параметр не меняется. Прореживание решает следующие задачи:&lt;br /&gt;
&lt;br /&gt;
* '''Снижение нагрузки на архив''': Меньшее количество записей означает более быструю работу базы данных.&lt;br /&gt;
* '''Ускорение отображения графиков''': Нужно обрабатывать меньше точек для построения трендов.&lt;br /&gt;
* '''Сохранение только значимых изменений''': Система отфильтровывает шум и оставляет только те изменения, которые важны для анализа технологического процесса.&lt;br /&gt;
'''Общий принцип работы'''&lt;br /&gt;
&lt;br /&gt;
Алгоритм прореживания работает по простому принципу:&lt;br /&gt;
&lt;br /&gt;
# SCADA-система получает новое значение от источника данных.&lt;br /&gt;
# Она сравнивает это значение с последним, которое было сохранено в архив.&lt;br /&gt;
# Если изменение превышает заранее настроенный '''допуск''' (tolerance), новое значение сохраняется.&lt;br /&gt;
# Если изменение меньше допуска, значение пропускается.&lt;br /&gt;
&lt;br /&gt;
Кроме того, существует параметр &amp;quot;'''Период обязательной записи&amp;quot;'''. Если с момента последней записи прошло больше времени, чем указано в этом параметре, новое значение будет сохранено '''независимо от его изменения'''. Это гарантирует, что записи в архив будут сохраняться не реже заданной периодичности, даже если сигнал не меняется. Ключевая идея: &amp;quot;'''Сохраняем только то, что заметно изменилось, но не реже, чем задано&amp;quot;.'''&lt;br /&gt;
&lt;br /&gt;
'''Как подобрать допуск?'''&lt;br /&gt;
&lt;br /&gt;
* '''Слишком малый допуск''' приведёт к записи избыточных данных, и архив будет быстро расти.&lt;br /&gt;
* '''Слишком большой допуск''' может привести к потере мелких, но значимых изменений в сигнале.&lt;br /&gt;
&lt;br /&gt;
Выбор правильного допуска — это компромисс между детализацией данных и размером архива.&lt;br /&gt;
==== Типы алгоритмов прореживания ====&lt;br /&gt;
В системе доступны несколько алгоритмов, которые определяют, как именно вычисляется «значимость» изменения. Выбор алгоритма зависит от характера сигнала и требований к точности данных.&lt;br /&gt;
&lt;br /&gt;
# [[Узлы проекта AgavaSCADA/AgavaPLC#Абсолютный допуск|Абсолютный допуск]]&lt;br /&gt;
# [[Узлы проекта AgavaSCADA/AgavaPLC#Процент от последнего значения|Процент от последнего значения]]&lt;br /&gt;
# [[Узлы проекта AgavaSCADA/AgavaPLC#Процент от среднего N последних|Процент от среднего N последних]]&lt;br /&gt;
# [[Узлы проекта AgavaSCADA/AgavaPLC#Процент от среднего по временному окну|Процент от среднего по временному окну]]&lt;br /&gt;
&lt;br /&gt;
'''Обозначения и определения'''&lt;br /&gt;
&lt;br /&gt;
В дальнейшем используются следующие обозначения (для числовых сигналов):&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;math&amp;gt;x_{in}&amp;lt;/math&amp;gt;​ — текущее измерение сигнала, полученное от источника данных к моменту обработки (кандидат на запись).&lt;br /&gt;
* &amp;lt;math&amp;gt;x_{ref}&amp;lt;/math&amp;gt; — последнее сохранённое числовое значение сигнала в архиве на момент обработки (опорное значение).&lt;br /&gt;
* &amp;lt;math&amp;gt;|\Delta| = |x_{in} - x_{ref}|&amp;lt;/math&amp;gt; — абсолютная величина изменения между текущим измерением и последним сохранённым значением.&lt;br /&gt;
* &amp;lt;math&amp;gt;\bar{x}_N&amp;lt;/math&amp;gt;​ — арифметическое среднее последних &amp;lt;math&amp;gt;N&amp;lt;/math&amp;gt; сохранённых числовых значений.&lt;br /&gt;
* &amp;lt;math&amp;gt;\bar{x}_T&amp;lt;/math&amp;gt;​ — среднее всех сохранённых числовых значений, чьи метки времени попадают в временное окно длительности &amp;lt;math&amp;gt;T&amp;lt;/math&amp;gt; миллисекунд.&lt;br /&gt;
* &amp;lt;math&amp;gt;\varepsilon&amp;lt;/math&amp;gt; — машинная точность для чисел двойной точности; используется для формальной проверки «близости к нулю».&lt;br /&gt;
* &amp;lt;math&amp;gt;tolerance&amp;lt;/math&amp;gt; — допуск: абсолютный (в физических единицах) или относительный (в процентах), в зависимости от выбранного алгоритма.&lt;br /&gt;
&lt;br /&gt;
'''Настройки в Свойствах архиватора, общие для всех типов прореживания'''&lt;br /&gt;
&lt;br /&gt;
* '''Включить прореживание''' — включает/выключает применение алгоритма прореживания при записи значений. При выключении все поступающие значения сохраняются без фильтрации.&lt;br /&gt;
* '''Тип допуска''' — выбирает алгоритм сравнения.&lt;br /&gt;
* '''Период обязательной записи (мс)''' — максимальный допустимый промежуток между двумя записями одного сигнала. Если за это время значимого изменения не произошло, ближайшее поступившее значение будет записано принудительно. 0 — отключить принудительную запись.&lt;br /&gt;
&lt;br /&gt;
===== Абсолютный допуск =====&lt;br /&gt;
'''Принцип:'''&lt;br /&gt;
&lt;br /&gt;
Новое значение сохраняется, если модуль изменения больше установленного порога в физических единицах.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math display=&amp;quot;block&amp;quot;&amp;gt;|\Delta| &amp;gt; tolerance&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Когда использовать:'''&lt;br /&gt;
&lt;br /&gt;
* Если диапазон сигнала стабилен и известен заранее.&lt;br /&gt;
* Для параметров вроде температуры, давления, уровня жидкости, где фиксированное изменение имеет одинаковую интерпретацию по всей шкале.&lt;br /&gt;
&lt;br /&gt;
'''Преимущества:'''&lt;br /&gt;
&lt;br /&gt;
* Обеспечивает предсказуемое и детерминированное поведение независимо от текущего масштаба значения.&lt;br /&gt;
* Не требует накопления или хранения дополнительных данных (окон/истории), вычислительно прост.&lt;br /&gt;
* Удобен при наличии нормативно заданных пределов точности в физических единицах.&lt;br /&gt;
&lt;br /&gt;
'''Ограничения:'''&lt;br /&gt;
&lt;br /&gt;
* Не масштабируется на широкий динамический диапазон: один и тот же порог может быть слишком грубым для малых значений и слишком чувствительным для больших.&lt;br /&gt;
* Требует аккуратного подбора порога под единицы измерения и разрешение датчика; при неверной калибровке возможны либо избыточные записи, либо потеря значимых мелких изменений.&lt;br /&gt;
* Не учитывает относительный контекст изменения (например, 1 единица при значении 10 и при значении 10 000 трактуется одинаково).&lt;br /&gt;
&lt;br /&gt;
'''Настройки в Свойствах архиватора:'''&lt;br /&gt;
&lt;br /&gt;
* '''Допуск''' — абсолютный порог в физических единицах сигнала. Определяет значение &amp;lt;math&amp;gt;tolerance&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
===== Процент от последнего значения =====&lt;br /&gt;
'''Принцип:'''&lt;br /&gt;
&lt;br /&gt;
Новое значение сохраняется, если относительное изменение относительно последнего сохранённого превышает заданный процент.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math display=&amp;quot;block&amp;quot;&amp;gt;\frac{|\Delta|}{|x_{ref}|} \times{100} &amp;gt; tolerance&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Когда использовать:'''&lt;br /&gt;
&lt;br /&gt;
* Для сигналов, где важна относительная динамика, а не абсолютные величины.&lt;br /&gt;
* Для показателей с большим динамическим диапазоном, где относительная точность должна быть сопоставима на всех уровнях.&lt;br /&gt;
&lt;br /&gt;
'''Преимущества:'''&lt;br /&gt;
&lt;br /&gt;
* Масштабируемость: одинаково интерпретирует относительные изменения на низких и высоких уровнях сигнала.&lt;br /&gt;
* Не требует хранения окна значений; использует только последнее сохранённое значение, поэтому вычислительно лёгок.&lt;br /&gt;
* Быстро и корректно реагирует на пропорциональные изменения процесса (проценты), поддерживая заданную относительную чувствительность.&lt;br /&gt;
&lt;br /&gt;
'''Ограничения:'''&lt;br /&gt;
&lt;br /&gt;
* В окрестности нуля относительная метрика становится нестабильной (см. [[Узлы проекта AgavaSCADA/AgavaPLC#Примечание к алгоритмам 'Процент от…'|примечание]]).&lt;br /&gt;
* При малых базовых значениях возможна повышенная чувствительность к шуму и микроколебаниям.&lt;br /&gt;
* Не подавляет высокочастотный шум сам по себе: при необходимости сочетать с обязательной записью по времени и корректной настройкой допуска.&lt;br /&gt;
&lt;br /&gt;
'''Настройки в Свойствах архиватора:'''&lt;br /&gt;
&lt;br /&gt;
* '''Допуск''' — относительный порог в процентах. Определяет значение &amp;lt;math&amp;gt;tolerance&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
===== Процент от среднего N последних =====&lt;br /&gt;
'''Принцип:'''&lt;br /&gt;
&lt;br /&gt;
Новое значение сохраняется, если изменение больше заданного процента от среднего по последним N сохранённым значениям.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math display=&amp;quot;block&amp;quot;&amp;gt;\frac{|\Delta|}{|\bar{x}_{N}|} \times{100} &amp;gt; tolerance&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Когда использовать:'''&lt;br /&gt;
&lt;br /&gt;
* Для сигналов с постоянным шумом или пульсациями, когда важно снижать чувствительность к случайным отклонениям.&lt;br /&gt;
* Для процессов с умеренной динамикой, где требуется устойчивость к «зубчатым» колебаниям.&lt;br /&gt;
&lt;br /&gt;
'''Преимущества:'''&lt;br /&gt;
&lt;br /&gt;
* Снижает чувствительность к высокочастотному шуму за счёт опоры на усреднение; сокращает объём записей на стационарных участках.&lt;br /&gt;
* Гибко настраивается параметром &amp;lt;math&amp;gt;N&amp;lt;/math&amp;gt;: увеличение окна повышает устойчивость, уменьшение — повышает чувствительность и снижает задержку реакции.&lt;br /&gt;
&lt;br /&gt;
'''Ограничения:'''&lt;br /&gt;
&lt;br /&gt;
* В окрестности нуля относительная метрика становится нестабильной (см. [[Узлы проекта AgavaSCADA/AgavaPLC#Примечание к алгоритмам 'Процент от…'|примечание]]).&lt;br /&gt;
&lt;br /&gt;
* Инерционность: при резких скачках возможна задержка фиксации изменения, особенно при большом &amp;lt;math&amp;gt;N&amp;lt;/math&amp;gt;.&lt;br /&gt;
* Усреднение может «сглаживать» и не фиксировать кратковременные, но важные пики; не подходит для задач, критичных к коротким экстремумам.&lt;br /&gt;
* Предполагает относительно стабильную частоту выборок; при сильно переменной частоте эффективная «временная» ширина окна становится непредсказуемой.&lt;br /&gt;
&lt;br /&gt;
'''Настройки в Свойствах архиватора:'''&lt;br /&gt;
&lt;br /&gt;
* '''Допуск''' — относительный порог в процентах. Определяет значение &amp;lt;math&amp;gt;tolerance&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
* '''Размер окна среднего (&amp;lt;math&amp;gt;N&amp;lt;/math&amp;gt;)''' — число последних сохранённых значений, по которым считается среднее. Большее &amp;lt;math&amp;gt;N&amp;lt;/math&amp;gt; повышает устойчивость к шуму, но увеличивает инерционность реакции.&lt;br /&gt;
&lt;br /&gt;
===== Процент от среднего по временному окну =====&lt;br /&gt;
'''Принцип:'''&lt;br /&gt;
&lt;br /&gt;
Похож на предыдущий, но среднее считается не по количеству точек, а по всем значениям за заданный интервал времени.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math display=&amp;quot;block&amp;quot;&amp;gt;\frac{|\Delta|}{|\bar{x}_{T}|} \times{100} &amp;gt; tolerance&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Когда использовать:'''&lt;br /&gt;
&lt;br /&gt;
* Для сигналов с непостоянной частотой измерений (событийные, неравномерные потоки).&lt;br /&gt;
* В случаях, когда важно учитывать реальную временную протяжённость усреднения независимо от плотности измерений.&lt;br /&gt;
&lt;br /&gt;
'''Преимущества:'''&lt;br /&gt;
&lt;br /&gt;
* Корректно работает при переменной частоте выборок: окно фиксируется по времени, а не по числу точек.&lt;br /&gt;
* Более реалистично оценивает тренд во времени на участках с неравномерными измерениями.&lt;br /&gt;
* Управляемый компромисс между подавлением шума и чувствительностью за счёт выбора длительности окна.&lt;br /&gt;
&lt;br /&gt;
'''Ограничения:'''&lt;br /&gt;
&lt;br /&gt;
* В окрестности нуля относительная метрика становится нестабильной (см. [[Узлы проекта AgavaSCADA/AgavaPLC#Примечание к алгоритмам 'Процент от…'|примечание]]).&lt;br /&gt;
&lt;br /&gt;
* Более высокая ресурсоёмкость: требуется хранить и периодически «очищать» значения по условию выхода из временного окна; потребление памяти зависит от фактической скорости поступления данных.&lt;br /&gt;
* Инерционность, присущая усреднению: возможна задержка фиксации коротких, но значимых пиковых изменений.&lt;br /&gt;
* Критичен выбор длительности окна: слишком малое окно даёт мало подавления шума, слишком большое — чрезмерную инерцию и риск пропуска кратких событий.&lt;br /&gt;
&lt;br /&gt;
'''Настройки в Свойствах архиватора:'''&lt;br /&gt;
&lt;br /&gt;
* '''Допуск''' — относительный порог в процентах. Определяет значение &amp;lt;math&amp;gt;tolerance&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
* '''Интервал архивирования''' — длительность временного окна &amp;lt;math&amp;gt;T&amp;lt;/math&amp;gt; (мс), в пределах которого вычисляется среднее. При увеличении &amp;lt;math&amp;gt;T&amp;lt;/math&amp;gt; растёт сглаживание и уменьшается чувствительность к кратким всплескам; при уменьшении — наоборот. Значения, чьи метки времени выходят за пределы окна, автоматически исключаются из расчёта.&lt;br /&gt;
&lt;br /&gt;
==== Примечание к алгоритмам 'Процент от…' ====&lt;br /&gt;
При малых опорных значениях система автоматически переходит в абсолютный режим, чтобы избежать деления на величину, близкую к нулю, и связанных с этим скачков чувствительности. Этот механизм применяется ко всем алгоритмам, использующим относительное сравнение: «Процент от последнего», «Процент от среднего N», «Процент от среднего по временному окну» и обеспечивает стабильность критерия при слабых сигналах.&lt;br /&gt;
&lt;br /&gt;
* Условия входа в режим абсолютного допуска:&lt;br /&gt;
** для «Процента от последнего»: &amp;lt;math&amp;gt;|x_{ref}| &amp;lt; \varepsilon&amp;lt;/math&amp;gt;;&lt;br /&gt;
** для «Процента от среднего N»: &amp;lt;math&amp;gt;|\bar{x}_{N}| &amp;lt; \varepsilon&amp;lt;/math&amp;gt;;&lt;br /&gt;
** для «Процента от среднего по времени»: &amp;lt;math&amp;gt;|\bar{x}_{T}| &amp;lt; \varepsilon&amp;lt;/math&amp;gt;.&lt;br /&gt;
* Критерий в режиме абсолютного допуска: значение фиксируется, если &amp;lt;math&amp;gt;|\Delta| &amp;gt; tolerance&amp;lt;/math&amp;gt;.&lt;br /&gt;
* Условие выхода: как только соответствующая базовая величина (&amp;lt;math&amp;gt;|x_{ref}|&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;|\bar{x}_{N}|&amp;lt;/math&amp;gt; или &amp;lt;math&amp;gt;|\bar{x}_{T}|&amp;lt;/math&amp;gt;) становится &amp;lt;math&amp;gt;\geq \varepsilon&amp;lt;/math&amp;gt;, система автоматически возвращается к относительному критерию.&lt;br /&gt;
* Трактовка &amp;lt;math&amp;gt;tolerance&amp;lt;/math&amp;gt;: используется то же значение настройки; в абсолютном режиме оно интерпретируется как порог в физических единицах сигнала.&lt;br /&gt;
&lt;br /&gt;
==== Сравнение алгоритмов прореживания данных ====&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Критерий&lt;br /&gt;
!Абсолютный&lt;br /&gt;
!% от последнего&lt;br /&gt;
!% от среднего N&lt;br /&gt;
!% от среднего по времени&lt;br /&gt;
|-&lt;br /&gt;
|Единицы допуска&lt;br /&gt;
|Физические&lt;br /&gt;
|Проценты&lt;br /&gt;
|Проценты&lt;br /&gt;
|Проценты&lt;br /&gt;
|-&lt;br /&gt;
|Устойчивость к шуму&lt;br /&gt;
|Низкая&lt;br /&gt;
|Средняя&lt;br /&gt;
|Высокая&lt;br /&gt;
|Высокая&lt;br /&gt;
|-&lt;br /&gt;
|Реакция на резкие скачки&lt;br /&gt;
|Быстрая&lt;br /&gt;
|Быстрая&lt;br /&gt;
|Задержка (при большом N)&lt;br /&gt;
|Задержка&lt;br /&gt;
|-&lt;br /&gt;
|Подходит при переменной частоте&lt;br /&gt;
|Да&lt;br /&gt;
|Да&lt;br /&gt;
|Нет&lt;br /&gt;
|Да&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Система журналирования==&lt;br /&gt;
Система ведения журналов событий предназначена для управления регистрацией и хранением событий. В базу данных записываются все системные события и события, генерируемые с помощью [[Узлы проекта AgavaSCADA/AgavaPLC#.D0.A1.D0.B8.D1.81.D1.82.D0.B5.D0.BC.D0.B0 .D1.82.D1.80.D0.B5.D0.B2.D0.BE.D0.B3|системы тревог]], которые соответствуют выбранному уровню сообщений.&lt;br /&gt;
&lt;br /&gt;
Для ведения журналов используются узлы типа &amp;quot;Логгер&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
===Порядок настройки системы===&lt;br /&gt;
Порядок настройки системы журналирования следующий:&lt;br /&gt;
&lt;br /&gt;
#Добавить и [[Узлы проекта AgavaSCADA/AgavaPLC#.D0.9F.D0.BE.D1.80.D1.8F.D0.B4.D0.BE.D0.BA .D0.BD.D0.B0.D1.81.D1.82.D1.80.D0.BE.D0.B9.D0.BA.D0.B8 .D1.81.D0.B8.D1.81.D1.82.D0.B5.D0.BC.D1.8B|настроить систему тревог]] для генерации событий.&lt;br /&gt;
#Добавить в проект систему журналирования. Для этого нажать ПКМ по узлу «Станция» в дереве проекта, затем выбрать «Добавить узел» - «Система» - «Система журналирования».&lt;br /&gt;
#Добавить в систему журналирования логгер. Для этого нажать ПКМ по узлу «Система архивации» в дереве проекта, затем нажать «Добавить узел» и выбрать нужный логгер.&lt;br /&gt;
#Настроить параметры логгера (см. разделы ниже).&lt;br /&gt;
&lt;br /&gt;
=== Логгер SQLite===&lt;br /&gt;
Логгер SQLite предназначен для сохранения событий, возникающих в ходе исполнения прикладной программы в СУБД SQLite.&lt;br /&gt;
&lt;br /&gt;
Логгер позволяет настраивать срок хранения событий, уровень сохраняемых событий и включать режим разбиения базы данных на отдельные файлы, содержащие данные только за одни сутки.&lt;br /&gt;
&lt;br /&gt;
Информацию о событиях в базе данных, которую ведет логгер, можно просмотреть с помощью виджета &amp;quot;Список событий&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
===Логгер файловый ===&lt;br /&gt;
Логгер файловый предназначен для сохранения журналов событий в текстовых файлах на накопителе. Логгер имеет минимальное количество настроек, и обычно используется для сохранения журнала событий в случае необходимости отладки работы прикладной программы без среды разработки.&lt;br /&gt;
&lt;br /&gt;
===Логгер SMS===&lt;br /&gt;
Логгер SMS предназначен для SMS информирования с помощью субмодуля GRPS или внешнего GPRS модема. &lt;br /&gt;
&lt;br /&gt;
Принцип работы логгера следующий:&lt;br /&gt;
&lt;br /&gt;
#Логгер принимает возникающие события, фильтрует их согласно установленного уровня событий и выбранных групп.&lt;br /&gt;
#События, прошедшие фильтрацию, форматируются согласно установленного шаблона.&lt;br /&gt;
#Отформатированные сообщения отправляются через подключенный модем в виде SMS сообщения. Отправка сообщений производится на телефонные номера, записанные в телефонной книге на SIM-карте.&lt;br /&gt;
&lt;br /&gt;
==Система проверки прав пользователей==&lt;br /&gt;
[[Файл:AgavaPLC-Окно привилегий.png|мини|494x494пкс|Окно привилегий]]&lt;br /&gt;
Система реализует механизм контроля доступа к узлам проекта и их функциях на основе ролей. Узлы при выполнении действий проверяют наличие установленных привилегий у авторизованного в данный момент пользователя. &lt;br /&gt;
&lt;br /&gt;
=== Роли и пользователи ===&lt;br /&gt;
Система содержит в себе две подсистемы:&lt;br /&gt;
*Пользователи. Подсистема определяет пользователей, каждому из которых назначается логин/пароль и одна или несколько ролей.&lt;br /&gt;
*Роли. Роли хранят наборы доступных привилегий.&lt;br /&gt;
Отношения между пользователями, ролями и привилегиями можно описать следующим образом:&lt;br /&gt;
&lt;br /&gt;
* Один пользователь может иметь несколько ролей.&lt;br /&gt;
* Одну роль могут иметь несколько пользователей.&lt;br /&gt;
* Одна роль может иметь несколько привилегий.&lt;br /&gt;
* Одна привилегия может принадлежать нескольким ролям.&lt;br /&gt;
&lt;br /&gt;
=== Привилегии ===&lt;br /&gt;
[[Файл:AgavaPLC-Система проверки прав пользователей.png|мини|Система проверки прав пользователей]]&lt;br /&gt;
Для узлов системы доступна установка следующих привилегий:&lt;br /&gt;
&lt;br /&gt;
Все узлы: &lt;br /&gt;
&lt;br /&gt;
*Чтение значения.&lt;br /&gt;
*Запись значения.&lt;br /&gt;
Окна и фреймы:&lt;br /&gt;
*Открытие окна.&lt;br /&gt;
*Закрытие окна.&lt;br /&gt;
&lt;br /&gt;
При установке привилегий на какой-либо узел, все подчиненные узлы получают те же привилегии с флагом &amp;quot;унаследована&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Если привилегия не установлена, то считается что действие, регулируемое привилегией, запрещено.&lt;br /&gt;
&lt;br /&gt;
Значение унаследованных привилегий можно переопределить с помощью явного задания привилегии.&lt;br /&gt;
===Порядок настройки системы===&lt;br /&gt;
Привилегии настраиваются в отдельном окне привилегий, доступном в меню &amp;quot;Вид&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Порядок настройки системы проверки прав в версии AgavaSCADA 1.2 следующий:&lt;br /&gt;
&lt;br /&gt;
#Добавить в проект систему проверки прав пользователей. Для этого нажать ПКМ по узлу «Станция» в дереве проекта, затем выбрать «Добавить узел» - «Система» - «Система проверки прав пользователей».&lt;br /&gt;
#Добавить в систему проверки прав пользователей узел «Роль». Для этого нажать ПКМ по узлу «Система проверки прав пользователей» в дереве проекта, затем выбрать «Добавить узел» - «Роли».&lt;br /&gt;
#Добавить в узел «Роли» необходимые роли. Для этого нажать ПКМ по узлу «Роли» в дереве проекта, затем выбрать «Добавить узел» - «Роль».&lt;br /&gt;
#Для каждой роли настроить привилегии в окне привилегий. Для этого необходимо нажать «Вид» - «Открыть привилегии». В открывшемся окне в выпадающем списке «Пользователь / роль» выбрать нужную роль. Затем, нажимая ПКМ по узлам и выбирая «Добавить привилегию» настроить все необходимые ограничения для данной роли.&lt;br /&gt;
#Добавить в систему проверки прав пользователей узел «Пользователи». Для этого нажать ПКМ по узлу «Система проверки прав пользователей» в дереве проекта, затем выбрать «Добавить узел» - «Пользователи».&lt;br /&gt;
#Добавить в узел «Пользователи» необходимых пользователей. Для этого нажать ПКМ по узлу «Пользователи» в дереве проекта, затем выбрать «Добавить узел» - «Пользователи».&lt;br /&gt;
#Для каждого пользователя указать имя и пароль, которые будут использоваться при авторизации, и выбрать одну или несколько ролей.&lt;br /&gt;
&lt;br /&gt;
== Сигналы, источники и операции ==&lt;br /&gt;
Регистры и другие узлы, добавленные в группу «Сигналы», являются внутренними для проекта и могут менять свои значения только с помощь скриптов или других узлов, с которыми они связаны.&lt;br /&gt;
&lt;br /&gt;
Сигналы содержат в себе несколько подгрупп.&lt;br /&gt;
&lt;br /&gt;
=== Сигнал===&lt;br /&gt;
Сигнал - специальный тип узла, хранящий значение узла типа &amp;quot;источник&amp;quot;. Сигналы могут использоваться для хранения значений нескольких источников, модифицировать их, обладать дополнительными полями и т. д.&lt;br /&gt;
&lt;br /&gt;
Сигналы некоторых типов позволяют модифицировать исходное значение источников. Принцип обработки значения источника или сигнала с помощью операций: &lt;br /&gt;
&lt;br /&gt;
Первичное значение поступает на вход операции, производится вычисление. Если есть еще операции, то вычисленное значение после первой операции передается на вход второй. И так далее по всем операциям. Если операций больше нет, вычисленное значение устанавливается в качестве значения узла. &lt;br /&gt;
&lt;br /&gt;
Все операции выполняются в порядке, в котором они заданы в соответствующих свойствах.&lt;br /&gt;
&lt;br /&gt;
====Сигнал простой====&lt;br /&gt;
Узел типа &amp;quot;Сигнал простой&amp;quot; предназначен для хранения и обработки значения источника, или другого сигнала или операции. Позволяет произвести какие-либо действия с этим значением с помощью добавления нужных операций в свойство «Операции после чтения».&lt;br /&gt;
&lt;br /&gt;
====Постоянная ====&lt;br /&gt;
Узел типа &amp;quot;Постоянная&amp;quot; предназначен для хранения данных выбранного формата и позволяет изменять их в ходе выполнения программы. Связывание с источником не предусмотрено. Изменение осуществляется с помощью специализированных функций или блока установки значения в задаче ПЛК.&lt;br /&gt;
&lt;br /&gt;
====Массив====&lt;br /&gt;
Массив - совокупность каких-либо объектов, указанных в свойстве «Входные значения». Нумерация объектов в массиве начинается с 0. Может использоваться для взаимодействия с демультиплексором.&lt;br /&gt;
&lt;br /&gt;
====Сигнал комплексный====&lt;br /&gt;
Сигнал используется для взаимодействия с виджетом «Цифровой индикатор». Позволяет контролировать входное значение и генерировать события переходу входного значения через уставки.&lt;br /&gt;
&lt;br /&gt;
Содержит в себе свойства для настройки следующих параметров:&lt;br /&gt;
&lt;br /&gt;
*ВАУ – верхняя аварийная уставка;&lt;br /&gt;
*ВПУ - верхняя предаварийная уставка;&lt;br /&gt;
*НПУ - нижняя предаварийная уставка;&lt;br /&gt;
*НАУ – нижняя аварийная уставка;&lt;br /&gt;
*ФНЧ – фильтр низких частот.&lt;br /&gt;
&lt;br /&gt;
===Источник===&lt;br /&gt;
Источник - специальный тип узлов, предназначенных для передачи данных от внешних устройств.&lt;br /&gt;
&lt;br /&gt;
====Регистр Modbus====&lt;br /&gt;
Регистр Modbus используется для приема и передачи данных по протоколам Modbus-RTU, Modbus-TCP. Данный тип узов также может использоваться для организации работы некоторых алгоритмов программы (например для взаимодействия с контроллером событий).&lt;br /&gt;
&lt;br /&gt;
====Источник индексный====&lt;br /&gt;
Узел типа &amp;quot;Источник индексный&amp;quot; используется для обработки данных, полученных по протоколу Upd, а так же в массивах для индексации значений.&lt;br /&gt;
&lt;br /&gt;
===Операция===&lt;br /&gt;
[[Файл:AgavaPLC-Входные значения операций.png|мини|Входные значения операций]]&lt;br /&gt;
Узлы типа &amp;quot;Операция&amp;quot; используются для реализации вычислительных алгоритмов в задаче ПЛК или отдельно, при их размещении в группе &amp;quot;Сигналы&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
В качестве входных значений операций выбираются константные числа, другие узлы группы «Сигналы», регистры или блоки задачи ПЛК.&lt;br /&gt;
&lt;br /&gt;
====Операция «Сложение»====&lt;br /&gt;
Выходным значением является сумма входных значений. В качестве входных значений можно выбирать как узлы, так и конкретные числа формата int или double.&lt;br /&gt;
&lt;br /&gt;
====Операция «Вычитание»====&lt;br /&gt;
Выходным значением является разность первого входного значения и суммы всех последующих значений. В качестве входных значений можно выбирать как узлы, так и конкретные числа формата int или double.&lt;br /&gt;
&lt;br /&gt;
====Операция «Умножение»====&lt;br /&gt;
Выходным значением является произведение значений всех входных значений. В качестве входных значений можно выбирать как узлы, так и конкретные числа формата int или double.&lt;br /&gt;
&lt;br /&gt;
====Операция «Деление»====&lt;br /&gt;
Выходным значением является результат от деления первого входного значения на произведение всех последующих значений. В качестве входных значений можно выбирать как узлы, так и конкретные числа формата int или double.&lt;br /&gt;
&lt;br /&gt;
====Операция «Условие»====&lt;br /&gt;
Узел типа &amp;quot;Операция условие&amp;quot; предназначен для сравнения значений двух узлов. Для условия задаются сравниваемые параметры и выбирается режим сравнения. В качестве входных значений можно выбирать как узлы, так и конкретные числа формата int или double.&lt;br /&gt;
&lt;br /&gt;
====Операция «Пара условий»====&lt;br /&gt;
[[Файл:AgavaPLC-Операция «Пара условий».png|мини|Операция «Пара условий»]]&lt;br /&gt;
Операция содержит в себе два условия. Для каждого условия задаются индивидуальные сравнимаемые параметры и выбирается режим сравнения.&lt;br /&gt;
&lt;br /&gt;
Выходное значение операции зависит от ее режима проверки – при выбранном режиме «Логическое ИЛИ» выходное значение равно логической «1» если одно из условий равно «1», при «Логическом И»- если оба условия равны «1».&lt;br /&gt;
&lt;br /&gt;
====Операция «Логическое ИЛИ»====&lt;br /&gt;
Если одно из входных значений становится равно логической «1» (контакты замкнуты), то выходное значение становится логической «1» (выход включен).&lt;br /&gt;
&lt;br /&gt;
====Операция «Логическое И»====&lt;br /&gt;
Если все входные значения становятся равны логической «1», выходное значение становится логической «1» (выход включен).&lt;br /&gt;
&lt;br /&gt;
====Операция «Логическое НЕ»====&lt;br /&gt;
Если входное значение блока становится равно логическому «0», то выходное значение становится логической «1», и наоборот.&lt;br /&gt;
&lt;br /&gt;
====Операция «Таймер»====&lt;br /&gt;
Таймер предназначен для выполнения каких-либо [[Узлы проекта AgavaSCADA/AgavaPLC#.D0.94.D0.B5.D0.B9.D1.81.D1.82.D0.B2.D0.B8.D1.8F|действий]] через одинаковые промежутки времени (например запись значения в узел). Промежуток между исполнениями действий задается в свойстве «Интервал срабатывания», а сами действия в свойстве «Действия OnTimer». Для работы операции ее необходимо добавить в свойство «Узлы» [[Узлы проекта AgavaSCADA/AgavaPLC#.D0.97.D0.B0.D0.B4.D0.B0.D1.87.D0.B8|задачи]] с периодическим или разовым режимом выполнения.&lt;br /&gt;
&lt;br /&gt;
====Операция «Мультиплексор»====&lt;br /&gt;
Мультплексор осуществляет перевод нескольких булевых переменных в целочисленное значение по формуле: «выход = вход1 + вход2*2^1 + вход3*2^2 + ...». &lt;br /&gt;
&lt;br /&gt;
Например если в качестве входных значений указаны два регистра, то выходное значение мультиплексора будет формироваться следующим образом:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Значение регистра 1&lt;br /&gt;
!Значение регистра 2&lt;br /&gt;
!Выходное значение&lt;br /&gt;
|-&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|-&lt;br /&gt;
|1&lt;br /&gt;
|0&lt;br /&gt;
|1&lt;br /&gt;
|-&lt;br /&gt;
|0&lt;br /&gt;
|1&lt;br /&gt;
|2&lt;br /&gt;
|-&lt;br /&gt;
|1&lt;br /&gt;
|1&lt;br /&gt;
|3&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
====Операция «Демультиплексор»====&lt;br /&gt;
Демультиплексор осуществляет перевод целочисленных значений из массива в несколько булевых переменных, при этом включается выход, номер которого соответствует числу из массива (например первый элемент массива равен 5, на пятом выходе появится значение true). Нумерация выходов начинается с нуля.&lt;br /&gt;
&lt;br /&gt;
====Операция «Генератор случайного числа»====&lt;br /&gt;
Выходным значением является случайное число в диапазоне между указанным минимальным и максимальным значениями. Для работы операции ее необходимо добавить в свойство «Узлы» [[Узлы проекта AgavaSCADA/AgavaPLC#.D0.97.D0.B0.D0.B4.D0.B0.D1.87.D0.B8|задачи]] с периодическим или разовым режимом выполнения.&lt;br /&gt;
&lt;br /&gt;
====Операция «Скрипт С++»====&lt;br /&gt;
Операция «Скрипт С++» предназначена для реализации разнообразных алгоритмов на языке С++. Операция предусматривает реализацию одной или нескольких функций, выполняющих необходимые пользователю действия. &lt;br /&gt;
&lt;br /&gt;
Для выполнения скрипта, можно добавить в свойство «Узлы» [[Узлы проекта AgavaSCADA/AgavaPLC#.D0.97.D0.B0.D0.B4.D0.B0.D1.87.D0.B8|задачи]] с периодическим или разовым режимом выполнения. Другим способом вызова срабатывания скрипта является добавление его в [[Узлы проекта AgavaSCADA/AgavaPLC#.D0.94.D0.B5.D0.B9.D1.81.D1.82.D0.B2.D0.B8.D0.B5 .C2.AB.D0.92.D1.8B.D0.BF.D0.BE.D0.BB.D0.BD.D0.B5.D0.BD.D0.B8.D0.B5 .D1.81.D0.BA.D1.80.D0.B8.D0.BF.D1.82.D0.B0.C2.BB|действие «Выполнение скрипта»]].&lt;br /&gt;
&lt;br /&gt;
Пример скрипта, выполняющего получение значения определенного узла и запись измененного значения в другой узел:&lt;br /&gt;
 float val()&lt;br /&gt;
 {&lt;br /&gt;
     float f = GetNodeValueAsFloat(&amp;quot;/Конфигурация1/stationSimple1/Signals1/Random2&amp;quot;);&lt;br /&gt;
     float f1 = f*100.0;&lt;br /&gt;
     SetNodeValueAsFloat(&amp;quot;/Конфигурация1/stationSimple1/Signals1/Constant3&amp;quot;, f1);&lt;br /&gt;
     return f*10.0;&lt;br /&gt;
 }&lt;br /&gt;
Приведенный выше скрипт возвращает исходное значение, умноженное на 10. Возвращаемое таким образом значение записывается в выход операции для возможности считывания в других операциях, скриптах и т. д.&lt;br /&gt;
&lt;br /&gt;
Скрипты могут возвращать значения следующих типов:&lt;br /&gt;
&lt;br /&gt;
*void;&lt;br /&gt;
*float;&lt;br /&gt;
*double;&lt;br /&gt;
*int.&lt;br /&gt;
&lt;br /&gt;
Подробное описание реализации языка С++ в AgavaSCADA/AgavaPLC приведено на странице &amp;quot;[[Описание языка С++ в AgavaPLC]]&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
===Объект===&lt;br /&gt;
Узлы типа &amp;quot;Объект&amp;quot; предназначены для взаимодействия с аппаратными компонентами контроллера. Для всех объектов, являющихся субмодулями, необходимо указать слот, в котором они установлены. Доступ к значениям входов/выходов субмодуля осуществляется через его вложенные узлы.&lt;br /&gt;
&lt;br /&gt;
'''ПЛК процессорный модуль''' &lt;br /&gt;
&lt;br /&gt;
Предоставляет возможность регулирования подсветки экрана; включения и отключения индикаторов работы, аварии и программы.&lt;br /&gt;
&lt;br /&gt;
'''ПЛК субмодуль DI'''&lt;br /&gt;
&lt;br /&gt;
Позволяет получать доступ к значениям входов субмодуля DI.&lt;br /&gt;
&lt;br /&gt;
'''ПЛК субмодуль R'''&lt;br /&gt;
&lt;br /&gt;
Позволяет управлять значениями выходов субмодуля R.&lt;br /&gt;
&lt;br /&gt;
'''ПЛК субмодуль SIM'''&lt;br /&gt;
&lt;br /&gt;
Позволяет управлять значениями выходов субмодуля SIM.&lt;br /&gt;
&lt;br /&gt;
'''ПЛК субмодуль DO6'''&lt;br /&gt;
&lt;br /&gt;
Позволяет управлять значениями выходов субмодуля DO6.&lt;br /&gt;
&lt;br /&gt;
'''ПЛК субмодуль AI'''&lt;br /&gt;
&lt;br /&gt;
Позволяет получать доступ к значениям входов субмодуля AI и задавать их тип.&lt;br /&gt;
&lt;br /&gt;
'''ПЛК субмодуль AIO'''&lt;br /&gt;
&lt;br /&gt;
Позволяет получать доступ к значениям входов субмодуля AIO, управлять значениями выходов и задавать тип входов и выходов.&lt;br /&gt;
&lt;br /&gt;
'''ПЛК субмодуль TMP'''&lt;br /&gt;
&lt;br /&gt;
Позволяет получать доступ к значениям входов субмодуля TMP и задавать их тип.&lt;br /&gt;
&lt;br /&gt;
==Задачи==&lt;br /&gt;
Группа «Задачи» предназначена для группировки узлов типа «Задача», которые используются для циклического или разового выполнения созданных пользователем алгоритмов.&lt;br /&gt;
&lt;br /&gt;
===Задача ПЛК===&lt;br /&gt;
Данный узел предоставляет возможности для связывания между собой других узлов (таких как сигналы, субмодули ПЛК, постоянные и т. д.) в удобной графической форме (см. Рисунок 64). Для перехода к редактору необходимо щелкнуть правой кнопкой мыши на задачу ПЛК и выбрать в открывшемся контекстном меню команду «Открыть графическое представление» или дважды щелкнуть левой кнопкой мыши на задаче ПЛК в дереве проекта.&lt;br /&gt;
&lt;br /&gt;
Рисунок 64 – Окно графического редактирования задачи «ПЛК-60»&lt;br /&gt;
&lt;br /&gt;
Панель инструментов задачи ПЛК, расположенная в верхней части окна, содержит следующие элементы (см. Рисунок 16):&lt;br /&gt;
&lt;br /&gt;
*Выпадающий список выбора режима подписи портов.&lt;br /&gt;
*Выпадающий список выбора режима подписи блоков.&lt;br /&gt;
*Кнопка запуска режима симулятора.&lt;br /&gt;
*Кнопка запуска онлайн отладки.&lt;br /&gt;
*Кнопка печати задачи.&lt;br /&gt;
*Инструменты управления симуляцией.&lt;br /&gt;
&lt;br /&gt;
Добавлять узлы в задачу можно перетаскиванием мышью из окна функциональных блоков или из окна дерева проекта. Для связывания узлов между собой необходимо, зажав левую кнопку мыши на выходе одного узла, протянуть линию ко входу другого и затем отпустить левую кнопку мыши для соединения блоков. &lt;br /&gt;
&lt;br /&gt;
Созданную связь можно удалить, выделив ее левой кнопкой мыши и нажав клавишу &amp;quot;Del&amp;quot;. Связь можно &amp;quot;разорвать&amp;quot;, то есть добавить разрыв, нажав по ней правой кнопкой мыши и выбрав в контекстном меню команду «Добавить разрыв». &lt;br /&gt;
&lt;br /&gt;
Для выделения нескольких блоков рамкой зажмите клавишу &amp;quot;Shift&amp;quot; и выделяйте блоки мышью с нажатой левой кнопкой.&lt;br /&gt;
&lt;br /&gt;
Задача ПЛК предоставляет возможности для проведения тестирования и отладки проекта, описанные в разделе [[#Проверка и отладка проекта]].&lt;br /&gt;
&lt;br /&gt;
====Блоки задачи ПЛК====&lt;br /&gt;
Помимо операций, описанных в разделе [[#Операция]], для реализации алгоритмов в задачу ПЛК можно добавлять блоки, описанные ниже.&lt;br /&gt;
&lt;br /&gt;
'''Функциональный блок'''&lt;br /&gt;
&lt;br /&gt;
Используется для выделения каких-либо действий в отдельный блок, для упрощения понимания работы алгоритма программы. Содержит входы, выходы и блоки, обеспечивающие работу внутренней логики. Позволяет проводить изолированную отладку, при которой значения на входах функционального блока вручную задаются пользователем. Блок, работающий в данном режиме выделяется черной рамкой. Для включения изолированной отладки необходимо открыть блок и нажать кнопку «Изолированная отладка» на панели управления задачей.&lt;br /&gt;
&lt;br /&gt;
'''Блок установки значения'''&lt;br /&gt;
&lt;br /&gt;
Блок осуществляет запись значения, поданного на вход in0, в узел, указанный в свойстве «Узел для чтения/записи»&lt;br /&gt;
&lt;br /&gt;
'''Блок задержки'''&lt;br /&gt;
&lt;br /&gt;
Блок задержки используется для создания задержки передачи значения с входа блока на выход на один цикл обработки задачи.&lt;br /&gt;
&lt;br /&gt;
'''Блок «Битовое OR»'''&lt;br /&gt;
&lt;br /&gt;
Для вычисления значения будет произведена операция &amp;quot;ИЛИ&amp;quot; над каждым битом значения в отдельности. Например: 1010 OR 0110 = 1110&lt;br /&gt;
&lt;br /&gt;
'''Блок «Логическое И»'''&lt;br /&gt;
&lt;br /&gt;
Если все входные значения становятся равны логической «1», выходное значение становится логической «1» (выход включен).&lt;br /&gt;
&lt;br /&gt;
'''Блок «Битовое AND»'''&lt;br /&gt;
&lt;br /&gt;
Для вычисления значения будет произведена операция &amp;quot;И&amp;quot; над каждым битом значения в отдельности. Если все биты, стоящие на одинаковых позициях в двоичных представлениях значений, поступающих на входы блока, равны логической «1», то на выходе элемента в этой позиции появляется логическая «1» (выход включен). Например: 1010 AND 0110 = 0010&lt;br /&gt;
&lt;br /&gt;
'''Блок «Логическое НЕ»'''&lt;br /&gt;
&lt;br /&gt;
Если входное значение блока становится равно логическому «0», то выходное значение становится логической «1», и наоборот.&lt;br /&gt;
&lt;br /&gt;
'''Блок «Битовое XOR»'''&lt;br /&gt;
&lt;br /&gt;
Если только на один из входов блока функции поступает логическая «1», то на выходе элемента появляется логическая «1». Если на входы блока функции поступают целочисленные значения, то операция будет произведена над каждым битом значения в отдельности. Например: 1010 XOR 0110 = 1100&lt;br /&gt;
&lt;br /&gt;
'''Блок «Битовое SHR»'''&lt;br /&gt;
&lt;br /&gt;
Побитовый логический сдвиг вправо используется для выполнения операции побитового логического сдвига операнда X вправо на N бит с дополнением нулями слева.&lt;br /&gt;
&lt;br /&gt;
'''Блок «Битовое SHL»'''&lt;br /&gt;
&lt;br /&gt;
Побитовый логический сдвиг влево используется для выполнения операции побитового логического сдвига операнда X влево на N бит с дополнением нулями справа.&lt;br /&gt;
&lt;br /&gt;
'''Блок «Таймер»'''&lt;br /&gt;
&lt;br /&gt;
Таймер предназначен для выполнения каких-либо действий (см. раздел 4.6) через одинаковые промежутки времени (например запись значения в узел).&lt;br /&gt;
&lt;br /&gt;
'''Блок «Мультиплексор»'''&lt;br /&gt;
&lt;br /&gt;
Мультплексор осуществляет перевод нескольких булевых переменных в целочисленное значение по формуле: «выход = вход1 + вход2*2^1 + вход3*2^2 + ...»&lt;br /&gt;
&lt;br /&gt;
'''Блок «Демультиплексор»'''&lt;br /&gt;
&lt;br /&gt;
Демультиплексор осуществляет перевод целочисленных значений из массива в несколько булевых переменных, при этом включается выход, номер которого соответствует числу из массива (например первый элемент массива равен 5, на пятом выходе появится значение true). Нумерация выходов начинается с нуля.&lt;br /&gt;
&lt;br /&gt;
'''Блок «Генератор случайного числа»'''&lt;br /&gt;
&lt;br /&gt;
Выходным значением является случайное число в диапазоне между указанным минимальным и максимальным значениями.&lt;br /&gt;
&lt;br /&gt;
'''Блок «Скрипт С++»'''&lt;br /&gt;
&lt;br /&gt;
Операция «Скрипт С++» предназначена для реализации разнообразных алгоритмов на языке С++. Операция предусматривает реализацию одной или нескольких функций, выполняющих необходимые пользователю действия. Для выполнения скрипта, необходимо добавить его в качестве узла для задачи или задачи ПЛК.&lt;br /&gt;
&lt;br /&gt;
Пример скрипта, выполняющего получение значения определенного узла и запись измененного значения в другой узел:&lt;br /&gt;
 float val()&lt;br /&gt;
 {&lt;br /&gt;
     float f = GetNodeValueAsFloat(&amp;quot;/Конфигурация1/stationSimple1/Signals1/Random2&amp;quot;);&lt;br /&gt;
     float f1 = f*100.0;&lt;br /&gt;
     SetNodeValueAsFloat(&amp;quot;/Конфигурация1/stationSimple1/Signals1/Constant3&amp;quot;, f1);&lt;br /&gt;
     return f*10.0;&lt;br /&gt;
 }&lt;br /&gt;
Приведенный выше скрипт возвращает исходное значение, умноженное на 10. Возвращаемое таким образом значение записывается в выход операции для возможности считывания в других операциях, скриптах и т. д.&lt;br /&gt;
&lt;br /&gt;
Скрипты могут возвращать значения следующих типов:&lt;br /&gt;
&lt;br /&gt;
* void;&lt;br /&gt;
*float;&lt;br /&gt;
*double;&lt;br /&gt;
*int.&lt;br /&gt;
&lt;br /&gt;
Подробное описание реализации языка С++ в AgavaSCADA/AgavaPLC приведено на странице &amp;quot;[[Описание языка С++ в AgavaPLC]]&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
'''Блок «Таймер с задержкой»'''&lt;br /&gt;
&lt;br /&gt;
Таймер с задержкой используется для операции задержки передачи и/или отключения сигнала. На выходе таймера появится сигнал логической «1» с задержкой относительно фронта входного сигнала продолжительностью равной интервалу включения и выключится по спаду входного сигнала с задержкой продолжительностью равной интервалу выключения. В том случае, если необходимо использовать блок только как таймер с задержкой включения (отключения) интервал выключения (включения) устанавливается равным 0.&lt;br /&gt;
&lt;br /&gt;
'''Блок «Генератор прямоугольных импульсов»'''&lt;br /&gt;
&lt;br /&gt;
Генератор прямоугольных импульсов используется для формирования прямоугольных импульсов пульсации. На выходе генератора формируются импульсы с заданными параметрами длительности включенного и отключенного импульса на время действия управляющего сигнала на входе (сигнал логической «1»).&lt;br /&gt;
&lt;br /&gt;
'''Блок «Триггер RS»'''&lt;br /&gt;
&lt;br /&gt;
RS-триггер с приоритетом выключения используется для переключения с фиксацией состояния во время поступления коротких импульсов на соответствующий вход. На выходе появится логическая «1» по фронту сигнала на входе Set, которая будет сброшена в «0», при поступлении импульса на вход Reset.&lt;br /&gt;
&lt;br /&gt;
'''Блок «Триггер SR»'''&lt;br /&gt;
&lt;br /&gt;
SR-триггер с приоритетом включения используется для переключения с фиксацией состояния в случае поступления коротких импульсов на соответствующий вход. На выходе появится логическая «1» по фронту сигнала на входе Set, которая будет сброшена в «0», при поступлении импульса на вход Reset.&lt;br /&gt;
&lt;br /&gt;
'''Блок «Детектор переднего фронта импульса»'''&lt;br /&gt;
&lt;br /&gt;
Детектор переднего фронта импульса используется в случае необходимости иметь реакцию на изменение состояния дискретного входного сигнала. На выходе генерируется единичный импульс при изменении состояния входа из «0» в «1».&lt;br /&gt;
&lt;br /&gt;
'''Блок «Детектор заднего фронта импульса»'''&lt;br /&gt;
&lt;br /&gt;
Детектор заднего фронта импульса используется в случае необходимости иметь реакцию на изменение состояния дискретного входного сигнала. На выходе генерируется единичный импульс при изменении состояния входа из «1» в «0».&lt;br /&gt;
&lt;br /&gt;
'''Блок «D-триггер»'''&lt;br /&gt;
&lt;br /&gt;
D-триггер используется для формирования импульса включения выхода на интервал времени импульса на входе D, выходной интервал будет синхронизирован с тактовой частотой на входе С. На выходе Q триггера появится сигнал логической «1» по фронту тактовых импульсов на входе С при наличии сигнала логической «1» на входе D. Возврат выхода в сигнал логического «0» произойдет по фронту тактовых импульсов на входе С при наличии сигнала логического «0» на входе D. Вход Set принудительно устанавливает выход в состояние логической «1». Вход Reset является приоритетным и устанавливает выход в состояние логического «0».&lt;br /&gt;
&lt;br /&gt;
'''Блок «Селектор»'''&lt;br /&gt;
&lt;br /&gt;
Если на вход Value подается логическая «1», то результатом выполнения операции блока на выходе является входной сигнал ValueT. Если же Value равен логической «0», то результатом выполнения операции блока на выходе является входной сигнал ValueF.&lt;br /&gt;
&lt;br /&gt;
'''Блок «Больше чем»'''&lt;br /&gt;
&lt;br /&gt;
На выход подается логическая «1», если значение in0 больше чем значение in1.&lt;br /&gt;
&lt;br /&gt;
'''Блок «Равенство»'''&lt;br /&gt;
&lt;br /&gt;
На выход подается логическая «1», если значение in0 равно значению in1.&lt;br /&gt;
&lt;br /&gt;
'''Блок «Абсолютное значение числа»'''&lt;br /&gt;
&lt;br /&gt;
Результатом операции функции на выходе является модуль подаваемого на вход значения. Если число на входе положительное, то на выход подается само число, если отрицательное – положительное число, получаемое от перемены его знака с «-» на «+».&lt;br /&gt;
&lt;br /&gt;
'''Блок «Возведение в степень»'''&lt;br /&gt;
&lt;br /&gt;
Результатом операции функции на выходе является значение, равное значению in0, возведенному в степень значения N.&lt;br /&gt;
&lt;br /&gt;
'''Блок «PID-регулятор»'''&lt;br /&gt;
&lt;br /&gt;
Регулятор PID применяется для поддержания заданного значения параметра. На вход Pv подается текущее значение регулируемой величины, на Sp – ее заданное значение. С помощью изменения коэффициентов ПИД регулятора kP, kI и kD достигается оптимальный режим работы. Min задает минимальное значение на выходе, Max – максимальное. time - период регулятора (в мс.).&lt;br /&gt;
&lt;br /&gt;
'''Блок «PWM-регулятор»'''&lt;br /&gt;
&lt;br /&gt;
Применяется для преобразования аналогового сигнала в дискретный с помощью ШИМ. На вход in подается текущее значение регулируемой величины, Min задает минимальное значение на входе, Max – максимальное. time - период регулятора (в мс.)&lt;br /&gt;
&lt;br /&gt;
==Устройства==&lt;br /&gt;
Группа «Устройства» предназначена для группировки узлов типа &amp;quot;Устройство&amp;quot;, выполняющие разнообразные задачи, например работа с внешними накопителями и ПЗУ. &lt;br /&gt;
&lt;br /&gt;
Retain-накопитель дает возможность хранить значения регистров, постоянных и сигналов в постоянной памяти контроллера, что позволяет им сохранять свои значения после отключения питания.&lt;br /&gt;
&lt;br /&gt;
Для сохранения переменных необходимо перечислить их в свойстве «Узлы» и указать путь сохранения на выбранном накопителе.&lt;br /&gt;
&lt;br /&gt;
== Отчеты==&lt;br /&gt;
{{Внимание|Тип=Восклицание желтый.png|Текст=Данный узел доступен только при  исполнении проекта на настольном компьютере. На панелях оператора и контроллерах МПР этот узел не доступен.}}&lt;br /&gt;
Отчет – технологический документ, содержащий информацию о ходе производственного процесса, обработанную по заложенным в отчет алгоритмам. Отчеты формируются на основе макетов (статической части отчетов) путем добавления в них свойств и значений заданных параметров технологического процесса, которые формируются (выбираются из базы данных технологических параметров и проходят соответствующую обработку) по алгоритмам, размещенным в этих шаблонах.&lt;br /&gt;
&lt;br /&gt;
Данные для отчета предоставляет выборка, осуществляющая получение данных и их обработку из базы данных.&lt;br /&gt;
&lt;br /&gt;
===Создание нового отчета===&lt;br /&gt;
Создание любого отчета производится в два этапа.&lt;br /&gt;
&lt;br /&gt;
#Создание необходимых узлов в конфигурации: сам отчет и необходимое количество выборок.&lt;br /&gt;
#Составление макета отчета.&lt;br /&gt;
&lt;br /&gt;
Создание узла типа «Отчет» в конфигурации и выборок для него производится аналогично созданию узлов других типов. К станции добавляется узел типа «Отчеты» с помощью команды контекстного меню «Добавить узел», далее к узлу типа «Отчеты» добавляется отчет и к отчету добавляется необходимое количество выборок.&lt;br /&gt;
&lt;br /&gt;
Выборка – специальный узел, предназначенный для выборки данных из архива и их обработки для последующего отображения в отчете.&lt;br /&gt;
&lt;br /&gt;
Перед переходом к редактированию макета желательно проделать следующие операции:&lt;br /&gt;
&lt;br /&gt;
*в свойстве отчета «Путь к файлу отчета» установить имя файла, в котором будет храниться макет отчета;&lt;br /&gt;
* в свойстве «Источники» выборки (выборок) отчета установить перечень архивных сигналов (коннекторов), которые будут выводиться в отчете.&lt;br /&gt;
&lt;br /&gt;
===Редактирование макета отчета===&lt;br /&gt;
[[Файл:AgavaPLC–Редактор макета отчета.png|мини|Рисунок 42 – Редактор макета отчета]]&lt;br /&gt;
Для редактирования макета отчета необходимо переключиться из редактора конфигурации в редактор макета отчета с помощью команды «Открыть редактор макета отчета», доступной из контекстного меню дерева конфигурации, отображаемого при щелчке правой кнопкой мыши на узле типа «Отчет».&lt;br /&gt;
&lt;br /&gt;
В окне редактора расположены:&lt;br /&gt;
&lt;br /&gt;
*панели инструментов;&lt;br /&gt;
* панель объектов отчета;&lt;br /&gt;
*окно «Инспектор объектов»;&lt;br /&gt;
*окно «Инспектор данных»;&lt;br /&gt;
*окно «Инспектор скриптов»;&lt;br /&gt;
*область построения макета отчета;&lt;br /&gt;
*окно «Структура отчета».&lt;br /&gt;
&lt;br /&gt;
Редактор макета позволяет вызывать команды сочетаниями клавиш:&lt;br /&gt;
&lt;br /&gt;
*Ctrl + N – новый макет;&lt;br /&gt;
*Ctrl + O – загрузить макет;&lt;br /&gt;
*Ctrl + S – сохранить макет;&lt;br /&gt;
*Ctrl + Shift + S – сохранить макет под новым именем;&lt;br /&gt;
*Ctrl + P – предварительный просмотр;&lt;br /&gt;
*Ctrl + Z – отмена изменений;&lt;br /&gt;
*Ctrl + Shift + Z – возврат отмененных изменений;&lt;br /&gt;
* Ctrl + C – копировать объект;&lt;br /&gt;
*Ctrl + X – вырезать объект;&lt;br /&gt;
*Ctrl + V – вставить объект;&lt;br /&gt;
*Ctrl + Стрелки – переместить выделенный объект;&lt;br /&gt;
*Shift + Стрелки – изменить размер выделенных объектов;&lt;br /&gt;
*Del – удалить выделенные объекты;&lt;br /&gt;
*Shift + левая кнопка мыши – создать область выделения.&lt;br /&gt;
&lt;br /&gt;
====Окно «Инспектор объектов»====&lt;br /&gt;
Окно «Инспектор объектов» содержит список свойств выделенного объекта и предназначено для их редактирования.&lt;br /&gt;
&lt;br /&gt;
====Окно «Инспектор данных»====&lt;br /&gt;
Окно «Инспектор данных» содержит список доступных для использования источников данных (выборок) и предназначено для заполнения блока «Данные» элементами соответствующего типа.&lt;br /&gt;
&lt;br /&gt;
====Окно «Инспектор скриптов»====&lt;br /&gt;
Окно «Инспектор скриптов» содержит список доступных для использования в отчете скриптов.&lt;br /&gt;
&lt;br /&gt;
====Окно «Структура отчета»====&lt;br /&gt;
Окно «Структура отчет» отображает структуру отчета в виде дерева связанных элементов.&lt;br /&gt;
&lt;br /&gt;
===Элементы отчета===&lt;br /&gt;
Для составления макета отчета доступны следующие элементы:&lt;br /&gt;
&lt;br /&gt;
*текст;&lt;br /&gt;
*данные;&lt;br /&gt;
*изображение;&lt;br /&gt;
*фигура;&lt;br /&gt;
*компоновка (Layout).&lt;br /&gt;
&lt;br /&gt;
====Текст====&lt;br /&gt;
Элемент «Текст» служит для вывода надписей или содержимого полей источников данных.&lt;br /&gt;
&lt;br /&gt;
Объект «Текст» обладает очень широкими возможностями. Он умеет отображать текст, рамку, заливку. Текст может быть отображен любым шрифтом любого размера, цвета и стиля. Большинство настроек делаются визуально с помощью панелей инструментов.&lt;br /&gt;
&lt;br /&gt;
Одна из самых главных особенностей этого универсального объекта – это возможность отображения не только статичного текста, но и текста с применением вычисляемых выражений. Причем, выражения могут располагаться в объекте вперемешку с текстом. Рассмотрим простой пример – поместим в объект «Текст» следующую строку: «Привет! Сегодня $S{now()}».&lt;br /&gt;
&lt;br /&gt;
Если запустить отчет на построение, мы увидим приблизительно следующее: «Привет! Сегодня 2018­08­03». В процессе построения отчета выражение в тексте, заключенное $S{}, было вычислено и полученное значение вставлено обратно в текст. Объект «Текст» может содержать любое количество выражений, смешанных с обычным текстом. В скобки можно заключать и одиночные переменные, и выражения, например, $S{1+2*(3+4)}. В выражениях можно использовать константы, переменные ($V{}), функции, поля БД ($D{}).&lt;br /&gt;
&lt;br /&gt;
Свойства элемента «Текст»:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Наименование свойства&lt;br /&gt;
!Описание&lt;br /&gt;
|-&lt;br /&gt;
|alignment&lt;br /&gt;
|Выравнивание текста по вертикали и горизонтали&lt;br /&gt;
|-&lt;br /&gt;
|angle&lt;br /&gt;
|Поворот надписи&lt;br /&gt;
|-&lt;br /&gt;
|autoHeight&lt;br /&gt;
|Автоматический подбор высоты&lt;br /&gt;
|-&lt;br /&gt;
|autoWidth&lt;br /&gt;
|Автоматический подбор ширины&lt;br /&gt;
|-&lt;br /&gt;
|backgroundColor&lt;br /&gt;
|Цвет заливки&lt;br /&gt;
|-&lt;br /&gt;
|backgroundMode&lt;br /&gt;
|Режим заливки&lt;br /&gt;
|-&lt;br /&gt;
| backgroundOpacity&lt;br /&gt;
|Прозрачность заливки&lt;br /&gt;
|-&lt;br /&gt;
|borders&lt;br /&gt;
|Границы&lt;br /&gt;
|-&lt;br /&gt;
|content&lt;br /&gt;
|Содержимое объекта «Текст»&lt;br /&gt;
|-&lt;br /&gt;
|font&lt;br /&gt;
|Шрифт&lt;br /&gt;
|-&lt;br /&gt;
|fontColor&lt;br /&gt;
|Цвет шрифта&lt;br /&gt;
|-&lt;br /&gt;
| foregroundOpacity&lt;br /&gt;
|Прозрачность шрифта&lt;br /&gt;
|-&lt;br /&gt;
|geometry&lt;br /&gt;
|Размер и расположение объекта&lt;br /&gt;
|-&lt;br /&gt;
|itemLocation&lt;br /&gt;
|Расположение объекта (страница или бэнд)&lt;br /&gt;
|-&lt;br /&gt;
|margin&lt;br /&gt;
|Отступы&lt;br /&gt;
|-&lt;br /&gt;
|objectName&lt;br /&gt;
| Имя объекта&lt;br /&gt;
|-&lt;br /&gt;
|stretchToMaxHeight&lt;br /&gt;
|Установка значения высоты самого высокого объекта на бэнде&lt;br /&gt;
|-&lt;br /&gt;
|trimValue&lt;br /&gt;
|Удаление  пробелов в начале и в конце надписи&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Для редактирования свойства «Content» используется диалоговое окно «Text Item Editor», вызов которого осуществляется двойным щелчком левой кнопки мыши на элементе «Текст».&lt;br /&gt;
&lt;br /&gt;
Свойство «Content» может содержать: &lt;br /&gt;
&lt;br /&gt;
*текст;&lt;br /&gt;
*значения переменных;&lt;br /&gt;
*значения полей из набора данных;&lt;br /&gt;
*значения, формируемые посредством исполнения скрипта.&lt;br /&gt;
&lt;br /&gt;
Для вывода значений переменных используется синтаксис «$V{имяПеременной}» (без кавычек), для вывода значения поля данных – «$D{имяНабораДанных.ИмяПеременной}», для вывода результата исполнения скрипта – «$S{телоСкрипта}».&lt;br /&gt;
&lt;br /&gt;
==== Изображение ====&lt;br /&gt;
Элемент для вывода изображений:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Наименование свойства&lt;br /&gt;
!Описание&lt;br /&gt;
|-&lt;br /&gt;
|autoSize&lt;br /&gt;
|Подгонять размер под размер изображения&lt;br /&gt;
|-&lt;br /&gt;
|borders&lt;br /&gt;
|Границы&lt;br /&gt;
|-&lt;br /&gt;
|content  &lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|datasource&lt;br /&gt;
|Источник данных&lt;br /&gt;
|-&lt;br /&gt;
|field&lt;br /&gt;
|Поле данных&lt;br /&gt;
|-&lt;br /&gt;
|geometry&lt;br /&gt;
|Размер и расположение&lt;br /&gt;
|-&lt;br /&gt;
|image&lt;br /&gt;
|Изображение&lt;br /&gt;
|-&lt;br /&gt;
| itemLocation&lt;br /&gt;
|Расположение объекта (страница или бэнд)&lt;br /&gt;
|-&lt;br /&gt;
|objectName&lt;br /&gt;
|Имя объекта&lt;br /&gt;
|-&lt;br /&gt;
| stretchToMaxHeight&lt;br /&gt;
|Устанавливать значение высоты самого высокого объекта на  бэнде&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
====Фигура====&lt;br /&gt;
Элемент для вывода фигур:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Наименование свойства&lt;br /&gt;
!Описание&lt;br /&gt;
|-&lt;br /&gt;
|borders&lt;br /&gt;
|Границы&lt;br /&gt;
|-&lt;br /&gt;
| geometry&lt;br /&gt;
|Размер и расположение&lt;br /&gt;
|-&lt;br /&gt;
|itemLocation&lt;br /&gt;
|Расположение объекта (страница или бэнд)&lt;br /&gt;
|-&lt;br /&gt;
|lineWidth&lt;br /&gt;
|Толщина линии&lt;br /&gt;
|-&lt;br /&gt;
|objectName&lt;br /&gt;
|Имя объекта&lt;br /&gt;
|-&lt;br /&gt;
|opacity&lt;br /&gt;
|Прозрачность&lt;br /&gt;
|-&lt;br /&gt;
|penStyle&lt;br /&gt;
|Стиль линии&lt;br /&gt;
|-&lt;br /&gt;
|shape&lt;br /&gt;
|Фигура&lt;br /&gt;
|-&lt;br /&gt;
|shapeBrush&lt;br /&gt;
|Стиль заливки&lt;br /&gt;
|-&lt;br /&gt;
|shapeBrushColor&lt;br /&gt;
|Цвет заливки&lt;br /&gt;
|-&lt;br /&gt;
|shapeColor&lt;br /&gt;
|Цвет фигуры&lt;br /&gt;
|-&lt;br /&gt;
|stretchToMaxHeight&lt;br /&gt;
|Устанавливать значение высоты самого высокого объекта на  бэнде&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
====Горизонтальная компоновка (Layout)====&lt;br /&gt;
Элемент, позволяющий объединять несколько элементов в группу:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Наименование свойства&lt;br /&gt;
!Описание&lt;br /&gt;
|-&lt;br /&gt;
|borders&lt;br /&gt;
|Границы&lt;br /&gt;
|-&lt;br /&gt;
|geometry&lt;br /&gt;
|Размер и расположение&lt;br /&gt;
|-&lt;br /&gt;
|itemLocation&lt;br /&gt;
|Расположение объекта (страница или бэнд)&lt;br /&gt;
|-&lt;br /&gt;
|objectName&lt;br /&gt;
|Имя объекта&lt;br /&gt;
|-&lt;br /&gt;
|stretchToMaxHeight&lt;br /&gt;
|Устанавливать значение высоты самого высокого объекта на  бэнде&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Разделы отчета (бэнды) ===&lt;br /&gt;
Бэнд предназначен для размещения других элементов отчета. Бэнд может быть нескольких типов:&lt;br /&gt;
&lt;br /&gt;
*Report Header – заголовок отчета;&lt;br /&gt;
*Report Footer – завершение отчета;&lt;br /&gt;
*Page Header – верхний колонтитул страницы отчета;&lt;br /&gt;
*Page Footer – нижний колонтитул страницы отчета;&lt;br /&gt;
*Data – данные отчета;&lt;br /&gt;
* SubDetail – подчиненные данные отчета;&lt;br /&gt;
*SubDetailHeader – заголовок подчиненных данных;&lt;br /&gt;
*SubDetailFooter – завершение подчиненных данных;&lt;br /&gt;
*GroupHeader – заголовок группы;&lt;br /&gt;
*GroupFooter – завершение группы.&lt;br /&gt;
&lt;br /&gt;
Бэнды применяются для логической группировки объектов. К примеру, размещение объекта на элементе «Данные» типа «Page Header», приводит к отображению этого объекта в верхней части каждой страницы готового отчета. Аналогичным образом «Page Footer» выводится внизу каждой страницы со всеми лежащими на нем объектами.&lt;br /&gt;
&lt;br /&gt;
Общие для всех элементов «Данные» свойства:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Наименование свойства&lt;br /&gt;
!Описание&lt;br /&gt;
|-&lt;br /&gt;
|autoHeight&lt;br /&gt;
|Автоматический подбор высоты&lt;br /&gt;
|-&lt;br /&gt;
|backgroundColor&lt;br /&gt;
|Цвет заливки бэнда&lt;br /&gt;
|-&lt;br /&gt;
|borders&lt;br /&gt;
|Границы&lt;br /&gt;
|-&lt;br /&gt;
|geometry&lt;br /&gt;
|Размер&lt;br /&gt;
|-&lt;br /&gt;
|keepBottomSpace&lt;br /&gt;
|Сохранение отступа от нижней границы бэнда&lt;br /&gt;
|-&lt;br /&gt;
|objectName&lt;br /&gt;
|Имя объекта&lt;br /&gt;
|-&lt;br /&gt;
|printIfEmpty&lt;br /&gt;
|Отображение пустого бэнда&lt;br /&gt;
|-&lt;br /&gt;
|splittable&lt;br /&gt;
|Разделение  бэнда, если он не влезает на страницу&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Report Footer:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Наименование свойства&lt;br /&gt;
!Описание&lt;br /&gt;
|-&lt;br /&gt;
|maxScalePercent&lt;br /&gt;
|Максимальный процент, на который можно уменьшить бенд, если он не влезает на страницу. Если бэнд даже после сжатия&lt;br /&gt;
&lt;br /&gt;
не влезает на страницу, он будет перенесен полностью или частично  – в зависимости от настроек бэнда&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Data:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Наименование свойства&lt;br /&gt;
!Описание&lt;br /&gt;
|-&lt;br /&gt;
|datasource&lt;br /&gt;
|Источник данных. Data-бэнд будет сформирован для каждой строки в источнике данных&lt;br /&gt;
|-&lt;br /&gt;
|keepFooterTogether&lt;br /&gt;
|Если Report Footer не влезает на страницу, то он будет перенесен на следующую страницу совместно с последним&lt;br /&gt;
&lt;br /&gt;
экземпляром Data-бэнда&lt;br /&gt;
|-&lt;br /&gt;
|sliceLastRow&lt;br /&gt;
| Указывает генератору отчетов на то, можно ли разрезать последний экземпляр Data-бэнда или его нужно перенести&lt;br /&gt;
&lt;br /&gt;
целиком&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Бэнды данного типа предназначены для вывода на печать данных из наборов. Набор данных - это заранее неизвестное количество строк (записей), каждая из которых содержит определенное количество колонок (полей).&lt;br /&gt;
&lt;br /&gt;
SubDetail:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Наименование свойства&lt;br /&gt;
!Описание&lt;br /&gt;
|-&lt;br /&gt;
|datasource&lt;br /&gt;
| Источник данных. SubDetail-бэнд будет сформирован для каждой строки в источнике данных&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
SubDetailHeader, SubDetailFooter:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Наименование свойства&lt;br /&gt;
!Описание&lt;br /&gt;
|-&lt;br /&gt;
|printAlways&lt;br /&gt;
| Печатать, даже если SubDetail пустой&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
GroupHeader:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Наименование свойства&lt;br /&gt;
! Описание&lt;br /&gt;
|-&lt;br /&gt;
|groupFieldName&lt;br /&gt;
|Поле, по которому осуществляется группировка. Экземпляр GroupHeader будет формироваться при смене значения в этом  поле&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===Функции===&lt;br /&gt;
==== Агрегатные функции ====&lt;br /&gt;
Агрегатные функции предназначены для обработки значений, содержащихся в резделах Data и SubDetail.&lt;br /&gt;
&lt;br /&gt;
===== AVG - вычисление среднего значения =====&lt;br /&gt;
Пример использования:&lt;br /&gt;
 $S{AVG(&amp;quot;TextItem4&amp;quot;,&amp;quot;DataBand1&amp;quot;);}&lt;br /&gt;
&lt;br /&gt;
===== SUM - вычисление суммы значений =====&lt;br /&gt;
Пример использования:&lt;br /&gt;
 $S{SUM(&amp;quot;TextItem8&amp;quot;,&amp;quot;DataBand1&amp;quot;);}&lt;br /&gt;
&lt;br /&gt;
===== MIN =====&lt;br /&gt;
&lt;br /&gt;
===== MAX =====&lt;br /&gt;
&lt;br /&gt;
===== COUNT =====&lt;br /&gt;
&lt;br /&gt;
==== Числовые функции ====&lt;br /&gt;
&lt;br /&gt;
===== numberFormat - форматирование числа =====&lt;br /&gt;
Синтаксис:&lt;br /&gt;
 numberFormat(значение, 'формат', точность)&lt;br /&gt;
Форматы:&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;'f'&amp;lt;/code&amp;gt; — фиксированная запись (например, &amp;lt;code&amp;gt;&amp;quot;123.45&amp;quot;&amp;lt;/code&amp;gt;);&lt;br /&gt;
* &amp;lt;code&amp;gt;'g'&amp;lt;/code&amp;gt; — общий формат (автоматически выбирает между &amp;lt;code&amp;gt;'f'&amp;lt;/code&amp;gt; и &amp;lt;code&amp;gt;'e'&amp;lt;/code&amp;gt;);&lt;br /&gt;
* &amp;lt;code&amp;gt;'e'&amp;lt;/code&amp;gt; — экспоненциальная запись (например, &amp;lt;code&amp;gt;&amp;quot;1.2345e+02&amp;quot;&amp;lt;/code&amp;gt;);&lt;br /&gt;
&lt;br /&gt;
Пример использования:&lt;br /&gt;
 $S{numberFormat($D{fetcharchiverdata1.ArchiversSourceConnector0 (среднее)}, 'f', 3)}       -&amp;gt; 123.495&lt;br /&gt;
[[Категория:AgavaSCADA/AgavaPLC]]&lt;/div&gt;</summary>
		<author><name>SharipovRR</name></author>
	</entry>
	<entry>
		<id>https://docs.kb-agava.ru/index.php?title=%D0%A3%D0%B7%D0%BB%D1%8B_%D0%BF%D1%80%D0%BE%D0%B5%D0%BA%D1%82%D0%B0_AgavaSCADA/AgavaPLC&amp;diff=3313</id>
		<title>Узлы проекта AgavaSCADA/AgavaPLC</title>
		<link rel="alternate" type="text/html" href="https://docs.kb-agava.ru/index.php?title=%D0%A3%D0%B7%D0%BB%D1%8B_%D0%BF%D1%80%D0%BE%D0%B5%D0%BA%D1%82%D0%B0_AgavaSCADA/AgavaPLC&amp;diff=3313"/>
		<updated>2025-10-30T04:36:15Z</updated>

		<summary type="html">&lt;p&gt;SharipovRR: /* Примечание к алгоритмам 'Процент от…' */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Узлы проекта ==&lt;br /&gt;
Узел - элементарная сущность проекта, осуществляющая хранение информации или реализующая определенный функционал. Каждый узел обладает набором [[Свойства узлов в AgavaSCADA/AgavaPLC|свойств]]. Все узлы, объединенные в иерархическую структуру, образуют проект.&lt;br /&gt;
&lt;br /&gt;
== Проект ==&lt;br /&gt;
[[Файл:AgavaPLC–Дерево проекта.png|мини|Рисунок 21 – Дерево проекта]]&lt;br /&gt;
Узел &amp;quot;Проект&amp;quot; (&amp;quot;Корневой узел&amp;quot;, &amp;quot;Корень&amp;quot;) предназначен для хранения общей информации о проекте и связывания других узлов проекта.&lt;br /&gt;
&lt;br /&gt;
== Станция ==&lt;br /&gt;
Станция – важнейший узел, управляющий работой собственных систем и выполняющий обмен данными с другими станциями. Физически станция представляет собой устройство, на котором исполняется проект (компьютер, панель оператора, МПР-60 или другое устройство).&lt;br /&gt;
&lt;br /&gt;
Для использования в проекте доступны несколько типов станций. например:&lt;br /&gt;
&lt;br /&gt;
* '''Станция''' - общий тип станции. Проекты с такой станцией могут выполняться на большинстве устройств - контроллеры, панели, персональные компьютеры. Чаще всего используется для проектов, предназначенных для выполнения на персональном компьютере.&lt;br /&gt;
* '''Панель ПО-40''' - специализированный тип для проектов на панелях оператора ПО-40. Станция такого типа по отношению к общему дополнительно предоставляет возможность управления оборудованием панели оператора (светодиоды индикации и др.), использования корзины субмодулей.&lt;br /&gt;
* '''Панель ПО-50''' - специализированный тип для проектов на панелях оператора ПО-50. Станция такого типа по отношению к общему дополнительно предоставляет возможность управления оборудованием панели оператора (светодиоды индикации и др.).&lt;br /&gt;
* '''Контроллер МПР-60''' - специализированный тип для проектов на программируемых реле МПР-60. Станция такого типа по отношению к общему дополнительно предоставляет возможность управления оборудованием устройства (светодиоды индикации и др.), использования корзины субмодулей.&lt;br /&gt;
* '''Контроллер ПЛК-70.A''' - специализированный тип для проектов, предназначенных для контроллеров АГАВА ПЛК-70.А. Станция такого типа по отношению к общему дополнительно предоставляет возможность управления оборудованием контроллера (светодиоды индикации и др.), использования корзины субмодулей.&lt;br /&gt;
&lt;br /&gt;
При построении больших проектов станций в проекте может быть несколько, и они могут выполнять разные задачи. Например, станция-сервер выполняет сбор и регистрацию данных, клиентские станции выполняют визуализацию данных на рабочих местах и т. д.&lt;br /&gt;
&lt;br /&gt;
Станции подчиняются узлы типа &amp;quot;Система&amp;quot; - Транспортная система, Система архивирования, Система визуализации и т. д.&lt;br /&gt;
&lt;br /&gt;
== Транспортная система ==&lt;br /&gt;
Транспортная система управляет передачей данных по различным каналам связи. Система управляет работой &amp;quot;Транспортов&amp;quot; - узлов, выполняющих обмен данными с устройствами по определенному протоколу.&lt;br /&gt;
&lt;br /&gt;
С одной стороны, транспортная система обращается непосредственно к сигналам и каналам устройства, а с другой стороны, представляет их в виде неких универсальных единиц – узлов-источников. Каждый источник однозначно соответствует определенному сигналу или параметру устройства.  При изменении сигнала меняется и значение источника.  При записи данных в источник производится подача команды устройству на установку определенного значения конкретного параметра.&lt;br /&gt;
&lt;br /&gt;
Транспортная система допускает использование нескольких транспортов, что дает возможность одновременного обмена данными с большим количеством устройств по разным протоколам.&lt;br /&gt;
&lt;br /&gt;
=== Транспорт ===&lt;br /&gt;
Транспорт предназначен для обмена данными с устройствами по определенному протоколу. Один транспорт, в зависимости от типа, позволяет обмениваться данными с одним или несколькими устройствами.&lt;br /&gt;
&lt;br /&gt;
Доступны для использования следующие виды транспортов:&lt;br /&gt;
&lt;br /&gt;
* Транспорт Modbus-TCP;&lt;br /&gt;
* Транспорт Modbus-RTU;&lt;br /&gt;
* Транспорт SNMP;&lt;br /&gt;
* Транспорт OPC UA;&lt;br /&gt;
* Транспорт OPC DA (только для Windows);&lt;br /&gt;
* Транспорт MQTT;&lt;br /&gt;
* Последовательный транспорт (устаревший);&lt;br /&gt;
* TCP/IP транспорт (устаревший).&lt;br /&gt;
Подробное описание транспортов приведено в отдельном документе &amp;quot;[[Транспорты AgavaSCADA/AgavaPLC]]&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
==Система визуализации==&lt;br /&gt;
{{Внимание|Тип=Восклицание желтый.png|Текст=Система визуализации недоступна в проектах для контроллеров МПР}}&lt;br /&gt;
 &lt;br /&gt;
Задачей этой системы является отображение данных в виде набора мнемонических схем (экранов, мнемосхем), а также предоставление пользователю возможности управления. &lt;br /&gt;
&lt;br /&gt;
Каждый экран позволяет в схематичном, понятном пользователю виде представить участок технологической схемы с отображением необходимых параметров технологического процесса.&lt;br /&gt;
&lt;br /&gt;
Изображение на экране строится с помощью окон, на которых размещаются объекты визуализации – виджеты. Виджетами могут быть текстовые метки, изображения, в том числе анимированные, элементы управления, графики и т. д. Виджеты можно объединять в слои для удобного управления отображением виджетов.&lt;br /&gt;
&lt;br /&gt;
Виджеты могут быть статическими и динамическими.  Динамические виджеты привязаны к одному или нескольким сигналам и их отображение зависит от значений этих сигналов. Статические виджеты не имеют привязки к сигналам и их изображение всегда постоянно.&lt;br /&gt;
&lt;br /&gt;
Для перехода по экранам, изменения значений параметров и иного управления служат специальные виджеты: кнопки управления, поля ввода и другие.&lt;br /&gt;
&lt;br /&gt;
Для повышения быстродействия и увеличения комфортности работы с системой система визуализации хранит в памяти кэш из нескольких последних открытых экранов. Когда при последовательном открытии экранов этот кэш заполняется, наиболее старые экраны удаляются из него.  Это связано с тем, что, как правило, в работе используются несколько одних и тех же экранов, которые отображают сводную информацию о техпроцессе и оператор в штатном режиме переключается только между ними. Сохраняя их в памяти, система ускоряет переключение между ними, поскольку при этом не требуется каждый раз создавать экран, все находящиеся на нем объекты и запускать процессы обновления параметров.&lt;br /&gt;
&lt;br /&gt;
Когда экран переходит в кэш, обновление параметров на нем прекращается для снижения нагрузки на центральный процессор. Если все же необходимо, чтобы экран всегда производил обновление данных (по разным причинам), даже находясь в кэше, необходимо в его настройках включить опцию «Постоянно обновляемый».&lt;br /&gt;
&lt;br /&gt;
Подчиненные типы узлов:&lt;br /&gt;
&lt;br /&gt;
*фрейм;&lt;br /&gt;
*окно;&lt;br /&gt;
*композиция.&lt;br /&gt;
&lt;br /&gt;
===Фрейм===&lt;br /&gt;
[[Файл:AgavaPLC–Пример структуры сложного фрейма, состоящего из двух форм и одного окна с многослойной композицией.png|мини|Рисунок 23 – Пример структуры сложного фрейма, состоящего из двух форм и одного окна с многослойной композицией]]&lt;br /&gt;
Фрейм – узел, предназначенный для группировки окон, отображаемых на определенном дисплее. Обеспечивает организацию окон в пространстве экрана, управление мониторами и границами отображения. &lt;br /&gt;
&lt;br /&gt;
Если необходимо отобразить информацию на нескольких дисплеях одновременно, то для каждого из них нужно использовать отдельный фрейм. Окон во фрейме может быть несколько, однако они не могут накладываться друг на друга.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Наименование свойства&lt;br /&gt;
!Идентификатор&lt;br /&gt;
!Тип&lt;br /&gt;
!Описание&lt;br /&gt;
!Допустимые значения&lt;br /&gt;
|-&lt;br /&gt;
|Позиция X&lt;br /&gt;
|XCoord&lt;br /&gt;
|int&lt;br /&gt;
|Координата X левого верхнего угла фрейма&lt;br /&gt;
|Целое число&lt;br /&gt;
|-&lt;br /&gt;
|Позиция Y&lt;br /&gt;
|YCoord&lt;br /&gt;
|int&lt;br /&gt;
|Координата Y левого верхнего угла фрейма&lt;br /&gt;
|Целое число&lt;br /&gt;
|-&lt;br /&gt;
|Ширина&lt;br /&gt;
|XSize&lt;br /&gt;
|int&lt;br /&gt;
|Ширина фрейма в пикселях&lt;br /&gt;
|Целое число &amp;gt; 0&lt;br /&gt;
|-&lt;br /&gt;
|Высота&lt;br /&gt;
|YSize&lt;br /&gt;
|int&lt;br /&gt;
|Высота фрейма в пикселях&lt;br /&gt;
|Целое число &amp;gt; 0&lt;br /&gt;
|-&lt;br /&gt;
|Окна&lt;br /&gt;
|Windows&lt;br /&gt;
|NodesArray&lt;br /&gt;
|Список окон, принадлежащих фрейму&lt;br /&gt;
|Узлы типа: Window&lt;br /&gt;
|-&lt;br /&gt;
|Номер монитора&lt;br /&gt;
|DisplayNo&lt;br /&gt;
|int&lt;br /&gt;
|Номер монитора для отображения фрейма&lt;br /&gt;
|0 - по умолчанию&lt;br /&gt;
≥1 - конкретные мониторы&lt;br /&gt;
|-&lt;br /&gt;
|Тип границы&lt;br /&gt;
|BorderType&lt;br /&gt;
|enum&lt;br /&gt;
|Тип границы фрейма&lt;br /&gt;
|0: Не определен (ошибка)&lt;br /&gt;
1: Отсутствует&lt;br /&gt;
&lt;br /&gt;
2: Фиксированная&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== Позиция и размеры (XCoord, YCoord, XSize, YSize) ====&lt;br /&gt;
&lt;br /&gt;
* '''Тип:''' int.&lt;br /&gt;
* '''Описание:''' Определяют положение и размеры фрейма на экране.&lt;br /&gt;
* '''Значения по умолчанию:''' (0, 0, 640, 480).&lt;br /&gt;
* '''Применение:''' Задание области экрана, которую занимает фрейм.&lt;br /&gt;
&lt;br /&gt;
==== Окна (Windows) ====&lt;br /&gt;
'''Тип:''' NodesArray.&lt;br /&gt;
&lt;br /&gt;
'''Описание:''' Коллекция окон, которые управляются данным фреймом. Окна могут добавляться только из существующих узлов.&lt;br /&gt;
&lt;br /&gt;
'''Особенности:'''&lt;br /&gt;
&lt;br /&gt;
* Поддерживаются только узлы типа Window.&lt;br /&gt;
&lt;br /&gt;
==== Номер монитора (DisplayNo) ====&lt;br /&gt;
'''Тип:''' int.&lt;br /&gt;
&lt;br /&gt;
'''Описание:''' Определяет, на каком мониторе системы отображается фрейм. Значение 0 соответствует монитору по умолчанию.&lt;br /&gt;
&lt;br /&gt;
'''Использование:'''&lt;br /&gt;
&lt;br /&gt;
* 0 - основной монитор.&lt;br /&gt;
* 1, 2, ... - дополнительные мониторы.&lt;br /&gt;
* Свойство важно для многомониторных конфигураций.&lt;br /&gt;
&lt;br /&gt;
==== Тип границы (BorderType) ====&lt;br /&gt;
'''Тип:''' enum.&lt;br /&gt;
&lt;br /&gt;
'''Описание:''' Определяет тип обрамления фрейма. Влияет на внешний вид и поведение границ.&lt;br /&gt;
&lt;br /&gt;
'''Значения:'''&lt;br /&gt;
&lt;br /&gt;
* '''Отсутствует''' - фрейм без видимых границ.&lt;br /&gt;
* '''Фиксированная''' - стандартная граница окна.&lt;br /&gt;
* '''Не определен''' - используется только для обработки ошибок.&lt;br /&gt;
&lt;br /&gt;
==== Наследование привилегий ====&lt;br /&gt;
Фрейм автоматически добавляет доступные привилегии для работы с окнами:&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;OpenWindow&amp;lt;/code&amp;gt; - привилегия на открытие окон.&lt;br /&gt;
* &amp;lt;code&amp;gt;CloseWindow&amp;lt;/code&amp;gt; - привилегия на закрытие окон.&lt;br /&gt;
&lt;br /&gt;
===Окна===&lt;br /&gt;
Окно – узел, осуществляющий отображение видеокадра (мнемонической схемы).&lt;br /&gt;
&lt;br /&gt;
Существуют несколько видов окон:&lt;br /&gt;
&lt;br /&gt;
1. «Форма», предназначенная для вывода простого набора данных без необходимости управления видимостью или внешним видом его элементов. Для вывода информации в такое окно кроме создания окна и добавления к нему виджетов ничего более не требуется.&lt;br /&gt;
[[Файл:AgavaPLC-Меню.png|мини|164x164пкс|Рисунок 24 — Внешний вид меню в среде исполнения]]&lt;br /&gt;
2. «Окно с композицией», предназначенное для вывода большого количества информации и позволяющее организовать группировку элементов по слоям, управлять внешним видом элементов, видимостью слоев и отдельных элементов, а также дающее возможность регулирования работы пользователя с элементами. Для вывода информации в такое окно нужно к окну привязать композицию, содержащую минимум один слой, в который уже добавляются виджеты.&lt;br /&gt;
&lt;br /&gt;
=== Форма ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Наименование свойства&lt;br /&gt;
!Идентификатор&lt;br /&gt;
!Тип&lt;br /&gt;
!Описание&lt;br /&gt;
!Допустимые значения&lt;br /&gt;
!Режим доступа&lt;br /&gt;
|-&lt;br /&gt;
|Модальность&lt;br /&gt;
|Modality&lt;br /&gt;
|enum&lt;br /&gt;
|Режим модальности окна&lt;br /&gt;
|0: Не определен (ошибка)&lt;br /&gt;
1: Немодальное&lt;br /&gt;
&lt;br /&gt;
2: Модальное (Фрейм)&lt;br /&gt;
&lt;br /&gt;
3: Модальное (Система)&lt;br /&gt;
|Чтение/Запись&lt;br /&gt;
|-&lt;br /&gt;
|Тип границы&lt;br /&gt;
|BorderType&lt;br /&gt;
|enum&lt;br /&gt;
|Тип границы окна&lt;br /&gt;
|0: Не определен (ошибка)&lt;br /&gt;
1: Фиксированная&lt;br /&gt;
&lt;br /&gt;
2: Изменяемая&lt;br /&gt;
&lt;br /&gt;
3: Отсутствует&lt;br /&gt;
|Чтение/Запись&lt;br /&gt;
|-&lt;br /&gt;
|Отображать строку заголовка&lt;br /&gt;
|TitleEnabled&lt;br /&gt;
|bool&lt;br /&gt;
|Отображать строку заголовка&lt;br /&gt;
|true/false&lt;br /&gt;
|Чтение/Запись&lt;br /&gt;
|-&lt;br /&gt;
|Отображать кнопку &amp;quot;Закрыть&amp;quot;&lt;br /&gt;
|CloseEnabled&lt;br /&gt;
|bool&lt;br /&gt;
|Отображать кнопку &amp;quot;Закрыть&amp;quot;&lt;br /&gt;
|true/false&lt;br /&gt;
|Чтение/Запись&lt;br /&gt;
|-&lt;br /&gt;
|Цвет фона&lt;br /&gt;
|BackgroundColor&lt;br /&gt;
|NColor&lt;br /&gt;
|Цвет фона окна&lt;br /&gt;
|Цвет в формате RGBA&lt;br /&gt;
|Чтение/Запись&lt;br /&gt;
|-&lt;br /&gt;
|Затемнение&lt;br /&gt;
|NeedDarkenApplication&lt;br /&gt;
|bool&lt;br /&gt;
|Затемнение других окон приложения при открытии этого окна&lt;br /&gt;
|true/false&lt;br /&gt;
|Чтение/Запись&lt;br /&gt;
|-&lt;br /&gt;
|Цвет затемнения&lt;br /&gt;
|ColorDarkenApplication&lt;br /&gt;
|NColor&lt;br /&gt;
|Цвет затемнения&lt;br /&gt;
|Цвет в формате RGBA&lt;br /&gt;
|Чтение/Запись&lt;br /&gt;
|-&lt;br /&gt;
|Интервал обновления&lt;br /&gt;
|UpdateInterval&lt;br /&gt;
|int&lt;br /&gt;
|Интервал обновления виджетов, мс&lt;br /&gt;
|0 - без задержки&lt;br /&gt;
&amp;gt;0 - интервал в мс&lt;br /&gt;
|Чтение/Запись&lt;br /&gt;
|-&lt;br /&gt;
|Действия OnShow&lt;br /&gt;
|ActionsOnShow&lt;br /&gt;
|NodesContainer&lt;br /&gt;
|Действия при показе окна&lt;br /&gt;
|Узлы типа: Action&lt;br /&gt;
|Чтение/Запись&lt;br /&gt;
|-&lt;br /&gt;
|Действия OnClose&lt;br /&gt;
|ActionsOnClose&lt;br /&gt;
|NodesContainer&lt;br /&gt;
|Действия при закрытии окна&lt;br /&gt;
|Узлы типа: Action&lt;br /&gt;
|Чтение/Запись&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== Модальность (Modality) ====&lt;br /&gt;
'''Тип:''' enum.&lt;br /&gt;
&lt;br /&gt;
'''Описание:''' Определяет поведение окна относительно других окон приложения.&lt;br /&gt;
&lt;br /&gt;
'''Значения:'''&lt;br /&gt;
&lt;br /&gt;
* '''Немодальное''' - позволяет взаимодействовать с другими окнами.&lt;br /&gt;
* '''Модальное (Фрейм)''' - блокирует взаимодействие с окнами в том же фрейме.&lt;br /&gt;
* '''Модальное (Система)''' - блокирует все окна приложения.&lt;br /&gt;
&lt;br /&gt;
==== Тип границы (BorderType) ====&lt;br /&gt;
'''Тип:''' enum.&lt;br /&gt;
&lt;br /&gt;
'''Описание:''' Определяет тип и поведение границ окна.&lt;br /&gt;
&lt;br /&gt;
'''Значения:'''&lt;br /&gt;
&lt;br /&gt;
* '''Фиксированная''' - окно нельзя изменять размер.&lt;br /&gt;
* '''Изменяемая''' - пользователь может изменять размер окна.&lt;br /&gt;
* '''Отсутствует''' - окно без видимых границ.&lt;br /&gt;
&lt;br /&gt;
==== Управление заголовком (TitleEnabled, CloseEnabled) ====&lt;br /&gt;
'''Тип:''' bool.&lt;br /&gt;
&lt;br /&gt;
'''Описание:''' Контролируют отображение элементов заголовка окна.&lt;br /&gt;
&lt;br /&gt;
==== Фон и затемнение (BackgroundColor, NeedDarkenApplication, ColorDarkenApplication) ====&lt;br /&gt;
'''Тип:''' NColor, bool, NColor.&lt;br /&gt;
&lt;br /&gt;
'''Описание:''' Управляют визуальным оформлением окна и его влиянием на другие окна.&lt;br /&gt;
&lt;br /&gt;
'''Особенности:'''&lt;br /&gt;
&lt;br /&gt;
* Затемнение применяется только при NeedDarkenApplication = true.&lt;br /&gt;
* Цвет затемнения по умолчанию: черный с прозрачностью 50%.&lt;br /&gt;
&lt;br /&gt;
==== Интервал обновления (UpdateInterval) ====&lt;br /&gt;
'''Тип:''' int.&lt;br /&gt;
&lt;br /&gt;
'''Описание:''' Определяет частоту обновления виджетов в окне.&lt;br /&gt;
&lt;br /&gt;
'''Рекомендации:'''&lt;br /&gt;
&lt;br /&gt;
* 0 - 100 мс для композиций с критичным временем отклика.&lt;br /&gt;
* 100 - 500 мс хорошо подходит для большинства случаев.&lt;br /&gt;
* более 1000 мс - для статических или редко меняющихся данных.&lt;br /&gt;
&lt;br /&gt;
==== Обработчики событий (ActionsOnShow, ActionsOnClose) ====&lt;br /&gt;
'''Тип:''' NodesContainer.&lt;br /&gt;
&lt;br /&gt;
'''Описание:''' Коллекции действий, выполняемых при показе и закрытии окна.&lt;br /&gt;
&lt;br /&gt;
=== Окно с композицией ===&lt;br /&gt;
Данный узел имеет те же свойства, что и форма, а также собственные:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Наименование свойства&lt;br /&gt;
!Идентификатор&lt;br /&gt;
!Тип&lt;br /&gt;
!Описание&lt;br /&gt;
!Допустимые значения&lt;br /&gt;
!Режим доступа&lt;br /&gt;
|-&lt;br /&gt;
|Композиция&lt;br /&gt;
|CompositionId&lt;br /&gt;
|NodeLink&lt;br /&gt;
|Основная композиция окна&lt;br /&gt;
|Узлы типа: CompositionLayered, CompositionTemplated&lt;br /&gt;
|Чтение/Запись&lt;br /&gt;
|-&lt;br /&gt;
|Описание текущей композиции&lt;br /&gt;
|CurrentCompositionDesc&lt;br /&gt;
|string&lt;br /&gt;
|Описание текущей загруженной композиции&lt;br /&gt;
|Автоматически формируется&lt;br /&gt;
|Только чтение&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== Композиция (CompositionId) ====&lt;br /&gt;
'''Тип:''' NodeLink.&lt;br /&gt;
&lt;br /&gt;
'''Описание:''' Ссылка на композицию, отображаемую в окне.&lt;br /&gt;
&lt;br /&gt;
'''Поддерживаемые типы:''' CompositionLayered, CompositionTemplated.&lt;br /&gt;
&lt;br /&gt;
==== Описание текущей композиции (CurrentCompositionDesc) ====&lt;br /&gt;
'''Тип:''' string.&lt;br /&gt;
&lt;br /&gt;
'''Описание:''' Автоматически обновляемое описание загруженной композиции.&lt;br /&gt;
&lt;br /&gt;
'''Особенности:''' Свойство только для чтения, обновляется системой автоматически.[[Файл:AgavaPLC-Настройка меню в среде разработки.png|мини|226x226пкс|Рисунок 25 — Настройка меню в среде разработки]]&lt;br /&gt;
&lt;br /&gt;
===Композиция===&lt;br /&gt;
Композиция – узел, представляющий составленную при разработке проекта мнемоническую схему в виде набора элементов визуализации (виджетов), сгруппированных в один или несколько слоев.&lt;br /&gt;
&lt;br /&gt;
Композиция дает возможность организовать виджеты в слои, видимостью которых можно управлять во время работы проекта.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Наименование свойства&lt;br /&gt;
!Идентификатор&lt;br /&gt;
!Тип&lt;br /&gt;
!Описание&lt;br /&gt;
!Допустимые значения&lt;br /&gt;
!Режим доступа&lt;br /&gt;
|-&lt;br /&gt;
|Размеры&lt;br /&gt;
|Size&lt;br /&gt;
|NSize&lt;br /&gt;
|Размеры композиции&lt;br /&gt;
|Структура {ширина, высота}&lt;br /&gt;
|Чтение/Запись&lt;br /&gt;
|-&lt;br /&gt;
|Кэширование&lt;br /&gt;
|Cacheable&lt;br /&gt;
|bool&lt;br /&gt;
|Кэширование данных композиции для быстрого повторного открытия&lt;br /&gt;
|true/false&lt;br /&gt;
|Чтение/Запись&lt;br /&gt;
|-&lt;br /&gt;
|Источник интервала обновления&lt;br /&gt;
|UpdateIntervalSource&lt;br /&gt;
|enum&lt;br /&gt;
|Определяет источник интервала обновления виджетов&lt;br /&gt;
|0: Окно&lt;br /&gt;
1: Композиция&lt;br /&gt;
|Чтение/Запись&lt;br /&gt;
|-&lt;br /&gt;
|Интервал обновления&lt;br /&gt;
|UpdateInterval&lt;br /&gt;
|int&lt;br /&gt;
|Интервал обновления виджетов в миллисекундах&lt;br /&gt;
|Целое число ≥ 0&lt;br /&gt;
|Чтение/Запись&lt;br /&gt;
|-&lt;br /&gt;
|Действия OnLoad&lt;br /&gt;
|ActionsOnLoad&lt;br /&gt;
|NodesContainer&lt;br /&gt;
|Действия при загрузке композиции&lt;br /&gt;
|Узлы типа: Action&lt;br /&gt;
|Чтение/Запись&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== Размеры (Size) ====&lt;br /&gt;
'''Тип:''' NSize (ширина, высота).&lt;br /&gt;
&lt;br /&gt;
'''Описание:''' Определяет размеры композиции в пикселях. По умолчанию установлены значения 800x600.&lt;br /&gt;
&lt;br /&gt;
==== Кэширование (Cacheable) ====&lt;br /&gt;
'''Тип:''' bool.&lt;br /&gt;
&lt;br /&gt;
'''Описание:''' Включает или отключает кэширование данных композиции. При включенном кэшировании композиция сохраняется в памяти для быстрого повторного открытия.&lt;br /&gt;
&lt;br /&gt;
'''Преимущества кэширования:'''&lt;br /&gt;
&lt;br /&gt;
* Быстрое переключение между композициями.&lt;br /&gt;
* Снижение нагрузки на систему при частом использовании.&lt;br /&gt;
* Сохранение состояния элементов.&lt;br /&gt;
&lt;br /&gt;
'''Рекомендации:''' Включать для часто используемых композиций, отключать для редко используемых или ресурсоемких.&lt;br /&gt;
&lt;br /&gt;
==== Источник интервала обновления (UpdateIntervalSource) ====&lt;br /&gt;
'''Тип:''' enum.&lt;br /&gt;
&lt;br /&gt;
'''Описание:''' Определяет, откуда виджеты композиции получают интервал обновления.&lt;br /&gt;
&lt;br /&gt;
'''Значения:'''&lt;br /&gt;
&lt;br /&gt;
* '''Окно''' - интервал обновления наследуется от родительского окна.&lt;br /&gt;
* '''Композиция''' - используется собственный интервал обновления композиции.&lt;br /&gt;
&lt;br /&gt;
'''Применение:''' Централизованное управление производительностью через окно или индивидуальная настройка для каждой композиции.&lt;br /&gt;
&lt;br /&gt;
==== Интервал обновления (UpdateInterval) ====&lt;br /&gt;
'''Тип:''' int.&lt;br /&gt;
&lt;br /&gt;
'''Описание:''' Задает интервал обновления виджетов в миллисекундах. При значении 0 отрисовка виджетов выполняется без задержки (максимальная частота).&lt;br /&gt;
&lt;br /&gt;
'''Особенности:'''&lt;br /&gt;
&lt;br /&gt;
* 0 - обновление без задержек (может создать высокую нагрузку).&lt;br /&gt;
* &amp;gt; 0 - обновление с заданным интервалом.   Учитывается только при UpdateIntervalSource = &amp;quot;Композиция&amp;quot;&lt;br /&gt;
&lt;br /&gt;
'''Рекомендации:'''&lt;br /&gt;
&lt;br /&gt;
* 0 - 100 мс для композиций с критичным временем отклика.&lt;br /&gt;
* 100 - 500 мс хорошо подходит для большинства случаев.&lt;br /&gt;
* более 1000 мс - для статических или редко меняющихся данных.&lt;br /&gt;
&lt;br /&gt;
==== Обработчик событий ActionsOnLoad ====&lt;br /&gt;
'''Тип:''' NodesContainer.&lt;br /&gt;
&lt;br /&gt;
'''Описание:''' Коллекции действий, выполняемых после загрузки композиции &amp;lt;code&amp;gt;AS 1.6.27+&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
===Слой===&lt;br /&gt;
Слой – набор виджетов, объединенных каким-то общим структурным признаком. В многослойных композициях слой обеспечивает организацию виджетов в z-порядке, управление видимостью и взаимодействием с пользователем. С помошью свойства &amp;quot;Видимость&amp;quot; слоя можно управлять видимостью виджетов, размещенных на слое.&lt;br /&gt;
&lt;br /&gt;
Свойства&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Наименование свойства&lt;br /&gt;
!Идентификатор&lt;br /&gt;
!Тип&lt;br /&gt;
!Описание&lt;br /&gt;
!Допустимые значения&lt;br /&gt;
!Режим доступа&lt;br /&gt;
|-&lt;br /&gt;
|Z-Порядок&lt;br /&gt;
|ZOrder&lt;br /&gt;
|int&lt;br /&gt;
|Порядок слоя в композиции&lt;br /&gt;
|Целое число (чем выше значение, тем выше слой)&lt;br /&gt;
|Чтение/Запись&lt;br /&gt;
|-&lt;br /&gt;
|Прозрачность для действий&lt;br /&gt;
|ActionTransparency&lt;br /&gt;
|enum&lt;br /&gt;
|Определяет поведение слоя при взаимодействии с пользователем&lt;br /&gt;
|0: Не определен (ошибка)&lt;br /&gt;
1: Непрозрачный&lt;br /&gt;
&lt;br /&gt;
2: Прозрачный&lt;br /&gt;
|Чтение/Запись&lt;br /&gt;
|-&lt;br /&gt;
|Видимость&lt;br /&gt;
|Visible&lt;br /&gt;
|bool&lt;br /&gt;
|Видимость слоя и всех его виджетов&lt;br /&gt;
|true/false&lt;br /&gt;
|Чтение/Запись&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== Z-Порядок (ZOrder) ====&lt;br /&gt;
'''Тип:''' int&lt;br /&gt;
&lt;br /&gt;
'''Описание:''' Определяет порядок отображения слоя относительно других слоев в композиции. Слои с большим значением ZOrder отображаются поверх слоев с меньшим значением.&lt;br /&gt;
&lt;br /&gt;
'''Пример использования:'''&lt;br /&gt;
&lt;br /&gt;
* Фоновый слой: ZOrder = 1.&lt;br /&gt;
* Основной контент: ZOrder = 2.&lt;br /&gt;
* Контекстные виджеты: ZOrder = 3.&lt;br /&gt;
&lt;br /&gt;
==== Прозрачность для действий (ActionTransparency) ====&lt;br /&gt;
'''Тип:''' enum&lt;br /&gt;
&lt;br /&gt;
'''Описание:''' Управляет взаимодействием слоя с пользовательскими действиями (клики, наведения и т.д.)&lt;br /&gt;
&lt;br /&gt;
'''Значения:'''&lt;br /&gt;
&lt;br /&gt;
* '''Непрозрачный''' - слой полностью перехватывает пользовательские действия, элементы под ним недоступны, даже если они видимы.&lt;br /&gt;
* '''Прозрачный''' - пользовательские действия проходят сквозь слой к элементам ниже.&lt;br /&gt;
&lt;br /&gt;
Обратите внимание: если на слое размещается изображение с прозрачной областью, то такие виджеты не позволяют пользователю взаимодействовать с видимыми и размещенными под ним виджетами.&lt;br /&gt;
&lt;br /&gt;
==== Видимость (Visible) ====&lt;br /&gt;
'''Тип:''' bool&lt;br /&gt;
&lt;br /&gt;
'''Описание:''' Определяет видимость всего слоя и всех его дочерних виджетов. При значении false слой и все его содержимое становится невидимым.&lt;br /&gt;
&lt;br /&gt;
'''Применение:''' Временное скрытие виджетов или переключение их видимости.&lt;br /&gt;
&lt;br /&gt;
===Виджет===&lt;br /&gt;
Виджет – элемент визуализации, предназначенный для отображения информации в заданном виде.&lt;br /&gt;
&lt;br /&gt;
===Меню===&lt;br /&gt;
Меню – элемент визуализации, сочетающий в себе несколько виджетов «Кнопка». Используется для более удобного управления проектом (см. Рисунок 24).&lt;br /&gt;
&lt;br /&gt;
Для добавления меню, необходимо в среде разработки назначить [[Универсальная среда разработки#.D0.94.D0.B5.D0.B9.D1.81.D1.82.D0.B2.D0.B8.D0.B5 .C2.AB.D0.9E.D1.82.D0.BE.D0.B1.D1.80.D0.B0.D0.B6.D0.B5.D0.BD.D0.B8.D0.B5 .D0.BC.D0.B5.D0.BD.D1.8E.C2.BB|действие «Отображение меню»]] для кнопки (или любого другого виджета). После добавления действия необходимо выделить его и нажать на кнопку настроек на панели вверху окна действий. Открывшееся окно (см. Рисунок 25) содержит дерево со структурой меню, в который можно добавлять элементы двух типов:&lt;br /&gt;
&lt;br /&gt;
*меню – элемент, который позволяет группировать элементы меню, выводя их в виде раскрывающегося списка. На рисунках 24 и 25 этим элементом являются кнопки «Арочник» и «БПО».&lt;br /&gt;
*элемент меню – элемент, который предоставляет функционал, аналогичный [[Универсальная среда разработки#.D0.92.D0.B8.D0.B4.D0.B6.D0.B5.D1.82 .C2.AB.D0.9A.D0.BD.D0.BE.D0.BF.D0.BA.D0.B0.C2.BB|виджету «Кнопка»]]. Для добавления действия, выполняющегося при нажатии на элемент меню в среде исполнения, необходимо нажать на него ПКМ в дереве структуры меню и выбрать &amp;quot;Создать действие&amp;quot;. На рисунках 24 и 25 этим элементом являются кнопки «Котельная», «Котёл №1», «Котёл №2» и «Котёл №3».&lt;br /&gt;
&lt;br /&gt;
=== Создание многомониторных систем визуализации ===&lt;br /&gt;
AgavaSCADA предоставляет возможность реализации систем визуализации в составе проектов, использующих для отображения информации более одного дисплея.&lt;br /&gt;
&lt;br /&gt;
Для вывода информации в окнах на нескольких дисплеях в проект необходимо внести следующие корректировки относительно проекта, использующего только один дисплей:&lt;br /&gt;
&lt;br /&gt;
# Добавить дополнительные фреймы, чтобы их количество в проекте соответствовало количеству дисплеев. Каждому фрейму назначить порядковый номер, начиная с 1. Фреймы связываются с дисплеями по номеру.&lt;br /&gt;
# Добавить дополнительное окно (или окна, если в исходном фрейме их несколько или дополнительных фреймов больше одного).&lt;br /&gt;
# Добавить в дополнительные фреймы созданные на этапе 2 окна, чтобы повторить структуру основоного фрейма.&lt;br /&gt;
&lt;br /&gt;
Базовая настройка на этом закончена. После запуска такого проекта на двух или более дисплеях должны отображаться созданные окна.&lt;br /&gt;
&lt;br /&gt;
Если в проекте используется навигация по окнам, то необходимо в каждом окне, включенном в фрейм, скорректировать действия, размещаемые на кнопках, меню или друигх виджетах таким образом, чтобы действия открывали окна или загружали композиции в нужном окне.&lt;br /&gt;
&lt;br /&gt;
===Виджеты===&lt;br /&gt;
====Виджет «Текстовая метка»====&lt;br /&gt;
[[Файл:AgavaPLC–Примеры оформления виджетов типа &amp;quot;Текстовая метка&amp;quot;.png|мини|Рисунок 26 – Примеры оформления виджетов типа &amp;quot;Текстовая метка&amp;quot;]]&lt;br /&gt;
Виджет «Текстовая метка» – наиболее часто применяемый виджет, с помощью которого можно реализовать разные способы отображения текстовой информации.&lt;br /&gt;
&lt;br /&gt;
Виджет «Текстовая метка» может использоваться для отображения статичного текста, значений параметров (одного или нескольких) и их комбинаций.&lt;br /&gt;
&lt;br /&gt;
При необходимости отображения значений параметров они указываются в свойстве «Источник». Для задания определенного формата отображения используются спецификаторы формата в стиле языка «Си»:&lt;br /&gt;
&lt;br /&gt;
*%f – значение в виде числа с плавающей точкой;&lt;br /&gt;
* %s – строка;&lt;br /&gt;
*%i – целое число со знаком;&lt;br /&gt;
*%u – целое число без знака;&lt;br /&gt;
* %d – целое число со знаком в десятичной системе исчисления.&lt;br /&gt;
&lt;br /&gt;
Для разных типов свойств необходимо использовать строго определенные для них спецификаторы, с другими спецификаторами значения выводиться не будут.&lt;br /&gt;
&lt;br /&gt;
Для отображения знака «%» необходимо указать его дважды: «%%».&lt;br /&gt;
&lt;br /&gt;
===== Отображение нескольких значений =====&lt;br /&gt;
Одна текстовая метка может использоваться для отображения нескольких значений. Для этого все значения, которые нужно отобразить, указываются в свойстве «Источник», а в свойстве «Текст» указываются последовательно несколько спецификаторов формата соответственно порядку перечисления значений в свойстве «Источник».&lt;br /&gt;
&lt;br /&gt;
Пример: текстовая метка, отображающая текущую позицию в очереди:&lt;br /&gt;
&lt;br /&gt;
* Текст: &amp;lt;code&amp;gt;Позиция %i из %i&amp;lt;/code&amp;gt;&lt;br /&gt;
* Источник: два узла из проекта.&lt;br /&gt;
&lt;br /&gt;
=====Модификаторы спецификаторов формата=====&lt;br /&gt;
&lt;br /&gt;
======Модификатор минимальной ширины поля======&lt;br /&gt;
Целое число, расположенное между знаком % и кодом формата, играет роль модификатора минимальной ширины поля. Если указан модификатор минимальной ширины поля, то, чтобы ширина поля вывода была не меньше указанной минимальной величины, вывод при необходимости будет дополнен пробелами. Если же выводятся строки или числа, которые длиннее указанного минимума, то они все равно будут отображаться полностью. По умолчанию для дополнения используются пробелы. А если для этого надо использовать нули, то перед модификатором ширины поля следует поместить 0. Например, %05i означает, что любое число, количество цифр которого меньше пяти, будет дополнено таким количеством нулей, чтобы состоять из пяти цифр.&lt;br /&gt;
&lt;br /&gt;
Примеры&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Значение&lt;br /&gt;
!Спецификатор формата&lt;br /&gt;
!Выводимое значение&lt;br /&gt;
|-&lt;br /&gt;
|10.123&lt;br /&gt;
|%i&lt;br /&gt;
|10&lt;br /&gt;
|-&lt;br /&gt;
|10.123&lt;br /&gt;
|%d&lt;br /&gt;
|10&lt;br /&gt;
|-&lt;br /&gt;
|10.123&lt;br /&gt;
|%05i&lt;br /&gt;
|00010&lt;br /&gt;
|-&lt;br /&gt;
|10.123&lt;br /&gt;
|%f&lt;br /&gt;
|10.123000&lt;br /&gt;
|-&lt;br /&gt;
|10.123&lt;br /&gt;
|%.1f&lt;br /&gt;
| 10.1&lt;br /&gt;
|-&lt;br /&gt;
|10.123&lt;br /&gt;
|%10f&lt;br /&gt;
|&amp;lt;пробел&amp;gt;10.123000&lt;br /&gt;
|-&lt;br /&gt;
|10.123&lt;br /&gt;
|%012f&lt;br /&gt;
|00010.123000&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
======Модификатор точности======&lt;br /&gt;
Модификатор точности следует за модификатором минимальной ширины поля (если таковой имеется). Он состоит из точки и расположенного за ней целого числа. Значение этого модификатора зависит от типа данных, к которым его применяют.&lt;br /&gt;
&lt;br /&gt;
Когда модификатор точности применяется к данным с плавающей точкой, для преобразования которых используются спецификаторы преобразования %f, %e или %E, то он определяет количество выводимых десятичных разрядов. Например, %10.4f означает, что ширина поля вывода будет не менее 10 символов, причем для десятичных разрядов будет отведено четыре позиции.&lt;br /&gt;
&lt;br /&gt;
Если модификатор точности применяется к %g или %G, то он определяет количество значащих цифр.&lt;br /&gt;
&lt;br /&gt;
Примененный к строкам, модификатор точности определяет максимальную длину поля. Например, %5.7s означает, что длина выводимой строки будет составлять минимум пять и максимум семь символов. Если строка окажется длиннее, чем максимальная длина поля, то конечные символы выводиться не будут.&lt;br /&gt;
&lt;br /&gt;
Если модификатор точности применяется к целым типам, то он определяет минимальное количество цифр, которые будут выведены для каждого из чисел. Чтобы получилось требуемое количество цифр, добавляется некоторое количество ведущих нулей.&lt;br /&gt;
&lt;br /&gt;
Примеры:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Значение&lt;br /&gt;
!Спецификатор формата&lt;br /&gt;
!Выводимое значение&lt;br /&gt;
|-&lt;br /&gt;
|10.123&lt;br /&gt;
|%f&lt;br /&gt;
|10.123000&lt;br /&gt;
|-&lt;br /&gt;
|10.123&lt;br /&gt;
|%.1f&lt;br /&gt;
|10.1&lt;br /&gt;
|-&lt;br /&gt;
|10.123&lt;br /&gt;
|%10.4f&lt;br /&gt;
|&amp;lt;пробел&amp;gt;&amp;lt;пробел&amp;gt;&amp;lt;пробел&amp;gt;10.1230&lt;br /&gt;
|-&lt;br /&gt;
|10.123&lt;br /&gt;
|%010.3f&lt;br /&gt;
|000010.123&lt;br /&gt;
|-&lt;br /&gt;
| Это простая проверка&lt;br /&gt;
|%10.15s&lt;br /&gt;
|Это простая про&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
====Виджет «Условная метка» ====&lt;br /&gt;
[[Файл:AgavaPLC–Список сопоставлений виджета &amp;quot;Условная метка&amp;quot;.png|мини|Рисунок 27 – Список сопоставлений виджета &amp;quot;Условная метка&amp;quot;|ссылка=Файл:AgavaPLC–Список_сопоставлений_виджета_%22Условная_метка%22.png]]&lt;br /&gt;
Виджет «Условная метка» позволяет изменять выводимую строку в соответствии с изменениями привязанной к ней переменной.&lt;br /&gt;
&lt;br /&gt;
Задать соответствие текста необходимому условию можно в свойстве «Список сопоставлений».&lt;br /&gt;
&lt;br /&gt;
==== Виджет «Изображение»====&lt;br /&gt;
Виджет «Изображение» предназначен для отображения на окнах статичных изображений форматов png, gif, jpg, bmp или анимированных изображений в формате gif. Отображаемая картинка выбирается в разделе «Оформление» - «Изображение». Она должна находиться в папке проекта.&lt;br /&gt;
&lt;br /&gt;
====Виджет «Условное изображение»====&lt;br /&gt;
[[Файл:AgavaPLC–Список сопоставлений виджета &amp;quot;Условное изображение&amp;quot;.png|мини|Рисунок 28 – Список сопоставлений виджета &amp;quot;Условное изображение&amp;quot;|ссылка=Файл:AgavaPLC–Список_сопоставлений_виджета_%22Условное_изображение%22.png]]&lt;br /&gt;
Виджет «Условное изображение» позволяет изменять отображаемое изображение в соответствии с изменениями привязанной к нему переменной.&lt;br /&gt;
&lt;br /&gt;
Задать соответствие изображения необходимому условию можно в свойстве «Список сопоставлений».&lt;br /&gt;
&lt;br /&gt;
====Виджет «Движущееся изображение»====&lt;br /&gt;
Виджет предназначен для отображения на окнах изображений, перемещающихся в пределах области виджета. В основном используются на экране спящего режима.&lt;br /&gt;
&lt;br /&gt;
Отображаемая картинка выбирается в разделе «Оформление» - «Изображение». Она должна находиться в папке проекта.&lt;br /&gt;
&lt;br /&gt;
====Виджет «Кнопка»====&lt;br /&gt;
Виджет «Кнопка» предназначен для реализации функций управления:&lt;br /&gt;
&lt;br /&gt;
*ввод данных;&lt;br /&gt;
*передача управляющих воздействий;&lt;br /&gt;
* смена режима работы АРМ или иного устройства, исполняющего проект.&lt;br /&gt;
&lt;br /&gt;
Выполнение всех функций виджета обеспечивается с помощью узлов типа «Действие», добавляемых в соответствующее свойство (см. раздел [[#Действия]]).&lt;br /&gt;
&lt;br /&gt;
====Виджет «Гистограмма»====&lt;br /&gt;
[[Файл:AgavaPLC–Виджет &amp;quot;Гистограмма&amp;quot;.png|мини|Рисунок 29 – Виджет &amp;quot;Гистограмма&amp;quot;|ссылка=Файл:AgavaPLC–Виджет_%22Гистограмма%22.png]]&lt;br /&gt;
Виджет предназначен для отображения значений сигналов в виде столбчатой диаграммы.&lt;br /&gt;
&lt;br /&gt;
Виджету необходимо задать источник (регистр/сигнал, с которого он будет получать данные), а также минимальное и максимальное значения.&lt;br /&gt;
&lt;br /&gt;
====Виджет «Исторический график»====&lt;br /&gt;
Виджет «Исторический график» предназначен для отображения графиков параметров на двухкоординатной области изображения с привязкой к осям времени и значений.&lt;br /&gt;
&lt;br /&gt;
Виджет может работать с данными, архивируемыми в БД, и напрямую с сигналами, значения которых вычисляются в ходе работы.  &lt;br /&gt;
&lt;br /&gt;
При работе с архивируемыми данными интервал обновления графика зависит от режима выдачи значения у базы данных: при выборе сохраняемых в БД он будет соответствовать интервалу архивирования, а при сохраненных в БД - интервалу сохранения БД на диск. Независимо от режима выдачи, график не может обновляться меньше чем за 300 мс.&lt;br /&gt;
&lt;br /&gt;
При работе напрямую с сигналами график обновляется при изменении значения сигнала, но также не чаще чем раз в 300 мс.&lt;br /&gt;
[[Файл:AgavaPLC–Экран «Архив» с виджетом «Исторический график».png|мини|Рисунок 30 – Виджет «Исторический график». Области кнопок-пиктограмм. В нижней части отображена легенда]]&lt;br /&gt;
Виджет «Исторический график» состоит из нескольких областей:&lt;br /&gt;
&lt;br /&gt;
*область осей Х, Y;&lt;br /&gt;
*область легенды, содержащей список кривых и их параметры (цвет кривой, наименование кривой, текущее значение, время последнего зарегистрированного значения);&lt;br /&gt;
*область вывода данных.&lt;br /&gt;
&lt;br /&gt;
На виджете имеются несколько областей, содержащих кнопки-пиктограммы управления внешним видом графика (см. Рисунок 28):&lt;br /&gt;
&lt;br /&gt;
#область пиктограмм графика;&lt;br /&gt;
#область пиктограмм оси времени (X);&lt;br /&gt;
#область пиктограмм оси значений (Y);&lt;br /&gt;
#область легенды.&lt;br /&gt;
&lt;br /&gt;
В области пиктограмм графика слева направо расположены следующие кнопки-пиктограммы:&lt;br /&gt;
&lt;br /&gt;
* кнопка переключения режима отображения точек на всех кривых;&lt;br /&gt;
* кнопка переключения видимости легенды;&lt;br /&gt;
*кнопка включения режима визирной линии.&lt;br /&gt;
&lt;br /&gt;
В области пиктограмм оси времени (X) слева направо расположены следующие кнопки-пиктограммы:&lt;br /&gt;
&lt;br /&gt;
*кнопка открытия окна выбора интервала времени для оси Х, текст кнопки отображает текущий выбранный интервал, например: 5М – 5 минут, 6Ч – 6 часов, 30М – 30 минут;&lt;br /&gt;
*кнопка-индикатор включения следящего режима.&lt;br /&gt;
&lt;br /&gt;
В области пиктограмм оси значений (Y) расположена кнопка-пиктограмма «A» – кнопка переключения режима автоматического масштабирования значений.&lt;br /&gt;
&lt;br /&gt;
=====Легенда=====&lt;br /&gt;
[[Файл:AgavaPLC–Легенда с четырьмя выключенными параметрами.png|мини|Рисунок 31 – Легенда с четырьмя выключенными параметрами]]&lt;br /&gt;
Легенда – специальная область в нижней части экрана архива, предназначенная для отображения параметров (наименование, текущее значение и т. д.) выводимых графиков в виде таблицы. Для ознакомления с примерным видом легенды см. Рисунок 31. Информация о каждом сигнале в легенде выводится в несколько колонок:&lt;br /&gt;
&lt;br /&gt;
*«Цвет» – индицирует цвет, которым выводится соответствующая кривая на графике, колонка «Цвет» позволяет нажатием переключать видимость соответствующей кривой на графике (см. Рисунок 29). Также в колонке &amp;quot;Цвет&amp;quot; отображается номер пера, которым выводится кривая параметра на графике;&lt;br /&gt;
* «Имя» («Наименование») – содержит наименование параметра;&lt;br /&gt;
*«Время» – содержит время последнего зарегистрированного значения параметра;&lt;br /&gt;
*«Значение» – содержит последнее зарегистрированное значение параметра.&lt;br /&gt;
&lt;br /&gt;
=====Режимы просмотра графиков=====&lt;br /&gt;
Пользователю доступно два режима просмотра графиков:&lt;br /&gt;
&lt;br /&gt;
*следящий режим;&lt;br /&gt;
*режим просмотра истории.&lt;br /&gt;
&lt;br /&gt;
В следящем режиме на графике всегда отображаются актуальные значения параметров, тренд периодически дочитывает поступившие данные из базы и обновляет графики. &lt;br /&gt;
&lt;br /&gt;
В режиме просмотра истории на графике отображаются исторические значения параметров. Просмотр истории технологического процесса осуществляется с помощью кнопок перемещения по осям и кнопок изменения масштаба.&lt;br /&gt;
&lt;br /&gt;
Режим просмотра истории включается автоматически при прокрутке графика назад по времени.&lt;br /&gt;
&lt;br /&gt;
=====Визирная линия=====&lt;br /&gt;
[[Файл:AgavaPLC–График в режиме просмотра истории с установленной визирной линией.png|мини|Рисунок 32 – График в режиме просмотра истории с установленной визирной линией]]&lt;br /&gt;
Для просмотра значений параметров в нужный момент времени служит визирная линия, отображаемая на графике как вертикальная линия.&lt;br /&gt;
&lt;br /&gt;
При щелчке левой кнопкой мыши (ЛКМ) в области графиков визирная линия будет отображена в выбранном месте графика.&lt;br /&gt;
&lt;br /&gt;
В точке пересечения визирной линии и кривых параметров отображаются значения этих параметров. Также в нижней части области графиков, возле оси времени, визирная линия отображает время.&lt;br /&gt;
&lt;br /&gt;
====Виджет «График кусочно-линейной функции»====&lt;br /&gt;
Виджет предназначен для отображения графика зависимости двух параметров, расположенном на осях X и Y.&lt;br /&gt;
[[Файл:AgavaPLC–Виджет «График кусочно-линейной функции». Области кнопок-пиктограмм..png|мини|Рисунок 33 – Виджет «График кусочно-линейной функции». Области кнопок-пиктограмм.]]&lt;br /&gt;
Виджет состоит из нескольких областей:&lt;br /&gt;
&lt;br /&gt;
*область осей Х, Y;&lt;br /&gt;
*область легенды, содержащей список кривых и их параметры (цвет кривой, наименование кривой, текущее значение, время последнего зарегистрированного значения);&lt;br /&gt;
*область вывода графика.&lt;br /&gt;
&lt;br /&gt;
На области вывода графика виджета имеются несколько областей, содержащих кнопки-пиктограммы управления внешним видом графика (см. Рисунок 33):&lt;br /&gt;
&lt;br /&gt;
#Область пиктограмм графика.&lt;br /&gt;
#Область пиктограмм оси первого параметра (X).&lt;br /&gt;
#Область пиктограмм оси второго параметра (Y).&lt;br /&gt;
&lt;br /&gt;
В области пиктограмм графика расположены следующие кнопки-пиктограммы:&lt;br /&gt;
&lt;br /&gt;
*кнопка переключения режима отображения точек на всех кривых;&lt;br /&gt;
*кнопка переключения видимости легенды;&lt;br /&gt;
*кнопка включения режима визирной линии.&lt;br /&gt;
&lt;br /&gt;
В области пиктограмм оси первого (X) и второго (Y) параметров расположены кнопки-пиктограммы «А» – кнопка переключения режима автоматического масштабирования значений.[[Файл:AgavaPLC–Виджет &amp;quot;Список событий&amp;quot;.png|мини|Рисунок 34 – Виджет &amp;quot;Список событий&amp;quot;|ссылка=Файл:AgavaPLC–Виджет_%22Список_событий%22.png]]&lt;br /&gt;
====Виджет «Список событий»====&lt;br /&gt;
[[Файл:AgavaPLC–Окно выбора интервала.png|мини|Рисунок 35 – Окно выбора интервала]]Виджет предназначен для отображения регистрируемых событий в работе.&lt;br /&gt;
&lt;br /&gt;
В верхней части виджета расположена панель управления (1).&lt;br /&gt;
&lt;br /&gt;
Панель управления содержит органы управления журналом:&lt;br /&gt;
&lt;br /&gt;
*кнопка отображения фильтра событий;&lt;br /&gt;
*кнопка включения следящего режима журнала;&lt;br /&gt;
*кнопка изменения интервала на один день назад;&lt;br /&gt;
*кнопка-индикатор выбора интервала, за который отображаются события;&lt;br /&gt;
*кнопка изменения интервала на один день вперед;&lt;br /&gt;
*кнопка вызова окна со списком активных тревог.&lt;br /&gt;
&lt;br /&gt;
Ниже панели управления, в основном поле экрана, расположена таблица, содержащая зарегистрированные события.&lt;br /&gt;
&lt;br /&gt;
Заголовок таблицы позволяет изменять порядок столбцов и включать сортировку по столбцам. Например, возможно включение сортировки событий сначала по времени, затем по группе. Заголовок таблицы имеет возможность отключения / включения отображения любого столбца.&lt;br /&gt;
&lt;br /&gt;
При большом количестве записей в правой части таблицы появляется полоса прокрутки, позволяющая пролистывать список событий.&lt;br /&gt;
&lt;br /&gt;
Нажатие на кнопку-индикатор выбора интервала вызывает окно выбора интервала (см. Рисунок 35):[[Файл:AgavaPLC–Окно &amp;quot;Фильтр&amp;quot;.png|мини|Рисунок 36 – Окно &amp;quot;Фильтр&amp;quot;|ссылка=Файл:AgavaPLC–Окно_%22Фильтр%22.png]]После выбора нужного интервала для сохранения выбора необходимо нажать кнопку «ОК». После сохранения будут отображены зарегистрированные события за выбранный интервал.&lt;br /&gt;
Нажатие на кнопку отображения окна фильтра вызывает соответствующее окно. Окно фильтра позволяет изменить содержимое основного окна журнала событий путем выбора групп и подгрупп событий, перечисленных в окне фильтра (см. Рисунок 36).&lt;br /&gt;
&lt;br /&gt;
После выбора нужных групп и подгрупп для сохранения выбора необходимо нажать кнопку «ОК». После сохранения будут отображены зарегистрированные события, принадлежащих выбранным группам.&lt;br /&gt;
&lt;br /&gt;
====Виджет «Ввод значения»====&lt;br /&gt;
Виджет «Ввод значения» предназначен для отображения значения привязанного сигнала и его редактирования.&lt;br /&gt;
[[Файл:AgavaPLC–Виджет «Ввод значения» с отображением экранной цифровой клавиатуры.png|мини|Рисунок 37 – Виджет «Ввод значения» с отображением экранной цифровой клавиатуры|212x212пкс]]&lt;br /&gt;
После выбора узла для чтения/записи и соответствующего типа значения необходимо выбрать нужный тип ввода в разделе «Оформление».&lt;br /&gt;
&lt;br /&gt;
Доступны следующие типы ввода:&lt;br /&gt;
&lt;br /&gt;
*кнопки изменения – при нажатии на виджет появляются кнопки увеличения и уменьшения на заданный шаг изменения;&lt;br /&gt;
*кнопка редактирования – при нажатии на виджет появляется кнопка, при клике на которую открывается экранная цифровая клавиатура;&lt;br /&gt;
&lt;br /&gt;
Виджет имеет возможность проверки вводимых значений, при активации которой запись будет осуществляться только тогда, когда записываемое значение будет находиться в диапазоне между заданными минимальным и максимальными значениями.&lt;br /&gt;
&lt;br /&gt;
====Виджет «Выбор значения из списка»====&lt;br /&gt;
[[Файл:AgavaPLC–Виджет «Выбор значения из списка».png|мини|Рисунок 38 – Виджет «Выбор значения из списка»]]&lt;br /&gt;
Виджет «Выбор значения из списка» предназначен для отображения значения привязанного сигнала и его изменения в удобном для пользователя текстовом виде (см. Рисунок 37).&lt;br /&gt;
&lt;br /&gt;
С помощью свойства «Список сопоставлений» задается соответствие между значением сигнала и выводимой в виджете строкой.&lt;br /&gt;
&lt;br /&gt;
При нажатии на кнопку в правой части виджета отображается список всех сопоставлений. При выборе нужного элемента в списке в установленный узел производится запись нового значения.&lt;br /&gt;
&lt;br /&gt;
====Виджет «Флаг»====&lt;br /&gt;
[[Файл:AgavaPLC–Варианты внешнего вида виджета «Флаг».png|мини|Рисунок 39 – Варианты внешнего вида виджета «Флаг»]]&lt;br /&gt;
Виджет «Флаг» предназначен для отображения значения и изменения булевой переменной (true/false). Состояние true отображается в виде галочки (см. Рисунок 38).&lt;br /&gt;
&lt;br /&gt;
При нажатии на виджет значение переменной изменяется на противоположное.&lt;br /&gt;
&lt;br /&gt;
В случае, если флаг необходимо использовать только для отображения информации, поставьте галочку в свойстве «Отключен»&lt;br /&gt;
&lt;br /&gt;
====Виджет «Отчет»====&lt;br /&gt;
[[Файл:AgavaPLC–Виджет «Отчет» в режиме отображения сформированного отчета.png|мини|Рисунок 40 – Виджет «Отчет» в режиме отображения сформированного отчета]]&lt;br /&gt;
Виджет «Отчет» предназначен для формирования отчетов по заранее спроектированному макету.&lt;br /&gt;
&lt;br /&gt;
Подробный порядок создания и редактирования отчетов приведен в разделе [[#Отчеты]].&lt;br /&gt;
[[Файл:AgavaPLC–Окно выбора интервала отчета.png|мини|Рисунок 41 – Окно выбора интервала отчета]]&lt;br /&gt;
В верхней части виджета размещена панель управления, содержащая кнопки вызова команд:&lt;br /&gt;
&lt;br /&gt;
* печать сформированного отчета на установленном в системе принтере;&lt;br /&gt;
*сохранение сформированного отчета в файле формата PDF;&lt;br /&gt;
*переход к предыдущей странице отчета;&lt;br /&gt;
*переход к следующей странице отчета;&lt;br /&gt;
*масштабирование экрана по ширине листа отчета;&lt;br /&gt;
*масштабирование экрана по высоте листа отчета.&lt;br /&gt;
&lt;br /&gt;
При формировании отчета для изменения интервала времени, за который будет формироваться отчет, необходимо на панели управления щелкнуть кнопку выбора интервала (на ней отображается текущий выбранный интервал, например, «Начало суток без смещения – Конец суток без смещения»). Далее появится окно «Интервал», в котором можно выбрать начало и конец интервала (см. Рисунок 41). &lt;br /&gt;
&lt;br /&gt;
В качестве начала и конца интервала можно выбрать как конкретную дату по календарю, так относительную, например, «Начало дня», &amp;quot;Конец недели&amp;quot;. После выбора желаемого интервала необходимо нажать кнопку «ОК».&lt;br /&gt;
&lt;br /&gt;
Выбранный интервал отобразится на панели управления отчетом. Для формирования отчета за выбранный интервал необходимо нажать кнопку «Сформировать отчет». Через некоторое время, после загрузки данных из БД и их обработки, экран обновится и сформированный отчет за выбранный интервал будет отображен.&lt;br /&gt;
&lt;br /&gt;
{{Шаблон:Действия AgavaSCADA/AgavaPLC}}&lt;br /&gt;
&lt;br /&gt;
==Система тревог==&lt;br /&gt;
Система тревог предназначена для оповещения пользователя об обнаруженных нарушениях.&lt;br /&gt;
&lt;br /&gt;
Система содержит два типа узлов:&lt;br /&gt;
&lt;br /&gt;
*Группа событий.&lt;br /&gt;
*Контроллер событий.&lt;br /&gt;
&lt;br /&gt;
===Группа событий===&lt;br /&gt;
Группа событий – узел, предназначенный для взаимодействия с виджетом «Список событий». Группы событий позволяют группировать события по какому-то признаку, например по уровню тревоги (авария, предупреждение, квитирование и т.д.), технологическому участку и т.д.&lt;br /&gt;
&lt;br /&gt;
Для каждой группы можно выбрать свой цвет шрифта и фона, которые будут использоваться для вывода событий, принадлежащих этой группе в виджете &amp;quot;Список событий&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
В свойстве «Описание» группы событий указывается текст, который будет отображаться в фильтре списка событий.&lt;br /&gt;
&lt;br /&gt;
===Монитор событий===&lt;br /&gt;
Монитор событий (ранее - Контроллер событий) – узел, реализующий логику проверки соответствия выбранных сигналов контролируемым условиям. Контроллеры событий выполняют всю работу по проверке значений контролируемых параметров и выполнению соответствующих действий.&lt;br /&gt;
&lt;br /&gt;
Монитор событий проверяет значения заданных узлов на соответствие заданным условиям и при их совпадении выполняет заданные действия.&lt;br /&gt;
&lt;br /&gt;
В качестве действий можно указать не только действие &amp;quot;Создание события&amp;quot;, но и другие (см. раздел [[#Действия]]).&lt;br /&gt;
[[Файл:AgavaPLC-Cистема тревог.png|мини|Cистема тревог]]&lt;br /&gt;
&lt;br /&gt;
===Порядок настройки системы===&lt;br /&gt;
Порядок настройки системы тревог следующий:&lt;br /&gt;
#Добавить в проект систему тревог. Для этого нажать ПКМ по узлу «Станция» в дереве проекта, затем выбрать «Добавить узел» - «Система» - «Система тревог».&lt;br /&gt;
#Добавить узел «События» в систему тревог. Для этого нажать ПКМ по системе тревог в дереве проекта, затем выбрать «Добавить узел» - «Группа» - «События». При необходимости настроить цвет шрифта и фона, которые будут отображаться у события в окне тревог или журнале.&lt;br /&gt;
#Добавить нужные [[Узлы проекта AgavaSCADA/AgavaPLC#.D0.93.D1.80.D1.83.D0.BF.D0.BF.D0.B0 .D1.81.D0.BE.D0.B1.D1.8B.D1.82.D0.B8.D0.B9|группы событий]] в узел «События». Для этого нажать ПКМ по узлу «События» в дереве проекта, затем выбрать «Добавить узел» - «Группа событий».&lt;br /&gt;
#Добавить [[Узлы проекта AgavaSCADA/AgavaPLC#.D0.9A.D0.BE.D0.BD.D1.82.D1.80.D0.BE.D0.BB.D0.BB.D0.B5.D1.80 .D1.81.D0.BE.D0.B1.D1.8B.D1.82.D0.B8.D0.B9|контроллеры событий]] в систему тревог. Для этого нажать ПКМ по системе тревог в дереве проекта, затем выбрать «Добавить узел» - «Контроллер событий».&lt;br /&gt;
#Добавить в свойство «Сигналы» контроллеров событий узлы, состояние которых необходимо контролировать.&lt;br /&gt;
#Задать для этих узлов контролируемые условия в соответствующем свойстве контроллера событий.&lt;br /&gt;
#Настроить [[Узлы проекта AgavaSCADA/AgavaPLC#.D0.94.D0.B5.D0.B9.D1.81.D1.82.D0.B2.D0.B8.D1.8F|действия]], которые будут выполняться при выполнении контролируемого условия. Для вывода аварий, предупреждений или информационных сообщений необходимо добавить действие «Создание события».&lt;br /&gt;
# Настроить действие «Создание события». В его свойстве «Группа событий» указать группу из созданных в пункте 2. Ввести тексты сообщения активации и деактивации (при необходимости), указать уровень события. Теперь, при срабатывании контролируемого условия, будет появляться окно тревог с сообщением активации.&lt;br /&gt;
&lt;br /&gt;
== Система архивирования==&lt;br /&gt;
Система архивирования предназначена для управления процессом сохранения значений параметров в базы данных. Параметры, сохраненные в базу данных, могут использоваться для построения графиков параметров и генерации отчетов.&lt;br /&gt;
&lt;br /&gt;
Архивация параметров производится с помощью архиваторов. Архиваторы SQLite и PostgreSQL могут выполнять [[Узлы проекта AgavaSCADA/AgavaPLC#Прореживание данных|прореживание данных]].&lt;br /&gt;
[[Файл:AgavaPLC-Настройка архиватора.png|мини|505x505пкс|Настройка архиватора]]&lt;br /&gt;
&lt;br /&gt;
===Порядок настройки системы===&lt;br /&gt;
Для сохранения истории изменения значений параметров в БД необходимо выполнить следующие действия: &lt;br /&gt;
&lt;br /&gt;
#Добавить в проект систему архивации. Для этого нажать ПКМ по узлу «Станция» в дереве проекта, затем выбрать «Добавить узел» - «Система» - «Система архивации».&lt;br /&gt;
#Добавить в систему архивации архиватор. Для этого нажать ПКМ по узлу «Система архивации» в дереве проекта, затем выбрать «Добавить узел» - «Архиватор в БД SQLite».&lt;br /&gt;
#Настроить параметры архиватора, такие как: путь до файла БД, интервал архивирования (как часто система архивации будет опрашивать значение параметра), интервал сохранения БД на диск (как часто эти значения будут записываться в постоянную память), разбиение БД (будет ли система архивации создавать новый файл БД каждые сутки), период хранения и режим выдачи значений для построения графика (сохраняемые значения будут обновляться с частотой интервала архивирования, а сохраненные - с частотой интервала сохранения).&lt;br /&gt;
#Добавить параметры в коннекторы база данных. Для этого необходимо открыть свойство архиватора «Коннекторы БД», выбрать «Создать новый» - «Коннектор БД». После этого нужно нажать по добавленному коннектору, открыть его свойство «Сигналы» и добавить параметр, значение которого необходимо сохранять в БД.&lt;br /&gt;
&lt;br /&gt;
=== Архиватор SQLite===&lt;br /&gt;
Архиватор SQLite предназначен для сохранения значений параметров в БД формата SQLite.&lt;br /&gt;
&lt;br /&gt;
Для извлечения и просмотра баз данных формата SQLite с устройств может использоваться программа «[[Архиватор]]».&lt;br /&gt;
&lt;br /&gt;
====Свойства узла &amp;quot;Архиватор SQLite&amp;quot;====&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Наименование свойства&lt;br /&gt;
!Идентификатор&lt;br /&gt;
!Тип&lt;br /&gt;
!Доступ&lt;br /&gt;
!Описание&lt;br /&gt;
|-&lt;br /&gt;
| Путь до файла БД&lt;br /&gt;
|FilePath&lt;br /&gt;
|STRING&lt;br /&gt;
|Чтение / запись&lt;br /&gt;
|Путь до файла БД. Абсолютный или относительный.&lt;br /&gt;
|-&lt;br /&gt;
|Интервал архивирования&lt;br /&gt;
|Interval&lt;br /&gt;
|INT&lt;br /&gt;
|Чтение / запись&lt;br /&gt;
|Интервал архивирования, мс.&lt;br /&gt;
|-&lt;br /&gt;
|Период хранения&lt;br /&gt;
|Retention&lt;br /&gt;
|INT&lt;br /&gt;
|Чтение / запись&lt;br /&gt;
|Период хранения, дней.&lt;br /&gt;
|-&lt;br /&gt;
|Разбиение БД&lt;br /&gt;
|DBSplitting&lt;br /&gt;
|BOOL&lt;br /&gt;
|Чтение / запись&lt;br /&gt;
|Разбиение БД на файлы. При включении база данных будет разделяться на отдельныйе файлы, содержащие данные за одни сутки.&lt;br /&gt;
|-&lt;br /&gt;
|Интервал сохранения БД на диск&lt;br /&gt;
|StoringInterval&lt;br /&gt;
|INT&lt;br /&gt;
|Чтение / запись&lt;br /&gt;
|Интервал сохранения БД на диск, мс.&lt;br /&gt;
|-&lt;br /&gt;
|Режим выдачи значений&lt;br /&gt;
|ValueReturnMode&lt;br /&gt;
|ENUM&lt;br /&gt;
|Чтение / запись&lt;br /&gt;
|Режим выдачи значений. Режим &amp;quot;Сохраняемые в БД&amp;quot; - данные выдаются сразу после получения архиватором, возможно до фактического сохранения в БД. Режим &amp;quot;Сохраненные в БД&amp;quot; - данные выдаются только после фактической записи в БД на диск.&lt;br /&gt;
|-&lt;br /&gt;
|Коннекторы БД&lt;br /&gt;
|Signals&lt;br /&gt;
|NODESARRAY&lt;br /&gt;
|Чтение / запись&lt;br /&gt;
|Список коннекторов, содержащих сигналы для архивирования.&lt;br /&gt;
|-&lt;br /&gt;
|Текущий размер БД&lt;br /&gt;
|DBCurrentSize&lt;br /&gt;
|INT&lt;br /&gt;
|Только чтение&lt;br /&gt;
|Текущий размер БД, Мб.&lt;br /&gt;
|-&lt;br /&gt;
|Максимальный размер БД&lt;br /&gt;
|DBMaxSize&lt;br /&gt;
|INT&lt;br /&gt;
|Только чтение&lt;br /&gt;
|Максимальный размер БД, Мб.&lt;br /&gt;
|-&lt;br /&gt;
|Состояние БД&lt;br /&gt;
|DBStatus&lt;br /&gt;
|INT&lt;br /&gt;
|Только чтение&lt;br /&gt;
|Состояние БД.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== Статусы операций SQLite ====&lt;br /&gt;
В ходе работы SQLite возвращает статус выполнения операций в виде целочисленных значений. Далее приведена расшифровка этих кодов.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Код&lt;br /&gt;
!Краткое описание&lt;br /&gt;
!Подробное объяснение&lt;br /&gt;
|-&lt;br /&gt;
|'''0 (SQLITE_OK)'''&lt;br /&gt;
|Успешно&lt;br /&gt;
|Операция завершилась без ошибок. Всё прошло штатно.&lt;br /&gt;
|-&lt;br /&gt;
|'''1 (SQLITE_ERROR)'''&lt;br /&gt;
|Общая ошибка&lt;br /&gt;
|Непредвиденная ошибка SQL. Может быть вызвана синтаксической ошибкой в запросе или другой общей проблемой. Пользователю стоит проверить SQL-запрос.&lt;br /&gt;
|-&lt;br /&gt;
|'''2 (SQLITE_INTERNAL)'''&lt;br /&gt;
|Внутренняя ошибка&lt;br /&gt;
|Ошибка в логике самой SQLite. Обычно не связана с действиями пользователя.&lt;br /&gt;
|-&lt;br /&gt;
|'''3 (SQLITE_PERM)'''&lt;br /&gt;
|Нет доступа&lt;br /&gt;
|Недостаточно прав для выполнения операции (например, чтение/запись файла базы данных). Нужно проверить права доступа.&lt;br /&gt;
|-&lt;br /&gt;
|'''4 (SQLITE_ABORT)'''&lt;br /&gt;
|Прервано&lt;br /&gt;
|Выполнение операции было прервано обратным вызовом (callback). Обычно не ошибка, а результат логики программы.&lt;br /&gt;
|-&lt;br /&gt;
|'''5 (SQLITE_BUSY)'''&lt;br /&gt;
|База данных занята&lt;br /&gt;
|Файл БД заблокирован другим процессом. Нужно подождать или повторить попытку позже.&lt;br /&gt;
|-&lt;br /&gt;
|'''6 (SQLITE_LOCKED)'''&lt;br /&gt;
|Таблица заблокирована&lt;br /&gt;
|Конкретная таблица заблокирована другим соединением. Нужно освободить блокировку или использовать WAL-режим.&lt;br /&gt;
|-&lt;br /&gt;
|'''7 (SQLITE_NOMEM)'''&lt;br /&gt;
|Недостаточно памяти&lt;br /&gt;
|Не удалось выделить память. Проблема на уровне системы, а не базы.&lt;br /&gt;
|-&lt;br /&gt;
|'''8 (SQLITE_READONLY)'''&lt;br /&gt;
|Только для чтения&lt;br /&gt;
|Попытка записи в базу, открытую в режиме &amp;quot;только чтение&amp;quot;. Нужно открыть её с правом записи.&lt;br /&gt;
|-&lt;br /&gt;
|'''9 (SQLITE_INTERRUPT)'''&lt;br /&gt;
|Прервано пользователем&lt;br /&gt;
|Операция остановлена вызовом &amp;lt;code&amp;gt;sqlite3_interrupt()&amp;lt;/code&amp;gt;. Обычно пользователь сам прерывает длительный запрос.&lt;br /&gt;
|-&lt;br /&gt;
|'''10 (SQLITE_IOERR)'''&lt;br /&gt;
|Ошибка ввода/вывода&lt;br /&gt;
|Ошибка чтения или записи с диска. Может означать сбой диска или проблемы с файловой системой.&lt;br /&gt;
|-&lt;br /&gt;
|'''11 (SQLITE_CORRUPT)'''&lt;br /&gt;
|Повреждённая база&lt;br /&gt;
|Файл базы данных повреждён. Необходимо восстановление из резервной копии.&lt;br /&gt;
|-&lt;br /&gt;
|'''12 (SQLITE_NOTFOUND)'''&lt;br /&gt;
|Неизвестная операция&lt;br /&gt;
|Обнаружен неизвестный код операции при работе с файловым интерфейсом. Обычно внутренняя ошибка.&lt;br /&gt;
|-&lt;br /&gt;
|'''13 (SQLITE_FULL)'''&lt;br /&gt;
|Нет места&lt;br /&gt;
|Диск или файл достиг предельного размера. Нужно освободить место.&lt;br /&gt;
|-&lt;br /&gt;
|'''14 (SQLITE_CANTOPEN)'''&lt;br /&gt;
|Не удалось открыть файл&lt;br /&gt;
|SQLite не смогла открыть базу данных. Возможны проблемы с путём или правами доступа.&lt;br /&gt;
|-&lt;br /&gt;
|'''15 (SQLITE_PROTOCOL)'''&lt;br /&gt;
|Ошибка протокола блокировки&lt;br /&gt;
|Нарушен внутренний протокол синхронизации между процессами. Обычно связано с конкурентным доступом.&lt;br /&gt;
|-&lt;br /&gt;
|'''16 (SQLITE_EMPTY)'''&lt;br /&gt;
|Внутреннее использование&lt;br /&gt;
|Этот код зарезервирован, не используется в обычных операциях.&lt;br /&gt;
|-&lt;br /&gt;
|'''17 (SQLITE_SCHEMA)'''&lt;br /&gt;
|Схема изменилась&lt;br /&gt;
|Во время выполнения запроса изменена структура таблицы или индекса. Запрос нужно выполнить заново.&lt;br /&gt;
|-&lt;br /&gt;
|'''18 (SQLITE_TOOBIG)'''&lt;br /&gt;
|Слишком большие данные&lt;br /&gt;
|Строка или BLOB превышают допустимый размер. Нужно уменьшить данные.&lt;br /&gt;
|-&lt;br /&gt;
|'''19 (SQLITE_CONSTRAINT)'''&lt;br /&gt;
|Нарушено ограничение&lt;br /&gt;
|Нарушено ограничение (например, UNIQUE, FOREIGN KEY, CHECK). Данные не могут быть вставлены/обновлены.&lt;br /&gt;
|-&lt;br /&gt;
|'''20 (SQLITE_MISMATCH)'''&lt;br /&gt;
|Несовпадение типов&lt;br /&gt;
|Тип данных не соответствует ожидаемому (например, текст в числовом поле).&lt;br /&gt;
|-&lt;br /&gt;
|'''21 (SQLITE_MISUSE)'''&lt;br /&gt;
|Некорректное использование API&lt;br /&gt;
|Функции SQLite использованы неправильно. Ошибка в коде программы, а не в данных.&lt;br /&gt;
|-&lt;br /&gt;
|'''22 (SQLITE_NOLFS)'''&lt;br /&gt;
|Нет поддержки файловой системы&lt;br /&gt;
|Операция требует возможности, которой нет в ОС (например, большие файлы на старой FS).&lt;br /&gt;
|-&lt;br /&gt;
|'''23 (SQLITE_AUTH)'''&lt;br /&gt;
|Отказ в авторизации&lt;br /&gt;
|Запрос отклонён по соображениям безопасности (например, триггер или расширение).&lt;br /&gt;
|-&lt;br /&gt;
|'''24 (SQLITE_FORMAT)'''&lt;br /&gt;
|Не используется&lt;br /&gt;
|Код зарезервирован, не применяется.&lt;br /&gt;
|-&lt;br /&gt;
|'''25 (SQLITE_RANGE)'''&lt;br /&gt;
|Параметр вне диапазона&lt;br /&gt;
|Неверный индекс параметра при связывании (&amp;lt;code&amp;gt;sqlite3_bind_*&amp;lt;/code&amp;gt;). Ошибка в логике кода.&lt;br /&gt;
|-&lt;br /&gt;
|'''26 (SQLITE_NOTADB)'''&lt;br /&gt;
|Не база данных&lt;br /&gt;
|Файл, открытый как база, не является файлом SQLite. Возможно, повреждён или подменён.&lt;br /&gt;
|-&lt;br /&gt;
|'''27 (SQLITE_NOTICE)'''&lt;br /&gt;
|Уведомление&lt;br /&gt;
|Сообщение информационного характера из &amp;lt;code&amp;gt;sqlite3_log()&amp;lt;/code&amp;gt;. Не ошибка.&lt;br /&gt;
|-&lt;br /&gt;
|'''28 (SQLITE_WARNING)'''&lt;br /&gt;
|Предупреждение&lt;br /&gt;
|Сообщение о потенциальной проблеме из &amp;lt;code&amp;gt;sqlite3_log()&amp;lt;/code&amp;gt;. Обычно не критично.&lt;br /&gt;
|-&lt;br /&gt;
|'''100 (SQLITE_ROW)'''&lt;br /&gt;
|Есть ещё данные&lt;br /&gt;
|&amp;lt;code&amp;gt;sqlite3_step()&amp;lt;/code&amp;gt; вернул строку данных — нужно вызывать дальше, чтобы получить все строки.&lt;br /&gt;
|-&lt;br /&gt;
|'''101 (SQLITE_DONE)'''&lt;br /&gt;
|Завершено&lt;br /&gt;
|&amp;lt;code&amp;gt;sqlite3_step()&amp;lt;/code&amp;gt; завершил выполнение без ошибок. Все строки обработаны.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Архиватор PostgreSQL ===&lt;br /&gt;
Архиватор PostgreSQL предназначен для сохранения значений параметров в базы данных под управлением сервера PostgreSQL.&lt;br /&gt;
&lt;br /&gt;
=== Прореживание данных ===&lt;br /&gt;
Прореживание данных (data thinning) — это процесс фильтрации и уменьшения количества точек данных, сохраняемых в архиве. Вместо того чтобы записывать каждое полученное значение, система анализирует поток данных и сохраняет только те значения, которые представляют значимое изменение.&lt;br /&gt;
&lt;br /&gt;
'''Назначение прореживания'''&lt;br /&gt;
&lt;br /&gt;
Поток данных от датчиков и устройств зачастую содержит незначительные колебания (шум) или избыточные данные, когда параметр не меняется. Прореживание решает следующие задачи:&lt;br /&gt;
&lt;br /&gt;
* '''Снижение нагрузки на архив''': Меньшее количество записей означает более быструю работу базы данных.&lt;br /&gt;
* '''Ускорение отображения графиков''': Нужно обрабатывать меньше точек для построения трендов.&lt;br /&gt;
* '''Сохранение только значимых изменений''': Система отфильтровывает шум и оставляет только те изменения, которые важны для анализа технологического процесса.&lt;br /&gt;
'''Общий принцип работы'''&lt;br /&gt;
&lt;br /&gt;
Алгоритм прореживания работает по простому принципу:&lt;br /&gt;
&lt;br /&gt;
# SCADA-система получает новое значение от источника данных.&lt;br /&gt;
# Она сравнивает это значение с последним, которое было сохранено в архив.&lt;br /&gt;
# Если изменение превышает заранее настроенный '''допуск''' (tolerance), новое значение сохраняется.&lt;br /&gt;
# Если изменение меньше допуска, значение пропускается.&lt;br /&gt;
&lt;br /&gt;
Кроме того, существует параметр &amp;quot;'''Период обязательной записи&amp;quot;'''. Если с момента последней записи прошло больше времени, чем указано в этом параметре, новое значение будет сохранено '''независимо от его изменения'''. Это гарантирует, что записи в архив будут сохраняться не реже заданной периодичности, даже если сигнал не меняется. Ключевая идея: &amp;quot;'''Сохраняем только то, что заметно изменилось, но не реже, чем задано&amp;quot;.'''&lt;br /&gt;
&lt;br /&gt;
'''Как подобрать допуск?'''&lt;br /&gt;
&lt;br /&gt;
* '''Слишком малый допуск''' приведёт к записи избыточных данных, и архив будет быстро расти.&lt;br /&gt;
* '''Слишком большой допуск''' может привести к потере мелких, но значимых изменений в сигнале.&lt;br /&gt;
&lt;br /&gt;
Выбор правильного допуска — это компромисс между детализацией данных и размером архива.&lt;br /&gt;
==== Типы алгоритмов прореживания ====&lt;br /&gt;
В системе доступны несколько алгоритмов, которые определяют, как именно вычисляется «значимость» изменения. Выбор алгоритма зависит от характера сигнала и требований к точности данных.&lt;br /&gt;
&lt;br /&gt;
# [[Узлы проекта AgavaSCADA/AgavaPLC#Абсолютный допуск|Абсолютный допуск]]&lt;br /&gt;
# [[Узлы проекта AgavaSCADA/AgavaPLC#Процент от последнего значения|Процент от последнего значения]]&lt;br /&gt;
# [[Узлы проекта AgavaSCADA/AgavaPLC#Процент от среднего N последних|Процент от среднего N последних]]&lt;br /&gt;
# [[Узлы проекта AgavaSCADA/AgavaPLC#Процент от среднего по временному окну|Процент от среднего по временному окну]]&lt;br /&gt;
&lt;br /&gt;
'''Обозначения и определения'''&lt;br /&gt;
&lt;br /&gt;
В дальнейшем используются следующие обозначения (для числовых сигналов):&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;math&amp;gt;x_{in}&amp;lt;/math&amp;gt;​ — текущее измерение сигнала, полученное от источника данных к моменту обработки (кандидат на запись).&lt;br /&gt;
* &amp;lt;math&amp;gt;x_{ref}&amp;lt;/math&amp;gt; — последнее сохранённое числовое значение сигнала в архиве на момент обработки (опорное значение).&lt;br /&gt;
* &amp;lt;math&amp;gt;|\Delta| = |x_{in} - x_{ref}|&amp;lt;/math&amp;gt; — абсолютная величина изменения между текущим измерением и последним сохранённым значением.&lt;br /&gt;
* &amp;lt;math&amp;gt;\bar{x}_N&amp;lt;/math&amp;gt;​ — арифметическое среднее последних &amp;lt;math&amp;gt;N&amp;lt;/math&amp;gt; сохранённых числовых значений.&lt;br /&gt;
* &amp;lt;math&amp;gt;\bar{x}_T&amp;lt;/math&amp;gt;​ — среднее всех сохранённых числовых значений, чьи метки времени попадают в временное окно длительности &amp;lt;math&amp;gt;T&amp;lt;/math&amp;gt; миллисекунд.&lt;br /&gt;
* &amp;lt;math&amp;gt;\varepsilon&amp;lt;/math&amp;gt; — машинная точность для чисел двойной точности; используется для формальной проверки «близости к нулю».&lt;br /&gt;
* &amp;lt;math&amp;gt;tolerance&amp;lt;/math&amp;gt; — допуск: абсолютный (в физических единицах) или относительный (в процентах), в зависимости от выбранного алгоритма.&lt;br /&gt;
&lt;br /&gt;
'''Настройки в Свойствах архиватора, общие для всех типов прореживания'''&lt;br /&gt;
&lt;br /&gt;
* '''Включить прореживание''' — включает/выключает применение алгоритма прореживания при записи значений. При выключении все поступающие значения сохраняются без фильтрации.&lt;br /&gt;
* '''Тип допуска''' — выбирает алгоритм сравнения.&lt;br /&gt;
* '''Период обязательной записи (мс)''' — максимальный допустимый промежуток между двумя записями одного сигнала. Если за это время значимого изменения не произошло, ближайшее поступившее значение будет записано принудительно. 0 — отключить принудительную запись.&lt;br /&gt;
&lt;br /&gt;
===== Абсолютный допуск =====&lt;br /&gt;
'''Принцип:'''&lt;br /&gt;
&lt;br /&gt;
Новое значение сохраняется, если модуль изменения больше установленного порога в физических единицах.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math display=&amp;quot;block&amp;quot;&amp;gt;|\Delta| &amp;gt; tolerance&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Когда использовать:'''&lt;br /&gt;
&lt;br /&gt;
* Если диапазон сигнала стабилен и известен заранее.&lt;br /&gt;
* Для параметров вроде температуры, давления, уровня жидкости, где фиксированное изменение имеет одинаковую интерпретацию по всей шкале.&lt;br /&gt;
&lt;br /&gt;
'''Преимущества:'''&lt;br /&gt;
&lt;br /&gt;
* Обеспечивает предсказуемое и детерминированное поведение независимо от текущего масштаба значения.&lt;br /&gt;
* Не требует накопления или хранения дополнительных данных (окон/истории), вычислительно прост.&lt;br /&gt;
* Удобен при наличии нормативно заданных пределов точности в физических единицах.&lt;br /&gt;
&lt;br /&gt;
'''Ограничения:'''&lt;br /&gt;
&lt;br /&gt;
* Не масштабируется на широкий динамический диапазон: один и тот же порог может быть слишком грубым для малых значений и слишком чувствительным для больших.&lt;br /&gt;
* Требует аккуратного подбора порога под единицы измерения и разрешение датчика; при неверной калибровке возможны либо избыточные записи, либо потеря значимых мелких изменений.&lt;br /&gt;
* Не учитывает относительный контекст изменения (например, 1 единица при значении 10 и при значении 10 000 трактуется одинаково).&lt;br /&gt;
&lt;br /&gt;
'''Настройки в Свойствах архиватора:'''&lt;br /&gt;
&lt;br /&gt;
* '''Допуск''' — абсолютный порог в физических единицах сигнала. Определяет значение &amp;lt;math&amp;gt;tolerance&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
===== Процент от последнего значения =====&lt;br /&gt;
'''Принцип:'''&lt;br /&gt;
&lt;br /&gt;
Новое значение сохраняется, если относительное изменение относительно последнего сохранённого превышает заданный процент.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math display=&amp;quot;block&amp;quot;&amp;gt;\frac{|\Delta|}{|x_{ref}|} \times{100} &amp;gt; tolerance&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Когда использовать:'''&lt;br /&gt;
&lt;br /&gt;
* Для сигналов, где важна относительная динамика, а не абсолютные величины.&lt;br /&gt;
* Для показателей с большим динамическим диапазоном, где относительная точность должна быть сопоставима на всех уровнях.&lt;br /&gt;
&lt;br /&gt;
'''Преимущества:'''&lt;br /&gt;
&lt;br /&gt;
* Масштабируемость: одинаково интерпретирует относительные изменения на низких и высоких уровнях сигнала.&lt;br /&gt;
* Не требует хранения окна значений; использует только последнее сохранённое значение, поэтому вычислительно лёгок.&lt;br /&gt;
* Быстро и корректно реагирует на пропорциональные изменения процесса (проценты), поддерживая заданную относительную чувствительность.&lt;br /&gt;
&lt;br /&gt;
'''Ограничения:'''&lt;br /&gt;
&lt;br /&gt;
* В окрестности нуля относительная метрика становится нестабильной (см. [[Узлы проекта AgavaSCADA/AgavaPLC#Примечание к алгоритмам 'Процент от…'|примечание]]).&lt;br /&gt;
* При малых базовых значениях возможна повышенная чувствительность к шуму и микроколебаниям.&lt;br /&gt;
* Не подавляет высокочастотный шум сам по себе: при необходимости сочетать с обязательной записью по времени и корректной настройкой допуска.&lt;br /&gt;
&lt;br /&gt;
'''Настройки в Свойствах архиватора:'''&lt;br /&gt;
&lt;br /&gt;
* '''Допуск''' — относительный порог в процентах. Определяет значение &amp;lt;math&amp;gt;tolerance&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
===== Процент от среднего N последних =====&lt;br /&gt;
'''Принцип:'''&lt;br /&gt;
&lt;br /&gt;
Новое значение сохраняется, если изменение больше заданного процента от среднего по последним N сохранённым значениям.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math display=&amp;quot;block&amp;quot;&amp;gt;\frac{|\Delta|}{|\bar{x}_{N}|} \times{100} &amp;gt; tolerance&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Когда использовать:'''&lt;br /&gt;
&lt;br /&gt;
* Для сигналов с постоянным шумом или пульсациями, когда важно снижать чувствительность к случайным отклонениям.&lt;br /&gt;
* Для процессов с умеренной динамикой, где требуется устойчивость к «зубчатым» колебаниям.&lt;br /&gt;
&lt;br /&gt;
'''Преимущества:'''&lt;br /&gt;
&lt;br /&gt;
* Снижает чувствительность к высокочастотному шуму за счёт опоры на усреднение; сокращает объём записей на стационарных участках.&lt;br /&gt;
* Гибко настраивается параметром &amp;lt;math&amp;gt;N&amp;lt;/math&amp;gt;: увеличение окна повышает устойчивость, уменьшение — повышает чувствительность и снижает задержку реакции.&lt;br /&gt;
&lt;br /&gt;
'''Ограничения:'''&lt;br /&gt;
&lt;br /&gt;
* В окрестности нуля относительная метрика становится нестабильной (см. [[Узлы проекта AgavaSCADA/AgavaPLC#Примечание к алгоритмам 'Процент от…'|примечание]]).&lt;br /&gt;
&lt;br /&gt;
* Инерционность: при резких скачках возможна задержка фиксации изменения, особенно при большом &amp;lt;math&amp;gt;N&amp;lt;/math&amp;gt;.&lt;br /&gt;
* Усреднение может «сглаживать» и не фиксировать кратковременные, но важные пики; не подходит для задач, критичных к коротким экстремумам.&lt;br /&gt;
* Предполагает относительно стабильную частоту выборок; при сильно переменной частоте эффективная «временная» ширина окна становится непредсказуемой.&lt;br /&gt;
&lt;br /&gt;
'''Настройки в Свойствах архиватора:'''&lt;br /&gt;
&lt;br /&gt;
* '''Допуск''' — относительный порог в процентах. Определяет значение &amp;lt;math&amp;gt;tolerance&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
* '''Размер окна среднего (&amp;lt;math&amp;gt;N&amp;lt;/math&amp;gt;)''' — число последних сохранённых значений, по которым считается среднее. Большее &amp;lt;math&amp;gt;N&amp;lt;/math&amp;gt; повышает устойчивость к шуму, но увеличивает инерционность реакции.&lt;br /&gt;
&lt;br /&gt;
===== Процент от среднего по временному окну =====&lt;br /&gt;
'''Принцип:'''&lt;br /&gt;
&lt;br /&gt;
Похож на предыдущий, но среднее считается не по количеству точек, а по всем значениям за заданный интервал времени.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math display=&amp;quot;block&amp;quot;&amp;gt;\frac{|\Delta|}{|\bar{x}_{T}|} \times{100} &amp;gt; tolerance&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Когда использовать:'''&lt;br /&gt;
&lt;br /&gt;
* Для сигналов с непостоянной частотой измерений (событийные, неравномерные потоки).&lt;br /&gt;
* В случаях, когда важно учитывать реальную временную протяжённость усреднения независимо от плотности измерений.&lt;br /&gt;
&lt;br /&gt;
'''Преимущества:'''&lt;br /&gt;
&lt;br /&gt;
* Корректно работает при переменной частоте выборок: окно фиксируется по времени, а не по числу точек.&lt;br /&gt;
* Более реалистично оценивает тренд во времени на участках с неравномерными измерениями.&lt;br /&gt;
* Управляемый компромисс между подавлением шума и чувствительностью за счёт выбора длительности окна.&lt;br /&gt;
&lt;br /&gt;
'''Ограничения:'''&lt;br /&gt;
&lt;br /&gt;
* В окрестности нуля относительная метрика становится нестабильной (см. [[Узлы проекта AgavaSCADA/AgavaPLC#Примечание к алгоритмам 'Процент от…'|примечание]]).&lt;br /&gt;
&lt;br /&gt;
* Более высокая ресурсоёмкость: требуется хранить и периодически «очищать» значения по условию выхода из временного окна; потребление памяти зависит от фактической скорости поступления данных.&lt;br /&gt;
* Инерционность, присущая усреднению: возможна задержка фиксации коротких, но значимых пиковых изменений.&lt;br /&gt;
* Критичен выбор длительности окна: слишком малое окно даёт мало подавления шума, слишком большое — чрезмерную инерцию и риск пропуска кратких событий.&lt;br /&gt;
&lt;br /&gt;
'''Настройки в Свойствах архиватора:'''&lt;br /&gt;
&lt;br /&gt;
* '''Допуск''' — относительный порог в процентах. Определяет значение &amp;lt;math&amp;gt;tolerance&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
* '''Интервал архивирования''' — длительность временного окна &amp;lt;math&amp;gt;T&amp;lt;/math&amp;gt; (мс), в пределах которого вычисляется среднее. При увеличении &amp;lt;math&amp;gt;T&amp;lt;/math&amp;gt; растёт сглаживание и уменьшается чувствительность к кратким всплескам; при уменьшении — наоборот. Значения, чьи метки времени выходят за пределы окна, автоматически исключаются из расчёта.&lt;br /&gt;
&lt;br /&gt;
==== Примечание к алгоритмам 'Процент от…' ====&lt;br /&gt;
При малых опорных значениях система автоматически переходит в абсолютный режим, чтобы избежать деления на величину, близкую к нулю, и связанных с этим скачков чувствительности. Этот механизм применяется ко всем алгоритмам, использующим относительное сравнение: «Процент от последнего», «Процент от среднего N», «Процент от среднего по временному окну» и обеспечивает стабильность критерия при слабых сигналах.&lt;br /&gt;
&lt;br /&gt;
* Условия входа в режим абсолютного допуска:&lt;br /&gt;
** для «Процента от последнего»: &amp;lt;math&amp;gt;|x_{ref}| &amp;lt; \varepsilon&amp;lt;/math&amp;gt;;&lt;br /&gt;
** для «Процента от среднего N»: &amp;lt;math&amp;gt;|\bar{x}_{N}| &amp;lt; \varepsilon&amp;lt;/math&amp;gt;;&lt;br /&gt;
** для «Процента от среднего по времени»: &amp;lt;math&amp;gt;|\bar{x}_{T}| &amp;lt; \varepsilon&amp;lt;/math&amp;gt;.&lt;br /&gt;
* Критерий в режиме абсолютного допуска: значение фиксируется, если &amp;lt;math&amp;gt;|\Delta| &amp;gt; tolerance&amp;lt;/math&amp;gt;.&lt;br /&gt;
* Условие выхода: как только соответствующая базовая величина (&amp;lt;math&amp;gt;|x_{ref}|&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;|\bar{x}_{N}|&amp;lt;/math&amp;gt; или &amp;lt;math&amp;gt;|\bar{x}_{T}|&amp;lt;/math&amp;gt;) становится &amp;lt;math&amp;gt;\geq \varepsilon&amp;lt;/math&amp;gt;, система автоматически возвращается к относительному критерию.&lt;br /&gt;
* Трактовка &amp;lt;math&amp;gt;tolerance&amp;lt;/math&amp;gt;: используется то же значение настройки; в абсолютном режиме оно интерпретируется как порог в физических единицах сигнала.&lt;br /&gt;
&lt;br /&gt;
==== Сравнение алгоритмов прореживания данных ====&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Критерий&lt;br /&gt;
!Абсолютный&lt;br /&gt;
!% от последнего&lt;br /&gt;
!% от среднего N&lt;br /&gt;
!% от среднего по времени&lt;br /&gt;
|-&lt;br /&gt;
|Единицы допуска&lt;br /&gt;
|Физические&lt;br /&gt;
|Проценты&lt;br /&gt;
|Проценты&lt;br /&gt;
|Проценты&lt;br /&gt;
|-&lt;br /&gt;
|Устойчивость к шуму&lt;br /&gt;
|Низкая&lt;br /&gt;
|Средняя&lt;br /&gt;
|Высокая&lt;br /&gt;
|Высокая&lt;br /&gt;
|-&lt;br /&gt;
|Реакция на резкие скачки&lt;br /&gt;
|Быстрая&lt;br /&gt;
|Быстрая&lt;br /&gt;
|Задержка (при большом N)&lt;br /&gt;
|Задержка&lt;br /&gt;
|-&lt;br /&gt;
|Подходит при переменной частоте&lt;br /&gt;
|Да&lt;br /&gt;
|Да&lt;br /&gt;
|Нет&lt;br /&gt;
|Да&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Система журналирования==&lt;br /&gt;
Система ведения журналов событий предназначена для управления регистрацией и хранением событий. В базу данных записываются все системные события и события, генерируемые с помощью [[Узлы проекта AgavaSCADA/AgavaPLC#.D0.A1.D0.B8.D1.81.D1.82.D0.B5.D0.BC.D0.B0 .D1.82.D1.80.D0.B5.D0.B2.D0.BE.D0.B3|системы тревог]], которые соответствуют выбранному уровню сообщений.&lt;br /&gt;
&lt;br /&gt;
Для ведения журналов используются узлы типа &amp;quot;Логгер&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
===Порядок настройки системы===&lt;br /&gt;
Порядок настройки системы журналирования следующий:&lt;br /&gt;
&lt;br /&gt;
#Добавить и [[Узлы проекта AgavaSCADA/AgavaPLC#.D0.9F.D0.BE.D1.80.D1.8F.D0.B4.D0.BE.D0.BA .D0.BD.D0.B0.D1.81.D1.82.D1.80.D0.BE.D0.B9.D0.BA.D0.B8 .D1.81.D0.B8.D1.81.D1.82.D0.B5.D0.BC.D1.8B|настроить систему тревог]] для генерации событий.&lt;br /&gt;
#Добавить в проект систему журналирования. Для этого нажать ПКМ по узлу «Станция» в дереве проекта, затем выбрать «Добавить узел» - «Система» - «Система журналирования».&lt;br /&gt;
#Добавить в систему журналирования логгер. Для этого нажать ПКМ по узлу «Система архивации» в дереве проекта, затем нажать «Добавить узел» и выбрать нужный логгер.&lt;br /&gt;
#Настроить параметры логгера (см. разделы ниже).&lt;br /&gt;
&lt;br /&gt;
=== Логгер SQLite===&lt;br /&gt;
Логгер SQLite предназначен для сохранения событий, возникающих в ходе исполнения прикладной программы в СУБД SQLite.&lt;br /&gt;
&lt;br /&gt;
Логгер позволяет настраивать срок хранения событий, уровень сохраняемых событий и включать режим разбиения базы данных на отдельные файлы, содержащие данные только за одни сутки.&lt;br /&gt;
&lt;br /&gt;
Информацию о событиях в базе данных, которую ведет логгер, можно просмотреть с помощью виджета &amp;quot;Список событий&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
===Логгер файловый ===&lt;br /&gt;
Логгер файловый предназначен для сохранения журналов событий в текстовых файлах на накопителе. Логгер имеет минимальное количество настроек, и обычно используется для сохранения журнала событий в случае необходимости отладки работы прикладной программы без среды разработки.&lt;br /&gt;
&lt;br /&gt;
===Логгер SMS===&lt;br /&gt;
Логгер SMS предназначен для SMS информирования с помощью субмодуля GRPS или внешнего GPRS модема. &lt;br /&gt;
&lt;br /&gt;
Принцип работы логгера следующий:&lt;br /&gt;
&lt;br /&gt;
#Логгер принимает возникающие события, фильтрует их согласно установленного уровня событий и выбранных групп.&lt;br /&gt;
#События, прошедшие фильтрацию, форматируются согласно установленного шаблона.&lt;br /&gt;
#Отформатированные сообщения отправляются через подключенный модем в виде SMS сообщения. Отправка сообщений производится на телефонные номера, записанные в телефонной книге на SIM-карте.&lt;br /&gt;
&lt;br /&gt;
==Система проверки прав пользователей==&lt;br /&gt;
[[Файл:AgavaPLC-Окно привилегий.png|мини|494x494пкс|Окно привилегий]]&lt;br /&gt;
Система реализует механизм контроля доступа к узлам проекта и их функциях на основе ролей. Узлы при выполнении действий проверяют наличие установленных привилегий у авторизованного в данный момент пользователя. &lt;br /&gt;
&lt;br /&gt;
=== Роли и пользователи ===&lt;br /&gt;
Система содержит в себе две подсистемы:&lt;br /&gt;
*Пользователи. Подсистема определяет пользователей, каждому из которых назначается логин/пароль и одна или несколько ролей.&lt;br /&gt;
*Роли. Роли хранят наборы доступных привилегий.&lt;br /&gt;
Отношения между пользователями, ролями и привилегиями можно описать следующим образом:&lt;br /&gt;
&lt;br /&gt;
* Один пользователь может иметь несколько ролей.&lt;br /&gt;
* Одну роль могут иметь несколько пользователей.&lt;br /&gt;
* Одна роль может иметь несколько привилегий.&lt;br /&gt;
* Одна привилегия может принадлежать нескольким ролям.&lt;br /&gt;
&lt;br /&gt;
=== Привилегии ===&lt;br /&gt;
[[Файл:AgavaPLC-Система проверки прав пользователей.png|мини|Система проверки прав пользователей]]&lt;br /&gt;
Для узлов системы доступна установка следующих привилегий:&lt;br /&gt;
&lt;br /&gt;
Все узлы: &lt;br /&gt;
&lt;br /&gt;
*Чтение значения.&lt;br /&gt;
*Запись значения.&lt;br /&gt;
Окна и фреймы:&lt;br /&gt;
*Открытие окна.&lt;br /&gt;
*Закрытие окна.&lt;br /&gt;
&lt;br /&gt;
При установке привилегий на какой-либо узел, все подчиненные узлы получают те же привилегии с флагом &amp;quot;унаследована&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Если привилегия не установлена, то считается что действие, регулируемое привилегией, запрещено.&lt;br /&gt;
&lt;br /&gt;
Значение унаследованных привилегий можно переопределить с помощью явного задания привилегии.&lt;br /&gt;
===Порядок настройки системы===&lt;br /&gt;
Привилегии настраиваются в отдельном окне привилегий, доступном в меню &amp;quot;Вид&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Порядок настройки системы проверки прав в версии AgavaSCADA 1.2 следующий:&lt;br /&gt;
&lt;br /&gt;
#Добавить в проект систему проверки прав пользователей. Для этого нажать ПКМ по узлу «Станция» в дереве проекта, затем выбрать «Добавить узел» - «Система» - «Система проверки прав пользователей».&lt;br /&gt;
#Добавить в систему проверки прав пользователей узел «Роль». Для этого нажать ПКМ по узлу «Система проверки прав пользователей» в дереве проекта, затем выбрать «Добавить узел» - «Роли».&lt;br /&gt;
#Добавить в узел «Роли» необходимые роли. Для этого нажать ПКМ по узлу «Роли» в дереве проекта, затем выбрать «Добавить узел» - «Роль».&lt;br /&gt;
#Для каждой роли настроить привилегии в окне привилегий. Для этого необходимо нажать «Вид» - «Открыть привилегии». В открывшемся окне в выпадающем списке «Пользователь / роль» выбрать нужную роль. Затем, нажимая ПКМ по узлам и выбирая «Добавить привилегию» настроить все необходимые ограничения для данной роли.&lt;br /&gt;
#Добавить в систему проверки прав пользователей узел «Пользователи». Для этого нажать ПКМ по узлу «Система проверки прав пользователей» в дереве проекта, затем выбрать «Добавить узел» - «Пользователи».&lt;br /&gt;
#Добавить в узел «Пользователи» необходимых пользователей. Для этого нажать ПКМ по узлу «Пользователи» в дереве проекта, затем выбрать «Добавить узел» - «Пользователи».&lt;br /&gt;
#Для каждого пользователя указать имя и пароль, которые будут использоваться при авторизации, и выбрать одну или несколько ролей.&lt;br /&gt;
&lt;br /&gt;
== Сигналы, источники и операции ==&lt;br /&gt;
Регистры и другие узлы, добавленные в группу «Сигналы», являются внутренними для проекта и могут менять свои значения только с помощь скриптов или других узлов, с которыми они связаны.&lt;br /&gt;
&lt;br /&gt;
Сигналы содержат в себе несколько подгрупп.&lt;br /&gt;
&lt;br /&gt;
=== Сигнал===&lt;br /&gt;
Сигнал - специальный тип узла, хранящий значение узла типа &amp;quot;источник&amp;quot;. Сигналы могут использоваться для хранения значений нескольких источников, модифицировать их, обладать дополнительными полями и т. д.&lt;br /&gt;
&lt;br /&gt;
Сигналы некоторых типов позволяют модифицировать исходное значение источников. Принцип обработки значения источника или сигнала с помощью операций: &lt;br /&gt;
&lt;br /&gt;
Первичное значение поступает на вход операции, производится вычисление. Если есть еще операции, то вычисленное значение после первой операции передается на вход второй. И так далее по всем операциям. Если операций больше нет, вычисленное значение устанавливается в качестве значения узла. &lt;br /&gt;
&lt;br /&gt;
Все операции выполняются в порядке, в котором они заданы в соответствующих свойствах.&lt;br /&gt;
&lt;br /&gt;
====Сигнал простой====&lt;br /&gt;
Узел типа &amp;quot;Сигнал простой&amp;quot; предназначен для хранения и обработки значения источника, или другого сигнала или операции. Позволяет произвести какие-либо действия с этим значением с помощью добавления нужных операций в свойство «Операции после чтения».&lt;br /&gt;
&lt;br /&gt;
====Постоянная ====&lt;br /&gt;
Узел типа &amp;quot;Постоянная&amp;quot; предназначен для хранения данных выбранного формата и позволяет изменять их в ходе выполнения программы. Связывание с источником не предусмотрено. Изменение осуществляется с помощью специализированных функций или блока установки значения в задаче ПЛК.&lt;br /&gt;
&lt;br /&gt;
====Массив====&lt;br /&gt;
Массив - совокупность каких-либо объектов, указанных в свойстве «Входные значения». Нумерация объектов в массиве начинается с 0. Может использоваться для взаимодействия с демультиплексором.&lt;br /&gt;
&lt;br /&gt;
====Сигнал комплексный====&lt;br /&gt;
Сигнал используется для взаимодействия с виджетом «Цифровой индикатор». Позволяет контролировать входное значение и генерировать события переходу входного значения через уставки.&lt;br /&gt;
&lt;br /&gt;
Содержит в себе свойства для настройки следующих параметров:&lt;br /&gt;
&lt;br /&gt;
*ВАУ – верхняя аварийная уставка;&lt;br /&gt;
*ВПУ - верхняя предаварийная уставка;&lt;br /&gt;
*НПУ - нижняя предаварийная уставка;&lt;br /&gt;
*НАУ – нижняя аварийная уставка;&lt;br /&gt;
*ФНЧ – фильтр низких частот.&lt;br /&gt;
&lt;br /&gt;
===Источник===&lt;br /&gt;
Источник - специальный тип узлов, предназначенных для передачи данных от внешних устройств.&lt;br /&gt;
&lt;br /&gt;
====Регистр Modbus====&lt;br /&gt;
Регистр Modbus используется для приема и передачи данных по протоколам Modbus-RTU, Modbus-TCP. Данный тип узов также может использоваться для организации работы некоторых алгоритмов программы (например для взаимодействия с контроллером событий).&lt;br /&gt;
&lt;br /&gt;
====Источник индексный====&lt;br /&gt;
Узел типа &amp;quot;Источник индексный&amp;quot; используется для обработки данных, полученных по протоколу Upd, а так же в массивах для индексации значений.&lt;br /&gt;
&lt;br /&gt;
===Операция===&lt;br /&gt;
[[Файл:AgavaPLC-Входные значения операций.png|мини|Входные значения операций]]&lt;br /&gt;
Узлы типа &amp;quot;Операция&amp;quot; используются для реализации вычислительных алгоритмов в задаче ПЛК или отдельно, при их размещении в группе &amp;quot;Сигналы&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
В качестве входных значений операций выбираются константные числа, другие узлы группы «Сигналы», регистры или блоки задачи ПЛК.&lt;br /&gt;
&lt;br /&gt;
====Операция «Сложение»====&lt;br /&gt;
Выходным значением является сумма входных значений. В качестве входных значений можно выбирать как узлы, так и конкретные числа формата int или double.&lt;br /&gt;
&lt;br /&gt;
====Операция «Вычитание»====&lt;br /&gt;
Выходным значением является разность первого входного значения и суммы всех последующих значений. В качестве входных значений можно выбирать как узлы, так и конкретные числа формата int или double.&lt;br /&gt;
&lt;br /&gt;
====Операция «Умножение»====&lt;br /&gt;
Выходным значением является произведение значений всех входных значений. В качестве входных значений можно выбирать как узлы, так и конкретные числа формата int или double.&lt;br /&gt;
&lt;br /&gt;
====Операция «Деление»====&lt;br /&gt;
Выходным значением является результат от деления первого входного значения на произведение всех последующих значений. В качестве входных значений можно выбирать как узлы, так и конкретные числа формата int или double.&lt;br /&gt;
&lt;br /&gt;
====Операция «Условие»====&lt;br /&gt;
Узел типа &amp;quot;Операция условие&amp;quot; предназначен для сравнения значений двух узлов. Для условия задаются сравниваемые параметры и выбирается режим сравнения. В качестве входных значений можно выбирать как узлы, так и конкретные числа формата int или double.&lt;br /&gt;
&lt;br /&gt;
====Операция «Пара условий»====&lt;br /&gt;
[[Файл:AgavaPLC-Операция «Пара условий».png|мини|Операция «Пара условий»]]&lt;br /&gt;
Операция содержит в себе два условия. Для каждого условия задаются индивидуальные сравнимаемые параметры и выбирается режим сравнения.&lt;br /&gt;
&lt;br /&gt;
Выходное значение операции зависит от ее режима проверки – при выбранном режиме «Логическое ИЛИ» выходное значение равно логической «1» если одно из условий равно «1», при «Логическом И»- если оба условия равны «1».&lt;br /&gt;
&lt;br /&gt;
====Операция «Логическое ИЛИ»====&lt;br /&gt;
Если одно из входных значений становится равно логической «1» (контакты замкнуты), то выходное значение становится логической «1» (выход включен).&lt;br /&gt;
&lt;br /&gt;
====Операция «Логическое И»====&lt;br /&gt;
Если все входные значения становятся равны логической «1», выходное значение становится логической «1» (выход включен).&lt;br /&gt;
&lt;br /&gt;
====Операция «Логическое НЕ»====&lt;br /&gt;
Если входное значение блока становится равно логическому «0», то выходное значение становится логической «1», и наоборот.&lt;br /&gt;
&lt;br /&gt;
====Операция «Таймер»====&lt;br /&gt;
Таймер предназначен для выполнения каких-либо [[Узлы проекта AgavaSCADA/AgavaPLC#.D0.94.D0.B5.D0.B9.D1.81.D1.82.D0.B2.D0.B8.D1.8F|действий]] через одинаковые промежутки времени (например запись значения в узел). Промежуток между исполнениями действий задается в свойстве «Интервал срабатывания», а сами действия в свойстве «Действия OnTimer». Для работы операции ее необходимо добавить в свойство «Узлы» [[Узлы проекта AgavaSCADA/AgavaPLC#.D0.97.D0.B0.D0.B4.D0.B0.D1.87.D0.B8|задачи]] с периодическим или разовым режимом выполнения.&lt;br /&gt;
&lt;br /&gt;
====Операция «Мультиплексор»====&lt;br /&gt;
Мультплексор осуществляет перевод нескольких булевых переменных в целочисленное значение по формуле: «выход = вход1 + вход2*2^1 + вход3*2^2 + ...». &lt;br /&gt;
&lt;br /&gt;
Например если в качестве входных значений указаны два регистра, то выходное значение мультиплексора будет формироваться следующим образом:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Значение регистра 1&lt;br /&gt;
!Значение регистра 2&lt;br /&gt;
!Выходное значение&lt;br /&gt;
|-&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|-&lt;br /&gt;
|1&lt;br /&gt;
|0&lt;br /&gt;
|1&lt;br /&gt;
|-&lt;br /&gt;
|0&lt;br /&gt;
|1&lt;br /&gt;
|2&lt;br /&gt;
|-&lt;br /&gt;
|1&lt;br /&gt;
|1&lt;br /&gt;
|3&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
====Операция «Демультиплексор»====&lt;br /&gt;
Демультиплексор осуществляет перевод целочисленных значений из массива в несколько булевых переменных, при этом включается выход, номер которого соответствует числу из массива (например первый элемент массива равен 5, на пятом выходе появится значение true). Нумерация выходов начинается с нуля.&lt;br /&gt;
&lt;br /&gt;
====Операция «Генератор случайного числа»====&lt;br /&gt;
Выходным значением является случайное число в диапазоне между указанным минимальным и максимальным значениями. Для работы операции ее необходимо добавить в свойство «Узлы» [[Узлы проекта AgavaSCADA/AgavaPLC#.D0.97.D0.B0.D0.B4.D0.B0.D1.87.D0.B8|задачи]] с периодическим или разовым режимом выполнения.&lt;br /&gt;
&lt;br /&gt;
====Операция «Скрипт С++»====&lt;br /&gt;
Операция «Скрипт С++» предназначена для реализации разнообразных алгоритмов на языке С++. Операция предусматривает реализацию одной или нескольких функций, выполняющих необходимые пользователю действия. &lt;br /&gt;
&lt;br /&gt;
Для выполнения скрипта, можно добавить в свойство «Узлы» [[Узлы проекта AgavaSCADA/AgavaPLC#.D0.97.D0.B0.D0.B4.D0.B0.D1.87.D0.B8|задачи]] с периодическим или разовым режимом выполнения. Другим способом вызова срабатывания скрипта является добавление его в [[Узлы проекта AgavaSCADA/AgavaPLC#.D0.94.D0.B5.D0.B9.D1.81.D1.82.D0.B2.D0.B8.D0.B5 .C2.AB.D0.92.D1.8B.D0.BF.D0.BE.D0.BB.D0.BD.D0.B5.D0.BD.D0.B8.D0.B5 .D1.81.D0.BA.D1.80.D0.B8.D0.BF.D1.82.D0.B0.C2.BB|действие «Выполнение скрипта»]].&lt;br /&gt;
&lt;br /&gt;
Пример скрипта, выполняющего получение значения определенного узла и запись измененного значения в другой узел:&lt;br /&gt;
 float val()&lt;br /&gt;
 {&lt;br /&gt;
     float f = GetNodeValueAsFloat(&amp;quot;/Конфигурация1/stationSimple1/Signals1/Random2&amp;quot;);&lt;br /&gt;
     float f1 = f*100.0;&lt;br /&gt;
     SetNodeValueAsFloat(&amp;quot;/Конфигурация1/stationSimple1/Signals1/Constant3&amp;quot;, f1);&lt;br /&gt;
     return f*10.0;&lt;br /&gt;
 }&lt;br /&gt;
Приведенный выше скрипт возвращает исходное значение, умноженное на 10. Возвращаемое таким образом значение записывается в выход операции для возможности считывания в других операциях, скриптах и т. д.&lt;br /&gt;
&lt;br /&gt;
Скрипты могут возвращать значения следующих типов:&lt;br /&gt;
&lt;br /&gt;
*void;&lt;br /&gt;
*float;&lt;br /&gt;
*double;&lt;br /&gt;
*int.&lt;br /&gt;
&lt;br /&gt;
Подробное описание реализации языка С++ в AgavaSCADA/AgavaPLC приведено на странице &amp;quot;[[Описание языка С++ в AgavaPLC]]&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
===Объект===&lt;br /&gt;
Узлы типа &amp;quot;Объект&amp;quot; предназначены для взаимодействия с аппаратными компонентами контроллера. Для всех объектов, являющихся субмодулями, необходимо указать слот, в котором они установлены. Доступ к значениям входов/выходов субмодуля осуществляется через его вложенные узлы.&lt;br /&gt;
&lt;br /&gt;
'''ПЛК процессорный модуль''' &lt;br /&gt;
&lt;br /&gt;
Предоставляет возможность регулирования подсветки экрана; включения и отключения индикаторов работы, аварии и программы.&lt;br /&gt;
&lt;br /&gt;
'''ПЛК субмодуль DI'''&lt;br /&gt;
&lt;br /&gt;
Позволяет получать доступ к значениям входов субмодуля DI.&lt;br /&gt;
&lt;br /&gt;
'''ПЛК субмодуль R'''&lt;br /&gt;
&lt;br /&gt;
Позволяет управлять значениями выходов субмодуля R.&lt;br /&gt;
&lt;br /&gt;
'''ПЛК субмодуль SIM'''&lt;br /&gt;
&lt;br /&gt;
Позволяет управлять значениями выходов субмодуля SIM.&lt;br /&gt;
&lt;br /&gt;
'''ПЛК субмодуль DO6'''&lt;br /&gt;
&lt;br /&gt;
Позволяет управлять значениями выходов субмодуля DO6.&lt;br /&gt;
&lt;br /&gt;
'''ПЛК субмодуль AI'''&lt;br /&gt;
&lt;br /&gt;
Позволяет получать доступ к значениям входов субмодуля AI и задавать их тип.&lt;br /&gt;
&lt;br /&gt;
'''ПЛК субмодуль AIO'''&lt;br /&gt;
&lt;br /&gt;
Позволяет получать доступ к значениям входов субмодуля AIO, управлять значениями выходов и задавать тип входов и выходов.&lt;br /&gt;
&lt;br /&gt;
'''ПЛК субмодуль TMP'''&lt;br /&gt;
&lt;br /&gt;
Позволяет получать доступ к значениям входов субмодуля TMP и задавать их тип.&lt;br /&gt;
&lt;br /&gt;
==Задачи==&lt;br /&gt;
Группа «Задачи» предназначена для группировки узлов типа «Задача», которые используются для циклического или разового выполнения созданных пользователем алгоритмов.&lt;br /&gt;
&lt;br /&gt;
===Задача ПЛК===&lt;br /&gt;
Данный узел предоставляет возможности для связывания между собой других узлов (таких как сигналы, субмодули ПЛК, постоянные и т. д.) в удобной графической форме (см. Рисунок 64). Для перехода к редактору необходимо щелкнуть правой кнопкой мыши на задачу ПЛК и выбрать в открывшемся контекстном меню команду «Открыть графическое представление» или дважды щелкнуть левой кнопкой мыши на задаче ПЛК в дереве проекта.&lt;br /&gt;
&lt;br /&gt;
Рисунок 64 – Окно графического редактирования задачи «ПЛК-60»&lt;br /&gt;
&lt;br /&gt;
Панель инструментов задачи ПЛК, расположенная в верхней части окна, содержит следующие элементы (см. Рисунок 16):&lt;br /&gt;
&lt;br /&gt;
*Выпадающий список выбора режима подписи портов.&lt;br /&gt;
*Выпадающий список выбора режима подписи блоков.&lt;br /&gt;
*Кнопка запуска режима симулятора.&lt;br /&gt;
*Кнопка запуска онлайн отладки.&lt;br /&gt;
*Кнопка печати задачи.&lt;br /&gt;
*Инструменты управления симуляцией.&lt;br /&gt;
&lt;br /&gt;
Добавлять узлы в задачу можно перетаскиванием мышью из окна функциональных блоков или из окна дерева проекта. Для связывания узлов между собой необходимо, зажав левую кнопку мыши на выходе одного узла, протянуть линию ко входу другого и затем отпустить левую кнопку мыши для соединения блоков. &lt;br /&gt;
&lt;br /&gt;
Созданную связь можно удалить, выделив ее левой кнопкой мыши и нажав клавишу &amp;quot;Del&amp;quot;. Связь можно &amp;quot;разорвать&amp;quot;, то есть добавить разрыв, нажав по ней правой кнопкой мыши и выбрав в контекстном меню команду «Добавить разрыв». &lt;br /&gt;
&lt;br /&gt;
Для выделения нескольких блоков рамкой зажмите клавишу &amp;quot;Shift&amp;quot; и выделяйте блоки мышью с нажатой левой кнопкой.&lt;br /&gt;
&lt;br /&gt;
Задача ПЛК предоставляет возможности для проведения тестирования и отладки проекта, описанные в разделе [[#Проверка и отладка проекта]].&lt;br /&gt;
&lt;br /&gt;
====Блоки задачи ПЛК====&lt;br /&gt;
Помимо операций, описанных в разделе [[#Операция]], для реализации алгоритмов в задачу ПЛК можно добавлять блоки, описанные ниже.&lt;br /&gt;
&lt;br /&gt;
'''Функциональный блок'''&lt;br /&gt;
&lt;br /&gt;
Используется для выделения каких-либо действий в отдельный блок, для упрощения понимания работы алгоритма программы. Содержит входы, выходы и блоки, обеспечивающие работу внутренней логики. Позволяет проводить изолированную отладку, при которой значения на входах функционального блока вручную задаются пользователем. Блок, работающий в данном режиме выделяется черной рамкой. Для включения изолированной отладки необходимо открыть блок и нажать кнопку «Изолированная отладка» на панели управления задачей.&lt;br /&gt;
&lt;br /&gt;
'''Блок установки значения'''&lt;br /&gt;
&lt;br /&gt;
Блок осуществляет запись значения, поданного на вход in0, в узел, указанный в свойстве «Узел для чтения/записи»&lt;br /&gt;
&lt;br /&gt;
'''Блок задержки'''&lt;br /&gt;
&lt;br /&gt;
Блок задержки используется для создания задержки передачи значения с входа блока на выход на один цикл обработки задачи.&lt;br /&gt;
&lt;br /&gt;
'''Блок «Битовое OR»'''&lt;br /&gt;
&lt;br /&gt;
Для вычисления значения будет произведена операция &amp;quot;ИЛИ&amp;quot; над каждым битом значения в отдельности. Например: 1010 OR 0110 = 1110&lt;br /&gt;
&lt;br /&gt;
'''Блок «Логическое И»'''&lt;br /&gt;
&lt;br /&gt;
Если все входные значения становятся равны логической «1», выходное значение становится логической «1» (выход включен).&lt;br /&gt;
&lt;br /&gt;
'''Блок «Битовое AND»'''&lt;br /&gt;
&lt;br /&gt;
Для вычисления значения будет произведена операция &amp;quot;И&amp;quot; над каждым битом значения в отдельности. Если все биты, стоящие на одинаковых позициях в двоичных представлениях значений, поступающих на входы блока, равны логической «1», то на выходе элемента в этой позиции появляется логическая «1» (выход включен). Например: 1010 AND 0110 = 0010&lt;br /&gt;
&lt;br /&gt;
'''Блок «Логическое НЕ»'''&lt;br /&gt;
&lt;br /&gt;
Если входное значение блока становится равно логическому «0», то выходное значение становится логической «1», и наоборот.&lt;br /&gt;
&lt;br /&gt;
'''Блок «Битовое XOR»'''&lt;br /&gt;
&lt;br /&gt;
Если только на один из входов блока функции поступает логическая «1», то на выходе элемента появляется логическая «1». Если на входы блока функции поступают целочисленные значения, то операция будет произведена над каждым битом значения в отдельности. Например: 1010 XOR 0110 = 1100&lt;br /&gt;
&lt;br /&gt;
'''Блок «Битовое SHR»'''&lt;br /&gt;
&lt;br /&gt;
Побитовый логический сдвиг вправо используется для выполнения операции побитового логического сдвига операнда X вправо на N бит с дополнением нулями слева.&lt;br /&gt;
&lt;br /&gt;
'''Блок «Битовое SHL»'''&lt;br /&gt;
&lt;br /&gt;
Побитовый логический сдвиг влево используется для выполнения операции побитового логического сдвига операнда X влево на N бит с дополнением нулями справа.&lt;br /&gt;
&lt;br /&gt;
'''Блок «Таймер»'''&lt;br /&gt;
&lt;br /&gt;
Таймер предназначен для выполнения каких-либо действий (см. раздел 4.6) через одинаковые промежутки времени (например запись значения в узел).&lt;br /&gt;
&lt;br /&gt;
'''Блок «Мультиплексор»'''&lt;br /&gt;
&lt;br /&gt;
Мультплексор осуществляет перевод нескольких булевых переменных в целочисленное значение по формуле: «выход = вход1 + вход2*2^1 + вход3*2^2 + ...»&lt;br /&gt;
&lt;br /&gt;
'''Блок «Демультиплексор»'''&lt;br /&gt;
&lt;br /&gt;
Демультиплексор осуществляет перевод целочисленных значений из массива в несколько булевых переменных, при этом включается выход, номер которого соответствует числу из массива (например первый элемент массива равен 5, на пятом выходе появится значение true). Нумерация выходов начинается с нуля.&lt;br /&gt;
&lt;br /&gt;
'''Блок «Генератор случайного числа»'''&lt;br /&gt;
&lt;br /&gt;
Выходным значением является случайное число в диапазоне между указанным минимальным и максимальным значениями.&lt;br /&gt;
&lt;br /&gt;
'''Блок «Скрипт С++»'''&lt;br /&gt;
&lt;br /&gt;
Операция «Скрипт С++» предназначена для реализации разнообразных алгоритмов на языке С++. Операция предусматривает реализацию одной или нескольких функций, выполняющих необходимые пользователю действия. Для выполнения скрипта, необходимо добавить его в качестве узла для задачи или задачи ПЛК.&lt;br /&gt;
&lt;br /&gt;
Пример скрипта, выполняющего получение значения определенного узла и запись измененного значения в другой узел:&lt;br /&gt;
 float val()&lt;br /&gt;
 {&lt;br /&gt;
     float f = GetNodeValueAsFloat(&amp;quot;/Конфигурация1/stationSimple1/Signals1/Random2&amp;quot;);&lt;br /&gt;
     float f1 = f*100.0;&lt;br /&gt;
     SetNodeValueAsFloat(&amp;quot;/Конфигурация1/stationSimple1/Signals1/Constant3&amp;quot;, f1);&lt;br /&gt;
     return f*10.0;&lt;br /&gt;
 }&lt;br /&gt;
Приведенный выше скрипт возвращает исходное значение, умноженное на 10. Возвращаемое таким образом значение записывается в выход операции для возможности считывания в других операциях, скриптах и т. д.&lt;br /&gt;
&lt;br /&gt;
Скрипты могут возвращать значения следующих типов:&lt;br /&gt;
&lt;br /&gt;
* void;&lt;br /&gt;
*float;&lt;br /&gt;
*double;&lt;br /&gt;
*int.&lt;br /&gt;
&lt;br /&gt;
Подробное описание реализации языка С++ в AgavaSCADA/AgavaPLC приведено на странице &amp;quot;[[Описание языка С++ в AgavaPLC]]&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
'''Блок «Таймер с задержкой»'''&lt;br /&gt;
&lt;br /&gt;
Таймер с задержкой используется для операции задержки передачи и/или отключения сигнала. На выходе таймера появится сигнал логической «1» с задержкой относительно фронта входного сигнала продолжительностью равной интервалу включения и выключится по спаду входного сигнала с задержкой продолжительностью равной интервалу выключения. В том случае, если необходимо использовать блок только как таймер с задержкой включения (отключения) интервал выключения (включения) устанавливается равным 0.&lt;br /&gt;
&lt;br /&gt;
'''Блок «Генератор прямоугольных импульсов»'''&lt;br /&gt;
&lt;br /&gt;
Генератор прямоугольных импульсов используется для формирования прямоугольных импульсов пульсации. На выходе генератора формируются импульсы с заданными параметрами длительности включенного и отключенного импульса на время действия управляющего сигнала на входе (сигнал логической «1»).&lt;br /&gt;
&lt;br /&gt;
'''Блок «Триггер RS»'''&lt;br /&gt;
&lt;br /&gt;
RS-триггер с приоритетом выключения используется для переключения с фиксацией состояния во время поступления коротких импульсов на соответствующий вход. На выходе появится логическая «1» по фронту сигнала на входе Set, которая будет сброшена в «0», при поступлении импульса на вход Reset.&lt;br /&gt;
&lt;br /&gt;
'''Блок «Триггер SR»'''&lt;br /&gt;
&lt;br /&gt;
SR-триггер с приоритетом включения используется для переключения с фиксацией состояния в случае поступления коротких импульсов на соответствующий вход. На выходе появится логическая «1» по фронту сигнала на входе Set, которая будет сброшена в «0», при поступлении импульса на вход Reset.&lt;br /&gt;
&lt;br /&gt;
'''Блок «Детектор переднего фронта импульса»'''&lt;br /&gt;
&lt;br /&gt;
Детектор переднего фронта импульса используется в случае необходимости иметь реакцию на изменение состояния дискретного входного сигнала. На выходе генерируется единичный импульс при изменении состояния входа из «0» в «1».&lt;br /&gt;
&lt;br /&gt;
'''Блок «Детектор заднего фронта импульса»'''&lt;br /&gt;
&lt;br /&gt;
Детектор заднего фронта импульса используется в случае необходимости иметь реакцию на изменение состояния дискретного входного сигнала. На выходе генерируется единичный импульс при изменении состояния входа из «1» в «0».&lt;br /&gt;
&lt;br /&gt;
'''Блок «D-триггер»'''&lt;br /&gt;
&lt;br /&gt;
D-триггер используется для формирования импульса включения выхода на интервал времени импульса на входе D, выходной интервал будет синхронизирован с тактовой частотой на входе С. На выходе Q триггера появится сигнал логической «1» по фронту тактовых импульсов на входе С при наличии сигнала логической «1» на входе D. Возврат выхода в сигнал логического «0» произойдет по фронту тактовых импульсов на входе С при наличии сигнала логического «0» на входе D. Вход Set принудительно устанавливает выход в состояние логической «1». Вход Reset является приоритетным и устанавливает выход в состояние логического «0».&lt;br /&gt;
&lt;br /&gt;
'''Блок «Селектор»'''&lt;br /&gt;
&lt;br /&gt;
Если на вход Value подается логическая «1», то результатом выполнения операции блока на выходе является входной сигнал ValueT. Если же Value равен логической «0», то результатом выполнения операции блока на выходе является входной сигнал ValueF.&lt;br /&gt;
&lt;br /&gt;
'''Блок «Больше чем»'''&lt;br /&gt;
&lt;br /&gt;
На выход подается логическая «1», если значение in0 больше чем значение in1.&lt;br /&gt;
&lt;br /&gt;
'''Блок «Равенство»'''&lt;br /&gt;
&lt;br /&gt;
На выход подается логическая «1», если значение in0 равно значению in1.&lt;br /&gt;
&lt;br /&gt;
'''Блок «Абсолютное значение числа»'''&lt;br /&gt;
&lt;br /&gt;
Результатом операции функции на выходе является модуль подаваемого на вход значения. Если число на входе положительное, то на выход подается само число, если отрицательное – положительное число, получаемое от перемены его знака с «-» на «+».&lt;br /&gt;
&lt;br /&gt;
'''Блок «Возведение в степень»'''&lt;br /&gt;
&lt;br /&gt;
Результатом операции функции на выходе является значение, равное значению in0, возведенному в степень значения N.&lt;br /&gt;
&lt;br /&gt;
'''Блок «PID-регулятор»'''&lt;br /&gt;
&lt;br /&gt;
Регулятор PID применяется для поддержания заданного значения параметра. На вход Pv подается текущее значение регулируемой величины, на Sp – ее заданное значение. С помощью изменения коэффициентов ПИД регулятора kP, kI и kD достигается оптимальный режим работы. Min задает минимальное значение на выходе, Max – максимальное. time - период регулятора (в мс.).&lt;br /&gt;
&lt;br /&gt;
'''Блок «PWM-регулятор»'''&lt;br /&gt;
&lt;br /&gt;
Применяется для преобразования аналогового сигнала в дискретный с помощью ШИМ. На вход in подается текущее значение регулируемой величины, Min задает минимальное значение на входе, Max – максимальное. time - период регулятора (в мс.)&lt;br /&gt;
&lt;br /&gt;
==Устройства==&lt;br /&gt;
Группа «Устройства» предназначена для группировки узлов типа &amp;quot;Устройство&amp;quot;, выполняющие разнообразные задачи, например работа с внешними накопителями и ПЗУ. &lt;br /&gt;
&lt;br /&gt;
Retain-накопитель дает возможность хранить значения регистров, постоянных и сигналов в постоянной памяти контроллера, что позволяет им сохранять свои значения после отключения питания.&lt;br /&gt;
&lt;br /&gt;
Для сохранения переменных необходимо перечислить их в свойстве «Узлы» и указать путь сохранения на выбранном накопителе.&lt;br /&gt;
&lt;br /&gt;
== Отчеты==&lt;br /&gt;
{{Внимание|Тип=Восклицание желтый.png|Текст=Данный узел доступен только при  исполнении проекта на настольном компьютере. На панелях оператора и контроллерах МПР этот узел не доступен.}}&lt;br /&gt;
Отчет – технологический документ, содержащий информацию о ходе производственного процесса, обработанную по заложенным в отчет алгоритмам. Отчеты формируются на основе макетов (статической части отчетов) путем добавления в них свойств и значений заданных параметров технологического процесса, которые формируются (выбираются из базы данных технологических параметров и проходят соответствующую обработку) по алгоритмам, размещенным в этих шаблонах.&lt;br /&gt;
&lt;br /&gt;
Данные для отчета предоставляет выборка, осуществляющая получение данных и их обработку из базы данных.&lt;br /&gt;
&lt;br /&gt;
===Создание нового отчета===&lt;br /&gt;
Создание любого отчета производится в два этапа.&lt;br /&gt;
&lt;br /&gt;
#Создание необходимых узлов в конфигурации: сам отчет и необходимое количество выборок.&lt;br /&gt;
#Составление макета отчета.&lt;br /&gt;
&lt;br /&gt;
Создание узла типа «Отчет» в конфигурации и выборок для него производится аналогично созданию узлов других типов. К станции добавляется узел типа «Отчеты» с помощью команды контекстного меню «Добавить узел», далее к узлу типа «Отчеты» добавляется отчет и к отчету добавляется необходимое количество выборок.&lt;br /&gt;
&lt;br /&gt;
Выборка – специальный узел, предназначенный для выборки данных из архива и их обработки для последующего отображения в отчете.&lt;br /&gt;
&lt;br /&gt;
Перед переходом к редактированию макета желательно проделать следующие операции:&lt;br /&gt;
&lt;br /&gt;
*в свойстве отчета «Путь к файлу отчета» установить имя файла, в котором будет храниться макет отчета;&lt;br /&gt;
* в свойстве «Источники» выборки (выборок) отчета установить перечень архивных сигналов (коннекторов), которые будут выводиться в отчете.&lt;br /&gt;
&lt;br /&gt;
===Редактирование макета отчета===&lt;br /&gt;
[[Файл:AgavaPLC–Редактор макета отчета.png|мини|Рисунок 42 – Редактор макета отчета]]&lt;br /&gt;
Для редактирования макета отчета необходимо переключиться из редактора конфигурации в редактор макета отчета с помощью команды «Открыть редактор макета отчета», доступной из контекстного меню дерева конфигурации, отображаемого при щелчке правой кнопкой мыши на узле типа «Отчет».&lt;br /&gt;
&lt;br /&gt;
В окне редактора расположены:&lt;br /&gt;
&lt;br /&gt;
*панели инструментов;&lt;br /&gt;
* панель объектов отчета;&lt;br /&gt;
*окно «Инспектор объектов»;&lt;br /&gt;
*окно «Инспектор данных»;&lt;br /&gt;
*окно «Инспектор скриптов»;&lt;br /&gt;
*область построения макета отчета;&lt;br /&gt;
*окно «Структура отчета».&lt;br /&gt;
&lt;br /&gt;
Редактор макета позволяет вызывать команды сочетаниями клавиш:&lt;br /&gt;
&lt;br /&gt;
*Ctrl + N – новый макет;&lt;br /&gt;
*Ctrl + O – загрузить макет;&lt;br /&gt;
*Ctrl + S – сохранить макет;&lt;br /&gt;
*Ctrl + Shift + S – сохранить макет под новым именем;&lt;br /&gt;
*Ctrl + P – предварительный просмотр;&lt;br /&gt;
*Ctrl + Z – отмена изменений;&lt;br /&gt;
*Ctrl + Shift + Z – возврат отмененных изменений;&lt;br /&gt;
* Ctrl + C – копировать объект;&lt;br /&gt;
*Ctrl + X – вырезать объект;&lt;br /&gt;
*Ctrl + V – вставить объект;&lt;br /&gt;
*Ctrl + Стрелки – переместить выделенный объект;&lt;br /&gt;
*Shift + Стрелки – изменить размер выделенных объектов;&lt;br /&gt;
*Del – удалить выделенные объекты;&lt;br /&gt;
*Shift + левая кнопка мыши – создать область выделения.&lt;br /&gt;
&lt;br /&gt;
====Окно «Инспектор объектов»====&lt;br /&gt;
Окно «Инспектор объектов» содержит список свойств выделенного объекта и предназначено для их редактирования.&lt;br /&gt;
&lt;br /&gt;
====Окно «Инспектор данных»====&lt;br /&gt;
Окно «Инспектор данных» содержит список доступных для использования источников данных (выборок) и предназначено для заполнения блока «Данные» элементами соответствующего типа.&lt;br /&gt;
&lt;br /&gt;
====Окно «Инспектор скриптов»====&lt;br /&gt;
Окно «Инспектор скриптов» содержит список доступных для использования в отчете скриптов.&lt;br /&gt;
&lt;br /&gt;
====Окно «Структура отчета»====&lt;br /&gt;
Окно «Структура отчет» отображает структуру отчета в виде дерева связанных элементов.&lt;br /&gt;
&lt;br /&gt;
===Элементы отчета===&lt;br /&gt;
Для составления макета отчета доступны следующие элементы:&lt;br /&gt;
&lt;br /&gt;
*текст;&lt;br /&gt;
*данные;&lt;br /&gt;
*изображение;&lt;br /&gt;
*фигура;&lt;br /&gt;
*компоновка (Layout).&lt;br /&gt;
&lt;br /&gt;
====Текст====&lt;br /&gt;
Элемент «Текст» служит для вывода надписей или содержимого полей источников данных.&lt;br /&gt;
&lt;br /&gt;
Объект «Текст» обладает очень широкими возможностями. Он умеет отображать текст, рамку, заливку. Текст может быть отображен любым шрифтом любого размера, цвета и стиля. Большинство настроек делаются визуально с помощью панелей инструментов.&lt;br /&gt;
&lt;br /&gt;
Одна из самых главных особенностей этого универсального объекта – это возможность отображения не только статичного текста, но и текста с применением вычисляемых выражений. Причем, выражения могут располагаться в объекте вперемешку с текстом. Рассмотрим простой пример – поместим в объект «Текст» следующую строку: «Привет! Сегодня $S{now()}».&lt;br /&gt;
&lt;br /&gt;
Если запустить отчет на построение, мы увидим приблизительно следующее: «Привет! Сегодня 2018­08­03». В процессе построения отчета выражение в тексте, заключенное $S{}, было вычислено и полученное значение вставлено обратно в текст. Объект «Текст» может содержать любое количество выражений, смешанных с обычным текстом. В скобки можно заключать и одиночные переменные, и выражения, например, $S{1+2*(3+4)}. В выражениях можно использовать константы, переменные ($V{}), функции, поля БД ($D{}).&lt;br /&gt;
&lt;br /&gt;
Свойства элемента «Текст»:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Наименование свойства&lt;br /&gt;
!Описание&lt;br /&gt;
|-&lt;br /&gt;
|alignment&lt;br /&gt;
|Выравнивание текста по вертикали и горизонтали&lt;br /&gt;
|-&lt;br /&gt;
|angle&lt;br /&gt;
|Поворот надписи&lt;br /&gt;
|-&lt;br /&gt;
|autoHeight&lt;br /&gt;
|Автоматический подбор высоты&lt;br /&gt;
|-&lt;br /&gt;
|autoWidth&lt;br /&gt;
|Автоматический подбор ширины&lt;br /&gt;
|-&lt;br /&gt;
|backgroundColor&lt;br /&gt;
|Цвет заливки&lt;br /&gt;
|-&lt;br /&gt;
|backgroundMode&lt;br /&gt;
|Режим заливки&lt;br /&gt;
|-&lt;br /&gt;
| backgroundOpacity&lt;br /&gt;
|Прозрачность заливки&lt;br /&gt;
|-&lt;br /&gt;
|borders&lt;br /&gt;
|Границы&lt;br /&gt;
|-&lt;br /&gt;
|content&lt;br /&gt;
|Содержимое объекта «Текст»&lt;br /&gt;
|-&lt;br /&gt;
|font&lt;br /&gt;
|Шрифт&lt;br /&gt;
|-&lt;br /&gt;
|fontColor&lt;br /&gt;
|Цвет шрифта&lt;br /&gt;
|-&lt;br /&gt;
| foregroundOpacity&lt;br /&gt;
|Прозрачность шрифта&lt;br /&gt;
|-&lt;br /&gt;
|geometry&lt;br /&gt;
|Размер и расположение объекта&lt;br /&gt;
|-&lt;br /&gt;
|itemLocation&lt;br /&gt;
|Расположение объекта (страница или бэнд)&lt;br /&gt;
|-&lt;br /&gt;
|margin&lt;br /&gt;
|Отступы&lt;br /&gt;
|-&lt;br /&gt;
|objectName&lt;br /&gt;
| Имя объекта&lt;br /&gt;
|-&lt;br /&gt;
|stretchToMaxHeight&lt;br /&gt;
|Установка значения высоты самого высокого объекта на бэнде&lt;br /&gt;
|-&lt;br /&gt;
|trimValue&lt;br /&gt;
|Удаление  пробелов в начале и в конце надписи&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Для редактирования свойства «Content» используется диалоговое окно «Text Item Editor», вызов которого осуществляется двойным щелчком левой кнопки мыши на элементе «Текст».&lt;br /&gt;
&lt;br /&gt;
Свойство «Content» может содержать: &lt;br /&gt;
&lt;br /&gt;
*текст;&lt;br /&gt;
*значения переменных;&lt;br /&gt;
*значения полей из набора данных;&lt;br /&gt;
*значения, формируемые посредством исполнения скрипта.&lt;br /&gt;
&lt;br /&gt;
Для вывода значений переменных используется синтаксис «$V{имяПеременной}» (без кавычек), для вывода значения поля данных – «$D{имяНабораДанных.ИмяПеременной}», для вывода результата исполнения скрипта – «$S{телоСкрипта}».&lt;br /&gt;
&lt;br /&gt;
==== Изображение ====&lt;br /&gt;
Элемент для вывода изображений:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Наименование свойства&lt;br /&gt;
!Описание&lt;br /&gt;
|-&lt;br /&gt;
|autoSize&lt;br /&gt;
|Подгонять размер под размер изображения&lt;br /&gt;
|-&lt;br /&gt;
|borders&lt;br /&gt;
|Границы&lt;br /&gt;
|-&lt;br /&gt;
|content  &lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|datasource&lt;br /&gt;
|Источник данных&lt;br /&gt;
|-&lt;br /&gt;
|field&lt;br /&gt;
|Поле данных&lt;br /&gt;
|-&lt;br /&gt;
|geometry&lt;br /&gt;
|Размер и расположение&lt;br /&gt;
|-&lt;br /&gt;
|image&lt;br /&gt;
|Изображение&lt;br /&gt;
|-&lt;br /&gt;
| itemLocation&lt;br /&gt;
|Расположение объекта (страница или бэнд)&lt;br /&gt;
|-&lt;br /&gt;
|objectName&lt;br /&gt;
|Имя объекта&lt;br /&gt;
|-&lt;br /&gt;
| stretchToMaxHeight&lt;br /&gt;
|Устанавливать значение высоты самого высокого объекта на  бэнде&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
====Фигура====&lt;br /&gt;
Элемент для вывода фигур:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Наименование свойства&lt;br /&gt;
!Описание&lt;br /&gt;
|-&lt;br /&gt;
|borders&lt;br /&gt;
|Границы&lt;br /&gt;
|-&lt;br /&gt;
| geometry&lt;br /&gt;
|Размер и расположение&lt;br /&gt;
|-&lt;br /&gt;
|itemLocation&lt;br /&gt;
|Расположение объекта (страница или бэнд)&lt;br /&gt;
|-&lt;br /&gt;
|lineWidth&lt;br /&gt;
|Толщина линии&lt;br /&gt;
|-&lt;br /&gt;
|objectName&lt;br /&gt;
|Имя объекта&lt;br /&gt;
|-&lt;br /&gt;
|opacity&lt;br /&gt;
|Прозрачность&lt;br /&gt;
|-&lt;br /&gt;
|penStyle&lt;br /&gt;
|Стиль линии&lt;br /&gt;
|-&lt;br /&gt;
|shape&lt;br /&gt;
|Фигура&lt;br /&gt;
|-&lt;br /&gt;
|shapeBrush&lt;br /&gt;
|Стиль заливки&lt;br /&gt;
|-&lt;br /&gt;
|shapeBrushColor&lt;br /&gt;
|Цвет заливки&lt;br /&gt;
|-&lt;br /&gt;
|shapeColor&lt;br /&gt;
|Цвет фигуры&lt;br /&gt;
|-&lt;br /&gt;
|stretchToMaxHeight&lt;br /&gt;
|Устанавливать значение высоты самого высокого объекта на  бэнде&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
====Горизонтальная компоновка (Layout)====&lt;br /&gt;
Элемент, позволяющий объединять несколько элементов в группу:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Наименование свойства&lt;br /&gt;
!Описание&lt;br /&gt;
|-&lt;br /&gt;
|borders&lt;br /&gt;
|Границы&lt;br /&gt;
|-&lt;br /&gt;
|geometry&lt;br /&gt;
|Размер и расположение&lt;br /&gt;
|-&lt;br /&gt;
|itemLocation&lt;br /&gt;
|Расположение объекта (страница или бэнд)&lt;br /&gt;
|-&lt;br /&gt;
|objectName&lt;br /&gt;
|Имя объекта&lt;br /&gt;
|-&lt;br /&gt;
|stretchToMaxHeight&lt;br /&gt;
|Устанавливать значение высоты самого высокого объекта на  бэнде&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Разделы отчета (бэнды) ===&lt;br /&gt;
Бэнд предназначен для размещения других элементов отчета. Бэнд может быть нескольких типов:&lt;br /&gt;
&lt;br /&gt;
*Report Header – заголовок отчета;&lt;br /&gt;
*Report Footer – завершение отчета;&lt;br /&gt;
*Page Header – верхний колонтитул страницы отчета;&lt;br /&gt;
*Page Footer – нижний колонтитул страницы отчета;&lt;br /&gt;
*Data – данные отчета;&lt;br /&gt;
* SubDetail – подчиненные данные отчета;&lt;br /&gt;
*SubDetailHeader – заголовок подчиненных данных;&lt;br /&gt;
*SubDetailFooter – завершение подчиненных данных;&lt;br /&gt;
*GroupHeader – заголовок группы;&lt;br /&gt;
*GroupFooter – завершение группы.&lt;br /&gt;
&lt;br /&gt;
Бэнды применяются для логической группировки объектов. К примеру, размещение объекта на элементе «Данные» типа «Page Header», приводит к отображению этого объекта в верхней части каждой страницы готового отчета. Аналогичным образом «Page Footer» выводится внизу каждой страницы со всеми лежащими на нем объектами.&lt;br /&gt;
&lt;br /&gt;
Общие для всех элементов «Данные» свойства:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Наименование свойства&lt;br /&gt;
!Описание&lt;br /&gt;
|-&lt;br /&gt;
|autoHeight&lt;br /&gt;
|Автоматический подбор высоты&lt;br /&gt;
|-&lt;br /&gt;
|backgroundColor&lt;br /&gt;
|Цвет заливки бэнда&lt;br /&gt;
|-&lt;br /&gt;
|borders&lt;br /&gt;
|Границы&lt;br /&gt;
|-&lt;br /&gt;
|geometry&lt;br /&gt;
|Размер&lt;br /&gt;
|-&lt;br /&gt;
|keepBottomSpace&lt;br /&gt;
|Сохранение отступа от нижней границы бэнда&lt;br /&gt;
|-&lt;br /&gt;
|objectName&lt;br /&gt;
|Имя объекта&lt;br /&gt;
|-&lt;br /&gt;
|printIfEmpty&lt;br /&gt;
|Отображение пустого бэнда&lt;br /&gt;
|-&lt;br /&gt;
|splittable&lt;br /&gt;
|Разделение  бэнда, если он не влезает на страницу&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Report Footer:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Наименование свойства&lt;br /&gt;
!Описание&lt;br /&gt;
|-&lt;br /&gt;
|maxScalePercent&lt;br /&gt;
|Максимальный процент, на который можно уменьшить бенд, если он не влезает на страницу. Если бэнд даже после сжатия&lt;br /&gt;
&lt;br /&gt;
не влезает на страницу, он будет перенесен полностью или частично  – в зависимости от настроек бэнда&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Data:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Наименование свойства&lt;br /&gt;
!Описание&lt;br /&gt;
|-&lt;br /&gt;
|datasource&lt;br /&gt;
|Источник данных. Data-бэнд будет сформирован для каждой строки в источнике данных&lt;br /&gt;
|-&lt;br /&gt;
|keepFooterTogether&lt;br /&gt;
|Если Report Footer не влезает на страницу, то он будет перенесен на следующую страницу совместно с последним&lt;br /&gt;
&lt;br /&gt;
экземпляром Data-бэнда&lt;br /&gt;
|-&lt;br /&gt;
|sliceLastRow&lt;br /&gt;
| Указывает генератору отчетов на то, можно ли разрезать последний экземпляр Data-бэнда или его нужно перенести&lt;br /&gt;
&lt;br /&gt;
целиком&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Бэнды данного типа предназначены для вывода на печать данных из наборов. Набор данных - это заранее неизвестное количество строк (записей), каждая из которых содержит определенное количество колонок (полей).&lt;br /&gt;
&lt;br /&gt;
SubDetail:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Наименование свойства&lt;br /&gt;
!Описание&lt;br /&gt;
|-&lt;br /&gt;
|datasource&lt;br /&gt;
| Источник данных. SubDetail-бэнд будет сформирован для каждой строки в источнике данных&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
SubDetailHeader, SubDetailFooter:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Наименование свойства&lt;br /&gt;
!Описание&lt;br /&gt;
|-&lt;br /&gt;
|printAlways&lt;br /&gt;
| Печатать, даже если SubDetail пустой&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
GroupHeader:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Наименование свойства&lt;br /&gt;
! Описание&lt;br /&gt;
|-&lt;br /&gt;
|groupFieldName&lt;br /&gt;
|Поле, по которому осуществляется группировка. Экземпляр GroupHeader будет формироваться при смене значения в этом  поле&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===Функции===&lt;br /&gt;
==== Агрегатные функции ====&lt;br /&gt;
Агрегатные функции предназначены для обработки значений, содержащихся в резделах Data и SubDetail.&lt;br /&gt;
&lt;br /&gt;
===== AVG - вычисление среднего значения =====&lt;br /&gt;
Пример использования:&lt;br /&gt;
 $S{AVG(&amp;quot;TextItem4&amp;quot;,&amp;quot;DataBand1&amp;quot;);}&lt;br /&gt;
&lt;br /&gt;
===== SUM - вычисление суммы значений =====&lt;br /&gt;
Пример использования:&lt;br /&gt;
 $S{SUM(&amp;quot;TextItem8&amp;quot;,&amp;quot;DataBand1&amp;quot;);}&lt;br /&gt;
&lt;br /&gt;
===== MIN =====&lt;br /&gt;
&lt;br /&gt;
===== MAX =====&lt;br /&gt;
&lt;br /&gt;
===== COUNT =====&lt;br /&gt;
&lt;br /&gt;
==== Числовые функции ====&lt;br /&gt;
&lt;br /&gt;
===== numberFormat - форматирование числа =====&lt;br /&gt;
Синтаксис:&lt;br /&gt;
 numberFormat(значение, 'формат', точность)&lt;br /&gt;
Форматы:&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;'f'&amp;lt;/code&amp;gt; — фиксированная запись (например, &amp;lt;code&amp;gt;&amp;quot;123.45&amp;quot;&amp;lt;/code&amp;gt;);&lt;br /&gt;
* &amp;lt;code&amp;gt;'g'&amp;lt;/code&amp;gt; — общий формат (автоматически выбирает между &amp;lt;code&amp;gt;'f'&amp;lt;/code&amp;gt; и &amp;lt;code&amp;gt;'e'&amp;lt;/code&amp;gt;);&lt;br /&gt;
* &amp;lt;code&amp;gt;'e'&amp;lt;/code&amp;gt; — экспоненциальная запись (например, &amp;lt;code&amp;gt;&amp;quot;1.2345e+02&amp;quot;&amp;lt;/code&amp;gt;);&lt;br /&gt;
&lt;br /&gt;
Пример использования:&lt;br /&gt;
 $S{numberFormat($D{fetcharchiverdata1.ArchiversSourceConnector0 (среднее)}, 'f', 3)}       -&amp;gt; 123.495&lt;br /&gt;
[[Категория:AgavaSCADA/AgavaPLC]]&lt;/div&gt;</summary>
		<author><name>SharipovRR</name></author>
	</entry>
	<entry>
		<id>https://docs.kb-agava.ru/index.php?title=%D0%A3%D0%B7%D0%BB%D1%8B_%D0%BF%D1%80%D0%BE%D0%B5%D0%BA%D1%82%D0%B0_AgavaSCADA/AgavaPLC&amp;diff=3312</id>
		<title>Узлы проекта AgavaSCADA/AgavaPLC</title>
		<link rel="alternate" type="text/html" href="https://docs.kb-agava.ru/index.php?title=%D0%A3%D0%B7%D0%BB%D1%8B_%D0%BF%D1%80%D0%BE%D0%B5%D0%BA%D1%82%D0%B0_AgavaSCADA/AgavaPLC&amp;diff=3312"/>
		<updated>2025-10-30T04:32:42Z</updated>

		<summary type="html">&lt;p&gt;SharipovRR: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Узлы проекта ==&lt;br /&gt;
Узел - элементарная сущность проекта, осуществляющая хранение информации или реализующая определенный функционал. Каждый узел обладает набором [[Свойства узлов в AgavaSCADA/AgavaPLC|свойств]]. Все узлы, объединенные в иерархическую структуру, образуют проект.&lt;br /&gt;
&lt;br /&gt;
== Проект ==&lt;br /&gt;
[[Файл:AgavaPLC–Дерево проекта.png|мини|Рисунок 21 – Дерево проекта]]&lt;br /&gt;
Узел &amp;quot;Проект&amp;quot; (&amp;quot;Корневой узел&amp;quot;, &amp;quot;Корень&amp;quot;) предназначен для хранения общей информации о проекте и связывания других узлов проекта.&lt;br /&gt;
&lt;br /&gt;
== Станция ==&lt;br /&gt;
Станция – важнейший узел, управляющий работой собственных систем и выполняющий обмен данными с другими станциями. Физически станция представляет собой устройство, на котором исполняется проект (компьютер, панель оператора, МПР-60 или другое устройство).&lt;br /&gt;
&lt;br /&gt;
Для использования в проекте доступны несколько типов станций. например:&lt;br /&gt;
&lt;br /&gt;
* '''Станция''' - общий тип станции. Проекты с такой станцией могут выполняться на большинстве устройств - контроллеры, панели, персональные компьютеры. Чаще всего используется для проектов, предназначенных для выполнения на персональном компьютере.&lt;br /&gt;
* '''Панель ПО-40''' - специализированный тип для проектов на панелях оператора ПО-40. Станция такого типа по отношению к общему дополнительно предоставляет возможность управления оборудованием панели оператора (светодиоды индикации и др.), использования корзины субмодулей.&lt;br /&gt;
* '''Панель ПО-50''' - специализированный тип для проектов на панелях оператора ПО-50. Станция такого типа по отношению к общему дополнительно предоставляет возможность управления оборудованием панели оператора (светодиоды индикации и др.).&lt;br /&gt;
* '''Контроллер МПР-60''' - специализированный тип для проектов на программируемых реле МПР-60. Станция такого типа по отношению к общему дополнительно предоставляет возможность управления оборудованием устройства (светодиоды индикации и др.), использования корзины субмодулей.&lt;br /&gt;
* '''Контроллер ПЛК-70.A''' - специализированный тип для проектов, предназначенных для контроллеров АГАВА ПЛК-70.А. Станция такого типа по отношению к общему дополнительно предоставляет возможность управления оборудованием контроллера (светодиоды индикации и др.), использования корзины субмодулей.&lt;br /&gt;
&lt;br /&gt;
При построении больших проектов станций в проекте может быть несколько, и они могут выполнять разные задачи. Например, станция-сервер выполняет сбор и регистрацию данных, клиентские станции выполняют визуализацию данных на рабочих местах и т. д.&lt;br /&gt;
&lt;br /&gt;
Станции подчиняются узлы типа &amp;quot;Система&amp;quot; - Транспортная система, Система архивирования, Система визуализации и т. д.&lt;br /&gt;
&lt;br /&gt;
== Транспортная система ==&lt;br /&gt;
Транспортная система управляет передачей данных по различным каналам связи. Система управляет работой &amp;quot;Транспортов&amp;quot; - узлов, выполняющих обмен данными с устройствами по определенному протоколу.&lt;br /&gt;
&lt;br /&gt;
С одной стороны, транспортная система обращается непосредственно к сигналам и каналам устройства, а с другой стороны, представляет их в виде неких универсальных единиц – узлов-источников. Каждый источник однозначно соответствует определенному сигналу или параметру устройства.  При изменении сигнала меняется и значение источника.  При записи данных в источник производится подача команды устройству на установку определенного значения конкретного параметра.&lt;br /&gt;
&lt;br /&gt;
Транспортная система допускает использование нескольких транспортов, что дает возможность одновременного обмена данными с большим количеством устройств по разным протоколам.&lt;br /&gt;
&lt;br /&gt;
=== Транспорт ===&lt;br /&gt;
Транспорт предназначен для обмена данными с устройствами по определенному протоколу. Один транспорт, в зависимости от типа, позволяет обмениваться данными с одним или несколькими устройствами.&lt;br /&gt;
&lt;br /&gt;
Доступны для использования следующие виды транспортов:&lt;br /&gt;
&lt;br /&gt;
* Транспорт Modbus-TCP;&lt;br /&gt;
* Транспорт Modbus-RTU;&lt;br /&gt;
* Транспорт SNMP;&lt;br /&gt;
* Транспорт OPC UA;&lt;br /&gt;
* Транспорт OPC DA (только для Windows);&lt;br /&gt;
* Транспорт MQTT;&lt;br /&gt;
* Последовательный транспорт (устаревший);&lt;br /&gt;
* TCP/IP транспорт (устаревший).&lt;br /&gt;
Подробное описание транспортов приведено в отдельном документе &amp;quot;[[Транспорты AgavaSCADA/AgavaPLC]]&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
==Система визуализации==&lt;br /&gt;
{{Внимание|Тип=Восклицание желтый.png|Текст=Система визуализации недоступна в проектах для контроллеров МПР}}&lt;br /&gt;
 &lt;br /&gt;
Задачей этой системы является отображение данных в виде набора мнемонических схем (экранов, мнемосхем), а также предоставление пользователю возможности управления. &lt;br /&gt;
&lt;br /&gt;
Каждый экран позволяет в схематичном, понятном пользователю виде представить участок технологической схемы с отображением необходимых параметров технологического процесса.&lt;br /&gt;
&lt;br /&gt;
Изображение на экране строится с помощью окон, на которых размещаются объекты визуализации – виджеты. Виджетами могут быть текстовые метки, изображения, в том числе анимированные, элементы управления, графики и т. д. Виджеты можно объединять в слои для удобного управления отображением виджетов.&lt;br /&gt;
&lt;br /&gt;
Виджеты могут быть статическими и динамическими.  Динамические виджеты привязаны к одному или нескольким сигналам и их отображение зависит от значений этих сигналов. Статические виджеты не имеют привязки к сигналам и их изображение всегда постоянно.&lt;br /&gt;
&lt;br /&gt;
Для перехода по экранам, изменения значений параметров и иного управления служат специальные виджеты: кнопки управления, поля ввода и другие.&lt;br /&gt;
&lt;br /&gt;
Для повышения быстродействия и увеличения комфортности работы с системой система визуализации хранит в памяти кэш из нескольких последних открытых экранов. Когда при последовательном открытии экранов этот кэш заполняется, наиболее старые экраны удаляются из него.  Это связано с тем, что, как правило, в работе используются несколько одних и тех же экранов, которые отображают сводную информацию о техпроцессе и оператор в штатном режиме переключается только между ними. Сохраняя их в памяти, система ускоряет переключение между ними, поскольку при этом не требуется каждый раз создавать экран, все находящиеся на нем объекты и запускать процессы обновления параметров.&lt;br /&gt;
&lt;br /&gt;
Когда экран переходит в кэш, обновление параметров на нем прекращается для снижения нагрузки на центральный процессор. Если все же необходимо, чтобы экран всегда производил обновление данных (по разным причинам), даже находясь в кэше, необходимо в его настройках включить опцию «Постоянно обновляемый».&lt;br /&gt;
&lt;br /&gt;
Подчиненные типы узлов:&lt;br /&gt;
&lt;br /&gt;
*фрейм;&lt;br /&gt;
*окно;&lt;br /&gt;
*композиция.&lt;br /&gt;
&lt;br /&gt;
===Фрейм===&lt;br /&gt;
[[Файл:AgavaPLC–Пример структуры сложного фрейма, состоящего из двух форм и одного окна с многослойной композицией.png|мини|Рисунок 23 – Пример структуры сложного фрейма, состоящего из двух форм и одного окна с многослойной композицией]]&lt;br /&gt;
Фрейм – узел, предназначенный для группировки окон, отображаемых на определенном дисплее. Обеспечивает организацию окон в пространстве экрана, управление мониторами и границами отображения. &lt;br /&gt;
&lt;br /&gt;
Если необходимо отобразить информацию на нескольких дисплеях одновременно, то для каждого из них нужно использовать отдельный фрейм. Окон во фрейме может быть несколько, однако они не могут накладываться друг на друга.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Наименование свойства&lt;br /&gt;
!Идентификатор&lt;br /&gt;
!Тип&lt;br /&gt;
!Описание&lt;br /&gt;
!Допустимые значения&lt;br /&gt;
|-&lt;br /&gt;
|Позиция X&lt;br /&gt;
|XCoord&lt;br /&gt;
|int&lt;br /&gt;
|Координата X левого верхнего угла фрейма&lt;br /&gt;
|Целое число&lt;br /&gt;
|-&lt;br /&gt;
|Позиция Y&lt;br /&gt;
|YCoord&lt;br /&gt;
|int&lt;br /&gt;
|Координата Y левого верхнего угла фрейма&lt;br /&gt;
|Целое число&lt;br /&gt;
|-&lt;br /&gt;
|Ширина&lt;br /&gt;
|XSize&lt;br /&gt;
|int&lt;br /&gt;
|Ширина фрейма в пикселях&lt;br /&gt;
|Целое число &amp;gt; 0&lt;br /&gt;
|-&lt;br /&gt;
|Высота&lt;br /&gt;
|YSize&lt;br /&gt;
|int&lt;br /&gt;
|Высота фрейма в пикселях&lt;br /&gt;
|Целое число &amp;gt; 0&lt;br /&gt;
|-&lt;br /&gt;
|Окна&lt;br /&gt;
|Windows&lt;br /&gt;
|NodesArray&lt;br /&gt;
|Список окон, принадлежащих фрейму&lt;br /&gt;
|Узлы типа: Window&lt;br /&gt;
|-&lt;br /&gt;
|Номер монитора&lt;br /&gt;
|DisplayNo&lt;br /&gt;
|int&lt;br /&gt;
|Номер монитора для отображения фрейма&lt;br /&gt;
|0 - по умолчанию&lt;br /&gt;
≥1 - конкретные мониторы&lt;br /&gt;
|-&lt;br /&gt;
|Тип границы&lt;br /&gt;
|BorderType&lt;br /&gt;
|enum&lt;br /&gt;
|Тип границы фрейма&lt;br /&gt;
|0: Не определен (ошибка)&lt;br /&gt;
1: Отсутствует&lt;br /&gt;
&lt;br /&gt;
2: Фиксированная&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== Позиция и размеры (XCoord, YCoord, XSize, YSize) ====&lt;br /&gt;
&lt;br /&gt;
* '''Тип:''' int.&lt;br /&gt;
* '''Описание:''' Определяют положение и размеры фрейма на экране.&lt;br /&gt;
* '''Значения по умолчанию:''' (0, 0, 640, 480).&lt;br /&gt;
* '''Применение:''' Задание области экрана, которую занимает фрейм.&lt;br /&gt;
&lt;br /&gt;
==== Окна (Windows) ====&lt;br /&gt;
'''Тип:''' NodesArray.&lt;br /&gt;
&lt;br /&gt;
'''Описание:''' Коллекция окон, которые управляются данным фреймом. Окна могут добавляться только из существующих узлов.&lt;br /&gt;
&lt;br /&gt;
'''Особенности:'''&lt;br /&gt;
&lt;br /&gt;
* Поддерживаются только узлы типа Window.&lt;br /&gt;
&lt;br /&gt;
==== Номер монитора (DisplayNo) ====&lt;br /&gt;
'''Тип:''' int.&lt;br /&gt;
&lt;br /&gt;
'''Описание:''' Определяет, на каком мониторе системы отображается фрейм. Значение 0 соответствует монитору по умолчанию.&lt;br /&gt;
&lt;br /&gt;
'''Использование:'''&lt;br /&gt;
&lt;br /&gt;
* 0 - основной монитор.&lt;br /&gt;
* 1, 2, ... - дополнительные мониторы.&lt;br /&gt;
* Свойство важно для многомониторных конфигураций.&lt;br /&gt;
&lt;br /&gt;
==== Тип границы (BorderType) ====&lt;br /&gt;
'''Тип:''' enum.&lt;br /&gt;
&lt;br /&gt;
'''Описание:''' Определяет тип обрамления фрейма. Влияет на внешний вид и поведение границ.&lt;br /&gt;
&lt;br /&gt;
'''Значения:'''&lt;br /&gt;
&lt;br /&gt;
* '''Отсутствует''' - фрейм без видимых границ.&lt;br /&gt;
* '''Фиксированная''' - стандартная граница окна.&lt;br /&gt;
* '''Не определен''' - используется только для обработки ошибок.&lt;br /&gt;
&lt;br /&gt;
==== Наследование привилегий ====&lt;br /&gt;
Фрейм автоматически добавляет доступные привилегии для работы с окнами:&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;OpenWindow&amp;lt;/code&amp;gt; - привилегия на открытие окон.&lt;br /&gt;
* &amp;lt;code&amp;gt;CloseWindow&amp;lt;/code&amp;gt; - привилегия на закрытие окон.&lt;br /&gt;
&lt;br /&gt;
===Окна===&lt;br /&gt;
Окно – узел, осуществляющий отображение видеокадра (мнемонической схемы).&lt;br /&gt;
&lt;br /&gt;
Существуют несколько видов окон:&lt;br /&gt;
&lt;br /&gt;
1. «Форма», предназначенная для вывода простого набора данных без необходимости управления видимостью или внешним видом его элементов. Для вывода информации в такое окно кроме создания окна и добавления к нему виджетов ничего более не требуется.&lt;br /&gt;
[[Файл:AgavaPLC-Меню.png|мини|164x164пкс|Рисунок 24 — Внешний вид меню в среде исполнения]]&lt;br /&gt;
2. «Окно с композицией», предназначенное для вывода большого количества информации и позволяющее организовать группировку элементов по слоям, управлять внешним видом элементов, видимостью слоев и отдельных элементов, а также дающее возможность регулирования работы пользователя с элементами. Для вывода информации в такое окно нужно к окну привязать композицию, содержащую минимум один слой, в который уже добавляются виджеты.&lt;br /&gt;
&lt;br /&gt;
=== Форма ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Наименование свойства&lt;br /&gt;
!Идентификатор&lt;br /&gt;
!Тип&lt;br /&gt;
!Описание&lt;br /&gt;
!Допустимые значения&lt;br /&gt;
!Режим доступа&lt;br /&gt;
|-&lt;br /&gt;
|Модальность&lt;br /&gt;
|Modality&lt;br /&gt;
|enum&lt;br /&gt;
|Режим модальности окна&lt;br /&gt;
|0: Не определен (ошибка)&lt;br /&gt;
1: Немодальное&lt;br /&gt;
&lt;br /&gt;
2: Модальное (Фрейм)&lt;br /&gt;
&lt;br /&gt;
3: Модальное (Система)&lt;br /&gt;
|Чтение/Запись&lt;br /&gt;
|-&lt;br /&gt;
|Тип границы&lt;br /&gt;
|BorderType&lt;br /&gt;
|enum&lt;br /&gt;
|Тип границы окна&lt;br /&gt;
|0: Не определен (ошибка)&lt;br /&gt;
1: Фиксированная&lt;br /&gt;
&lt;br /&gt;
2: Изменяемая&lt;br /&gt;
&lt;br /&gt;
3: Отсутствует&lt;br /&gt;
|Чтение/Запись&lt;br /&gt;
|-&lt;br /&gt;
|Отображать строку заголовка&lt;br /&gt;
|TitleEnabled&lt;br /&gt;
|bool&lt;br /&gt;
|Отображать строку заголовка&lt;br /&gt;
|true/false&lt;br /&gt;
|Чтение/Запись&lt;br /&gt;
|-&lt;br /&gt;
|Отображать кнопку &amp;quot;Закрыть&amp;quot;&lt;br /&gt;
|CloseEnabled&lt;br /&gt;
|bool&lt;br /&gt;
|Отображать кнопку &amp;quot;Закрыть&amp;quot;&lt;br /&gt;
|true/false&lt;br /&gt;
|Чтение/Запись&lt;br /&gt;
|-&lt;br /&gt;
|Цвет фона&lt;br /&gt;
|BackgroundColor&lt;br /&gt;
|NColor&lt;br /&gt;
|Цвет фона окна&lt;br /&gt;
|Цвет в формате RGBA&lt;br /&gt;
|Чтение/Запись&lt;br /&gt;
|-&lt;br /&gt;
|Затемнение&lt;br /&gt;
|NeedDarkenApplication&lt;br /&gt;
|bool&lt;br /&gt;
|Затемнение других окон приложения при открытии этого окна&lt;br /&gt;
|true/false&lt;br /&gt;
|Чтение/Запись&lt;br /&gt;
|-&lt;br /&gt;
|Цвет затемнения&lt;br /&gt;
|ColorDarkenApplication&lt;br /&gt;
|NColor&lt;br /&gt;
|Цвет затемнения&lt;br /&gt;
|Цвет в формате RGBA&lt;br /&gt;
|Чтение/Запись&lt;br /&gt;
|-&lt;br /&gt;
|Интервал обновления&lt;br /&gt;
|UpdateInterval&lt;br /&gt;
|int&lt;br /&gt;
|Интервал обновления виджетов, мс&lt;br /&gt;
|0 - без задержки&lt;br /&gt;
&amp;gt;0 - интервал в мс&lt;br /&gt;
|Чтение/Запись&lt;br /&gt;
|-&lt;br /&gt;
|Действия OnShow&lt;br /&gt;
|ActionsOnShow&lt;br /&gt;
|NodesContainer&lt;br /&gt;
|Действия при показе окна&lt;br /&gt;
|Узлы типа: Action&lt;br /&gt;
|Чтение/Запись&lt;br /&gt;
|-&lt;br /&gt;
|Действия OnClose&lt;br /&gt;
|ActionsOnClose&lt;br /&gt;
|NodesContainer&lt;br /&gt;
|Действия при закрытии окна&lt;br /&gt;
|Узлы типа: Action&lt;br /&gt;
|Чтение/Запись&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== Модальность (Modality) ====&lt;br /&gt;
'''Тип:''' enum.&lt;br /&gt;
&lt;br /&gt;
'''Описание:''' Определяет поведение окна относительно других окон приложения.&lt;br /&gt;
&lt;br /&gt;
'''Значения:'''&lt;br /&gt;
&lt;br /&gt;
* '''Немодальное''' - позволяет взаимодействовать с другими окнами.&lt;br /&gt;
* '''Модальное (Фрейм)''' - блокирует взаимодействие с окнами в том же фрейме.&lt;br /&gt;
* '''Модальное (Система)''' - блокирует все окна приложения.&lt;br /&gt;
&lt;br /&gt;
==== Тип границы (BorderType) ====&lt;br /&gt;
'''Тип:''' enum.&lt;br /&gt;
&lt;br /&gt;
'''Описание:''' Определяет тип и поведение границ окна.&lt;br /&gt;
&lt;br /&gt;
'''Значения:'''&lt;br /&gt;
&lt;br /&gt;
* '''Фиксированная''' - окно нельзя изменять размер.&lt;br /&gt;
* '''Изменяемая''' - пользователь может изменять размер окна.&lt;br /&gt;
* '''Отсутствует''' - окно без видимых границ.&lt;br /&gt;
&lt;br /&gt;
==== Управление заголовком (TitleEnabled, CloseEnabled) ====&lt;br /&gt;
'''Тип:''' bool.&lt;br /&gt;
&lt;br /&gt;
'''Описание:''' Контролируют отображение элементов заголовка окна.&lt;br /&gt;
&lt;br /&gt;
==== Фон и затемнение (BackgroundColor, NeedDarkenApplication, ColorDarkenApplication) ====&lt;br /&gt;
'''Тип:''' NColor, bool, NColor.&lt;br /&gt;
&lt;br /&gt;
'''Описание:''' Управляют визуальным оформлением окна и его влиянием на другие окна.&lt;br /&gt;
&lt;br /&gt;
'''Особенности:'''&lt;br /&gt;
&lt;br /&gt;
* Затемнение применяется только при NeedDarkenApplication = true.&lt;br /&gt;
* Цвет затемнения по умолчанию: черный с прозрачностью 50%.&lt;br /&gt;
&lt;br /&gt;
==== Интервал обновления (UpdateInterval) ====&lt;br /&gt;
'''Тип:''' int.&lt;br /&gt;
&lt;br /&gt;
'''Описание:''' Определяет частоту обновления виджетов в окне.&lt;br /&gt;
&lt;br /&gt;
'''Рекомендации:'''&lt;br /&gt;
&lt;br /&gt;
* 0 - 100 мс для композиций с критичным временем отклика.&lt;br /&gt;
* 100 - 500 мс хорошо подходит для большинства случаев.&lt;br /&gt;
* более 1000 мс - для статических или редко меняющихся данных.&lt;br /&gt;
&lt;br /&gt;
==== Обработчики событий (ActionsOnShow, ActionsOnClose) ====&lt;br /&gt;
'''Тип:''' NodesContainer.&lt;br /&gt;
&lt;br /&gt;
'''Описание:''' Коллекции действий, выполняемых при показе и закрытии окна.&lt;br /&gt;
&lt;br /&gt;
=== Окно с композицией ===&lt;br /&gt;
Данный узел имеет те же свойства, что и форма, а также собственные:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Наименование свойства&lt;br /&gt;
!Идентификатор&lt;br /&gt;
!Тип&lt;br /&gt;
!Описание&lt;br /&gt;
!Допустимые значения&lt;br /&gt;
!Режим доступа&lt;br /&gt;
|-&lt;br /&gt;
|Композиция&lt;br /&gt;
|CompositionId&lt;br /&gt;
|NodeLink&lt;br /&gt;
|Основная композиция окна&lt;br /&gt;
|Узлы типа: CompositionLayered, CompositionTemplated&lt;br /&gt;
|Чтение/Запись&lt;br /&gt;
|-&lt;br /&gt;
|Описание текущей композиции&lt;br /&gt;
|CurrentCompositionDesc&lt;br /&gt;
|string&lt;br /&gt;
|Описание текущей загруженной композиции&lt;br /&gt;
|Автоматически формируется&lt;br /&gt;
|Только чтение&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== Композиция (CompositionId) ====&lt;br /&gt;
'''Тип:''' NodeLink.&lt;br /&gt;
&lt;br /&gt;
'''Описание:''' Ссылка на композицию, отображаемую в окне.&lt;br /&gt;
&lt;br /&gt;
'''Поддерживаемые типы:''' CompositionLayered, CompositionTemplated.&lt;br /&gt;
&lt;br /&gt;
==== Описание текущей композиции (CurrentCompositionDesc) ====&lt;br /&gt;
'''Тип:''' string.&lt;br /&gt;
&lt;br /&gt;
'''Описание:''' Автоматически обновляемое описание загруженной композиции.&lt;br /&gt;
&lt;br /&gt;
'''Особенности:''' Свойство только для чтения, обновляется системой автоматически.[[Файл:AgavaPLC-Настройка меню в среде разработки.png|мини|226x226пкс|Рисунок 25 — Настройка меню в среде разработки]]&lt;br /&gt;
&lt;br /&gt;
===Композиция===&lt;br /&gt;
Композиция – узел, представляющий составленную при разработке проекта мнемоническую схему в виде набора элементов визуализации (виджетов), сгруппированных в один или несколько слоев.&lt;br /&gt;
&lt;br /&gt;
Композиция дает возможность организовать виджеты в слои, видимостью которых можно управлять во время работы проекта.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Наименование свойства&lt;br /&gt;
!Идентификатор&lt;br /&gt;
!Тип&lt;br /&gt;
!Описание&lt;br /&gt;
!Допустимые значения&lt;br /&gt;
!Режим доступа&lt;br /&gt;
|-&lt;br /&gt;
|Размеры&lt;br /&gt;
|Size&lt;br /&gt;
|NSize&lt;br /&gt;
|Размеры композиции&lt;br /&gt;
|Структура {ширина, высота}&lt;br /&gt;
|Чтение/Запись&lt;br /&gt;
|-&lt;br /&gt;
|Кэширование&lt;br /&gt;
|Cacheable&lt;br /&gt;
|bool&lt;br /&gt;
|Кэширование данных композиции для быстрого повторного открытия&lt;br /&gt;
|true/false&lt;br /&gt;
|Чтение/Запись&lt;br /&gt;
|-&lt;br /&gt;
|Источник интервала обновления&lt;br /&gt;
|UpdateIntervalSource&lt;br /&gt;
|enum&lt;br /&gt;
|Определяет источник интервала обновления виджетов&lt;br /&gt;
|0: Окно&lt;br /&gt;
1: Композиция&lt;br /&gt;
|Чтение/Запись&lt;br /&gt;
|-&lt;br /&gt;
|Интервал обновления&lt;br /&gt;
|UpdateInterval&lt;br /&gt;
|int&lt;br /&gt;
|Интервал обновления виджетов в миллисекундах&lt;br /&gt;
|Целое число ≥ 0&lt;br /&gt;
|Чтение/Запись&lt;br /&gt;
|-&lt;br /&gt;
|Действия OnLoad&lt;br /&gt;
|ActionsOnLoad&lt;br /&gt;
|NodesContainer&lt;br /&gt;
|Действия при загрузке композиции&lt;br /&gt;
|Узлы типа: Action&lt;br /&gt;
|Чтение/Запись&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== Размеры (Size) ====&lt;br /&gt;
'''Тип:''' NSize (ширина, высота).&lt;br /&gt;
&lt;br /&gt;
'''Описание:''' Определяет размеры композиции в пикселях. По умолчанию установлены значения 800x600.&lt;br /&gt;
&lt;br /&gt;
==== Кэширование (Cacheable) ====&lt;br /&gt;
'''Тип:''' bool.&lt;br /&gt;
&lt;br /&gt;
'''Описание:''' Включает или отключает кэширование данных композиции. При включенном кэшировании композиция сохраняется в памяти для быстрого повторного открытия.&lt;br /&gt;
&lt;br /&gt;
'''Преимущества кэширования:'''&lt;br /&gt;
&lt;br /&gt;
* Быстрое переключение между композициями.&lt;br /&gt;
* Снижение нагрузки на систему при частом использовании.&lt;br /&gt;
* Сохранение состояния элементов.&lt;br /&gt;
&lt;br /&gt;
'''Рекомендации:''' Включать для часто используемых композиций, отключать для редко используемых или ресурсоемких.&lt;br /&gt;
&lt;br /&gt;
==== Источник интервала обновления (UpdateIntervalSource) ====&lt;br /&gt;
'''Тип:''' enum.&lt;br /&gt;
&lt;br /&gt;
'''Описание:''' Определяет, откуда виджеты композиции получают интервал обновления.&lt;br /&gt;
&lt;br /&gt;
'''Значения:'''&lt;br /&gt;
&lt;br /&gt;
* '''Окно''' - интервал обновления наследуется от родительского окна.&lt;br /&gt;
* '''Композиция''' - используется собственный интервал обновления композиции.&lt;br /&gt;
&lt;br /&gt;
'''Применение:''' Централизованное управление производительностью через окно или индивидуальная настройка для каждой композиции.&lt;br /&gt;
&lt;br /&gt;
==== Интервал обновления (UpdateInterval) ====&lt;br /&gt;
'''Тип:''' int.&lt;br /&gt;
&lt;br /&gt;
'''Описание:''' Задает интервал обновления виджетов в миллисекундах. При значении 0 отрисовка виджетов выполняется без задержки (максимальная частота).&lt;br /&gt;
&lt;br /&gt;
'''Особенности:'''&lt;br /&gt;
&lt;br /&gt;
* 0 - обновление без задержек (может создать высокую нагрузку).&lt;br /&gt;
* &amp;gt; 0 - обновление с заданным интервалом.   Учитывается только при UpdateIntervalSource = &amp;quot;Композиция&amp;quot;&lt;br /&gt;
&lt;br /&gt;
'''Рекомендации:'''&lt;br /&gt;
&lt;br /&gt;
* 0 - 100 мс для композиций с критичным временем отклика.&lt;br /&gt;
* 100 - 500 мс хорошо подходит для большинства случаев.&lt;br /&gt;
* более 1000 мс - для статических или редко меняющихся данных.&lt;br /&gt;
&lt;br /&gt;
==== Обработчик событий ActionsOnLoad ====&lt;br /&gt;
'''Тип:''' NodesContainer.&lt;br /&gt;
&lt;br /&gt;
'''Описание:''' Коллекции действий, выполняемых после загрузки композиции &amp;lt;code&amp;gt;AS 1.6.27+&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
===Слой===&lt;br /&gt;
Слой – набор виджетов, объединенных каким-то общим структурным признаком. В многослойных композициях слой обеспечивает организацию виджетов в z-порядке, управление видимостью и взаимодействием с пользователем. С помошью свойства &amp;quot;Видимость&amp;quot; слоя можно управлять видимостью виджетов, размещенных на слое.&lt;br /&gt;
&lt;br /&gt;
Свойства&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Наименование свойства&lt;br /&gt;
!Идентификатор&lt;br /&gt;
!Тип&lt;br /&gt;
!Описание&lt;br /&gt;
!Допустимые значения&lt;br /&gt;
!Режим доступа&lt;br /&gt;
|-&lt;br /&gt;
|Z-Порядок&lt;br /&gt;
|ZOrder&lt;br /&gt;
|int&lt;br /&gt;
|Порядок слоя в композиции&lt;br /&gt;
|Целое число (чем выше значение, тем выше слой)&lt;br /&gt;
|Чтение/Запись&lt;br /&gt;
|-&lt;br /&gt;
|Прозрачность для действий&lt;br /&gt;
|ActionTransparency&lt;br /&gt;
|enum&lt;br /&gt;
|Определяет поведение слоя при взаимодействии с пользователем&lt;br /&gt;
|0: Не определен (ошибка)&lt;br /&gt;
1: Непрозрачный&lt;br /&gt;
&lt;br /&gt;
2: Прозрачный&lt;br /&gt;
|Чтение/Запись&lt;br /&gt;
|-&lt;br /&gt;
|Видимость&lt;br /&gt;
|Visible&lt;br /&gt;
|bool&lt;br /&gt;
|Видимость слоя и всех его виджетов&lt;br /&gt;
|true/false&lt;br /&gt;
|Чтение/Запись&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== Z-Порядок (ZOrder) ====&lt;br /&gt;
'''Тип:''' int&lt;br /&gt;
&lt;br /&gt;
'''Описание:''' Определяет порядок отображения слоя относительно других слоев в композиции. Слои с большим значением ZOrder отображаются поверх слоев с меньшим значением.&lt;br /&gt;
&lt;br /&gt;
'''Пример использования:'''&lt;br /&gt;
&lt;br /&gt;
* Фоновый слой: ZOrder = 1.&lt;br /&gt;
* Основной контент: ZOrder = 2.&lt;br /&gt;
* Контекстные виджеты: ZOrder = 3.&lt;br /&gt;
&lt;br /&gt;
==== Прозрачность для действий (ActionTransparency) ====&lt;br /&gt;
'''Тип:''' enum&lt;br /&gt;
&lt;br /&gt;
'''Описание:''' Управляет взаимодействием слоя с пользовательскими действиями (клики, наведения и т.д.)&lt;br /&gt;
&lt;br /&gt;
'''Значения:'''&lt;br /&gt;
&lt;br /&gt;
* '''Непрозрачный''' - слой полностью перехватывает пользовательские действия, элементы под ним недоступны, даже если они видимы.&lt;br /&gt;
* '''Прозрачный''' - пользовательские действия проходят сквозь слой к элементам ниже.&lt;br /&gt;
&lt;br /&gt;
Обратите внимание: если на слое размещается изображение с прозрачной областью, то такие виджеты не позволяют пользователю взаимодействовать с видимыми и размещенными под ним виджетами.&lt;br /&gt;
&lt;br /&gt;
==== Видимость (Visible) ====&lt;br /&gt;
'''Тип:''' bool&lt;br /&gt;
&lt;br /&gt;
'''Описание:''' Определяет видимость всего слоя и всех его дочерних виджетов. При значении false слой и все его содержимое становится невидимым.&lt;br /&gt;
&lt;br /&gt;
'''Применение:''' Временное скрытие виджетов или переключение их видимости.&lt;br /&gt;
&lt;br /&gt;
===Виджет===&lt;br /&gt;
Виджет – элемент визуализации, предназначенный для отображения информации в заданном виде.&lt;br /&gt;
&lt;br /&gt;
===Меню===&lt;br /&gt;
Меню – элемент визуализации, сочетающий в себе несколько виджетов «Кнопка». Используется для более удобного управления проектом (см. Рисунок 24).&lt;br /&gt;
&lt;br /&gt;
Для добавления меню, необходимо в среде разработки назначить [[Универсальная среда разработки#.D0.94.D0.B5.D0.B9.D1.81.D1.82.D0.B2.D0.B8.D0.B5 .C2.AB.D0.9E.D1.82.D0.BE.D0.B1.D1.80.D0.B0.D0.B6.D0.B5.D0.BD.D0.B8.D0.B5 .D0.BC.D0.B5.D0.BD.D1.8E.C2.BB|действие «Отображение меню»]] для кнопки (или любого другого виджета). После добавления действия необходимо выделить его и нажать на кнопку настроек на панели вверху окна действий. Открывшееся окно (см. Рисунок 25) содержит дерево со структурой меню, в который можно добавлять элементы двух типов:&lt;br /&gt;
&lt;br /&gt;
*меню – элемент, который позволяет группировать элементы меню, выводя их в виде раскрывающегося списка. На рисунках 24 и 25 этим элементом являются кнопки «Арочник» и «БПО».&lt;br /&gt;
*элемент меню – элемент, который предоставляет функционал, аналогичный [[Универсальная среда разработки#.D0.92.D0.B8.D0.B4.D0.B6.D0.B5.D1.82 .C2.AB.D0.9A.D0.BD.D0.BE.D0.BF.D0.BA.D0.B0.C2.BB|виджету «Кнопка»]]. Для добавления действия, выполняющегося при нажатии на элемент меню в среде исполнения, необходимо нажать на него ПКМ в дереве структуры меню и выбрать &amp;quot;Создать действие&amp;quot;. На рисунках 24 и 25 этим элементом являются кнопки «Котельная», «Котёл №1», «Котёл №2» и «Котёл №3».&lt;br /&gt;
&lt;br /&gt;
=== Создание многомониторных систем визуализации ===&lt;br /&gt;
AgavaSCADA предоставляет возможность реализации систем визуализации в составе проектов, использующих для отображения информации более одного дисплея.&lt;br /&gt;
&lt;br /&gt;
Для вывода информации в окнах на нескольких дисплеях в проект необходимо внести следующие корректировки относительно проекта, использующего только один дисплей:&lt;br /&gt;
&lt;br /&gt;
# Добавить дополнительные фреймы, чтобы их количество в проекте соответствовало количеству дисплеев. Каждому фрейму назначить порядковый номер, начиная с 1. Фреймы связываются с дисплеями по номеру.&lt;br /&gt;
# Добавить дополнительное окно (или окна, если в исходном фрейме их несколько или дополнительных фреймов больше одного).&lt;br /&gt;
# Добавить в дополнительные фреймы созданные на этапе 2 окна, чтобы повторить структуру основоного фрейма.&lt;br /&gt;
&lt;br /&gt;
Базовая настройка на этом закончена. После запуска такого проекта на двух или более дисплеях должны отображаться созданные окна.&lt;br /&gt;
&lt;br /&gt;
Если в проекте используется навигация по окнам, то необходимо в каждом окне, включенном в фрейм, скорректировать действия, размещаемые на кнопках, меню или друигх виджетах таким образом, чтобы действия открывали окна или загружали композиции в нужном окне.&lt;br /&gt;
&lt;br /&gt;
===Виджеты===&lt;br /&gt;
====Виджет «Текстовая метка»====&lt;br /&gt;
[[Файл:AgavaPLC–Примеры оформления виджетов типа &amp;quot;Текстовая метка&amp;quot;.png|мини|Рисунок 26 – Примеры оформления виджетов типа &amp;quot;Текстовая метка&amp;quot;]]&lt;br /&gt;
Виджет «Текстовая метка» – наиболее часто применяемый виджет, с помощью которого можно реализовать разные способы отображения текстовой информации.&lt;br /&gt;
&lt;br /&gt;
Виджет «Текстовая метка» может использоваться для отображения статичного текста, значений параметров (одного или нескольких) и их комбинаций.&lt;br /&gt;
&lt;br /&gt;
При необходимости отображения значений параметров они указываются в свойстве «Источник». Для задания определенного формата отображения используются спецификаторы формата в стиле языка «Си»:&lt;br /&gt;
&lt;br /&gt;
*%f – значение в виде числа с плавающей точкой;&lt;br /&gt;
* %s – строка;&lt;br /&gt;
*%i – целое число со знаком;&lt;br /&gt;
*%u – целое число без знака;&lt;br /&gt;
* %d – целое число со знаком в десятичной системе исчисления.&lt;br /&gt;
&lt;br /&gt;
Для разных типов свойств необходимо использовать строго определенные для них спецификаторы, с другими спецификаторами значения выводиться не будут.&lt;br /&gt;
&lt;br /&gt;
Для отображения знака «%» необходимо указать его дважды: «%%».&lt;br /&gt;
&lt;br /&gt;
===== Отображение нескольких значений =====&lt;br /&gt;
Одна текстовая метка может использоваться для отображения нескольких значений. Для этого все значения, которые нужно отобразить, указываются в свойстве «Источник», а в свойстве «Текст» указываются последовательно несколько спецификаторов формата соответственно порядку перечисления значений в свойстве «Источник».&lt;br /&gt;
&lt;br /&gt;
Пример: текстовая метка, отображающая текущую позицию в очереди:&lt;br /&gt;
&lt;br /&gt;
* Текст: &amp;lt;code&amp;gt;Позиция %i из %i&amp;lt;/code&amp;gt;&lt;br /&gt;
* Источник: два узла из проекта.&lt;br /&gt;
&lt;br /&gt;
=====Модификаторы спецификаторов формата=====&lt;br /&gt;
&lt;br /&gt;
======Модификатор минимальной ширины поля======&lt;br /&gt;
Целое число, расположенное между знаком % и кодом формата, играет роль модификатора минимальной ширины поля. Если указан модификатор минимальной ширины поля, то, чтобы ширина поля вывода была не меньше указанной минимальной величины, вывод при необходимости будет дополнен пробелами. Если же выводятся строки или числа, которые длиннее указанного минимума, то они все равно будут отображаться полностью. По умолчанию для дополнения используются пробелы. А если для этого надо использовать нули, то перед модификатором ширины поля следует поместить 0. Например, %05i означает, что любое число, количество цифр которого меньше пяти, будет дополнено таким количеством нулей, чтобы состоять из пяти цифр.&lt;br /&gt;
&lt;br /&gt;
Примеры&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Значение&lt;br /&gt;
!Спецификатор формата&lt;br /&gt;
!Выводимое значение&lt;br /&gt;
|-&lt;br /&gt;
|10.123&lt;br /&gt;
|%i&lt;br /&gt;
|10&lt;br /&gt;
|-&lt;br /&gt;
|10.123&lt;br /&gt;
|%d&lt;br /&gt;
|10&lt;br /&gt;
|-&lt;br /&gt;
|10.123&lt;br /&gt;
|%05i&lt;br /&gt;
|00010&lt;br /&gt;
|-&lt;br /&gt;
|10.123&lt;br /&gt;
|%f&lt;br /&gt;
|10.123000&lt;br /&gt;
|-&lt;br /&gt;
|10.123&lt;br /&gt;
|%.1f&lt;br /&gt;
| 10.1&lt;br /&gt;
|-&lt;br /&gt;
|10.123&lt;br /&gt;
|%10f&lt;br /&gt;
|&amp;lt;пробел&amp;gt;10.123000&lt;br /&gt;
|-&lt;br /&gt;
|10.123&lt;br /&gt;
|%012f&lt;br /&gt;
|00010.123000&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
======Модификатор точности======&lt;br /&gt;
Модификатор точности следует за модификатором минимальной ширины поля (если таковой имеется). Он состоит из точки и расположенного за ней целого числа. Значение этого модификатора зависит от типа данных, к которым его применяют.&lt;br /&gt;
&lt;br /&gt;
Когда модификатор точности применяется к данным с плавающей точкой, для преобразования которых используются спецификаторы преобразования %f, %e или %E, то он определяет количество выводимых десятичных разрядов. Например, %10.4f означает, что ширина поля вывода будет не менее 10 символов, причем для десятичных разрядов будет отведено четыре позиции.&lt;br /&gt;
&lt;br /&gt;
Если модификатор точности применяется к %g или %G, то он определяет количество значащих цифр.&lt;br /&gt;
&lt;br /&gt;
Примененный к строкам, модификатор точности определяет максимальную длину поля. Например, %5.7s означает, что длина выводимой строки будет составлять минимум пять и максимум семь символов. Если строка окажется длиннее, чем максимальная длина поля, то конечные символы выводиться не будут.&lt;br /&gt;
&lt;br /&gt;
Если модификатор точности применяется к целым типам, то он определяет минимальное количество цифр, которые будут выведены для каждого из чисел. Чтобы получилось требуемое количество цифр, добавляется некоторое количество ведущих нулей.&lt;br /&gt;
&lt;br /&gt;
Примеры:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Значение&lt;br /&gt;
!Спецификатор формата&lt;br /&gt;
!Выводимое значение&lt;br /&gt;
|-&lt;br /&gt;
|10.123&lt;br /&gt;
|%f&lt;br /&gt;
|10.123000&lt;br /&gt;
|-&lt;br /&gt;
|10.123&lt;br /&gt;
|%.1f&lt;br /&gt;
|10.1&lt;br /&gt;
|-&lt;br /&gt;
|10.123&lt;br /&gt;
|%10.4f&lt;br /&gt;
|&amp;lt;пробел&amp;gt;&amp;lt;пробел&amp;gt;&amp;lt;пробел&amp;gt;10.1230&lt;br /&gt;
|-&lt;br /&gt;
|10.123&lt;br /&gt;
|%010.3f&lt;br /&gt;
|000010.123&lt;br /&gt;
|-&lt;br /&gt;
| Это простая проверка&lt;br /&gt;
|%10.15s&lt;br /&gt;
|Это простая про&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
====Виджет «Условная метка» ====&lt;br /&gt;
[[Файл:AgavaPLC–Список сопоставлений виджета &amp;quot;Условная метка&amp;quot;.png|мини|Рисунок 27 – Список сопоставлений виджета &amp;quot;Условная метка&amp;quot;|ссылка=Файл:AgavaPLC–Список_сопоставлений_виджета_%22Условная_метка%22.png]]&lt;br /&gt;
Виджет «Условная метка» позволяет изменять выводимую строку в соответствии с изменениями привязанной к ней переменной.&lt;br /&gt;
&lt;br /&gt;
Задать соответствие текста необходимому условию можно в свойстве «Список сопоставлений».&lt;br /&gt;
&lt;br /&gt;
==== Виджет «Изображение»====&lt;br /&gt;
Виджет «Изображение» предназначен для отображения на окнах статичных изображений форматов png, gif, jpg, bmp или анимированных изображений в формате gif. Отображаемая картинка выбирается в разделе «Оформление» - «Изображение». Она должна находиться в папке проекта.&lt;br /&gt;
&lt;br /&gt;
====Виджет «Условное изображение»====&lt;br /&gt;
[[Файл:AgavaPLC–Список сопоставлений виджета &amp;quot;Условное изображение&amp;quot;.png|мини|Рисунок 28 – Список сопоставлений виджета &amp;quot;Условное изображение&amp;quot;|ссылка=Файл:AgavaPLC–Список_сопоставлений_виджета_%22Условное_изображение%22.png]]&lt;br /&gt;
Виджет «Условное изображение» позволяет изменять отображаемое изображение в соответствии с изменениями привязанной к нему переменной.&lt;br /&gt;
&lt;br /&gt;
Задать соответствие изображения необходимому условию можно в свойстве «Список сопоставлений».&lt;br /&gt;
&lt;br /&gt;
====Виджет «Движущееся изображение»====&lt;br /&gt;
Виджет предназначен для отображения на окнах изображений, перемещающихся в пределах области виджета. В основном используются на экране спящего режима.&lt;br /&gt;
&lt;br /&gt;
Отображаемая картинка выбирается в разделе «Оформление» - «Изображение». Она должна находиться в папке проекта.&lt;br /&gt;
&lt;br /&gt;
====Виджет «Кнопка»====&lt;br /&gt;
Виджет «Кнопка» предназначен для реализации функций управления:&lt;br /&gt;
&lt;br /&gt;
*ввод данных;&lt;br /&gt;
*передача управляющих воздействий;&lt;br /&gt;
* смена режима работы АРМ или иного устройства, исполняющего проект.&lt;br /&gt;
&lt;br /&gt;
Выполнение всех функций виджета обеспечивается с помощью узлов типа «Действие», добавляемых в соответствующее свойство (см. раздел [[#Действия]]).&lt;br /&gt;
&lt;br /&gt;
====Виджет «Гистограмма»====&lt;br /&gt;
[[Файл:AgavaPLC–Виджет &amp;quot;Гистограмма&amp;quot;.png|мини|Рисунок 29 – Виджет &amp;quot;Гистограмма&amp;quot;|ссылка=Файл:AgavaPLC–Виджет_%22Гистограмма%22.png]]&lt;br /&gt;
Виджет предназначен для отображения значений сигналов в виде столбчатой диаграммы.&lt;br /&gt;
&lt;br /&gt;
Виджету необходимо задать источник (регистр/сигнал, с которого он будет получать данные), а также минимальное и максимальное значения.&lt;br /&gt;
&lt;br /&gt;
====Виджет «Исторический график»====&lt;br /&gt;
Виджет «Исторический график» предназначен для отображения графиков параметров на двухкоординатной области изображения с привязкой к осям времени и значений.&lt;br /&gt;
&lt;br /&gt;
Виджет может работать с данными, архивируемыми в БД, и напрямую с сигналами, значения которых вычисляются в ходе работы.  &lt;br /&gt;
&lt;br /&gt;
При работе с архивируемыми данными интервал обновления графика зависит от режима выдачи значения у базы данных: при выборе сохраняемых в БД он будет соответствовать интервалу архивирования, а при сохраненных в БД - интервалу сохранения БД на диск. Независимо от режима выдачи, график не может обновляться меньше чем за 300 мс.&lt;br /&gt;
&lt;br /&gt;
При работе напрямую с сигналами график обновляется при изменении значения сигнала, но также не чаще чем раз в 300 мс.&lt;br /&gt;
[[Файл:AgavaPLC–Экран «Архив» с виджетом «Исторический график».png|мини|Рисунок 30 – Виджет «Исторический график». Области кнопок-пиктограмм. В нижней части отображена легенда]]&lt;br /&gt;
Виджет «Исторический график» состоит из нескольких областей:&lt;br /&gt;
&lt;br /&gt;
*область осей Х, Y;&lt;br /&gt;
*область легенды, содержащей список кривых и их параметры (цвет кривой, наименование кривой, текущее значение, время последнего зарегистрированного значения);&lt;br /&gt;
*область вывода данных.&lt;br /&gt;
&lt;br /&gt;
На виджете имеются несколько областей, содержащих кнопки-пиктограммы управления внешним видом графика (см. Рисунок 28):&lt;br /&gt;
&lt;br /&gt;
#область пиктограмм графика;&lt;br /&gt;
#область пиктограмм оси времени (X);&lt;br /&gt;
#область пиктограмм оси значений (Y);&lt;br /&gt;
#область легенды.&lt;br /&gt;
&lt;br /&gt;
В области пиктограмм графика слева направо расположены следующие кнопки-пиктограммы:&lt;br /&gt;
&lt;br /&gt;
* кнопка переключения режима отображения точек на всех кривых;&lt;br /&gt;
* кнопка переключения видимости легенды;&lt;br /&gt;
*кнопка включения режима визирной линии.&lt;br /&gt;
&lt;br /&gt;
В области пиктограмм оси времени (X) слева направо расположены следующие кнопки-пиктограммы:&lt;br /&gt;
&lt;br /&gt;
*кнопка открытия окна выбора интервала времени для оси Х, текст кнопки отображает текущий выбранный интервал, например: 5М – 5 минут, 6Ч – 6 часов, 30М – 30 минут;&lt;br /&gt;
*кнопка-индикатор включения следящего режима.&lt;br /&gt;
&lt;br /&gt;
В области пиктограмм оси значений (Y) расположена кнопка-пиктограмма «A» – кнопка переключения режима автоматического масштабирования значений.&lt;br /&gt;
&lt;br /&gt;
=====Легенда=====&lt;br /&gt;
[[Файл:AgavaPLC–Легенда с четырьмя выключенными параметрами.png|мини|Рисунок 31 – Легенда с четырьмя выключенными параметрами]]&lt;br /&gt;
Легенда – специальная область в нижней части экрана архива, предназначенная для отображения параметров (наименование, текущее значение и т. д.) выводимых графиков в виде таблицы. Для ознакомления с примерным видом легенды см. Рисунок 31. Информация о каждом сигнале в легенде выводится в несколько колонок:&lt;br /&gt;
&lt;br /&gt;
*«Цвет» – индицирует цвет, которым выводится соответствующая кривая на графике, колонка «Цвет» позволяет нажатием переключать видимость соответствующей кривой на графике (см. Рисунок 29). Также в колонке &amp;quot;Цвет&amp;quot; отображается номер пера, которым выводится кривая параметра на графике;&lt;br /&gt;
* «Имя» («Наименование») – содержит наименование параметра;&lt;br /&gt;
*«Время» – содержит время последнего зарегистрированного значения параметра;&lt;br /&gt;
*«Значение» – содержит последнее зарегистрированное значение параметра.&lt;br /&gt;
&lt;br /&gt;
=====Режимы просмотра графиков=====&lt;br /&gt;
Пользователю доступно два режима просмотра графиков:&lt;br /&gt;
&lt;br /&gt;
*следящий режим;&lt;br /&gt;
*режим просмотра истории.&lt;br /&gt;
&lt;br /&gt;
В следящем режиме на графике всегда отображаются актуальные значения параметров, тренд периодически дочитывает поступившие данные из базы и обновляет графики. &lt;br /&gt;
&lt;br /&gt;
В режиме просмотра истории на графике отображаются исторические значения параметров. Просмотр истории технологического процесса осуществляется с помощью кнопок перемещения по осям и кнопок изменения масштаба.&lt;br /&gt;
&lt;br /&gt;
Режим просмотра истории включается автоматически при прокрутке графика назад по времени.&lt;br /&gt;
&lt;br /&gt;
=====Визирная линия=====&lt;br /&gt;
[[Файл:AgavaPLC–График в режиме просмотра истории с установленной визирной линией.png|мини|Рисунок 32 – График в режиме просмотра истории с установленной визирной линией]]&lt;br /&gt;
Для просмотра значений параметров в нужный момент времени служит визирная линия, отображаемая на графике как вертикальная линия.&lt;br /&gt;
&lt;br /&gt;
При щелчке левой кнопкой мыши (ЛКМ) в области графиков визирная линия будет отображена в выбранном месте графика.&lt;br /&gt;
&lt;br /&gt;
В точке пересечения визирной линии и кривых параметров отображаются значения этих параметров. Также в нижней части области графиков, возле оси времени, визирная линия отображает время.&lt;br /&gt;
&lt;br /&gt;
====Виджет «График кусочно-линейной функции»====&lt;br /&gt;
Виджет предназначен для отображения графика зависимости двух параметров, расположенном на осях X и Y.&lt;br /&gt;
[[Файл:AgavaPLC–Виджет «График кусочно-линейной функции». Области кнопок-пиктограмм..png|мини|Рисунок 33 – Виджет «График кусочно-линейной функции». Области кнопок-пиктограмм.]]&lt;br /&gt;
Виджет состоит из нескольких областей:&lt;br /&gt;
&lt;br /&gt;
*область осей Х, Y;&lt;br /&gt;
*область легенды, содержащей список кривых и их параметры (цвет кривой, наименование кривой, текущее значение, время последнего зарегистрированного значения);&lt;br /&gt;
*область вывода графика.&lt;br /&gt;
&lt;br /&gt;
На области вывода графика виджета имеются несколько областей, содержащих кнопки-пиктограммы управления внешним видом графика (см. Рисунок 33):&lt;br /&gt;
&lt;br /&gt;
#Область пиктограмм графика.&lt;br /&gt;
#Область пиктограмм оси первого параметра (X).&lt;br /&gt;
#Область пиктограмм оси второго параметра (Y).&lt;br /&gt;
&lt;br /&gt;
В области пиктограмм графика расположены следующие кнопки-пиктограммы:&lt;br /&gt;
&lt;br /&gt;
*кнопка переключения режима отображения точек на всех кривых;&lt;br /&gt;
*кнопка переключения видимости легенды;&lt;br /&gt;
*кнопка включения режима визирной линии.&lt;br /&gt;
&lt;br /&gt;
В области пиктограмм оси первого (X) и второго (Y) параметров расположены кнопки-пиктограммы «А» – кнопка переключения режима автоматического масштабирования значений.[[Файл:AgavaPLC–Виджет &amp;quot;Список событий&amp;quot;.png|мини|Рисунок 34 – Виджет &amp;quot;Список событий&amp;quot;|ссылка=Файл:AgavaPLC–Виджет_%22Список_событий%22.png]]&lt;br /&gt;
====Виджет «Список событий»====&lt;br /&gt;
[[Файл:AgavaPLC–Окно выбора интервала.png|мини|Рисунок 35 – Окно выбора интервала]]Виджет предназначен для отображения регистрируемых событий в работе.&lt;br /&gt;
&lt;br /&gt;
В верхней части виджета расположена панель управления (1).&lt;br /&gt;
&lt;br /&gt;
Панель управления содержит органы управления журналом:&lt;br /&gt;
&lt;br /&gt;
*кнопка отображения фильтра событий;&lt;br /&gt;
*кнопка включения следящего режима журнала;&lt;br /&gt;
*кнопка изменения интервала на один день назад;&lt;br /&gt;
*кнопка-индикатор выбора интервала, за который отображаются события;&lt;br /&gt;
*кнопка изменения интервала на один день вперед;&lt;br /&gt;
*кнопка вызова окна со списком активных тревог.&lt;br /&gt;
&lt;br /&gt;
Ниже панели управления, в основном поле экрана, расположена таблица, содержащая зарегистрированные события.&lt;br /&gt;
&lt;br /&gt;
Заголовок таблицы позволяет изменять порядок столбцов и включать сортировку по столбцам. Например, возможно включение сортировки событий сначала по времени, затем по группе. Заголовок таблицы имеет возможность отключения / включения отображения любого столбца.&lt;br /&gt;
&lt;br /&gt;
При большом количестве записей в правой части таблицы появляется полоса прокрутки, позволяющая пролистывать список событий.&lt;br /&gt;
&lt;br /&gt;
Нажатие на кнопку-индикатор выбора интервала вызывает окно выбора интервала (см. Рисунок 35):[[Файл:AgavaPLC–Окно &amp;quot;Фильтр&amp;quot;.png|мини|Рисунок 36 – Окно &amp;quot;Фильтр&amp;quot;|ссылка=Файл:AgavaPLC–Окно_%22Фильтр%22.png]]После выбора нужного интервала для сохранения выбора необходимо нажать кнопку «ОК». После сохранения будут отображены зарегистрированные события за выбранный интервал.&lt;br /&gt;
Нажатие на кнопку отображения окна фильтра вызывает соответствующее окно. Окно фильтра позволяет изменить содержимое основного окна журнала событий путем выбора групп и подгрупп событий, перечисленных в окне фильтра (см. Рисунок 36).&lt;br /&gt;
&lt;br /&gt;
После выбора нужных групп и подгрупп для сохранения выбора необходимо нажать кнопку «ОК». После сохранения будут отображены зарегистрированные события, принадлежащих выбранным группам.&lt;br /&gt;
&lt;br /&gt;
====Виджет «Ввод значения»====&lt;br /&gt;
Виджет «Ввод значения» предназначен для отображения значения привязанного сигнала и его редактирования.&lt;br /&gt;
[[Файл:AgavaPLC–Виджет «Ввод значения» с отображением экранной цифровой клавиатуры.png|мини|Рисунок 37 – Виджет «Ввод значения» с отображением экранной цифровой клавиатуры|212x212пкс]]&lt;br /&gt;
После выбора узла для чтения/записи и соответствующего типа значения необходимо выбрать нужный тип ввода в разделе «Оформление».&lt;br /&gt;
&lt;br /&gt;
Доступны следующие типы ввода:&lt;br /&gt;
&lt;br /&gt;
*кнопки изменения – при нажатии на виджет появляются кнопки увеличения и уменьшения на заданный шаг изменения;&lt;br /&gt;
*кнопка редактирования – при нажатии на виджет появляется кнопка, при клике на которую открывается экранная цифровая клавиатура;&lt;br /&gt;
&lt;br /&gt;
Виджет имеет возможность проверки вводимых значений, при активации которой запись будет осуществляться только тогда, когда записываемое значение будет находиться в диапазоне между заданными минимальным и максимальными значениями.&lt;br /&gt;
&lt;br /&gt;
====Виджет «Выбор значения из списка»====&lt;br /&gt;
[[Файл:AgavaPLC–Виджет «Выбор значения из списка».png|мини|Рисунок 38 – Виджет «Выбор значения из списка»]]&lt;br /&gt;
Виджет «Выбор значения из списка» предназначен для отображения значения привязанного сигнала и его изменения в удобном для пользователя текстовом виде (см. Рисунок 37).&lt;br /&gt;
&lt;br /&gt;
С помощью свойства «Список сопоставлений» задается соответствие между значением сигнала и выводимой в виджете строкой.&lt;br /&gt;
&lt;br /&gt;
При нажатии на кнопку в правой части виджета отображается список всех сопоставлений. При выборе нужного элемента в списке в установленный узел производится запись нового значения.&lt;br /&gt;
&lt;br /&gt;
====Виджет «Флаг»====&lt;br /&gt;
[[Файл:AgavaPLC–Варианты внешнего вида виджета «Флаг».png|мини|Рисунок 39 – Варианты внешнего вида виджета «Флаг»]]&lt;br /&gt;
Виджет «Флаг» предназначен для отображения значения и изменения булевой переменной (true/false). Состояние true отображается в виде галочки (см. Рисунок 38).&lt;br /&gt;
&lt;br /&gt;
При нажатии на виджет значение переменной изменяется на противоположное.&lt;br /&gt;
&lt;br /&gt;
В случае, если флаг необходимо использовать только для отображения информации, поставьте галочку в свойстве «Отключен»&lt;br /&gt;
&lt;br /&gt;
====Виджет «Отчет»====&lt;br /&gt;
[[Файл:AgavaPLC–Виджет «Отчет» в режиме отображения сформированного отчета.png|мини|Рисунок 40 – Виджет «Отчет» в режиме отображения сформированного отчета]]&lt;br /&gt;
Виджет «Отчет» предназначен для формирования отчетов по заранее спроектированному макету.&lt;br /&gt;
&lt;br /&gt;
Подробный порядок создания и редактирования отчетов приведен в разделе [[#Отчеты]].&lt;br /&gt;
[[Файл:AgavaPLC–Окно выбора интервала отчета.png|мини|Рисунок 41 – Окно выбора интервала отчета]]&lt;br /&gt;
В верхней части виджета размещена панель управления, содержащая кнопки вызова команд:&lt;br /&gt;
&lt;br /&gt;
* печать сформированного отчета на установленном в системе принтере;&lt;br /&gt;
*сохранение сформированного отчета в файле формата PDF;&lt;br /&gt;
*переход к предыдущей странице отчета;&lt;br /&gt;
*переход к следующей странице отчета;&lt;br /&gt;
*масштабирование экрана по ширине листа отчета;&lt;br /&gt;
*масштабирование экрана по высоте листа отчета.&lt;br /&gt;
&lt;br /&gt;
При формировании отчета для изменения интервала времени, за который будет формироваться отчет, необходимо на панели управления щелкнуть кнопку выбора интервала (на ней отображается текущий выбранный интервал, например, «Начало суток без смещения – Конец суток без смещения»). Далее появится окно «Интервал», в котором можно выбрать начало и конец интервала (см. Рисунок 41). &lt;br /&gt;
&lt;br /&gt;
В качестве начала и конца интервала можно выбрать как конкретную дату по календарю, так относительную, например, «Начало дня», &amp;quot;Конец недели&amp;quot;. После выбора желаемого интервала необходимо нажать кнопку «ОК».&lt;br /&gt;
&lt;br /&gt;
Выбранный интервал отобразится на панели управления отчетом. Для формирования отчета за выбранный интервал необходимо нажать кнопку «Сформировать отчет». Через некоторое время, после загрузки данных из БД и их обработки, экран обновится и сформированный отчет за выбранный интервал будет отображен.&lt;br /&gt;
&lt;br /&gt;
{{Шаблон:Действия AgavaSCADA/AgavaPLC}}&lt;br /&gt;
&lt;br /&gt;
==Система тревог==&lt;br /&gt;
Система тревог предназначена для оповещения пользователя об обнаруженных нарушениях.&lt;br /&gt;
&lt;br /&gt;
Система содержит два типа узлов:&lt;br /&gt;
&lt;br /&gt;
*Группа событий.&lt;br /&gt;
*Контроллер событий.&lt;br /&gt;
&lt;br /&gt;
===Группа событий===&lt;br /&gt;
Группа событий – узел, предназначенный для взаимодействия с виджетом «Список событий». Группы событий позволяют группировать события по какому-то признаку, например по уровню тревоги (авария, предупреждение, квитирование и т.д.), технологическому участку и т.д.&lt;br /&gt;
&lt;br /&gt;
Для каждой группы можно выбрать свой цвет шрифта и фона, которые будут использоваться для вывода событий, принадлежащих этой группе в виджете &amp;quot;Список событий&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
В свойстве «Описание» группы событий указывается текст, который будет отображаться в фильтре списка событий.&lt;br /&gt;
&lt;br /&gt;
===Монитор событий===&lt;br /&gt;
Монитор событий (ранее - Контроллер событий) – узел, реализующий логику проверки соответствия выбранных сигналов контролируемым условиям. Контроллеры событий выполняют всю работу по проверке значений контролируемых параметров и выполнению соответствующих действий.&lt;br /&gt;
&lt;br /&gt;
Монитор событий проверяет значения заданных узлов на соответствие заданным условиям и при их совпадении выполняет заданные действия.&lt;br /&gt;
&lt;br /&gt;
В качестве действий можно указать не только действие &amp;quot;Создание события&amp;quot;, но и другие (см. раздел [[#Действия]]).&lt;br /&gt;
[[Файл:AgavaPLC-Cистема тревог.png|мини|Cистема тревог]]&lt;br /&gt;
&lt;br /&gt;
===Порядок настройки системы===&lt;br /&gt;
Порядок настройки системы тревог следующий:&lt;br /&gt;
#Добавить в проект систему тревог. Для этого нажать ПКМ по узлу «Станция» в дереве проекта, затем выбрать «Добавить узел» - «Система» - «Система тревог».&lt;br /&gt;
#Добавить узел «События» в систему тревог. Для этого нажать ПКМ по системе тревог в дереве проекта, затем выбрать «Добавить узел» - «Группа» - «События». При необходимости настроить цвет шрифта и фона, которые будут отображаться у события в окне тревог или журнале.&lt;br /&gt;
#Добавить нужные [[Узлы проекта AgavaSCADA/AgavaPLC#.D0.93.D1.80.D1.83.D0.BF.D0.BF.D0.B0 .D1.81.D0.BE.D0.B1.D1.8B.D1.82.D0.B8.D0.B9|группы событий]] в узел «События». Для этого нажать ПКМ по узлу «События» в дереве проекта, затем выбрать «Добавить узел» - «Группа событий».&lt;br /&gt;
#Добавить [[Узлы проекта AgavaSCADA/AgavaPLC#.D0.9A.D0.BE.D0.BD.D1.82.D1.80.D0.BE.D0.BB.D0.BB.D0.B5.D1.80 .D1.81.D0.BE.D0.B1.D1.8B.D1.82.D0.B8.D0.B9|контроллеры событий]] в систему тревог. Для этого нажать ПКМ по системе тревог в дереве проекта, затем выбрать «Добавить узел» - «Контроллер событий».&lt;br /&gt;
#Добавить в свойство «Сигналы» контроллеров событий узлы, состояние которых необходимо контролировать.&lt;br /&gt;
#Задать для этих узлов контролируемые условия в соответствующем свойстве контроллера событий.&lt;br /&gt;
#Настроить [[Узлы проекта AgavaSCADA/AgavaPLC#.D0.94.D0.B5.D0.B9.D1.81.D1.82.D0.B2.D0.B8.D1.8F|действия]], которые будут выполняться при выполнении контролируемого условия. Для вывода аварий, предупреждений или информационных сообщений необходимо добавить действие «Создание события».&lt;br /&gt;
# Настроить действие «Создание события». В его свойстве «Группа событий» указать группу из созданных в пункте 2. Ввести тексты сообщения активации и деактивации (при необходимости), указать уровень события. Теперь, при срабатывании контролируемого условия, будет появляться окно тревог с сообщением активации.&lt;br /&gt;
&lt;br /&gt;
== Система архивирования==&lt;br /&gt;
Система архивирования предназначена для управления процессом сохранения значений параметров в базы данных. Параметры, сохраненные в базу данных, могут использоваться для построения графиков параметров и генерации отчетов.&lt;br /&gt;
&lt;br /&gt;
Архивация параметров производится с помощью архиваторов. Архиваторы SQLite и PostgreSQL могут выполнять [[Узлы проекта AgavaSCADA/AgavaPLC#Прореживание данных|прореживание данных]].&lt;br /&gt;
[[Файл:AgavaPLC-Настройка архиватора.png|мини|505x505пкс|Настройка архиватора]]&lt;br /&gt;
&lt;br /&gt;
===Порядок настройки системы===&lt;br /&gt;
Для сохранения истории изменения значений параметров в БД необходимо выполнить следующие действия: &lt;br /&gt;
&lt;br /&gt;
#Добавить в проект систему архивации. Для этого нажать ПКМ по узлу «Станция» в дереве проекта, затем выбрать «Добавить узел» - «Система» - «Система архивации».&lt;br /&gt;
#Добавить в систему архивации архиватор. Для этого нажать ПКМ по узлу «Система архивации» в дереве проекта, затем выбрать «Добавить узел» - «Архиватор в БД SQLite».&lt;br /&gt;
#Настроить параметры архиватора, такие как: путь до файла БД, интервал архивирования (как часто система архивации будет опрашивать значение параметра), интервал сохранения БД на диск (как часто эти значения будут записываться в постоянную память), разбиение БД (будет ли система архивации создавать новый файл БД каждые сутки), период хранения и режим выдачи значений для построения графика (сохраняемые значения будут обновляться с частотой интервала архивирования, а сохраненные - с частотой интервала сохранения).&lt;br /&gt;
#Добавить параметры в коннекторы база данных. Для этого необходимо открыть свойство архиватора «Коннекторы БД», выбрать «Создать новый» - «Коннектор БД». После этого нужно нажать по добавленному коннектору, открыть его свойство «Сигналы» и добавить параметр, значение которого необходимо сохранять в БД.&lt;br /&gt;
&lt;br /&gt;
=== Архиватор SQLite===&lt;br /&gt;
Архиватор SQLite предназначен для сохранения значений параметров в БД формата SQLite.&lt;br /&gt;
&lt;br /&gt;
Для извлечения и просмотра баз данных формата SQLite с устройств может использоваться программа «[[Архиватор]]».&lt;br /&gt;
&lt;br /&gt;
====Свойства узла &amp;quot;Архиватор SQLite&amp;quot;====&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Наименование свойства&lt;br /&gt;
!Идентификатор&lt;br /&gt;
!Тип&lt;br /&gt;
!Доступ&lt;br /&gt;
!Описание&lt;br /&gt;
|-&lt;br /&gt;
| Путь до файла БД&lt;br /&gt;
|FilePath&lt;br /&gt;
|STRING&lt;br /&gt;
|Чтение / запись&lt;br /&gt;
|Путь до файла БД. Абсолютный или относительный.&lt;br /&gt;
|-&lt;br /&gt;
|Интервал архивирования&lt;br /&gt;
|Interval&lt;br /&gt;
|INT&lt;br /&gt;
|Чтение / запись&lt;br /&gt;
|Интервал архивирования, мс.&lt;br /&gt;
|-&lt;br /&gt;
|Период хранения&lt;br /&gt;
|Retention&lt;br /&gt;
|INT&lt;br /&gt;
|Чтение / запись&lt;br /&gt;
|Период хранения, дней.&lt;br /&gt;
|-&lt;br /&gt;
|Разбиение БД&lt;br /&gt;
|DBSplitting&lt;br /&gt;
|BOOL&lt;br /&gt;
|Чтение / запись&lt;br /&gt;
|Разбиение БД на файлы. При включении база данных будет разделяться на отдельныйе файлы, содержащие данные за одни сутки.&lt;br /&gt;
|-&lt;br /&gt;
|Интервал сохранения БД на диск&lt;br /&gt;
|StoringInterval&lt;br /&gt;
|INT&lt;br /&gt;
|Чтение / запись&lt;br /&gt;
|Интервал сохранения БД на диск, мс.&lt;br /&gt;
|-&lt;br /&gt;
|Режим выдачи значений&lt;br /&gt;
|ValueReturnMode&lt;br /&gt;
|ENUM&lt;br /&gt;
|Чтение / запись&lt;br /&gt;
|Режим выдачи значений. Режим &amp;quot;Сохраняемые в БД&amp;quot; - данные выдаются сразу после получения архиватором, возможно до фактического сохранения в БД. Режим &amp;quot;Сохраненные в БД&amp;quot; - данные выдаются только после фактической записи в БД на диск.&lt;br /&gt;
|-&lt;br /&gt;
|Коннекторы БД&lt;br /&gt;
|Signals&lt;br /&gt;
|NODESARRAY&lt;br /&gt;
|Чтение / запись&lt;br /&gt;
|Список коннекторов, содержащих сигналы для архивирования.&lt;br /&gt;
|-&lt;br /&gt;
|Текущий размер БД&lt;br /&gt;
|DBCurrentSize&lt;br /&gt;
|INT&lt;br /&gt;
|Только чтение&lt;br /&gt;
|Текущий размер БД, Мб.&lt;br /&gt;
|-&lt;br /&gt;
|Максимальный размер БД&lt;br /&gt;
|DBMaxSize&lt;br /&gt;
|INT&lt;br /&gt;
|Только чтение&lt;br /&gt;
|Максимальный размер БД, Мб.&lt;br /&gt;
|-&lt;br /&gt;
|Состояние БД&lt;br /&gt;
|DBStatus&lt;br /&gt;
|INT&lt;br /&gt;
|Только чтение&lt;br /&gt;
|Состояние БД.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== Статусы операций SQLite ====&lt;br /&gt;
В ходе работы SQLite возвращает статус выполнения операций в виде целочисленных значений. Далее приведена расшифровка этих кодов.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Код&lt;br /&gt;
!Краткое описание&lt;br /&gt;
!Подробное объяснение&lt;br /&gt;
|-&lt;br /&gt;
|'''0 (SQLITE_OK)'''&lt;br /&gt;
|Успешно&lt;br /&gt;
|Операция завершилась без ошибок. Всё прошло штатно.&lt;br /&gt;
|-&lt;br /&gt;
|'''1 (SQLITE_ERROR)'''&lt;br /&gt;
|Общая ошибка&lt;br /&gt;
|Непредвиденная ошибка SQL. Может быть вызвана синтаксической ошибкой в запросе или другой общей проблемой. Пользователю стоит проверить SQL-запрос.&lt;br /&gt;
|-&lt;br /&gt;
|'''2 (SQLITE_INTERNAL)'''&lt;br /&gt;
|Внутренняя ошибка&lt;br /&gt;
|Ошибка в логике самой SQLite. Обычно не связана с действиями пользователя.&lt;br /&gt;
|-&lt;br /&gt;
|'''3 (SQLITE_PERM)'''&lt;br /&gt;
|Нет доступа&lt;br /&gt;
|Недостаточно прав для выполнения операции (например, чтение/запись файла базы данных). Нужно проверить права доступа.&lt;br /&gt;
|-&lt;br /&gt;
|'''4 (SQLITE_ABORT)'''&lt;br /&gt;
|Прервано&lt;br /&gt;
|Выполнение операции было прервано обратным вызовом (callback). Обычно не ошибка, а результат логики программы.&lt;br /&gt;
|-&lt;br /&gt;
|'''5 (SQLITE_BUSY)'''&lt;br /&gt;
|База данных занята&lt;br /&gt;
|Файл БД заблокирован другим процессом. Нужно подождать или повторить попытку позже.&lt;br /&gt;
|-&lt;br /&gt;
|'''6 (SQLITE_LOCKED)'''&lt;br /&gt;
|Таблица заблокирована&lt;br /&gt;
|Конкретная таблица заблокирована другим соединением. Нужно освободить блокировку или использовать WAL-режим.&lt;br /&gt;
|-&lt;br /&gt;
|'''7 (SQLITE_NOMEM)'''&lt;br /&gt;
|Недостаточно памяти&lt;br /&gt;
|Не удалось выделить память. Проблема на уровне системы, а не базы.&lt;br /&gt;
|-&lt;br /&gt;
|'''8 (SQLITE_READONLY)'''&lt;br /&gt;
|Только для чтения&lt;br /&gt;
|Попытка записи в базу, открытую в режиме &amp;quot;только чтение&amp;quot;. Нужно открыть её с правом записи.&lt;br /&gt;
|-&lt;br /&gt;
|'''9 (SQLITE_INTERRUPT)'''&lt;br /&gt;
|Прервано пользователем&lt;br /&gt;
|Операция остановлена вызовом &amp;lt;code&amp;gt;sqlite3_interrupt()&amp;lt;/code&amp;gt;. Обычно пользователь сам прерывает длительный запрос.&lt;br /&gt;
|-&lt;br /&gt;
|'''10 (SQLITE_IOERR)'''&lt;br /&gt;
|Ошибка ввода/вывода&lt;br /&gt;
|Ошибка чтения или записи с диска. Может означать сбой диска или проблемы с файловой системой.&lt;br /&gt;
|-&lt;br /&gt;
|'''11 (SQLITE_CORRUPT)'''&lt;br /&gt;
|Повреждённая база&lt;br /&gt;
|Файл базы данных повреждён. Необходимо восстановление из резервной копии.&lt;br /&gt;
|-&lt;br /&gt;
|'''12 (SQLITE_NOTFOUND)'''&lt;br /&gt;
|Неизвестная операция&lt;br /&gt;
|Обнаружен неизвестный код операции при работе с файловым интерфейсом. Обычно внутренняя ошибка.&lt;br /&gt;
|-&lt;br /&gt;
|'''13 (SQLITE_FULL)'''&lt;br /&gt;
|Нет места&lt;br /&gt;
|Диск или файл достиг предельного размера. Нужно освободить место.&lt;br /&gt;
|-&lt;br /&gt;
|'''14 (SQLITE_CANTOPEN)'''&lt;br /&gt;
|Не удалось открыть файл&lt;br /&gt;
|SQLite не смогла открыть базу данных. Возможны проблемы с путём или правами доступа.&lt;br /&gt;
|-&lt;br /&gt;
|'''15 (SQLITE_PROTOCOL)'''&lt;br /&gt;
|Ошибка протокола блокировки&lt;br /&gt;
|Нарушен внутренний протокол синхронизации между процессами. Обычно связано с конкурентным доступом.&lt;br /&gt;
|-&lt;br /&gt;
|'''16 (SQLITE_EMPTY)'''&lt;br /&gt;
|Внутреннее использование&lt;br /&gt;
|Этот код зарезервирован, не используется в обычных операциях.&lt;br /&gt;
|-&lt;br /&gt;
|'''17 (SQLITE_SCHEMA)'''&lt;br /&gt;
|Схема изменилась&lt;br /&gt;
|Во время выполнения запроса изменена структура таблицы или индекса. Запрос нужно выполнить заново.&lt;br /&gt;
|-&lt;br /&gt;
|'''18 (SQLITE_TOOBIG)'''&lt;br /&gt;
|Слишком большие данные&lt;br /&gt;
|Строка или BLOB превышают допустимый размер. Нужно уменьшить данные.&lt;br /&gt;
|-&lt;br /&gt;
|'''19 (SQLITE_CONSTRAINT)'''&lt;br /&gt;
|Нарушено ограничение&lt;br /&gt;
|Нарушено ограничение (например, UNIQUE, FOREIGN KEY, CHECK). Данные не могут быть вставлены/обновлены.&lt;br /&gt;
|-&lt;br /&gt;
|'''20 (SQLITE_MISMATCH)'''&lt;br /&gt;
|Несовпадение типов&lt;br /&gt;
|Тип данных не соответствует ожидаемому (например, текст в числовом поле).&lt;br /&gt;
|-&lt;br /&gt;
|'''21 (SQLITE_MISUSE)'''&lt;br /&gt;
|Некорректное использование API&lt;br /&gt;
|Функции SQLite использованы неправильно. Ошибка в коде программы, а не в данных.&lt;br /&gt;
|-&lt;br /&gt;
|'''22 (SQLITE_NOLFS)'''&lt;br /&gt;
|Нет поддержки файловой системы&lt;br /&gt;
|Операция требует возможности, которой нет в ОС (например, большие файлы на старой FS).&lt;br /&gt;
|-&lt;br /&gt;
|'''23 (SQLITE_AUTH)'''&lt;br /&gt;
|Отказ в авторизации&lt;br /&gt;
|Запрос отклонён по соображениям безопасности (например, триггер или расширение).&lt;br /&gt;
|-&lt;br /&gt;
|'''24 (SQLITE_FORMAT)'''&lt;br /&gt;
|Не используется&lt;br /&gt;
|Код зарезервирован, не применяется.&lt;br /&gt;
|-&lt;br /&gt;
|'''25 (SQLITE_RANGE)'''&lt;br /&gt;
|Параметр вне диапазона&lt;br /&gt;
|Неверный индекс параметра при связывании (&amp;lt;code&amp;gt;sqlite3_bind_*&amp;lt;/code&amp;gt;). Ошибка в логике кода.&lt;br /&gt;
|-&lt;br /&gt;
|'''26 (SQLITE_NOTADB)'''&lt;br /&gt;
|Не база данных&lt;br /&gt;
|Файл, открытый как база, не является файлом SQLite. Возможно, повреждён или подменён.&lt;br /&gt;
|-&lt;br /&gt;
|'''27 (SQLITE_NOTICE)'''&lt;br /&gt;
|Уведомление&lt;br /&gt;
|Сообщение информационного характера из &amp;lt;code&amp;gt;sqlite3_log()&amp;lt;/code&amp;gt;. Не ошибка.&lt;br /&gt;
|-&lt;br /&gt;
|'''28 (SQLITE_WARNING)'''&lt;br /&gt;
|Предупреждение&lt;br /&gt;
|Сообщение о потенциальной проблеме из &amp;lt;code&amp;gt;sqlite3_log()&amp;lt;/code&amp;gt;. Обычно не критично.&lt;br /&gt;
|-&lt;br /&gt;
|'''100 (SQLITE_ROW)'''&lt;br /&gt;
|Есть ещё данные&lt;br /&gt;
|&amp;lt;code&amp;gt;sqlite3_step()&amp;lt;/code&amp;gt; вернул строку данных — нужно вызывать дальше, чтобы получить все строки.&lt;br /&gt;
|-&lt;br /&gt;
|'''101 (SQLITE_DONE)'''&lt;br /&gt;
|Завершено&lt;br /&gt;
|&amp;lt;code&amp;gt;sqlite3_step()&amp;lt;/code&amp;gt; завершил выполнение без ошибок. Все строки обработаны.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Архиватор PostgreSQL ===&lt;br /&gt;
Архиватор PostgreSQL предназначен для сохранения значений параметров в базы данных под управлением сервера PostgreSQL.&lt;br /&gt;
&lt;br /&gt;
=== Прореживание данных ===&lt;br /&gt;
Прореживание данных (data thinning) — это процесс фильтрации и уменьшения количества точек данных, сохраняемых в архиве. Вместо того чтобы записывать каждое полученное значение, система анализирует поток данных и сохраняет только те значения, которые представляют значимое изменение.&lt;br /&gt;
&lt;br /&gt;
'''Назначение прореживания'''&lt;br /&gt;
&lt;br /&gt;
Поток данных от датчиков и устройств зачастую содержит незначительные колебания (шум) или избыточные данные, когда параметр не меняется. Прореживание решает следующие задачи:&lt;br /&gt;
&lt;br /&gt;
* '''Снижение нагрузки на архив''': Меньшее количество записей означает более быструю работу базы данных.&lt;br /&gt;
* '''Ускорение отображения графиков''': Нужно обрабатывать меньше точек для построения трендов.&lt;br /&gt;
* '''Сохранение только значимых изменений''': Система отфильтровывает шум и оставляет только те изменения, которые важны для анализа технологического процесса.&lt;br /&gt;
'''Общий принцип работы'''&lt;br /&gt;
&lt;br /&gt;
Алгоритм прореживания работает по простому принципу:&lt;br /&gt;
&lt;br /&gt;
# SCADA-система получает новое значение от источника данных.&lt;br /&gt;
# Она сравнивает это значение с последним, которое было сохранено в архив.&lt;br /&gt;
# Если изменение превышает заранее настроенный '''допуск''' (tolerance), новое значение сохраняется.&lt;br /&gt;
# Если изменение меньше допуска, значение пропускается.&lt;br /&gt;
&lt;br /&gt;
Кроме того, существует параметр &amp;quot;'''Период обязательной записи&amp;quot;'''. Если с момента последней записи прошло больше времени, чем указано в этом параметре, новое значение будет сохранено '''независимо от его изменения'''. Это гарантирует, что записи в архив будут сохраняться не реже заданной периодичности, даже если сигнал не меняется. Ключевая идея: &amp;quot;'''Сохраняем только то, что заметно изменилось, но не реже, чем задано&amp;quot;.'''&lt;br /&gt;
&lt;br /&gt;
'''Как подобрать допуск?'''&lt;br /&gt;
&lt;br /&gt;
* '''Слишком малый допуск''' приведёт к записи избыточных данных, и архив будет быстро расти.&lt;br /&gt;
* '''Слишком большой допуск''' может привести к потере мелких, но значимых изменений в сигнале.&lt;br /&gt;
&lt;br /&gt;
Выбор правильного допуска — это компромисс между детализацией данных и размером архива.&lt;br /&gt;
==== Типы алгоритмов прореживания ====&lt;br /&gt;
В системе доступны несколько алгоритмов, которые определяют, как именно вычисляется «значимость» изменения. Выбор алгоритма зависит от характера сигнала и требований к точности данных.&lt;br /&gt;
&lt;br /&gt;
# [[Узлы проекта AgavaSCADA/AgavaPLC#Абсолютный допуск|Абсолютный допуск]]&lt;br /&gt;
# [[Узлы проекта AgavaSCADA/AgavaPLC#Процент от последнего значения|Процент от последнего значения]]&lt;br /&gt;
# [[Узлы проекта AgavaSCADA/AgavaPLC#Процент от среднего N последних|Процент от среднего N последних]]&lt;br /&gt;
# [[Узлы проекта AgavaSCADA/AgavaPLC#Процент от среднего по временному окну|Процент от среднего по временному окну]]&lt;br /&gt;
&lt;br /&gt;
'''Обозначения и определения'''&lt;br /&gt;
&lt;br /&gt;
В дальнейшем используются следующие обозначения (для числовых сигналов):&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;math&amp;gt;x_{in}&amp;lt;/math&amp;gt;​ — текущее измерение сигнала, полученное от источника данных к моменту обработки (кандидат на запись).&lt;br /&gt;
* &amp;lt;math&amp;gt;x_{ref}&amp;lt;/math&amp;gt; — последнее сохранённое числовое значение сигнала в архиве на момент обработки (опорное значение).&lt;br /&gt;
* &amp;lt;math&amp;gt;|\Delta| = |x_{in} - x_{ref}|&amp;lt;/math&amp;gt; — абсолютная величина изменения между текущим измерением и последним сохранённым значением.&lt;br /&gt;
* &amp;lt;math&amp;gt;\bar{x}_N&amp;lt;/math&amp;gt;​ — арифметическое среднее последних &amp;lt;math&amp;gt;N&amp;lt;/math&amp;gt; сохранённых числовых значений.&lt;br /&gt;
* &amp;lt;math&amp;gt;\bar{x}_T&amp;lt;/math&amp;gt;​ — среднее всех сохранённых числовых значений, чьи метки времени попадают в временное окно длительности &amp;lt;math&amp;gt;T&amp;lt;/math&amp;gt; миллисекунд.&lt;br /&gt;
* &amp;lt;math&amp;gt;\varepsilon&amp;lt;/math&amp;gt; — машинная точность для чисел двойной точности; используется для формальной проверки «близости к нулю».&lt;br /&gt;
* &amp;lt;math&amp;gt;tolerance&amp;lt;/math&amp;gt; — допуск: абсолютный (в физических единицах) или относительный (в процентах), в зависимости от выбранного алгоритма.&lt;br /&gt;
&lt;br /&gt;
'''Настройки в Свойствах архиватора, общие для всех типов прореживания'''&lt;br /&gt;
&lt;br /&gt;
* '''Включить прореживание''' — включает/выключает применение алгоритма прореживания при записи значений. При выключении все поступающие значения сохраняются без фильтрации.&lt;br /&gt;
* '''Тип допуска''' — выбирает алгоритм сравнения.&lt;br /&gt;
* '''Период обязательной записи (мс)''' — максимальный допустимый промежуток между двумя записями одного сигнала. Если за это время значимого изменения не произошло, ближайшее поступившее значение будет записано принудительно. 0 — отключить принудительную запись.&lt;br /&gt;
&lt;br /&gt;
===== Абсолютный допуск =====&lt;br /&gt;
'''Принцип:'''&lt;br /&gt;
&lt;br /&gt;
Новое значение сохраняется, если модуль изменения больше установленного порога в физических единицах.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math display=&amp;quot;block&amp;quot;&amp;gt;|\Delta| &amp;gt; tolerance&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Когда использовать:'''&lt;br /&gt;
&lt;br /&gt;
* Если диапазон сигнала стабилен и известен заранее.&lt;br /&gt;
* Для параметров вроде температуры, давления, уровня жидкости, где фиксированное изменение имеет одинаковую интерпретацию по всей шкале.&lt;br /&gt;
&lt;br /&gt;
'''Преимущества:'''&lt;br /&gt;
&lt;br /&gt;
* Обеспечивает предсказуемое и детерминированное поведение независимо от текущего масштаба значения.&lt;br /&gt;
* Не требует накопления или хранения дополнительных данных (окон/истории), вычислительно прост.&lt;br /&gt;
* Удобен при наличии нормативно заданных пределов точности в физических единицах.&lt;br /&gt;
&lt;br /&gt;
'''Ограничения:'''&lt;br /&gt;
&lt;br /&gt;
* Не масштабируется на широкий динамический диапазон: один и тот же порог может быть слишком грубым для малых значений и слишком чувствительным для больших.&lt;br /&gt;
* Требует аккуратного подбора порога под единицы измерения и разрешение датчика; при неверной калибровке возможны либо избыточные записи, либо потеря значимых мелких изменений.&lt;br /&gt;
* Не учитывает относительный контекст изменения (например, 1 единица при значении 10 и при значении 10 000 трактуется одинаково).&lt;br /&gt;
&lt;br /&gt;
'''Настройки в Свойствах архиватора:'''&lt;br /&gt;
&lt;br /&gt;
* '''Допуск''' — абсолютный порог в физических единицах сигнала. Определяет значение &amp;lt;math&amp;gt;tolerance&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
===== Процент от последнего значения =====&lt;br /&gt;
'''Принцип:'''&lt;br /&gt;
&lt;br /&gt;
Новое значение сохраняется, если относительное изменение относительно последнего сохранённого превышает заданный процент.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math display=&amp;quot;block&amp;quot;&amp;gt;\frac{|\Delta|}{|x_{ref}|} \times{100} &amp;gt; tolerance&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Когда использовать:'''&lt;br /&gt;
&lt;br /&gt;
* Для сигналов, где важна относительная динамика, а не абсолютные величины.&lt;br /&gt;
* Для показателей с большим динамическим диапазоном, где относительная точность должна быть сопоставима на всех уровнях.&lt;br /&gt;
&lt;br /&gt;
'''Преимущества:'''&lt;br /&gt;
&lt;br /&gt;
* Масштабируемость: одинаково интерпретирует относительные изменения на низких и высоких уровнях сигнала.&lt;br /&gt;
* Не требует хранения окна значений; использует только последнее сохранённое значение, поэтому вычислительно лёгок.&lt;br /&gt;
* Быстро и корректно реагирует на пропорциональные изменения процесса (проценты), поддерживая заданную относительную чувствительность.&lt;br /&gt;
&lt;br /&gt;
'''Ограничения:'''&lt;br /&gt;
&lt;br /&gt;
* В окрестности нуля относительная метрика становится нестабильной (см. [[Узлы проекта AgavaSCADA/AgavaPLC#Примечание к алгоритмам 'Процент от…'|примечание]]).&lt;br /&gt;
* При малых базовых значениях возможна повышенная чувствительность к шуму и микроколебаниям.&lt;br /&gt;
* Не подавляет высокочастотный шум сам по себе: при необходимости сочетать с обязательной записью по времени и корректной настройкой допуска.&lt;br /&gt;
&lt;br /&gt;
'''Настройки в Свойствах архиватора:'''&lt;br /&gt;
&lt;br /&gt;
* '''Допуск''' — относительный порог в процентах. Определяет значение &amp;lt;math&amp;gt;tolerance&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
===== Процент от среднего N последних =====&lt;br /&gt;
'''Принцип:'''&lt;br /&gt;
&lt;br /&gt;
Новое значение сохраняется, если изменение больше заданного процента от среднего по последним N сохранённым значениям.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math display=&amp;quot;block&amp;quot;&amp;gt;\frac{|\Delta|}{|\bar{x}_{N}|} \times{100} &amp;gt; tolerance&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Когда использовать:'''&lt;br /&gt;
&lt;br /&gt;
* Для сигналов с постоянным шумом или пульсациями, когда важно снижать чувствительность к случайным отклонениям.&lt;br /&gt;
* Для процессов с умеренной динамикой, где требуется устойчивость к «зубчатым» колебаниям.&lt;br /&gt;
&lt;br /&gt;
'''Преимущества:'''&lt;br /&gt;
&lt;br /&gt;
* Снижает чувствительность к высокочастотному шуму за счёт опоры на усреднение; сокращает объём записей на стационарных участках.&lt;br /&gt;
* Гибко настраивается параметром &amp;lt;math&amp;gt;N&amp;lt;/math&amp;gt;: увеличение окна повышает устойчивость, уменьшение — повышает чувствительность и снижает задержку реакции.&lt;br /&gt;
&lt;br /&gt;
'''Ограничения:'''&lt;br /&gt;
&lt;br /&gt;
* В окрестности нуля относительная метрика становится нестабильной (см. [[Узлы проекта AgavaSCADA/AgavaPLC#Примечание к алгоритмам 'Процент от…'|примечание]]).&lt;br /&gt;
&lt;br /&gt;
* Инерционность: при резких скачках возможна задержка фиксации изменения, особенно при большом &amp;lt;math&amp;gt;N&amp;lt;/math&amp;gt;.&lt;br /&gt;
* Усреднение может «сглаживать» и не фиксировать кратковременные, но важные пики; не подходит для задач, критичных к коротким экстремумам.&lt;br /&gt;
* Предполагает относительно стабильную частоту выборок; при сильно переменной частоте эффективная «временная» ширина окна становится непредсказуемой.&lt;br /&gt;
&lt;br /&gt;
'''Настройки в Свойствах архиватора:'''&lt;br /&gt;
&lt;br /&gt;
* '''Допуск''' — относительный порог в процентах. Определяет значение &amp;lt;math&amp;gt;tolerance&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
* '''Размер окна среднего (&amp;lt;math&amp;gt;N&amp;lt;/math&amp;gt;)''' — число последних сохранённых значений, по которым считается среднее. Большее &amp;lt;math&amp;gt;N&amp;lt;/math&amp;gt; повышает устойчивость к шуму, но увеличивает инерционность реакции.&lt;br /&gt;
&lt;br /&gt;
===== Процент от среднего по временному окну =====&lt;br /&gt;
'''Принцип:'''&lt;br /&gt;
&lt;br /&gt;
Похож на предыдущий, но среднее считается не по количеству точек, а по всем значениям за заданный интервал времени.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math display=&amp;quot;block&amp;quot;&amp;gt;\frac{|\Delta|}{|\bar{x}_{T}|} \times{100} &amp;gt; tolerance&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Когда использовать:'''&lt;br /&gt;
&lt;br /&gt;
* Для сигналов с непостоянной частотой измерений (событийные, неравномерные потоки).&lt;br /&gt;
* В случаях, когда важно учитывать реальную временную протяжённость усреднения независимо от плотности измерений.&lt;br /&gt;
&lt;br /&gt;
'''Преимущества:'''&lt;br /&gt;
&lt;br /&gt;
* Корректно работает при переменной частоте выборок: окно фиксируется по времени, а не по числу точек.&lt;br /&gt;
* Более реалистично оценивает тренд во времени на участках с неравномерными измерениями.&lt;br /&gt;
* Управляемый компромисс между подавлением шума и чувствительностью за счёт выбора длительности окна.&lt;br /&gt;
&lt;br /&gt;
'''Ограничения:'''&lt;br /&gt;
&lt;br /&gt;
* В окрестности нуля относительная метрика становится нестабильной (см. [[Узлы проекта AgavaSCADA/AgavaPLC#Примечание к алгоритмам 'Процент от…'|примечание]]).&lt;br /&gt;
&lt;br /&gt;
* Более высокая ресурсоёмкость: требуется хранить и периодически «очищать» значения по условию выхода из временного окна; потребление памяти зависит от фактической скорости поступления данных.&lt;br /&gt;
* Инерционность, присущая усреднению: возможна задержка фиксации коротких, но значимых пиковых изменений.&lt;br /&gt;
* Критичен выбор длительности окна: слишком малое окно даёт мало подавления шума, слишком большое — чрезмерную инерцию и риск пропуска кратких событий.&lt;br /&gt;
&lt;br /&gt;
'''Настройки в Свойствах архиватора:'''&lt;br /&gt;
&lt;br /&gt;
* '''Допуск''' — относительный порог в процентах. Определяет значение &amp;lt;math&amp;gt;tolerance&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
* '''Интервал архивирования''' — длительность временного окна &amp;lt;math&amp;gt;T&amp;lt;/math&amp;gt; (мс), в пределах которого вычисляется среднее. При увеличении &amp;lt;math&amp;gt;T&amp;lt;/math&amp;gt; растёт сглаживание и уменьшается чувствительность к кратким всплескам; при уменьшении — наоборот. Значения, чьи метки времени выходят за пределы окна, автоматически исключаются из расчёта.&lt;br /&gt;
&lt;br /&gt;
===== Примечание к алгоритмам 'Процент от…' =====&lt;br /&gt;
При малых опорных значениях система автоматически переходит в абсолютный режим, чтобы избежать деления на величину, близкую к нулю, и связанных с этим скачков чувствительности. Этот механизм применяется ко всем алгоритмам, использующим относительное сравнение: «Процент от последнего», «Процент от среднего N», «Процент от среднего по временному окну» и обеспечивает стабильность критерия при слабых сигналах.&lt;br /&gt;
&lt;br /&gt;
* Условия входа в режим абсолютного допуска:&lt;br /&gt;
** для «Процента от последнего»: &amp;lt;math&amp;gt;|x_{ref}| &amp;lt; \varepsilon&amp;lt;/math&amp;gt;;&lt;br /&gt;
** для «Процента от среднего N»: &amp;lt;math&amp;gt;|\bar{x}_{N}| &amp;lt; \varepsilon&amp;lt;/math&amp;gt;;&lt;br /&gt;
** для «Процента от среднего по времени»: &amp;lt;math&amp;gt;|\bar{x}_{T}| &amp;lt; \varepsilon&amp;lt;/math&amp;gt;.&lt;br /&gt;
* Критерий в режиме абсолютного допуска: значение фиксируется, если &amp;lt;math&amp;gt;|\Delta| &amp;gt; tolerance&amp;lt;/math&amp;gt;.&lt;br /&gt;
* Условие выхода: как только соответствующая базовая величина (&amp;lt;math&amp;gt;|x_{ref}|&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;|\bar{x}_{N}|&amp;lt;/math&amp;gt; или &amp;lt;math&amp;gt;|\bar{x}_{T}|&amp;lt;/math&amp;gt;) становится &amp;lt;math&amp;gt;\geq \varepsilon&amp;lt;/math&amp;gt;, система автоматически возвращается к относительному критерию.&lt;br /&gt;
* Трактовка &amp;lt;math&amp;gt;tolerance&amp;lt;/math&amp;gt;: используется то же значение настройки; в абсолютном режиме оно интерпретируется как порог в физических единицах сигнала.&lt;br /&gt;
&lt;br /&gt;
===== Сравнение алгоритмов прореживания данных =====&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Критерий&lt;br /&gt;
!Абсолютный&lt;br /&gt;
!% от последнего&lt;br /&gt;
!% от среднего N&lt;br /&gt;
!% от среднего по времени&lt;br /&gt;
|-&lt;br /&gt;
|Единицы допуска&lt;br /&gt;
|Физические&lt;br /&gt;
|Проценты&lt;br /&gt;
|Проценты&lt;br /&gt;
|Проценты&lt;br /&gt;
|-&lt;br /&gt;
|Устойчивость к шуму&lt;br /&gt;
|Низкая&lt;br /&gt;
|Средняя&lt;br /&gt;
|Высокая&lt;br /&gt;
|Высокая&lt;br /&gt;
|-&lt;br /&gt;
|Реакция на резкие скачки&lt;br /&gt;
|Быстрая&lt;br /&gt;
|Быстрая&lt;br /&gt;
|Задержка (при большом N)&lt;br /&gt;
|Задержка&lt;br /&gt;
|-&lt;br /&gt;
|Подходит при переменной частоте&lt;br /&gt;
|Да&lt;br /&gt;
|Да&lt;br /&gt;
|Нет&lt;br /&gt;
|Да&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Система журналирования==&lt;br /&gt;
Система ведения журналов событий предназначена для управления регистрацией и хранением событий. В базу данных записываются все системные события и события, генерируемые с помощью [[Узлы проекта AgavaSCADA/AgavaPLC#.D0.A1.D0.B8.D1.81.D1.82.D0.B5.D0.BC.D0.B0 .D1.82.D1.80.D0.B5.D0.B2.D0.BE.D0.B3|системы тревог]], которые соответствуют выбранному уровню сообщений.&lt;br /&gt;
&lt;br /&gt;
Для ведения журналов используются узлы типа &amp;quot;Логгер&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
===Порядок настройки системы===&lt;br /&gt;
Порядок настройки системы журналирования следующий:&lt;br /&gt;
&lt;br /&gt;
#Добавить и [[Узлы проекта AgavaSCADA/AgavaPLC#.D0.9F.D0.BE.D1.80.D1.8F.D0.B4.D0.BE.D0.BA .D0.BD.D0.B0.D1.81.D1.82.D1.80.D0.BE.D0.B9.D0.BA.D0.B8 .D1.81.D0.B8.D1.81.D1.82.D0.B5.D0.BC.D1.8B|настроить систему тревог]] для генерации событий.&lt;br /&gt;
#Добавить в проект систему журналирования. Для этого нажать ПКМ по узлу «Станция» в дереве проекта, затем выбрать «Добавить узел» - «Система» - «Система журналирования».&lt;br /&gt;
#Добавить в систему журналирования логгер. Для этого нажать ПКМ по узлу «Система архивации» в дереве проекта, затем нажать «Добавить узел» и выбрать нужный логгер.&lt;br /&gt;
#Настроить параметры логгера (см. разделы ниже).&lt;br /&gt;
&lt;br /&gt;
=== Логгер SQLite===&lt;br /&gt;
Логгер SQLite предназначен для сохранения событий, возникающих в ходе исполнения прикладной программы в СУБД SQLite.&lt;br /&gt;
&lt;br /&gt;
Логгер позволяет настраивать срок хранения событий, уровень сохраняемых событий и включать режим разбиения базы данных на отдельные файлы, содержащие данные только за одни сутки.&lt;br /&gt;
&lt;br /&gt;
Информацию о событиях в базе данных, которую ведет логгер, можно просмотреть с помощью виджета &amp;quot;Список событий&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
===Логгер файловый ===&lt;br /&gt;
Логгер файловый предназначен для сохранения журналов событий в текстовых файлах на накопителе. Логгер имеет минимальное количество настроек, и обычно используется для сохранения журнала событий в случае необходимости отладки работы прикладной программы без среды разработки.&lt;br /&gt;
&lt;br /&gt;
===Логгер SMS===&lt;br /&gt;
Логгер SMS предназначен для SMS информирования с помощью субмодуля GRPS или внешнего GPRS модема. &lt;br /&gt;
&lt;br /&gt;
Принцип работы логгера следующий:&lt;br /&gt;
&lt;br /&gt;
#Логгер принимает возникающие события, фильтрует их согласно установленного уровня событий и выбранных групп.&lt;br /&gt;
#События, прошедшие фильтрацию, форматируются согласно установленного шаблона.&lt;br /&gt;
#Отформатированные сообщения отправляются через подключенный модем в виде SMS сообщения. Отправка сообщений производится на телефонные номера, записанные в телефонной книге на SIM-карте.&lt;br /&gt;
&lt;br /&gt;
==Система проверки прав пользователей==&lt;br /&gt;
[[Файл:AgavaPLC-Окно привилегий.png|мини|494x494пкс|Окно привилегий]]&lt;br /&gt;
Система реализует механизм контроля доступа к узлам проекта и их функциях на основе ролей. Узлы при выполнении действий проверяют наличие установленных привилегий у авторизованного в данный момент пользователя. &lt;br /&gt;
&lt;br /&gt;
=== Роли и пользователи ===&lt;br /&gt;
Система содержит в себе две подсистемы:&lt;br /&gt;
*Пользователи. Подсистема определяет пользователей, каждому из которых назначается логин/пароль и одна или несколько ролей.&lt;br /&gt;
*Роли. Роли хранят наборы доступных привилегий.&lt;br /&gt;
Отношения между пользователями, ролями и привилегиями можно описать следующим образом:&lt;br /&gt;
&lt;br /&gt;
* Один пользователь может иметь несколько ролей.&lt;br /&gt;
* Одну роль могут иметь несколько пользователей.&lt;br /&gt;
* Одна роль может иметь несколько привилегий.&lt;br /&gt;
* Одна привилегия может принадлежать нескольким ролям.&lt;br /&gt;
&lt;br /&gt;
=== Привилегии ===&lt;br /&gt;
[[Файл:AgavaPLC-Система проверки прав пользователей.png|мини|Система проверки прав пользователей]]&lt;br /&gt;
Для узлов системы доступна установка следующих привилегий:&lt;br /&gt;
&lt;br /&gt;
Все узлы: &lt;br /&gt;
&lt;br /&gt;
*Чтение значения.&lt;br /&gt;
*Запись значения.&lt;br /&gt;
Окна и фреймы:&lt;br /&gt;
*Открытие окна.&lt;br /&gt;
*Закрытие окна.&lt;br /&gt;
&lt;br /&gt;
При установке привилегий на какой-либо узел, все подчиненные узлы получают те же привилегии с флагом &amp;quot;унаследована&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Если привилегия не установлена, то считается что действие, регулируемое привилегией, запрещено.&lt;br /&gt;
&lt;br /&gt;
Значение унаследованных привилегий можно переопределить с помощью явного задания привилегии.&lt;br /&gt;
===Порядок настройки системы===&lt;br /&gt;
Привилегии настраиваются в отдельном окне привилегий, доступном в меню &amp;quot;Вид&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Порядок настройки системы проверки прав в версии AgavaSCADA 1.2 следующий:&lt;br /&gt;
&lt;br /&gt;
#Добавить в проект систему проверки прав пользователей. Для этого нажать ПКМ по узлу «Станция» в дереве проекта, затем выбрать «Добавить узел» - «Система» - «Система проверки прав пользователей».&lt;br /&gt;
#Добавить в систему проверки прав пользователей узел «Роль». Для этого нажать ПКМ по узлу «Система проверки прав пользователей» в дереве проекта, затем выбрать «Добавить узел» - «Роли».&lt;br /&gt;
#Добавить в узел «Роли» необходимые роли. Для этого нажать ПКМ по узлу «Роли» в дереве проекта, затем выбрать «Добавить узел» - «Роль».&lt;br /&gt;
#Для каждой роли настроить привилегии в окне привилегий. Для этого необходимо нажать «Вид» - «Открыть привилегии». В открывшемся окне в выпадающем списке «Пользователь / роль» выбрать нужную роль. Затем, нажимая ПКМ по узлам и выбирая «Добавить привилегию» настроить все необходимые ограничения для данной роли.&lt;br /&gt;
#Добавить в систему проверки прав пользователей узел «Пользователи». Для этого нажать ПКМ по узлу «Система проверки прав пользователей» в дереве проекта, затем выбрать «Добавить узел» - «Пользователи».&lt;br /&gt;
#Добавить в узел «Пользователи» необходимых пользователей. Для этого нажать ПКМ по узлу «Пользователи» в дереве проекта, затем выбрать «Добавить узел» - «Пользователи».&lt;br /&gt;
#Для каждого пользователя указать имя и пароль, которые будут использоваться при авторизации, и выбрать одну или несколько ролей.&lt;br /&gt;
&lt;br /&gt;
== Сигналы, источники и операции ==&lt;br /&gt;
Регистры и другие узлы, добавленные в группу «Сигналы», являются внутренними для проекта и могут менять свои значения только с помощь скриптов или других узлов, с которыми они связаны.&lt;br /&gt;
&lt;br /&gt;
Сигналы содержат в себе несколько подгрупп.&lt;br /&gt;
&lt;br /&gt;
=== Сигнал===&lt;br /&gt;
Сигнал - специальный тип узла, хранящий значение узла типа &amp;quot;источник&amp;quot;. Сигналы могут использоваться для хранения значений нескольких источников, модифицировать их, обладать дополнительными полями и т. д.&lt;br /&gt;
&lt;br /&gt;
Сигналы некоторых типов позволяют модифицировать исходное значение источников. Принцип обработки значения источника или сигнала с помощью операций: &lt;br /&gt;
&lt;br /&gt;
Первичное значение поступает на вход операции, производится вычисление. Если есть еще операции, то вычисленное значение после первой операции передается на вход второй. И так далее по всем операциям. Если операций больше нет, вычисленное значение устанавливается в качестве значения узла. &lt;br /&gt;
&lt;br /&gt;
Все операции выполняются в порядке, в котором они заданы в соответствующих свойствах.&lt;br /&gt;
&lt;br /&gt;
====Сигнал простой====&lt;br /&gt;
Узел типа &amp;quot;Сигнал простой&amp;quot; предназначен для хранения и обработки значения источника, или другого сигнала или операции. Позволяет произвести какие-либо действия с этим значением с помощью добавления нужных операций в свойство «Операции после чтения».&lt;br /&gt;
&lt;br /&gt;
====Постоянная ====&lt;br /&gt;
Узел типа &amp;quot;Постоянная&amp;quot; предназначен для хранения данных выбранного формата и позволяет изменять их в ходе выполнения программы. Связывание с источником не предусмотрено. Изменение осуществляется с помощью специализированных функций или блока установки значения в задаче ПЛК.&lt;br /&gt;
&lt;br /&gt;
====Массив====&lt;br /&gt;
Массив - совокупность каких-либо объектов, указанных в свойстве «Входные значения». Нумерация объектов в массиве начинается с 0. Может использоваться для взаимодействия с демультиплексором.&lt;br /&gt;
&lt;br /&gt;
====Сигнал комплексный====&lt;br /&gt;
Сигнал используется для взаимодействия с виджетом «Цифровой индикатор». Позволяет контролировать входное значение и генерировать события переходу входного значения через уставки.&lt;br /&gt;
&lt;br /&gt;
Содержит в себе свойства для настройки следующих параметров:&lt;br /&gt;
&lt;br /&gt;
*ВАУ – верхняя аварийная уставка;&lt;br /&gt;
*ВПУ - верхняя предаварийная уставка;&lt;br /&gt;
*НПУ - нижняя предаварийная уставка;&lt;br /&gt;
*НАУ – нижняя аварийная уставка;&lt;br /&gt;
*ФНЧ – фильтр низких частот.&lt;br /&gt;
&lt;br /&gt;
===Источник===&lt;br /&gt;
Источник - специальный тип узлов, предназначенных для передачи данных от внешних устройств.&lt;br /&gt;
&lt;br /&gt;
====Регистр Modbus====&lt;br /&gt;
Регистр Modbus используется для приема и передачи данных по протоколам Modbus-RTU, Modbus-TCP. Данный тип узов также может использоваться для организации работы некоторых алгоритмов программы (например для взаимодействия с контроллером событий).&lt;br /&gt;
&lt;br /&gt;
====Источник индексный====&lt;br /&gt;
Узел типа &amp;quot;Источник индексный&amp;quot; используется для обработки данных, полученных по протоколу Upd, а так же в массивах для индексации значений.&lt;br /&gt;
&lt;br /&gt;
===Операция===&lt;br /&gt;
[[Файл:AgavaPLC-Входные значения операций.png|мини|Входные значения операций]]&lt;br /&gt;
Узлы типа &amp;quot;Операция&amp;quot; используются для реализации вычислительных алгоритмов в задаче ПЛК или отдельно, при их размещении в группе &amp;quot;Сигналы&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
В качестве входных значений операций выбираются константные числа, другие узлы группы «Сигналы», регистры или блоки задачи ПЛК.&lt;br /&gt;
&lt;br /&gt;
====Операция «Сложение»====&lt;br /&gt;
Выходным значением является сумма входных значений. В качестве входных значений можно выбирать как узлы, так и конкретные числа формата int или double.&lt;br /&gt;
&lt;br /&gt;
====Операция «Вычитание»====&lt;br /&gt;
Выходным значением является разность первого входного значения и суммы всех последующих значений. В качестве входных значений можно выбирать как узлы, так и конкретные числа формата int или double.&lt;br /&gt;
&lt;br /&gt;
====Операция «Умножение»====&lt;br /&gt;
Выходным значением является произведение значений всех входных значений. В качестве входных значений можно выбирать как узлы, так и конкретные числа формата int или double.&lt;br /&gt;
&lt;br /&gt;
====Операция «Деление»====&lt;br /&gt;
Выходным значением является результат от деления первого входного значения на произведение всех последующих значений. В качестве входных значений можно выбирать как узлы, так и конкретные числа формата int или double.&lt;br /&gt;
&lt;br /&gt;
====Операция «Условие»====&lt;br /&gt;
Узел типа &amp;quot;Операция условие&amp;quot; предназначен для сравнения значений двух узлов. Для условия задаются сравниваемые параметры и выбирается режим сравнения. В качестве входных значений можно выбирать как узлы, так и конкретные числа формата int или double.&lt;br /&gt;
&lt;br /&gt;
====Операция «Пара условий»====&lt;br /&gt;
[[Файл:AgavaPLC-Операция «Пара условий».png|мини|Операция «Пара условий»]]&lt;br /&gt;
Операция содержит в себе два условия. Для каждого условия задаются индивидуальные сравнимаемые параметры и выбирается режим сравнения.&lt;br /&gt;
&lt;br /&gt;
Выходное значение операции зависит от ее режима проверки – при выбранном режиме «Логическое ИЛИ» выходное значение равно логической «1» если одно из условий равно «1», при «Логическом И»- если оба условия равны «1».&lt;br /&gt;
&lt;br /&gt;
====Операция «Логическое ИЛИ»====&lt;br /&gt;
Если одно из входных значений становится равно логической «1» (контакты замкнуты), то выходное значение становится логической «1» (выход включен).&lt;br /&gt;
&lt;br /&gt;
====Операция «Логическое И»====&lt;br /&gt;
Если все входные значения становятся равны логической «1», выходное значение становится логической «1» (выход включен).&lt;br /&gt;
&lt;br /&gt;
====Операция «Логическое НЕ»====&lt;br /&gt;
Если входное значение блока становится равно логическому «0», то выходное значение становится логической «1», и наоборот.&lt;br /&gt;
&lt;br /&gt;
====Операция «Таймер»====&lt;br /&gt;
Таймер предназначен для выполнения каких-либо [[Узлы проекта AgavaSCADA/AgavaPLC#.D0.94.D0.B5.D0.B9.D1.81.D1.82.D0.B2.D0.B8.D1.8F|действий]] через одинаковые промежутки времени (например запись значения в узел). Промежуток между исполнениями действий задается в свойстве «Интервал срабатывания», а сами действия в свойстве «Действия OnTimer». Для работы операции ее необходимо добавить в свойство «Узлы» [[Узлы проекта AgavaSCADA/AgavaPLC#.D0.97.D0.B0.D0.B4.D0.B0.D1.87.D0.B8|задачи]] с периодическим или разовым режимом выполнения.&lt;br /&gt;
&lt;br /&gt;
====Операция «Мультиплексор»====&lt;br /&gt;
Мультплексор осуществляет перевод нескольких булевых переменных в целочисленное значение по формуле: «выход = вход1 + вход2*2^1 + вход3*2^2 + ...». &lt;br /&gt;
&lt;br /&gt;
Например если в качестве входных значений указаны два регистра, то выходное значение мультиплексора будет формироваться следующим образом:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Значение регистра 1&lt;br /&gt;
!Значение регистра 2&lt;br /&gt;
!Выходное значение&lt;br /&gt;
|-&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|-&lt;br /&gt;
|1&lt;br /&gt;
|0&lt;br /&gt;
|1&lt;br /&gt;
|-&lt;br /&gt;
|0&lt;br /&gt;
|1&lt;br /&gt;
|2&lt;br /&gt;
|-&lt;br /&gt;
|1&lt;br /&gt;
|1&lt;br /&gt;
|3&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
====Операция «Демультиплексор»====&lt;br /&gt;
Демультиплексор осуществляет перевод целочисленных значений из массива в несколько булевых переменных, при этом включается выход, номер которого соответствует числу из массива (например первый элемент массива равен 5, на пятом выходе появится значение true). Нумерация выходов начинается с нуля.&lt;br /&gt;
&lt;br /&gt;
====Операция «Генератор случайного числа»====&lt;br /&gt;
Выходным значением является случайное число в диапазоне между указанным минимальным и максимальным значениями. Для работы операции ее необходимо добавить в свойство «Узлы» [[Узлы проекта AgavaSCADA/AgavaPLC#.D0.97.D0.B0.D0.B4.D0.B0.D1.87.D0.B8|задачи]] с периодическим или разовым режимом выполнения.&lt;br /&gt;
&lt;br /&gt;
====Операция «Скрипт С++»====&lt;br /&gt;
Операция «Скрипт С++» предназначена для реализации разнообразных алгоритмов на языке С++. Операция предусматривает реализацию одной или нескольких функций, выполняющих необходимые пользователю действия. &lt;br /&gt;
&lt;br /&gt;
Для выполнения скрипта, можно добавить в свойство «Узлы» [[Узлы проекта AgavaSCADA/AgavaPLC#.D0.97.D0.B0.D0.B4.D0.B0.D1.87.D0.B8|задачи]] с периодическим или разовым режимом выполнения. Другим способом вызова срабатывания скрипта является добавление его в [[Узлы проекта AgavaSCADA/AgavaPLC#.D0.94.D0.B5.D0.B9.D1.81.D1.82.D0.B2.D0.B8.D0.B5 .C2.AB.D0.92.D1.8B.D0.BF.D0.BE.D0.BB.D0.BD.D0.B5.D0.BD.D0.B8.D0.B5 .D1.81.D0.BA.D1.80.D0.B8.D0.BF.D1.82.D0.B0.C2.BB|действие «Выполнение скрипта»]].&lt;br /&gt;
&lt;br /&gt;
Пример скрипта, выполняющего получение значения определенного узла и запись измененного значения в другой узел:&lt;br /&gt;
 float val()&lt;br /&gt;
 {&lt;br /&gt;
     float f = GetNodeValueAsFloat(&amp;quot;/Конфигурация1/stationSimple1/Signals1/Random2&amp;quot;);&lt;br /&gt;
     float f1 = f*100.0;&lt;br /&gt;
     SetNodeValueAsFloat(&amp;quot;/Конфигурация1/stationSimple1/Signals1/Constant3&amp;quot;, f1);&lt;br /&gt;
     return f*10.0;&lt;br /&gt;
 }&lt;br /&gt;
Приведенный выше скрипт возвращает исходное значение, умноженное на 10. Возвращаемое таким образом значение записывается в выход операции для возможности считывания в других операциях, скриптах и т. д.&lt;br /&gt;
&lt;br /&gt;
Скрипты могут возвращать значения следующих типов:&lt;br /&gt;
&lt;br /&gt;
*void;&lt;br /&gt;
*float;&lt;br /&gt;
*double;&lt;br /&gt;
*int.&lt;br /&gt;
&lt;br /&gt;
Подробное описание реализации языка С++ в AgavaSCADA/AgavaPLC приведено на странице &amp;quot;[[Описание языка С++ в AgavaPLC]]&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
===Объект===&lt;br /&gt;
Узлы типа &amp;quot;Объект&amp;quot; предназначены для взаимодействия с аппаратными компонентами контроллера. Для всех объектов, являющихся субмодулями, необходимо указать слот, в котором они установлены. Доступ к значениям входов/выходов субмодуля осуществляется через его вложенные узлы.&lt;br /&gt;
&lt;br /&gt;
'''ПЛК процессорный модуль''' &lt;br /&gt;
&lt;br /&gt;
Предоставляет возможность регулирования подсветки экрана; включения и отключения индикаторов работы, аварии и программы.&lt;br /&gt;
&lt;br /&gt;
'''ПЛК субмодуль DI'''&lt;br /&gt;
&lt;br /&gt;
Позволяет получать доступ к значениям входов субмодуля DI.&lt;br /&gt;
&lt;br /&gt;
'''ПЛК субмодуль R'''&lt;br /&gt;
&lt;br /&gt;
Позволяет управлять значениями выходов субмодуля R.&lt;br /&gt;
&lt;br /&gt;
'''ПЛК субмодуль SIM'''&lt;br /&gt;
&lt;br /&gt;
Позволяет управлять значениями выходов субмодуля SIM.&lt;br /&gt;
&lt;br /&gt;
'''ПЛК субмодуль DO6'''&lt;br /&gt;
&lt;br /&gt;
Позволяет управлять значениями выходов субмодуля DO6.&lt;br /&gt;
&lt;br /&gt;
'''ПЛК субмодуль AI'''&lt;br /&gt;
&lt;br /&gt;
Позволяет получать доступ к значениям входов субмодуля AI и задавать их тип.&lt;br /&gt;
&lt;br /&gt;
'''ПЛК субмодуль AIO'''&lt;br /&gt;
&lt;br /&gt;
Позволяет получать доступ к значениям входов субмодуля AIO, управлять значениями выходов и задавать тип входов и выходов.&lt;br /&gt;
&lt;br /&gt;
'''ПЛК субмодуль TMP'''&lt;br /&gt;
&lt;br /&gt;
Позволяет получать доступ к значениям входов субмодуля TMP и задавать их тип.&lt;br /&gt;
&lt;br /&gt;
==Задачи==&lt;br /&gt;
Группа «Задачи» предназначена для группировки узлов типа «Задача», которые используются для циклического или разового выполнения созданных пользователем алгоритмов.&lt;br /&gt;
&lt;br /&gt;
===Задача ПЛК===&lt;br /&gt;
Данный узел предоставляет возможности для связывания между собой других узлов (таких как сигналы, субмодули ПЛК, постоянные и т. д.) в удобной графической форме (см. Рисунок 64). Для перехода к редактору необходимо щелкнуть правой кнопкой мыши на задачу ПЛК и выбрать в открывшемся контекстном меню команду «Открыть графическое представление» или дважды щелкнуть левой кнопкой мыши на задаче ПЛК в дереве проекта.&lt;br /&gt;
&lt;br /&gt;
Рисунок 64 – Окно графического редактирования задачи «ПЛК-60»&lt;br /&gt;
&lt;br /&gt;
Панель инструментов задачи ПЛК, расположенная в верхней части окна, содержит следующие элементы (см. Рисунок 16):&lt;br /&gt;
&lt;br /&gt;
*Выпадающий список выбора режима подписи портов.&lt;br /&gt;
*Выпадающий список выбора режима подписи блоков.&lt;br /&gt;
*Кнопка запуска режима симулятора.&lt;br /&gt;
*Кнопка запуска онлайн отладки.&lt;br /&gt;
*Кнопка печати задачи.&lt;br /&gt;
*Инструменты управления симуляцией.&lt;br /&gt;
&lt;br /&gt;
Добавлять узлы в задачу можно перетаскиванием мышью из окна функциональных блоков или из окна дерева проекта. Для связывания узлов между собой необходимо, зажав левую кнопку мыши на выходе одного узла, протянуть линию ко входу другого и затем отпустить левую кнопку мыши для соединения блоков. &lt;br /&gt;
&lt;br /&gt;
Созданную связь можно удалить, выделив ее левой кнопкой мыши и нажав клавишу &amp;quot;Del&amp;quot;. Связь можно &amp;quot;разорвать&amp;quot;, то есть добавить разрыв, нажав по ней правой кнопкой мыши и выбрав в контекстном меню команду «Добавить разрыв». &lt;br /&gt;
&lt;br /&gt;
Для выделения нескольких блоков рамкой зажмите клавишу &amp;quot;Shift&amp;quot; и выделяйте блоки мышью с нажатой левой кнопкой.&lt;br /&gt;
&lt;br /&gt;
Задача ПЛК предоставляет возможности для проведения тестирования и отладки проекта, описанные в разделе [[#Проверка и отладка проекта]].&lt;br /&gt;
&lt;br /&gt;
====Блоки задачи ПЛК====&lt;br /&gt;
Помимо операций, описанных в разделе [[#Операция]], для реализации алгоритмов в задачу ПЛК можно добавлять блоки, описанные ниже.&lt;br /&gt;
&lt;br /&gt;
'''Функциональный блок'''&lt;br /&gt;
&lt;br /&gt;
Используется для выделения каких-либо действий в отдельный блок, для упрощения понимания работы алгоритма программы. Содержит входы, выходы и блоки, обеспечивающие работу внутренней логики. Позволяет проводить изолированную отладку, при которой значения на входах функционального блока вручную задаются пользователем. Блок, работающий в данном режиме выделяется черной рамкой. Для включения изолированной отладки необходимо открыть блок и нажать кнопку «Изолированная отладка» на панели управления задачей.&lt;br /&gt;
&lt;br /&gt;
'''Блок установки значения'''&lt;br /&gt;
&lt;br /&gt;
Блок осуществляет запись значения, поданного на вход in0, в узел, указанный в свойстве «Узел для чтения/записи»&lt;br /&gt;
&lt;br /&gt;
'''Блок задержки'''&lt;br /&gt;
&lt;br /&gt;
Блок задержки используется для создания задержки передачи значения с входа блока на выход на один цикл обработки задачи.&lt;br /&gt;
&lt;br /&gt;
'''Блок «Битовое OR»'''&lt;br /&gt;
&lt;br /&gt;
Для вычисления значения будет произведена операция &amp;quot;ИЛИ&amp;quot; над каждым битом значения в отдельности. Например: 1010 OR 0110 = 1110&lt;br /&gt;
&lt;br /&gt;
'''Блок «Логическое И»'''&lt;br /&gt;
&lt;br /&gt;
Если все входные значения становятся равны логической «1», выходное значение становится логической «1» (выход включен).&lt;br /&gt;
&lt;br /&gt;
'''Блок «Битовое AND»'''&lt;br /&gt;
&lt;br /&gt;
Для вычисления значения будет произведена операция &amp;quot;И&amp;quot; над каждым битом значения в отдельности. Если все биты, стоящие на одинаковых позициях в двоичных представлениях значений, поступающих на входы блока, равны логической «1», то на выходе элемента в этой позиции появляется логическая «1» (выход включен). Например: 1010 AND 0110 = 0010&lt;br /&gt;
&lt;br /&gt;
'''Блок «Логическое НЕ»'''&lt;br /&gt;
&lt;br /&gt;
Если входное значение блока становится равно логическому «0», то выходное значение становится логической «1», и наоборот.&lt;br /&gt;
&lt;br /&gt;
'''Блок «Битовое XOR»'''&lt;br /&gt;
&lt;br /&gt;
Если только на один из входов блока функции поступает логическая «1», то на выходе элемента появляется логическая «1». Если на входы блока функции поступают целочисленные значения, то операция будет произведена над каждым битом значения в отдельности. Например: 1010 XOR 0110 = 1100&lt;br /&gt;
&lt;br /&gt;
'''Блок «Битовое SHR»'''&lt;br /&gt;
&lt;br /&gt;
Побитовый логический сдвиг вправо используется для выполнения операции побитового логического сдвига операнда X вправо на N бит с дополнением нулями слева.&lt;br /&gt;
&lt;br /&gt;
'''Блок «Битовое SHL»'''&lt;br /&gt;
&lt;br /&gt;
Побитовый логический сдвиг влево используется для выполнения операции побитового логического сдвига операнда X влево на N бит с дополнением нулями справа.&lt;br /&gt;
&lt;br /&gt;
'''Блок «Таймер»'''&lt;br /&gt;
&lt;br /&gt;
Таймер предназначен для выполнения каких-либо действий (см. раздел 4.6) через одинаковые промежутки времени (например запись значения в узел).&lt;br /&gt;
&lt;br /&gt;
'''Блок «Мультиплексор»'''&lt;br /&gt;
&lt;br /&gt;
Мультплексор осуществляет перевод нескольких булевых переменных в целочисленное значение по формуле: «выход = вход1 + вход2*2^1 + вход3*2^2 + ...»&lt;br /&gt;
&lt;br /&gt;
'''Блок «Демультиплексор»'''&lt;br /&gt;
&lt;br /&gt;
Демультиплексор осуществляет перевод целочисленных значений из массива в несколько булевых переменных, при этом включается выход, номер которого соответствует числу из массива (например первый элемент массива равен 5, на пятом выходе появится значение true). Нумерация выходов начинается с нуля.&lt;br /&gt;
&lt;br /&gt;
'''Блок «Генератор случайного числа»'''&lt;br /&gt;
&lt;br /&gt;
Выходным значением является случайное число в диапазоне между указанным минимальным и максимальным значениями.&lt;br /&gt;
&lt;br /&gt;
'''Блок «Скрипт С++»'''&lt;br /&gt;
&lt;br /&gt;
Операция «Скрипт С++» предназначена для реализации разнообразных алгоритмов на языке С++. Операция предусматривает реализацию одной или нескольких функций, выполняющих необходимые пользователю действия. Для выполнения скрипта, необходимо добавить его в качестве узла для задачи или задачи ПЛК.&lt;br /&gt;
&lt;br /&gt;
Пример скрипта, выполняющего получение значения определенного узла и запись измененного значения в другой узел:&lt;br /&gt;
 float val()&lt;br /&gt;
 {&lt;br /&gt;
     float f = GetNodeValueAsFloat(&amp;quot;/Конфигурация1/stationSimple1/Signals1/Random2&amp;quot;);&lt;br /&gt;
     float f1 = f*100.0;&lt;br /&gt;
     SetNodeValueAsFloat(&amp;quot;/Конфигурация1/stationSimple1/Signals1/Constant3&amp;quot;, f1);&lt;br /&gt;
     return f*10.0;&lt;br /&gt;
 }&lt;br /&gt;
Приведенный выше скрипт возвращает исходное значение, умноженное на 10. Возвращаемое таким образом значение записывается в выход операции для возможности считывания в других операциях, скриптах и т. д.&lt;br /&gt;
&lt;br /&gt;
Скрипты могут возвращать значения следующих типов:&lt;br /&gt;
&lt;br /&gt;
* void;&lt;br /&gt;
*float;&lt;br /&gt;
*double;&lt;br /&gt;
*int.&lt;br /&gt;
&lt;br /&gt;
Подробное описание реализации языка С++ в AgavaSCADA/AgavaPLC приведено на странице &amp;quot;[[Описание языка С++ в AgavaPLC]]&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
'''Блок «Таймер с задержкой»'''&lt;br /&gt;
&lt;br /&gt;
Таймер с задержкой используется для операции задержки передачи и/или отключения сигнала. На выходе таймера появится сигнал логической «1» с задержкой относительно фронта входного сигнала продолжительностью равной интервалу включения и выключится по спаду входного сигнала с задержкой продолжительностью равной интервалу выключения. В том случае, если необходимо использовать блок только как таймер с задержкой включения (отключения) интервал выключения (включения) устанавливается равным 0.&lt;br /&gt;
&lt;br /&gt;
'''Блок «Генератор прямоугольных импульсов»'''&lt;br /&gt;
&lt;br /&gt;
Генератор прямоугольных импульсов используется для формирования прямоугольных импульсов пульсации. На выходе генератора формируются импульсы с заданными параметрами длительности включенного и отключенного импульса на время действия управляющего сигнала на входе (сигнал логической «1»).&lt;br /&gt;
&lt;br /&gt;
'''Блок «Триггер RS»'''&lt;br /&gt;
&lt;br /&gt;
RS-триггер с приоритетом выключения используется для переключения с фиксацией состояния во время поступления коротких импульсов на соответствующий вход. На выходе появится логическая «1» по фронту сигнала на входе Set, которая будет сброшена в «0», при поступлении импульса на вход Reset.&lt;br /&gt;
&lt;br /&gt;
'''Блок «Триггер SR»'''&lt;br /&gt;
&lt;br /&gt;
SR-триггер с приоритетом включения используется для переключения с фиксацией состояния в случае поступления коротких импульсов на соответствующий вход. На выходе появится логическая «1» по фронту сигнала на входе Set, которая будет сброшена в «0», при поступлении импульса на вход Reset.&lt;br /&gt;
&lt;br /&gt;
'''Блок «Детектор переднего фронта импульса»'''&lt;br /&gt;
&lt;br /&gt;
Детектор переднего фронта импульса используется в случае необходимости иметь реакцию на изменение состояния дискретного входного сигнала. На выходе генерируется единичный импульс при изменении состояния входа из «0» в «1».&lt;br /&gt;
&lt;br /&gt;
'''Блок «Детектор заднего фронта импульса»'''&lt;br /&gt;
&lt;br /&gt;
Детектор заднего фронта импульса используется в случае необходимости иметь реакцию на изменение состояния дискретного входного сигнала. На выходе генерируется единичный импульс при изменении состояния входа из «1» в «0».&lt;br /&gt;
&lt;br /&gt;
'''Блок «D-триггер»'''&lt;br /&gt;
&lt;br /&gt;
D-триггер используется для формирования импульса включения выхода на интервал времени импульса на входе D, выходной интервал будет синхронизирован с тактовой частотой на входе С. На выходе Q триггера появится сигнал логической «1» по фронту тактовых импульсов на входе С при наличии сигнала логической «1» на входе D. Возврат выхода в сигнал логического «0» произойдет по фронту тактовых импульсов на входе С при наличии сигнала логического «0» на входе D. Вход Set принудительно устанавливает выход в состояние логической «1». Вход Reset является приоритетным и устанавливает выход в состояние логического «0».&lt;br /&gt;
&lt;br /&gt;
'''Блок «Селектор»'''&lt;br /&gt;
&lt;br /&gt;
Если на вход Value подается логическая «1», то результатом выполнения операции блока на выходе является входной сигнал ValueT. Если же Value равен логической «0», то результатом выполнения операции блока на выходе является входной сигнал ValueF.&lt;br /&gt;
&lt;br /&gt;
'''Блок «Больше чем»'''&lt;br /&gt;
&lt;br /&gt;
На выход подается логическая «1», если значение in0 больше чем значение in1.&lt;br /&gt;
&lt;br /&gt;
'''Блок «Равенство»'''&lt;br /&gt;
&lt;br /&gt;
На выход подается логическая «1», если значение in0 равно значению in1.&lt;br /&gt;
&lt;br /&gt;
'''Блок «Абсолютное значение числа»'''&lt;br /&gt;
&lt;br /&gt;
Результатом операции функции на выходе является модуль подаваемого на вход значения. Если число на входе положительное, то на выход подается само число, если отрицательное – положительное число, получаемое от перемены его знака с «-» на «+».&lt;br /&gt;
&lt;br /&gt;
'''Блок «Возведение в степень»'''&lt;br /&gt;
&lt;br /&gt;
Результатом операции функции на выходе является значение, равное значению in0, возведенному в степень значения N.&lt;br /&gt;
&lt;br /&gt;
'''Блок «PID-регулятор»'''&lt;br /&gt;
&lt;br /&gt;
Регулятор PID применяется для поддержания заданного значения параметра. На вход Pv подается текущее значение регулируемой величины, на Sp – ее заданное значение. С помощью изменения коэффициентов ПИД регулятора kP, kI и kD достигается оптимальный режим работы. Min задает минимальное значение на выходе, Max – максимальное. time - период регулятора (в мс.).&lt;br /&gt;
&lt;br /&gt;
'''Блок «PWM-регулятор»'''&lt;br /&gt;
&lt;br /&gt;
Применяется для преобразования аналогового сигнала в дискретный с помощью ШИМ. На вход in подается текущее значение регулируемой величины, Min задает минимальное значение на входе, Max – максимальное. time - период регулятора (в мс.)&lt;br /&gt;
&lt;br /&gt;
==Устройства==&lt;br /&gt;
Группа «Устройства» предназначена для группировки узлов типа &amp;quot;Устройство&amp;quot;, выполняющие разнообразные задачи, например работа с внешними накопителями и ПЗУ. &lt;br /&gt;
&lt;br /&gt;
Retain-накопитель дает возможность хранить значения регистров, постоянных и сигналов в постоянной памяти контроллера, что позволяет им сохранять свои значения после отключения питания.&lt;br /&gt;
&lt;br /&gt;
Для сохранения переменных необходимо перечислить их в свойстве «Узлы» и указать путь сохранения на выбранном накопителе.&lt;br /&gt;
&lt;br /&gt;
== Отчеты==&lt;br /&gt;
{{Внимание|Тип=Восклицание желтый.png|Текст=Данный узел доступен только при  исполнении проекта на настольном компьютере. На панелях оператора и контроллерах МПР этот узел не доступен.}}&lt;br /&gt;
Отчет – технологический документ, содержащий информацию о ходе производственного процесса, обработанную по заложенным в отчет алгоритмам. Отчеты формируются на основе макетов (статической части отчетов) путем добавления в них свойств и значений заданных параметров технологического процесса, которые формируются (выбираются из базы данных технологических параметров и проходят соответствующую обработку) по алгоритмам, размещенным в этих шаблонах.&lt;br /&gt;
&lt;br /&gt;
Данные для отчета предоставляет выборка, осуществляющая получение данных и их обработку из базы данных.&lt;br /&gt;
&lt;br /&gt;
===Создание нового отчета===&lt;br /&gt;
Создание любого отчета производится в два этапа.&lt;br /&gt;
&lt;br /&gt;
#Создание необходимых узлов в конфигурации: сам отчет и необходимое количество выборок.&lt;br /&gt;
#Составление макета отчета.&lt;br /&gt;
&lt;br /&gt;
Создание узла типа «Отчет» в конфигурации и выборок для него производится аналогично созданию узлов других типов. К станции добавляется узел типа «Отчеты» с помощью команды контекстного меню «Добавить узел», далее к узлу типа «Отчеты» добавляется отчет и к отчету добавляется необходимое количество выборок.&lt;br /&gt;
&lt;br /&gt;
Выборка – специальный узел, предназначенный для выборки данных из архива и их обработки для последующего отображения в отчете.&lt;br /&gt;
&lt;br /&gt;
Перед переходом к редактированию макета желательно проделать следующие операции:&lt;br /&gt;
&lt;br /&gt;
*в свойстве отчета «Путь к файлу отчета» установить имя файла, в котором будет храниться макет отчета;&lt;br /&gt;
* в свойстве «Источники» выборки (выборок) отчета установить перечень архивных сигналов (коннекторов), которые будут выводиться в отчете.&lt;br /&gt;
&lt;br /&gt;
===Редактирование макета отчета===&lt;br /&gt;
[[Файл:AgavaPLC–Редактор макета отчета.png|мини|Рисунок 42 – Редактор макета отчета]]&lt;br /&gt;
Для редактирования макета отчета необходимо переключиться из редактора конфигурации в редактор макета отчета с помощью команды «Открыть редактор макета отчета», доступной из контекстного меню дерева конфигурации, отображаемого при щелчке правой кнопкой мыши на узле типа «Отчет».&lt;br /&gt;
&lt;br /&gt;
В окне редактора расположены:&lt;br /&gt;
&lt;br /&gt;
*панели инструментов;&lt;br /&gt;
* панель объектов отчета;&lt;br /&gt;
*окно «Инспектор объектов»;&lt;br /&gt;
*окно «Инспектор данных»;&lt;br /&gt;
*окно «Инспектор скриптов»;&lt;br /&gt;
*область построения макета отчета;&lt;br /&gt;
*окно «Структура отчета».&lt;br /&gt;
&lt;br /&gt;
Редактор макета позволяет вызывать команды сочетаниями клавиш:&lt;br /&gt;
&lt;br /&gt;
*Ctrl + N – новый макет;&lt;br /&gt;
*Ctrl + O – загрузить макет;&lt;br /&gt;
*Ctrl + S – сохранить макет;&lt;br /&gt;
*Ctrl + Shift + S – сохранить макет под новым именем;&lt;br /&gt;
*Ctrl + P – предварительный просмотр;&lt;br /&gt;
*Ctrl + Z – отмена изменений;&lt;br /&gt;
*Ctrl + Shift + Z – возврат отмененных изменений;&lt;br /&gt;
* Ctrl + C – копировать объект;&lt;br /&gt;
*Ctrl + X – вырезать объект;&lt;br /&gt;
*Ctrl + V – вставить объект;&lt;br /&gt;
*Ctrl + Стрелки – переместить выделенный объект;&lt;br /&gt;
*Shift + Стрелки – изменить размер выделенных объектов;&lt;br /&gt;
*Del – удалить выделенные объекты;&lt;br /&gt;
*Shift + левая кнопка мыши – создать область выделения.&lt;br /&gt;
&lt;br /&gt;
====Окно «Инспектор объектов»====&lt;br /&gt;
Окно «Инспектор объектов» содержит список свойств выделенного объекта и предназначено для их редактирования.&lt;br /&gt;
&lt;br /&gt;
====Окно «Инспектор данных»====&lt;br /&gt;
Окно «Инспектор данных» содержит список доступных для использования источников данных (выборок) и предназначено для заполнения блока «Данные» элементами соответствующего типа.&lt;br /&gt;
&lt;br /&gt;
====Окно «Инспектор скриптов»====&lt;br /&gt;
Окно «Инспектор скриптов» содержит список доступных для использования в отчете скриптов.&lt;br /&gt;
&lt;br /&gt;
====Окно «Структура отчета»====&lt;br /&gt;
Окно «Структура отчет» отображает структуру отчета в виде дерева связанных элементов.&lt;br /&gt;
&lt;br /&gt;
===Элементы отчета===&lt;br /&gt;
Для составления макета отчета доступны следующие элементы:&lt;br /&gt;
&lt;br /&gt;
*текст;&lt;br /&gt;
*данные;&lt;br /&gt;
*изображение;&lt;br /&gt;
*фигура;&lt;br /&gt;
*компоновка (Layout).&lt;br /&gt;
&lt;br /&gt;
====Текст====&lt;br /&gt;
Элемент «Текст» служит для вывода надписей или содержимого полей источников данных.&lt;br /&gt;
&lt;br /&gt;
Объект «Текст» обладает очень широкими возможностями. Он умеет отображать текст, рамку, заливку. Текст может быть отображен любым шрифтом любого размера, цвета и стиля. Большинство настроек делаются визуально с помощью панелей инструментов.&lt;br /&gt;
&lt;br /&gt;
Одна из самых главных особенностей этого универсального объекта – это возможность отображения не только статичного текста, но и текста с применением вычисляемых выражений. Причем, выражения могут располагаться в объекте вперемешку с текстом. Рассмотрим простой пример – поместим в объект «Текст» следующую строку: «Привет! Сегодня $S{now()}».&lt;br /&gt;
&lt;br /&gt;
Если запустить отчет на построение, мы увидим приблизительно следующее: «Привет! Сегодня 2018­08­03». В процессе построения отчета выражение в тексте, заключенное $S{}, было вычислено и полученное значение вставлено обратно в текст. Объект «Текст» может содержать любое количество выражений, смешанных с обычным текстом. В скобки можно заключать и одиночные переменные, и выражения, например, $S{1+2*(3+4)}. В выражениях можно использовать константы, переменные ($V{}), функции, поля БД ($D{}).&lt;br /&gt;
&lt;br /&gt;
Свойства элемента «Текст»:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Наименование свойства&lt;br /&gt;
!Описание&lt;br /&gt;
|-&lt;br /&gt;
|alignment&lt;br /&gt;
|Выравнивание текста по вертикали и горизонтали&lt;br /&gt;
|-&lt;br /&gt;
|angle&lt;br /&gt;
|Поворот надписи&lt;br /&gt;
|-&lt;br /&gt;
|autoHeight&lt;br /&gt;
|Автоматический подбор высоты&lt;br /&gt;
|-&lt;br /&gt;
|autoWidth&lt;br /&gt;
|Автоматический подбор ширины&lt;br /&gt;
|-&lt;br /&gt;
|backgroundColor&lt;br /&gt;
|Цвет заливки&lt;br /&gt;
|-&lt;br /&gt;
|backgroundMode&lt;br /&gt;
|Режим заливки&lt;br /&gt;
|-&lt;br /&gt;
| backgroundOpacity&lt;br /&gt;
|Прозрачность заливки&lt;br /&gt;
|-&lt;br /&gt;
|borders&lt;br /&gt;
|Границы&lt;br /&gt;
|-&lt;br /&gt;
|content&lt;br /&gt;
|Содержимое объекта «Текст»&lt;br /&gt;
|-&lt;br /&gt;
|font&lt;br /&gt;
|Шрифт&lt;br /&gt;
|-&lt;br /&gt;
|fontColor&lt;br /&gt;
|Цвет шрифта&lt;br /&gt;
|-&lt;br /&gt;
| foregroundOpacity&lt;br /&gt;
|Прозрачность шрифта&lt;br /&gt;
|-&lt;br /&gt;
|geometry&lt;br /&gt;
|Размер и расположение объекта&lt;br /&gt;
|-&lt;br /&gt;
|itemLocation&lt;br /&gt;
|Расположение объекта (страница или бэнд)&lt;br /&gt;
|-&lt;br /&gt;
|margin&lt;br /&gt;
|Отступы&lt;br /&gt;
|-&lt;br /&gt;
|objectName&lt;br /&gt;
| Имя объекта&lt;br /&gt;
|-&lt;br /&gt;
|stretchToMaxHeight&lt;br /&gt;
|Установка значения высоты самого высокого объекта на бэнде&lt;br /&gt;
|-&lt;br /&gt;
|trimValue&lt;br /&gt;
|Удаление  пробелов в начале и в конце надписи&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Для редактирования свойства «Content» используется диалоговое окно «Text Item Editor», вызов которого осуществляется двойным щелчком левой кнопки мыши на элементе «Текст».&lt;br /&gt;
&lt;br /&gt;
Свойство «Content» может содержать: &lt;br /&gt;
&lt;br /&gt;
*текст;&lt;br /&gt;
*значения переменных;&lt;br /&gt;
*значения полей из набора данных;&lt;br /&gt;
*значения, формируемые посредством исполнения скрипта.&lt;br /&gt;
&lt;br /&gt;
Для вывода значений переменных используется синтаксис «$V{имяПеременной}» (без кавычек), для вывода значения поля данных – «$D{имяНабораДанных.ИмяПеременной}», для вывода результата исполнения скрипта – «$S{телоСкрипта}».&lt;br /&gt;
&lt;br /&gt;
==== Изображение ====&lt;br /&gt;
Элемент для вывода изображений:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Наименование свойства&lt;br /&gt;
!Описание&lt;br /&gt;
|-&lt;br /&gt;
|autoSize&lt;br /&gt;
|Подгонять размер под размер изображения&lt;br /&gt;
|-&lt;br /&gt;
|borders&lt;br /&gt;
|Границы&lt;br /&gt;
|-&lt;br /&gt;
|content  &lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|datasource&lt;br /&gt;
|Источник данных&lt;br /&gt;
|-&lt;br /&gt;
|field&lt;br /&gt;
|Поле данных&lt;br /&gt;
|-&lt;br /&gt;
|geometry&lt;br /&gt;
|Размер и расположение&lt;br /&gt;
|-&lt;br /&gt;
|image&lt;br /&gt;
|Изображение&lt;br /&gt;
|-&lt;br /&gt;
| itemLocation&lt;br /&gt;
|Расположение объекта (страница или бэнд)&lt;br /&gt;
|-&lt;br /&gt;
|objectName&lt;br /&gt;
|Имя объекта&lt;br /&gt;
|-&lt;br /&gt;
| stretchToMaxHeight&lt;br /&gt;
|Устанавливать значение высоты самого высокого объекта на  бэнде&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
====Фигура====&lt;br /&gt;
Элемент для вывода фигур:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Наименование свойства&lt;br /&gt;
!Описание&lt;br /&gt;
|-&lt;br /&gt;
|borders&lt;br /&gt;
|Границы&lt;br /&gt;
|-&lt;br /&gt;
| geometry&lt;br /&gt;
|Размер и расположение&lt;br /&gt;
|-&lt;br /&gt;
|itemLocation&lt;br /&gt;
|Расположение объекта (страница или бэнд)&lt;br /&gt;
|-&lt;br /&gt;
|lineWidth&lt;br /&gt;
|Толщина линии&lt;br /&gt;
|-&lt;br /&gt;
|objectName&lt;br /&gt;
|Имя объекта&lt;br /&gt;
|-&lt;br /&gt;
|opacity&lt;br /&gt;
|Прозрачность&lt;br /&gt;
|-&lt;br /&gt;
|penStyle&lt;br /&gt;
|Стиль линии&lt;br /&gt;
|-&lt;br /&gt;
|shape&lt;br /&gt;
|Фигура&lt;br /&gt;
|-&lt;br /&gt;
|shapeBrush&lt;br /&gt;
|Стиль заливки&lt;br /&gt;
|-&lt;br /&gt;
|shapeBrushColor&lt;br /&gt;
|Цвет заливки&lt;br /&gt;
|-&lt;br /&gt;
|shapeColor&lt;br /&gt;
|Цвет фигуры&lt;br /&gt;
|-&lt;br /&gt;
|stretchToMaxHeight&lt;br /&gt;
|Устанавливать значение высоты самого высокого объекта на  бэнде&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
====Горизонтальная компоновка (Layout)====&lt;br /&gt;
Элемент, позволяющий объединять несколько элементов в группу:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Наименование свойства&lt;br /&gt;
!Описание&lt;br /&gt;
|-&lt;br /&gt;
|borders&lt;br /&gt;
|Границы&lt;br /&gt;
|-&lt;br /&gt;
|geometry&lt;br /&gt;
|Размер и расположение&lt;br /&gt;
|-&lt;br /&gt;
|itemLocation&lt;br /&gt;
|Расположение объекта (страница или бэнд)&lt;br /&gt;
|-&lt;br /&gt;
|objectName&lt;br /&gt;
|Имя объекта&lt;br /&gt;
|-&lt;br /&gt;
|stretchToMaxHeight&lt;br /&gt;
|Устанавливать значение высоты самого высокого объекта на  бэнде&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Разделы отчета (бэнды) ===&lt;br /&gt;
Бэнд предназначен для размещения других элементов отчета. Бэнд может быть нескольких типов:&lt;br /&gt;
&lt;br /&gt;
*Report Header – заголовок отчета;&lt;br /&gt;
*Report Footer – завершение отчета;&lt;br /&gt;
*Page Header – верхний колонтитул страницы отчета;&lt;br /&gt;
*Page Footer – нижний колонтитул страницы отчета;&lt;br /&gt;
*Data – данные отчета;&lt;br /&gt;
* SubDetail – подчиненные данные отчета;&lt;br /&gt;
*SubDetailHeader – заголовок подчиненных данных;&lt;br /&gt;
*SubDetailFooter – завершение подчиненных данных;&lt;br /&gt;
*GroupHeader – заголовок группы;&lt;br /&gt;
*GroupFooter – завершение группы.&lt;br /&gt;
&lt;br /&gt;
Бэнды применяются для логической группировки объектов. К примеру, размещение объекта на элементе «Данные» типа «Page Header», приводит к отображению этого объекта в верхней части каждой страницы готового отчета. Аналогичным образом «Page Footer» выводится внизу каждой страницы со всеми лежащими на нем объектами.&lt;br /&gt;
&lt;br /&gt;
Общие для всех элементов «Данные» свойства:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Наименование свойства&lt;br /&gt;
!Описание&lt;br /&gt;
|-&lt;br /&gt;
|autoHeight&lt;br /&gt;
|Автоматический подбор высоты&lt;br /&gt;
|-&lt;br /&gt;
|backgroundColor&lt;br /&gt;
|Цвет заливки бэнда&lt;br /&gt;
|-&lt;br /&gt;
|borders&lt;br /&gt;
|Границы&lt;br /&gt;
|-&lt;br /&gt;
|geometry&lt;br /&gt;
|Размер&lt;br /&gt;
|-&lt;br /&gt;
|keepBottomSpace&lt;br /&gt;
|Сохранение отступа от нижней границы бэнда&lt;br /&gt;
|-&lt;br /&gt;
|objectName&lt;br /&gt;
|Имя объекта&lt;br /&gt;
|-&lt;br /&gt;
|printIfEmpty&lt;br /&gt;
|Отображение пустого бэнда&lt;br /&gt;
|-&lt;br /&gt;
|splittable&lt;br /&gt;
|Разделение  бэнда, если он не влезает на страницу&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Report Footer:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Наименование свойства&lt;br /&gt;
!Описание&lt;br /&gt;
|-&lt;br /&gt;
|maxScalePercent&lt;br /&gt;
|Максимальный процент, на который можно уменьшить бенд, если он не влезает на страницу. Если бэнд даже после сжатия&lt;br /&gt;
&lt;br /&gt;
не влезает на страницу, он будет перенесен полностью или частично  – в зависимости от настроек бэнда&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Data:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Наименование свойства&lt;br /&gt;
!Описание&lt;br /&gt;
|-&lt;br /&gt;
|datasource&lt;br /&gt;
|Источник данных. Data-бэнд будет сформирован для каждой строки в источнике данных&lt;br /&gt;
|-&lt;br /&gt;
|keepFooterTogether&lt;br /&gt;
|Если Report Footer не влезает на страницу, то он будет перенесен на следующую страницу совместно с последним&lt;br /&gt;
&lt;br /&gt;
экземпляром Data-бэнда&lt;br /&gt;
|-&lt;br /&gt;
|sliceLastRow&lt;br /&gt;
| Указывает генератору отчетов на то, можно ли разрезать последний экземпляр Data-бэнда или его нужно перенести&lt;br /&gt;
&lt;br /&gt;
целиком&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Бэнды данного типа предназначены для вывода на печать данных из наборов. Набор данных - это заранее неизвестное количество строк (записей), каждая из которых содержит определенное количество колонок (полей).&lt;br /&gt;
&lt;br /&gt;
SubDetail:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Наименование свойства&lt;br /&gt;
!Описание&lt;br /&gt;
|-&lt;br /&gt;
|datasource&lt;br /&gt;
| Источник данных. SubDetail-бэнд будет сформирован для каждой строки в источнике данных&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
SubDetailHeader, SubDetailFooter:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Наименование свойства&lt;br /&gt;
!Описание&lt;br /&gt;
|-&lt;br /&gt;
|printAlways&lt;br /&gt;
| Печатать, даже если SubDetail пустой&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
GroupHeader:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Наименование свойства&lt;br /&gt;
! Описание&lt;br /&gt;
|-&lt;br /&gt;
|groupFieldName&lt;br /&gt;
|Поле, по которому осуществляется группировка. Экземпляр GroupHeader будет формироваться при смене значения в этом  поле&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===Функции===&lt;br /&gt;
==== Агрегатные функции ====&lt;br /&gt;
Агрегатные функции предназначены для обработки значений, содержащихся в резделах Data и SubDetail.&lt;br /&gt;
&lt;br /&gt;
===== AVG - вычисление среднего значения =====&lt;br /&gt;
Пример использования:&lt;br /&gt;
 $S{AVG(&amp;quot;TextItem4&amp;quot;,&amp;quot;DataBand1&amp;quot;);}&lt;br /&gt;
&lt;br /&gt;
===== SUM - вычисление суммы значений =====&lt;br /&gt;
Пример использования:&lt;br /&gt;
 $S{SUM(&amp;quot;TextItem8&amp;quot;,&amp;quot;DataBand1&amp;quot;);}&lt;br /&gt;
&lt;br /&gt;
===== MIN =====&lt;br /&gt;
&lt;br /&gt;
===== MAX =====&lt;br /&gt;
&lt;br /&gt;
===== COUNT =====&lt;br /&gt;
&lt;br /&gt;
==== Числовые функции ====&lt;br /&gt;
&lt;br /&gt;
===== numberFormat - форматирование числа =====&lt;br /&gt;
Синтаксис:&lt;br /&gt;
 numberFormat(значение, 'формат', точность)&lt;br /&gt;
Форматы:&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;'f'&amp;lt;/code&amp;gt; — фиксированная запись (например, &amp;lt;code&amp;gt;&amp;quot;123.45&amp;quot;&amp;lt;/code&amp;gt;);&lt;br /&gt;
* &amp;lt;code&amp;gt;'g'&amp;lt;/code&amp;gt; — общий формат (автоматически выбирает между &amp;lt;code&amp;gt;'f'&amp;lt;/code&amp;gt; и &amp;lt;code&amp;gt;'e'&amp;lt;/code&amp;gt;);&lt;br /&gt;
* &amp;lt;code&amp;gt;'e'&amp;lt;/code&amp;gt; — экспоненциальная запись (например, &amp;lt;code&amp;gt;&amp;quot;1.2345e+02&amp;quot;&amp;lt;/code&amp;gt;);&lt;br /&gt;
&lt;br /&gt;
Пример использования:&lt;br /&gt;
 $S{numberFormat($D{fetcharchiverdata1.ArchiversSourceConnector0 (среднее)}, 'f', 3)}       -&amp;gt; 123.495&lt;br /&gt;
[[Категория:AgavaSCADA/AgavaPLC]]&lt;/div&gt;</summary>
		<author><name>SharipovRR</name></author>
	</entry>
	<entry>
		<id>https://docs.kb-agava.ru/index.php?title=%D0%A3%D0%B7%D0%BB%D1%8B_%D0%BF%D1%80%D0%BE%D0%B5%D0%BA%D1%82%D0%B0_AgavaSCADA/AgavaPLC&amp;diff=3305</id>
		<title>Узлы проекта AgavaSCADA/AgavaPLC</title>
		<link rel="alternate" type="text/html" href="https://docs.kb-agava.ru/index.php?title=%D0%A3%D0%B7%D0%BB%D1%8B_%D0%BF%D1%80%D0%BE%D0%B5%D0%BA%D1%82%D0%B0_AgavaSCADA/AgavaPLC&amp;diff=3305"/>
		<updated>2025-10-29T12:18:16Z</updated>

		<summary type="html">&lt;p&gt;SharipovRR: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Узлы проекта ==&lt;br /&gt;
Узел - элементарная сущность проекта, осуществляющая хранение информации или реализующая определенный функционал. Каждый узел обладает набором [[Свойства узлов в AgavaSCADA/AgavaPLC|свойств]]. Все узлы, объединенные в иерархическую структуру, образуют проект.&lt;br /&gt;
&lt;br /&gt;
== Проект ==&lt;br /&gt;
[[Файл:AgavaPLC–Дерево проекта.png|мини|Рисунок 21 – Дерево проекта]]&lt;br /&gt;
Узел &amp;quot;Проект&amp;quot; (&amp;quot;Корневой узел&amp;quot;, &amp;quot;Корень&amp;quot;) предназначен для хранения общей информации о проекте и связывания других узлов проекта.&lt;br /&gt;
&lt;br /&gt;
== Станция ==&lt;br /&gt;
Станция – важнейший узел, управляющий работой собственных систем и выполняющий обмен данными с другими станциями. Физически станция представляет собой устройство, на котором исполняется проект (компьютер, панель оператора, МПР-60 или другое устройство).&lt;br /&gt;
&lt;br /&gt;
Для использования в проекте доступны несколько типов станций. например:&lt;br /&gt;
&lt;br /&gt;
* '''Станция''' - общий тип станции. Проекты с такой станцией могут выполняться на большинстве устройств - контроллеры, панели, персональные компьютеры. Чаще всего используется для проектов, предназначенных для выполнения на персональном компьютере.&lt;br /&gt;
* '''Панель ПО-40''' - специализированный тип для проектов на панелях оператора ПО-40. Станция такого типа по отношению к общему дополнительно предоставляет возможность управления оборудованием панели оператора (светодиоды индикации и др.), использования корзины субмодулей.&lt;br /&gt;
* '''Панель ПО-50''' - специализированный тип для проектов на панелях оператора ПО-50. Станция такого типа по отношению к общему дополнительно предоставляет возможность управления оборудованием панели оператора (светодиоды индикации и др.).&lt;br /&gt;
* '''Контроллер МПР-60''' - специализированный тип для проектов на программируемых реле МПР-60. Станция такого типа по отношению к общему дополнительно предоставляет возможность управления оборудованием устройства (светодиоды индикации и др.), использования корзины субмодулей.&lt;br /&gt;
* '''Контроллер ПЛК-70.A''' - специализированный тип для проектов, предназначенных для контроллеров АГАВА ПЛК-70.А. Станция такого типа по отношению к общему дополнительно предоставляет возможность управления оборудованием контроллера (светодиоды индикации и др.), использования корзины субмодулей.&lt;br /&gt;
&lt;br /&gt;
При построении больших проектов станций в проекте может быть несколько, и они могут выполнять разные задачи. Например, станция-сервер выполняет сбор и регистрацию данных, клиентские станции выполняют визуализацию данных на рабочих местах и т. д.&lt;br /&gt;
&lt;br /&gt;
Станции подчиняются узлы типа &amp;quot;Система&amp;quot; - Транспортная система, Система архивирования, Система визуализации и т. д.&lt;br /&gt;
&lt;br /&gt;
== Транспортная система ==&lt;br /&gt;
Транспортная система управляет передачей данных по различным каналам связи. Система управляет работой &amp;quot;Транспортов&amp;quot; - узлов, выполняющих обмен данными с устройствами по определенному протоколу.&lt;br /&gt;
&lt;br /&gt;
С одной стороны, транспортная система обращается непосредственно к сигналам и каналам устройства, а с другой стороны, представляет их в виде неких универсальных единиц – узлов-источников. Каждый источник однозначно соответствует определенному сигналу или параметру устройства.  При изменении сигнала меняется и значение источника.  При записи данных в источник производится подача команды устройству на установку определенного значения конкретного параметра.&lt;br /&gt;
&lt;br /&gt;
Транспортная система допускает использование нескольких транспортов, что дает возможность одновременного обмена данными с большим количеством устройств по разным протоколам.&lt;br /&gt;
&lt;br /&gt;
=== Транспорт ===&lt;br /&gt;
Транспорт предназначен для обмена данными с устройствами по определенному протоколу. Один транспорт, в зависимости от типа, позволяет обмениваться данными с одним или несколькими устройствами.&lt;br /&gt;
&lt;br /&gt;
Доступны для использования следующие виды транспортов:&lt;br /&gt;
&lt;br /&gt;
* Транспорт Modbus-TCP;&lt;br /&gt;
* Транспорт Modbus-RTU;&lt;br /&gt;
* Транспорт SNMP;&lt;br /&gt;
* Транспорт OPC UA;&lt;br /&gt;
* Транспорт OPC DA (только для Windows);&lt;br /&gt;
* Транспорт MQTT;&lt;br /&gt;
* Последовательный транспорт (устаревший);&lt;br /&gt;
* TCP/IP транспорт (устаревший).&lt;br /&gt;
Подробное описание транспортов приведено в отдельном документе &amp;quot;[[Транспорты AgavaSCADA/AgavaPLC]]&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
==Система визуализации==&lt;br /&gt;
{{Внимание|Тип=Восклицание желтый.png|Текст=Система визуализации недоступна в проектах для контроллеров МПР}}&lt;br /&gt;
 &lt;br /&gt;
Задачей этой системы является отображение данных в виде набора мнемонических схем (экранов, мнемосхем), а также предоставление пользователю возможности управления. &lt;br /&gt;
&lt;br /&gt;
Каждый экран позволяет в схематичном, понятном пользователю виде представить участок технологической схемы с отображением необходимых параметров технологического процесса.&lt;br /&gt;
&lt;br /&gt;
Изображение на экране строится с помощью окон, на которых размещаются объекты визуализации – виджеты. Виджетами могут быть текстовые метки, изображения, в том числе анимированные, элементы управления, графики и т. д. Виджеты можно объединять в слои для удобного управления отображением виджетов.&lt;br /&gt;
&lt;br /&gt;
Виджеты могут быть статическими и динамическими.  Динамические виджеты привязаны к одному или нескольким сигналам и их отображение зависит от значений этих сигналов. Статические виджеты не имеют привязки к сигналам и их изображение всегда постоянно.&lt;br /&gt;
&lt;br /&gt;
Для перехода по экранам, изменения значений параметров и иного управления служат специальные виджеты: кнопки управления, поля ввода и другие.&lt;br /&gt;
&lt;br /&gt;
Для повышения быстродействия и увеличения комфортности работы с системой система визуализации хранит в памяти кэш из нескольких последних открытых экранов. Когда при последовательном открытии экранов этот кэш заполняется, наиболее старые экраны удаляются из него.  Это связано с тем, что, как правило, в работе используются несколько одних и тех же экранов, которые отображают сводную информацию о техпроцессе и оператор в штатном режиме переключается только между ними. Сохраняя их в памяти, система ускоряет переключение между ними, поскольку при этом не требуется каждый раз создавать экран, все находящиеся на нем объекты и запускать процессы обновления параметров.&lt;br /&gt;
&lt;br /&gt;
Когда экран переходит в кэш, обновление параметров на нем прекращается для снижения нагрузки на центральный процессор. Если все же необходимо, чтобы экран всегда производил обновление данных (по разным причинам), даже находясь в кэше, необходимо в его настройках включить опцию «Постоянно обновляемый».&lt;br /&gt;
&lt;br /&gt;
Подчиненные типы узлов:&lt;br /&gt;
&lt;br /&gt;
*фрейм;&lt;br /&gt;
*окно;&lt;br /&gt;
*композиция.&lt;br /&gt;
&lt;br /&gt;
===Фрейм===&lt;br /&gt;
[[Файл:AgavaPLC–Пример структуры сложного фрейма, состоящего из двух форм и одного окна с многослойной композицией.png|мини|Рисунок 23 – Пример структуры сложного фрейма, состоящего из двух форм и одного окна с многослойной композицией]]&lt;br /&gt;
Фрейм – узел, предназначенный для группировки окон, отображаемых на определенном дисплее. Обеспечивает организацию окон в пространстве экрана, управление мониторами и границами отображения. &lt;br /&gt;
&lt;br /&gt;
Если необходимо отобразить информацию на нескольких дисплеях одновременно, то для каждого из них нужно использовать отдельный фрейм. Окон во фрейме может быть несколько, однако они не могут накладываться друг на друга.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Наименование свойства&lt;br /&gt;
!Идентификатор&lt;br /&gt;
!Тип&lt;br /&gt;
!Описание&lt;br /&gt;
!Допустимые значения&lt;br /&gt;
|-&lt;br /&gt;
|Позиция X&lt;br /&gt;
|XCoord&lt;br /&gt;
|int&lt;br /&gt;
|Координата X левого верхнего угла фрейма&lt;br /&gt;
|Целое число&lt;br /&gt;
|-&lt;br /&gt;
|Позиция Y&lt;br /&gt;
|YCoord&lt;br /&gt;
|int&lt;br /&gt;
|Координата Y левого верхнего угла фрейма&lt;br /&gt;
|Целое число&lt;br /&gt;
|-&lt;br /&gt;
|Ширина&lt;br /&gt;
|XSize&lt;br /&gt;
|int&lt;br /&gt;
|Ширина фрейма в пикселях&lt;br /&gt;
|Целое число &amp;gt; 0&lt;br /&gt;
|-&lt;br /&gt;
|Высота&lt;br /&gt;
|YSize&lt;br /&gt;
|int&lt;br /&gt;
|Высота фрейма в пикселях&lt;br /&gt;
|Целое число &amp;gt; 0&lt;br /&gt;
|-&lt;br /&gt;
|Окна&lt;br /&gt;
|Windows&lt;br /&gt;
|NodesArray&lt;br /&gt;
|Список окон, принадлежащих фрейму&lt;br /&gt;
|Узлы типа: Window&lt;br /&gt;
|-&lt;br /&gt;
|Номер монитора&lt;br /&gt;
|DisplayNo&lt;br /&gt;
|int&lt;br /&gt;
|Номер монитора для отображения фрейма&lt;br /&gt;
|0 - по умолчанию&lt;br /&gt;
≥1 - конкретные мониторы&lt;br /&gt;
|-&lt;br /&gt;
|Тип границы&lt;br /&gt;
|BorderType&lt;br /&gt;
|enum&lt;br /&gt;
|Тип границы фрейма&lt;br /&gt;
|0: Не определен (ошибка)&lt;br /&gt;
1: Отсутствует&lt;br /&gt;
&lt;br /&gt;
2: Фиксированная&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== Позиция и размеры (XCoord, YCoord, XSize, YSize) ====&lt;br /&gt;
&lt;br /&gt;
* '''Тип:''' int.&lt;br /&gt;
* '''Описание:''' Определяют положение и размеры фрейма на экране.&lt;br /&gt;
* '''Значения по умолчанию:''' (0, 0, 640, 480).&lt;br /&gt;
* '''Применение:''' Задание области экрана, которую занимает фрейм.&lt;br /&gt;
&lt;br /&gt;
==== Окна (Windows) ====&lt;br /&gt;
'''Тип:''' NodesArray.&lt;br /&gt;
&lt;br /&gt;
'''Описание:''' Коллекция окон, которые управляются данным фреймом. Окна могут добавляться только из существующих узлов.&lt;br /&gt;
&lt;br /&gt;
'''Особенности:'''&lt;br /&gt;
&lt;br /&gt;
* Поддерживаются только узлы типа Window.&lt;br /&gt;
&lt;br /&gt;
==== Номер монитора (DisplayNo) ====&lt;br /&gt;
'''Тип:''' int.&lt;br /&gt;
&lt;br /&gt;
'''Описание:''' Определяет, на каком мониторе системы отображается фрейм. Значение 0 соответствует монитору по умолчанию.&lt;br /&gt;
&lt;br /&gt;
'''Использование:'''&lt;br /&gt;
&lt;br /&gt;
* 0 - основной монитор.&lt;br /&gt;
* 1, 2, ... - дополнительные мониторы.&lt;br /&gt;
* Свойство важно для многомониторных конфигураций.&lt;br /&gt;
&lt;br /&gt;
==== Тип границы (BorderType) ====&lt;br /&gt;
'''Тип:''' enum.&lt;br /&gt;
&lt;br /&gt;
'''Описание:''' Определяет тип обрамления фрейма. Влияет на внешний вид и поведение границ.&lt;br /&gt;
&lt;br /&gt;
'''Значения:'''&lt;br /&gt;
&lt;br /&gt;
* '''Отсутствует''' - фрейм без видимых границ.&lt;br /&gt;
* '''Фиксированная''' - стандартная граница окна.&lt;br /&gt;
* '''Не определен''' - используется только для обработки ошибок.&lt;br /&gt;
&lt;br /&gt;
==== Наследование привилегий ====&lt;br /&gt;
Фрейм автоматически добавляет доступные привилегии для работы с окнами:&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;OpenWindow&amp;lt;/code&amp;gt; - привилегия на открытие окон.&lt;br /&gt;
* &amp;lt;code&amp;gt;CloseWindow&amp;lt;/code&amp;gt; - привилегия на закрытие окон.&lt;br /&gt;
&lt;br /&gt;
===Окна===&lt;br /&gt;
Окно – узел, осуществляющий отображение видеокадра (мнемонической схемы).&lt;br /&gt;
&lt;br /&gt;
Существуют несколько видов окон:&lt;br /&gt;
&lt;br /&gt;
1. «Форма», предназначенная для вывода простого набора данных без необходимости управления видимостью или внешним видом его элементов. Для вывода информации в такое окно кроме создания окна и добавления к нему виджетов ничего более не требуется.&lt;br /&gt;
[[Файл:AgavaPLC-Меню.png|мини|164x164пкс|Рисунок 24 — Внешний вид меню в среде исполнения]]&lt;br /&gt;
2. «Окно с композицией», предназначенное для вывода большого количества информации и позволяющее организовать группировку элементов по слоям, управлять внешним видом элементов, видимостью слоев и отдельных элементов, а также дающее возможность регулирования работы пользователя с элементами. Для вывода информации в такое окно нужно к окну привязать композицию, содержащую минимум один слой, в который уже добавляются виджеты.&lt;br /&gt;
&lt;br /&gt;
=== Форма ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Наименование свойства&lt;br /&gt;
!Идентификатор&lt;br /&gt;
!Тип&lt;br /&gt;
!Описание&lt;br /&gt;
!Допустимые значения&lt;br /&gt;
!Режим доступа&lt;br /&gt;
|-&lt;br /&gt;
|Модальность&lt;br /&gt;
|Modality&lt;br /&gt;
|enum&lt;br /&gt;
|Режим модальности окна&lt;br /&gt;
|0: Не определен (ошибка)&lt;br /&gt;
1: Немодальное&lt;br /&gt;
&lt;br /&gt;
2: Модальное (Фрейм)&lt;br /&gt;
&lt;br /&gt;
3: Модальное (Система)&lt;br /&gt;
|Чтение/Запись&lt;br /&gt;
|-&lt;br /&gt;
|Тип границы&lt;br /&gt;
|BorderType&lt;br /&gt;
|enum&lt;br /&gt;
|Тип границы окна&lt;br /&gt;
|0: Не определен (ошибка)&lt;br /&gt;
1: Фиксированная&lt;br /&gt;
&lt;br /&gt;
2: Изменяемая&lt;br /&gt;
&lt;br /&gt;
3: Отсутствует&lt;br /&gt;
|Чтение/Запись&lt;br /&gt;
|-&lt;br /&gt;
|Отображать строку заголовка&lt;br /&gt;
|TitleEnabled&lt;br /&gt;
|bool&lt;br /&gt;
|Отображать строку заголовка&lt;br /&gt;
|true/false&lt;br /&gt;
|Чтение/Запись&lt;br /&gt;
|-&lt;br /&gt;
|Отображать кнопку &amp;quot;Закрыть&amp;quot;&lt;br /&gt;
|CloseEnabled&lt;br /&gt;
|bool&lt;br /&gt;
|Отображать кнопку &amp;quot;Закрыть&amp;quot;&lt;br /&gt;
|true/false&lt;br /&gt;
|Чтение/Запись&lt;br /&gt;
|-&lt;br /&gt;
|Цвет фона&lt;br /&gt;
|BackgroundColor&lt;br /&gt;
|NColor&lt;br /&gt;
|Цвет фона окна&lt;br /&gt;
|Цвет в формате RGBA&lt;br /&gt;
|Чтение/Запись&lt;br /&gt;
|-&lt;br /&gt;
|Затемнение&lt;br /&gt;
|NeedDarkenApplication&lt;br /&gt;
|bool&lt;br /&gt;
|Затемнение других окон приложения при открытии этого окна&lt;br /&gt;
|true/false&lt;br /&gt;
|Чтение/Запись&lt;br /&gt;
|-&lt;br /&gt;
|Цвет затемнения&lt;br /&gt;
|ColorDarkenApplication&lt;br /&gt;
|NColor&lt;br /&gt;
|Цвет затемнения&lt;br /&gt;
|Цвет в формате RGBA&lt;br /&gt;
|Чтение/Запись&lt;br /&gt;
|-&lt;br /&gt;
|Интервал обновления&lt;br /&gt;
|UpdateInterval&lt;br /&gt;
|int&lt;br /&gt;
|Интервал обновления виджетов, мс&lt;br /&gt;
|0 - без задержки&lt;br /&gt;
&amp;gt;0 - интервал в мс&lt;br /&gt;
|Чтение/Запись&lt;br /&gt;
|-&lt;br /&gt;
|Действия OnShow&lt;br /&gt;
|ActionsOnShow&lt;br /&gt;
|NodesContainer&lt;br /&gt;
|Действия при показе окна&lt;br /&gt;
|Узлы типа: Action&lt;br /&gt;
|Чтение/Запись&lt;br /&gt;
|-&lt;br /&gt;
|Действия OnClose&lt;br /&gt;
|ActionsOnClose&lt;br /&gt;
|NodesContainer&lt;br /&gt;
|Действия при закрытии окна&lt;br /&gt;
|Узлы типа: Action&lt;br /&gt;
|Чтение/Запись&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== Модальность (Modality) ====&lt;br /&gt;
'''Тип:''' enum.&lt;br /&gt;
&lt;br /&gt;
'''Описание:''' Определяет поведение окна относительно других окон приложения.&lt;br /&gt;
&lt;br /&gt;
'''Значения:'''&lt;br /&gt;
&lt;br /&gt;
* '''Немодальное''' - позволяет взаимодействовать с другими окнами.&lt;br /&gt;
* '''Модальное (Фрейм)''' - блокирует взаимодействие с окнами в том же фрейме.&lt;br /&gt;
* '''Модальное (Система)''' - блокирует все окна приложения.&lt;br /&gt;
&lt;br /&gt;
==== Тип границы (BorderType) ====&lt;br /&gt;
'''Тип:''' enum.&lt;br /&gt;
&lt;br /&gt;
'''Описание:''' Определяет тип и поведение границ окна.&lt;br /&gt;
&lt;br /&gt;
'''Значения:'''&lt;br /&gt;
&lt;br /&gt;
* '''Фиксированная''' - окно нельзя изменять размер.&lt;br /&gt;
* '''Изменяемая''' - пользователь может изменять размер окна.&lt;br /&gt;
* '''Отсутствует''' - окно без видимых границ.&lt;br /&gt;
&lt;br /&gt;
==== Управление заголовком (TitleEnabled, CloseEnabled) ====&lt;br /&gt;
'''Тип:''' bool.&lt;br /&gt;
&lt;br /&gt;
'''Описание:''' Контролируют отображение элементов заголовка окна.&lt;br /&gt;
&lt;br /&gt;
==== Фон и затемнение (BackgroundColor, NeedDarkenApplication, ColorDarkenApplication) ====&lt;br /&gt;
'''Тип:''' NColor, bool, NColor.&lt;br /&gt;
&lt;br /&gt;
'''Описание:''' Управляют визуальным оформлением окна и его влиянием на другие окна.&lt;br /&gt;
&lt;br /&gt;
'''Особенности:'''&lt;br /&gt;
&lt;br /&gt;
* Затемнение применяется только при NeedDarkenApplication = true.&lt;br /&gt;
* Цвет затемнения по умолчанию: черный с прозрачностью 50%.&lt;br /&gt;
&lt;br /&gt;
==== Интервал обновления (UpdateInterval) ====&lt;br /&gt;
'''Тип:''' int.&lt;br /&gt;
&lt;br /&gt;
'''Описание:''' Определяет частоту обновления виджетов в окне.&lt;br /&gt;
&lt;br /&gt;
'''Рекомендации:'''&lt;br /&gt;
&lt;br /&gt;
* 0 - 100 мс для композиций с критичным временем отклика.&lt;br /&gt;
* 100 - 500 мс хорошо подходит для большинства случаев.&lt;br /&gt;
* более 1000 мс - для статических или редко меняющихся данных.&lt;br /&gt;
&lt;br /&gt;
==== Обработчики событий (ActionsOnShow, ActionsOnClose) ====&lt;br /&gt;
'''Тип:''' NodesContainer.&lt;br /&gt;
&lt;br /&gt;
'''Описание:''' Коллекции действий, выполняемых при показе и закрытии окна.&lt;br /&gt;
&lt;br /&gt;
=== Окно с композицией ===&lt;br /&gt;
Данный узел имеет те же свойства, что и форма, а также собственные:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Наименование свойства&lt;br /&gt;
!Идентификатор&lt;br /&gt;
!Тип&lt;br /&gt;
!Описание&lt;br /&gt;
!Допустимые значения&lt;br /&gt;
!Режим доступа&lt;br /&gt;
|-&lt;br /&gt;
|Композиция&lt;br /&gt;
|CompositionId&lt;br /&gt;
|NodeLink&lt;br /&gt;
|Основная композиция окна&lt;br /&gt;
|Узлы типа: CompositionLayered, CompositionTemplated&lt;br /&gt;
|Чтение/Запись&lt;br /&gt;
|-&lt;br /&gt;
|Описание текущей композиции&lt;br /&gt;
|CurrentCompositionDesc&lt;br /&gt;
|string&lt;br /&gt;
|Описание текущей загруженной композиции&lt;br /&gt;
|Автоматически формируется&lt;br /&gt;
|Только чтение&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== Композиция (CompositionId) ====&lt;br /&gt;
'''Тип:''' NodeLink.&lt;br /&gt;
&lt;br /&gt;
'''Описание:''' Ссылка на композицию, отображаемую в окне.&lt;br /&gt;
&lt;br /&gt;
'''Поддерживаемые типы:''' CompositionLayered, CompositionTemplated.&lt;br /&gt;
&lt;br /&gt;
==== Описание текущей композиции (CurrentCompositionDesc) ====&lt;br /&gt;
'''Тип:''' string.&lt;br /&gt;
&lt;br /&gt;
'''Описание:''' Автоматически обновляемое описание загруженной композиции.&lt;br /&gt;
&lt;br /&gt;
'''Особенности:''' Свойство только для чтения, обновляется системой автоматически.[[Файл:AgavaPLC-Настройка меню в среде разработки.png|мини|226x226пкс|Рисунок 25 — Настройка меню в среде разработки]]&lt;br /&gt;
&lt;br /&gt;
===Композиция===&lt;br /&gt;
Композиция – узел, представляющий составленную при разработке проекта мнемоническую схему в виде набора элементов визуализации (виджетов), сгруппированных в один или несколько слоев.&lt;br /&gt;
&lt;br /&gt;
Композиция дает возможность организовать виджеты в слои, видимостью которых можно управлять во время работы проекта.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Наименование свойства&lt;br /&gt;
!Идентификатор&lt;br /&gt;
!Тип&lt;br /&gt;
!Описание&lt;br /&gt;
!Допустимые значения&lt;br /&gt;
!Режим доступа&lt;br /&gt;
|-&lt;br /&gt;
|Размеры&lt;br /&gt;
|Size&lt;br /&gt;
|NSize&lt;br /&gt;
|Размеры композиции&lt;br /&gt;
|Структура {ширина, высота}&lt;br /&gt;
|Чтение/Запись&lt;br /&gt;
|-&lt;br /&gt;
|Кэширование&lt;br /&gt;
|Cacheable&lt;br /&gt;
|bool&lt;br /&gt;
|Кэширование данных композиции для быстрого повторного открытия&lt;br /&gt;
|true/false&lt;br /&gt;
|Чтение/Запись&lt;br /&gt;
|-&lt;br /&gt;
|Источник интервала обновления&lt;br /&gt;
|UpdateIntervalSource&lt;br /&gt;
|enum&lt;br /&gt;
|Определяет источник интервала обновления виджетов&lt;br /&gt;
|0: Окно&lt;br /&gt;
1: Композиция&lt;br /&gt;
|Чтение/Запись&lt;br /&gt;
|-&lt;br /&gt;
|Интервал обновления&lt;br /&gt;
|UpdateInterval&lt;br /&gt;
|int&lt;br /&gt;
|Интервал обновления виджетов в миллисекундах&lt;br /&gt;
|Целое число ≥ 0&lt;br /&gt;
|Чтение/Запись&lt;br /&gt;
|-&lt;br /&gt;
|Действия OnLoad&lt;br /&gt;
|ActionsOnLoad&lt;br /&gt;
|NodesContainer&lt;br /&gt;
|Действия при загрузке композиции&lt;br /&gt;
|Узлы типа: Action&lt;br /&gt;
|Чтение/Запись&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== Размеры (Size) ====&lt;br /&gt;
'''Тип:''' NSize (ширина, высота).&lt;br /&gt;
&lt;br /&gt;
'''Описание:''' Определяет размеры композиции в пикселях. По умолчанию установлены значения 800x600.&lt;br /&gt;
&lt;br /&gt;
==== Кэширование (Cacheable) ====&lt;br /&gt;
'''Тип:''' bool.&lt;br /&gt;
&lt;br /&gt;
'''Описание:''' Включает или отключает кэширование данных композиции. При включенном кэшировании композиция сохраняется в памяти для быстрого повторного открытия.&lt;br /&gt;
&lt;br /&gt;
'''Преимущества кэширования:'''&lt;br /&gt;
&lt;br /&gt;
* Быстрое переключение между композициями.&lt;br /&gt;
* Снижение нагрузки на систему при частом использовании.&lt;br /&gt;
* Сохранение состояния элементов.&lt;br /&gt;
&lt;br /&gt;
'''Рекомендации:''' Включать для часто используемых композиций, отключать для редко используемых или ресурсоемких.&lt;br /&gt;
&lt;br /&gt;
==== Источник интервала обновления (UpdateIntervalSource) ====&lt;br /&gt;
'''Тип:''' enum.&lt;br /&gt;
&lt;br /&gt;
'''Описание:''' Определяет, откуда виджеты композиции получают интервал обновления.&lt;br /&gt;
&lt;br /&gt;
'''Значения:'''&lt;br /&gt;
&lt;br /&gt;
* '''Окно''' - интервал обновления наследуется от родительского окна.&lt;br /&gt;
* '''Композиция''' - используется собственный интервал обновления композиции.&lt;br /&gt;
&lt;br /&gt;
'''Применение:''' Централизованное управление производительностью через окно или индивидуальная настройка для каждой композиции.&lt;br /&gt;
&lt;br /&gt;
==== Интервал обновления (UpdateInterval) ====&lt;br /&gt;
'''Тип:''' int.&lt;br /&gt;
&lt;br /&gt;
'''Описание:''' Задает интервал обновления виджетов в миллисекундах. При значении 0 отрисовка виджетов выполняется без задержки (максимальная частота).&lt;br /&gt;
&lt;br /&gt;
'''Особенности:'''&lt;br /&gt;
&lt;br /&gt;
* 0 - обновление без задержек (может создать высокую нагрузку).&lt;br /&gt;
* &amp;gt; 0 - обновление с заданным интервалом.   Учитывается только при UpdateIntervalSource = &amp;quot;Композиция&amp;quot;&lt;br /&gt;
&lt;br /&gt;
'''Рекомендации:'''&lt;br /&gt;
&lt;br /&gt;
* 0 - 100 мс для композиций с критичным временем отклика.&lt;br /&gt;
* 100 - 500 мс хорошо подходит для большинства случаев.&lt;br /&gt;
* более 1000 мс - для статических или редко меняющихся данных.&lt;br /&gt;
&lt;br /&gt;
==== Обработчик событий ActionsOnLoad ====&lt;br /&gt;
'''Тип:''' NodesContainer.&lt;br /&gt;
&lt;br /&gt;
'''Описание:''' Коллекции действий, выполняемых после загрузки композиции &amp;lt;code&amp;gt;AS 1.6.27+&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
===Слой===&lt;br /&gt;
Слой – набор виджетов, объединенных каким-то общим структурным признаком. В многослойных композициях слой обеспечивает организацию виджетов в z-порядке, управление видимостью и взаимодействием с пользователем. С помошью свойства &amp;quot;Видимость&amp;quot; слоя можно управлять видимостью виджетов, размещенных на слое.&lt;br /&gt;
&lt;br /&gt;
Свойства&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Наименование свойства&lt;br /&gt;
!Идентификатор&lt;br /&gt;
!Тип&lt;br /&gt;
!Описание&lt;br /&gt;
!Допустимые значения&lt;br /&gt;
!Режим доступа&lt;br /&gt;
|-&lt;br /&gt;
|Z-Порядок&lt;br /&gt;
|ZOrder&lt;br /&gt;
|int&lt;br /&gt;
|Порядок слоя в композиции&lt;br /&gt;
|Целое число (чем выше значение, тем выше слой)&lt;br /&gt;
|Чтение/Запись&lt;br /&gt;
|-&lt;br /&gt;
|Прозрачность для действий&lt;br /&gt;
|ActionTransparency&lt;br /&gt;
|enum&lt;br /&gt;
|Определяет поведение слоя при взаимодействии с пользователем&lt;br /&gt;
|0: Не определен (ошибка)&lt;br /&gt;
1: Непрозрачный&lt;br /&gt;
&lt;br /&gt;
2: Прозрачный&lt;br /&gt;
|Чтение/Запись&lt;br /&gt;
|-&lt;br /&gt;
|Видимость&lt;br /&gt;
|Visible&lt;br /&gt;
|bool&lt;br /&gt;
|Видимость слоя и всех его виджетов&lt;br /&gt;
|true/false&lt;br /&gt;
|Чтение/Запись&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== Z-Порядок (ZOrder) ====&lt;br /&gt;
'''Тип:''' int&lt;br /&gt;
&lt;br /&gt;
'''Описание:''' Определяет порядок отображения слоя относительно других слоев в композиции. Слои с большим значением ZOrder отображаются поверх слоев с меньшим значением.&lt;br /&gt;
&lt;br /&gt;
'''Пример использования:'''&lt;br /&gt;
&lt;br /&gt;
* Фоновый слой: ZOrder = 1.&lt;br /&gt;
* Основной контент: ZOrder = 2.&lt;br /&gt;
* Контекстные виджеты: ZOrder = 3.&lt;br /&gt;
&lt;br /&gt;
==== Прозрачность для действий (ActionTransparency) ====&lt;br /&gt;
'''Тип:''' enum&lt;br /&gt;
&lt;br /&gt;
'''Описание:''' Управляет взаимодействием слоя с пользовательскими действиями (клики, наведения и т.д.)&lt;br /&gt;
&lt;br /&gt;
'''Значения:'''&lt;br /&gt;
&lt;br /&gt;
* '''Непрозрачный''' - слой полностью перехватывает пользовательские действия, элементы под ним недоступны, даже если они видимы.&lt;br /&gt;
* '''Прозрачный''' - пользовательские действия проходят сквозь слой к элементам ниже.&lt;br /&gt;
&lt;br /&gt;
Обратите внимание: если на слое размещается изображение с прозрачной областью, то такие виджеты не позволяют пользователю взаимодействовать с видимыми и размещенными под ним виджетами.&lt;br /&gt;
&lt;br /&gt;
==== Видимость (Visible) ====&lt;br /&gt;
'''Тип:''' bool&lt;br /&gt;
&lt;br /&gt;
'''Описание:''' Определяет видимость всего слоя и всех его дочерних виджетов. При значении false слой и все его содержимое становится невидимым.&lt;br /&gt;
&lt;br /&gt;
'''Применение:''' Временное скрытие виджетов или переключение их видимости.&lt;br /&gt;
&lt;br /&gt;
===Виджет===&lt;br /&gt;
Виджет – элемент визуализации, предназначенный для отображения информации в заданном виде.&lt;br /&gt;
&lt;br /&gt;
===Меню===&lt;br /&gt;
Меню – элемент визуализации, сочетающий в себе несколько виджетов «Кнопка». Используется для более удобного управления проектом (см. Рисунок 24).&lt;br /&gt;
&lt;br /&gt;
Для добавления меню, необходимо в среде разработки назначить [[Универсальная среда разработки#.D0.94.D0.B5.D0.B9.D1.81.D1.82.D0.B2.D0.B8.D0.B5 .C2.AB.D0.9E.D1.82.D0.BE.D0.B1.D1.80.D0.B0.D0.B6.D0.B5.D0.BD.D0.B8.D0.B5 .D0.BC.D0.B5.D0.BD.D1.8E.C2.BB|действие «Отображение меню»]] для кнопки (или любого другого виджета). После добавления действия необходимо выделить его и нажать на кнопку настроек на панели вверху окна действий. Открывшееся окно (см. Рисунок 25) содержит дерево со структурой меню, в который можно добавлять элементы двух типов:&lt;br /&gt;
&lt;br /&gt;
*меню – элемент, который позволяет группировать элементы меню, выводя их в виде раскрывающегося списка. На рисунках 24 и 25 этим элементом являются кнопки «Арочник» и «БПО».&lt;br /&gt;
*элемент меню – элемент, который предоставляет функционал, аналогичный [[Универсальная среда разработки#.D0.92.D0.B8.D0.B4.D0.B6.D0.B5.D1.82 .C2.AB.D0.9A.D0.BD.D0.BE.D0.BF.D0.BA.D0.B0.C2.BB|виджету «Кнопка»]]. Для добавления действия, выполняющегося при нажатии на элемент меню в среде исполнения, необходимо нажать на него ПКМ в дереве структуры меню и выбрать &amp;quot;Создать действие&amp;quot;. На рисунках 24 и 25 этим элементом являются кнопки «Котельная», «Котёл №1», «Котёл №2» и «Котёл №3».&lt;br /&gt;
&lt;br /&gt;
=== Создание многомониторных систем визуализации ===&lt;br /&gt;
AgavaSCADA предоставляет возможность реализации систем визуализации в составе проектов, использующих для отображения информации более одного дисплея.&lt;br /&gt;
&lt;br /&gt;
Для вывода информации в окнах на нескольких дисплеях в проект необходимо внести следующие корректировки относительно проекта, использующего только один дисплей:&lt;br /&gt;
&lt;br /&gt;
# Добавить дополнительные фреймы, чтобы их количество в проекте соответствовало количеству дисплеев. Каждому фрейму назначить порядковый номер, начиная с 1. Фреймы связываются с дисплеями по номеру.&lt;br /&gt;
# Добавить дополнительное окно (или окна, если в исходном фрейме их несколько или дополнительных фреймов больше одного).&lt;br /&gt;
# Добавить в дополнительные фреймы созданные на этапе 2 окна, чтобы повторить структуру основоного фрейма.&lt;br /&gt;
&lt;br /&gt;
Базовая настройка на этом закончена. После запуска такого проекта на двух или более дисплеях должны отображаться созданные окна.&lt;br /&gt;
&lt;br /&gt;
Если в проекте используется навигация по окнам, то необходимо в каждом окне, включенном в фрейм, скорректировать действия, размещаемые на кнопках, меню или друигх виджетах таким образом, чтобы действия открывали окна или загружали композиции в нужном окне.&lt;br /&gt;
&lt;br /&gt;
===Виджеты===&lt;br /&gt;
====Виджет «Текстовая метка»====&lt;br /&gt;
[[Файл:AgavaPLC–Примеры оформления виджетов типа &amp;quot;Текстовая метка&amp;quot;.png|мини|Рисунок 26 – Примеры оформления виджетов типа &amp;quot;Текстовая метка&amp;quot;]]&lt;br /&gt;
Виджет «Текстовая метка» – наиболее часто применяемый виджет, с помощью которого можно реализовать разные способы отображения текстовой информации.&lt;br /&gt;
&lt;br /&gt;
Виджет «Текстовая метка» может использоваться для отображения статичного текста, значений параметров (одного или нескольких) и их комбинаций.&lt;br /&gt;
&lt;br /&gt;
При необходимости отображения значений параметров они указываются в свойстве «Источник». Для задания определенного формата отображения используются спецификаторы формата в стиле языка «Си»:&lt;br /&gt;
&lt;br /&gt;
*%f – значение в виде числа с плавающей точкой;&lt;br /&gt;
* %s – строка;&lt;br /&gt;
*%i – целое число со знаком;&lt;br /&gt;
*%u – целое число без знака;&lt;br /&gt;
* %d – целое число со знаком в десятичной системе исчисления.&lt;br /&gt;
&lt;br /&gt;
Для разных типов свойств необходимо использовать строго определенные для них спецификаторы, с другими спецификаторами значения выводиться не будут.&lt;br /&gt;
&lt;br /&gt;
Для отображения знака «%» необходимо указать его дважды: «%%».&lt;br /&gt;
&lt;br /&gt;
===== Отображение нескольких значений =====&lt;br /&gt;
Одна текстовая метка может использоваться для отображения нескольких значений. Для этого все значения, которые нужно отобразить, указываются в свойстве «Источник», а в свойстве «Текст» указываются последовательно несколько спецификаторов формата соответственно порядку перечисления значений в свойстве «Источник».&lt;br /&gt;
&lt;br /&gt;
Пример: текстовая метка, отображающая текущую позицию в очереди:&lt;br /&gt;
&lt;br /&gt;
* Текст: &amp;lt;code&amp;gt;Позиция %i из %i&amp;lt;/code&amp;gt;&lt;br /&gt;
* Источник: два узла из проекта.&lt;br /&gt;
&lt;br /&gt;
=====Модификаторы спецификаторов формата=====&lt;br /&gt;
&lt;br /&gt;
======Модификатор минимальной ширины поля======&lt;br /&gt;
Целое число, расположенное между знаком % и кодом формата, играет роль модификатора минимальной ширины поля. Если указан модификатор минимальной ширины поля, то, чтобы ширина поля вывода была не меньше указанной минимальной величины, вывод при необходимости будет дополнен пробелами. Если же выводятся строки или числа, которые длиннее указанного минимума, то они все равно будут отображаться полностью. По умолчанию для дополнения используются пробелы. А если для этого надо использовать нули, то перед модификатором ширины поля следует поместить 0. Например, %05i означает, что любое число, количество цифр которого меньше пяти, будет дополнено таким количеством нулей, чтобы состоять из пяти цифр.&lt;br /&gt;
&lt;br /&gt;
Примеры&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Значение&lt;br /&gt;
!Спецификатор формата&lt;br /&gt;
!Выводимое значение&lt;br /&gt;
|-&lt;br /&gt;
|10.123&lt;br /&gt;
|%i&lt;br /&gt;
|10&lt;br /&gt;
|-&lt;br /&gt;
|10.123&lt;br /&gt;
|%d&lt;br /&gt;
|10&lt;br /&gt;
|-&lt;br /&gt;
|10.123&lt;br /&gt;
|%05i&lt;br /&gt;
|00010&lt;br /&gt;
|-&lt;br /&gt;
|10.123&lt;br /&gt;
|%f&lt;br /&gt;
|10.123000&lt;br /&gt;
|-&lt;br /&gt;
|10.123&lt;br /&gt;
|%.1f&lt;br /&gt;
| 10.1&lt;br /&gt;
|-&lt;br /&gt;
|10.123&lt;br /&gt;
|%10f&lt;br /&gt;
|&amp;lt;пробел&amp;gt;10.123000&lt;br /&gt;
|-&lt;br /&gt;
|10.123&lt;br /&gt;
|%012f&lt;br /&gt;
|00010.123000&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
======Модификатор точности======&lt;br /&gt;
Модификатор точности следует за модификатором минимальной ширины поля (если таковой имеется). Он состоит из точки и расположенного за ней целого числа. Значение этого модификатора зависит от типа данных, к которым его применяют.&lt;br /&gt;
&lt;br /&gt;
Когда модификатор точности применяется к данным с плавающей точкой, для преобразования которых используются спецификаторы преобразования %f, %e или %E, то он определяет количество выводимых десятичных разрядов. Например, %10.4f означает, что ширина поля вывода будет не менее 10 символов, причем для десятичных разрядов будет отведено четыре позиции.&lt;br /&gt;
&lt;br /&gt;
Если модификатор точности применяется к %g или %G, то он определяет количество значащих цифр.&lt;br /&gt;
&lt;br /&gt;
Примененный к строкам, модификатор точности определяет максимальную длину поля. Например, %5.7s означает, что длина выводимой строки будет составлять минимум пять и максимум семь символов. Если строка окажется длиннее, чем максимальная длина поля, то конечные символы выводиться не будут.&lt;br /&gt;
&lt;br /&gt;
Если модификатор точности применяется к целым типам, то он определяет минимальное количество цифр, которые будут выведены для каждого из чисел. Чтобы получилось требуемое количество цифр, добавляется некоторое количество ведущих нулей.&lt;br /&gt;
&lt;br /&gt;
Примеры:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Значение&lt;br /&gt;
!Спецификатор формата&lt;br /&gt;
!Выводимое значение&lt;br /&gt;
|-&lt;br /&gt;
|10.123&lt;br /&gt;
|%f&lt;br /&gt;
|10.123000&lt;br /&gt;
|-&lt;br /&gt;
|10.123&lt;br /&gt;
|%.1f&lt;br /&gt;
|10.1&lt;br /&gt;
|-&lt;br /&gt;
|10.123&lt;br /&gt;
|%10.4f&lt;br /&gt;
|&amp;lt;пробел&amp;gt;&amp;lt;пробел&amp;gt;&amp;lt;пробел&amp;gt;10.1230&lt;br /&gt;
|-&lt;br /&gt;
|10.123&lt;br /&gt;
|%010.3f&lt;br /&gt;
|000010.123&lt;br /&gt;
|-&lt;br /&gt;
| Это простая проверка&lt;br /&gt;
|%10.15s&lt;br /&gt;
|Это простая про&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
====Виджет «Условная метка» ====&lt;br /&gt;
[[Файл:AgavaPLC–Список сопоставлений виджета &amp;quot;Условная метка&amp;quot;.png|мини|Рисунок 27 – Список сопоставлений виджета &amp;quot;Условная метка&amp;quot;|ссылка=Файл:AgavaPLC–Список_сопоставлений_виджета_%22Условная_метка%22.png]]&lt;br /&gt;
Виджет «Условная метка» позволяет изменять выводимую строку в соответствии с изменениями привязанной к ней переменной.&lt;br /&gt;
&lt;br /&gt;
Задать соответствие текста необходимому условию можно в свойстве «Список сопоставлений».&lt;br /&gt;
&lt;br /&gt;
==== Виджет «Изображение»====&lt;br /&gt;
Виджет «Изображение» предназначен для отображения на окнах статичных изображений форматов png, gif, jpg, bmp или анимированных изображений в формате gif. Отображаемая картинка выбирается в разделе «Оформление» - «Изображение». Она должна находиться в папке проекта.&lt;br /&gt;
&lt;br /&gt;
====Виджет «Условное изображение»====&lt;br /&gt;
[[Файл:AgavaPLC–Список сопоставлений виджета &amp;quot;Условное изображение&amp;quot;.png|мини|Рисунок 28 – Список сопоставлений виджета &amp;quot;Условное изображение&amp;quot;|ссылка=Файл:AgavaPLC–Список_сопоставлений_виджета_%22Условное_изображение%22.png]]&lt;br /&gt;
Виджет «Условное изображение» позволяет изменять отображаемое изображение в соответствии с изменениями привязанной к нему переменной.&lt;br /&gt;
&lt;br /&gt;
Задать соответствие изображения необходимому условию можно в свойстве «Список сопоставлений».&lt;br /&gt;
&lt;br /&gt;
====Виджет «Движущееся изображение»====&lt;br /&gt;
Виджет предназначен для отображения на окнах изображений, перемещающихся в пределах области виджета. В основном используются на экране спящего режима.&lt;br /&gt;
&lt;br /&gt;
Отображаемая картинка выбирается в разделе «Оформление» - «Изображение». Она должна находиться в папке проекта.&lt;br /&gt;
&lt;br /&gt;
====Виджет «Кнопка»====&lt;br /&gt;
Виджет «Кнопка» предназначен для реализации функций управления:&lt;br /&gt;
&lt;br /&gt;
*ввод данных;&lt;br /&gt;
*передача управляющих воздействий;&lt;br /&gt;
* смена режима работы АРМ или иного устройства, исполняющего проект.&lt;br /&gt;
&lt;br /&gt;
Выполнение всех функций виджета обеспечивается с помощью узлов типа «Действие», добавляемых в соответствующее свойство (см. раздел [[#Действия]]).&lt;br /&gt;
&lt;br /&gt;
====Виджет «Гистограмма»====&lt;br /&gt;
[[Файл:AgavaPLC–Виджет &amp;quot;Гистограмма&amp;quot;.png|мини|Рисунок 29 – Виджет &amp;quot;Гистограмма&amp;quot;|ссылка=Файл:AgavaPLC–Виджет_%22Гистограмма%22.png]]&lt;br /&gt;
Виджет предназначен для отображения значений сигналов в виде столбчатой диаграммы.&lt;br /&gt;
&lt;br /&gt;
Виджету необходимо задать источник (регистр/сигнал, с которого он будет получать данные), а также минимальное и максимальное значения.&lt;br /&gt;
&lt;br /&gt;
====Виджет «Исторический график»====&lt;br /&gt;
Виджет «Исторический график» предназначен для отображения графиков параметров на двухкоординатной области изображения с привязкой к осям времени и значений.&lt;br /&gt;
&lt;br /&gt;
Виджет может работать с данными, архивируемыми в БД, и напрямую с сигналами, значения которых вычисляются в ходе работы.  &lt;br /&gt;
&lt;br /&gt;
При работе с архивируемыми данными интервал обновления графика зависит от режима выдачи значения у базы данных: при выборе сохраняемых в БД он будет соответствовать интервалу архивирования, а при сохраненных в БД - интервалу сохранения БД на диск. Независимо от режима выдачи, график не может обновляться меньше чем за 300 мс.&lt;br /&gt;
&lt;br /&gt;
При работе напрямую с сигналами график обновляется при изменении значения сигнала, но также не чаще чем раз в 300 мс.&lt;br /&gt;
[[Файл:AgavaPLC–Экран «Архив» с виджетом «Исторический график».png|мини|Рисунок 30 – Виджет «Исторический график». Области кнопок-пиктограмм. В нижней части отображена легенда]]&lt;br /&gt;
Виджет «Исторический график» состоит из нескольких областей:&lt;br /&gt;
&lt;br /&gt;
*область осей Х, Y;&lt;br /&gt;
*область легенды, содержащей список кривых и их параметры (цвет кривой, наименование кривой, текущее значение, время последнего зарегистрированного значения);&lt;br /&gt;
*область вывода данных.&lt;br /&gt;
&lt;br /&gt;
На виджете имеются несколько областей, содержащих кнопки-пиктограммы управления внешним видом графика (см. Рисунок 28):&lt;br /&gt;
&lt;br /&gt;
#область пиктограмм графика;&lt;br /&gt;
#область пиктограмм оси времени (X);&lt;br /&gt;
#область пиктограмм оси значений (Y);&lt;br /&gt;
#область легенды.&lt;br /&gt;
&lt;br /&gt;
В области пиктограмм графика слева направо расположены следующие кнопки-пиктограммы:&lt;br /&gt;
&lt;br /&gt;
* кнопка переключения режима отображения точек на всех кривых;&lt;br /&gt;
* кнопка переключения видимости легенды;&lt;br /&gt;
*кнопка включения режима визирной линии.&lt;br /&gt;
&lt;br /&gt;
В области пиктограмм оси времени (X) слева направо расположены следующие кнопки-пиктограммы:&lt;br /&gt;
&lt;br /&gt;
*кнопка открытия окна выбора интервала времени для оси Х, текст кнопки отображает текущий выбранный интервал, например: 5М – 5 минут, 6Ч – 6 часов, 30М – 30 минут;&lt;br /&gt;
*кнопка-индикатор включения следящего режима.&lt;br /&gt;
&lt;br /&gt;
В области пиктограмм оси значений (Y) расположена кнопка-пиктограмма «A» – кнопка переключения режима автоматического масштабирования значений.&lt;br /&gt;
&lt;br /&gt;
=====Легенда=====&lt;br /&gt;
[[Файл:AgavaPLC–Легенда с четырьмя выключенными параметрами.png|мини|Рисунок 31 – Легенда с четырьмя выключенными параметрами]]&lt;br /&gt;
Легенда – специальная область в нижней части экрана архива, предназначенная для отображения параметров (наименование, текущее значение и т. д.) выводимых графиков в виде таблицы. Для ознакомления с примерным видом легенды см. Рисунок 31. Информация о каждом сигнале в легенде выводится в несколько колонок:&lt;br /&gt;
&lt;br /&gt;
*«Цвет» – индицирует цвет, которым выводится соответствующая кривая на графике, колонка «Цвет» позволяет нажатием переключать видимость соответствующей кривой на графике (см. Рисунок 29). Также в колонке &amp;quot;Цвет&amp;quot; отображается номер пера, которым выводится кривая параметра на графике;&lt;br /&gt;
* «Имя» («Наименование») – содержит наименование параметра;&lt;br /&gt;
*«Время» – содержит время последнего зарегистрированного значения параметра;&lt;br /&gt;
*«Значение» – содержит последнее зарегистрированное значение параметра.&lt;br /&gt;
&lt;br /&gt;
=====Режимы просмотра графиков=====&lt;br /&gt;
Пользователю доступно два режима просмотра графиков:&lt;br /&gt;
&lt;br /&gt;
*следящий режим;&lt;br /&gt;
*режим просмотра истории.&lt;br /&gt;
&lt;br /&gt;
В следящем режиме на графике всегда отображаются актуальные значения параметров, тренд периодически дочитывает поступившие данные из базы и обновляет графики. &lt;br /&gt;
&lt;br /&gt;
В режиме просмотра истории на графике отображаются исторические значения параметров. Просмотр истории технологического процесса осуществляется с помощью кнопок перемещения по осям и кнопок изменения масштаба.&lt;br /&gt;
&lt;br /&gt;
Режим просмотра истории включается автоматически при прокрутке графика назад по времени.&lt;br /&gt;
&lt;br /&gt;
=====Визирная линия=====&lt;br /&gt;
[[Файл:AgavaPLC–График в режиме просмотра истории с установленной визирной линией.png|мини|Рисунок 32 – График в режиме просмотра истории с установленной визирной линией]]&lt;br /&gt;
Для просмотра значений параметров в нужный момент времени служит визирная линия, отображаемая на графике как вертикальная линия.&lt;br /&gt;
&lt;br /&gt;
При щелчке левой кнопкой мыши (ЛКМ) в области графиков визирная линия будет отображена в выбранном месте графика.&lt;br /&gt;
&lt;br /&gt;
В точке пересечения визирной линии и кривых параметров отображаются значения этих параметров. Также в нижней части области графиков, возле оси времени, визирная линия отображает время.&lt;br /&gt;
&lt;br /&gt;
====Виджет «График кусочно-линейной функции»====&lt;br /&gt;
Виджет предназначен для отображения графика зависимости двух параметров, расположенном на осях X и Y.&lt;br /&gt;
[[Файл:AgavaPLC–Виджет «График кусочно-линейной функции». Области кнопок-пиктограмм..png|мини|Рисунок 33 – Виджет «График кусочно-линейной функции». Области кнопок-пиктограмм.]]&lt;br /&gt;
Виджет состоит из нескольких областей:&lt;br /&gt;
&lt;br /&gt;
*область осей Х, Y;&lt;br /&gt;
*область легенды, содержащей список кривых и их параметры (цвет кривой, наименование кривой, текущее значение, время последнего зарегистрированного значения);&lt;br /&gt;
*область вывода графика.&lt;br /&gt;
&lt;br /&gt;
На области вывода графика виджета имеются несколько областей, содержащих кнопки-пиктограммы управления внешним видом графика (см. Рисунок 33):&lt;br /&gt;
&lt;br /&gt;
#Область пиктограмм графика.&lt;br /&gt;
#Область пиктограмм оси первого параметра (X).&lt;br /&gt;
#Область пиктограмм оси второго параметра (Y).&lt;br /&gt;
&lt;br /&gt;
В области пиктограмм графика расположены следующие кнопки-пиктограммы:&lt;br /&gt;
&lt;br /&gt;
*кнопка переключения режима отображения точек на всех кривых;&lt;br /&gt;
*кнопка переключения видимости легенды;&lt;br /&gt;
*кнопка включения режима визирной линии.&lt;br /&gt;
&lt;br /&gt;
В области пиктограмм оси первого (X) и второго (Y) параметров расположены кнопки-пиктограммы «А» – кнопка переключения режима автоматического масштабирования значений.[[Файл:AgavaPLC–Виджет &amp;quot;Список событий&amp;quot;.png|мини|Рисунок 34 – Виджет &amp;quot;Список событий&amp;quot;|ссылка=Файл:AgavaPLC–Виджет_%22Список_событий%22.png]]&lt;br /&gt;
====Виджет «Список событий»====&lt;br /&gt;
[[Файл:AgavaPLC–Окно выбора интервала.png|мини|Рисунок 35 – Окно выбора интервала]]Виджет предназначен для отображения регистрируемых событий в работе.&lt;br /&gt;
&lt;br /&gt;
В верхней части виджета расположена панель управления (1).&lt;br /&gt;
&lt;br /&gt;
Панель управления содержит органы управления журналом:&lt;br /&gt;
&lt;br /&gt;
*кнопка отображения фильтра событий;&lt;br /&gt;
*кнопка включения следящего режима журнала;&lt;br /&gt;
*кнопка изменения интервала на один день назад;&lt;br /&gt;
*кнопка-индикатор выбора интервала, за который отображаются события;&lt;br /&gt;
*кнопка изменения интервала на один день вперед;&lt;br /&gt;
*кнопка вызова окна со списком активных тревог.&lt;br /&gt;
&lt;br /&gt;
Ниже панели управления, в основном поле экрана, расположена таблица, содержащая зарегистрированные события.&lt;br /&gt;
&lt;br /&gt;
Заголовок таблицы позволяет изменять порядок столбцов и включать сортировку по столбцам. Например, возможно включение сортировки событий сначала по времени, затем по группе. Заголовок таблицы имеет возможность отключения / включения отображения любого столбца.&lt;br /&gt;
&lt;br /&gt;
При большом количестве записей в правой части таблицы появляется полоса прокрутки, позволяющая пролистывать список событий.&lt;br /&gt;
&lt;br /&gt;
Нажатие на кнопку-индикатор выбора интервала вызывает окно выбора интервала (см. Рисунок 35):[[Файл:AgavaPLC–Окно &amp;quot;Фильтр&amp;quot;.png|мини|Рисунок 36 – Окно &amp;quot;Фильтр&amp;quot;|ссылка=Файл:AgavaPLC–Окно_%22Фильтр%22.png]]После выбора нужного интервала для сохранения выбора необходимо нажать кнопку «ОК». После сохранения будут отображены зарегистрированные события за выбранный интервал.&lt;br /&gt;
Нажатие на кнопку отображения окна фильтра вызывает соответствующее окно. Окно фильтра позволяет изменить содержимое основного окна журнала событий путем выбора групп и подгрупп событий, перечисленных в окне фильтра (см. Рисунок 36).&lt;br /&gt;
&lt;br /&gt;
После выбора нужных групп и подгрупп для сохранения выбора необходимо нажать кнопку «ОК». После сохранения будут отображены зарегистрированные события, принадлежащих выбранным группам.&lt;br /&gt;
&lt;br /&gt;
====Виджет «Ввод значения»====&lt;br /&gt;
Виджет «Ввод значения» предназначен для отображения значения привязанного сигнала и его редактирования.&lt;br /&gt;
[[Файл:AgavaPLC–Виджет «Ввод значения» с отображением экранной цифровой клавиатуры.png|мини|Рисунок 37 – Виджет «Ввод значения» с отображением экранной цифровой клавиатуры|212x212пкс]]&lt;br /&gt;
После выбора узла для чтения/записи и соответствующего типа значения необходимо выбрать нужный тип ввода в разделе «Оформление».&lt;br /&gt;
&lt;br /&gt;
Доступны следующие типы ввода:&lt;br /&gt;
&lt;br /&gt;
*кнопки изменения – при нажатии на виджет появляются кнопки увеличения и уменьшения на заданный шаг изменения;&lt;br /&gt;
*кнопка редактирования – при нажатии на виджет появляется кнопка, при клике на которую открывается экранная цифровая клавиатура;&lt;br /&gt;
&lt;br /&gt;
Виджет имеет возможность проверки вводимых значений, при активации которой запись будет осуществляться только тогда, когда записываемое значение будет находиться в диапазоне между заданными минимальным и максимальными значениями.&lt;br /&gt;
&lt;br /&gt;
====Виджет «Выбор значения из списка»====&lt;br /&gt;
[[Файл:AgavaPLC–Виджет «Выбор значения из списка».png|мини|Рисунок 38 – Виджет «Выбор значения из списка»]]&lt;br /&gt;
Виджет «Выбор значения из списка» предназначен для отображения значения привязанного сигнала и его изменения в удобном для пользователя текстовом виде (см. Рисунок 37).&lt;br /&gt;
&lt;br /&gt;
С помощью свойства «Список сопоставлений» задается соответствие между значением сигнала и выводимой в виджете строкой.&lt;br /&gt;
&lt;br /&gt;
При нажатии на кнопку в правой части виджета отображается список всех сопоставлений. При выборе нужного элемента в списке в установленный узел производится запись нового значения.&lt;br /&gt;
&lt;br /&gt;
====Виджет «Флаг»====&lt;br /&gt;
[[Файл:AgavaPLC–Варианты внешнего вида виджета «Флаг».png|мини|Рисунок 39 – Варианты внешнего вида виджета «Флаг»]]&lt;br /&gt;
Виджет «Флаг» предназначен для отображения значения и изменения булевой переменной (true/false). Состояние true отображается в виде галочки (см. Рисунок 38).&lt;br /&gt;
&lt;br /&gt;
При нажатии на виджет значение переменной изменяется на противоположное.&lt;br /&gt;
&lt;br /&gt;
В случае, если флаг необходимо использовать только для отображения информации, поставьте галочку в свойстве «Отключен»&lt;br /&gt;
&lt;br /&gt;
====Виджет «Отчет»====&lt;br /&gt;
[[Файл:AgavaPLC–Виджет «Отчет» в режиме отображения сформированного отчета.png|мини|Рисунок 40 – Виджет «Отчет» в режиме отображения сформированного отчета]]&lt;br /&gt;
Виджет «Отчет» предназначен для формирования отчетов по заранее спроектированному макету.&lt;br /&gt;
&lt;br /&gt;
Подробный порядок создания и редактирования отчетов приведен в разделе [[#Отчеты]].&lt;br /&gt;
[[Файл:AgavaPLC–Окно выбора интервала отчета.png|мини|Рисунок 41 – Окно выбора интервала отчета]]&lt;br /&gt;
В верхней части виджета размещена панель управления, содержащая кнопки вызова команд:&lt;br /&gt;
&lt;br /&gt;
* печать сформированного отчета на установленном в системе принтере;&lt;br /&gt;
*сохранение сформированного отчета в файле формата PDF;&lt;br /&gt;
*переход к предыдущей странице отчета;&lt;br /&gt;
*переход к следующей странице отчета;&lt;br /&gt;
*масштабирование экрана по ширине листа отчета;&lt;br /&gt;
*масштабирование экрана по высоте листа отчета.&lt;br /&gt;
&lt;br /&gt;
При формировании отчета для изменения интервала времени, за который будет формироваться отчет, необходимо на панели управления щелкнуть кнопку выбора интервала (на ней отображается текущий выбранный интервал, например, «Начало суток без смещения – Конец суток без смещения»). Далее появится окно «Интервал», в котором можно выбрать начало и конец интервала (см. Рисунок 41). &lt;br /&gt;
&lt;br /&gt;
В качестве начала и конца интервала можно выбрать как конкретную дату по календарю, так относительную, например, «Начало дня», &amp;quot;Конец недели&amp;quot;. После выбора желаемого интервала необходимо нажать кнопку «ОК».&lt;br /&gt;
&lt;br /&gt;
Выбранный интервал отобразится на панели управления отчетом. Для формирования отчета за выбранный интервал необходимо нажать кнопку «Сформировать отчет». Через некоторое время, после загрузки данных из БД и их обработки, экран обновится и сформированный отчет за выбранный интервал будет отображен.&lt;br /&gt;
&lt;br /&gt;
{{Шаблон:Действия AgavaSCADA/AgavaPLC}}&lt;br /&gt;
&lt;br /&gt;
==Система тревог==&lt;br /&gt;
Система тревог предназначена для оповещения пользователя об обнаруженных нарушениях.&lt;br /&gt;
&lt;br /&gt;
Система содержит два типа узлов:&lt;br /&gt;
&lt;br /&gt;
*Группа событий.&lt;br /&gt;
*Контроллер событий.&lt;br /&gt;
&lt;br /&gt;
===Группа событий===&lt;br /&gt;
Группа событий – узел, предназначенный для взаимодействия с виджетом «Список событий». Группы событий позволяют группировать события по какому-то признаку, например по уровню тревоги (авария, предупреждение, квитирование и т.д.), технологическому участку и т.д.&lt;br /&gt;
&lt;br /&gt;
Для каждой группы можно выбрать свой цвет шрифта и фона, которые будут использоваться для вывода событий, принадлежащих этой группе в виджете &amp;quot;Список событий&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
В свойстве «Описание» группы событий указывается текст, который будет отображаться в фильтре списка событий.&lt;br /&gt;
&lt;br /&gt;
===Монитор событий===&lt;br /&gt;
Монитор событий (ранее - Контроллер событий) – узел, реализующий логику проверки соответствия выбранных сигналов контролируемым условиям. Контроллеры событий выполняют всю работу по проверке значений контролируемых параметров и выполнению соответствующих действий.&lt;br /&gt;
&lt;br /&gt;
Монитор событий проверяет значения заданных узлов на соответствие заданным условиям и при их совпадении выполняет заданные действия.&lt;br /&gt;
&lt;br /&gt;
В качестве действий можно указать не только действие &amp;quot;Создание события&amp;quot;, но и другие (см. раздел [[#Действия]]).&lt;br /&gt;
[[Файл:AgavaPLC-Cистема тревог.png|мини|Cистема тревог]]&lt;br /&gt;
&lt;br /&gt;
===Порядок настройки системы===&lt;br /&gt;
Порядок настройки системы тревог следующий:&lt;br /&gt;
#Добавить в проект систему тревог. Для этого нажать ПКМ по узлу «Станция» в дереве проекта, затем выбрать «Добавить узел» - «Система» - «Система тревог».&lt;br /&gt;
#Добавить узел «События» в систему тревог. Для этого нажать ПКМ по системе тревог в дереве проекта, затем выбрать «Добавить узел» - «Группа» - «События». При необходимости настроить цвет шрифта и фона, которые будут отображаться у события в окне тревог или журнале.&lt;br /&gt;
#Добавить нужные [[Узлы проекта AgavaSCADA/AgavaPLC#.D0.93.D1.80.D1.83.D0.BF.D0.BF.D0.B0 .D1.81.D0.BE.D0.B1.D1.8B.D1.82.D0.B8.D0.B9|группы событий]] в узел «События». Для этого нажать ПКМ по узлу «События» в дереве проекта, затем выбрать «Добавить узел» - «Группа событий».&lt;br /&gt;
#Добавить [[Узлы проекта AgavaSCADA/AgavaPLC#.D0.9A.D0.BE.D0.BD.D1.82.D1.80.D0.BE.D0.BB.D0.BB.D0.B5.D1.80 .D1.81.D0.BE.D0.B1.D1.8B.D1.82.D0.B8.D0.B9|контроллеры событий]] в систему тревог. Для этого нажать ПКМ по системе тревог в дереве проекта, затем выбрать «Добавить узел» - «Контроллер событий».&lt;br /&gt;
#Добавить в свойство «Сигналы» контроллеров событий узлы, состояние которых необходимо контролировать.&lt;br /&gt;
#Задать для этих узлов контролируемые условия в соответствующем свойстве контроллера событий.&lt;br /&gt;
#Настроить [[Узлы проекта AgavaSCADA/AgavaPLC#.D0.94.D0.B5.D0.B9.D1.81.D1.82.D0.B2.D0.B8.D1.8F|действия]], которые будут выполняться при выполнении контролируемого условия. Для вывода аварий, предупреждений или информационных сообщений необходимо добавить действие «Создание события».&lt;br /&gt;
# Настроить действие «Создание события». В его свойстве «Группа событий» указать группу из созданных в пункте 2. Ввести тексты сообщения активации и деактивации (при необходимости), указать уровень события. Теперь, при срабатывании контролируемого условия, будет появляться окно тревог с сообщением активации.&lt;br /&gt;
&lt;br /&gt;
== Система архивирования==&lt;br /&gt;
Система архивирования предназначена для управления процессом сохранения значений параметров в базы данных. Параметры, сохраненные в базу данных, могут использоваться для построения графиков параметров и генерации отчетов.&lt;br /&gt;
&lt;br /&gt;
Архивация параметров производится с помощью архиваторов. Архиваторы SQLite и PostgreSQL могут выполнять [[Узлы проекта AgavaSCADA/AgavaPLC#Прореживание данных|прореживание данных]].&lt;br /&gt;
[[Файл:AgavaPLC-Настройка архиватора.png|мини|505x505пкс|Настройка архиватора]]&lt;br /&gt;
&lt;br /&gt;
===Порядок настройки системы===&lt;br /&gt;
Для сохранения истории изменения значений параметров в БД необходимо выполнить следующие действия: &lt;br /&gt;
&lt;br /&gt;
#Добавить в проект систему архивации. Для этого нажать ПКМ по узлу «Станция» в дереве проекта, затем выбрать «Добавить узел» - «Система» - «Система архивации».&lt;br /&gt;
#Добавить в систему архивации архиватор. Для этого нажать ПКМ по узлу «Система архивации» в дереве проекта, затем выбрать «Добавить узел» - «Архиватор в БД SQLite».&lt;br /&gt;
#Настроить параметры архиватора, такие как: путь до файла БД, интервал архивирования (как часто система архивации будет опрашивать значение параметра), интервал сохранения БД на диск (как часто эти значения будут записываться в постоянную память), разбиение БД (будет ли система архивации создавать новый файл БД каждые сутки), период хранения и режим выдачи значений для построения графика (сохраняемые значения будут обновляться с частотой интервала архивирования, а сохраненные - с частотой интервала сохранения).&lt;br /&gt;
#Добавить параметры в коннекторы база данных. Для этого необходимо открыть свойство архиватора «Коннекторы БД», выбрать «Создать новый» - «Коннектор БД». После этого нужно нажать по добавленному коннектору, открыть его свойство «Сигналы» и добавить параметр, значение которого необходимо сохранять в БД.&lt;br /&gt;
&lt;br /&gt;
=== Архиватор SQLite===&lt;br /&gt;
Архиватор SQLite предназначен для сохранения значений параметров в БД формата SQLite.&lt;br /&gt;
&lt;br /&gt;
Для извлечения и просмотра баз данных формата SQLite с устройств может использоваться программа «[[Архиватор]]».&lt;br /&gt;
&lt;br /&gt;
====Свойства узла &amp;quot;Архиватор SQLite&amp;quot;====&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Наименование свойства&lt;br /&gt;
!Идентификатор&lt;br /&gt;
!Тип&lt;br /&gt;
!Доступ&lt;br /&gt;
!Описание&lt;br /&gt;
|-&lt;br /&gt;
| Путь до файла БД&lt;br /&gt;
|FilePath&lt;br /&gt;
|STRING&lt;br /&gt;
|Чтение / запись&lt;br /&gt;
|Путь до файла БД. Абсолютный или относительный.&lt;br /&gt;
|-&lt;br /&gt;
|Интервал архивирования&lt;br /&gt;
|Interval&lt;br /&gt;
|INT&lt;br /&gt;
|Чтение / запись&lt;br /&gt;
|Интервал архивирования, мс.&lt;br /&gt;
|-&lt;br /&gt;
|Период хранения&lt;br /&gt;
|Retention&lt;br /&gt;
|INT&lt;br /&gt;
|Чтение / запись&lt;br /&gt;
|Период хранения, дней.&lt;br /&gt;
|-&lt;br /&gt;
|Разбиение БД&lt;br /&gt;
|DBSplitting&lt;br /&gt;
|BOOL&lt;br /&gt;
|Чтение / запись&lt;br /&gt;
|Разбиение БД на файлы. При включении база данных будет разделяться на отдельныйе файлы, содержащие данные за одни сутки.&lt;br /&gt;
|-&lt;br /&gt;
|Интервал сохранения БД на диск&lt;br /&gt;
|StoringInterval&lt;br /&gt;
|INT&lt;br /&gt;
|Чтение / запись&lt;br /&gt;
|Интервал сохранения БД на диск, мс.&lt;br /&gt;
|-&lt;br /&gt;
|Режим выдачи значений&lt;br /&gt;
|ValueReturnMode&lt;br /&gt;
|ENUM&lt;br /&gt;
|Чтение / запись&lt;br /&gt;
|Режим выдачи значений. Режим &amp;quot;Сохраняемые в БД&amp;quot; - данные выдаются сразу после получения архиватором, возможно до фактического сохранения в БД. Режим &amp;quot;Сохраненные в БД&amp;quot; - данные выдаются только после фактической записи в БД на диск.&lt;br /&gt;
|-&lt;br /&gt;
|Коннекторы БД&lt;br /&gt;
|Signals&lt;br /&gt;
|NODESARRAY&lt;br /&gt;
|Чтение / запись&lt;br /&gt;
|Список коннекторов, содержащих сигналы для архивирования.&lt;br /&gt;
|-&lt;br /&gt;
|Текущий размер БД&lt;br /&gt;
|DBCurrentSize&lt;br /&gt;
|INT&lt;br /&gt;
|Только чтение&lt;br /&gt;
|Текущий размер БД, Мб.&lt;br /&gt;
|-&lt;br /&gt;
|Максимальный размер БД&lt;br /&gt;
|DBMaxSize&lt;br /&gt;
|INT&lt;br /&gt;
|Только чтение&lt;br /&gt;
|Максимальный размер БД, Мб.&lt;br /&gt;
|-&lt;br /&gt;
|Состояние БД&lt;br /&gt;
|DBStatus&lt;br /&gt;
|INT&lt;br /&gt;
|Только чтение&lt;br /&gt;
|Состояние БД.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Архиватор PostgreSQL ===&lt;br /&gt;
Архиватор PostgreSQL предназначен для сохранения значений параметров в базы данных под управлением сервера PostgreSQL.&lt;br /&gt;
&lt;br /&gt;
=== Прореживание данных ===&lt;br /&gt;
Прореживание данных (data thinning) — это процесс фильтрации и уменьшения количества точек данных, сохраняемых в архиве. Вместо того чтобы записывать каждое полученное значение, система анализирует поток данных и сохраняет только те значения, которые представляют значимое изменение.&lt;br /&gt;
&lt;br /&gt;
'''Назначение прореживания'''&lt;br /&gt;
&lt;br /&gt;
Поток данных от датчиков и устройств зачастую содержит незначительные колебания (шум) или избыточные данные, когда параметр не меняется. Прореживание решает следующие задачи:&lt;br /&gt;
&lt;br /&gt;
* '''Снижение нагрузки на архив''': Меньшее количество записей означает более быструю работу базы данных.&lt;br /&gt;
* '''Ускорение отображения графиков''': Нужно обрабатывать меньше точек для построения трендов.&lt;br /&gt;
* '''Сохранение только значимых изменений''': Система отфильтровывает шум и оставляет только те изменения, которые важны для анализа технологического процесса.&lt;br /&gt;
'''Общий принцип работы'''&lt;br /&gt;
&lt;br /&gt;
Алгоритм прореживания работает по простому принципу:&lt;br /&gt;
&lt;br /&gt;
# SCADA-система получает новое значение от источника данных.&lt;br /&gt;
# Она сравнивает это значение с последним, которое было сохранено в архив.&lt;br /&gt;
# Если изменение превышает заранее настроенный '''допуск''' (tolerance), новое значение сохраняется.&lt;br /&gt;
# Если изменение меньше допуска, значение пропускается.&lt;br /&gt;
&lt;br /&gt;
Кроме того, существует параметр &amp;quot;'''Период обязательной записи&amp;quot;'''. Если с момента последней записи прошло больше времени, чем указано в этом параметре, новое значение будет сохранено '''независимо от его изменения'''. Это гарантирует, что записи в архив будут сохраняться не реже заданной периодичности, даже если сигнал не меняется. Ключевая идея: &amp;quot;'''Сохраняем только то, что заметно изменилось, но не реже, чем задано&amp;quot;.'''&lt;br /&gt;
&lt;br /&gt;
'''Как подобрать допуск?'''&lt;br /&gt;
&lt;br /&gt;
* '''Слишком малый допуск''' приведёт к записи избыточных данных, и архив будет быстро расти.&lt;br /&gt;
* '''Слишком большой допуск''' может привести к потере мелких, но значимых изменений в сигнале.&lt;br /&gt;
&lt;br /&gt;
Выбор правильного допуска — это компромисс между детализацией данных и размером архива.&lt;br /&gt;
==== Типы алгоритмов прореживания ====&lt;br /&gt;
В системе доступны несколько алгоритмов, которые определяют, как именно вычисляется «значимость» изменения. Выбор алгоритма зависит от характера сигнала и требований к точности данных.&lt;br /&gt;
&lt;br /&gt;
# [[Узлы проекта AgavaSCADA/AgavaPLC#Абсолютный допуск|Абсолютный допуск]]&lt;br /&gt;
# [[Узлы проекта AgavaSCADA/AgavaPLC#Процент от последнего значения|Процент от последнего значения]]&lt;br /&gt;
# [[Узлы проекта AgavaSCADA/AgavaPLC#Процент от среднего N последних|Процент от среднего N последних]]&lt;br /&gt;
# [[Узлы проекта AgavaSCADA/AgavaPLC#Процент от среднего по временному окну|Процент от среднего по временному окну]]&lt;br /&gt;
&lt;br /&gt;
'''Обозначения и определения'''&lt;br /&gt;
&lt;br /&gt;
В дальнейшем используются следующие обозначения (для числовых сигналов):&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;math&amp;gt;x_{in}&amp;lt;/math&amp;gt;​ — текущее измерение сигнала, полученное от источника данных к моменту обработки (кандидат на запись).&lt;br /&gt;
* &amp;lt;math&amp;gt;x_{ref}&amp;lt;/math&amp;gt; — последнее сохранённое числовое значение сигнала в архиве на момент обработки (опорное значение).&lt;br /&gt;
* &amp;lt;math&amp;gt;|\Delta| = |x_{in} - x_{ref}|&amp;lt;/math&amp;gt; — абсолютная величина изменения между текущим измерением и последним сохранённым значением.&lt;br /&gt;
* &amp;lt;math&amp;gt;\bar{x}_N&amp;lt;/math&amp;gt;​ — арифметическое среднее последних &amp;lt;math&amp;gt;N&amp;lt;/math&amp;gt; сохранённых числовых значений.&lt;br /&gt;
* &amp;lt;math&amp;gt;\bar{x}_T&amp;lt;/math&amp;gt;​ — среднее всех сохранённых числовых значений, чьи метки времени попадают в временное окно длительности &amp;lt;math&amp;gt;T&amp;lt;/math&amp;gt; миллисекунд.&lt;br /&gt;
* &amp;lt;math&amp;gt;\varepsilon&amp;lt;/math&amp;gt; — машинная точность для чисел двойной точности; используется для формальной проверки «близости к нулю».&lt;br /&gt;
* &amp;lt;math&amp;gt;tolerance&amp;lt;/math&amp;gt; — допуск: абсолютный (в физических единицах) или относительный (в процентах), в зависимости от выбранного алгоритма.&lt;br /&gt;
&lt;br /&gt;
'''Настройки в Свойствах архиватора, общие для всех типов прореживания'''&lt;br /&gt;
&lt;br /&gt;
* '''Включить прореживание''' — включает/выключает применение алгоритма прореживания при записи значений. При выключении все поступающие значения сохраняются без фильтрации.&lt;br /&gt;
* '''Тип допуска''' — выбирает алгоритм сравнения.&lt;br /&gt;
* '''Период обязательной записи (мс)''' — максимальный допустимый промежуток между двумя записями одного сигнала. Если за это время значимого изменения не произошло, ближайшее поступившее значение будет записано принудительно. 0 — отключить принудительную запись.&lt;br /&gt;
&lt;br /&gt;
===== Абсолютный допуск =====&lt;br /&gt;
'''Принцип:'''&lt;br /&gt;
&lt;br /&gt;
Новое значение сохраняется, если модуль изменения больше установленного порога в физических единицах.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math display=&amp;quot;block&amp;quot;&amp;gt;|\Delta| &amp;gt; tolerance&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Когда использовать:'''&lt;br /&gt;
&lt;br /&gt;
* Если диапазон сигнала стабилен и известен заранее.&lt;br /&gt;
* Для параметров вроде температуры, давления, уровня жидкости, где фиксированное изменение имеет одинаковую интерпретацию по всей шкале.&lt;br /&gt;
&lt;br /&gt;
'''Преимущества:'''&lt;br /&gt;
&lt;br /&gt;
* Обеспечивает предсказуемое и детерминированное поведение независимо от текущего масштаба значения.&lt;br /&gt;
* Не требует накопления или хранения дополнительных данных (окон/истории), вычислительно прост.&lt;br /&gt;
* Удобен при наличии нормативно заданных пределов точности в физических единицах.&lt;br /&gt;
&lt;br /&gt;
'''Ограничения:'''&lt;br /&gt;
&lt;br /&gt;
* Не масштабируется на широкий динамический диапазон: один и тот же порог может быть слишком грубым для малых значений и слишком чувствительным для больших.&lt;br /&gt;
* Требует аккуратного подбора порога под единицы измерения и разрешение датчика; при неверной калибровке возможны либо избыточные записи, либо потеря значимых мелких изменений.&lt;br /&gt;
* Не учитывает относительный контекст изменения (например, 1 единица при значении 10 и при значении 10 000 трактуется одинаково).&lt;br /&gt;
&lt;br /&gt;
'''Настройки в Свойствах архиватора:'''&lt;br /&gt;
&lt;br /&gt;
* '''Допуск''' — абсолютный порог в физических единицах сигнала. Определяет значение &amp;lt;math&amp;gt;tolerance&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
===== Процент от последнего значения =====&lt;br /&gt;
'''Принцип:'''&lt;br /&gt;
&lt;br /&gt;
Новое значение сохраняется, если относительное изменение относительно последнего сохранённого превышает заданный процент.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math display=&amp;quot;block&amp;quot;&amp;gt;\frac{|\Delta|}{|x_{ref}|} \times{100} &amp;gt; tolerance&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Когда использовать:'''&lt;br /&gt;
&lt;br /&gt;
* Для сигналов, где важна относительная динамика, а не абсолютные величины.&lt;br /&gt;
* Для показателей с большим динамическим диапазоном, где относительная точность должна быть сопоставима на всех уровнях.&lt;br /&gt;
&lt;br /&gt;
'''Преимущества:'''&lt;br /&gt;
&lt;br /&gt;
* Масштабируемость: одинаково интерпретирует относительные изменения на низких и высоких уровнях сигнала.&lt;br /&gt;
* Не требует хранения окна значений; использует только последнее сохранённое значение, поэтому вычислительно лёгок.&lt;br /&gt;
* Быстро и корректно реагирует на пропорциональные изменения процесса (проценты), поддерживая заданную относительную чувствительность.&lt;br /&gt;
&lt;br /&gt;
'''Ограничения:'''&lt;br /&gt;
&lt;br /&gt;
* В окрестности нуля относительная метрика становится нестабильной (см. примечание).&lt;br /&gt;
* При малых базовых значениях возможна повышенная чувствительность к шуму и микроколебаниям.&lt;br /&gt;
* Не подавляет высокочастотный шум сам по себе: при необходимости сочетать с обязательной записью по времени и корректной настройкой допуска.&lt;br /&gt;
&lt;br /&gt;
'''Настройки в Свойствах архиватора:'''&lt;br /&gt;
&lt;br /&gt;
* '''Допуск''' — относительный порог в процентах. Определяет значение &amp;lt;math&amp;gt;tolerance&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
===== Процент от среднего N последних =====&lt;br /&gt;
'''Принцип:'''&lt;br /&gt;
&lt;br /&gt;
Новое значение сохраняется, если изменение больше заданного процента от среднего по последним N сохранённым значениям.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math display=&amp;quot;block&amp;quot;&amp;gt;\frac{|\Delta|}{|\bar{x}_{N}|} \times{100} &amp;gt; tolerance&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Когда использовать:'''&lt;br /&gt;
&lt;br /&gt;
* Для сигналов с постоянным шумом или пульсациями, когда важно снижать чувствительность к случайным отклонениям.&lt;br /&gt;
* Для процессов с умеренной динамикой, где требуется устойчивость к «зубчатым» колебаниям.&lt;br /&gt;
&lt;br /&gt;
'''Преимущества:'''&lt;br /&gt;
&lt;br /&gt;
* Снижает чувствительность к высокочастотному шуму за счёт опоры на усреднение; сокращает объём записей на стационарных участках.&lt;br /&gt;
* Гибко настраивается параметром &amp;lt;math&amp;gt;N&amp;lt;/math&amp;gt;: увеличение окна повышает устойчивость, уменьшение — повышает чувствительность и снижает задержку реакции.&lt;br /&gt;
&lt;br /&gt;
'''Ограничения:'''&lt;br /&gt;
&lt;br /&gt;
* В окрестности нуля относительная метрика становится нестабильной (см. примечание).&lt;br /&gt;
&lt;br /&gt;
* Инерционность: при резких скачках возможна задержка фиксации изменения, особенно при большом &amp;lt;math&amp;gt;N&amp;lt;/math&amp;gt;.&lt;br /&gt;
* Усреднение может «сглаживать» и не фиксировать кратковременные, но важные пики; не подходит для задач, критичных к коротким экстремумам.&lt;br /&gt;
* Предполагает относительно стабильную частоту выборок; при сильно переменной частоте эффективная «временная» ширина окна становится непредсказуемой.&lt;br /&gt;
&lt;br /&gt;
'''Настройки в Свойствах архиватора:'''&lt;br /&gt;
&lt;br /&gt;
* '''Допуск''' — относительный порог в процентах. Определяет значение &amp;lt;math&amp;gt;tolerance&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
* '''Размер окна среднего (&amp;lt;math&amp;gt;N&amp;lt;/math&amp;gt;)''' — число последних сохранённых значений, по которым считается среднее. Большее &amp;lt;math&amp;gt;N&amp;lt;/math&amp;gt; повышает устойчивость к шуму, но увеличивает инерционность реакции.&lt;br /&gt;
&lt;br /&gt;
===== Процент от среднего по временному окну =====&lt;br /&gt;
'''Принцип:'''&lt;br /&gt;
&lt;br /&gt;
Похож на предыдущий, но среднее считается не по количеству точек, а по всем значениям за заданный интервал времени.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math display=&amp;quot;block&amp;quot;&amp;gt;\frac{|\Delta|}{|\bar{x}_{T}|} \times{100} &amp;gt; tolerance&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Когда использовать:'''&lt;br /&gt;
&lt;br /&gt;
* Для сигналов с непостоянной частотой измерений (событийные, неравномерные потоки).&lt;br /&gt;
* В случаях, когда важно учитывать реальную временную протяжённость усреднения независимо от плотности измерений.&lt;br /&gt;
&lt;br /&gt;
'''Преимущества:'''&lt;br /&gt;
&lt;br /&gt;
* Корректно работает при переменной частоте выборок: окно фиксируется по времени, а не по числу точек.&lt;br /&gt;
* Более реалистично оценивает тренд во времени на участках с неравномерными измерениями.&lt;br /&gt;
* Управляемый компромисс между подавлением шума и чувствительностью за счёт выбора длительности окна.&lt;br /&gt;
&lt;br /&gt;
'''Ограничения:'''&lt;br /&gt;
&lt;br /&gt;
* В окрестности нуля относительная метрика становится нестабильной (см. примечание).&lt;br /&gt;
&lt;br /&gt;
* Более высокая ресурсоёмкость: требуется хранить и периодически «очищать» значения по условию выхода из временного окна; потребление памяти зависит от фактической скорости поступления данных.&lt;br /&gt;
* Инерционность, присущая усреднению: возможна задержка фиксации коротких, но значимых пиковых изменений.&lt;br /&gt;
* Критичен выбор длительности окна: слишком малое окно даёт мало подавления шума, слишком большое — чрезмерную инерцию и риск пропуска кратких событий.&lt;br /&gt;
&lt;br /&gt;
'''Настройки в Свойствах архиватора:'''&lt;br /&gt;
&lt;br /&gt;
* '''Допуск''' — относительный порог в процентах. Определяет значение &amp;lt;math&amp;gt;tolerance&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
* '''Интервал архивирования''' — длительность временного окна &amp;lt;math&amp;gt;T&amp;lt;/math&amp;gt; (мс), в пределах которого вычисляется среднее. При увеличении &amp;lt;math&amp;gt;T&amp;lt;/math&amp;gt; растёт сглаживание и уменьшается чувствительность к кратким всплескам; при уменьшении — наоборот. Значения, чьи метки времени выходят за пределы окна, автоматически исключаются из расчёта.&lt;br /&gt;
&lt;br /&gt;
===== Примечание к алгоритмам 'Процент от…' =====&lt;br /&gt;
При малых опорных значениях система автоматически переходит в абсолютный режим, чтобы избежать деления на величину, близкую к нулю, и связанных с этим скачков чувствительности. Этот механизм применяется ко всем алгоритмам, использующим относительное сравнение: «Процент от последнего», «Процент от среднего N», «Процент от среднего по временному окну» и обеспечивает стабильность критерия при слабых сигналах.&lt;br /&gt;
&lt;br /&gt;
* Условия входа в режим абсолютного допуска:&lt;br /&gt;
** для «Процента от последнего»: &amp;lt;math&amp;gt;|x_{ref}| &amp;lt; \varepsilon&amp;lt;/math&amp;gt;;&lt;br /&gt;
** для «Процента от среднего N»: &amp;lt;math&amp;gt;|\bar{x}_{N}| &amp;lt; \varepsilon&amp;lt;/math&amp;gt;;&lt;br /&gt;
** для «Процента от среднего по времени»: &amp;lt;math&amp;gt;|\bar{x}_{T}| &amp;lt; \varepsilon&amp;lt;/math&amp;gt;.&lt;br /&gt;
* Критерий в режиме абсолютного допуска: значение фиксируется, если &amp;lt;math&amp;gt;|\Delta| &amp;gt; tolerance&amp;lt;/math&amp;gt;.&lt;br /&gt;
* Условие выхода: как только соответствующая базовая величина (&amp;lt;math&amp;gt;|x_{ref}|&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;|\bar{x}_{N}|&amp;lt;/math&amp;gt; или &amp;lt;math&amp;gt;|\bar{x}_{T}|&amp;lt;/math&amp;gt;) становится &amp;lt;math&amp;gt;\geq \varepsilon&amp;lt;/math&amp;gt;, система автоматически возвращается к относительному критерию.&lt;br /&gt;
* Трактовка &amp;lt;math&amp;gt;tolerance&amp;lt;/math&amp;gt;: используется то же значение настройки; в абсолютном режиме оно интерпретируется как порог в физических единицах сигнала.&lt;br /&gt;
&lt;br /&gt;
===== Сравнение алгоритмов прореживания данных =====&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Критерий&lt;br /&gt;
!Абсолютный&lt;br /&gt;
!% от последнего&lt;br /&gt;
!% от среднего N&lt;br /&gt;
!% от среднего по времени&lt;br /&gt;
|-&lt;br /&gt;
|Единицы допуска&lt;br /&gt;
|Физические&lt;br /&gt;
|Проценты&lt;br /&gt;
|Проценты&lt;br /&gt;
|Проценты&lt;br /&gt;
|-&lt;br /&gt;
|Устойчивость к шуму&lt;br /&gt;
|Низкая&lt;br /&gt;
|Средняя&lt;br /&gt;
|Высокая&lt;br /&gt;
|Высокая&lt;br /&gt;
|-&lt;br /&gt;
|Реакция на резкие скачки&lt;br /&gt;
|Быстрая&lt;br /&gt;
|Быстрая&lt;br /&gt;
|Задержка (при большом N)&lt;br /&gt;
|Задержка&lt;br /&gt;
|-&lt;br /&gt;
|Подходит при переменной частоте&lt;br /&gt;
|Да&lt;br /&gt;
|Да&lt;br /&gt;
|Нет&lt;br /&gt;
|Да&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Система журналирования==&lt;br /&gt;
Система ведения журналов событий предназначена для управления регистрацией и хранением событий. В базу данных записываются все системные события и события, генерируемые с помощью [[Узлы проекта AgavaSCADA/AgavaPLC#.D0.A1.D0.B8.D1.81.D1.82.D0.B5.D0.BC.D0.B0 .D1.82.D1.80.D0.B5.D0.B2.D0.BE.D0.B3|системы тревог]], которые соответствуют выбранному уровню сообщений.&lt;br /&gt;
&lt;br /&gt;
Для ведения журналов используются узлы типа &amp;quot;Логгер&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
===Порядок настройки системы===&lt;br /&gt;
Порядок настройки системы журналирования следующий:&lt;br /&gt;
&lt;br /&gt;
#Добавить и [[Узлы проекта AgavaSCADA/AgavaPLC#.D0.9F.D0.BE.D1.80.D1.8F.D0.B4.D0.BE.D0.BA .D0.BD.D0.B0.D1.81.D1.82.D1.80.D0.BE.D0.B9.D0.BA.D0.B8 .D1.81.D0.B8.D1.81.D1.82.D0.B5.D0.BC.D1.8B|настроить систему тревог]] для генерации событий.&lt;br /&gt;
#Добавить в проект систему журналирования. Для этого нажать ПКМ по узлу «Станция» в дереве проекта, затем выбрать «Добавить узел» - «Система» - «Система журналирования».&lt;br /&gt;
#Добавить в систему журналирования логгер. Для этого нажать ПКМ по узлу «Система архивации» в дереве проекта, затем нажать «Добавить узел» и выбрать нужный логгер.&lt;br /&gt;
#Настроить параметры логгера (см. разделы ниже).&lt;br /&gt;
&lt;br /&gt;
=== Логгер SQLite===&lt;br /&gt;
Логгер SQLite предназначен для сохранения событий, возникающих в ходе исполнения прикладной программы в СУБД SQLite.&lt;br /&gt;
&lt;br /&gt;
Логгер позволяет настраивать срок хранения событий, уровень сохраняемых событий и включать режим разбиения базы данных на отдельные файлы, содержащие данные только за одни сутки.&lt;br /&gt;
&lt;br /&gt;
Информацию о событиях в базе данных, которую ведет логгер, можно просмотреть с помощью виджета &amp;quot;Список событий&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
===Логгер файловый ===&lt;br /&gt;
Логгер файловый предназначен для сохранения журналов событий в текстовых файлах на накопителе. Логгер имеет минимальное количество настроек, и обычно используется для сохранения журнала событий в случае необходимости отладки работы прикладной программы без среды разработки.&lt;br /&gt;
&lt;br /&gt;
===Логгер SMS===&lt;br /&gt;
Логгер SMS предназначен для SMS информирования с помощью субмодуля GRPS или внешнего GPRS модема. &lt;br /&gt;
&lt;br /&gt;
Принцип работы логгера следующий:&lt;br /&gt;
&lt;br /&gt;
#Логгер принимает возникающие события, фильтрует их согласно установленного уровня событий и выбранных групп.&lt;br /&gt;
#События, прошедшие фильтрацию, форматируются согласно установленного шаблона.&lt;br /&gt;
#Отформатированные сообщения отправляются через подключенный модем в виде SMS сообщения. Отправка сообщений производится на телефонные номера, записанные в телефонной книге на SIM-карте.&lt;br /&gt;
&lt;br /&gt;
==Система проверки прав пользователей==&lt;br /&gt;
[[Файл:AgavaPLC-Окно привилегий.png|мини|494x494пкс|Окно привилегий]]&lt;br /&gt;
Система реализует механизм контроля доступа к узлам проекта и их функциях на основе ролей. Узлы при выполнении действий проверяют наличие установленных привилегий у авторизованного в данный момент пользователя. &lt;br /&gt;
&lt;br /&gt;
=== Роли и пользователи ===&lt;br /&gt;
Система содержит в себе две подсистемы:&lt;br /&gt;
*Пользователи. Подсистема определяет пользователей, каждому из которых назначается логин/пароль и одна или несколько ролей.&lt;br /&gt;
*Роли. Роли хранят наборы доступных привилегий.&lt;br /&gt;
Отношения между пользователями, ролями и привилегиями можно описать следующим образом:&lt;br /&gt;
&lt;br /&gt;
* Один пользователь может иметь несколько ролей.&lt;br /&gt;
* Одну роль могут иметь несколько пользователей.&lt;br /&gt;
* Одна роль может иметь несколько привилегий.&lt;br /&gt;
* Одна привилегия может принадлежать нескольким ролям.&lt;br /&gt;
&lt;br /&gt;
=== Привилегии ===&lt;br /&gt;
[[Файл:AgavaPLC-Система проверки прав пользователей.png|мини|Система проверки прав пользователей]]&lt;br /&gt;
Для узлов системы доступна установка следующих привилегий:&lt;br /&gt;
&lt;br /&gt;
Все узлы: &lt;br /&gt;
&lt;br /&gt;
*Чтение значения.&lt;br /&gt;
*Запись значения.&lt;br /&gt;
Окна и фреймы:&lt;br /&gt;
*Открытие окна.&lt;br /&gt;
*Закрытие окна.&lt;br /&gt;
&lt;br /&gt;
При установке привилегий на какой-либо узел, все подчиненные узлы получают те же привилегии с флагом &amp;quot;унаследована&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Если привилегия не установлена, то считается что действие, регулируемое привилегией, запрещено.&lt;br /&gt;
&lt;br /&gt;
Значение унаследованных привилегий можно переопределить с помощью явного задания привилегии.&lt;br /&gt;
===Порядок настройки системы===&lt;br /&gt;
Привилегии настраиваются в отдельном окне привилегий, доступном в меню &amp;quot;Вид&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Порядок настройки системы проверки прав в версии AgavaSCADA 1.2 следующий:&lt;br /&gt;
&lt;br /&gt;
#Добавить в проект систему проверки прав пользователей. Для этого нажать ПКМ по узлу «Станция» в дереве проекта, затем выбрать «Добавить узел» - «Система» - «Система проверки прав пользователей».&lt;br /&gt;
#Добавить в систему проверки прав пользователей узел «Роль». Для этого нажать ПКМ по узлу «Система проверки прав пользователей» в дереве проекта, затем выбрать «Добавить узел» - «Роли».&lt;br /&gt;
#Добавить в узел «Роли» необходимые роли. Для этого нажать ПКМ по узлу «Роли» в дереве проекта, затем выбрать «Добавить узел» - «Роль».&lt;br /&gt;
#Для каждой роли настроить привилегии в окне привилегий. Для этого необходимо нажать «Вид» - «Открыть привилегии». В открывшемся окне в выпадающем списке «Пользователь / роль» выбрать нужную роль. Затем, нажимая ПКМ по узлам и выбирая «Добавить привилегию» настроить все необходимые ограничения для данной роли.&lt;br /&gt;
#Добавить в систему проверки прав пользователей узел «Пользователи». Для этого нажать ПКМ по узлу «Система проверки прав пользователей» в дереве проекта, затем выбрать «Добавить узел» - «Пользователи».&lt;br /&gt;
#Добавить в узел «Пользователи» необходимых пользователей. Для этого нажать ПКМ по узлу «Пользователи» в дереве проекта, затем выбрать «Добавить узел» - «Пользователи».&lt;br /&gt;
#Для каждого пользователя указать имя и пароль, которые будут использоваться при авторизации, и выбрать одну или несколько ролей.&lt;br /&gt;
&lt;br /&gt;
== Сигналы, источники и операции ==&lt;br /&gt;
Регистры и другие узлы, добавленные в группу «Сигналы», являются внутренними для проекта и могут менять свои значения только с помощь скриптов или других узлов, с которыми они связаны.&lt;br /&gt;
&lt;br /&gt;
Сигналы содержат в себе несколько подгрупп.&lt;br /&gt;
&lt;br /&gt;
=== Сигнал===&lt;br /&gt;
Сигнал - специальный тип узла, хранящий значение узла типа &amp;quot;источник&amp;quot;. Сигналы могут использоваться для хранения значений нескольких источников, модифицировать их, обладать дополнительными полями и т. д.&lt;br /&gt;
&lt;br /&gt;
Сигналы некоторых типов позволяют модифицировать исходное значение источников. Принцип обработки значения источника или сигнала с помощью операций: &lt;br /&gt;
&lt;br /&gt;
Первичное значение поступает на вход операции, производится вычисление. Если есть еще операции, то вычисленное значение после первой операции передается на вход второй. И так далее по всем операциям. Если операций больше нет, вычисленное значение устанавливается в качестве значения узла. &lt;br /&gt;
&lt;br /&gt;
Все операции выполняются в порядке, в котором они заданы в соответствующих свойствах.&lt;br /&gt;
&lt;br /&gt;
====Сигнал простой====&lt;br /&gt;
Узел типа &amp;quot;Сигнал простой&amp;quot; предназначен для хранения и обработки значения источника, или другого сигнала или операции. Позволяет произвести какие-либо действия с этим значением с помощью добавления нужных операций в свойство «Операции после чтения».&lt;br /&gt;
&lt;br /&gt;
====Постоянная ====&lt;br /&gt;
Узел типа &amp;quot;Постоянная&amp;quot; предназначен для хранения данных выбранного формата и позволяет изменять их в ходе выполнения программы. Связывание с источником не предусмотрено. Изменение осуществляется с помощью специализированных функций или блока установки значения в задаче ПЛК.&lt;br /&gt;
&lt;br /&gt;
====Массив====&lt;br /&gt;
Массив - совокупность каких-либо объектов, указанных в свойстве «Входные значения». Нумерация объектов в массиве начинается с 0. Может использоваться для взаимодействия с демультиплексором.&lt;br /&gt;
&lt;br /&gt;
====Сигнал комплексный====&lt;br /&gt;
Сигнал используется для взаимодействия с виджетом «Цифровой индикатор». Позволяет контролировать входное значение и генерировать события переходу входного значения через уставки.&lt;br /&gt;
&lt;br /&gt;
Содержит в себе свойства для настройки следующих параметров:&lt;br /&gt;
&lt;br /&gt;
*ВАУ – верхняя аварийная уставка;&lt;br /&gt;
*ВПУ - верхняя предаварийная уставка;&lt;br /&gt;
*НПУ - нижняя предаварийная уставка;&lt;br /&gt;
*НАУ – нижняя аварийная уставка;&lt;br /&gt;
*ФНЧ – фильтр низких частот.&lt;br /&gt;
&lt;br /&gt;
===Источник===&lt;br /&gt;
Источник - специальный тип узлов, предназначенных для передачи данных от внешних устройств.&lt;br /&gt;
&lt;br /&gt;
====Регистр Modbus====&lt;br /&gt;
Регистр Modbus используется для приема и передачи данных по протоколам Modbus-RTU, Modbus-TCP. Данный тип узов также может использоваться для организации работы некоторых алгоритмов программы (например для взаимодействия с контроллером событий).&lt;br /&gt;
&lt;br /&gt;
====Источник индексный====&lt;br /&gt;
Узел типа &amp;quot;Источник индексный&amp;quot; используется для обработки данных, полученных по протоколу Upd, а так же в массивах для индексации значений.&lt;br /&gt;
&lt;br /&gt;
===Операция===&lt;br /&gt;
[[Файл:AgavaPLC-Входные значения операций.png|мини|Входные значения операций]]&lt;br /&gt;
Узлы типа &amp;quot;Операция&amp;quot; используются для реализации вычислительных алгоритмов в задаче ПЛК или отдельно, при их размещении в группе &amp;quot;Сигналы&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
В качестве входных значений операций выбираются константные числа, другие узлы группы «Сигналы», регистры или блоки задачи ПЛК.&lt;br /&gt;
&lt;br /&gt;
====Операция «Сложение»====&lt;br /&gt;
Выходным значением является сумма входных значений. В качестве входных значений можно выбирать как узлы, так и конкретные числа формата int или double.&lt;br /&gt;
&lt;br /&gt;
====Операция «Вычитание»====&lt;br /&gt;
Выходным значением является разность первого входного значения и суммы всех последующих значений. В качестве входных значений можно выбирать как узлы, так и конкретные числа формата int или double.&lt;br /&gt;
&lt;br /&gt;
====Операция «Умножение»====&lt;br /&gt;
Выходным значением является произведение значений всех входных значений. В качестве входных значений можно выбирать как узлы, так и конкретные числа формата int или double.&lt;br /&gt;
&lt;br /&gt;
====Операция «Деление»====&lt;br /&gt;
Выходным значением является результат от деления первого входного значения на произведение всех последующих значений. В качестве входных значений можно выбирать как узлы, так и конкретные числа формата int или double.&lt;br /&gt;
&lt;br /&gt;
====Операция «Условие»====&lt;br /&gt;
Узел типа &amp;quot;Операция условие&amp;quot; предназначен для сравнения значений двух узлов. Для условия задаются сравниваемые параметры и выбирается режим сравнения. В качестве входных значений можно выбирать как узлы, так и конкретные числа формата int или double.&lt;br /&gt;
&lt;br /&gt;
====Операция «Пара условий»====&lt;br /&gt;
[[Файл:AgavaPLC-Операция «Пара условий».png|мини|Операция «Пара условий»]]&lt;br /&gt;
Операция содержит в себе два условия. Для каждого условия задаются индивидуальные сравнимаемые параметры и выбирается режим сравнения.&lt;br /&gt;
&lt;br /&gt;
Выходное значение операции зависит от ее режима проверки – при выбранном режиме «Логическое ИЛИ» выходное значение равно логической «1» если одно из условий равно «1», при «Логическом И»- если оба условия равны «1».&lt;br /&gt;
&lt;br /&gt;
====Операция «Логическое ИЛИ»====&lt;br /&gt;
Если одно из входных значений становится равно логической «1» (контакты замкнуты), то выходное значение становится логической «1» (выход включен).&lt;br /&gt;
&lt;br /&gt;
====Операция «Логическое И»====&lt;br /&gt;
Если все входные значения становятся равны логической «1», выходное значение становится логической «1» (выход включен).&lt;br /&gt;
&lt;br /&gt;
====Операция «Логическое НЕ»====&lt;br /&gt;
Если входное значение блока становится равно логическому «0», то выходное значение становится логической «1», и наоборот.&lt;br /&gt;
&lt;br /&gt;
====Операция «Таймер»====&lt;br /&gt;
Таймер предназначен для выполнения каких-либо [[Узлы проекта AgavaSCADA/AgavaPLC#.D0.94.D0.B5.D0.B9.D1.81.D1.82.D0.B2.D0.B8.D1.8F|действий]] через одинаковые промежутки времени (например запись значения в узел). Промежуток между исполнениями действий задается в свойстве «Интервал срабатывания», а сами действия в свойстве «Действия OnTimer». Для работы операции ее необходимо добавить в свойство «Узлы» [[Узлы проекта AgavaSCADA/AgavaPLC#.D0.97.D0.B0.D0.B4.D0.B0.D1.87.D0.B8|задачи]] с периодическим или разовым режимом выполнения.&lt;br /&gt;
&lt;br /&gt;
====Операция «Мультиплексор»====&lt;br /&gt;
Мультплексор осуществляет перевод нескольких булевых переменных в целочисленное значение по формуле: «выход = вход1 + вход2*2^1 + вход3*2^2 + ...». &lt;br /&gt;
&lt;br /&gt;
Например если в качестве входных значений указаны два регистра, то выходное значение мультиплексора будет формироваться следующим образом:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Значение регистра 1&lt;br /&gt;
!Значение регистра 2&lt;br /&gt;
!Выходное значение&lt;br /&gt;
|-&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|-&lt;br /&gt;
|1&lt;br /&gt;
|0&lt;br /&gt;
|1&lt;br /&gt;
|-&lt;br /&gt;
|0&lt;br /&gt;
|1&lt;br /&gt;
|2&lt;br /&gt;
|-&lt;br /&gt;
|1&lt;br /&gt;
|1&lt;br /&gt;
|3&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
====Операция «Демультиплексор»====&lt;br /&gt;
Демультиплексор осуществляет перевод целочисленных значений из массива в несколько булевых переменных, при этом включается выход, номер которого соответствует числу из массива (например первый элемент массива равен 5, на пятом выходе появится значение true). Нумерация выходов начинается с нуля.&lt;br /&gt;
&lt;br /&gt;
====Операция «Генератор случайного числа»====&lt;br /&gt;
Выходным значением является случайное число в диапазоне между указанным минимальным и максимальным значениями. Для работы операции ее необходимо добавить в свойство «Узлы» [[Узлы проекта AgavaSCADA/AgavaPLC#.D0.97.D0.B0.D0.B4.D0.B0.D1.87.D0.B8|задачи]] с периодическим или разовым режимом выполнения.&lt;br /&gt;
&lt;br /&gt;
====Операция «Скрипт С++»====&lt;br /&gt;
Операция «Скрипт С++» предназначена для реализации разнообразных алгоритмов на языке С++. Операция предусматривает реализацию одной или нескольких функций, выполняющих необходимые пользователю действия. &lt;br /&gt;
&lt;br /&gt;
Для выполнения скрипта, можно добавить в свойство «Узлы» [[Узлы проекта AgavaSCADA/AgavaPLC#.D0.97.D0.B0.D0.B4.D0.B0.D1.87.D0.B8|задачи]] с периодическим или разовым режимом выполнения. Другим способом вызова срабатывания скрипта является добавление его в [[Узлы проекта AgavaSCADA/AgavaPLC#.D0.94.D0.B5.D0.B9.D1.81.D1.82.D0.B2.D0.B8.D0.B5 .C2.AB.D0.92.D1.8B.D0.BF.D0.BE.D0.BB.D0.BD.D0.B5.D0.BD.D0.B8.D0.B5 .D1.81.D0.BA.D1.80.D0.B8.D0.BF.D1.82.D0.B0.C2.BB|действие «Выполнение скрипта»]].&lt;br /&gt;
&lt;br /&gt;
Пример скрипта, выполняющего получение значения определенного узла и запись измененного значения в другой узел:&lt;br /&gt;
 float val()&lt;br /&gt;
 {&lt;br /&gt;
     float f = GetNodeValueAsFloat(&amp;quot;/Конфигурация1/stationSimple1/Signals1/Random2&amp;quot;);&lt;br /&gt;
     float f1 = f*100.0;&lt;br /&gt;
     SetNodeValueAsFloat(&amp;quot;/Конфигурация1/stationSimple1/Signals1/Constant3&amp;quot;, f1);&lt;br /&gt;
     return f*10.0;&lt;br /&gt;
 }&lt;br /&gt;
Приведенный выше скрипт возвращает исходное значение, умноженное на 10. Возвращаемое таким образом значение записывается в выход операции для возможности считывания в других операциях, скриптах и т. д.&lt;br /&gt;
&lt;br /&gt;
Скрипты могут возвращать значения следующих типов:&lt;br /&gt;
&lt;br /&gt;
*void;&lt;br /&gt;
*float;&lt;br /&gt;
*double;&lt;br /&gt;
*int.&lt;br /&gt;
&lt;br /&gt;
Подробное описание реализации языка С++ в AgavaSCADA/AgavaPLC приведено на странице &amp;quot;[[Описание языка С++ в AgavaPLC]]&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
===Объект===&lt;br /&gt;
Узлы типа &amp;quot;Объект&amp;quot; предназначены для взаимодействия с аппаратными компонентами контроллера. Для всех объектов, являющихся субмодулями, необходимо указать слот, в котором они установлены. Доступ к значениям входов/выходов субмодуля осуществляется через его вложенные узлы.&lt;br /&gt;
&lt;br /&gt;
'''ПЛК процессорный модуль''' &lt;br /&gt;
&lt;br /&gt;
Предоставляет возможность регулирования подсветки экрана; включения и отключения индикаторов работы, аварии и программы.&lt;br /&gt;
&lt;br /&gt;
'''ПЛК субмодуль DI'''&lt;br /&gt;
&lt;br /&gt;
Позволяет получать доступ к значениям входов субмодуля DI.&lt;br /&gt;
&lt;br /&gt;
'''ПЛК субмодуль R'''&lt;br /&gt;
&lt;br /&gt;
Позволяет управлять значениями выходов субмодуля R.&lt;br /&gt;
&lt;br /&gt;
'''ПЛК субмодуль SIM'''&lt;br /&gt;
&lt;br /&gt;
Позволяет управлять значениями выходов субмодуля SIM.&lt;br /&gt;
&lt;br /&gt;
'''ПЛК субмодуль DO6'''&lt;br /&gt;
&lt;br /&gt;
Позволяет управлять значениями выходов субмодуля DO6.&lt;br /&gt;
&lt;br /&gt;
'''ПЛК субмодуль AI'''&lt;br /&gt;
&lt;br /&gt;
Позволяет получать доступ к значениям входов субмодуля AI и задавать их тип.&lt;br /&gt;
&lt;br /&gt;
'''ПЛК субмодуль AIO'''&lt;br /&gt;
&lt;br /&gt;
Позволяет получать доступ к значениям входов субмодуля AIO, управлять значениями выходов и задавать тип входов и выходов.&lt;br /&gt;
&lt;br /&gt;
'''ПЛК субмодуль TMP'''&lt;br /&gt;
&lt;br /&gt;
Позволяет получать доступ к значениям входов субмодуля TMP и задавать их тип.&lt;br /&gt;
&lt;br /&gt;
==Задачи==&lt;br /&gt;
Группа «Задачи» предназначена для группировки узлов типа «Задача», которые используются для циклического или разового выполнения созданных пользователем алгоритмов.&lt;br /&gt;
&lt;br /&gt;
===Задача ПЛК===&lt;br /&gt;
Данный узел предоставляет возможности для связывания между собой других узлов (таких как сигналы, субмодули ПЛК, постоянные и т. д.) в удобной графической форме (см. Рисунок 64). Для перехода к редактору необходимо щелкнуть правой кнопкой мыши на задачу ПЛК и выбрать в открывшемся контекстном меню команду «Открыть графическое представление» или дважды щелкнуть левой кнопкой мыши на задаче ПЛК в дереве проекта.&lt;br /&gt;
&lt;br /&gt;
Рисунок 64 – Окно графического редактирования задачи «ПЛК-60»&lt;br /&gt;
&lt;br /&gt;
Панель инструментов задачи ПЛК, расположенная в верхней части окна, содержит следующие элементы (см. Рисунок 16):&lt;br /&gt;
&lt;br /&gt;
*Выпадающий список выбора режима подписи портов.&lt;br /&gt;
*Выпадающий список выбора режима подписи блоков.&lt;br /&gt;
*Кнопка запуска режима симулятора.&lt;br /&gt;
*Кнопка запуска онлайн отладки.&lt;br /&gt;
*Кнопка печати задачи.&lt;br /&gt;
*Инструменты управления симуляцией.&lt;br /&gt;
&lt;br /&gt;
Добавлять узлы в задачу можно перетаскиванием мышью из окна функциональных блоков или из окна дерева проекта. Для связывания узлов между собой необходимо, зажав левую кнопку мыши на выходе одного узла, протянуть линию ко входу другого и затем отпустить левую кнопку мыши для соединения блоков. &lt;br /&gt;
&lt;br /&gt;
Созданную связь можно удалить, выделив ее левой кнопкой мыши и нажав клавишу &amp;quot;Del&amp;quot;. Связь можно &amp;quot;разорвать&amp;quot;, то есть добавить разрыв, нажав по ней правой кнопкой мыши и выбрав в контекстном меню команду «Добавить разрыв». &lt;br /&gt;
&lt;br /&gt;
Для выделения нескольких блоков рамкой зажмите клавишу &amp;quot;Shift&amp;quot; и выделяйте блоки мышью с нажатой левой кнопкой.&lt;br /&gt;
&lt;br /&gt;
Задача ПЛК предоставляет возможности для проведения тестирования и отладки проекта, описанные в разделе [[#Проверка и отладка проекта]].&lt;br /&gt;
&lt;br /&gt;
====Блоки задачи ПЛК====&lt;br /&gt;
Помимо операций, описанных в разделе [[#Операция]], для реализации алгоритмов в задачу ПЛК можно добавлять блоки, описанные ниже.&lt;br /&gt;
&lt;br /&gt;
'''Функциональный блок'''&lt;br /&gt;
&lt;br /&gt;
Используется для выделения каких-либо действий в отдельный блок, для упрощения понимания работы алгоритма программы. Содержит входы, выходы и блоки, обеспечивающие работу внутренней логики. Позволяет проводить изолированную отладку, при которой значения на входах функционального блока вручную задаются пользователем. Блок, работающий в данном режиме выделяется черной рамкой. Для включения изолированной отладки необходимо открыть блок и нажать кнопку «Изолированная отладка» на панели управления задачей.&lt;br /&gt;
&lt;br /&gt;
'''Блок установки значения'''&lt;br /&gt;
&lt;br /&gt;
Блок осуществляет запись значения, поданного на вход in0, в узел, указанный в свойстве «Узел для чтения/записи»&lt;br /&gt;
&lt;br /&gt;
'''Блок задержки'''&lt;br /&gt;
&lt;br /&gt;
Блок задержки используется для создания задержки передачи значения с входа блока на выход на один цикл обработки задачи.&lt;br /&gt;
&lt;br /&gt;
'''Блок «Битовое OR»'''&lt;br /&gt;
&lt;br /&gt;
Для вычисления значения будет произведена операция &amp;quot;ИЛИ&amp;quot; над каждым битом значения в отдельности. Например: 1010 OR 0110 = 1110&lt;br /&gt;
&lt;br /&gt;
'''Блок «Логическое И»'''&lt;br /&gt;
&lt;br /&gt;
Если все входные значения становятся равны логической «1», выходное значение становится логической «1» (выход включен).&lt;br /&gt;
&lt;br /&gt;
'''Блок «Битовое AND»'''&lt;br /&gt;
&lt;br /&gt;
Для вычисления значения будет произведена операция &amp;quot;И&amp;quot; над каждым битом значения в отдельности. Если все биты, стоящие на одинаковых позициях в двоичных представлениях значений, поступающих на входы блока, равны логической «1», то на выходе элемента в этой позиции появляется логическая «1» (выход включен). Например: 1010 AND 0110 = 0010&lt;br /&gt;
&lt;br /&gt;
'''Блок «Логическое НЕ»'''&lt;br /&gt;
&lt;br /&gt;
Если входное значение блока становится равно логическому «0», то выходное значение становится логической «1», и наоборот.&lt;br /&gt;
&lt;br /&gt;
'''Блок «Битовое XOR»'''&lt;br /&gt;
&lt;br /&gt;
Если только на один из входов блока функции поступает логическая «1», то на выходе элемента появляется логическая «1». Если на входы блока функции поступают целочисленные значения, то операция будет произведена над каждым битом значения в отдельности. Например: 1010 XOR 0110 = 1100&lt;br /&gt;
&lt;br /&gt;
'''Блок «Битовое SHR»'''&lt;br /&gt;
&lt;br /&gt;
Побитовый логический сдвиг вправо используется для выполнения операции побитового логического сдвига операнда X вправо на N бит с дополнением нулями слева.&lt;br /&gt;
&lt;br /&gt;
'''Блок «Битовое SHL»'''&lt;br /&gt;
&lt;br /&gt;
Побитовый логический сдвиг влево используется для выполнения операции побитового логического сдвига операнда X влево на N бит с дополнением нулями справа.&lt;br /&gt;
&lt;br /&gt;
'''Блок «Таймер»'''&lt;br /&gt;
&lt;br /&gt;
Таймер предназначен для выполнения каких-либо действий (см. раздел 4.6) через одинаковые промежутки времени (например запись значения в узел).&lt;br /&gt;
&lt;br /&gt;
'''Блок «Мультиплексор»'''&lt;br /&gt;
&lt;br /&gt;
Мультплексор осуществляет перевод нескольких булевых переменных в целочисленное значение по формуле: «выход = вход1 + вход2*2^1 + вход3*2^2 + ...»&lt;br /&gt;
&lt;br /&gt;
'''Блок «Демультиплексор»'''&lt;br /&gt;
&lt;br /&gt;
Демультиплексор осуществляет перевод целочисленных значений из массива в несколько булевых переменных, при этом включается выход, номер которого соответствует числу из массива (например первый элемент массива равен 5, на пятом выходе появится значение true). Нумерация выходов начинается с нуля.&lt;br /&gt;
&lt;br /&gt;
'''Блок «Генератор случайного числа»'''&lt;br /&gt;
&lt;br /&gt;
Выходным значением является случайное число в диапазоне между указанным минимальным и максимальным значениями.&lt;br /&gt;
&lt;br /&gt;
'''Блок «Скрипт С++»'''&lt;br /&gt;
&lt;br /&gt;
Операция «Скрипт С++» предназначена для реализации разнообразных алгоритмов на языке С++. Операция предусматривает реализацию одной или нескольких функций, выполняющих необходимые пользователю действия. Для выполнения скрипта, необходимо добавить его в качестве узла для задачи или задачи ПЛК.&lt;br /&gt;
&lt;br /&gt;
Пример скрипта, выполняющего получение значения определенного узла и запись измененного значения в другой узел:&lt;br /&gt;
 float val()&lt;br /&gt;
 {&lt;br /&gt;
     float f = GetNodeValueAsFloat(&amp;quot;/Конфигурация1/stationSimple1/Signals1/Random2&amp;quot;);&lt;br /&gt;
     float f1 = f*100.0;&lt;br /&gt;
     SetNodeValueAsFloat(&amp;quot;/Конфигурация1/stationSimple1/Signals1/Constant3&amp;quot;, f1);&lt;br /&gt;
     return f*10.0;&lt;br /&gt;
 }&lt;br /&gt;
Приведенный выше скрипт возвращает исходное значение, умноженное на 10. Возвращаемое таким образом значение записывается в выход операции для возможности считывания в других операциях, скриптах и т. д.&lt;br /&gt;
&lt;br /&gt;
Скрипты могут возвращать значения следующих типов:&lt;br /&gt;
&lt;br /&gt;
* void;&lt;br /&gt;
*float;&lt;br /&gt;
*double;&lt;br /&gt;
*int.&lt;br /&gt;
&lt;br /&gt;
Подробное описание реализации языка С++ в AgavaSCADA/AgavaPLC приведено на странице &amp;quot;[[Описание языка С++ в AgavaPLC]]&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
'''Блок «Таймер с задержкой»'''&lt;br /&gt;
&lt;br /&gt;
Таймер с задержкой используется для операции задержки передачи и/или отключения сигнала. На выходе таймера появится сигнал логической «1» с задержкой относительно фронта входного сигнала продолжительностью равной интервалу включения и выключится по спаду входного сигнала с задержкой продолжительностью равной интервалу выключения. В том случае, если необходимо использовать блок только как таймер с задержкой включения (отключения) интервал выключения (включения) устанавливается равным 0.&lt;br /&gt;
&lt;br /&gt;
'''Блок «Генератор прямоугольных импульсов»'''&lt;br /&gt;
&lt;br /&gt;
Генератор прямоугольных импульсов используется для формирования прямоугольных импульсов пульсации. На выходе генератора формируются импульсы с заданными параметрами длительности включенного и отключенного импульса на время действия управляющего сигнала на входе (сигнал логической «1»).&lt;br /&gt;
&lt;br /&gt;
'''Блок «Триггер RS»'''&lt;br /&gt;
&lt;br /&gt;
RS-триггер с приоритетом выключения используется для переключения с фиксацией состояния во время поступления коротких импульсов на соответствующий вход. На выходе появится логическая «1» по фронту сигнала на входе Set, которая будет сброшена в «0», при поступлении импульса на вход Reset.&lt;br /&gt;
&lt;br /&gt;
'''Блок «Триггер SR»'''&lt;br /&gt;
&lt;br /&gt;
SR-триггер с приоритетом включения используется для переключения с фиксацией состояния в случае поступления коротких импульсов на соответствующий вход. На выходе появится логическая «1» по фронту сигнала на входе Set, которая будет сброшена в «0», при поступлении импульса на вход Reset.&lt;br /&gt;
&lt;br /&gt;
'''Блок «Детектор переднего фронта импульса»'''&lt;br /&gt;
&lt;br /&gt;
Детектор переднего фронта импульса используется в случае необходимости иметь реакцию на изменение состояния дискретного входного сигнала. На выходе генерируется единичный импульс при изменении состояния входа из «0» в «1».&lt;br /&gt;
&lt;br /&gt;
'''Блок «Детектор заднего фронта импульса»'''&lt;br /&gt;
&lt;br /&gt;
Детектор заднего фронта импульса используется в случае необходимости иметь реакцию на изменение состояния дискретного входного сигнала. На выходе генерируется единичный импульс при изменении состояния входа из «1» в «0».&lt;br /&gt;
&lt;br /&gt;
'''Блок «D-триггер»'''&lt;br /&gt;
&lt;br /&gt;
D-триггер используется для формирования импульса включения выхода на интервал времени импульса на входе D, выходной интервал будет синхронизирован с тактовой частотой на входе С. На выходе Q триггера появится сигнал логической «1» по фронту тактовых импульсов на входе С при наличии сигнала логической «1» на входе D. Возврат выхода в сигнал логического «0» произойдет по фронту тактовых импульсов на входе С при наличии сигнала логического «0» на входе D. Вход Set принудительно устанавливает выход в состояние логической «1». Вход Reset является приоритетным и устанавливает выход в состояние логического «0».&lt;br /&gt;
&lt;br /&gt;
'''Блок «Селектор»'''&lt;br /&gt;
&lt;br /&gt;
Если на вход Value подается логическая «1», то результатом выполнения операции блока на выходе является входной сигнал ValueT. Если же Value равен логической «0», то результатом выполнения операции блока на выходе является входной сигнал ValueF.&lt;br /&gt;
&lt;br /&gt;
'''Блок «Больше чем»'''&lt;br /&gt;
&lt;br /&gt;
На выход подается логическая «1», если значение in0 больше чем значение in1.&lt;br /&gt;
&lt;br /&gt;
'''Блок «Равенство»'''&lt;br /&gt;
&lt;br /&gt;
На выход подается логическая «1», если значение in0 равно значению in1.&lt;br /&gt;
&lt;br /&gt;
'''Блок «Абсолютное значение числа»'''&lt;br /&gt;
&lt;br /&gt;
Результатом операции функции на выходе является модуль подаваемого на вход значения. Если число на входе положительное, то на выход подается само число, если отрицательное – положительное число, получаемое от перемены его знака с «-» на «+».&lt;br /&gt;
&lt;br /&gt;
'''Блок «Возведение в степень»'''&lt;br /&gt;
&lt;br /&gt;
Результатом операции функции на выходе является значение, равное значению in0, возведенному в степень значения N.&lt;br /&gt;
&lt;br /&gt;
'''Блок «PID-регулятор»'''&lt;br /&gt;
&lt;br /&gt;
Регулятор PID применяется для поддержания заданного значения параметра. На вход Pv подается текущее значение регулируемой величины, на Sp – ее заданное значение. С помощью изменения коэффициентов ПИД регулятора kP, kI и kD достигается оптимальный режим работы. Min задает минимальное значение на выходе, Max – максимальное. time - период регулятора (в мс.).&lt;br /&gt;
&lt;br /&gt;
'''Блок «PWM-регулятор»'''&lt;br /&gt;
&lt;br /&gt;
Применяется для преобразования аналогового сигнала в дискретный с помощью ШИМ. На вход in подается текущее значение регулируемой величины, Min задает минимальное значение на входе, Max – максимальное. time - период регулятора (в мс.)&lt;br /&gt;
&lt;br /&gt;
==Устройства==&lt;br /&gt;
Группа «Устройства» предназначена для группировки узлов типа &amp;quot;Устройство&amp;quot;, выполняющие разнообразные задачи, например работа с внешними накопителями и ПЗУ. &lt;br /&gt;
&lt;br /&gt;
Retain-накопитель дает возможность хранить значения регистров, постоянных и сигналов в постоянной памяти контроллера, что позволяет им сохранять свои значения после отключения питания.&lt;br /&gt;
&lt;br /&gt;
Для сохранения переменных необходимо перечислить их в свойстве «Узлы» и указать путь сохранения на выбранном накопителе.&lt;br /&gt;
&lt;br /&gt;
== Отчеты==&lt;br /&gt;
{{Внимание|Тип=Восклицание желтый.png|Текст=Данный узел доступен только при  исполнении проекта на настольном компьютере. На панелях оператора и контроллерах МПР этот узел не доступен.}}&lt;br /&gt;
Отчет – технологический документ, содержащий информацию о ходе производственного процесса, обработанную по заложенным в отчет алгоритмам. Отчеты формируются на основе макетов (статической части отчетов) путем добавления в них свойств и значений заданных параметров технологического процесса, которые формируются (выбираются из базы данных технологических параметров и проходят соответствующую обработку) по алгоритмам, размещенным в этих шаблонах.&lt;br /&gt;
&lt;br /&gt;
Данные для отчета предоставляет выборка, осуществляющая получение данных и их обработку из базы данных.&lt;br /&gt;
&lt;br /&gt;
===Создание нового отчета===&lt;br /&gt;
Создание любого отчета производится в два этапа.&lt;br /&gt;
&lt;br /&gt;
#Создание необходимых узлов в конфигурации: сам отчет и необходимое количество выборок.&lt;br /&gt;
#Составление макета отчета.&lt;br /&gt;
&lt;br /&gt;
Создание узла типа «Отчет» в конфигурации и выборок для него производится аналогично созданию узлов других типов. К станции добавляется узел типа «Отчеты» с помощью команды контекстного меню «Добавить узел», далее к узлу типа «Отчеты» добавляется отчет и к отчету добавляется необходимое количество выборок.&lt;br /&gt;
&lt;br /&gt;
Выборка – специальный узел, предназначенный для выборки данных из архива и их обработки для последующего отображения в отчете.&lt;br /&gt;
&lt;br /&gt;
Перед переходом к редактированию макета желательно проделать следующие операции:&lt;br /&gt;
&lt;br /&gt;
*в свойстве отчета «Путь к файлу отчета» установить имя файла, в котором будет храниться макет отчета;&lt;br /&gt;
* в свойстве «Источники» выборки (выборок) отчета установить перечень архивных сигналов (коннекторов), которые будут выводиться в отчете.&lt;br /&gt;
&lt;br /&gt;
===Редактирование макета отчета===&lt;br /&gt;
[[Файл:AgavaPLC–Редактор макета отчета.png|мини|Рисунок 42 – Редактор макета отчета]]&lt;br /&gt;
Для редактирования макета отчета необходимо переключиться из редактора конфигурации в редактор макета отчета с помощью команды «Открыть редактор макета отчета», доступной из контекстного меню дерева конфигурации, отображаемого при щелчке правой кнопкой мыши на узле типа «Отчет».&lt;br /&gt;
&lt;br /&gt;
В окне редактора расположены:&lt;br /&gt;
&lt;br /&gt;
*панели инструментов;&lt;br /&gt;
* панель объектов отчета;&lt;br /&gt;
*окно «Инспектор объектов»;&lt;br /&gt;
*окно «Инспектор данных»;&lt;br /&gt;
*окно «Инспектор скриптов»;&lt;br /&gt;
*область построения макета отчета;&lt;br /&gt;
*окно «Структура отчета».&lt;br /&gt;
&lt;br /&gt;
Редактор макета позволяет вызывать команды сочетаниями клавиш:&lt;br /&gt;
&lt;br /&gt;
*Ctrl + N – новый макет;&lt;br /&gt;
*Ctrl + O – загрузить макет;&lt;br /&gt;
*Ctrl + S – сохранить макет;&lt;br /&gt;
*Ctrl + Shift + S – сохранить макет под новым именем;&lt;br /&gt;
*Ctrl + P – предварительный просмотр;&lt;br /&gt;
*Ctrl + Z – отмена изменений;&lt;br /&gt;
*Ctrl + Shift + Z – возврат отмененных изменений;&lt;br /&gt;
* Ctrl + C – копировать объект;&lt;br /&gt;
*Ctrl + X – вырезать объект;&lt;br /&gt;
*Ctrl + V – вставить объект;&lt;br /&gt;
*Ctrl + Стрелки – переместить выделенный объект;&lt;br /&gt;
*Shift + Стрелки – изменить размер выделенных объектов;&lt;br /&gt;
*Del – удалить выделенные объекты;&lt;br /&gt;
*Shift + левая кнопка мыши – создать область выделения.&lt;br /&gt;
&lt;br /&gt;
====Окно «Инспектор объектов»====&lt;br /&gt;
Окно «Инспектор объектов» содержит список свойств выделенного объекта и предназначено для их редактирования.&lt;br /&gt;
&lt;br /&gt;
====Окно «Инспектор данных»====&lt;br /&gt;
Окно «Инспектор данных» содержит список доступных для использования источников данных (выборок) и предназначено для заполнения блока «Данные» элементами соответствующего типа.&lt;br /&gt;
&lt;br /&gt;
====Окно «Инспектор скриптов»====&lt;br /&gt;
Окно «Инспектор скриптов» содержит список доступных для использования в отчете скриптов.&lt;br /&gt;
&lt;br /&gt;
====Окно «Структура отчета»====&lt;br /&gt;
Окно «Структура отчет» отображает структуру отчета в виде дерева связанных элементов.&lt;br /&gt;
&lt;br /&gt;
===Элементы отчета===&lt;br /&gt;
Для составления макета отчета доступны следующие элементы:&lt;br /&gt;
&lt;br /&gt;
*текст;&lt;br /&gt;
*данные;&lt;br /&gt;
*изображение;&lt;br /&gt;
*фигура;&lt;br /&gt;
*компоновка (Layout).&lt;br /&gt;
&lt;br /&gt;
====Текст====&lt;br /&gt;
Элемент «Текст» служит для вывода надписей или содержимого полей источников данных.&lt;br /&gt;
&lt;br /&gt;
Объект «Текст» обладает очень широкими возможностями. Он умеет отображать текст, рамку, заливку. Текст может быть отображен любым шрифтом любого размера, цвета и стиля. Большинство настроек делаются визуально с помощью панелей инструментов.&lt;br /&gt;
&lt;br /&gt;
Одна из самых главных особенностей этого универсального объекта – это возможность отображения не только статичного текста, но и текста с применением вычисляемых выражений. Причем, выражения могут располагаться в объекте вперемешку с текстом. Рассмотрим простой пример – поместим в объект «Текст» следующую строку: «Привет! Сегодня $S{now()}».&lt;br /&gt;
&lt;br /&gt;
Если запустить отчет на построение, мы увидим приблизительно следующее: «Привет! Сегодня 2018­08­03». В процессе построения отчета выражение в тексте, заключенное $S{}, было вычислено и полученное значение вставлено обратно в текст. Объект «Текст» может содержать любое количество выражений, смешанных с обычным текстом. В скобки можно заключать и одиночные переменные, и выражения, например, $S{1+2*(3+4)}. В выражениях можно использовать константы, переменные ($V{}), функции, поля БД ($D{}).&lt;br /&gt;
&lt;br /&gt;
Свойства элемента «Текст»:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Наименование свойства&lt;br /&gt;
!Описание&lt;br /&gt;
|-&lt;br /&gt;
|alignment&lt;br /&gt;
|Выравнивание текста по вертикали и горизонтали&lt;br /&gt;
|-&lt;br /&gt;
|angle&lt;br /&gt;
|Поворот надписи&lt;br /&gt;
|-&lt;br /&gt;
|autoHeight&lt;br /&gt;
|Автоматический подбор высоты&lt;br /&gt;
|-&lt;br /&gt;
|autoWidth&lt;br /&gt;
|Автоматический подбор ширины&lt;br /&gt;
|-&lt;br /&gt;
|backgroundColor&lt;br /&gt;
|Цвет заливки&lt;br /&gt;
|-&lt;br /&gt;
|backgroundMode&lt;br /&gt;
|Режим заливки&lt;br /&gt;
|-&lt;br /&gt;
| backgroundOpacity&lt;br /&gt;
|Прозрачность заливки&lt;br /&gt;
|-&lt;br /&gt;
|borders&lt;br /&gt;
|Границы&lt;br /&gt;
|-&lt;br /&gt;
|content&lt;br /&gt;
|Содержимое объекта «Текст»&lt;br /&gt;
|-&lt;br /&gt;
|font&lt;br /&gt;
|Шрифт&lt;br /&gt;
|-&lt;br /&gt;
|fontColor&lt;br /&gt;
|Цвет шрифта&lt;br /&gt;
|-&lt;br /&gt;
| foregroundOpacity&lt;br /&gt;
|Прозрачность шрифта&lt;br /&gt;
|-&lt;br /&gt;
|geometry&lt;br /&gt;
|Размер и расположение объекта&lt;br /&gt;
|-&lt;br /&gt;
|itemLocation&lt;br /&gt;
|Расположение объекта (страница или бэнд)&lt;br /&gt;
|-&lt;br /&gt;
|margin&lt;br /&gt;
|Отступы&lt;br /&gt;
|-&lt;br /&gt;
|objectName&lt;br /&gt;
| Имя объекта&lt;br /&gt;
|-&lt;br /&gt;
|stretchToMaxHeight&lt;br /&gt;
|Установка значения высоты самого высокого объекта на бэнде&lt;br /&gt;
|-&lt;br /&gt;
|trimValue&lt;br /&gt;
|Удаление  пробелов в начале и в конце надписи&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Для редактирования свойства «Content» используется диалоговое окно «Text Item Editor», вызов которого осуществляется двойным щелчком левой кнопки мыши на элементе «Текст».&lt;br /&gt;
&lt;br /&gt;
Свойство «Content» может содержать: &lt;br /&gt;
&lt;br /&gt;
*текст;&lt;br /&gt;
*значения переменных;&lt;br /&gt;
*значения полей из набора данных;&lt;br /&gt;
*значения, формируемые посредством исполнения скрипта.&lt;br /&gt;
&lt;br /&gt;
Для вывода значений переменных используется синтаксис «$V{имяПеременной}» (без кавычек), для вывода значения поля данных – «$D{имяНабораДанных.ИмяПеременной}», для вывода результата исполнения скрипта – «$S{телоСкрипта}».&lt;br /&gt;
&lt;br /&gt;
==== Изображение ====&lt;br /&gt;
Элемент для вывода изображений:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Наименование свойства&lt;br /&gt;
!Описание&lt;br /&gt;
|-&lt;br /&gt;
|autoSize&lt;br /&gt;
|Подгонять размер под размер изображения&lt;br /&gt;
|-&lt;br /&gt;
|borders&lt;br /&gt;
|Границы&lt;br /&gt;
|-&lt;br /&gt;
|content  &lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|datasource&lt;br /&gt;
|Источник данных&lt;br /&gt;
|-&lt;br /&gt;
|field&lt;br /&gt;
|Поле данных&lt;br /&gt;
|-&lt;br /&gt;
|geometry&lt;br /&gt;
|Размер и расположение&lt;br /&gt;
|-&lt;br /&gt;
|image&lt;br /&gt;
|Изображение&lt;br /&gt;
|-&lt;br /&gt;
| itemLocation&lt;br /&gt;
|Расположение объекта (страница или бэнд)&lt;br /&gt;
|-&lt;br /&gt;
|objectName&lt;br /&gt;
|Имя объекта&lt;br /&gt;
|-&lt;br /&gt;
| stretchToMaxHeight&lt;br /&gt;
|Устанавливать значение высоты самого высокого объекта на  бэнде&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
====Фигура====&lt;br /&gt;
Элемент для вывода фигур:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Наименование свойства&lt;br /&gt;
!Описание&lt;br /&gt;
|-&lt;br /&gt;
|borders&lt;br /&gt;
|Границы&lt;br /&gt;
|-&lt;br /&gt;
| geometry&lt;br /&gt;
|Размер и расположение&lt;br /&gt;
|-&lt;br /&gt;
|itemLocation&lt;br /&gt;
|Расположение объекта (страница или бэнд)&lt;br /&gt;
|-&lt;br /&gt;
|lineWidth&lt;br /&gt;
|Толщина линии&lt;br /&gt;
|-&lt;br /&gt;
|objectName&lt;br /&gt;
|Имя объекта&lt;br /&gt;
|-&lt;br /&gt;
|opacity&lt;br /&gt;
|Прозрачность&lt;br /&gt;
|-&lt;br /&gt;
|penStyle&lt;br /&gt;
|Стиль линии&lt;br /&gt;
|-&lt;br /&gt;
|shape&lt;br /&gt;
|Фигура&lt;br /&gt;
|-&lt;br /&gt;
|shapeBrush&lt;br /&gt;
|Стиль заливки&lt;br /&gt;
|-&lt;br /&gt;
|shapeBrushColor&lt;br /&gt;
|Цвет заливки&lt;br /&gt;
|-&lt;br /&gt;
|shapeColor&lt;br /&gt;
|Цвет фигуры&lt;br /&gt;
|-&lt;br /&gt;
|stretchToMaxHeight&lt;br /&gt;
|Устанавливать значение высоты самого высокого объекта на  бэнде&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
====Горизонтальная компоновка (Layout)====&lt;br /&gt;
Элемент, позволяющий объединять несколько элементов в группу:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Наименование свойства&lt;br /&gt;
!Описание&lt;br /&gt;
|-&lt;br /&gt;
|borders&lt;br /&gt;
|Границы&lt;br /&gt;
|-&lt;br /&gt;
|geometry&lt;br /&gt;
|Размер и расположение&lt;br /&gt;
|-&lt;br /&gt;
|itemLocation&lt;br /&gt;
|Расположение объекта (страница или бэнд)&lt;br /&gt;
|-&lt;br /&gt;
|objectName&lt;br /&gt;
|Имя объекта&lt;br /&gt;
|-&lt;br /&gt;
|stretchToMaxHeight&lt;br /&gt;
|Устанавливать значение высоты самого высокого объекта на  бэнде&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Разделы отчета (бэнды) ===&lt;br /&gt;
Бэнд предназначен для размещения других элементов отчета. Бэнд может быть нескольких типов:&lt;br /&gt;
&lt;br /&gt;
*Report Header – заголовок отчета;&lt;br /&gt;
*Report Footer – завершение отчета;&lt;br /&gt;
*Page Header – верхний колонтитул страницы отчета;&lt;br /&gt;
*Page Footer – нижний колонтитул страницы отчета;&lt;br /&gt;
*Data – данные отчета;&lt;br /&gt;
* SubDetail – подчиненные данные отчета;&lt;br /&gt;
*SubDetailHeader – заголовок подчиненных данных;&lt;br /&gt;
*SubDetailFooter – завершение подчиненных данных;&lt;br /&gt;
*GroupHeader – заголовок группы;&lt;br /&gt;
*GroupFooter – завершение группы.&lt;br /&gt;
&lt;br /&gt;
Бэнды применяются для логической группировки объектов. К примеру, размещение объекта на элементе «Данные» типа «Page Header», приводит к отображению этого объекта в верхней части каждой страницы готового отчета. Аналогичным образом «Page Footer» выводится внизу каждой страницы со всеми лежащими на нем объектами.&lt;br /&gt;
&lt;br /&gt;
Общие для всех элементов «Данные» свойства:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Наименование свойства&lt;br /&gt;
!Описание&lt;br /&gt;
|-&lt;br /&gt;
|autoHeight&lt;br /&gt;
|Автоматический подбор высоты&lt;br /&gt;
|-&lt;br /&gt;
|backgroundColor&lt;br /&gt;
|Цвет заливки бэнда&lt;br /&gt;
|-&lt;br /&gt;
|borders&lt;br /&gt;
|Границы&lt;br /&gt;
|-&lt;br /&gt;
|geometry&lt;br /&gt;
|Размер&lt;br /&gt;
|-&lt;br /&gt;
|keepBottomSpace&lt;br /&gt;
|Сохранение отступа от нижней границы бэнда&lt;br /&gt;
|-&lt;br /&gt;
|objectName&lt;br /&gt;
|Имя объекта&lt;br /&gt;
|-&lt;br /&gt;
|printIfEmpty&lt;br /&gt;
|Отображение пустого бэнда&lt;br /&gt;
|-&lt;br /&gt;
|splittable&lt;br /&gt;
|Разделение  бэнда, если он не влезает на страницу&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Report Footer:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Наименование свойства&lt;br /&gt;
!Описание&lt;br /&gt;
|-&lt;br /&gt;
|maxScalePercent&lt;br /&gt;
|Максимальный процент, на который можно уменьшить бенд, если он не влезает на страницу. Если бэнд даже после сжатия&lt;br /&gt;
&lt;br /&gt;
не влезает на страницу, он будет перенесен полностью или частично  – в зависимости от настроек бэнда&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Data:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Наименование свойства&lt;br /&gt;
!Описание&lt;br /&gt;
|-&lt;br /&gt;
|datasource&lt;br /&gt;
|Источник данных. Data-бэнд будет сформирован для каждой строки в источнике данных&lt;br /&gt;
|-&lt;br /&gt;
|keepFooterTogether&lt;br /&gt;
|Если Report Footer не влезает на страницу, то он будет перенесен на следующую страницу совместно с последним&lt;br /&gt;
&lt;br /&gt;
экземпляром Data-бэнда&lt;br /&gt;
|-&lt;br /&gt;
|sliceLastRow&lt;br /&gt;
| Указывает генератору отчетов на то, можно ли разрезать последний экземпляр Data-бэнда или его нужно перенести&lt;br /&gt;
&lt;br /&gt;
целиком&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Бэнды данного типа предназначены для вывода на печать данных из наборов. Набор данных - это заранее неизвестное количество строк (записей), каждая из которых содержит определенное количество колонок (полей).&lt;br /&gt;
&lt;br /&gt;
SubDetail:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Наименование свойства&lt;br /&gt;
!Описание&lt;br /&gt;
|-&lt;br /&gt;
|datasource&lt;br /&gt;
| Источник данных. SubDetail-бэнд будет сформирован для каждой строки в источнике данных&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
SubDetailHeader, SubDetailFooter:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Наименование свойства&lt;br /&gt;
!Описание&lt;br /&gt;
|-&lt;br /&gt;
|printAlways&lt;br /&gt;
| Печатать, даже если SubDetail пустой&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
GroupHeader:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Наименование свойства&lt;br /&gt;
! Описание&lt;br /&gt;
|-&lt;br /&gt;
|groupFieldName&lt;br /&gt;
|Поле, по которому осуществляется группировка. Экземпляр GroupHeader будет формироваться при смене значения в этом  поле&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===Функции===&lt;br /&gt;
==== Агрегатные функции ====&lt;br /&gt;
Агрегатные функции предназначены для обработки значений, содержащихся в резделах Data и SubDetail.&lt;br /&gt;
&lt;br /&gt;
===== AVG - вычисление среднего значения =====&lt;br /&gt;
Пример использования:&lt;br /&gt;
 $S{AVG(&amp;quot;TextItem4&amp;quot;,&amp;quot;DataBand1&amp;quot;);}&lt;br /&gt;
&lt;br /&gt;
===== SUM - вычисление суммы значений =====&lt;br /&gt;
Пример использования:&lt;br /&gt;
 $S{SUM(&amp;quot;TextItem8&amp;quot;,&amp;quot;DataBand1&amp;quot;);}&lt;br /&gt;
&lt;br /&gt;
===== MIN =====&lt;br /&gt;
&lt;br /&gt;
===== MAX =====&lt;br /&gt;
&lt;br /&gt;
===== COUNT =====&lt;br /&gt;
&lt;br /&gt;
==== Числовые функции ====&lt;br /&gt;
&lt;br /&gt;
===== numberFormat - форматирование числа =====&lt;br /&gt;
Синтаксис:&lt;br /&gt;
 numberFormat(значение, 'формат', точность)&lt;br /&gt;
Форматы:&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;'f'&amp;lt;/code&amp;gt; — фиксированная запись (например, &amp;lt;code&amp;gt;&amp;quot;123.45&amp;quot;&amp;lt;/code&amp;gt;);&lt;br /&gt;
* &amp;lt;code&amp;gt;'g'&amp;lt;/code&amp;gt; — общий формат (автоматически выбирает между &amp;lt;code&amp;gt;'f'&amp;lt;/code&amp;gt; и &amp;lt;code&amp;gt;'e'&amp;lt;/code&amp;gt;);&lt;br /&gt;
* &amp;lt;code&amp;gt;'e'&amp;lt;/code&amp;gt; — экспоненциальная запись (например, &amp;lt;code&amp;gt;&amp;quot;1.2345e+02&amp;quot;&amp;lt;/code&amp;gt;);&lt;br /&gt;
&lt;br /&gt;
Пример использования:&lt;br /&gt;
 $S{numberFormat($D{fetcharchiverdata1.ArchiversSourceConnector0 (среднее)}, 'f', 3)}       -&amp;gt; 123.495&lt;br /&gt;
[[Категория:AgavaSCADA/AgavaPLC]]&lt;/div&gt;</summary>
		<author><name>SharipovRR</name></author>
	</entry>
	<entry>
		<id>https://docs.kb-agava.ru/index.php?title=%D0%A3%D0%B7%D0%BB%D1%8B_%D0%BF%D1%80%D0%BE%D0%B5%D0%BA%D1%82%D0%B0_AgavaSCADA/AgavaPLC&amp;diff=3302</id>
		<title>Узлы проекта AgavaSCADA/AgavaPLC</title>
		<link rel="alternate" type="text/html" href="https://docs.kb-agava.ru/index.php?title=%D0%A3%D0%B7%D0%BB%D1%8B_%D0%BF%D1%80%D0%BE%D0%B5%D0%BA%D1%82%D0%B0_AgavaSCADA/AgavaPLC&amp;diff=3302"/>
		<updated>2025-10-29T11:56:45Z</updated>

		<summary type="html">&lt;p&gt;SharipovRR: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Узлы проекта ==&lt;br /&gt;
Узел - элементарная сущность проекта, осуществляющая хранение информации или реализующая определенный функционал. Каждый узел обладает набором [[Свойства узлов в AgavaPLC/AgavaSCADA|свойств]]. Все узлы, объединенные в иерархическую структуру, образуют проект.&lt;br /&gt;
&lt;br /&gt;
== Проект ==&lt;br /&gt;
[[Файл:AgavaPLC–Дерево проекта.png|мини|Рисунок 21 – Дерево проекта]]&lt;br /&gt;
Узел &amp;quot;Проект&amp;quot; (&amp;quot;Корневой узел&amp;quot;, &amp;quot;Корень&amp;quot;) предназначен для хранения общей информации о проекте и связывания других узлов проекта.&lt;br /&gt;
&lt;br /&gt;
== Станция ==&lt;br /&gt;
Станция – важнейший узел, управляющий работой собственных систем и выполняющий обмен данными с другими станциями. Физически станция представляет собой устройство, на котором исполняется проект (компьютер, панель оператора, МПР-60 или другое устройство).&lt;br /&gt;
&lt;br /&gt;
Для использования в проекте доступны несколько типов станций. например:&lt;br /&gt;
&lt;br /&gt;
* '''Станция''' - общий тип станции. Проекты с такой станцией могут выполняться на большинстве устройств - контроллеры, панели, персональные компьютеры. Чаще всего используется для проектов, предназначенных для выполнения на персональном компьютере.&lt;br /&gt;
* '''Панель ПО-40''' - специализированный тип для проектов на панелях оператора ПО-40. Станция такого типа по отношению к общему дополнительно предоставляет возможность управления оборудованием панели оператора (светодиоды индикации и др.), использования корзины субмодулей.&lt;br /&gt;
* '''Панель ПО-50''' - специализированный тип для проектов на панелях оператора ПО-50. Станция такого типа по отношению к общему дополнительно предоставляет возможность управления оборудованием панели оператора (светодиоды индикации и др.).&lt;br /&gt;
* '''Контроллер МПР-60''' - специализированный тип для проектов на программируемых реле МПР-60. Станция такого типа по отношению к общему дополнительно предоставляет возможность управления оборудованием панели оператора (светодиоды индикации и др.), использования корзины субмодулей.&lt;br /&gt;
&lt;br /&gt;
При построении больших проектов станций в проекте может быть несколько, и они могут выполнять разные задачи. Например, станция-сервер выполняет сбор и регистрацию данных, клиентские станции выполняют визуализацию данных на рабочих местах и т. д.&lt;br /&gt;
&lt;br /&gt;
Станции подчиняются узлы типа &amp;quot;Система&amp;quot; - Транспортная система, Система архивирования, Система визуализации и т. д.&lt;br /&gt;
&lt;br /&gt;
== Транспортная система ==&lt;br /&gt;
Транспортная система управляет передачей данных по различным каналам связи. Система управляет работой &amp;quot;Транспортов&amp;quot; - узлов, выполняющих обмен данными с устройствами по определенному протоколу.&lt;br /&gt;
&lt;br /&gt;
С одной стороны, транспортная система обращается непосредственно к сигналам и каналам устройства, а с другой стороны, представляет их в виде неких универсальных единиц – узлов-источников. Каждый источник однозначно соответствует определенному сигналу или параметру устройства.  При изменении сигнала меняется и значение источника.  При записи данных в источник производится подача команды устройству на установку определенного значения конкретного параметра.&lt;br /&gt;
&lt;br /&gt;
Транспортная система допускает использование нескольких транспортов, что дает возможность одновременного обмена данными с большим количеством устройств по разным протоколам.&lt;br /&gt;
&lt;br /&gt;
=== Транспорт ===&lt;br /&gt;
Транспорт предназначен для обмена данными с устройствами по определенному протоколу. Один транспорт, в зависимости от типа, позволяет обмениваться данными с одним или несколькими устройствами.&lt;br /&gt;
&lt;br /&gt;
Доступны для использования следующие виды транспортов:&lt;br /&gt;
&lt;br /&gt;
* Транспорт Modbus-TCP;&lt;br /&gt;
* Транспорт Modbus-RTU;&lt;br /&gt;
* Транспорт SNMP;&lt;br /&gt;
* Транспорт OPC UA;&lt;br /&gt;
* Транспорт OPC DA (только для Windows);&lt;br /&gt;
* Транспорт MQTT;&lt;br /&gt;
* Последовательный транспорт (устаревший);&lt;br /&gt;
* TCP/IP транспорт (устаревший).&lt;br /&gt;
Подробное описание транспортов приведено в отдельном документе &amp;quot;[[Транспорты AgavaSCADA/AgavaPLC]]&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
==Система визуализации==&lt;br /&gt;
{{Внимание|Тип=Восклицание желтый.png|Текст=Система визуализации недоступна в проектах для контроллеров МПР}}&lt;br /&gt;
 &lt;br /&gt;
Задачей этой системы является отображение данных в виде набора мнемонических схем (экранов, мнемосхем), а также предоставление пользователю возможности управления. &lt;br /&gt;
&lt;br /&gt;
Каждый экран позволяет в схематичном, понятном пользователю виде представить участок технологической схемы с отображением необходимых параметров технологического процесса.&lt;br /&gt;
&lt;br /&gt;
Изображение на экране строится с помощью окон, на которых размещаются объекты визуализации – виджеты. Виджетами могут быть текстовые метки, изображения, в том числе анимированные, элементы управления, графики и т. д. Виджеты можно объединять в слои для удобного управления отображением виджетов.&lt;br /&gt;
&lt;br /&gt;
Виджеты могут быть статическими и динамическими.  Динамические виджеты привязаны к одному или нескольким сигналам и их отображение зависит от значений этих сигналов. Статические виджеты не имеют привязки к сигналам и их изображение всегда постоянно.&lt;br /&gt;
&lt;br /&gt;
Для перехода по экранам, изменения значений параметров и иного управления служат специальные виджеты: кнопки управления, поля ввода и другие.&lt;br /&gt;
&lt;br /&gt;
Для повышения быстродействия и увеличения комфортности работы с системой система визуализации хранит в памяти кэш из нескольких последних открытых экранов. Когда при последовательном открытии экранов этот кэш заполняется, наиболее старые экраны удаляются из него.  Это связано с тем, что, как правило, в работе используются несколько одних и тех же экранов, которые отображают сводную информацию о техпроцессе и оператор в штатном режиме переключается только между ними. Сохраняя их в памяти, система ускоряет переключение между ними, поскольку при этом не требуется каждый раз создавать экран, все находящиеся на нем объекты и запускать процессы обновления параметров.&lt;br /&gt;
&lt;br /&gt;
Когда экран переходит в кэш, обновление параметров на нем прекращается для снижения нагрузки на центральный процессор. Если все же необходимо, чтобы экран всегда производил обновление данных (по разным причинам), даже находясь в кэше, необходимо в его настройках включить опцию «Постоянно обновляемый».&lt;br /&gt;
&lt;br /&gt;
Подчиненные типы узлов:&lt;br /&gt;
&lt;br /&gt;
*фрейм;&lt;br /&gt;
*окно;&lt;br /&gt;
*композиция.&lt;br /&gt;
&lt;br /&gt;
===Фрейм===&lt;br /&gt;
[[Файл:AgavaPLC–Пример структуры сложного фрейма, состоящего из двух форм и одного окна с многослойной композицией.png|мини|Рисунок 23 – Пример структуры сложного фрейма, состоящего из двух форм и одного окна с многослойной композицией]]&lt;br /&gt;
Фрейм – узел, предназначенный для группировки окон, отображаемых на определенном дисплее. Обеспечивает организацию окон в пространстве экрана, управление мониторами и границами отображения. &lt;br /&gt;
&lt;br /&gt;
Если необходимо отобразить информацию на нескольких дисплеях одновременно, то для каждого из них нужно использовать отдельный фрейм. Окон во фрейме может быть несколько, однако они не могут накладываться друг на друга.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Наименование свойства&lt;br /&gt;
!Идентификатор&lt;br /&gt;
!Тип&lt;br /&gt;
!Описание&lt;br /&gt;
!Допустимые значения&lt;br /&gt;
|-&lt;br /&gt;
|Позиция X&lt;br /&gt;
|XCoord&lt;br /&gt;
|int&lt;br /&gt;
|Координата X левого верхнего угла фрейма&lt;br /&gt;
|Целое число&lt;br /&gt;
|-&lt;br /&gt;
|Позиция Y&lt;br /&gt;
|YCoord&lt;br /&gt;
|int&lt;br /&gt;
|Координата Y левого верхнего угла фрейма&lt;br /&gt;
|Целое число&lt;br /&gt;
|-&lt;br /&gt;
|Ширина&lt;br /&gt;
|XSize&lt;br /&gt;
|int&lt;br /&gt;
|Ширина фрейма в пикселях&lt;br /&gt;
|Целое число &amp;gt; 0&lt;br /&gt;
|-&lt;br /&gt;
|Высота&lt;br /&gt;
|YSize&lt;br /&gt;
|int&lt;br /&gt;
|Высота фрейма в пикселях&lt;br /&gt;
|Целое число &amp;gt; 0&lt;br /&gt;
|-&lt;br /&gt;
|Окна&lt;br /&gt;
|Windows&lt;br /&gt;
|NodesArray&lt;br /&gt;
|Список окон, принадлежащих фрейму&lt;br /&gt;
|Узлы типа: Window&lt;br /&gt;
|-&lt;br /&gt;
|Номер монитора&lt;br /&gt;
|DisplayNo&lt;br /&gt;
|int&lt;br /&gt;
|Номер монитора для отображения фрейма&lt;br /&gt;
|0 - по умолчанию&lt;br /&gt;
≥1 - конкретные мониторы&lt;br /&gt;
|-&lt;br /&gt;
|Тип границы&lt;br /&gt;
|BorderType&lt;br /&gt;
|enum&lt;br /&gt;
|Тип границы фрейма&lt;br /&gt;
|0: Не определен (ошибка)&lt;br /&gt;
1: Отсутствует&lt;br /&gt;
&lt;br /&gt;
2: Фиксированная&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== Позиция и размеры (XCoord, YCoord, XSize, YSize) ====&lt;br /&gt;
&lt;br /&gt;
* '''Тип:''' int.&lt;br /&gt;
* '''Описание:''' Определяют положение и размеры фрейма на экране.&lt;br /&gt;
* '''Значения по умолчанию:''' (0, 0, 640, 480).&lt;br /&gt;
* '''Применение:''' Задание области экрана, которую занимает фрейм.&lt;br /&gt;
&lt;br /&gt;
==== Окна (Windows) ====&lt;br /&gt;
'''Тип:''' NodesArray.&lt;br /&gt;
&lt;br /&gt;
'''Описание:''' Коллекция окон, которые управляются данным фреймом. Окна могут добавляться только из существующих узлов.&lt;br /&gt;
&lt;br /&gt;
'''Особенности:'''&lt;br /&gt;
&lt;br /&gt;
* Поддерживаются только узлы типа Window.&lt;br /&gt;
&lt;br /&gt;
==== Номер монитора (DisplayNo) ====&lt;br /&gt;
'''Тип:''' int.&lt;br /&gt;
&lt;br /&gt;
'''Описание:''' Определяет, на каком мониторе системы отображается фрейм. Значение 0 соответствует монитору по умолчанию.&lt;br /&gt;
&lt;br /&gt;
'''Использование:'''&lt;br /&gt;
&lt;br /&gt;
* 0 - основной монитор.&lt;br /&gt;
* 1, 2, ... - дополнительные мониторы.&lt;br /&gt;
* Свойство важно для многомониторных конфигураций.&lt;br /&gt;
&lt;br /&gt;
==== Тип границы (BorderType) ====&lt;br /&gt;
'''Тип:''' enum.&lt;br /&gt;
&lt;br /&gt;
'''Описание:''' Определяет тип обрамления фрейма. Влияет на внешний вид и поведение границ.&lt;br /&gt;
&lt;br /&gt;
'''Значения:'''&lt;br /&gt;
&lt;br /&gt;
* '''Отсутствует''' - фрейм без видимых границ.&lt;br /&gt;
* '''Фиксированная''' - стандартная граница окна.&lt;br /&gt;
* '''Не определен''' - используется только для обработки ошибок.&lt;br /&gt;
&lt;br /&gt;
==== Наследование привилегий ====&lt;br /&gt;
Фрейм автоматически добавляет доступные привилегии для работы с окнами:&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;OpenWindow&amp;lt;/code&amp;gt; - привилегия на открытие окон.&lt;br /&gt;
* &amp;lt;code&amp;gt;CloseWindow&amp;lt;/code&amp;gt; - привилегия на закрытие окон.&lt;br /&gt;
&lt;br /&gt;
===Окна===&lt;br /&gt;
Окно – узел, осуществляющий отображение видеокадра (мнемонической схемы).&lt;br /&gt;
&lt;br /&gt;
Существуют несколько видов окон:&lt;br /&gt;
&lt;br /&gt;
1. «Форма», предназначенная для вывода простого набора данных без необходимости управления видимостью или внешним видом его элементов. Для вывода информации в такое окно кроме создания окна и добавления к нему виджетов ничего более не требуется.&lt;br /&gt;
[[Файл:AgavaPLC-Меню.png|мини|164x164пкс|Рисунок 24 — Внешний вид меню в среде исполнения]]&lt;br /&gt;
2. «Окно с композицией», предназначенное для вывода большого количества информации и позволяющее организовать группировку элементов по слоям, управлять внешним видом элементов, видимостью слоев и отдельных элементов, а также дающее возможность регулирования работы пользователя с элементами. Для вывода информации в такое окно нужно к окну привязать композицию, содержащую минимум один слой, в который уже добавляются виджеты.&lt;br /&gt;
&lt;br /&gt;
=== Форма ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Наименование свойства&lt;br /&gt;
!Идентификатор&lt;br /&gt;
!Тип&lt;br /&gt;
!Описание&lt;br /&gt;
!Допустимые значения&lt;br /&gt;
!Режим доступа&lt;br /&gt;
|-&lt;br /&gt;
|Модальность&lt;br /&gt;
|Modality&lt;br /&gt;
|enum&lt;br /&gt;
|Режим модальности окна&lt;br /&gt;
|0: Не определен (ошибка)&lt;br /&gt;
1: Немодальное&lt;br /&gt;
&lt;br /&gt;
2: Модальное (Фрейм)&lt;br /&gt;
&lt;br /&gt;
3: Модальное (Система)&lt;br /&gt;
|Чтение/Запись&lt;br /&gt;
|-&lt;br /&gt;
|Тип границы&lt;br /&gt;
|BorderType&lt;br /&gt;
|enum&lt;br /&gt;
|Тип границы окна&lt;br /&gt;
|0: Не определен (ошибка)&lt;br /&gt;
1: Фиксированная&lt;br /&gt;
&lt;br /&gt;
2: Изменяемая&lt;br /&gt;
&lt;br /&gt;
3: Отсутствует&lt;br /&gt;
|Чтение/Запись&lt;br /&gt;
|-&lt;br /&gt;
|Отображать строку заголовка&lt;br /&gt;
|TitleEnabled&lt;br /&gt;
|bool&lt;br /&gt;
|Отображать строку заголовка&lt;br /&gt;
|true/false&lt;br /&gt;
|Чтение/Запись&lt;br /&gt;
|-&lt;br /&gt;
|Отображать кнопку &amp;quot;Закрыть&amp;quot;&lt;br /&gt;
|CloseEnabled&lt;br /&gt;
|bool&lt;br /&gt;
|Отображать кнопку &amp;quot;Закрыть&amp;quot;&lt;br /&gt;
|true/false&lt;br /&gt;
|Чтение/Запись&lt;br /&gt;
|-&lt;br /&gt;
|Цвет фона&lt;br /&gt;
|BackgroundColor&lt;br /&gt;
|NColor&lt;br /&gt;
|Цвет фона окна&lt;br /&gt;
|Цвет в формате RGBA&lt;br /&gt;
|Чтение/Запись&lt;br /&gt;
|-&lt;br /&gt;
|Затемнение&lt;br /&gt;
|NeedDarkenApplication&lt;br /&gt;
|bool&lt;br /&gt;
|Затемнение других окон приложения при открытии этого окна&lt;br /&gt;
|true/false&lt;br /&gt;
|Чтение/Запись&lt;br /&gt;
|-&lt;br /&gt;
|Цвет затемнения&lt;br /&gt;
|ColorDarkenApplication&lt;br /&gt;
|NColor&lt;br /&gt;
|Цвет затемнения&lt;br /&gt;
|Цвет в формате RGBA&lt;br /&gt;
|Чтение/Запись&lt;br /&gt;
|-&lt;br /&gt;
|Интервал обновления&lt;br /&gt;
|UpdateInterval&lt;br /&gt;
|int&lt;br /&gt;
|Интервал обновления виджетов, мс&lt;br /&gt;
|0 - без задержки&lt;br /&gt;
&amp;gt;0 - интервал в мс&lt;br /&gt;
|Чтение/Запись&lt;br /&gt;
|-&lt;br /&gt;
|Действия OnShow&lt;br /&gt;
|ActionsOnShow&lt;br /&gt;
|NodesContainer&lt;br /&gt;
|Действия при показе окна&lt;br /&gt;
|Узлы типа: Action&lt;br /&gt;
|Чтение/Запись&lt;br /&gt;
|-&lt;br /&gt;
|Действия OnClose&lt;br /&gt;
|ActionsOnClose&lt;br /&gt;
|NodesContainer&lt;br /&gt;
|Действия при закрытии окна&lt;br /&gt;
|Узлы типа: Action&lt;br /&gt;
|Чтение/Запись&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== Модальность (Modality) ====&lt;br /&gt;
'''Тип:''' enum.&lt;br /&gt;
&lt;br /&gt;
'''Описание:''' Определяет поведение окна относительно других окон приложения.&lt;br /&gt;
&lt;br /&gt;
'''Значения:'''&lt;br /&gt;
&lt;br /&gt;
* '''Немодальное''' - позволяет взаимодействовать с другими окнами.&lt;br /&gt;
* '''Модальное (Фрейм)''' - блокирует взаимодействие с окнами в том же фрейме.&lt;br /&gt;
* '''Модальное (Система)''' - блокирует все окна приложения.&lt;br /&gt;
&lt;br /&gt;
==== Тип границы (BorderType) ====&lt;br /&gt;
'''Тип:''' enum.&lt;br /&gt;
&lt;br /&gt;
'''Описание:''' Определяет тип и поведение границ окна.&lt;br /&gt;
&lt;br /&gt;
'''Значения:'''&lt;br /&gt;
&lt;br /&gt;
* '''Фиксированная''' - окно нельзя изменять размер.&lt;br /&gt;
* '''Изменяемая''' - пользователь может изменять размер окна.&lt;br /&gt;
* '''Отсутствует''' - окно без видимых границ.&lt;br /&gt;
&lt;br /&gt;
==== Управление заголовком (TitleEnabled, CloseEnabled) ====&lt;br /&gt;
'''Тип:''' bool.&lt;br /&gt;
&lt;br /&gt;
'''Описание:''' Контролируют отображение элементов заголовка окна.&lt;br /&gt;
&lt;br /&gt;
==== Фон и затемнение (BackgroundColor, NeedDarkenApplication, ColorDarkenApplication) ====&lt;br /&gt;
'''Тип:''' NColor, bool, NColor.&lt;br /&gt;
&lt;br /&gt;
'''Описание:''' Управляют визуальным оформлением окна и его влиянием на другие окна.&lt;br /&gt;
&lt;br /&gt;
'''Особенности:'''&lt;br /&gt;
&lt;br /&gt;
* Затемнение применяется только при NeedDarkenApplication = true.&lt;br /&gt;
* Цвет затемнения по умолчанию: черный с прозрачностью 50%.&lt;br /&gt;
&lt;br /&gt;
==== Интервал обновления (UpdateInterval) ====&lt;br /&gt;
'''Тип:''' int.&lt;br /&gt;
&lt;br /&gt;
'''Описание:''' Определяет частоту обновления виджетов в окне.&lt;br /&gt;
&lt;br /&gt;
'''Рекомендации:'''&lt;br /&gt;
&lt;br /&gt;
* 0 - 100 мс для композиций с критичным временем отклика.&lt;br /&gt;
* 100 - 500 мс хорошо подходит для большинства случаев.&lt;br /&gt;
* более 1000 мс - для статических или редко меняющихся данных.&lt;br /&gt;
&lt;br /&gt;
==== Обработчики событий (ActionsOnShow, ActionsOnClose) ====&lt;br /&gt;
'''Тип:''' NodesContainer.&lt;br /&gt;
&lt;br /&gt;
'''Описание:''' Коллекции действий, выполняемых при показе и закрытии окна.&lt;br /&gt;
&lt;br /&gt;
=== Окно с композицией ===&lt;br /&gt;
Данный узел имеет те же свойства, что и форма, а также собственные:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Наименование свойства&lt;br /&gt;
!Идентификатор&lt;br /&gt;
!Тип&lt;br /&gt;
!Описание&lt;br /&gt;
!Допустимые значения&lt;br /&gt;
!Режим доступа&lt;br /&gt;
|-&lt;br /&gt;
|Композиция&lt;br /&gt;
|CompositionId&lt;br /&gt;
|NodeLink&lt;br /&gt;
|Основная композиция окна&lt;br /&gt;
|Узлы типа: CompositionLayered, CompositionTemplated&lt;br /&gt;
|Чтение/Запись&lt;br /&gt;
|-&lt;br /&gt;
|Описание текущей композиции&lt;br /&gt;
|CurrentCompositionDesc&lt;br /&gt;
|string&lt;br /&gt;
|Описание текущей загруженной композиции&lt;br /&gt;
|Автоматически формируется&lt;br /&gt;
|Только чтение&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== Композиция (CompositionId) ====&lt;br /&gt;
'''Тип:''' NodeLink.&lt;br /&gt;
&lt;br /&gt;
'''Описание:''' Ссылка на композицию, отображаемую в окне.&lt;br /&gt;
&lt;br /&gt;
'''Поддерживаемые типы:''' CompositionLayered, CompositionTemplated.&lt;br /&gt;
&lt;br /&gt;
==== Описание текущей композиции (CurrentCompositionDesc) ====&lt;br /&gt;
'''Тип:''' string.&lt;br /&gt;
&lt;br /&gt;
'''Описание:''' Автоматически обновляемое описание загруженной композиции.&lt;br /&gt;
&lt;br /&gt;
'''Особенности:''' Свойство только для чтения, обновляется системой автоматически.[[Файл:AgavaPLC-Настройка меню в среде разработки.png|мини|226x226пкс|Рисунок 25 — Настройка меню в среде разработки]]&lt;br /&gt;
&lt;br /&gt;
===Композиция===&lt;br /&gt;
Композиция – узел, представляющий составленную при разработке проекта мнемоническую схему в виде набора элементов визуализации (виджетов), сгруппированных в один или несколько слоев.&lt;br /&gt;
&lt;br /&gt;
Композиция дает возможность организовать виджеты в слои, видимостью которых можно управлять во время работы проекта.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Наименование свойства&lt;br /&gt;
!Идентификатор&lt;br /&gt;
!Тип&lt;br /&gt;
!Описание&lt;br /&gt;
!Допустимые значения&lt;br /&gt;
!Режим доступа&lt;br /&gt;
|-&lt;br /&gt;
|Размеры&lt;br /&gt;
|Size&lt;br /&gt;
|NSize&lt;br /&gt;
|Размеры композиции&lt;br /&gt;
|Структура {ширина, высота}&lt;br /&gt;
|Чтение/Запись&lt;br /&gt;
|-&lt;br /&gt;
|Кэширование&lt;br /&gt;
|Cacheable&lt;br /&gt;
|bool&lt;br /&gt;
|Кэширование данных композиции для быстрого повторного открытия&lt;br /&gt;
|true/false&lt;br /&gt;
|Чтение/Запись&lt;br /&gt;
|-&lt;br /&gt;
|Источник интервала обновления&lt;br /&gt;
|UpdateIntervalSource&lt;br /&gt;
|enum&lt;br /&gt;
|Определяет источник интервала обновления виджетов&lt;br /&gt;
|0: Окно&lt;br /&gt;
1: Композиция&lt;br /&gt;
|Чтение/Запись&lt;br /&gt;
|-&lt;br /&gt;
|Интервал обновления&lt;br /&gt;
|UpdateInterval&lt;br /&gt;
|int&lt;br /&gt;
|Интервал обновления виджетов в миллисекундах&lt;br /&gt;
|Целое число ≥ 0&lt;br /&gt;
|Чтение/Запись&lt;br /&gt;
|-&lt;br /&gt;
|Действия OnLoad&lt;br /&gt;
|ActionsOnLoad&lt;br /&gt;
|NodesContainer&lt;br /&gt;
|Действия при загрузке композиции&lt;br /&gt;
|Узлы типа: Action&lt;br /&gt;
|Чтение/Запись&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== Размеры (Size) ====&lt;br /&gt;
'''Тип:''' NSize (ширина, высота).&lt;br /&gt;
&lt;br /&gt;
'''Описание:''' Определяет размеры композиции в пикселях. По умолчанию установлены значения 800x600.&lt;br /&gt;
&lt;br /&gt;
==== Кэширование (Cacheable) ====&lt;br /&gt;
'''Тип:''' bool.&lt;br /&gt;
&lt;br /&gt;
'''Описание:''' Включает или отключает кэширование данных композиции. При включенном кэшировании композиция сохраняется в памяти для быстрого повторного открытия.&lt;br /&gt;
&lt;br /&gt;
'''Преимущества кэширования:'''&lt;br /&gt;
&lt;br /&gt;
* Быстрое переключение между композициями.&lt;br /&gt;
* Снижение нагрузки на систему при частом использовании.&lt;br /&gt;
* Сохранение состояния элементов.&lt;br /&gt;
&lt;br /&gt;
'''Рекомендации:''' Включать для часто используемых композиций, отключать для редко используемых или ресурсоемких.&lt;br /&gt;
&lt;br /&gt;
==== Источник интервала обновления (UpdateIntervalSource) ====&lt;br /&gt;
'''Тип:''' enum.&lt;br /&gt;
&lt;br /&gt;
'''Описание:''' Определяет, откуда виджеты композиции получают интервал обновления.&lt;br /&gt;
&lt;br /&gt;
'''Значения:'''&lt;br /&gt;
&lt;br /&gt;
* '''Окно''' - интервал обновления наследуется от родительского окна.&lt;br /&gt;
* '''Композиция''' - используется собственный интервал обновления композиции.&lt;br /&gt;
&lt;br /&gt;
'''Применение:''' Централизованное управление производительностью через окно или индивидуальная настройка для каждой композиции.&lt;br /&gt;
&lt;br /&gt;
==== Интервал обновления (UpdateInterval) ====&lt;br /&gt;
'''Тип:''' int.&lt;br /&gt;
&lt;br /&gt;
'''Описание:''' Задает интервал обновления виджетов в миллисекундах. При значении 0 отрисовка виджетов выполняется без задержки (максимальная частота).&lt;br /&gt;
&lt;br /&gt;
'''Особенности:'''&lt;br /&gt;
&lt;br /&gt;
* 0 - обновление без задержек (может создать высокую нагрузку).&lt;br /&gt;
* &amp;gt; 0 - обновление с заданным интервалом.   Учитывается только при UpdateIntervalSource = &amp;quot;Композиция&amp;quot;&lt;br /&gt;
&lt;br /&gt;
'''Рекомендации:'''&lt;br /&gt;
&lt;br /&gt;
* 0 - 100 мс для композиций с критичным временем отклика.&lt;br /&gt;
* 100 - 500 мс хорошо подходит для большинства случаев.&lt;br /&gt;
* более 1000 мс - для статических или редко меняющихся данных.&lt;br /&gt;
&lt;br /&gt;
==== Обработчик событий ActionsOnLoad ====&lt;br /&gt;
'''Тип:''' NodesContainer.&lt;br /&gt;
&lt;br /&gt;
'''Описание:''' Коллекции действий, выполняемых после загрузки композиции &amp;lt;code&amp;gt;AS 1.6.27+&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
===Слой===&lt;br /&gt;
Слой – набор виджетов, объединенных каким-то общим структурным признаком. В многослойных композициях слой обеспечивает организацию виджетов в z-порядке, управление видимостью и взаимодействием с пользователем. С помошью свойства &amp;quot;Видимость&amp;quot; слоя можно управлять видимостью виджетов, размещенных на слое.&lt;br /&gt;
&lt;br /&gt;
Свойства&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Наименование свойства&lt;br /&gt;
!Идентификатор&lt;br /&gt;
!Тип&lt;br /&gt;
!Описание&lt;br /&gt;
!Допустимые значения&lt;br /&gt;
!Режим доступа&lt;br /&gt;
|-&lt;br /&gt;
|Z-Порядок&lt;br /&gt;
|ZOrder&lt;br /&gt;
|int&lt;br /&gt;
|Порядок слоя в композиции&lt;br /&gt;
|Целое число (чем выше значение, тем выше слой)&lt;br /&gt;
|Чтение/Запись&lt;br /&gt;
|-&lt;br /&gt;
|Прозрачность для действий&lt;br /&gt;
|ActionTransparency&lt;br /&gt;
|enum&lt;br /&gt;
|Определяет поведение слоя при взаимодействии с пользователем&lt;br /&gt;
|0: Не определен (ошибка)&lt;br /&gt;
1: Непрозрачный&lt;br /&gt;
&lt;br /&gt;
2: Прозрачный&lt;br /&gt;
|Чтение/Запись&lt;br /&gt;
|-&lt;br /&gt;
|Видимость&lt;br /&gt;
|Visible&lt;br /&gt;
|bool&lt;br /&gt;
|Видимость слоя и всех его виджетов&lt;br /&gt;
|true/false&lt;br /&gt;
|Чтение/Запись&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== Z-Порядок (ZOrder) ====&lt;br /&gt;
'''Тип:''' int&lt;br /&gt;
&lt;br /&gt;
'''Описание:''' Определяет порядок отображения слоя относительно других слоев в композиции. Слои с большим значением ZOrder отображаются поверх слоев с меньшим значением.&lt;br /&gt;
&lt;br /&gt;
'''Пример использования:'''&lt;br /&gt;
&lt;br /&gt;
* Фоновый слой: ZOrder = 1.&lt;br /&gt;
* Основной контент: ZOrder = 2.&lt;br /&gt;
* Контекстные виджеты: ZOrder = 3.&lt;br /&gt;
&lt;br /&gt;
==== Прозрачность для действий (ActionTransparency) ====&lt;br /&gt;
'''Тип:''' enum&lt;br /&gt;
&lt;br /&gt;
'''Описание:''' Управляет взаимодействием слоя с пользовательскими действиями (клики, наведения и т.д.)&lt;br /&gt;
&lt;br /&gt;
'''Значения:'''&lt;br /&gt;
&lt;br /&gt;
* '''Непрозрачный''' - слой полностью перехватывает пользовательские действия, элементы под ним недоступны, даже если они видимы.&lt;br /&gt;
* '''Прозрачный''' - пользовательские действия проходят сквозь слой к элементам ниже.&lt;br /&gt;
&lt;br /&gt;
Обратите внимание: если на слое размещается изображение с прозрачной областью, то такие виджеты не позволяют пользователю взаимодействовать с видимыми и размещенными под ним виджетами.&lt;br /&gt;
&lt;br /&gt;
==== Видимость (Visible) ====&lt;br /&gt;
'''Тип:''' bool&lt;br /&gt;
&lt;br /&gt;
'''Описание:''' Определяет видимость всего слоя и всех его дочерних виджетов. При значении false слой и все его содержимое становится невидимым.&lt;br /&gt;
&lt;br /&gt;
'''Применение:''' Временное скрытие виджетов или переключение их видимости.&lt;br /&gt;
&lt;br /&gt;
===Виджет===&lt;br /&gt;
Виджет – элемент визуализации, предназначенный для отображения информации в заданном виде.&lt;br /&gt;
&lt;br /&gt;
===Меню===&lt;br /&gt;
Меню – элемент визуализации, сочетающий в себе несколько виджетов «Кнопка». Используется для более удобного управления проектом (см. Рисунок 24).&lt;br /&gt;
&lt;br /&gt;
Для добавления меню, необходимо в среде разработки назначить [[Универсальная среда разработки#.D0.94.D0.B5.D0.B9.D1.81.D1.82.D0.B2.D0.B8.D0.B5 .C2.AB.D0.9E.D1.82.D0.BE.D0.B1.D1.80.D0.B0.D0.B6.D0.B5.D0.BD.D0.B8.D0.B5 .D0.BC.D0.B5.D0.BD.D1.8E.C2.BB|действие «Отображение меню»]] для кнопки (или любого другого виджета). После добавления действия необходимо выделить его и нажать на кнопку настроек на панели вверху окна действий. Открывшееся окно (см. Рисунок 25) содержит дерево со структурой меню, в который можно добавлять элементы двух типов:&lt;br /&gt;
&lt;br /&gt;
*меню – элемент, который позволяет группировать элементы меню, выводя их в виде раскрывающегося списка. На рисунках 24 и 25 этим элементом являются кнопки «Арочник» и «БПО».&lt;br /&gt;
*элемент меню – элемент, который предоставляет функционал, аналогичный [[Универсальная среда разработки#.D0.92.D0.B8.D0.B4.D0.B6.D0.B5.D1.82 .C2.AB.D0.9A.D0.BD.D0.BE.D0.BF.D0.BA.D0.B0.C2.BB|виджету «Кнопка»]]. Для добавления действия, выполняющегося при нажатии на элемент меню в среде исполнения, необходимо нажать на него ПКМ в дереве структуры меню и выбрать &amp;quot;Создать действие&amp;quot;. На рисунках 24 и 25 этим элементом являются кнопки «Котельная», «Котёл №1», «Котёл №2» и «Котёл №3».&lt;br /&gt;
&lt;br /&gt;
=== Создание многомониторных систем визуализации ===&lt;br /&gt;
AgavaSCADA предоставляет возможность реализации систем визуализации в составе проектов, использующих для отображения информации более одного дисплея.&lt;br /&gt;
&lt;br /&gt;
Для вывода информации в окнах на нескольких дисплеях в проект необходимо внести следующие корректировки относительно проекта, использующего только один дисплей:&lt;br /&gt;
&lt;br /&gt;
# Добавить дополнительные фреймы, чтобы их количество в проекте соответствовало количеству дисплеев. Каждому фрейму назначить порядковый номер, начиная с 1. Фреймы связываются с дисплеями по номеру.&lt;br /&gt;
# Добавить дополнительное окно (или окна, если в исходном фрейме их несколько или дополнительных фреймов больше одного).&lt;br /&gt;
# Добавить в дополнительные фреймы созданные на этапе 2 окна, чтобы повторить структуру основоного фрейма.&lt;br /&gt;
&lt;br /&gt;
Базовая настройка на этом закончена. После запуска такого проекта на двух или более дисплеях должны отображаться созданные окна.&lt;br /&gt;
&lt;br /&gt;
Если в проекте используется навигация по окнам, то необходимо в каждом окне, включенном в фрейм, скорректировать действия, размещаемые на кнопках, меню или друигх виджетах таким образом, чтобы действия открывали окна или загружали композиции в нужном окне.&lt;br /&gt;
&lt;br /&gt;
===Виджеты===&lt;br /&gt;
====Виджет «Текстовая метка»====&lt;br /&gt;
[[Файл:AgavaPLC–Примеры оформления виджетов типа &amp;quot;Текстовая метка&amp;quot;.png|мини|Рисунок 26 – Примеры оформления виджетов типа &amp;quot;Текстовая метка&amp;quot;]]&lt;br /&gt;
Виджет «Текстовая метка» – наиболее часто применяемый виджет, с помощью которого можно реализовать разные способы отображения текстовой информации.&lt;br /&gt;
&lt;br /&gt;
Виджет «Текстовая метка» может использоваться для отображения статичного текста, значений параметров (одного или нескольких) и их комбинаций.&lt;br /&gt;
&lt;br /&gt;
При необходимости отображения значений параметров они указываются в свойстве «Источник». Для задания определенного формата отображения используются спецификаторы формата в стиле языка «Си»:&lt;br /&gt;
&lt;br /&gt;
*%f – значение в виде числа с плавающей точкой;&lt;br /&gt;
* %s – строка;&lt;br /&gt;
*%i – целое число со знаком;&lt;br /&gt;
*%u – целое число без знака;&lt;br /&gt;
* %d – целое число со знаком в десятичной системе исчисления.&lt;br /&gt;
&lt;br /&gt;
Для разных типов свойств необходимо использовать строго определенные для них спецификаторы, с другими спецификаторами значения выводиться не будут.&lt;br /&gt;
&lt;br /&gt;
Для отображения знака «%» необходимо указать его дважды: «%%».&lt;br /&gt;
&lt;br /&gt;
===== Отображение нескольких значений =====&lt;br /&gt;
Одна текстовая метка может использоваться для отображения нескольких значений. Для этого все значения, которые нужно отобразить, указываются в свойстве «Источник», а в свойстве «Текст» указываются последовательно несколько спецификаторов формата соответственно порядку перечисления значений в свойстве «Источник».&lt;br /&gt;
&lt;br /&gt;
Пример: текстовая метка, отображающая текущую позицию в очереди:&lt;br /&gt;
&lt;br /&gt;
* Текст: &amp;lt;code&amp;gt;Позиция %i из %i&amp;lt;/code&amp;gt;&lt;br /&gt;
* Источник: два узла из проекта.&lt;br /&gt;
&lt;br /&gt;
=====Модификаторы спецификаторов формата=====&lt;br /&gt;
&lt;br /&gt;
======Модификатор минимальной ширины поля======&lt;br /&gt;
Целое число, расположенное между знаком % и кодом формата, играет роль модификатора минимальной ширины поля. Если указан модификатор минимальной ширины поля, то, чтобы ширина поля вывода была не меньше указанной минимальной величины, вывод при необходимости будет дополнен пробелами. Если же выводятся строки или числа, которые длиннее указанного минимума, то они все равно будут отображаться полностью. По умолчанию для дополнения используются пробелы. А если для этого надо использовать нули, то перед модификатором ширины поля следует поместить 0. Например, %05i означает, что любое число, количество цифр которого меньше пяти, будет дополнено таким количеством нулей, чтобы состоять из пяти цифр.&lt;br /&gt;
&lt;br /&gt;
Примеры&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Значение&lt;br /&gt;
!Спецификатор формата&lt;br /&gt;
!Выводимое значение&lt;br /&gt;
|-&lt;br /&gt;
|10.123&lt;br /&gt;
|%i&lt;br /&gt;
|10&lt;br /&gt;
|-&lt;br /&gt;
|10.123&lt;br /&gt;
|%d&lt;br /&gt;
|10&lt;br /&gt;
|-&lt;br /&gt;
|10.123&lt;br /&gt;
|%05i&lt;br /&gt;
|00010&lt;br /&gt;
|-&lt;br /&gt;
|10.123&lt;br /&gt;
|%f&lt;br /&gt;
|10.123000&lt;br /&gt;
|-&lt;br /&gt;
|10.123&lt;br /&gt;
|%.1f&lt;br /&gt;
| 10.1&lt;br /&gt;
|-&lt;br /&gt;
|10.123&lt;br /&gt;
|%10f&lt;br /&gt;
|&amp;lt;пробел&amp;gt;10.123000&lt;br /&gt;
|-&lt;br /&gt;
|10.123&lt;br /&gt;
|%012f&lt;br /&gt;
|00010.123000&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
======Модификатор точности======&lt;br /&gt;
Модификатор точности следует за модификатором минимальной ширины поля (если таковой имеется). Он состоит из точки и расположенного за ней целого числа. Значение этого модификатора зависит от типа данных, к которым его применяют.&lt;br /&gt;
&lt;br /&gt;
Когда модификатор точности применяется к данным с плавающей точкой, для преобразования которых используются спецификаторы преобразования %f, %e или %E, то он определяет количество выводимых десятичных разрядов. Например, %10.4f означает, что ширина поля вывода будет не менее 10 символов, причем для десятичных разрядов будет отведено четыре позиции.&lt;br /&gt;
&lt;br /&gt;
Если модификатор точности применяется к %g или %G, то он определяет количество значащих цифр.&lt;br /&gt;
&lt;br /&gt;
Примененный к строкам, модификатор точности определяет максимальную длину поля. Например, %5.7s означает, что длина выводимой строки будет составлять минимум пять и максимум семь символов. Если строка окажется длиннее, чем максимальная длина поля, то конечные символы выводиться не будут.&lt;br /&gt;
&lt;br /&gt;
Если модификатор точности применяется к целым типам, то он определяет минимальное количество цифр, которые будут выведены для каждого из чисел. Чтобы получилось требуемое количество цифр, добавляется некоторое количество ведущих нулей.&lt;br /&gt;
&lt;br /&gt;
Примеры:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Значение&lt;br /&gt;
!Спецификатор формата&lt;br /&gt;
!Выводимое значение&lt;br /&gt;
|-&lt;br /&gt;
|10.123&lt;br /&gt;
|%f&lt;br /&gt;
|10.123000&lt;br /&gt;
|-&lt;br /&gt;
|10.123&lt;br /&gt;
|%.1f&lt;br /&gt;
|10.1&lt;br /&gt;
|-&lt;br /&gt;
|10.123&lt;br /&gt;
|%10.4f&lt;br /&gt;
|&amp;lt;пробел&amp;gt;&amp;lt;пробел&amp;gt;&amp;lt;пробел&amp;gt;10.1230&lt;br /&gt;
|-&lt;br /&gt;
|10.123&lt;br /&gt;
|%010.3f&lt;br /&gt;
|000010.123&lt;br /&gt;
|-&lt;br /&gt;
| Это простая проверка&lt;br /&gt;
|%10.15s&lt;br /&gt;
|Это простая про&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
====Виджет «Условная метка» ====&lt;br /&gt;
[[Файл:AgavaPLC–Список сопоставлений виджета &amp;quot;Условная метка&amp;quot;.png|мини|Рисунок 27 – Список сопоставлений виджета &amp;quot;Условная метка&amp;quot;|ссылка=Файл:AgavaPLC–Список_сопоставлений_виджета_%22Условная_метка%22.png]]&lt;br /&gt;
Виджет «Условная метка» позволяет изменять выводимую строку в соответствии с изменениями привязанной к ней переменной.&lt;br /&gt;
&lt;br /&gt;
Задать соответствие текста необходимому условию можно в свойстве «Список сопоставлений».&lt;br /&gt;
&lt;br /&gt;
==== Виджет «Изображение»====&lt;br /&gt;
Виджет «Изображение» предназначен для отображения на окнах статичных изображений форматов png, gif, jpg, bmp или анимированных изображений в формате gif. Отображаемая картинка выбирается в разделе «Оформление» - «Изображение». Она должна находиться в папке проекта.&lt;br /&gt;
&lt;br /&gt;
====Виджет «Условное изображение»====&lt;br /&gt;
[[Файл:AgavaPLC–Список сопоставлений виджета &amp;quot;Условное изображение&amp;quot;.png|мини|Рисунок 28 – Список сопоставлений виджета &amp;quot;Условное изображение&amp;quot;|ссылка=Файл:AgavaPLC–Список_сопоставлений_виджета_%22Условное_изображение%22.png]]&lt;br /&gt;
Виджет «Условное изображение» позволяет изменять отображаемое изображение в соответствии с изменениями привязанной к нему переменной.&lt;br /&gt;
&lt;br /&gt;
Задать соответствие изображения необходимому условию можно в свойстве «Список сопоставлений».&lt;br /&gt;
&lt;br /&gt;
====Виджет «Движущееся изображение»====&lt;br /&gt;
Виджет предназначен для отображения на окнах изображений, перемещающихся в пределах области виджета. В основном используются на экране спящего режима.&lt;br /&gt;
&lt;br /&gt;
Отображаемая картинка выбирается в разделе «Оформление» - «Изображение». Она должна находиться в папке проекта.&lt;br /&gt;
&lt;br /&gt;
====Виджет «Кнопка»====&lt;br /&gt;
Виджет «Кнопка» предназначен для реализации функций управления:&lt;br /&gt;
&lt;br /&gt;
*ввод данных;&lt;br /&gt;
*передача управляющих воздействий;&lt;br /&gt;
* смена режима работы АРМ или иного устройства, исполняющего проект.&lt;br /&gt;
&lt;br /&gt;
Выполнение всех функций виджета обеспечивается с помощью узлов типа «Действие», добавляемых в соответствующее свойство (см. раздел [[#Действия]]).&lt;br /&gt;
&lt;br /&gt;
====Виджет «Гистограмма»====&lt;br /&gt;
[[Файл:AgavaPLC–Виджет &amp;quot;Гистограмма&amp;quot;.png|мини|Рисунок 29 – Виджет &amp;quot;Гистограмма&amp;quot;|ссылка=Файл:AgavaPLC–Виджет_%22Гистограмма%22.png]]&lt;br /&gt;
Виджет предназначен для отображения значений сигналов в виде столбчатой диаграммы.&lt;br /&gt;
&lt;br /&gt;
Виджету необходимо задать источник (регистр/сигнал, с которого он будет получать данные), а также минимальное и максимальное значения.&lt;br /&gt;
&lt;br /&gt;
====Виджет «Исторический график»====&lt;br /&gt;
Виджет «Исторический график» предназначен для отображения графиков параметров на двухкоординатной области изображения с привязкой к осям времени и значений.&lt;br /&gt;
&lt;br /&gt;
Виджет может работать с данными, архивируемыми в БД, и напрямую с сигналами, значения которых вычисляются в ходе работы.  &lt;br /&gt;
&lt;br /&gt;
При работе с архивируемыми данными интервал обновления графика зависит от режима выдачи значения у базы данных: при выборе сохраняемых в БД он будет соответствовать интервалу архивирования, а при сохраненных в БД - интервалу сохранения БД на диск. Независимо от режима выдачи, график не может обновляться меньше чем за 300 мс.&lt;br /&gt;
&lt;br /&gt;
При работе напрямую с сигналами график обновляется при изменении значения сигнала, но также не чаще чем раз в 300 мс.&lt;br /&gt;
[[Файл:AgavaPLC–Экран «Архив» с виджетом «Исторический график».png|мини|Рисунок 30 – Виджет «Исторический график». Области кнопок-пиктограмм. В нижней части отображена легенда]]&lt;br /&gt;
Виджет «Исторический график» состоит из нескольких областей:&lt;br /&gt;
&lt;br /&gt;
*область осей Х, Y;&lt;br /&gt;
*область легенды, содержащей список кривых и их параметры (цвет кривой, наименование кривой, текущее значение, время последнего зарегистрированного значения);&lt;br /&gt;
*область вывода данных.&lt;br /&gt;
&lt;br /&gt;
На виджете имеются несколько областей, содержащих кнопки-пиктограммы управления внешним видом графика (см. Рисунок 28):&lt;br /&gt;
&lt;br /&gt;
#область пиктограмм графика;&lt;br /&gt;
#область пиктограмм оси времени (X);&lt;br /&gt;
#область пиктограмм оси значений (Y);&lt;br /&gt;
#область легенды.&lt;br /&gt;
&lt;br /&gt;
В области пиктограмм графика слева направо расположены следующие кнопки-пиктограммы:&lt;br /&gt;
&lt;br /&gt;
* кнопка переключения режима отображения точек на всех кривых;&lt;br /&gt;
* кнопка переключения видимости легенды;&lt;br /&gt;
*кнопка включения режима визирной линии.&lt;br /&gt;
&lt;br /&gt;
В области пиктограмм оси времени (X) слева направо расположены следующие кнопки-пиктограммы:&lt;br /&gt;
&lt;br /&gt;
*кнопка открытия окна выбора интервала времени для оси Х, текст кнопки отображает текущий выбранный интервал, например: 5М – 5 минут, 6Ч – 6 часов, 30М – 30 минут;&lt;br /&gt;
*кнопка-индикатор включения следящего режима.&lt;br /&gt;
&lt;br /&gt;
В области пиктограмм оси значений (Y) расположена кнопка-пиктограмма «A» – кнопка переключения режима автоматического масштабирования значений.&lt;br /&gt;
&lt;br /&gt;
=====Легенда=====&lt;br /&gt;
[[Файл:AgavaPLC–Легенда с четырьмя выключенными параметрами.png|мини|Рисунок 31 – Легенда с четырьмя выключенными параметрами]]&lt;br /&gt;
Легенда – специальная область в нижней части экрана архива, предназначенная для отображения параметров (наименование, текущее значение и т. д.) выводимых графиков в виде таблицы. Для ознакомления с примерным видом легенды см. Рисунок 31. Информация о каждом сигнале в легенде выводится в несколько колонок:&lt;br /&gt;
&lt;br /&gt;
*«Цвет» – индицирует цвет, которым выводится соответствующая кривая на графике, колонка «Цвет» позволяет нажатием переключать видимость соответствующей кривой на графике (см. Рисунок 29). Также в колонке &amp;quot;Цвет&amp;quot; отображается номер пера, которым выводится кривая параметра на графике;&lt;br /&gt;
* «Имя» («Наименование») – содержит наименование параметра;&lt;br /&gt;
*«Время» – содержит время последнего зарегистрированного значения параметра;&lt;br /&gt;
*«Значение» – содержит последнее зарегистрированное значение параметра.&lt;br /&gt;
&lt;br /&gt;
=====Режимы просмотра графиков=====&lt;br /&gt;
Пользователю доступно два режима просмотра графиков:&lt;br /&gt;
&lt;br /&gt;
*следящий режим;&lt;br /&gt;
*режим просмотра истории.&lt;br /&gt;
&lt;br /&gt;
В следящем режиме на графике всегда отображаются актуальные значения параметров, тренд периодически дочитывает поступившие данные из базы и обновляет графики. &lt;br /&gt;
&lt;br /&gt;
В режиме просмотра истории на графике отображаются исторические значения параметров. Просмотр истории технологического процесса осуществляется с помощью кнопок перемещения по осям и кнопок изменения масштаба.&lt;br /&gt;
&lt;br /&gt;
Режим просмотра истории включается автоматически при прокрутке графика назад по времени.&lt;br /&gt;
&lt;br /&gt;
=====Визирная линия=====&lt;br /&gt;
[[Файл:AgavaPLC–График в режиме просмотра истории с установленной визирной линией.png|мини|Рисунок 32 – График в режиме просмотра истории с установленной визирной линией]]&lt;br /&gt;
Для просмотра значений параметров в нужный момент времени служит визирная линия, отображаемая на графике как вертикальная линия.&lt;br /&gt;
&lt;br /&gt;
При щелчке левой кнопкой мыши (ЛКМ) в области графиков визирная линия будет отображена в выбранном месте графика.&lt;br /&gt;
&lt;br /&gt;
В точке пересечения визирной линии и кривых параметров отображаются значения этих параметров. Также в нижней части области графиков, возле оси времени, визирная линия отображает время.&lt;br /&gt;
&lt;br /&gt;
====Виджет «График кусочно-линейной функции»====&lt;br /&gt;
Виджет предназначен для отображения графика зависимости двух параметров, расположенном на осях X и Y.&lt;br /&gt;
[[Файл:AgavaPLC–Виджет «График кусочно-линейной функции». Области кнопок-пиктограмм..png|мини|Рисунок 33 – Виджет «График кусочно-линейной функции». Области кнопок-пиктограмм.]]&lt;br /&gt;
Виджет состоит из нескольких областей:&lt;br /&gt;
&lt;br /&gt;
*область осей Х, Y;&lt;br /&gt;
*область легенды, содержащей список кривых и их параметры (цвет кривой, наименование кривой, текущее значение, время последнего зарегистрированного значения);&lt;br /&gt;
*область вывода графика.&lt;br /&gt;
&lt;br /&gt;
На области вывода графика виджета имеются несколько областей, содержащих кнопки-пиктограммы управления внешним видом графика (см. Рисунок 33):&lt;br /&gt;
&lt;br /&gt;
#Область пиктограмм графика.&lt;br /&gt;
#Область пиктограмм оси первого параметра (X).&lt;br /&gt;
#Область пиктограмм оси второго параметра (Y).&lt;br /&gt;
&lt;br /&gt;
В области пиктограмм графика расположены следующие кнопки-пиктограммы:&lt;br /&gt;
&lt;br /&gt;
*кнопка переключения режима отображения точек на всех кривых;&lt;br /&gt;
*кнопка переключения видимости легенды;&lt;br /&gt;
*кнопка включения режима визирной линии.&lt;br /&gt;
&lt;br /&gt;
В области пиктограмм оси первого (X) и второго (Y) параметров расположены кнопки-пиктограммы «А» – кнопка переключения режима автоматического масштабирования значений.[[Файл:AgavaPLC–Виджет &amp;quot;Список событий&amp;quot;.png|мини|Рисунок 34 – Виджет &amp;quot;Список событий&amp;quot;|ссылка=Файл:AgavaPLC–Виджет_%22Список_событий%22.png]]&lt;br /&gt;
====Виджет «Список событий»====&lt;br /&gt;
[[Файл:AgavaPLC–Окно выбора интервала.png|мини|Рисунок 35 – Окно выбора интервала]]Виджет предназначен для отображения регистрируемых событий в работе.&lt;br /&gt;
&lt;br /&gt;
В верхней части виджета расположена панель управления (1).&lt;br /&gt;
&lt;br /&gt;
Панель управления содержит органы управления журналом:&lt;br /&gt;
&lt;br /&gt;
*кнопка отображения фильтра событий;&lt;br /&gt;
*кнопка включения следящего режима журнала;&lt;br /&gt;
*кнопка изменения интервала на один день назад;&lt;br /&gt;
*кнопка-индикатор выбора интервала, за который отображаются события;&lt;br /&gt;
*кнопка изменения интервала на один день вперед;&lt;br /&gt;
*кнопка вызова окна со списком активных тревог.&lt;br /&gt;
&lt;br /&gt;
Ниже панели управления, в основном поле экрана, расположена таблица, содержащая зарегистрированные события.&lt;br /&gt;
&lt;br /&gt;
Заголовок таблицы позволяет изменять порядок столбцов и включать сортировку по столбцам. Например, возможно включение сортировки событий сначала по времени, затем по группе. Заголовок таблицы имеет возможность отключения / включения отображения любого столбца.&lt;br /&gt;
&lt;br /&gt;
При большом количестве записей в правой части таблицы появляется полоса прокрутки, позволяющая пролистывать список событий.&lt;br /&gt;
&lt;br /&gt;
Нажатие на кнопку-индикатор выбора интервала вызывает окно выбора интервала (см. Рисунок 35):[[Файл:AgavaPLC–Окно &amp;quot;Фильтр&amp;quot;.png|мини|Рисунок 36 – Окно &amp;quot;Фильтр&amp;quot;|ссылка=Файл:AgavaPLC–Окно_%22Фильтр%22.png]]После выбора нужного интервала для сохранения выбора необходимо нажать кнопку «ОК». После сохранения будут отображены зарегистрированные события за выбранный интервал.&lt;br /&gt;
Нажатие на кнопку отображения окна фильтра вызывает соответствующее окно. Окно фильтра позволяет изменить содержимое основного окна журнала событий путем выбора групп и подгрупп событий, перечисленных в окне фильтра (см. Рисунок 36).&lt;br /&gt;
&lt;br /&gt;
После выбора нужных групп и подгрупп для сохранения выбора необходимо нажать кнопку «ОК». После сохранения будут отображены зарегистрированные события, принадлежащих выбранным группам.&lt;br /&gt;
&lt;br /&gt;
====Виджет «Ввод значения»====&lt;br /&gt;
Виджет «Ввод значения» предназначен для отображения значения привязанного сигнала и его редактирования.&lt;br /&gt;
[[Файл:AgavaPLC–Виджет «Ввод значения» с отображением экранной цифровой клавиатуры.png|мини|Рисунок 37 – Виджет «Ввод значения» с отображением экранной цифровой клавиатуры|212x212пкс]]&lt;br /&gt;
После выбора узла для чтения/записи и соответствующего типа значения необходимо выбрать нужный тип ввода в разделе «Оформление».&lt;br /&gt;
&lt;br /&gt;
Доступны следующие типы ввода:&lt;br /&gt;
&lt;br /&gt;
*кнопки изменения – при нажатии на виджет появляются кнопки увеличения и уменьшения на заданный шаг изменения;&lt;br /&gt;
*кнопка редактирования – при нажатии на виджет появляется кнопка, при клике на которую открывается экранная цифровая клавиатура;&lt;br /&gt;
&lt;br /&gt;
Виджет имеет возможность проверки вводимых значений, при активации которой запись будет осуществляться только тогда, когда записываемое значение будет находиться в диапазоне между заданными минимальным и максимальными значениями.&lt;br /&gt;
&lt;br /&gt;
====Виджет «Выбор значения из списка»====&lt;br /&gt;
[[Файл:AgavaPLC–Виджет «Выбор значения из списка».png|мини|Рисунок 38 – Виджет «Выбор значения из списка»]]&lt;br /&gt;
Виджет «Выбор значения из списка» предназначен для отображения значения привязанного сигнала и его изменения в удобном для пользователя текстовом виде (см. Рисунок 37).&lt;br /&gt;
&lt;br /&gt;
С помощью свойства «Список сопоставлений» задается соответствие между значением сигнала и выводимой в виджете строкой.&lt;br /&gt;
&lt;br /&gt;
При нажатии на кнопку в правой части виджета отображается список всех сопоставлений. При выборе нужного элемента в списке в установленный узел производится запись нового значения.&lt;br /&gt;
&lt;br /&gt;
====Виджет «Флаг»====&lt;br /&gt;
[[Файл:AgavaPLC–Варианты внешнего вида виджета «Флаг».png|мини|Рисунок 39 – Варианты внешнего вида виджета «Флаг»]]&lt;br /&gt;
Виджет «Флаг» предназначен для отображения значения и изменения булевой переменной (true/false). Состояние true отображается в виде галочки (см. Рисунок 38).&lt;br /&gt;
&lt;br /&gt;
При нажатии на виджет значение переменной изменяется на противоположное.&lt;br /&gt;
&lt;br /&gt;
В случае, если флаг необходимо использовать только для отображения информации, поставьте галочку в свойстве «Отключен»&lt;br /&gt;
&lt;br /&gt;
====Виджет «Отчет»====&lt;br /&gt;
[[Файл:AgavaPLC–Виджет «Отчет» в режиме отображения сформированного отчета.png|мини|Рисунок 40 – Виджет «Отчет» в режиме отображения сформированного отчета]]&lt;br /&gt;
Виджет «Отчет» предназначен для формирования отчетов по заранее спроектированному макету.&lt;br /&gt;
&lt;br /&gt;
Подробный порядок создания и редактирования отчетов приведен в разделе [[#Отчеты]].&lt;br /&gt;
[[Файл:AgavaPLC–Окно выбора интервала отчета.png|мини|Рисунок 41 – Окно выбора интервала отчета]]&lt;br /&gt;
В верхней части виджета размещена панель управления, содержащая кнопки вызова команд:&lt;br /&gt;
&lt;br /&gt;
* печать сформированного отчета на установленном в системе принтере;&lt;br /&gt;
*сохранение сформированного отчета в файле формата PDF;&lt;br /&gt;
*переход к предыдущей странице отчета;&lt;br /&gt;
*переход к следующей странице отчета;&lt;br /&gt;
*масштабирование экрана по ширине листа отчета;&lt;br /&gt;
*масштабирование экрана по высоте листа отчета.&lt;br /&gt;
&lt;br /&gt;
При формировании отчета для изменения интервала времени, за который будет формироваться отчет, необходимо на панели управления щелкнуть кнопку выбора интервала (на ней отображается текущий выбранный интервал, например, «Начало суток без смещения – Конец суток без смещения»). Далее появится окно «Интервал», в котором можно выбрать начало и конец интервала (см. Рисунок 41). &lt;br /&gt;
&lt;br /&gt;
В качестве начала и конца интервала можно выбрать как конкретную дату по календарю, так относительную, например, «Начало дня», &amp;quot;Конец недели&amp;quot;. После выбора желаемого интервала необходимо нажать кнопку «ОК».&lt;br /&gt;
&lt;br /&gt;
Выбранный интервал отобразится на панели управления отчетом. Для формирования отчета за выбранный интервал необходимо нажать кнопку «Сформировать отчет». Через некоторое время, после загрузки данных из БД и их обработки, экран обновится и сформированный отчет за выбранный интервал будет отображен.&lt;br /&gt;
&lt;br /&gt;
{{Шаблон:Действия AgavaSCADA/AgavaPLC}}&lt;br /&gt;
&lt;br /&gt;
==Система тревог==&lt;br /&gt;
Система тревог предназначена для оповещения пользователя об обнаруженных нарушениях.&lt;br /&gt;
&lt;br /&gt;
Система содержит два типа узлов:&lt;br /&gt;
&lt;br /&gt;
*Группа событий.&lt;br /&gt;
*Контроллер событий.&lt;br /&gt;
&lt;br /&gt;
===Группа событий===&lt;br /&gt;
Группа событий – узел, предназначенный для взаимодействия с виджетом «Список событий». Группы событий позволяют группировать события по какому-то признаку, например по уровню тревоги (авария, предупреждение, квитирование и т.д.), технологическому участку и т.д.&lt;br /&gt;
&lt;br /&gt;
Для каждой группы можно выбрать свой цвет шрифта и фона, которые будут использоваться для вывода событий, принадлежащих этой группе в виджете &amp;quot;Список событий&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
В свойстве «Описание» группы событий указывается текст, который будет отображаться в фильтре списка событий.&lt;br /&gt;
&lt;br /&gt;
===Монитор событий===&lt;br /&gt;
Монитор событий (ранее - Контроллер событий) – узел, реализующий логику проверки соответствия выбранных сигналов контролируемым условиям. Контроллеры событий выполняют всю работу по проверке значений контролируемых параметров и выполнению соответствующих действий.&lt;br /&gt;
&lt;br /&gt;
Монитор событий проверяет значения заданных узлов на соответствие заданным условиям и при их совпадении выполняет заданные действия.&lt;br /&gt;
&lt;br /&gt;
В качестве действий можно указать не только действие &amp;quot;Создание события&amp;quot;, но и другие (см. раздел [[#Действия]]).&lt;br /&gt;
[[Файл:AgavaPLC-Cистема тревог.png|мини|Cистема тревог]]&lt;br /&gt;
&lt;br /&gt;
===Порядок настройки системы===&lt;br /&gt;
Порядок настройки системы тревог следующий:&lt;br /&gt;
#Добавить в проект систему тревог. Для этого нажать ПКМ по узлу «Станция» в дереве проекта, затем выбрать «Добавить узел» - «Система» - «Система тревог».&lt;br /&gt;
#Добавить узел «События» в систему тревог. Для этого нажать ПКМ по системе тревог в дереве проекта, затем выбрать «Добавить узел» - «Группа» - «События». При необходимости настроить цвет шрифта и фона, которые будут отображаться у события в окне тревог или журнале.&lt;br /&gt;
#Добавить нужные [[Узлы проекта AgavaSCADA/AgavaPLC#.D0.93.D1.80.D1.83.D0.BF.D0.BF.D0.B0 .D1.81.D0.BE.D0.B1.D1.8B.D1.82.D0.B8.D0.B9|группы событий]] в узел «События». Для этого нажать ПКМ по узлу «События» в дереве проекта, затем выбрать «Добавить узел» - «Группа событий».&lt;br /&gt;
#Добавить [[Узлы проекта AgavaSCADA/AgavaPLC#.D0.9A.D0.BE.D0.BD.D1.82.D1.80.D0.BE.D0.BB.D0.BB.D0.B5.D1.80 .D1.81.D0.BE.D0.B1.D1.8B.D1.82.D0.B8.D0.B9|контроллеры событий]] в систему тревог. Для этого нажать ПКМ по системе тревог в дереве проекта, затем выбрать «Добавить узел» - «Контроллер событий».&lt;br /&gt;
#Добавить в свойство «Сигналы» контроллеров событий узлы, состояние которых необходимо контролировать.&lt;br /&gt;
#Задать для этих узлов контролируемые условия в соответствующем свойстве контроллера событий.&lt;br /&gt;
#Настроить [[Узлы проекта AgavaSCADA/AgavaPLC#.D0.94.D0.B5.D0.B9.D1.81.D1.82.D0.B2.D0.B8.D1.8F|действия]], которые будут выполняться при выполнении контролируемого условия. Для вывода аварий, предупреждений или информационных сообщений необходимо добавить действие «Создание события».&lt;br /&gt;
# Настроить действие «Создание события». В его свойстве «Группа событий» указать группу из созданных в пункте 2. Ввести тексты сообщения активации и деактивации (при необходимости), указать уровень события. Теперь, при срабатывании контролируемого условия, будет появляться окно тревог с сообщением активации.&lt;br /&gt;
&lt;br /&gt;
== Система архивирования==&lt;br /&gt;
Система архивирования предназначена для управления процессом сохранения значений параметров в базы данных. Параметры, сохраненные в базу данных, могут использоваться для построения графиков параметров и генерации отчетов.&lt;br /&gt;
&lt;br /&gt;
Архивация параметров производится с помощью архиваторов.&lt;br /&gt;
[[Файл:AgavaPLC-Настройка архиватора.png|мини|505x505пкс|Настройка архиватора]]&lt;br /&gt;
&lt;br /&gt;
===Порядок настройки системы===&lt;br /&gt;
Для сохранения истории изменения значений параметров в БД необходимо выполнить следующие действия: &lt;br /&gt;
&lt;br /&gt;
#Добавить в проект систему архивации. Для этого нажать ПКМ по узлу «Станция» в дереве проекта, затем выбрать «Добавить узел» - «Система» - «Система архивации».&lt;br /&gt;
#Добавить в систему архивации архиватор. Для этого нажать ПКМ по узлу «Система архивации» в дереве проекта, затем выбрать «Добавить узел» - «Архиватор в БД SQLite».&lt;br /&gt;
#Настроить параметры архиватора, такие как: путь до файла БД, интервал архивирования (как часто система архивации будет опрашивать значение параметра), интервал сохранения БД на диск (как часто эти значения будут записываться в постоянную память), разбиение БД (будет ли система архивации создавать новый файл БД каждые сутки), период хранения и режим выдачи значений для построения графика (сохраняемые значения будут обновляться с частотой интервала архивирования, а сохраненные - с частотой интервала сохранения).&lt;br /&gt;
#Добавить параметры в коннекторы база данных. Для этого необходимо открыть свойство архиватора «Коннекторы БД», выбрать «Создать новый» - «Коннектор БД». После этого нужно нажать по добавленному коннектору, открыть его свойство «Сигналы» и добавить параметр, значение которого необходимо сохранять в БД.&lt;br /&gt;
&lt;br /&gt;
=== Архиватор SQLite===&lt;br /&gt;
Архиватор SQLite предназначен для сохранения значений параметров в БД формата SQLite.&lt;br /&gt;
&lt;br /&gt;
Для извлечения и просмотра баз данных формата SQLite с устройств может использоваться программа «[[Архиватор]]».&lt;br /&gt;
&lt;br /&gt;
====Свойства узла &amp;quot;Архиватор SQLite&amp;quot;====&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Наименование свойства&lt;br /&gt;
!Идентификатор&lt;br /&gt;
!Тип&lt;br /&gt;
!Доступ&lt;br /&gt;
!Описание&lt;br /&gt;
|-&lt;br /&gt;
| Путь до файла БД&lt;br /&gt;
|FilePath&lt;br /&gt;
|STRING&lt;br /&gt;
|Чтение / запись&lt;br /&gt;
|Путь до файла БД. Абсолютный или относительный.&lt;br /&gt;
|-&lt;br /&gt;
|Интервал архивирования&lt;br /&gt;
|Interval&lt;br /&gt;
|INT&lt;br /&gt;
|Чтение / запись&lt;br /&gt;
|Интервал архивирования, мс.&lt;br /&gt;
|-&lt;br /&gt;
|Период хранения&lt;br /&gt;
|Retention&lt;br /&gt;
|INT&lt;br /&gt;
|Чтение / запись&lt;br /&gt;
|Период хранения, дней.&lt;br /&gt;
|-&lt;br /&gt;
|Разбиение БД&lt;br /&gt;
|DBSplitting&lt;br /&gt;
|BOOL&lt;br /&gt;
|Чтение / запись&lt;br /&gt;
|Разбиение БД на файлы. При включении база данных будет разделяться на отдельныйе файлы, содержащие данные за одни сутки.&lt;br /&gt;
|-&lt;br /&gt;
|Интервал сохранения БД на диск&lt;br /&gt;
|StoringInterval&lt;br /&gt;
|INT&lt;br /&gt;
|Чтение / запись&lt;br /&gt;
|Интервал сохранения БД на диск, мс.&lt;br /&gt;
|-&lt;br /&gt;
|Режим выдачи значений&lt;br /&gt;
|ValueReturnMode&lt;br /&gt;
|ENUM&lt;br /&gt;
|Чтение / запись&lt;br /&gt;
|Режим выдачи значений. Режим &amp;quot;Сохраняемые в БД&amp;quot; - данные выдаются сразу после получения архиватором, возможно до фактического сохранения в БД. Режим &amp;quot;Сохраненные в БД&amp;quot; - данные выдаются только после фактической записи в БД на диск.&lt;br /&gt;
|-&lt;br /&gt;
|Коннекторы БД&lt;br /&gt;
|Signals&lt;br /&gt;
|NODESARRAY&lt;br /&gt;
|Чтение / запись&lt;br /&gt;
|Список коннекторов, содержащих сигналы для архивирования.&lt;br /&gt;
|-&lt;br /&gt;
|Текущий размер БД&lt;br /&gt;
|DBCurrentSize&lt;br /&gt;
|INT&lt;br /&gt;
|Только чтение&lt;br /&gt;
|Текущий размер БД, Мб.&lt;br /&gt;
|-&lt;br /&gt;
|Максимальный размер БД&lt;br /&gt;
|DBMaxSize&lt;br /&gt;
|INT&lt;br /&gt;
|Только чтение&lt;br /&gt;
|Максимальный размер БД, Мб.&lt;br /&gt;
|-&lt;br /&gt;
|Состояние БД&lt;br /&gt;
|DBStatus&lt;br /&gt;
|INT&lt;br /&gt;
|Только чтение&lt;br /&gt;
|Состояние БД.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Архиватор PostgreSQL ===&lt;br /&gt;
Архиватор PostgreSQL предназначен для сохранения значений параметров в базы данных под управлением сервера PostgreSQL.&lt;br /&gt;
&lt;br /&gt;
=== Прореживание данных ===&lt;br /&gt;
Прореживание данных (data thinning) — это процесс фильтрации и уменьшения количества точек данных, сохраняемых в архиве. Вместо того чтобы записывать каждое полученное значение, система анализирует поток данных и сохраняет только те значения, которые представляют значимое изменение.&lt;br /&gt;
&lt;br /&gt;
'''Назначение прореживания'''&lt;br /&gt;
&lt;br /&gt;
Поток данных от датчиков и устройств зачастую содержит незначительные колебания (шум) или избыточные данные, когда параметр не меняется. Прореживание решает следующие задачи:&lt;br /&gt;
&lt;br /&gt;
* '''Снижение нагрузки на архив''': Меньшее количество записей означает более быструю работу базы данных.&lt;br /&gt;
* '''Ускорение отображения графиков''': Нужно обрабатывать меньше точек для построения трендов.&lt;br /&gt;
* '''Сохранение только значимых изменений''': Система отфильтровывает шум и оставляет только те изменения, которые важны для анализа технологического процесса.&lt;br /&gt;
'''Общий принцип работы'''&lt;br /&gt;
&lt;br /&gt;
Алгоритм прореживания работает по простому принципу:&lt;br /&gt;
&lt;br /&gt;
# SCADA-система получает новое значение от источника данных.&lt;br /&gt;
# Она сравнивает это значение с последним, которое было сохранено в архив.&lt;br /&gt;
# Если изменение превышает заранее настроенный '''допуск''' (tolerance), новое значение сохраняется.&lt;br /&gt;
# Если изменение меньше допуска, значение пропускается.&lt;br /&gt;
&lt;br /&gt;
Кроме того, существует параметр &amp;quot;'''Период обязательной записи&amp;quot;'''. Если с момента последней записи прошло больше времени, чем указано в этом параметре, новое значение будет сохранено '''независимо от его изменения'''. Это гарантирует, что записи в архив будут сохраняться не реже заданной периодичности, даже если сигнал не меняется. Ключевая идея: &amp;quot;'''Сохраняем только то, что заметно изменилось, но не реже, чем задано&amp;quot;.'''&lt;br /&gt;
&lt;br /&gt;
'''Как подобрать допуск?'''&lt;br /&gt;
&lt;br /&gt;
* '''Слишком малый допуск''' приведёт к записи избыточных данных, и архив будет быстро расти.&lt;br /&gt;
* '''Слишком большой допуск''' может привести к потере мелких, но значимых изменений в сигнале.&lt;br /&gt;
&lt;br /&gt;
Выбор правильного допуска — это компромисс между детализацией данных и размером архива.&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
==== Типы алгоритмов прореживания ====&lt;br /&gt;
В системе доступны несколько алгоритмов, которые определяют, как именно вычисляется «значимость» изменения. Выбор алгоритма зависит от характера сигнала и требований к точности данных.&lt;br /&gt;
&lt;br /&gt;
# Абсолютный допуск&lt;br /&gt;
# Процент от последнего значения&lt;br /&gt;
# Процент от среднего N последних&lt;br /&gt;
# Процент от среднего по временному окну&lt;br /&gt;
&lt;br /&gt;
'''Обозначения и определения'''&lt;br /&gt;
&lt;br /&gt;
В дальнейшем используются следующие обозначения (для числовых сигналов):&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;math&amp;gt;x_{in}&amp;lt;/math&amp;gt;​ — текущее измерение сигнала, полученное от источника данных к моменту обработки (кандидат на запись).&lt;br /&gt;
* &amp;lt;math&amp;gt;x_{ref}&amp;lt;/math&amp;gt; — последнее сохранённое числовое значение сигнала в архиве на момент обработки (опорное значение).&lt;br /&gt;
* &amp;lt;math&amp;gt;|\Delta| = |x_{in} - x_{ref}|&amp;lt;/math&amp;gt; — абсолютная величина изменения между текущим измерением и последним сохранённым значением.&lt;br /&gt;
* &amp;lt;math&amp;gt;\bar{x}_N&amp;lt;/math&amp;gt;​ — арифметическое среднее последних &amp;lt;math&amp;gt;N&amp;lt;/math&amp;gt; сохранённых числовых значений.&lt;br /&gt;
* &amp;lt;math&amp;gt;\bar{x}_T&amp;lt;/math&amp;gt;​ — среднее всех сохранённых числовых значений, чьи метки времени попадают в временное окно длительности &amp;lt;math&amp;gt;T&amp;lt;/math&amp;gt; миллисекунд.&lt;br /&gt;
* &amp;lt;math&amp;gt;\varepsilon&amp;lt;/math&amp;gt; — машинная точность для чисел двойной точности; используется для формальной проверки «близости к нулю».&lt;br /&gt;
* &amp;lt;math&amp;gt;tolerance&amp;lt;/math&amp;gt; — допуск: абсолютный (в физических единицах) или относительный (в процентах), в зависимости от выбранного алгоритма.&lt;br /&gt;
&lt;br /&gt;
'''Настройки в Свойствах архиватора, общие для всех типов прореживания'''&lt;br /&gt;
&lt;br /&gt;
* '''Включить прореживание''' — включает/выключает применение алгоритма прореживания при записи значений. При выключении все поступающие значения сохраняются без фильтрации.&lt;br /&gt;
* '''Тип допуска''' — выбирает алгоритм сравнения.&lt;br /&gt;
* '''Период обязательной записи (мс)''' — максимальный допустимый промежуток между двумя записями одного сигнала. Если за это время значимого изменения не произошло, ближайшее поступившее значение будет записано принудительно. 0 — отключить принудительную запись.&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
===== Абсолютный допуск =====&lt;br /&gt;
'''Принцип:'''&lt;br /&gt;
&lt;br /&gt;
Новое значение сохраняется, если модуль изменения больше установленного порога в физических единицах.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math display=&amp;quot;block&amp;quot;&amp;gt;|\Delta| &amp;gt; tolerance&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Когда использовать:'''&lt;br /&gt;
&lt;br /&gt;
* Если диапазон сигнала стабилен и известен заранее.&lt;br /&gt;
* Для параметров вроде температуры, давления, уровня жидкости, где фиксированное изменение имеет одинаковую интерпретацию по всей шкале.&lt;br /&gt;
&lt;br /&gt;
'''Преимущества:'''&lt;br /&gt;
&lt;br /&gt;
* Обеспечивает предсказуемое и детерминированное поведение независимо от текущего масштаба значения.&lt;br /&gt;
* Не требует накопления или хранения дополнительных данных (окон/истории), вычислительно прост.&lt;br /&gt;
* Удобен при наличии нормативно заданных пределов точности в физических единицах.&lt;br /&gt;
&lt;br /&gt;
'''Ограничения:'''&lt;br /&gt;
&lt;br /&gt;
* Не масштабируется на широкий динамический диапазон: один и тот же порог может быть слишком грубым для малых значений и слишком чувствительным для больших.&lt;br /&gt;
* Требует аккуратного подбора порога под единицы измерения и разрешение датчика; при неверной калибровке возможны либо избыточные записи, либо потеря значимых мелких изменений.&lt;br /&gt;
* Не учитывает относительный контекст изменения (например, 1 единица при значении 10 и при значении 10 000 трактуется одинаково).&lt;br /&gt;
&lt;br /&gt;
'''Настройки в Свойствах архиватора:'''&lt;br /&gt;
&lt;br /&gt;
* '''Допуск''' — абсолютный порог в физических единицах сигнала. Определяет значение &amp;lt;math&amp;gt;tolerance&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
===== Процент от последнего значения =====&lt;br /&gt;
'''Принцип:'''&lt;br /&gt;
&lt;br /&gt;
Новое значение сохраняется, если относительное изменение относительно последнего сохранённого превышает заданный процент.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math display=&amp;quot;block&amp;quot;&amp;gt;\frac{|\Delta|}{|x_{ref}|} \times{100} &amp;gt; tolerance&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Когда использовать:'''&lt;br /&gt;
&lt;br /&gt;
* Для сигналов, где важна относительная динамика, а не абсолютные величины.&lt;br /&gt;
* Для показателей с большим динамическим диапазоном, где относительная точность должна быть сопоставима на всех уровнях.&lt;br /&gt;
&lt;br /&gt;
'''Преимущества:'''&lt;br /&gt;
&lt;br /&gt;
* Масштабируемость: одинаково интерпретирует относительные изменения на низких и высоких уровнях сигнала.&lt;br /&gt;
* Не требует хранения окна значений; использует только последнее сохранённое значение, поэтому вычислительно лёгок.&lt;br /&gt;
* Быстро и корректно реагирует на пропорциональные изменения процесса (проценты), поддерживая заданную относительную чувствительность.&lt;br /&gt;
&lt;br /&gt;
'''Ограничения:'''&lt;br /&gt;
&lt;br /&gt;
* В окрестности нуля относительная метрика становится нестабильной (см. примечание).&lt;br /&gt;
* При малых базовых значениях возможна повышенная чувствительность к шуму и микроколебаниям.&lt;br /&gt;
* Не подавляет высокочастотный шум сам по себе: при необходимости сочетать с обязательной записью по времени и корректной настройкой допуска.&lt;br /&gt;
&lt;br /&gt;
'''Настройки в Свойствах архиватора:'''&lt;br /&gt;
&lt;br /&gt;
* '''Допуск''' — относительный порог в процентах. Определяет значение &amp;lt;math&amp;gt;tolerance&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
===== Процент от среднего N последних =====&lt;br /&gt;
'''Принцип:'''&lt;br /&gt;
&lt;br /&gt;
Новое значение сохраняется, если изменение больше заданного процента от среднего по последним N сохранённым значениям.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math display=&amp;quot;block&amp;quot;&amp;gt;\frac{|\Delta|}{|\bar{x}_{N}|} \times{100} &amp;gt; tolerance&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Когда использовать:'''&lt;br /&gt;
&lt;br /&gt;
* Для сигналов с постоянным шумом или пульсациями, когда важно снижать чувствительность к случайным отклонениям.&lt;br /&gt;
* Для процессов с умеренной динамикой, где требуется устойчивость к «зубчатым» колебаниям.&lt;br /&gt;
&lt;br /&gt;
'''Преимущества:'''&lt;br /&gt;
&lt;br /&gt;
* Снижает чувствительность к высокочастотному шуму за счёт опоры на усреднение; сокращает объём записей на стационарных участках.&lt;br /&gt;
* Гибко настраивается параметром &amp;lt;math&amp;gt;N&amp;lt;/math&amp;gt;: увеличение окна повышает устойчивость, уменьшение — повышает чувствительность и снижает задержку реакции.&lt;br /&gt;
&lt;br /&gt;
'''Ограничения:'''&lt;br /&gt;
&lt;br /&gt;
* В окрестности нуля относительная метрика становится нестабильной (см. примечание).&lt;br /&gt;
&lt;br /&gt;
* Инерционность: при резких скачках возможна задержка фиксации изменения, особенно при большом &amp;lt;math&amp;gt;N&amp;lt;/math&amp;gt;.&lt;br /&gt;
* Усреднение может «сглаживать» и не фиксировать кратковременные, но важные пики; не подходит для задач, критичных к коротким экстремумам.&lt;br /&gt;
* Предполагает относительно стабильную частоту выборок; при сильно переменной частоте эффективная «временная» ширина окна становится непредсказуемой.&lt;br /&gt;
&lt;br /&gt;
'''Настройки в Свойствах архиватора:'''&lt;br /&gt;
&lt;br /&gt;
* '''Допуск''' — относительный порог в процентах. Определяет значение &amp;lt;math&amp;gt;tolerance&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
* '''Размер окна среднего (&amp;lt;math&amp;gt;N&amp;lt;/math&amp;gt;)''' — число последних сохранённых значений, по которым считается среднее. Большее &amp;lt;math&amp;gt;N&amp;lt;/math&amp;gt; повышает устойчивость к шуму, но увеличивает инерционность реакции.&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
===== Процент от среднего по временному окну =====&lt;br /&gt;
'''Принцип:'''&lt;br /&gt;
&lt;br /&gt;
Похож на предыдущий, но среднее считается не по количеству точек, а по всем значениям за заданный интервал времени.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math display=&amp;quot;block&amp;quot;&amp;gt;\frac{|\Delta|}{|\bar{x}_{T}|} \times{100} &amp;gt; tolerance&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Когда использовать:'''&lt;br /&gt;
&lt;br /&gt;
* Для сигналов с непостоянной частотой измерений (событийные, неравномерные потоки).&lt;br /&gt;
* В случаях, когда важно учитывать реальную временную протяжённость усреднения независимо от плотности измерений.&lt;br /&gt;
&lt;br /&gt;
'''Преимущества:'''&lt;br /&gt;
&lt;br /&gt;
* Корректно работает при переменной частоте выборок: окно фиксируется по времени, а не по числу точек.&lt;br /&gt;
* Более реалистично оценивает тренд во времени на участках с неравномерными измерениями.&lt;br /&gt;
* Управляемый компромисс между подавлением шума и чувствительностью за счёт выбора длительности окна.&lt;br /&gt;
&lt;br /&gt;
'''Ограничения:'''&lt;br /&gt;
&lt;br /&gt;
* В окрестности нуля относительная метрика становится нестабильной (см. примечание).&lt;br /&gt;
&lt;br /&gt;
* Более высокая ресурсоёмкость: требуется хранить и периодически «очищать» значения по условию выхода из временного окна; потребление памяти зависит от фактической скорости поступления данных.&lt;br /&gt;
* Инерционность, присущая усреднению: возможна задержка фиксации коротких, но значимых пиковых изменений.&lt;br /&gt;
* Критичен выбор длительности окна: слишком малое окно даёт мало подавления шума, слишком большое — чрезмерную инерцию и риск пропуска кратких событий.&lt;br /&gt;
&lt;br /&gt;
'''Настройки в Свойствах архиватора:'''&lt;br /&gt;
&lt;br /&gt;
* '''Допуск''' — относительный порог в процентах. Определяет значение &amp;lt;math&amp;gt;tolerance&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
* '''Интервал архивирования''' — длительность временного окна &amp;lt;math&amp;gt;T&amp;lt;/math&amp;gt; (мс), в пределах которого вычисляется среднее. При увеличении &amp;lt;math&amp;gt;T&amp;lt;/math&amp;gt; растёт сглаживание и уменьшается чувствительность к кратким всплескам; при уменьшении — наоборот. Значения, чьи метки времени выходят за пределы окна, автоматически исключаются из расчёта.&lt;br /&gt;
&lt;br /&gt;
===== Примечание к алгоритмам 'Процент от…' =====&lt;br /&gt;
При малых опорных значениях система автоматически переходит в абсолютный режим, чтобы избежать деления на величину, близкую к нулю, и связанных с этим скачков чувствительности. Этот механизм применяется ко всем алгоритмам, использующим относительное сравнение: «Процент от последнего», «Процент от среднего N», «Процент от среднего по временному окну» и обеспечивает стабильность критерия при слабых сигналах.&lt;br /&gt;
&lt;br /&gt;
* Условия входа в режим абсолютного допуска:&lt;br /&gt;
** для «Процента от последнего»: &amp;lt;math&amp;gt;|x_{ref}| &amp;lt; \varepsilon&amp;lt;/math&amp;gt;;&lt;br /&gt;
** для «Процента от среднего N»: &amp;lt;math&amp;gt;|\bar{x}_{N}| &amp;lt; \varepsilon&amp;lt;/math&amp;gt;;&lt;br /&gt;
** для «Процента от среднего по времени»: &amp;lt;math&amp;gt;|\bar{x}_{T}| &amp;lt; \varepsilon&amp;lt;/math&amp;gt;.&lt;br /&gt;
* Критерий в режиме абсолютного допуска: значение фиксируется, если &amp;lt;math&amp;gt;|\Delta| &amp;gt; tolerance&amp;lt;/math&amp;gt;.&lt;br /&gt;
* Условие выхода: как только соответствующая базовая величина (&amp;lt;math&amp;gt;|x_{ref}|&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;|\bar{x}_{N}|&amp;lt;/math&amp;gt; или &amp;lt;math&amp;gt;|\bar{x}_{T}|&amp;lt;/math&amp;gt;) становится &amp;lt;math&amp;gt;\geq \varepsilon&amp;lt;/math&amp;gt;, система автоматически возвращается к относительному критерию.&lt;br /&gt;
* Трактовка &amp;lt;math&amp;gt;tolerance&amp;lt;/math&amp;gt;: используется то же значение настройки; в абсолютном режиме оно интерпретируется как порог в физических единицах сигнала.&lt;br /&gt;
&lt;br /&gt;
===== Сравнение алгоритмов прореживания данных =====&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Критерий&lt;br /&gt;
!Абсолютный&lt;br /&gt;
!% от последнего&lt;br /&gt;
!% от среднего N&lt;br /&gt;
!% от среднего по времени&lt;br /&gt;
|-&lt;br /&gt;
|Единицы допуска&lt;br /&gt;
|Физические&lt;br /&gt;
|Проценты&lt;br /&gt;
|Проценты&lt;br /&gt;
|Проценты&lt;br /&gt;
|-&lt;br /&gt;
|Устойчивость к шуму&lt;br /&gt;
|Низкая&lt;br /&gt;
|Средняя&lt;br /&gt;
|Высокая&lt;br /&gt;
|Высокая&lt;br /&gt;
|-&lt;br /&gt;
|Реакция на резкие скачки&lt;br /&gt;
|Быстрая&lt;br /&gt;
|Быстрая&lt;br /&gt;
|Задержка (при большом N)&lt;br /&gt;
|Задержка&lt;br /&gt;
|-&lt;br /&gt;
|Подходит при переменной частоте&lt;br /&gt;
|Да&lt;br /&gt;
|Да&lt;br /&gt;
|Нет&lt;br /&gt;
|Да&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Система журналирования==&lt;br /&gt;
Система ведения журналов событий предназначена для управления регистрацией и хранением событий. В базу данных записываются все системные события и события, генерируемые с помощью [[Узлы проекта AgavaSCADA/AgavaPLC#.D0.A1.D0.B8.D1.81.D1.82.D0.B5.D0.BC.D0.B0 .D1.82.D1.80.D0.B5.D0.B2.D0.BE.D0.B3|системы тревог]], которые соответствуют выбранному уровню сообщений.&lt;br /&gt;
&lt;br /&gt;
Для ведения журналов используются узлы типа &amp;quot;Логгер&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
===Порядок настройки системы===&lt;br /&gt;
Порядок настройки системы журналирования следующий:&lt;br /&gt;
&lt;br /&gt;
#Добавить и [[Узлы проекта AgavaSCADA/AgavaPLC#.D0.9F.D0.BE.D1.80.D1.8F.D0.B4.D0.BE.D0.BA .D0.BD.D0.B0.D1.81.D1.82.D1.80.D0.BE.D0.B9.D0.BA.D0.B8 .D1.81.D0.B8.D1.81.D1.82.D0.B5.D0.BC.D1.8B|настроить систему тревог]] для генерации событий.&lt;br /&gt;
#Добавить в проект систему журналирования. Для этого нажать ПКМ по узлу «Станция» в дереве проекта, затем выбрать «Добавить узел» - «Система» - «Система журналирования».&lt;br /&gt;
#Добавить в систему журналирования логгер. Для этого нажать ПКМ по узлу «Система архивации» в дереве проекта, затем нажать «Добавить узел» и выбрать нужный логгер.&lt;br /&gt;
#Настроить параметры логгера (см. разделы ниже).&lt;br /&gt;
&lt;br /&gt;
=== Логгер SQLite===&lt;br /&gt;
Логгер SQLite предназначен для сохранения событий, возникающих в ходе исполнения прикладной программы в СУБД SQLite.&lt;br /&gt;
&lt;br /&gt;
Логгер позволяет настраивать срок хранения событий, уровень сохраняемых событий и включать режим разбиения базы данных на отдельные файлы, содержащие данные только за одни сутки.&lt;br /&gt;
&lt;br /&gt;
Информацию о событиях в базе данных, которую ведет логгер, можно просмотреть с помощью виджета &amp;quot;Список событий&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
===Логгер файловый ===&lt;br /&gt;
Логгер файловый предназначен для сохранения журналов событий в текстовых файлах на накопителе. Логгер имеет минимальное количество настроек, и обычно используется для сохранения журнала событий в случае необходимости отладки работы прикладной программы без среды разработки.&lt;br /&gt;
&lt;br /&gt;
===Логгер SMS===&lt;br /&gt;
Логгер SMS предназначен для SMS информирования с помощью субмодуля GRPS или внешнего GPRS модема. &lt;br /&gt;
&lt;br /&gt;
Принцип работы логгера следующий:&lt;br /&gt;
&lt;br /&gt;
#Логгер принимает возникающие события, фильтрует их согласно установленного уровня событий и выбранных групп.&lt;br /&gt;
#События, прошедшие фильтрацию, форматируются согласно установленного шаблона.&lt;br /&gt;
#Отформатированные сообщения отправляются через подключенный модем в виде SMS сообщения. Отправка сообщений производится на телефонные номера, записанные в телефонной книге на SIM-карте.&lt;br /&gt;
&lt;br /&gt;
==Система проверки прав пользователей==&lt;br /&gt;
[[Файл:AgavaPLC-Окно привилегий.png|мини|494x494пкс|Окно привилегий]]&lt;br /&gt;
Система реализует механизм контроля доступа к узлам проекта и их функциях на основе ролей. Узлы при выполнении действий проверяют наличие установленных привилегий у авторизованного в данный момент пользователя. &lt;br /&gt;
&lt;br /&gt;
=== Роли и пользователи ===&lt;br /&gt;
Система содержит в себе две подсистемы:&lt;br /&gt;
*Пользователи. Подсистема определяет пользователей, каждому из которых назначается логин/пароль и одна или несколько ролей.&lt;br /&gt;
*Роли. Роли хранят наборы доступных привилегий.&lt;br /&gt;
Отношения между пользователями, ролями и привилегиями можно описать следующим образом:&lt;br /&gt;
&lt;br /&gt;
* Один пользователь может иметь несколько ролей.&lt;br /&gt;
* Одну роль могут иметь несколько пользователей.&lt;br /&gt;
* Одна роль может иметь несколько привилегий.&lt;br /&gt;
* Одна привилегия может принадлежать нескольким ролям.&lt;br /&gt;
&lt;br /&gt;
=== Привилегии ===&lt;br /&gt;
[[Файл:AgavaPLC-Система проверки прав пользователей.png|мини|Система проверки прав пользователей]]&lt;br /&gt;
Для узлов системы доступна установка следующих привилегий:&lt;br /&gt;
&lt;br /&gt;
Все узлы: &lt;br /&gt;
&lt;br /&gt;
*Чтение значения.&lt;br /&gt;
*Запись значения.&lt;br /&gt;
Окна и фреймы:&lt;br /&gt;
*Открытие окна.&lt;br /&gt;
*Закрытие окна.&lt;br /&gt;
&lt;br /&gt;
При установке привилегий на какой-либо узел, все подчиненные узлы получают те же привилегии с флагом &amp;quot;унаследована&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Если привилегия не установлена, то считается что действие, регулируемое привилегией, запрещено.&lt;br /&gt;
&lt;br /&gt;
Значение унаследованных привилегий можно переопределить с помощью явного задания привилегии.&lt;br /&gt;
===Порядок настройки системы===&lt;br /&gt;
Привилегии настраиваются в отдельном окне привилегий, доступном в меню &amp;quot;Вид&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Порядок настройки системы проверки прав в версии AgavaSCADA 1.2 следующий:&lt;br /&gt;
&lt;br /&gt;
#Добавить в проект систему проверки прав пользователей. Для этого нажать ПКМ по узлу «Станция» в дереве проекта, затем выбрать «Добавить узел» - «Система» - «Система проверки прав пользователей».&lt;br /&gt;
#Добавить в систему проверки прав пользователей узел «Роль». Для этого нажать ПКМ по узлу «Система проверки прав пользователей» в дереве проекта, затем выбрать «Добавить узел» - «Роли».&lt;br /&gt;
#Добавить в узел «Роли» необходимые роли. Для этого нажать ПКМ по узлу «Роли» в дереве проекта, затем выбрать «Добавить узел» - «Роль».&lt;br /&gt;
#Для каждой роли настроить привилегии в окне привилегий. Для этого необходимо нажать «Вид» - «Открыть привилегии». В открывшемся окне в выпадающем списке «Пользователь / роль» выбрать нужную роль. Затем, нажимая ПКМ по узлам и выбирая «Добавить привилегию» настроить все необходимые ограничения для данной роли.&lt;br /&gt;
#Добавить в систему проверки прав пользователей узел «Пользователи». Для этого нажать ПКМ по узлу «Система проверки прав пользователей» в дереве проекта, затем выбрать «Добавить узел» - «Пользователи».&lt;br /&gt;
#Добавить в узел «Пользователи» необходимых пользователей. Для этого нажать ПКМ по узлу «Пользователи» в дереве проекта, затем выбрать «Добавить узел» - «Пользователи».&lt;br /&gt;
#Для каждого пользователя указать имя и пароль, которые будут использоваться при авторизации, и выбрать одну или несколько ролей.&lt;br /&gt;
&lt;br /&gt;
== Сигналы, источники и операции ==&lt;br /&gt;
Регистры и другие узлы, добавленные в группу «Сигналы», являются внутренними для проекта и могут менять свои значения только с помощь скриптов или других узлов, с которыми они связаны.&lt;br /&gt;
&lt;br /&gt;
Сигналы содержат в себе несколько подгрупп.&lt;br /&gt;
&lt;br /&gt;
=== Сигнал===&lt;br /&gt;
Сигнал - специальный тип узла, хранящий значение узла типа &amp;quot;источник&amp;quot;. Сигналы могут использоваться для хранения значений нескольких источников, модифицировать их, обладать дополнительными полями и т. д.&lt;br /&gt;
&lt;br /&gt;
Сигналы некоторых типов позволяют модифицировать исходное значение источников. Принцип обработки значения источника или сигнала с помощью операций: &lt;br /&gt;
&lt;br /&gt;
Первичное значение поступает на вход операции, производится вычисление. Если есть еще операции, то вычисленное значение после первой операции передается на вход второй. И так далее по всем операциям. Если операций больше нет, вычисленное значение устанавливается в качестве значения узла. &lt;br /&gt;
&lt;br /&gt;
Все операции выполняются в порядке, в котором они заданы в соответствующих свойствах.&lt;br /&gt;
&lt;br /&gt;
====Сигнал простой====&lt;br /&gt;
Узел типа &amp;quot;Сигнал простой&amp;quot; предназначен для хранения и обработки значения источника, или другого сигнала или операции. Позволяет произвести какие-либо действия с этим значением с помощью добавления нужных операций в свойство «Операции после чтения».&lt;br /&gt;
&lt;br /&gt;
====Постоянная ====&lt;br /&gt;
Узел типа &amp;quot;Постоянная&amp;quot; предназначен для хранения данных выбранного формата и позволяет изменять их в ходе выполнения программы. Связывание с источником не предусмотрено. Изменение осуществляется с помощью специализированных функций или блока установки значения в задаче ПЛК.&lt;br /&gt;
&lt;br /&gt;
====Массив====&lt;br /&gt;
Массив - совокупность каких-либо объектов, указанных в свойстве «Входные значения». Нумерация объектов в массиве начинается с 0. Может использоваться для взаимодействия с демультиплексором.&lt;br /&gt;
&lt;br /&gt;
====Сигнал комплексный====&lt;br /&gt;
Сигнал используется для взаимодействия с виджетом «Цифровой индикатор». Позволяет контролировать входное значение и генерировать события переходу входного значения через уставки.&lt;br /&gt;
&lt;br /&gt;
Содержит в себе свойства для настройки следующих параметров:&lt;br /&gt;
&lt;br /&gt;
*ВАУ – верхняя аварийная уставка;&lt;br /&gt;
*ВПУ - верхняя предаварийная уставка;&lt;br /&gt;
*НПУ - нижняя предаварийная уставка;&lt;br /&gt;
*НАУ – нижняя аварийная уставка;&lt;br /&gt;
*ФНЧ – фильтр низких частот.&lt;br /&gt;
&lt;br /&gt;
===Источник===&lt;br /&gt;
Источник - специальный тип узлов, предназначенных для передачи данных от внешних устройств.&lt;br /&gt;
&lt;br /&gt;
====Регистр Modbus====&lt;br /&gt;
Регистр Modbus используется для приема и передачи данных по протоколам Modbus-RTU, Modbus-TCP. Данный тип узов также может использоваться для организации работы некоторых алгоритмов программы (например для взаимодействия с контроллером событий).&lt;br /&gt;
&lt;br /&gt;
====Источник индексный====&lt;br /&gt;
Узел типа &amp;quot;Источник индексный&amp;quot; используется для обработки данных, полученных по протоколу Upd, а так же в массивах для индексации значений.&lt;br /&gt;
&lt;br /&gt;
===Операция===&lt;br /&gt;
[[Файл:AgavaPLC-Входные значения операций.png|мини|Входные значения операций]]&lt;br /&gt;
Узлы типа &amp;quot;Операция&amp;quot; используются для реализации вычислительных алгоритмов в задаче ПЛК или отдельно, при их размещении в группе &amp;quot;Сигналы&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
В качестве входных значений операций выбираются константные числа, другие узлы группы «Сигналы», регистры или блоки задачи ПЛК.&lt;br /&gt;
&lt;br /&gt;
====Операция «Сложение»====&lt;br /&gt;
Выходным значением является сумма входных значений. В качестве входных значений можно выбирать как узлы, так и конкретные числа формата int или double.&lt;br /&gt;
&lt;br /&gt;
====Операция «Вычитание»====&lt;br /&gt;
Выходным значением является разность первого входного значения и суммы всех последующих значений. В качестве входных значений можно выбирать как узлы, так и конкретные числа формата int или double.&lt;br /&gt;
&lt;br /&gt;
====Операция «Умножение»====&lt;br /&gt;
Выходным значением является произведение значений всех входных значений. В качестве входных значений можно выбирать как узлы, так и конкретные числа формата int или double.&lt;br /&gt;
&lt;br /&gt;
====Операция «Деление»====&lt;br /&gt;
Выходным значением является результат от деления первого входного значения на произведение всех последующих значений. В качестве входных значений можно выбирать как узлы, так и конкретные числа формата int или double.&lt;br /&gt;
&lt;br /&gt;
====Операция «Условие»====&lt;br /&gt;
Узел типа &amp;quot;Операция условие&amp;quot; предназначен для сравнения значений двух узлов. Для условия задаются сравниваемые параметры и выбирается режим сравнения. В качестве входных значений можно выбирать как узлы, так и конкретные числа формата int или double.&lt;br /&gt;
&lt;br /&gt;
====Операция «Пара условий»====&lt;br /&gt;
[[Файл:AgavaPLC-Операция «Пара условий».png|мини|Операция «Пара условий»]]&lt;br /&gt;
Операция содержит в себе два условия. Для каждого условия задаются индивидуальные сравнимаемые параметры и выбирается режим сравнения.&lt;br /&gt;
&lt;br /&gt;
Выходное значение операции зависит от ее режима проверки – при выбранном режиме «Логическое ИЛИ» выходное значение равно логической «1» если одно из условий равно «1», при «Логическом И»- если оба условия равны «1».&lt;br /&gt;
&lt;br /&gt;
====Операция «Логическое ИЛИ»====&lt;br /&gt;
Если одно из входных значений становится равно логической «1» (контакты замкнуты), то выходное значение становится логической «1» (выход включен).&lt;br /&gt;
&lt;br /&gt;
====Операция «Логическое И»====&lt;br /&gt;
Если все входные значения становятся равны логической «1», выходное значение становится логической «1» (выход включен).&lt;br /&gt;
&lt;br /&gt;
====Операция «Логическое НЕ»====&lt;br /&gt;
Если входное значение блока становится равно логическому «0», то выходное значение становится логической «1», и наоборот.&lt;br /&gt;
&lt;br /&gt;
====Операция «Таймер»====&lt;br /&gt;
Таймер предназначен для выполнения каких-либо [[Узлы проекта AgavaSCADA/AgavaPLC#.D0.94.D0.B5.D0.B9.D1.81.D1.82.D0.B2.D0.B8.D1.8F|действий]] через одинаковые промежутки времени (например запись значения в узел). Промежуток между исполнениями действий задается в свойстве «Интервал срабатывания», а сами действия в свойстве «Действия OnTimer». Для работы операции ее необходимо добавить в свойство «Узлы» [[Узлы проекта AgavaSCADA/AgavaPLC#.D0.97.D0.B0.D0.B4.D0.B0.D1.87.D0.B8|задачи]] с периодическим или разовым режимом выполнения.&lt;br /&gt;
&lt;br /&gt;
====Операция «Мультиплексор»====&lt;br /&gt;
Мультплексор осуществляет перевод нескольких булевых переменных в целочисленное значение по формуле: «выход = вход1 + вход2*2^1 + вход3*2^2 + ...». &lt;br /&gt;
&lt;br /&gt;
Например если в качестве входных значений указаны два регистра, то выходное значение мультиплексора будет формироваться следующим образом:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Значение регистра 1&lt;br /&gt;
!Значение регистра 2&lt;br /&gt;
!Выходное значение&lt;br /&gt;
|-&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|-&lt;br /&gt;
|1&lt;br /&gt;
|0&lt;br /&gt;
|1&lt;br /&gt;
|-&lt;br /&gt;
|0&lt;br /&gt;
|1&lt;br /&gt;
|2&lt;br /&gt;
|-&lt;br /&gt;
|1&lt;br /&gt;
|1&lt;br /&gt;
|3&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
====Операция «Демультиплексор»====&lt;br /&gt;
Демультиплексор осуществляет перевод целочисленных значений из массива в несколько булевых переменных, при этом включается выход, номер которого соответствует числу из массива (например первый элемент массива равен 5, на пятом выходе появится значение true). Нумерация выходов начинается с нуля.&lt;br /&gt;
&lt;br /&gt;
====Операция «Генератор случайного числа»====&lt;br /&gt;
Выходным значением является случайное число в диапазоне между указанным минимальным и максимальным значениями. Для работы операции ее необходимо добавить в свойство «Узлы» [[Узлы проекта AgavaSCADA/AgavaPLC#.D0.97.D0.B0.D0.B4.D0.B0.D1.87.D0.B8|задачи]] с периодическим или разовым режимом выполнения.&lt;br /&gt;
&lt;br /&gt;
====Операция «Скрипт С++»====&lt;br /&gt;
Операция «Скрипт С++» предназначена для реализации разнообразных алгоритмов на языке С++. Операция предусматривает реализацию одной или нескольких функций, выполняющих необходимые пользователю действия. &lt;br /&gt;
&lt;br /&gt;
Для выполнения скрипта, можно добавить в свойство «Узлы» [[Узлы проекта AgavaSCADA/AgavaPLC#.D0.97.D0.B0.D0.B4.D0.B0.D1.87.D0.B8|задачи]] с периодическим или разовым режимом выполнения. Другим способом вызова срабатывания скрипта является добавление его в [[Узлы проекта AgavaSCADA/AgavaPLC#.D0.94.D0.B5.D0.B9.D1.81.D1.82.D0.B2.D0.B8.D0.B5 .C2.AB.D0.92.D1.8B.D0.BF.D0.BE.D0.BB.D0.BD.D0.B5.D0.BD.D0.B8.D0.B5 .D1.81.D0.BA.D1.80.D0.B8.D0.BF.D1.82.D0.B0.C2.BB|действие «Выполнение скрипта»]].&lt;br /&gt;
&lt;br /&gt;
Пример скрипта, выполняющего получение значения определенного узла и запись измененного значения в другой узел:&lt;br /&gt;
 float val()&lt;br /&gt;
 {&lt;br /&gt;
     float f = GetNodeValueAsFloat(&amp;quot;/Конфигурация1/stationSimple1/Signals1/Random2&amp;quot;);&lt;br /&gt;
     float f1 = f*100.0;&lt;br /&gt;
     SetNodeValueAsFloat(&amp;quot;/Конфигурация1/stationSimple1/Signals1/Constant3&amp;quot;, f1);&lt;br /&gt;
     return f*10.0;&lt;br /&gt;
 }&lt;br /&gt;
Приведенный выше скрипт возвращает исходное значение, умноженное на 10. Возвращаемое таким образом значение записывается в выход операции для возможности считывания в других операциях, скриптах и т. д.&lt;br /&gt;
&lt;br /&gt;
Скрипты могут возвращать значения следующих типов:&lt;br /&gt;
&lt;br /&gt;
*void;&lt;br /&gt;
*float;&lt;br /&gt;
*double;&lt;br /&gt;
*int.&lt;br /&gt;
&lt;br /&gt;
Подробное описание реализации языка С++ в AgavaSCADA/AgavaPLC приведено на странице &amp;quot;[[Описание языка С++ в AgavaPLC]]&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
===Объект===&lt;br /&gt;
Узлы типа &amp;quot;Объект&amp;quot; предназначены для взаимодействия с аппаратными компонентами контроллера. Для всех объектов, являющихся субмодулями, необходимо указать слот, в котором они установлены. Доступ к значениям входов/выходов субмодуля осуществляется через его вложенные узлы.&lt;br /&gt;
&lt;br /&gt;
'''ПЛК процессорный модуль''' &lt;br /&gt;
&lt;br /&gt;
Предоставляет возможность регулирования подсветки экрана; включения и отключения индикаторов работы, аварии и программы.&lt;br /&gt;
&lt;br /&gt;
'''ПЛК субмодуль DI'''&lt;br /&gt;
&lt;br /&gt;
Позволяет получать доступ к значениям входов субмодуля DI.&lt;br /&gt;
&lt;br /&gt;
'''ПЛК субмодуль R'''&lt;br /&gt;
&lt;br /&gt;
Позволяет управлять значениями выходов субмодуля R.&lt;br /&gt;
&lt;br /&gt;
'''ПЛК субмодуль SIM'''&lt;br /&gt;
&lt;br /&gt;
Позволяет управлять значениями выходов субмодуля SIM.&lt;br /&gt;
&lt;br /&gt;
'''ПЛК субмодуль DO6'''&lt;br /&gt;
&lt;br /&gt;
Позволяет управлять значениями выходов субмодуля DO6.&lt;br /&gt;
&lt;br /&gt;
'''ПЛК субмодуль AI'''&lt;br /&gt;
&lt;br /&gt;
Позволяет получать доступ к значениям входов субмодуля AI и задавать их тип.&lt;br /&gt;
&lt;br /&gt;
'''ПЛК субмодуль AIO'''&lt;br /&gt;
&lt;br /&gt;
Позволяет получать доступ к значениям входов субмодуля AIO, управлять значениями выходов и задавать тип входов и выходов.&lt;br /&gt;
&lt;br /&gt;
'''ПЛК субмодуль TMP'''&lt;br /&gt;
&lt;br /&gt;
Позволяет получать доступ к значениям входов субмодуля TMP и задавать их тип.&lt;br /&gt;
&lt;br /&gt;
==Задачи==&lt;br /&gt;
Группа «Задачи» предназначена для группировки узлов типа «Задача», которые используются для циклического или разового выполнения созданных пользователем алгоритмов.&lt;br /&gt;
&lt;br /&gt;
===Задача ПЛК===&lt;br /&gt;
Данный узел предоставляет возможности для связывания между собой других узлов (таких как сигналы, субмодули ПЛК, постоянные и т. д.) в удобной графической форме (см. Рисунок 64). Для перехода к редактору необходимо щелкнуть правой кнопкой мыши на задачу ПЛК и выбрать в открывшемся контекстном меню команду «Открыть графическое представление» или дважды щелкнуть левой кнопкой мыши на задаче ПЛК в дереве проекта.&lt;br /&gt;
&lt;br /&gt;
Рисунок 64 – Окно графического редактирования задачи «ПЛК-60»&lt;br /&gt;
&lt;br /&gt;
Панель инструментов задачи ПЛК, расположенная в верхней части окна, содержит следующие элементы (см. Рисунок 16):&lt;br /&gt;
&lt;br /&gt;
*Выпадающий список выбора режима подписи портов.&lt;br /&gt;
*Выпадающий список выбора режима подписи блоков.&lt;br /&gt;
*Кнопка запуска режима симулятора.&lt;br /&gt;
*Кнопка запуска онлайн отладки.&lt;br /&gt;
*Кнопка печати задачи.&lt;br /&gt;
*Инструменты управления симуляцией.&lt;br /&gt;
&lt;br /&gt;
Добавлять узлы в задачу можно перетаскиванием мышью из окна функциональных блоков или из окна дерева проекта. Для связывания узлов между собой необходимо, зажав левую кнопку мыши на выходе одного узла, протянуть линию ко входу другого и затем отпустить левую кнопку мыши для соединения блоков. &lt;br /&gt;
&lt;br /&gt;
Созданную связь можно удалить, выделив ее левой кнопкой мыши и нажав клавишу &amp;quot;Del&amp;quot;. Связь можно &amp;quot;разорвать&amp;quot;, то есть добавить разрыв, нажав по ней правой кнопкой мыши и выбрав в контекстном меню команду «Добавить разрыв». &lt;br /&gt;
&lt;br /&gt;
Для выделения нескольких блоков рамкой зажмите клавишу &amp;quot;Shift&amp;quot; и выделяйте блоки мышью с нажатой левой кнопкой.&lt;br /&gt;
&lt;br /&gt;
Задача ПЛК предоставляет возможности для проведения тестирования и отладки проекта, описанные в разделе [[#Проверка и отладка проекта]].&lt;br /&gt;
&lt;br /&gt;
====Блоки задачи ПЛК====&lt;br /&gt;
Помимо операций, описанных в разделе [[#Операция]], для реализации алгоритмов в задачу ПЛК можно добавлять блоки, описанные ниже.&lt;br /&gt;
&lt;br /&gt;
'''Функциональный блок'''&lt;br /&gt;
&lt;br /&gt;
Используется для выделения каких-либо действий в отдельный блок, для упрощения понимания работы алгоритма программы. Содержит входы, выходы и блоки, обеспечивающие работу внутренней логики. Позволяет проводить изолированную отладку, при которой значения на входах функционального блока вручную задаются пользователем. Блок, работающий в данном режиме выделяется черной рамкой. Для включения изолированной отладки необходимо открыть блок и нажать кнопку «Изолированная отладка» на панели управления задачей.&lt;br /&gt;
&lt;br /&gt;
'''Блок установки значения'''&lt;br /&gt;
&lt;br /&gt;
Блок осуществляет запись значения, поданного на вход in0, в узел, указанный в свойстве «Узел для чтения/записи»&lt;br /&gt;
&lt;br /&gt;
'''Блок задержки'''&lt;br /&gt;
&lt;br /&gt;
Блок задержки используется для создания задержки передачи значения с входа блока на выход на один цикл обработки задачи.&lt;br /&gt;
&lt;br /&gt;
'''Блок «Битовое OR»'''&lt;br /&gt;
&lt;br /&gt;
Для вычисления значения будет произведена операция &amp;quot;ИЛИ&amp;quot; над каждым битом значения в отдельности. Например: 1010 OR 0110 = 1110&lt;br /&gt;
&lt;br /&gt;
'''Блок «Логическое И»'''&lt;br /&gt;
&lt;br /&gt;
Если все входные значения становятся равны логической «1», выходное значение становится логической «1» (выход включен).&lt;br /&gt;
&lt;br /&gt;
'''Блок «Битовое AND»'''&lt;br /&gt;
&lt;br /&gt;
Для вычисления значения будет произведена операция &amp;quot;И&amp;quot; над каждым битом значения в отдельности. Если все биты, стоящие на одинаковых позициях в двоичных представлениях значений, поступающих на входы блока, равны логической «1», то на выходе элемента в этой позиции появляется логическая «1» (выход включен). Например: 1010 AND 0110 = 0010&lt;br /&gt;
&lt;br /&gt;
'''Блок «Логическое НЕ»'''&lt;br /&gt;
&lt;br /&gt;
Если входное значение блока становится равно логическому «0», то выходное значение становится логической «1», и наоборот.&lt;br /&gt;
&lt;br /&gt;
'''Блок «Битовое XOR»'''&lt;br /&gt;
&lt;br /&gt;
Если только на один из входов блока функции поступает логическая «1», то на выходе элемента появляется логическая «1». Если на входы блока функции поступают целочисленные значения, то операция будет произведена над каждым битом значения в отдельности. Например: 1010 XOR 0110 = 1100&lt;br /&gt;
&lt;br /&gt;
'''Блок «Битовое SHR»'''&lt;br /&gt;
&lt;br /&gt;
Побитовый логический сдвиг вправо используется для выполнения операции побитового логического сдвига операнда X вправо на N бит с дополнением нулями слева.&lt;br /&gt;
&lt;br /&gt;
'''Блок «Битовое SHL»'''&lt;br /&gt;
&lt;br /&gt;
Побитовый логический сдвиг влево используется для выполнения операции побитового логического сдвига операнда X влево на N бит с дополнением нулями справа.&lt;br /&gt;
&lt;br /&gt;
'''Блок «Таймер»'''&lt;br /&gt;
&lt;br /&gt;
Таймер предназначен для выполнения каких-либо действий (см. раздел 4.6) через одинаковые промежутки времени (например запись значения в узел).&lt;br /&gt;
&lt;br /&gt;
'''Блок «Мультиплексор»'''&lt;br /&gt;
&lt;br /&gt;
Мультплексор осуществляет перевод нескольких булевых переменных в целочисленное значение по формуле: «выход = вход1 + вход2*2^1 + вход3*2^2 + ...»&lt;br /&gt;
&lt;br /&gt;
'''Блок «Демультиплексор»'''&lt;br /&gt;
&lt;br /&gt;
Демультиплексор осуществляет перевод целочисленных значений из массива в несколько булевых переменных, при этом включается выход, номер которого соответствует числу из массива (например первый элемент массива равен 5, на пятом выходе появится значение true). Нумерация выходов начинается с нуля.&lt;br /&gt;
&lt;br /&gt;
'''Блок «Генератор случайного числа»'''&lt;br /&gt;
&lt;br /&gt;
Выходным значением является случайное число в диапазоне между указанным минимальным и максимальным значениями.&lt;br /&gt;
&lt;br /&gt;
'''Блок «Скрипт С++»'''&lt;br /&gt;
&lt;br /&gt;
Операция «Скрипт С++» предназначена для реализации разнообразных алгоритмов на языке С++. Операция предусматривает реализацию одной или нескольких функций, выполняющих необходимые пользователю действия. Для выполнения скрипта, необходимо добавить его в качестве узла для задачи или задачи ПЛК.&lt;br /&gt;
&lt;br /&gt;
Пример скрипта, выполняющего получение значения определенного узла и запись измененного значения в другой узел:&lt;br /&gt;
 float val()&lt;br /&gt;
 {&lt;br /&gt;
     float f = GetNodeValueAsFloat(&amp;quot;/Конфигурация1/stationSimple1/Signals1/Random2&amp;quot;);&lt;br /&gt;
     float f1 = f*100.0;&lt;br /&gt;
     SetNodeValueAsFloat(&amp;quot;/Конфигурация1/stationSimple1/Signals1/Constant3&amp;quot;, f1);&lt;br /&gt;
     return f*10.0;&lt;br /&gt;
 }&lt;br /&gt;
Приведенный выше скрипт возвращает исходное значение, умноженное на 10. Возвращаемое таким образом значение записывается в выход операции для возможности считывания в других операциях, скриптах и т. д.&lt;br /&gt;
&lt;br /&gt;
Скрипты могут возвращать значения следующих типов:&lt;br /&gt;
&lt;br /&gt;
* void;&lt;br /&gt;
*float;&lt;br /&gt;
*double;&lt;br /&gt;
*int.&lt;br /&gt;
&lt;br /&gt;
Подробное описание реализации языка С++ в AgavaSCADA/AgavaPLC приведено на странице &amp;quot;[[Описание языка С++ в AgavaPLC]]&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
'''Блок «Таймер с задержкой»'''&lt;br /&gt;
&lt;br /&gt;
Таймер с задержкой используется для операции задержки передачи и/или отключения сигнала. На выходе таймера появится сигнал логической «1» с задержкой относительно фронта входного сигнала продолжительностью равной интервалу включения и выключится по спаду входного сигнала с задержкой продолжительностью равной интервалу выключения. В том случае, если необходимо использовать блок только как таймер с задержкой включения (отключения) интервал выключения (включения) устанавливается равным 0.&lt;br /&gt;
&lt;br /&gt;
'''Блок «Генератор прямоугольных импульсов»'''&lt;br /&gt;
&lt;br /&gt;
Генератор прямоугольных импульсов используется для формирования прямоугольных импульсов пульсации. На выходе генератора формируются импульсы с заданными параметрами длительности включенного и отключенного импульса на время действия управляющего сигнала на входе (сигнал логической «1»).&lt;br /&gt;
&lt;br /&gt;
'''Блок «Триггер RS»'''&lt;br /&gt;
&lt;br /&gt;
RS-триггер с приоритетом выключения используется для переключения с фиксацией состояния во время поступления коротких импульсов на соответствующий вход. На выходе появится логическая «1» по фронту сигнала на входе Set, которая будет сброшена в «0», при поступлении импульса на вход Reset.&lt;br /&gt;
&lt;br /&gt;
'''Блок «Триггер SR»'''&lt;br /&gt;
&lt;br /&gt;
SR-триггер с приоритетом включения используется для переключения с фиксацией состояния в случае поступления коротких импульсов на соответствующий вход. На выходе появится логическая «1» по фронту сигнала на входе Set, которая будет сброшена в «0», при поступлении импульса на вход Reset.&lt;br /&gt;
&lt;br /&gt;
'''Блок «Детектор переднего фронта импульса»'''&lt;br /&gt;
&lt;br /&gt;
Детектор переднего фронта импульса используется в случае необходимости иметь реакцию на изменение состояния дискретного входного сигнала. На выходе генерируется единичный импульс при изменении состояния входа из «0» в «1».&lt;br /&gt;
&lt;br /&gt;
'''Блок «Детектор заднего фронта импульса»'''&lt;br /&gt;
&lt;br /&gt;
Детектор заднего фронта импульса используется в случае необходимости иметь реакцию на изменение состояния дискретного входного сигнала. На выходе генерируется единичный импульс при изменении состояния входа из «1» в «0».&lt;br /&gt;
&lt;br /&gt;
'''Блок «D-триггер»'''&lt;br /&gt;
&lt;br /&gt;
D-триггер используется для формирования импульса включения выхода на интервал времени импульса на входе D, выходной интервал будет синхронизирован с тактовой частотой на входе С. На выходе Q триггера появится сигнал логической «1» по фронту тактовых импульсов на входе С при наличии сигнала логической «1» на входе D. Возврат выхода в сигнал логического «0» произойдет по фронту тактовых импульсов на входе С при наличии сигнала логического «0» на входе D. Вход Set принудительно устанавливает выход в состояние логической «1». Вход Reset является приоритетным и устанавливает выход в состояние логического «0».&lt;br /&gt;
&lt;br /&gt;
'''Блок «Селектор»'''&lt;br /&gt;
&lt;br /&gt;
Если на вход Value подается логическая «1», то результатом выполнения операции блока на выходе является входной сигнал ValueT. Если же Value равен логической «0», то результатом выполнения операции блока на выходе является входной сигнал ValueF.&lt;br /&gt;
&lt;br /&gt;
'''Блок «Больше чем»'''&lt;br /&gt;
&lt;br /&gt;
На выход подается логическая «1», если значение in0 больше чем значение in1.&lt;br /&gt;
&lt;br /&gt;
'''Блок «Равенство»'''&lt;br /&gt;
&lt;br /&gt;
На выход подается логическая «1», если значение in0 равно значению in1.&lt;br /&gt;
&lt;br /&gt;
'''Блок «Абсолютное значение числа»'''&lt;br /&gt;
&lt;br /&gt;
Результатом операции функции на выходе является модуль подаваемого на вход значения. Если число на входе положительное, то на выход подается само число, если отрицательное – положительное число, получаемое от перемены его знака с «-» на «+».&lt;br /&gt;
&lt;br /&gt;
'''Блок «Возведение в степень»'''&lt;br /&gt;
&lt;br /&gt;
Результатом операции функции на выходе является значение, равное значению in0, возведенному в степень значения N.&lt;br /&gt;
&lt;br /&gt;
'''Блок «PID-регулятор»'''&lt;br /&gt;
&lt;br /&gt;
Регулятор PID применяется для поддержания заданного значения параметра. На вход Pv подается текущее значение регулируемой величины, на Sp – ее заданное значение. С помощью изменения коэффициентов ПИД регулятора kP, kI и kD достигается оптимальный режим работы. Min задает минимальное значение на выходе, Max – максимальное. time - период регулятора (в мс.).&lt;br /&gt;
&lt;br /&gt;
'''Блок «PWM-регулятор»'''&lt;br /&gt;
&lt;br /&gt;
Применяется для преобразования аналогового сигнала в дискретный с помощью ШИМ. На вход in подается текущее значение регулируемой величины, Min задает минимальное значение на входе, Max – максимальное. time - период регулятора (в мс.)&lt;br /&gt;
&lt;br /&gt;
==Устройства==&lt;br /&gt;
Группа «Устройства» предназначена для группировки узлов типа &amp;quot;Устройство&amp;quot;, выполняющие разнообразные задачи, например работа с внешними накопителями и ПЗУ. &lt;br /&gt;
&lt;br /&gt;
Retain-накопитель дает возможность хранить значения регистров, постоянных и сигналов в постоянной памяти контроллера, что позволяет им сохранять свои значения после отключения питания.&lt;br /&gt;
&lt;br /&gt;
Для сохранения переменных необходимо перечислить их в свойстве «Узлы» и указать путь сохранения на выбранном накопителе.&lt;br /&gt;
&lt;br /&gt;
== Отчеты==&lt;br /&gt;
{{Внимание|Тип=Восклицание желтый.png|Текст=Данный узел доступен только при  исполнении проекта на настольном компьютере. На панелях оператора и контроллерах МПР этот узел не доступен.}}&lt;br /&gt;
Отчет – технологический документ, содержащий информацию о ходе производственного процесса, обработанную по заложенным в отчет алгоритмам. Отчеты формируются на основе макетов (статической части отчетов) путем добавления в них свойств и значений заданных параметров технологического процесса, которые формируются (выбираются из базы данных технологических параметров и проходят соответствующую обработку) по алгоритмам, размещенным в этих шаблонах.&lt;br /&gt;
&lt;br /&gt;
Данные для отчета предоставляет выборка, осуществляющая получение данных и их обработку из базы данных.&lt;br /&gt;
&lt;br /&gt;
===Создание нового отчета===&lt;br /&gt;
Создание любого отчета производится в два этапа.&lt;br /&gt;
&lt;br /&gt;
#Создание необходимых узлов в конфигурации: сам отчет и необходимое количество выборок.&lt;br /&gt;
#Составление макета отчета.&lt;br /&gt;
&lt;br /&gt;
Создание узла типа «Отчет» в конфигурации и выборок для него производится аналогично созданию узлов других типов. К станции добавляется узел типа «Отчеты» с помощью команды контекстного меню «Добавить узел», далее к узлу типа «Отчеты» добавляется отчет и к отчету добавляется необходимое количество выборок.&lt;br /&gt;
&lt;br /&gt;
Выборка – специальный узел, предназначенный для выборки данных из архива и их обработки для последующего отображения в отчете.&lt;br /&gt;
&lt;br /&gt;
Перед переходом к редактированию макета желательно проделать следующие операции:&lt;br /&gt;
&lt;br /&gt;
*в свойстве отчета «Путь к файлу отчета» установить имя файла, в котором будет храниться макет отчета;&lt;br /&gt;
* в свойстве «Источники» выборки (выборок) отчета установить перечень архивных сигналов (коннекторов), которые будут выводиться в отчете.&lt;br /&gt;
&lt;br /&gt;
===Редактирование макета отчета===&lt;br /&gt;
[[Файл:AgavaPLC–Редактор макета отчета.png|мини|Рисунок 42 – Редактор макета отчета]]&lt;br /&gt;
Для редактирования макета отчета необходимо переключиться из редактора конфигурации в редактор макета отчета с помощью команды «Открыть редактор макета отчета», доступной из контекстного меню дерева конфигурации, отображаемого при щелчке правой кнопкой мыши на узле типа «Отчет».&lt;br /&gt;
&lt;br /&gt;
В окне редактора расположены:&lt;br /&gt;
&lt;br /&gt;
*панели инструментов;&lt;br /&gt;
* панель объектов отчета;&lt;br /&gt;
*окно «Инспектор объектов»;&lt;br /&gt;
*окно «Инспектор данных»;&lt;br /&gt;
*окно «Инспектор скриптов»;&lt;br /&gt;
*область построения макета отчета;&lt;br /&gt;
*окно «Структура отчета».&lt;br /&gt;
&lt;br /&gt;
Редактор макета позволяет вызывать команды сочетаниями клавиш:&lt;br /&gt;
&lt;br /&gt;
*Ctrl + N – новый макет;&lt;br /&gt;
*Ctrl + O – загрузить макет;&lt;br /&gt;
*Ctrl + S – сохранить макет;&lt;br /&gt;
*Ctrl + Shift + S – сохранить макет под новым именем;&lt;br /&gt;
*Ctrl + P – предварительный просмотр;&lt;br /&gt;
*Ctrl + Z – отмена изменений;&lt;br /&gt;
*Ctrl + Shift + Z – возврат отмененных изменений;&lt;br /&gt;
* Ctrl + C – копировать объект;&lt;br /&gt;
*Ctrl + X – вырезать объект;&lt;br /&gt;
*Ctrl + V – вставить объект;&lt;br /&gt;
*Ctrl + Стрелки – переместить выделенный объект;&lt;br /&gt;
*Shift + Стрелки – изменить размер выделенных объектов;&lt;br /&gt;
*Del – удалить выделенные объекты;&lt;br /&gt;
*Shift + левая кнопка мыши – создать область выделения.&lt;br /&gt;
&lt;br /&gt;
====Окно «Инспектор объектов»====&lt;br /&gt;
Окно «Инспектор объектов» содержит список свойств выделенного объекта и предназначено для их редактирования.&lt;br /&gt;
&lt;br /&gt;
====Окно «Инспектор данных»====&lt;br /&gt;
Окно «Инспектор данных» содержит список доступных для использования источников данных (выборок) и предназначено для заполнения блока «Данные» элементами соответствующего типа.&lt;br /&gt;
&lt;br /&gt;
====Окно «Инспектор скриптов»====&lt;br /&gt;
Окно «Инспектор скриптов» содержит список доступных для использования в отчете скриптов.&lt;br /&gt;
&lt;br /&gt;
====Окно «Структура отчета»====&lt;br /&gt;
Окно «Структура отчет» отображает структуру отчета в виде дерева связанных элементов.&lt;br /&gt;
&lt;br /&gt;
===Элементы отчета===&lt;br /&gt;
Для составления макета отчета доступны следующие элементы:&lt;br /&gt;
&lt;br /&gt;
*текст;&lt;br /&gt;
*данные;&lt;br /&gt;
*изображение;&lt;br /&gt;
*фигура;&lt;br /&gt;
*компоновка (Layout).&lt;br /&gt;
&lt;br /&gt;
====Текст====&lt;br /&gt;
Элемент «Текст» служит для вывода надписей или содержимого полей источников данных.&lt;br /&gt;
&lt;br /&gt;
Объект «Текст» обладает очень широкими возможностями. Он умеет отображать текст, рамку, заливку. Текст может быть отображен любым шрифтом любого размера, цвета и стиля. Большинство настроек делаются визуально с помощью панелей инструментов.&lt;br /&gt;
&lt;br /&gt;
Одна из самых главных особенностей этого универсального объекта – это возможность отображения не только статичного текста, но и текста с применением вычисляемых выражений. Причем, выражения могут располагаться в объекте вперемешку с текстом. Рассмотрим простой пример – поместим в объект «Текст» следующую строку: «Привет! Сегодня $S{now()}».&lt;br /&gt;
&lt;br /&gt;
Если запустить отчет на построение, мы увидим приблизительно следующее: «Привет! Сегодня 2018­08­03». В процессе построения отчета выражение в тексте, заключенное $S{}, было вычислено и полученное значение вставлено обратно в текст. Объект «Текст» может содержать любое количество выражений, смешанных с обычным текстом. В скобки можно заключать и одиночные переменные, и выражения, например, $S{1+2*(3+4)}. В выражениях можно использовать константы, переменные ($V{}), функции, поля БД ($D{}).&lt;br /&gt;
&lt;br /&gt;
Свойства элемента «Текст»:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Наименование свойства&lt;br /&gt;
!Описание&lt;br /&gt;
|-&lt;br /&gt;
|alignment&lt;br /&gt;
|Выравнивание текста по вертикали и горизонтали&lt;br /&gt;
|-&lt;br /&gt;
|angle&lt;br /&gt;
|Поворот надписи&lt;br /&gt;
|-&lt;br /&gt;
|autoHeight&lt;br /&gt;
|Автоматический подбор высоты&lt;br /&gt;
|-&lt;br /&gt;
|autoWidth&lt;br /&gt;
|Автоматический подбор ширины&lt;br /&gt;
|-&lt;br /&gt;
|backgroundColor&lt;br /&gt;
|Цвет заливки&lt;br /&gt;
|-&lt;br /&gt;
|backgroundMode&lt;br /&gt;
|Режим заливки&lt;br /&gt;
|-&lt;br /&gt;
| backgroundOpacity&lt;br /&gt;
|Прозрачность заливки&lt;br /&gt;
|-&lt;br /&gt;
|borders&lt;br /&gt;
|Границы&lt;br /&gt;
|-&lt;br /&gt;
|content&lt;br /&gt;
|Содержимое объекта «Текст»&lt;br /&gt;
|-&lt;br /&gt;
|font&lt;br /&gt;
|Шрифт&lt;br /&gt;
|-&lt;br /&gt;
|fontColor&lt;br /&gt;
|Цвет шрифта&lt;br /&gt;
|-&lt;br /&gt;
| foregroundOpacity&lt;br /&gt;
|Прозрачность шрифта&lt;br /&gt;
|-&lt;br /&gt;
|geometry&lt;br /&gt;
|Размер и расположение объекта&lt;br /&gt;
|-&lt;br /&gt;
|itemLocation&lt;br /&gt;
|Расположение объекта (страница или бэнд)&lt;br /&gt;
|-&lt;br /&gt;
|margin&lt;br /&gt;
|Отступы&lt;br /&gt;
|-&lt;br /&gt;
|objectName&lt;br /&gt;
| Имя объекта&lt;br /&gt;
|-&lt;br /&gt;
|stretchToMaxHeight&lt;br /&gt;
|Установка значения высоты самого высокого объекта на бэнде&lt;br /&gt;
|-&lt;br /&gt;
|trimValue&lt;br /&gt;
|Удаление  пробелов в начале и в конце надписи&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Для редактирования свойства «Content» используется диалоговое окно «Text Item Editor», вызов которого осуществляется двойным щелчком левой кнопки мыши на элементе «Текст».&lt;br /&gt;
&lt;br /&gt;
Свойство «Content» может содержать: &lt;br /&gt;
&lt;br /&gt;
*текст;&lt;br /&gt;
*значения переменных;&lt;br /&gt;
*значения полей из набора данных;&lt;br /&gt;
*значения, формируемые посредством исполнения скрипта.&lt;br /&gt;
&lt;br /&gt;
Для вывода значений переменных используется синтаксис «$V{имяПеременной}» (без кавычек), для вывода значения поля данных – «$D{имяНабораДанных.ИмяПеременной}», для вывода результата исполнения скрипта – «$S{телоСкрипта}».&lt;br /&gt;
&lt;br /&gt;
==== Изображение ====&lt;br /&gt;
Элемент для вывода изображений:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Наименование свойства&lt;br /&gt;
!Описание&lt;br /&gt;
|-&lt;br /&gt;
|autoSize&lt;br /&gt;
|Подгонять размер под размер изображения&lt;br /&gt;
|-&lt;br /&gt;
|borders&lt;br /&gt;
|Границы&lt;br /&gt;
|-&lt;br /&gt;
|content  &lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|datasource&lt;br /&gt;
|Источник данных&lt;br /&gt;
|-&lt;br /&gt;
|field&lt;br /&gt;
|Поле данных&lt;br /&gt;
|-&lt;br /&gt;
|geometry&lt;br /&gt;
|Размер и расположение&lt;br /&gt;
|-&lt;br /&gt;
|image&lt;br /&gt;
|Изображение&lt;br /&gt;
|-&lt;br /&gt;
| itemLocation&lt;br /&gt;
|Расположение объекта (страница или бэнд)&lt;br /&gt;
|-&lt;br /&gt;
|objectName&lt;br /&gt;
|Имя объекта&lt;br /&gt;
|-&lt;br /&gt;
| stretchToMaxHeight&lt;br /&gt;
|Устанавливать значение высоты самого высокого объекта на  бэнде&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
====Фигура====&lt;br /&gt;
Элемент для вывода фигур:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Наименование свойства&lt;br /&gt;
!Описание&lt;br /&gt;
|-&lt;br /&gt;
|borders&lt;br /&gt;
|Границы&lt;br /&gt;
|-&lt;br /&gt;
| geometry&lt;br /&gt;
|Размер и расположение&lt;br /&gt;
|-&lt;br /&gt;
|itemLocation&lt;br /&gt;
|Расположение объекта (страница или бэнд)&lt;br /&gt;
|-&lt;br /&gt;
|lineWidth&lt;br /&gt;
|Толщина линии&lt;br /&gt;
|-&lt;br /&gt;
|objectName&lt;br /&gt;
|Имя объекта&lt;br /&gt;
|-&lt;br /&gt;
|opacity&lt;br /&gt;
|Прозрачность&lt;br /&gt;
|-&lt;br /&gt;
|penStyle&lt;br /&gt;
|Стиль линии&lt;br /&gt;
|-&lt;br /&gt;
|shape&lt;br /&gt;
|Фигура&lt;br /&gt;
|-&lt;br /&gt;
|shapeBrush&lt;br /&gt;
|Стиль заливки&lt;br /&gt;
|-&lt;br /&gt;
|shapeBrushColor&lt;br /&gt;
|Цвет заливки&lt;br /&gt;
|-&lt;br /&gt;
|shapeColor&lt;br /&gt;
|Цвет фигуры&lt;br /&gt;
|-&lt;br /&gt;
|stretchToMaxHeight&lt;br /&gt;
|Устанавливать значение высоты самого высокого объекта на  бэнде&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
====Горизонтальная компоновка (Layout)====&lt;br /&gt;
Элемент, позволяющий объединять несколько элементов в группу:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Наименование свойства&lt;br /&gt;
!Описание&lt;br /&gt;
|-&lt;br /&gt;
|borders&lt;br /&gt;
|Границы&lt;br /&gt;
|-&lt;br /&gt;
|geometry&lt;br /&gt;
|Размер и расположение&lt;br /&gt;
|-&lt;br /&gt;
|itemLocation&lt;br /&gt;
|Расположение объекта (страница или бэнд)&lt;br /&gt;
|-&lt;br /&gt;
|objectName&lt;br /&gt;
|Имя объекта&lt;br /&gt;
|-&lt;br /&gt;
|stretchToMaxHeight&lt;br /&gt;
|Устанавливать значение высоты самого высокого объекта на  бэнде&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Разделы отчета (бэнды) ===&lt;br /&gt;
Бэнд предназначен для размещения других элементов отчета. Бэнд может быть нескольких типов:&lt;br /&gt;
&lt;br /&gt;
*Report Header – заголовок отчета;&lt;br /&gt;
*Report Footer – завершение отчета;&lt;br /&gt;
*Page Header – верхний колонтитул страницы отчета;&lt;br /&gt;
*Page Footer – нижний колонтитул страницы отчета;&lt;br /&gt;
*Data – данные отчета;&lt;br /&gt;
* SubDetail – подчиненные данные отчета;&lt;br /&gt;
*SubDetailHeader – заголовок подчиненных данных;&lt;br /&gt;
*SubDetailFooter – завершение подчиненных данных;&lt;br /&gt;
*GroupHeader – заголовок группы;&lt;br /&gt;
*GroupFooter – завершение группы.&lt;br /&gt;
&lt;br /&gt;
Бэнды применяются для логической группировки объектов. К примеру, размещение объекта на элементе «Данные» типа «Page Header», приводит к отображению этого объекта в верхней части каждой страницы готового отчета. Аналогичным образом «Page Footer» выводится внизу каждой страницы со всеми лежащими на нем объектами.&lt;br /&gt;
&lt;br /&gt;
Общие для всех элементов «Данные» свойства:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Наименование свойства&lt;br /&gt;
!Описание&lt;br /&gt;
|-&lt;br /&gt;
|autoHeight&lt;br /&gt;
|Автоматический подбор высоты&lt;br /&gt;
|-&lt;br /&gt;
|backgroundColor&lt;br /&gt;
|Цвет заливки бэнда&lt;br /&gt;
|-&lt;br /&gt;
|borders&lt;br /&gt;
|Границы&lt;br /&gt;
|-&lt;br /&gt;
|geometry&lt;br /&gt;
|Размер&lt;br /&gt;
|-&lt;br /&gt;
|keepBottomSpace&lt;br /&gt;
|Сохранение отступа от нижней границы бэнда&lt;br /&gt;
|-&lt;br /&gt;
|objectName&lt;br /&gt;
|Имя объекта&lt;br /&gt;
|-&lt;br /&gt;
|printIfEmpty&lt;br /&gt;
|Отображение пустого бэнда&lt;br /&gt;
|-&lt;br /&gt;
|splittable&lt;br /&gt;
|Разделение  бэнда, если он не влезает на страницу&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Report Footer:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Наименование свойства&lt;br /&gt;
!Описание&lt;br /&gt;
|-&lt;br /&gt;
|maxScalePercent&lt;br /&gt;
|Максимальный процент, на который можно уменьшить бенд, если он не влезает на страницу. Если бэнд даже после сжатия&lt;br /&gt;
&lt;br /&gt;
не влезает на страницу, он будет перенесен полностью или частично  – в зависимости от настроек бэнда&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Data:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Наименование свойства&lt;br /&gt;
!Описание&lt;br /&gt;
|-&lt;br /&gt;
|datasource&lt;br /&gt;
|Источник данных. Data-бэнд будет сформирован для каждой строки в источнике данных&lt;br /&gt;
|-&lt;br /&gt;
|keepFooterTogether&lt;br /&gt;
|Если Report Footer не влезает на страницу, то он будет перенесен на следующую страницу совместно с последним&lt;br /&gt;
&lt;br /&gt;
экземпляром Data-бэнда&lt;br /&gt;
|-&lt;br /&gt;
|sliceLastRow&lt;br /&gt;
| Указывает генератору отчетов на то, можно ли разрезать последний экземпляр Data-бэнда или его нужно перенести&lt;br /&gt;
&lt;br /&gt;
целиком&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Бэнды данного типа предназначены для вывода на печать данных из наборов. Набор данных - это заранее неизвестное количество строк (записей), каждая из которых содержит определенное количество колонок (полей).&lt;br /&gt;
&lt;br /&gt;
SubDetail:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Наименование свойства&lt;br /&gt;
!Описание&lt;br /&gt;
|-&lt;br /&gt;
|datasource&lt;br /&gt;
| Источник данных. SubDetail-бэнд будет сформирован для каждой строки в источнике данных&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
SubDetailHeader, SubDetailFooter:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Наименование свойства&lt;br /&gt;
!Описание&lt;br /&gt;
|-&lt;br /&gt;
|printAlways&lt;br /&gt;
| Печатать, даже если SubDetail пустой&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
GroupHeader:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Наименование свойства&lt;br /&gt;
! Описание&lt;br /&gt;
|-&lt;br /&gt;
|groupFieldName&lt;br /&gt;
|Поле, по которому осуществляется группировка. Экземпляр GroupHeader будет формироваться при смене значения в этом  поле&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===Функции===&lt;br /&gt;
==== Агрегатные функции ====&lt;br /&gt;
Агрегатные функции предназначены для обработки значений, содержащихся в резделах Data и SubDetail.&lt;br /&gt;
&lt;br /&gt;
===== AVG - вычисление среднего значения =====&lt;br /&gt;
Пример использования:&lt;br /&gt;
 $S{AVG(&amp;quot;TextItem4&amp;quot;,&amp;quot;DataBand1&amp;quot;);}&lt;br /&gt;
&lt;br /&gt;
===== SUM - вычисление суммы значений =====&lt;br /&gt;
Пример использования:&lt;br /&gt;
 $S{SUM(&amp;quot;TextItem8&amp;quot;,&amp;quot;DataBand1&amp;quot;);}&lt;br /&gt;
&lt;br /&gt;
===== MIN =====&lt;br /&gt;
&lt;br /&gt;
===== MAX =====&lt;br /&gt;
&lt;br /&gt;
===== COUNT =====&lt;br /&gt;
&lt;br /&gt;
==== Числовые функции ====&lt;br /&gt;
&lt;br /&gt;
===== numberFormat - форматирование числа =====&lt;br /&gt;
Синтаксис:&lt;br /&gt;
 numberFormat(значение, 'формат', точность)&lt;br /&gt;
Форматы:&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;'f'&amp;lt;/code&amp;gt; — фиксированная запись (например, &amp;lt;code&amp;gt;&amp;quot;123.45&amp;quot;&amp;lt;/code&amp;gt;);&lt;br /&gt;
* &amp;lt;code&amp;gt;'g'&amp;lt;/code&amp;gt; — общий формат (автоматически выбирает между &amp;lt;code&amp;gt;'f'&amp;lt;/code&amp;gt; и &amp;lt;code&amp;gt;'e'&amp;lt;/code&amp;gt;);&lt;br /&gt;
* &amp;lt;code&amp;gt;'e'&amp;lt;/code&amp;gt; — экспоненциальная запись (например, &amp;lt;code&amp;gt;&amp;quot;1.2345e+02&amp;quot;&amp;lt;/code&amp;gt;);&lt;br /&gt;
&lt;br /&gt;
Пример использования:&lt;br /&gt;
 $S{numberFormat($D{fetcharchiverdata1.ArchiversSourceConnector0 (среднее)}, 'f', 3)}       -&amp;gt; 123.495&lt;br /&gt;
[[Категория:AgavaSCADA/AgavaPLC]]&lt;/div&gt;</summary>
		<author><name>SharipovRR</name></author>
	</entry>
	<entry>
		<id>https://docs.kb-agava.ru/index.php?title=%D0%A3%D0%B7%D0%BB%D1%8B_%D0%BF%D1%80%D0%BE%D0%B5%D0%BA%D1%82%D0%B0_AgavaSCADA/AgavaPLC&amp;diff=3301</id>
		<title>Узлы проекта AgavaSCADA/AgavaPLC</title>
		<link rel="alternate" type="text/html" href="https://docs.kb-agava.ru/index.php?title=%D0%A3%D0%B7%D0%BB%D1%8B_%D0%BF%D1%80%D0%BE%D0%B5%D0%BA%D1%82%D0%B0_AgavaSCADA/AgavaPLC&amp;diff=3301"/>
		<updated>2025-10-29T11:52:11Z</updated>

		<summary type="html">&lt;p&gt;SharipovRR: /* Архиватор PostgreSQL */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Узлы проекта ==&lt;br /&gt;
Узел - элементарная сущность проекта, осуществляющая хранение информации или реализующая определенный функционал. Каждый узел обладает набором [[Свойства узлов в AgavaPLC/AgavaSCADA|свойств]]. Все узлы, объединенные в иерархическую структуру, образуют проект.&lt;br /&gt;
&lt;br /&gt;
== Проект ==&lt;br /&gt;
[[Файл:AgavaPLC–Дерево проекта.png|мини|Рисунок 21 – Дерево проекта]]&lt;br /&gt;
Узел &amp;quot;Проект&amp;quot; (&amp;quot;Корневой узел&amp;quot;, &amp;quot;Корень&amp;quot;) предназначен для хранения общей информации о проекте и связывания других узлов проекта.&lt;br /&gt;
&lt;br /&gt;
== Станция ==&lt;br /&gt;
Станция – важнейший узел, управляющий работой собственных систем и выполняющий обмен данными с другими станциями. Физически станция представляет собой устройство, на котором исполняется проект (компьютер, панель оператора, МПР-60 или другое устройство).&lt;br /&gt;
&lt;br /&gt;
Для использования в проекте доступны несколько типов станций. например:&lt;br /&gt;
&lt;br /&gt;
* '''Станция''' - общий тип станции. Проекты с такой станцией могут выполняться на большинстве устройств - контроллеры, панели, персональные компьютеры. Чаще всего используется для проектов, предназначенных для выполнения на персональном компьютере.&lt;br /&gt;
* '''Панель ПО-40''' - специализированный тип для проектов на панелях оператора ПО-40. Станция такого типа по отношению к общему дополнительно предоставляет возможность управления оборудованием панели оператора (светодиоды индикации и др.), использования корзины субмодулей.&lt;br /&gt;
* '''Панель ПО-50''' - специализированный тип для проектов на панелях оператора ПО-50. Станция такого типа по отношению к общему дополнительно предоставляет возможность управления оборудованием панели оператора (светодиоды индикации и др.).&lt;br /&gt;
* '''Контроллер МПР-60''' - специализированный тип для проектов на программируемых реле МПР-60. Станция такого типа по отношению к общему дополнительно предоставляет возможность управления оборудованием панели оператора (светодиоды индикации и др.), использования корзины субмодулей.&lt;br /&gt;
&lt;br /&gt;
При построении больших проектов станций в проекте может быть несколько, и они могут выполнять разные задачи. Например, станция-сервер выполняет сбор и регистрацию данных, клиентские станции выполняют визуализацию данных на рабочих местах и т. д.&lt;br /&gt;
&lt;br /&gt;
Станции подчиняются узлы типа &amp;quot;Система&amp;quot; - Транспортная система, Система архивирования, Система визуализации и т. д.&lt;br /&gt;
&lt;br /&gt;
== Транспортная система ==&lt;br /&gt;
Транспортная система управляет передачей данных по различным каналам связи. Система управляет работой &amp;quot;Транспортов&amp;quot; - узлов, выполняющих обмен данными с устройствами по определенному протоколу.&lt;br /&gt;
&lt;br /&gt;
С одной стороны, транспортная система обращается непосредственно к сигналам и каналам устройства, а с другой стороны, представляет их в виде неких универсальных единиц – узлов-источников. Каждый источник однозначно соответствует определенному сигналу или параметру устройства.  При изменении сигнала меняется и значение источника.  При записи данных в источник производится подача команды устройству на установку определенного значения конкретного параметра.&lt;br /&gt;
&lt;br /&gt;
Транспортная система допускает использование нескольких транспортов, что дает возможность одновременного обмена данными с большим количеством устройств по разным протоколам.&lt;br /&gt;
&lt;br /&gt;
=== Транспорт ===&lt;br /&gt;
Транспорт предназначен для обмена данными с устройствами по определенному протоколу. Один транспорт, в зависимости от типа, позволяет обмениваться данными с одним или несколькими устройствами.&lt;br /&gt;
&lt;br /&gt;
Доступны для использования следующие виды транспортов:&lt;br /&gt;
&lt;br /&gt;
* Транспорт Modbus-TCP;&lt;br /&gt;
* Транспорт Modbus-RTU;&lt;br /&gt;
* Транспорт SNMP;&lt;br /&gt;
* Транспорт OPC UA;&lt;br /&gt;
* Транспорт OPC DA (только для Windows);&lt;br /&gt;
* Транспорт MQTT;&lt;br /&gt;
* Последовательный транспорт (устаревший);&lt;br /&gt;
* TCP/IP транспорт (устаревший).&lt;br /&gt;
Подробное описание транспортов приведено в отдельном документе &amp;quot;[[Транспорты AgavaSCADA/AgavaPLC]]&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
==Система визуализации==&lt;br /&gt;
{{Внимание|Тип=Восклицание желтый.png|Текст=Система визуализации недоступна в проектах для контроллеров МПР}}&lt;br /&gt;
 &lt;br /&gt;
Задачей этой системы является отображение данных в виде набора мнемонических схем (экранов, мнемосхем), а также предоставление пользователю возможности управления. &lt;br /&gt;
&lt;br /&gt;
Каждый экран позволяет в схематичном, понятном пользователю виде представить участок технологической схемы с отображением необходимых параметров технологического процесса.&lt;br /&gt;
&lt;br /&gt;
Изображение на экране строится с помощью окон, на которых размещаются объекты визуализации – виджеты. Виджетами могут быть текстовые метки, изображения, в том числе анимированные, элементы управления, графики и т. д. Виджеты можно объединять в слои для удобного управления отображением виджетов.&lt;br /&gt;
&lt;br /&gt;
Виджеты могут быть статическими и динамическими.  Динамические виджеты привязаны к одному или нескольким сигналам и их отображение зависит от значений этих сигналов. Статические виджеты не имеют привязки к сигналам и их изображение всегда постоянно.&lt;br /&gt;
&lt;br /&gt;
Для перехода по экранам, изменения значений параметров и иного управления служат специальные виджеты: кнопки управления, поля ввода и другие.&lt;br /&gt;
&lt;br /&gt;
Для повышения быстродействия и увеличения комфортности работы с системой система визуализации хранит в памяти кэш из нескольких последних открытых экранов. Когда при последовательном открытии экранов этот кэш заполняется, наиболее старые экраны удаляются из него.  Это связано с тем, что, как правило, в работе используются несколько одних и тех же экранов, которые отображают сводную информацию о техпроцессе и оператор в штатном режиме переключается только между ними. Сохраняя их в памяти, система ускоряет переключение между ними, поскольку при этом не требуется каждый раз создавать экран, все находящиеся на нем объекты и запускать процессы обновления параметров.&lt;br /&gt;
&lt;br /&gt;
Когда экран переходит в кэш, обновление параметров на нем прекращается для снижения нагрузки на центральный процессор. Если все же необходимо, чтобы экран всегда производил обновление данных (по разным причинам), даже находясь в кэше, необходимо в его настройках включить опцию «Постоянно обновляемый».&lt;br /&gt;
&lt;br /&gt;
Подчиненные типы узлов:&lt;br /&gt;
&lt;br /&gt;
*фрейм;&lt;br /&gt;
*окно;&lt;br /&gt;
*композиция.&lt;br /&gt;
&lt;br /&gt;
===Фрейм===&lt;br /&gt;
[[Файл:AgavaPLC–Пример структуры сложного фрейма, состоящего из двух форм и одного окна с многослойной композицией.png|мини|Рисунок 23 – Пример структуры сложного фрейма, состоящего из двух форм и одного окна с многослойной композицией]]&lt;br /&gt;
Фрейм – узел, предназначенный для группировки окон, отображаемых на определенном дисплее. Обеспечивает организацию окон в пространстве экрана, управление мониторами и границами отображения. &lt;br /&gt;
&lt;br /&gt;
Если необходимо отобразить информацию на нескольких дисплеях одновременно, то для каждого из них нужно использовать отдельный фрейм. Окон во фрейме может быть несколько, однако они не могут накладываться друг на друга.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Наименование свойства&lt;br /&gt;
!Идентификатор&lt;br /&gt;
!Тип&lt;br /&gt;
!Описание&lt;br /&gt;
!Допустимые значения&lt;br /&gt;
|-&lt;br /&gt;
|Позиция X&lt;br /&gt;
|XCoord&lt;br /&gt;
|int&lt;br /&gt;
|Координата X левого верхнего угла фрейма&lt;br /&gt;
|Целое число&lt;br /&gt;
|-&lt;br /&gt;
|Позиция Y&lt;br /&gt;
|YCoord&lt;br /&gt;
|int&lt;br /&gt;
|Координата Y левого верхнего угла фрейма&lt;br /&gt;
|Целое число&lt;br /&gt;
|-&lt;br /&gt;
|Ширина&lt;br /&gt;
|XSize&lt;br /&gt;
|int&lt;br /&gt;
|Ширина фрейма в пикселях&lt;br /&gt;
|Целое число &amp;gt; 0&lt;br /&gt;
|-&lt;br /&gt;
|Высота&lt;br /&gt;
|YSize&lt;br /&gt;
|int&lt;br /&gt;
|Высота фрейма в пикселях&lt;br /&gt;
|Целое число &amp;gt; 0&lt;br /&gt;
|-&lt;br /&gt;
|Окна&lt;br /&gt;
|Windows&lt;br /&gt;
|NodesArray&lt;br /&gt;
|Список окон, принадлежащих фрейму&lt;br /&gt;
|Узлы типа: Window&lt;br /&gt;
|-&lt;br /&gt;
|Номер монитора&lt;br /&gt;
|DisplayNo&lt;br /&gt;
|int&lt;br /&gt;
|Номер монитора для отображения фрейма&lt;br /&gt;
|0 - по умолчанию&lt;br /&gt;
≥1 - конкретные мониторы&lt;br /&gt;
|-&lt;br /&gt;
|Тип границы&lt;br /&gt;
|BorderType&lt;br /&gt;
|enum&lt;br /&gt;
|Тип границы фрейма&lt;br /&gt;
|0: Не определен (ошибка)&lt;br /&gt;
1: Отсутствует&lt;br /&gt;
&lt;br /&gt;
2: Фиксированная&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== Позиция и размеры (XCoord, YCoord, XSize, YSize) ====&lt;br /&gt;
&lt;br /&gt;
* '''Тип:''' int.&lt;br /&gt;
* '''Описание:''' Определяют положение и размеры фрейма на экране.&lt;br /&gt;
* '''Значения по умолчанию:''' (0, 0, 640, 480).&lt;br /&gt;
* '''Применение:''' Задание области экрана, которую занимает фрейм.&lt;br /&gt;
&lt;br /&gt;
==== Окна (Windows) ====&lt;br /&gt;
'''Тип:''' NodesArray.&lt;br /&gt;
&lt;br /&gt;
'''Описание:''' Коллекция окон, которые управляются данным фреймом. Окна могут добавляться только из существующих узлов.&lt;br /&gt;
&lt;br /&gt;
'''Особенности:'''&lt;br /&gt;
&lt;br /&gt;
* Поддерживаются только узлы типа Window.&lt;br /&gt;
&lt;br /&gt;
==== Номер монитора (DisplayNo) ====&lt;br /&gt;
'''Тип:''' int.&lt;br /&gt;
&lt;br /&gt;
'''Описание:''' Определяет, на каком мониторе системы отображается фрейм. Значение 0 соответствует монитору по умолчанию.&lt;br /&gt;
&lt;br /&gt;
'''Использование:'''&lt;br /&gt;
&lt;br /&gt;
* 0 - основной монитор.&lt;br /&gt;
* 1, 2, ... - дополнительные мониторы.&lt;br /&gt;
* Свойство важно для многомониторных конфигураций.&lt;br /&gt;
&lt;br /&gt;
==== Тип границы (BorderType) ====&lt;br /&gt;
'''Тип:''' enum.&lt;br /&gt;
&lt;br /&gt;
'''Описание:''' Определяет тип обрамления фрейма. Влияет на внешний вид и поведение границ.&lt;br /&gt;
&lt;br /&gt;
'''Значения:'''&lt;br /&gt;
&lt;br /&gt;
* '''Отсутствует''' - фрейм без видимых границ.&lt;br /&gt;
* '''Фиксированная''' - стандартная граница окна.&lt;br /&gt;
* '''Не определен''' - используется только для обработки ошибок.&lt;br /&gt;
&lt;br /&gt;
==== Наследование привилегий ====&lt;br /&gt;
Фрейм автоматически добавляет доступные привилегии для работы с окнами:&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;OpenWindow&amp;lt;/code&amp;gt; - привилегия на открытие окон.&lt;br /&gt;
* &amp;lt;code&amp;gt;CloseWindow&amp;lt;/code&amp;gt; - привилегия на закрытие окон.&lt;br /&gt;
&lt;br /&gt;
===Окна===&lt;br /&gt;
Окно – узел, осуществляющий отображение видеокадра (мнемонической схемы).&lt;br /&gt;
&lt;br /&gt;
Существуют несколько видов окон:&lt;br /&gt;
&lt;br /&gt;
1. «Форма», предназначенная для вывода простого набора данных без необходимости управления видимостью или внешним видом его элементов. Для вывода информации в такое окно кроме создания окна и добавления к нему виджетов ничего более не требуется.&lt;br /&gt;
[[Файл:AgavaPLC-Меню.png|мини|164x164пкс|Рисунок 24 — Внешний вид меню в среде исполнения]]&lt;br /&gt;
2. «Окно с композицией», предназначенное для вывода большого количества информации и позволяющее организовать группировку элементов по слоям, управлять внешним видом элементов, видимостью слоев и отдельных элементов, а также дающее возможность регулирования работы пользователя с элементами. Для вывода информации в такое окно нужно к окну привязать композицию, содержащую минимум один слой, в который уже добавляются виджеты.&lt;br /&gt;
&lt;br /&gt;
=== Форма ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Наименование свойства&lt;br /&gt;
!Идентификатор&lt;br /&gt;
!Тип&lt;br /&gt;
!Описание&lt;br /&gt;
!Допустимые значения&lt;br /&gt;
!Режим доступа&lt;br /&gt;
|-&lt;br /&gt;
|Модальность&lt;br /&gt;
|Modality&lt;br /&gt;
|enum&lt;br /&gt;
|Режим модальности окна&lt;br /&gt;
|0: Не определен (ошибка)&lt;br /&gt;
1: Немодальное&lt;br /&gt;
&lt;br /&gt;
2: Модальное (Фрейм)&lt;br /&gt;
&lt;br /&gt;
3: Модальное (Система)&lt;br /&gt;
|Чтение/Запись&lt;br /&gt;
|-&lt;br /&gt;
|Тип границы&lt;br /&gt;
|BorderType&lt;br /&gt;
|enum&lt;br /&gt;
|Тип границы окна&lt;br /&gt;
|0: Не определен (ошибка)&lt;br /&gt;
1: Фиксированная&lt;br /&gt;
&lt;br /&gt;
2: Изменяемая&lt;br /&gt;
&lt;br /&gt;
3: Отсутствует&lt;br /&gt;
|Чтение/Запись&lt;br /&gt;
|-&lt;br /&gt;
|Отображать строку заголовка&lt;br /&gt;
|TitleEnabled&lt;br /&gt;
|bool&lt;br /&gt;
|Отображать строку заголовка&lt;br /&gt;
|true/false&lt;br /&gt;
|Чтение/Запись&lt;br /&gt;
|-&lt;br /&gt;
|Отображать кнопку &amp;quot;Закрыть&amp;quot;&lt;br /&gt;
|CloseEnabled&lt;br /&gt;
|bool&lt;br /&gt;
|Отображать кнопку &amp;quot;Закрыть&amp;quot;&lt;br /&gt;
|true/false&lt;br /&gt;
|Чтение/Запись&lt;br /&gt;
|-&lt;br /&gt;
|Цвет фона&lt;br /&gt;
|BackgroundColor&lt;br /&gt;
|NColor&lt;br /&gt;
|Цвет фона окна&lt;br /&gt;
|Цвет в формате RGBA&lt;br /&gt;
|Чтение/Запись&lt;br /&gt;
|-&lt;br /&gt;
|Затемнение&lt;br /&gt;
|NeedDarkenApplication&lt;br /&gt;
|bool&lt;br /&gt;
|Затемнение других окон приложения при открытии этого окна&lt;br /&gt;
|true/false&lt;br /&gt;
|Чтение/Запись&lt;br /&gt;
|-&lt;br /&gt;
|Цвет затемнения&lt;br /&gt;
|ColorDarkenApplication&lt;br /&gt;
|NColor&lt;br /&gt;
|Цвет затемнения&lt;br /&gt;
|Цвет в формате RGBA&lt;br /&gt;
|Чтение/Запись&lt;br /&gt;
|-&lt;br /&gt;
|Интервал обновления&lt;br /&gt;
|UpdateInterval&lt;br /&gt;
|int&lt;br /&gt;
|Интервал обновления виджетов, мс&lt;br /&gt;
|0 - без задержки&lt;br /&gt;
&amp;gt;0 - интервал в мс&lt;br /&gt;
|Чтение/Запись&lt;br /&gt;
|-&lt;br /&gt;
|Действия OnShow&lt;br /&gt;
|ActionsOnShow&lt;br /&gt;
|NodesContainer&lt;br /&gt;
|Действия при показе окна&lt;br /&gt;
|Узлы типа: Action&lt;br /&gt;
|Чтение/Запись&lt;br /&gt;
|-&lt;br /&gt;
|Действия OnClose&lt;br /&gt;
|ActionsOnClose&lt;br /&gt;
|NodesContainer&lt;br /&gt;
|Действия при закрытии окна&lt;br /&gt;
|Узлы типа: Action&lt;br /&gt;
|Чтение/Запись&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== Модальность (Modality) ====&lt;br /&gt;
'''Тип:''' enum.&lt;br /&gt;
&lt;br /&gt;
'''Описание:''' Определяет поведение окна относительно других окон приложения.&lt;br /&gt;
&lt;br /&gt;
'''Значения:'''&lt;br /&gt;
&lt;br /&gt;
* '''Немодальное''' - позволяет взаимодействовать с другими окнами.&lt;br /&gt;
* '''Модальное (Фрейм)''' - блокирует взаимодействие с окнами в том же фрейме.&lt;br /&gt;
* '''Модальное (Система)''' - блокирует все окна приложения.&lt;br /&gt;
&lt;br /&gt;
==== Тип границы (BorderType) ====&lt;br /&gt;
'''Тип:''' enum.&lt;br /&gt;
&lt;br /&gt;
'''Описание:''' Определяет тип и поведение границ окна.&lt;br /&gt;
&lt;br /&gt;
'''Значения:'''&lt;br /&gt;
&lt;br /&gt;
* '''Фиксированная''' - окно нельзя изменять размер.&lt;br /&gt;
* '''Изменяемая''' - пользователь может изменять размер окна.&lt;br /&gt;
* '''Отсутствует''' - окно без видимых границ.&lt;br /&gt;
&lt;br /&gt;
==== Управление заголовком (TitleEnabled, CloseEnabled) ====&lt;br /&gt;
'''Тип:''' bool.&lt;br /&gt;
&lt;br /&gt;
'''Описание:''' Контролируют отображение элементов заголовка окна.&lt;br /&gt;
&lt;br /&gt;
==== Фон и затемнение (BackgroundColor, NeedDarkenApplication, ColorDarkenApplication) ====&lt;br /&gt;
'''Тип:''' NColor, bool, NColor.&lt;br /&gt;
&lt;br /&gt;
'''Описание:''' Управляют визуальным оформлением окна и его влиянием на другие окна.&lt;br /&gt;
&lt;br /&gt;
'''Особенности:'''&lt;br /&gt;
&lt;br /&gt;
* Затемнение применяется только при NeedDarkenApplication = true.&lt;br /&gt;
* Цвет затемнения по умолчанию: черный с прозрачностью 50%.&lt;br /&gt;
&lt;br /&gt;
==== Интервал обновления (UpdateInterval) ====&lt;br /&gt;
'''Тип:''' int.&lt;br /&gt;
&lt;br /&gt;
'''Описание:''' Определяет частоту обновления виджетов в окне.&lt;br /&gt;
&lt;br /&gt;
'''Рекомендации:'''&lt;br /&gt;
&lt;br /&gt;
* 0 - 100 мс для композиций с критичным временем отклика.&lt;br /&gt;
* 100 - 500 мс хорошо подходит для большинства случаев.&lt;br /&gt;
* более 1000 мс - для статических или редко меняющихся данных.&lt;br /&gt;
&lt;br /&gt;
==== Обработчики событий (ActionsOnShow, ActionsOnClose) ====&lt;br /&gt;
'''Тип:''' NodesContainer.&lt;br /&gt;
&lt;br /&gt;
'''Описание:''' Коллекции действий, выполняемых при показе и закрытии окна.&lt;br /&gt;
&lt;br /&gt;
=== Окно с композицией ===&lt;br /&gt;
Данный узел имеет те же свойства, что и форма, а также собственные:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Наименование свойства&lt;br /&gt;
!Идентификатор&lt;br /&gt;
!Тип&lt;br /&gt;
!Описание&lt;br /&gt;
!Допустимые значения&lt;br /&gt;
!Режим доступа&lt;br /&gt;
|-&lt;br /&gt;
|Композиция&lt;br /&gt;
|CompositionId&lt;br /&gt;
|NodeLink&lt;br /&gt;
|Основная композиция окна&lt;br /&gt;
|Узлы типа: CompositionLayered, CompositionTemplated&lt;br /&gt;
|Чтение/Запись&lt;br /&gt;
|-&lt;br /&gt;
|Описание текущей композиции&lt;br /&gt;
|CurrentCompositionDesc&lt;br /&gt;
|string&lt;br /&gt;
|Описание текущей загруженной композиции&lt;br /&gt;
|Автоматически формируется&lt;br /&gt;
|Только чтение&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== Композиция (CompositionId) ====&lt;br /&gt;
'''Тип:''' NodeLink.&lt;br /&gt;
&lt;br /&gt;
'''Описание:''' Ссылка на композицию, отображаемую в окне.&lt;br /&gt;
&lt;br /&gt;
'''Поддерживаемые типы:''' CompositionLayered, CompositionTemplated.&lt;br /&gt;
&lt;br /&gt;
==== Описание текущей композиции (CurrentCompositionDesc) ====&lt;br /&gt;
'''Тип:''' string.&lt;br /&gt;
&lt;br /&gt;
'''Описание:''' Автоматически обновляемое описание загруженной композиции.&lt;br /&gt;
&lt;br /&gt;
'''Особенности:''' Свойство только для чтения, обновляется системой автоматически.[[Файл:AgavaPLC-Настройка меню в среде разработки.png|мини|226x226пкс|Рисунок 25 — Настройка меню в среде разработки]]&lt;br /&gt;
&lt;br /&gt;
===Композиция===&lt;br /&gt;
Композиция – узел, представляющий составленную при разработке проекта мнемоническую схему в виде набора элементов визуализации (виджетов), сгруппированных в один или несколько слоев.&lt;br /&gt;
&lt;br /&gt;
Композиция дает возможность организовать виджеты в слои, видимостью которых можно управлять во время работы проекта.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Наименование свойства&lt;br /&gt;
!Идентификатор&lt;br /&gt;
!Тип&lt;br /&gt;
!Описание&lt;br /&gt;
!Допустимые значения&lt;br /&gt;
!Режим доступа&lt;br /&gt;
|-&lt;br /&gt;
|Размеры&lt;br /&gt;
|Size&lt;br /&gt;
|NSize&lt;br /&gt;
|Размеры композиции&lt;br /&gt;
|Структура {ширина, высота}&lt;br /&gt;
|Чтение/Запись&lt;br /&gt;
|-&lt;br /&gt;
|Кэширование&lt;br /&gt;
|Cacheable&lt;br /&gt;
|bool&lt;br /&gt;
|Кэширование данных композиции для быстрого повторного открытия&lt;br /&gt;
|true/false&lt;br /&gt;
|Чтение/Запись&lt;br /&gt;
|-&lt;br /&gt;
|Источник интервала обновления&lt;br /&gt;
|UpdateIntervalSource&lt;br /&gt;
|enum&lt;br /&gt;
|Определяет источник интервала обновления виджетов&lt;br /&gt;
|0: Окно&lt;br /&gt;
1: Композиция&lt;br /&gt;
|Чтение/Запись&lt;br /&gt;
|-&lt;br /&gt;
|Интервал обновления&lt;br /&gt;
|UpdateInterval&lt;br /&gt;
|int&lt;br /&gt;
|Интервал обновления виджетов в миллисекундах&lt;br /&gt;
|Целое число ≥ 0&lt;br /&gt;
|Чтение/Запись&lt;br /&gt;
|-&lt;br /&gt;
|Действия OnLoad&lt;br /&gt;
|ActionsOnLoad&lt;br /&gt;
|NodesContainer&lt;br /&gt;
|Действия при загрузке композиции&lt;br /&gt;
|Узлы типа: Action&lt;br /&gt;
|Чтение/Запись&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== Размеры (Size) ====&lt;br /&gt;
'''Тип:''' NSize (ширина, высота).&lt;br /&gt;
&lt;br /&gt;
'''Описание:''' Определяет размеры композиции в пикселях. По умолчанию установлены значения 800x600.&lt;br /&gt;
&lt;br /&gt;
==== Кэширование (Cacheable) ====&lt;br /&gt;
'''Тип:''' bool.&lt;br /&gt;
&lt;br /&gt;
'''Описание:''' Включает или отключает кэширование данных композиции. При включенном кэшировании композиция сохраняется в памяти для быстрого повторного открытия.&lt;br /&gt;
&lt;br /&gt;
'''Преимущества кэширования:'''&lt;br /&gt;
&lt;br /&gt;
* Быстрое переключение между композициями.&lt;br /&gt;
* Снижение нагрузки на систему при частом использовании.&lt;br /&gt;
* Сохранение состояния элементов.&lt;br /&gt;
&lt;br /&gt;
'''Рекомендации:''' Включать для часто используемых композиций, отключать для редко используемых или ресурсоемких.&lt;br /&gt;
&lt;br /&gt;
==== Источник интервала обновления (UpdateIntervalSource) ====&lt;br /&gt;
'''Тип:''' enum.&lt;br /&gt;
&lt;br /&gt;
'''Описание:''' Определяет, откуда виджеты композиции получают интервал обновления.&lt;br /&gt;
&lt;br /&gt;
'''Значения:'''&lt;br /&gt;
&lt;br /&gt;
* '''Окно''' - интервал обновления наследуется от родительского окна.&lt;br /&gt;
* '''Композиция''' - используется собственный интервал обновления композиции.&lt;br /&gt;
&lt;br /&gt;
'''Применение:''' Централизованное управление производительностью через окно или индивидуальная настройка для каждой композиции.&lt;br /&gt;
&lt;br /&gt;
==== Интервал обновления (UpdateInterval) ====&lt;br /&gt;
'''Тип:''' int.&lt;br /&gt;
&lt;br /&gt;
'''Описание:''' Задает интервал обновления виджетов в миллисекундах. При значении 0 отрисовка виджетов выполняется без задержки (максимальная частота).&lt;br /&gt;
&lt;br /&gt;
'''Особенности:'''&lt;br /&gt;
&lt;br /&gt;
* 0 - обновление без задержек (может создать высокую нагрузку).&lt;br /&gt;
* &amp;gt; 0 - обновление с заданным интервалом.   Учитывается только при UpdateIntervalSource = &amp;quot;Композиция&amp;quot;&lt;br /&gt;
&lt;br /&gt;
'''Рекомендации:'''&lt;br /&gt;
&lt;br /&gt;
* 0 - 100 мс для композиций с критичным временем отклика.&lt;br /&gt;
* 100 - 500 мс хорошо подходит для большинства случаев.&lt;br /&gt;
* более 1000 мс - для статических или редко меняющихся данных.&lt;br /&gt;
&lt;br /&gt;
==== Обработчик событий ActionsOnLoad ====&lt;br /&gt;
'''Тип:''' NodesContainer.&lt;br /&gt;
&lt;br /&gt;
'''Описание:''' Коллекции действий, выполняемых после загрузки композиции &amp;lt;code&amp;gt;AS 1.6.27+&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
===Слой===&lt;br /&gt;
Слой – набор виджетов, объединенных каким-то общим структурным признаком. В многослойных композициях слой обеспечивает организацию виджетов в z-порядке, управление видимостью и взаимодействием с пользователем. С помошью свойства &amp;quot;Видимость&amp;quot; слоя можно управлять видимостью виджетов, размещенных на слое.&lt;br /&gt;
&lt;br /&gt;
Свойства&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Наименование свойства&lt;br /&gt;
!Идентификатор&lt;br /&gt;
!Тип&lt;br /&gt;
!Описание&lt;br /&gt;
!Допустимые значения&lt;br /&gt;
!Режим доступа&lt;br /&gt;
|-&lt;br /&gt;
|Z-Порядок&lt;br /&gt;
|ZOrder&lt;br /&gt;
|int&lt;br /&gt;
|Порядок слоя в композиции&lt;br /&gt;
|Целое число (чем выше значение, тем выше слой)&lt;br /&gt;
|Чтение/Запись&lt;br /&gt;
|-&lt;br /&gt;
|Прозрачность для действий&lt;br /&gt;
|ActionTransparency&lt;br /&gt;
|enum&lt;br /&gt;
|Определяет поведение слоя при взаимодействии с пользователем&lt;br /&gt;
|0: Не определен (ошибка)&lt;br /&gt;
1: Непрозрачный&lt;br /&gt;
&lt;br /&gt;
2: Прозрачный&lt;br /&gt;
|Чтение/Запись&lt;br /&gt;
|-&lt;br /&gt;
|Видимость&lt;br /&gt;
|Visible&lt;br /&gt;
|bool&lt;br /&gt;
|Видимость слоя и всех его виджетов&lt;br /&gt;
|true/false&lt;br /&gt;
|Чтение/Запись&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== Z-Порядок (ZOrder) ====&lt;br /&gt;
'''Тип:''' int&lt;br /&gt;
&lt;br /&gt;
'''Описание:''' Определяет порядок отображения слоя относительно других слоев в композиции. Слои с большим значением ZOrder отображаются поверх слоев с меньшим значением.&lt;br /&gt;
&lt;br /&gt;
'''Пример использования:'''&lt;br /&gt;
&lt;br /&gt;
* Фоновый слой: ZOrder = 1.&lt;br /&gt;
* Основной контент: ZOrder = 2.&lt;br /&gt;
* Контекстные виджеты: ZOrder = 3.&lt;br /&gt;
&lt;br /&gt;
==== Прозрачность для действий (ActionTransparency) ====&lt;br /&gt;
'''Тип:''' enum&lt;br /&gt;
&lt;br /&gt;
'''Описание:''' Управляет взаимодействием слоя с пользовательскими действиями (клики, наведения и т.д.)&lt;br /&gt;
&lt;br /&gt;
'''Значения:'''&lt;br /&gt;
&lt;br /&gt;
* '''Непрозрачный''' - слой полностью перехватывает пользовательские действия, элементы под ним недоступны, даже если они видимы.&lt;br /&gt;
* '''Прозрачный''' - пользовательские действия проходят сквозь слой к элементам ниже.&lt;br /&gt;
&lt;br /&gt;
Обратите внимание: если на слое размещается изображение с прозрачной областью, то такие виджеты не позволяют пользователю взаимодействовать с видимыми и размещенными под ним виджетами.&lt;br /&gt;
&lt;br /&gt;
==== Видимость (Visible) ====&lt;br /&gt;
'''Тип:''' bool&lt;br /&gt;
&lt;br /&gt;
'''Описание:''' Определяет видимость всего слоя и всех его дочерних виджетов. При значении false слой и все его содержимое становится невидимым.&lt;br /&gt;
&lt;br /&gt;
'''Применение:''' Временное скрытие виджетов или переключение их видимости.&lt;br /&gt;
&lt;br /&gt;
===Виджет===&lt;br /&gt;
Виджет – элемент визуализации, предназначенный для отображения информации в заданном виде.&lt;br /&gt;
&lt;br /&gt;
===Меню===&lt;br /&gt;
Меню – элемент визуализации, сочетающий в себе несколько виджетов «Кнопка». Используется для более удобного управления проектом (см. Рисунок 24).&lt;br /&gt;
&lt;br /&gt;
Для добавления меню, необходимо в среде разработки назначить [[Универсальная среда разработки#.D0.94.D0.B5.D0.B9.D1.81.D1.82.D0.B2.D0.B8.D0.B5 .C2.AB.D0.9E.D1.82.D0.BE.D0.B1.D1.80.D0.B0.D0.B6.D0.B5.D0.BD.D0.B8.D0.B5 .D0.BC.D0.B5.D0.BD.D1.8E.C2.BB|действие «Отображение меню»]] для кнопки (или любого другого виджета). После добавления действия необходимо выделить его и нажать на кнопку настроек на панели вверху окна действий. Открывшееся окно (см. Рисунок 25) содержит дерево со структурой меню, в который можно добавлять элементы двух типов:&lt;br /&gt;
&lt;br /&gt;
*меню – элемент, который позволяет группировать элементы меню, выводя их в виде раскрывающегося списка. На рисунках 24 и 25 этим элементом являются кнопки «Арочник» и «БПО».&lt;br /&gt;
*элемент меню – элемент, который предоставляет функционал, аналогичный [[Универсальная среда разработки#.D0.92.D0.B8.D0.B4.D0.B6.D0.B5.D1.82 .C2.AB.D0.9A.D0.BD.D0.BE.D0.BF.D0.BA.D0.B0.C2.BB|виджету «Кнопка»]]. Для добавления действия, выполняющегося при нажатии на элемент меню в среде исполнения, необходимо нажать на него ПКМ в дереве структуры меню и выбрать &amp;quot;Создать действие&amp;quot;. На рисунках 24 и 25 этим элементом являются кнопки «Котельная», «Котёл №1», «Котёл №2» и «Котёл №3».&lt;br /&gt;
&lt;br /&gt;
=== Создание многомониторных систем визуализации ===&lt;br /&gt;
AgavaSCADA предоставляет возможность реализации систем визуализации в составе проектов, использующих для отображения информации более одного дисплея.&lt;br /&gt;
&lt;br /&gt;
Для вывода информации в окнах на нескольких дисплеях в проект необходимо внести следующие корректировки относительно проекта, использующего только один дисплей:&lt;br /&gt;
&lt;br /&gt;
# Добавить дополнительные фреймы, чтобы их количество в проекте соответствовало количеству дисплеев. Каждому фрейму назначить порядковый номер, начиная с 1. Фреймы связываются с дисплеями по номеру.&lt;br /&gt;
# Добавить дополнительное окно (или окна, если в исходном фрейме их несколько или дополнительных фреймов больше одного).&lt;br /&gt;
# Добавить в дополнительные фреймы созданные на этапе 2 окна, чтобы повторить структуру основоного фрейма.&lt;br /&gt;
&lt;br /&gt;
Базовая настройка на этом закончена. После запуска такого проекта на двух или более дисплеях должны отображаться созданные окна.&lt;br /&gt;
&lt;br /&gt;
Если в проекте используется навигация по окнам, то необходимо в каждом окне, включенном в фрейм, скорректировать действия, размещаемые на кнопках, меню или друигх виджетах таким образом, чтобы действия открывали окна или загружали композиции в нужном окне.&lt;br /&gt;
&lt;br /&gt;
===Виджеты===&lt;br /&gt;
====Виджет «Текстовая метка»====&lt;br /&gt;
[[Файл:AgavaPLC–Примеры оформления виджетов типа &amp;quot;Текстовая метка&amp;quot;.png|мини|Рисунок 26 – Примеры оформления виджетов типа &amp;quot;Текстовая метка&amp;quot;]]&lt;br /&gt;
Виджет «Текстовая метка» – наиболее часто применяемый виджет, с помощью которого можно реализовать разные способы отображения текстовой информации.&lt;br /&gt;
&lt;br /&gt;
Виджет «Текстовая метка» может использоваться для отображения статичного текста, значений параметров (одного или нескольких) и их комбинаций.&lt;br /&gt;
&lt;br /&gt;
При необходимости отображения значений параметров они указываются в свойстве «Источник». Для задания определенного формата отображения используются спецификаторы формата в стиле языка «Си»:&lt;br /&gt;
&lt;br /&gt;
*%f – значение в виде числа с плавающей точкой;&lt;br /&gt;
* %s – строка;&lt;br /&gt;
*%i – целое число со знаком;&lt;br /&gt;
*%u – целое число без знака;&lt;br /&gt;
* %d – целое число со знаком в десятичной системе исчисления.&lt;br /&gt;
&lt;br /&gt;
Для разных типов свойств необходимо использовать строго определенные для них спецификаторы, с другими спецификаторами значения выводиться не будут.&lt;br /&gt;
&lt;br /&gt;
Для отображения знака «%» необходимо указать его дважды: «%%».&lt;br /&gt;
&lt;br /&gt;
===== Отображение нескольких значений =====&lt;br /&gt;
Одна текстовая метка может использоваться для отображения нескольких значений. Для этого все значения, которые нужно отобразить, указываются в свойстве «Источник», а в свойстве «Текст» указываются последовательно несколько спецификаторов формата соответственно порядку перечисления значений в свойстве «Источник».&lt;br /&gt;
&lt;br /&gt;
Пример: текстовая метка, отображающая текущую позицию в очереди:&lt;br /&gt;
&lt;br /&gt;
* Текст: &amp;lt;code&amp;gt;Позиция %i из %i&amp;lt;/code&amp;gt;&lt;br /&gt;
* Источник: два узла из проекта.&lt;br /&gt;
&lt;br /&gt;
=====Модификаторы спецификаторов формата=====&lt;br /&gt;
&lt;br /&gt;
======Модификатор минимальной ширины поля======&lt;br /&gt;
Целое число, расположенное между знаком % и кодом формата, играет роль модификатора минимальной ширины поля. Если указан модификатор минимальной ширины поля, то, чтобы ширина поля вывода была не меньше указанной минимальной величины, вывод при необходимости будет дополнен пробелами. Если же выводятся строки или числа, которые длиннее указанного минимума, то они все равно будут отображаться полностью. По умолчанию для дополнения используются пробелы. А если для этого надо использовать нули, то перед модификатором ширины поля следует поместить 0. Например, %05i означает, что любое число, количество цифр которого меньше пяти, будет дополнено таким количеством нулей, чтобы состоять из пяти цифр.&lt;br /&gt;
&lt;br /&gt;
Примеры&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Значение&lt;br /&gt;
!Спецификатор формата&lt;br /&gt;
!Выводимое значение&lt;br /&gt;
|-&lt;br /&gt;
|10.123&lt;br /&gt;
|%i&lt;br /&gt;
|10&lt;br /&gt;
|-&lt;br /&gt;
|10.123&lt;br /&gt;
|%d&lt;br /&gt;
|10&lt;br /&gt;
|-&lt;br /&gt;
|10.123&lt;br /&gt;
|%05i&lt;br /&gt;
|00010&lt;br /&gt;
|-&lt;br /&gt;
|10.123&lt;br /&gt;
|%f&lt;br /&gt;
|10.123000&lt;br /&gt;
|-&lt;br /&gt;
|10.123&lt;br /&gt;
|%.1f&lt;br /&gt;
| 10.1&lt;br /&gt;
|-&lt;br /&gt;
|10.123&lt;br /&gt;
|%10f&lt;br /&gt;
|&amp;lt;пробел&amp;gt;10.123000&lt;br /&gt;
|-&lt;br /&gt;
|10.123&lt;br /&gt;
|%012f&lt;br /&gt;
|00010.123000&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
======Модификатор точности======&lt;br /&gt;
Модификатор точности следует за модификатором минимальной ширины поля (если таковой имеется). Он состоит из точки и расположенного за ней целого числа. Значение этого модификатора зависит от типа данных, к которым его применяют.&lt;br /&gt;
&lt;br /&gt;
Когда модификатор точности применяется к данным с плавающей точкой, для преобразования которых используются спецификаторы преобразования %f, %e или %E, то он определяет количество выводимых десятичных разрядов. Например, %10.4f означает, что ширина поля вывода будет не менее 10 символов, причем для десятичных разрядов будет отведено четыре позиции.&lt;br /&gt;
&lt;br /&gt;
Если модификатор точности применяется к %g или %G, то он определяет количество значащих цифр.&lt;br /&gt;
&lt;br /&gt;
Примененный к строкам, модификатор точности определяет максимальную длину поля. Например, %5.7s означает, что длина выводимой строки будет составлять минимум пять и максимум семь символов. Если строка окажется длиннее, чем максимальная длина поля, то конечные символы выводиться не будут.&lt;br /&gt;
&lt;br /&gt;
Если модификатор точности применяется к целым типам, то он определяет минимальное количество цифр, которые будут выведены для каждого из чисел. Чтобы получилось требуемое количество цифр, добавляется некоторое количество ведущих нулей.&lt;br /&gt;
&lt;br /&gt;
Примеры:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Значение&lt;br /&gt;
!Спецификатор формата&lt;br /&gt;
!Выводимое значение&lt;br /&gt;
|-&lt;br /&gt;
|10.123&lt;br /&gt;
|%f&lt;br /&gt;
|10.123000&lt;br /&gt;
|-&lt;br /&gt;
|10.123&lt;br /&gt;
|%.1f&lt;br /&gt;
|10.1&lt;br /&gt;
|-&lt;br /&gt;
|10.123&lt;br /&gt;
|%10.4f&lt;br /&gt;
|&amp;lt;пробел&amp;gt;&amp;lt;пробел&amp;gt;&amp;lt;пробел&amp;gt;10.1230&lt;br /&gt;
|-&lt;br /&gt;
|10.123&lt;br /&gt;
|%010.3f&lt;br /&gt;
|000010.123&lt;br /&gt;
|-&lt;br /&gt;
| Это простая проверка&lt;br /&gt;
|%10.15s&lt;br /&gt;
|Это простая про&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
====Виджет «Условная метка» ====&lt;br /&gt;
[[Файл:AgavaPLC–Список сопоставлений виджета &amp;quot;Условная метка&amp;quot;.png|мини|Рисунок 27 – Список сопоставлений виджета &amp;quot;Условная метка&amp;quot;|ссылка=Файл:AgavaPLC–Список_сопоставлений_виджета_%22Условная_метка%22.png]]&lt;br /&gt;
Виджет «Условная метка» позволяет изменять выводимую строку в соответствии с изменениями привязанной к ней переменной.&lt;br /&gt;
&lt;br /&gt;
Задать соответствие текста необходимому условию можно в свойстве «Список сопоставлений».&lt;br /&gt;
&lt;br /&gt;
==== Виджет «Изображение»====&lt;br /&gt;
Виджет «Изображение» предназначен для отображения на окнах статичных изображений форматов png, gif, jpg, bmp или анимированных изображений в формате gif. Отображаемая картинка выбирается в разделе «Оформление» - «Изображение». Она должна находиться в папке проекта.&lt;br /&gt;
&lt;br /&gt;
====Виджет «Условное изображение»====&lt;br /&gt;
[[Файл:AgavaPLC–Список сопоставлений виджета &amp;quot;Условное изображение&amp;quot;.png|мини|Рисунок 28 – Список сопоставлений виджета &amp;quot;Условное изображение&amp;quot;|ссылка=Файл:AgavaPLC–Список_сопоставлений_виджета_%22Условное_изображение%22.png]]&lt;br /&gt;
Виджет «Условное изображение» позволяет изменять отображаемое изображение в соответствии с изменениями привязанной к нему переменной.&lt;br /&gt;
&lt;br /&gt;
Задать соответствие изображения необходимому условию можно в свойстве «Список сопоставлений».&lt;br /&gt;
&lt;br /&gt;
====Виджет «Движущееся изображение»====&lt;br /&gt;
Виджет предназначен для отображения на окнах изображений, перемещающихся в пределах области виджета. В основном используются на экране спящего режима.&lt;br /&gt;
&lt;br /&gt;
Отображаемая картинка выбирается в разделе «Оформление» - «Изображение». Она должна находиться в папке проекта.&lt;br /&gt;
&lt;br /&gt;
====Виджет «Кнопка»====&lt;br /&gt;
Виджет «Кнопка» предназначен для реализации функций управления:&lt;br /&gt;
&lt;br /&gt;
*ввод данных;&lt;br /&gt;
*передача управляющих воздействий;&lt;br /&gt;
* смена режима работы АРМ или иного устройства, исполняющего проект.&lt;br /&gt;
&lt;br /&gt;
Выполнение всех функций виджета обеспечивается с помощью узлов типа «Действие», добавляемых в соответствующее свойство (см. раздел [[#Действия]]).&lt;br /&gt;
&lt;br /&gt;
====Виджет «Гистограмма»====&lt;br /&gt;
[[Файл:AgavaPLC–Виджет &amp;quot;Гистограмма&amp;quot;.png|мини|Рисунок 29 – Виджет &amp;quot;Гистограмма&amp;quot;|ссылка=Файл:AgavaPLC–Виджет_%22Гистограмма%22.png]]&lt;br /&gt;
Виджет предназначен для отображения значений сигналов в виде столбчатой диаграммы.&lt;br /&gt;
&lt;br /&gt;
Виджету необходимо задать источник (регистр/сигнал, с которого он будет получать данные), а также минимальное и максимальное значения.&lt;br /&gt;
&lt;br /&gt;
====Виджет «Исторический график»====&lt;br /&gt;
Виджет «Исторический график» предназначен для отображения графиков параметров на двухкоординатной области изображения с привязкой к осям времени и значений.&lt;br /&gt;
&lt;br /&gt;
Виджет может работать с данными, архивируемыми в БД, и напрямую с сигналами, значения которых вычисляются в ходе работы.  &lt;br /&gt;
&lt;br /&gt;
При работе с архивируемыми данными интервал обновления графика зависит от режима выдачи значения у базы данных: при выборе сохраняемых в БД он будет соответствовать интервалу архивирования, а при сохраненных в БД - интервалу сохранения БД на диск. Независимо от режима выдачи, график не может обновляться меньше чем за 300 мс.&lt;br /&gt;
&lt;br /&gt;
При работе напрямую с сигналами график обновляется при изменении значения сигнала, но также не чаще чем раз в 300 мс.&lt;br /&gt;
[[Файл:AgavaPLC–Экран «Архив» с виджетом «Исторический график».png|мини|Рисунок 30 – Виджет «Исторический график». Области кнопок-пиктограмм. В нижней части отображена легенда]]&lt;br /&gt;
Виджет «Исторический график» состоит из нескольких областей:&lt;br /&gt;
&lt;br /&gt;
*область осей Х, Y;&lt;br /&gt;
*область легенды, содержащей список кривых и их параметры (цвет кривой, наименование кривой, текущее значение, время последнего зарегистрированного значения);&lt;br /&gt;
*область вывода данных.&lt;br /&gt;
&lt;br /&gt;
На виджете имеются несколько областей, содержащих кнопки-пиктограммы управления внешним видом графика (см. Рисунок 28):&lt;br /&gt;
&lt;br /&gt;
#область пиктограмм графика;&lt;br /&gt;
#область пиктограмм оси времени (X);&lt;br /&gt;
#область пиктограмм оси значений (Y);&lt;br /&gt;
#область легенды.&lt;br /&gt;
&lt;br /&gt;
В области пиктограмм графика слева направо расположены следующие кнопки-пиктограммы:&lt;br /&gt;
&lt;br /&gt;
* кнопка переключения режима отображения точек на всех кривых;&lt;br /&gt;
* кнопка переключения видимости легенды;&lt;br /&gt;
*кнопка включения режима визирной линии.&lt;br /&gt;
&lt;br /&gt;
В области пиктограмм оси времени (X) слева направо расположены следующие кнопки-пиктограммы:&lt;br /&gt;
&lt;br /&gt;
*кнопка открытия окна выбора интервала времени для оси Х, текст кнопки отображает текущий выбранный интервал, например: 5М – 5 минут, 6Ч – 6 часов, 30М – 30 минут;&lt;br /&gt;
*кнопка-индикатор включения следящего режима.&lt;br /&gt;
&lt;br /&gt;
В области пиктограмм оси значений (Y) расположена кнопка-пиктограмма «A» – кнопка переключения режима автоматического масштабирования значений.&lt;br /&gt;
&lt;br /&gt;
=====Легенда=====&lt;br /&gt;
[[Файл:AgavaPLC–Легенда с четырьмя выключенными параметрами.png|мини|Рисунок 31 – Легенда с четырьмя выключенными параметрами]]&lt;br /&gt;
Легенда – специальная область в нижней части экрана архива, предназначенная для отображения параметров (наименование, текущее значение и т. д.) выводимых графиков в виде таблицы. Для ознакомления с примерным видом легенды см. Рисунок 31. Информация о каждом сигнале в легенде выводится в несколько колонок:&lt;br /&gt;
&lt;br /&gt;
*«Цвет» – индицирует цвет, которым выводится соответствующая кривая на графике, колонка «Цвет» позволяет нажатием переключать видимость соответствующей кривой на графике (см. Рисунок 29). Также в колонке &amp;quot;Цвет&amp;quot; отображается номер пера, которым выводится кривая параметра на графике;&lt;br /&gt;
* «Имя» («Наименование») – содержит наименование параметра;&lt;br /&gt;
*«Время» – содержит время последнего зарегистрированного значения параметра;&lt;br /&gt;
*«Значение» – содержит последнее зарегистрированное значение параметра.&lt;br /&gt;
&lt;br /&gt;
=====Режимы просмотра графиков=====&lt;br /&gt;
Пользователю доступно два режима просмотра графиков:&lt;br /&gt;
&lt;br /&gt;
*следящий режим;&lt;br /&gt;
*режим просмотра истории.&lt;br /&gt;
&lt;br /&gt;
В следящем режиме на графике всегда отображаются актуальные значения параметров, тренд периодически дочитывает поступившие данные из базы и обновляет графики. &lt;br /&gt;
&lt;br /&gt;
В режиме просмотра истории на графике отображаются исторические значения параметров. Просмотр истории технологического процесса осуществляется с помощью кнопок перемещения по осям и кнопок изменения масштаба.&lt;br /&gt;
&lt;br /&gt;
Режим просмотра истории включается автоматически при прокрутке графика назад по времени.&lt;br /&gt;
&lt;br /&gt;
=====Визирная линия=====&lt;br /&gt;
[[Файл:AgavaPLC–График в режиме просмотра истории с установленной визирной линией.png|мини|Рисунок 32 – График в режиме просмотра истории с установленной визирной линией]]&lt;br /&gt;
Для просмотра значений параметров в нужный момент времени служит визирная линия, отображаемая на графике как вертикальная линия.&lt;br /&gt;
&lt;br /&gt;
При щелчке левой кнопкой мыши (ЛКМ) в области графиков визирная линия будет отображена в выбранном месте графика.&lt;br /&gt;
&lt;br /&gt;
В точке пересечения визирной линии и кривых параметров отображаются значения этих параметров. Также в нижней части области графиков, возле оси времени, визирная линия отображает время.&lt;br /&gt;
&lt;br /&gt;
====Виджет «График кусочно-линейной функции»====&lt;br /&gt;
Виджет предназначен для отображения графика зависимости двух параметров, расположенном на осях X и Y.&lt;br /&gt;
[[Файл:AgavaPLC–Виджет «График кусочно-линейной функции». Области кнопок-пиктограмм..png|мини|Рисунок 33 – Виджет «График кусочно-линейной функции». Области кнопок-пиктограмм.]]&lt;br /&gt;
Виджет состоит из нескольких областей:&lt;br /&gt;
&lt;br /&gt;
*область осей Х, Y;&lt;br /&gt;
*область легенды, содержащей список кривых и их параметры (цвет кривой, наименование кривой, текущее значение, время последнего зарегистрированного значения);&lt;br /&gt;
*область вывода графика.&lt;br /&gt;
&lt;br /&gt;
На области вывода графика виджета имеются несколько областей, содержащих кнопки-пиктограммы управления внешним видом графика (см. Рисунок 33):&lt;br /&gt;
&lt;br /&gt;
#Область пиктограмм графика.&lt;br /&gt;
#Область пиктограмм оси первого параметра (X).&lt;br /&gt;
#Область пиктограмм оси второго параметра (Y).&lt;br /&gt;
&lt;br /&gt;
В области пиктограмм графика расположены следующие кнопки-пиктограммы:&lt;br /&gt;
&lt;br /&gt;
*кнопка переключения режима отображения точек на всех кривых;&lt;br /&gt;
*кнопка переключения видимости легенды;&lt;br /&gt;
*кнопка включения режима визирной линии.&lt;br /&gt;
&lt;br /&gt;
В области пиктограмм оси первого (X) и второго (Y) параметров расположены кнопки-пиктограммы «А» – кнопка переключения режима автоматического масштабирования значений.[[Файл:AgavaPLC–Виджет &amp;quot;Список событий&amp;quot;.png|мини|Рисунок 34 – Виджет &amp;quot;Список событий&amp;quot;|ссылка=Файл:AgavaPLC–Виджет_%22Список_событий%22.png]]&lt;br /&gt;
====Виджет «Список событий»====&lt;br /&gt;
[[Файл:AgavaPLC–Окно выбора интервала.png|мини|Рисунок 35 – Окно выбора интервала]]Виджет предназначен для отображения регистрируемых событий в работе.&lt;br /&gt;
&lt;br /&gt;
В верхней части виджета расположена панель управления (1).&lt;br /&gt;
&lt;br /&gt;
Панель управления содержит органы управления журналом:&lt;br /&gt;
&lt;br /&gt;
*кнопка отображения фильтра событий;&lt;br /&gt;
*кнопка включения следящего режима журнала;&lt;br /&gt;
*кнопка изменения интервала на один день назад;&lt;br /&gt;
*кнопка-индикатор выбора интервала, за который отображаются события;&lt;br /&gt;
*кнопка изменения интервала на один день вперед;&lt;br /&gt;
*кнопка вызова окна со списком активных тревог.&lt;br /&gt;
&lt;br /&gt;
Ниже панели управления, в основном поле экрана, расположена таблица, содержащая зарегистрированные события.&lt;br /&gt;
&lt;br /&gt;
Заголовок таблицы позволяет изменять порядок столбцов и включать сортировку по столбцам. Например, возможно включение сортировки событий сначала по времени, затем по группе. Заголовок таблицы имеет возможность отключения / включения отображения любого столбца.&lt;br /&gt;
&lt;br /&gt;
При большом количестве записей в правой части таблицы появляется полоса прокрутки, позволяющая пролистывать список событий.&lt;br /&gt;
&lt;br /&gt;
Нажатие на кнопку-индикатор выбора интервала вызывает окно выбора интервала (см. Рисунок 35):[[Файл:AgavaPLC–Окно &amp;quot;Фильтр&amp;quot;.png|мини|Рисунок 36 – Окно &amp;quot;Фильтр&amp;quot;|ссылка=Файл:AgavaPLC–Окно_%22Фильтр%22.png]]После выбора нужного интервала для сохранения выбора необходимо нажать кнопку «ОК». После сохранения будут отображены зарегистрированные события за выбранный интервал.&lt;br /&gt;
Нажатие на кнопку отображения окна фильтра вызывает соответствующее окно. Окно фильтра позволяет изменить содержимое основного окна журнала событий путем выбора групп и подгрупп событий, перечисленных в окне фильтра (см. Рисунок 36).&lt;br /&gt;
&lt;br /&gt;
После выбора нужных групп и подгрупп для сохранения выбора необходимо нажать кнопку «ОК». После сохранения будут отображены зарегистрированные события, принадлежащих выбранным группам.&lt;br /&gt;
&lt;br /&gt;
====Виджет «Ввод значения»====&lt;br /&gt;
Виджет «Ввод значения» предназначен для отображения значения привязанного сигнала и его редактирования.&lt;br /&gt;
[[Файл:AgavaPLC–Виджет «Ввод значения» с отображением экранной цифровой клавиатуры.png|мини|Рисунок 37 – Виджет «Ввод значения» с отображением экранной цифровой клавиатуры|212x212пкс]]&lt;br /&gt;
После выбора узла для чтения/записи и соответствующего типа значения необходимо выбрать нужный тип ввода в разделе «Оформление».&lt;br /&gt;
&lt;br /&gt;
Доступны следующие типы ввода:&lt;br /&gt;
&lt;br /&gt;
*кнопки изменения – при нажатии на виджет появляются кнопки увеличения и уменьшения на заданный шаг изменения;&lt;br /&gt;
*кнопка редактирования – при нажатии на виджет появляется кнопка, при клике на которую открывается экранная цифровая клавиатура;&lt;br /&gt;
&lt;br /&gt;
Виджет имеет возможность проверки вводимых значений, при активации которой запись будет осуществляться только тогда, когда записываемое значение будет находиться в диапазоне между заданными минимальным и максимальными значениями.&lt;br /&gt;
&lt;br /&gt;
====Виджет «Выбор значения из списка»====&lt;br /&gt;
[[Файл:AgavaPLC–Виджет «Выбор значения из списка».png|мини|Рисунок 38 – Виджет «Выбор значения из списка»]]&lt;br /&gt;
Виджет «Выбор значения из списка» предназначен для отображения значения привязанного сигнала и его изменения в удобном для пользователя текстовом виде (см. Рисунок 37).&lt;br /&gt;
&lt;br /&gt;
С помощью свойства «Список сопоставлений» задается соответствие между значением сигнала и выводимой в виджете строкой.&lt;br /&gt;
&lt;br /&gt;
При нажатии на кнопку в правой части виджета отображается список всех сопоставлений. При выборе нужного элемента в списке в установленный узел производится запись нового значения.&lt;br /&gt;
&lt;br /&gt;
====Виджет «Флаг»====&lt;br /&gt;
[[Файл:AgavaPLC–Варианты внешнего вида виджета «Флаг».png|мини|Рисунок 39 – Варианты внешнего вида виджета «Флаг»]]&lt;br /&gt;
Виджет «Флаг» предназначен для отображения значения и изменения булевой переменной (true/false). Состояние true отображается в виде галочки (см. Рисунок 38).&lt;br /&gt;
&lt;br /&gt;
При нажатии на виджет значение переменной изменяется на противоположное.&lt;br /&gt;
&lt;br /&gt;
В случае, если флаг необходимо использовать только для отображения информации, поставьте галочку в свойстве «Отключен»&lt;br /&gt;
&lt;br /&gt;
====Виджет «Отчет»====&lt;br /&gt;
[[Файл:AgavaPLC–Виджет «Отчет» в режиме отображения сформированного отчета.png|мини|Рисунок 40 – Виджет «Отчет» в режиме отображения сформированного отчета]]&lt;br /&gt;
Виджет «Отчет» предназначен для формирования отчетов по заранее спроектированному макету.&lt;br /&gt;
&lt;br /&gt;
Подробный порядок создания и редактирования отчетов приведен в разделе [[#Отчеты]].&lt;br /&gt;
[[Файл:AgavaPLC–Окно выбора интервала отчета.png|мини|Рисунок 41 – Окно выбора интервала отчета]]&lt;br /&gt;
В верхней части виджета размещена панель управления, содержащая кнопки вызова команд:&lt;br /&gt;
&lt;br /&gt;
* печать сформированного отчета на установленном в системе принтере;&lt;br /&gt;
*сохранение сформированного отчета в файле формата PDF;&lt;br /&gt;
*переход к предыдущей странице отчета;&lt;br /&gt;
*переход к следующей странице отчета;&lt;br /&gt;
*масштабирование экрана по ширине листа отчета;&lt;br /&gt;
*масштабирование экрана по высоте листа отчета.&lt;br /&gt;
&lt;br /&gt;
При формировании отчета для изменения интервала времени, за который будет формироваться отчет, необходимо на панели управления щелкнуть кнопку выбора интервала (на ней отображается текущий выбранный интервал, например, «Начало суток без смещения – Конец суток без смещения»). Далее появится окно «Интервал», в котором можно выбрать начало и конец интервала (см. Рисунок 41). &lt;br /&gt;
&lt;br /&gt;
В качестве начала и конца интервала можно выбрать как конкретную дату по календарю, так относительную, например, «Начало дня», &amp;quot;Конец недели&amp;quot;. После выбора желаемого интервала необходимо нажать кнопку «ОК».&lt;br /&gt;
&lt;br /&gt;
Выбранный интервал отобразится на панели управления отчетом. Для формирования отчета за выбранный интервал необходимо нажать кнопку «Сформировать отчет». Через некоторое время, после загрузки данных из БД и их обработки, экран обновится и сформированный отчет за выбранный интервал будет отображен.&lt;br /&gt;
&lt;br /&gt;
{{Шаблон:Действия AgavaSCADA/AgavaPLC}}&lt;br /&gt;
&lt;br /&gt;
==Система тревог==&lt;br /&gt;
Система тревог предназначена для оповещения пользователя об обнаруженных нарушениях.&lt;br /&gt;
&lt;br /&gt;
Система содержит два типа узлов:&lt;br /&gt;
&lt;br /&gt;
*Группа событий.&lt;br /&gt;
*Контроллер событий.&lt;br /&gt;
&lt;br /&gt;
===Группа событий===&lt;br /&gt;
Группа событий – узел, предназначенный для взаимодействия с виджетом «Список событий». Группы событий позволяют группировать события по какому-то признаку, например по уровню тревоги (авария, предупреждение, квитирование и т.д.), технологическому участку и т.д.&lt;br /&gt;
&lt;br /&gt;
Для каждой группы можно выбрать свой цвет шрифта и фона, которые будут использоваться для вывода событий, принадлежащих этой группе в виджете &amp;quot;Список событий&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
В свойстве «Описание» группы событий указывается текст, который будет отображаться в фильтре списка событий.&lt;br /&gt;
&lt;br /&gt;
===Монитор событий===&lt;br /&gt;
Монитор событий (ранее - Контроллер событий) – узел, реализующий логику проверки соответствия выбранных сигналов контролируемым условиям. Контроллеры событий выполняют всю работу по проверке значений контролируемых параметров и выполнению соответствующих действий.&lt;br /&gt;
&lt;br /&gt;
Монитор событий проверяет значения заданных узлов на соответствие заданным условиям и при их совпадении выполняет заданные действия.&lt;br /&gt;
&lt;br /&gt;
В качестве действий можно указать не только действие &amp;quot;Создание события&amp;quot;, но и другие (см. раздел [[#Действия]]).&lt;br /&gt;
[[Файл:AgavaPLC-Cистема тревог.png|мини|Cистема тревог]]&lt;br /&gt;
&lt;br /&gt;
===Порядок настройки системы===&lt;br /&gt;
Порядок настройки системы тревог следующий:&lt;br /&gt;
#Добавить в проект систему тревог. Для этого нажать ПКМ по узлу «Станция» в дереве проекта, затем выбрать «Добавить узел» - «Система» - «Система тревог».&lt;br /&gt;
#Добавить узел «События» в систему тревог. Для этого нажать ПКМ по системе тревог в дереве проекта, затем выбрать «Добавить узел» - «Группа» - «События». При необходимости настроить цвет шрифта и фона, которые будут отображаться у события в окне тревог или журнале.&lt;br /&gt;
#Добавить нужные [[Узлы проекта AgavaSCADA/AgavaPLC#.D0.93.D1.80.D1.83.D0.BF.D0.BF.D0.B0 .D1.81.D0.BE.D0.B1.D1.8B.D1.82.D0.B8.D0.B9|группы событий]] в узел «События». Для этого нажать ПКМ по узлу «События» в дереве проекта, затем выбрать «Добавить узел» - «Группа событий».&lt;br /&gt;
#Добавить [[Узлы проекта AgavaSCADA/AgavaPLC#.D0.9A.D0.BE.D0.BD.D1.82.D1.80.D0.BE.D0.BB.D0.BB.D0.B5.D1.80 .D1.81.D0.BE.D0.B1.D1.8B.D1.82.D0.B8.D0.B9|контроллеры событий]] в систему тревог. Для этого нажать ПКМ по системе тревог в дереве проекта, затем выбрать «Добавить узел» - «Контроллер событий».&lt;br /&gt;
#Добавить в свойство «Сигналы» контроллеров событий узлы, состояние которых необходимо контролировать.&lt;br /&gt;
#Задать для этих узлов контролируемые условия в соответствующем свойстве контроллера событий.&lt;br /&gt;
#Настроить [[Узлы проекта AgavaSCADA/AgavaPLC#.D0.94.D0.B5.D0.B9.D1.81.D1.82.D0.B2.D0.B8.D1.8F|действия]], которые будут выполняться при выполнении контролируемого условия. Для вывода аварий, предупреждений или информационных сообщений необходимо добавить действие «Создание события».&lt;br /&gt;
# Настроить действие «Создание события». В его свойстве «Группа событий» указать группу из созданных в пункте 2. Ввести тексты сообщения активации и деактивации (при необходимости), указать уровень события. Теперь, при срабатывании контролируемого условия, будет появляться окно тревог с сообщением активации.&lt;br /&gt;
&lt;br /&gt;
== Система архивирования==&lt;br /&gt;
Система архивирования предназначена для управления процессом сохранения значений параметров в базы данных. Параметры, сохраненные в базу данных, могут использоваться для построения графиков параметров и генерации отчетов.&lt;br /&gt;
&lt;br /&gt;
Архивация параметров производится с помощью архиваторов.&lt;br /&gt;
[[Файл:AgavaPLC-Настройка архиватора.png|мини|505x505пкс|Настройка архиватора]]&lt;br /&gt;
&lt;br /&gt;
===Порядок настройки системы===&lt;br /&gt;
Для сохранения истории изменения значений параметров в БД необходимо выполнить следующие действия: &lt;br /&gt;
&lt;br /&gt;
#Добавить в проект систему архивации. Для этого нажать ПКМ по узлу «Станция» в дереве проекта, затем выбрать «Добавить узел» - «Система» - «Система архивации».&lt;br /&gt;
#Добавить в систему архивации архиватор. Для этого нажать ПКМ по узлу «Система архивации» в дереве проекта, затем выбрать «Добавить узел» - «Архиватор в БД SQLite».&lt;br /&gt;
#Настроить параметры архиватора, такие как: путь до файла БД, интервал архивирования (как часто система архивации будет опрашивать значение параметра), интервал сохранения БД на диск (как часто эти значения будут записываться в постоянную память), разбиение БД (будет ли система архивации создавать новый файл БД каждые сутки), период хранения и режим выдачи значений для построения графика (сохраняемые значения будут обновляться с частотой интервала архивирования, а сохраненные - с частотой интервала сохранения).&lt;br /&gt;
#Добавить параметры в коннекторы база данных. Для этого необходимо открыть свойство архиватора «Коннекторы БД», выбрать «Создать новый» - «Коннектор БД». После этого нужно нажать по добавленному коннектору, открыть его свойство «Сигналы» и добавить параметр, значение которого необходимо сохранять в БД.&lt;br /&gt;
&lt;br /&gt;
=== Архиватор SQLite===&lt;br /&gt;
Архиватор SQLite предназначен для сохранения значений параметров в БД формата SQLite.&lt;br /&gt;
&lt;br /&gt;
Для извлечения и просмотра баз данных формата SQLite с устройств может использоваться программа «[[Архиватор]]».&lt;br /&gt;
&lt;br /&gt;
====Свойства узла &amp;quot;Архиватор SQLite&amp;quot;====&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Наименование свойства&lt;br /&gt;
!Идентификатор&lt;br /&gt;
!Тип&lt;br /&gt;
!Доступ&lt;br /&gt;
!Описание&lt;br /&gt;
|-&lt;br /&gt;
| Путь до файла БД&lt;br /&gt;
|FilePath&lt;br /&gt;
|STRING&lt;br /&gt;
|Чтение / запись&lt;br /&gt;
|Путь до файла БД. Абсолютный или относительный.&lt;br /&gt;
|-&lt;br /&gt;
|Интервал архивирования&lt;br /&gt;
|Interval&lt;br /&gt;
|INT&lt;br /&gt;
|Чтение / запись&lt;br /&gt;
|Интервал архивирования, мс.&lt;br /&gt;
|-&lt;br /&gt;
|Период хранения&lt;br /&gt;
|Retention&lt;br /&gt;
|INT&lt;br /&gt;
|Чтение / запись&lt;br /&gt;
|Период хранения, дней.&lt;br /&gt;
|-&lt;br /&gt;
|Разбиение БД&lt;br /&gt;
|DBSplitting&lt;br /&gt;
|BOOL&lt;br /&gt;
|Чтение / запись&lt;br /&gt;
|Разбиение БД на файлы. При включении база данных будет разделяться на отдельныйе файлы, содержащие данные за одни сутки.&lt;br /&gt;
|-&lt;br /&gt;
|Интервал сохранения БД на диск&lt;br /&gt;
|StoringInterval&lt;br /&gt;
|INT&lt;br /&gt;
|Чтение / запись&lt;br /&gt;
|Интервал сохранения БД на диск, мс.&lt;br /&gt;
|-&lt;br /&gt;
|Режим выдачи значений&lt;br /&gt;
|ValueReturnMode&lt;br /&gt;
|ENUM&lt;br /&gt;
|Чтение / запись&lt;br /&gt;
|Режим выдачи значений. Режим &amp;quot;Сохраняемые в БД&amp;quot; - данные выдаются сразу после получения архиватором, возможно до фактического сохранения в БД. Режим &amp;quot;Сохраненные в БД&amp;quot; - данные выдаются только после фактической записи в БД на диск.&lt;br /&gt;
|-&lt;br /&gt;
|Коннекторы БД&lt;br /&gt;
|Signals&lt;br /&gt;
|NODESARRAY&lt;br /&gt;
|Чтение / запись&lt;br /&gt;
|Список коннекторов, содержащих сигналы для архивирования.&lt;br /&gt;
|-&lt;br /&gt;
|Текущий размер БД&lt;br /&gt;
|DBCurrentSize&lt;br /&gt;
|INT&lt;br /&gt;
|Только чтение&lt;br /&gt;
|Текущий размер БД, Мб.&lt;br /&gt;
|-&lt;br /&gt;
|Максимальный размер БД&lt;br /&gt;
|DBMaxSize&lt;br /&gt;
|INT&lt;br /&gt;
|Только чтение&lt;br /&gt;
|Максимальный размер БД, Мб.&lt;br /&gt;
|-&lt;br /&gt;
|Состояние БД&lt;br /&gt;
|DBStatus&lt;br /&gt;
|INT&lt;br /&gt;
|Только чтение&lt;br /&gt;
|Состояние БД.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Архиватор PostgreSQL ===&lt;br /&gt;
Архиватор PostgreSQL предназначен для сохранения значений параметров в базы данных под управлением сервера PostgreSQL.&lt;br /&gt;
&lt;br /&gt;
=== Прореживание данных ===&lt;br /&gt;
Прореживание данных (data thinning) — это процесс фильтрации и уменьшения количества точек данных, сохраняемых в архиве. Вместо того чтобы записывать каждое полученное значение, система анализирует поток данных и сохраняет только те значения, которые представляют значимое изменение.&lt;br /&gt;
&lt;br /&gt;
==== Назначение прореживания ====&lt;br /&gt;
Поток данных от датчиков и устройств зачастую содержит незначительные колебания (шум) или избыточные данные, когда параметр не меняется. Прореживание решает следующие задачи:&lt;br /&gt;
&lt;br /&gt;
* '''Снижение нагрузки на архив''': Меньшее количество записей означает более быструю работу базы данных.&lt;br /&gt;
* '''Ускорение отображения графиков''': Нужно обрабатывать меньше точек для построения трендов.&lt;br /&gt;
* '''Сохранение только значимых изменений''': Система отфильтровывает шум и оставляет только те изменения, которые важны для анализа технологического процесса.&lt;br /&gt;
&lt;br /&gt;
==== Общий принцип работы ====&lt;br /&gt;
Алгоритм прореживания работает по простому принципу:&lt;br /&gt;
&lt;br /&gt;
# SCADA-система получает новое значение от источника данных.&lt;br /&gt;
# Она сравнивает это значение с последним, которое было сохранено в архив.&lt;br /&gt;
# Если изменение превышает заранее настроенный '''допуск''' (tolerance), новое значение сохраняется.&lt;br /&gt;
# Если изменение меньше допуска, значение пропускается.&lt;br /&gt;
&lt;br /&gt;
Кроме того, существует параметр &amp;quot;'''Период обязательной записи&amp;quot;'''. Если с момента последней записи прошло больше времени, чем указано в этом параметре, новое значение будет сохранено '''независимо от его изменения'''. Это гарантирует, что записи в архив будут сохраняться не реже заданной периодичности, даже если сигнал не меняется. Ключевая идея: &amp;quot;'''Сохраняем только то, что заметно изменилось, но не реже, чем задано&amp;quot;.'''&lt;br /&gt;
&lt;br /&gt;
'''Как подобрать допуск?'''&lt;br /&gt;
&lt;br /&gt;
* '''Слишком малый допуск''' приведёт к записи избыточных данных, и архив будет быстро расти.&lt;br /&gt;
* '''Слишком большой допуск''' может привести к потере мелких, но значимых изменений в сигнале.&lt;br /&gt;
&lt;br /&gt;
Выбор правильного допуска — это компромисс между детализацией данных и размером архива.&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
==== Типы алгоритмов прореживания ====&lt;br /&gt;
В системе доступны несколько алгоритмов, которые определяют, как именно вычисляется «значимость» изменения. Выбор алгоритма зависит от характера сигнала и требований к точности данных.&lt;br /&gt;
&lt;br /&gt;
# Абсолютный допуск&lt;br /&gt;
# Процент от последнего значения&lt;br /&gt;
# Процент от среднего N последних&lt;br /&gt;
# Процент от среднего по временному окну&lt;br /&gt;
&lt;br /&gt;
'''Обозначения и определения'''&lt;br /&gt;
&lt;br /&gt;
В дальнейшем используются следующие обозначения (для числовых сигналов):&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;math&amp;gt;x_{in}&amp;lt;/math&amp;gt;​ — текущее измерение сигнала, полученное от источника данных к моменту обработки (кандидат на запись).&lt;br /&gt;
* &amp;lt;math&amp;gt;x_{ref}&amp;lt;/math&amp;gt; — последнее сохранённое числовое значение сигнала в архиве на момент обработки (опорное значение).&lt;br /&gt;
* &amp;lt;math&amp;gt;|\Delta| = |x_{in} - x_{ref}|&amp;lt;/math&amp;gt; — абсолютная величина изменения между текущим измерением и последним сохранённым значением.&lt;br /&gt;
* &amp;lt;math&amp;gt;\bar{x}_N&amp;lt;/math&amp;gt;​ — арифметическое среднее последних &amp;lt;math&amp;gt;N&amp;lt;/math&amp;gt; сохранённых числовых значений.&lt;br /&gt;
* &amp;lt;math&amp;gt;\bar{x}_T&amp;lt;/math&amp;gt;​ — среднее всех сохранённых числовых значений, чьи метки времени попадают в временное окно длительности &amp;lt;math&amp;gt;T&amp;lt;/math&amp;gt; миллисекунд.&lt;br /&gt;
* &amp;lt;math&amp;gt;\varepsilon&amp;lt;/math&amp;gt; — машинная точность для чисел двойной точности; используется для формальной проверки «близости к нулю».&lt;br /&gt;
* &amp;lt;math&amp;gt;tolerance&amp;lt;/math&amp;gt; — допуск: абсолютный (в физических единицах) или относительный (в процентах), в зависимости от выбранного алгоритма.&lt;br /&gt;
&lt;br /&gt;
'''Настройки в Свойствах архиватора, общие для всех типов прореживания'''&lt;br /&gt;
&lt;br /&gt;
* '''Включить прореживание''' — включает/выключает применение алгоритма прореживания при записи значений. При выключении все поступающие значения сохраняются без фильтрации.&lt;br /&gt;
* '''Тип допуска''' — выбирает алгоритм сравнения.&lt;br /&gt;
* '''Период обязательной записи (мс)''' — максимальный допустимый промежуток между двумя записями одного сигнала. Если за это время значимого изменения не произошло, ближайшее поступившее значение будет записано принудительно. 0 — отключить принудительную запись.&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
==== Абсолютный допуск ====&lt;br /&gt;
'''Принцип:'''&lt;br /&gt;
&lt;br /&gt;
Новое значение сохраняется, если модуль изменения больше установленного порога в физических единицах.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math display=&amp;quot;block&amp;quot;&amp;gt;|\Delta| &amp;gt; tolerance&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Когда использовать:'''&lt;br /&gt;
&lt;br /&gt;
* Если диапазон сигнала стабилен и известен заранее.&lt;br /&gt;
* Для параметров вроде температуры, давления, уровня жидкости, где фиксированное изменение имеет одинаковую интерпретацию по всей шкале.&lt;br /&gt;
&lt;br /&gt;
'''Преимущества:'''&lt;br /&gt;
&lt;br /&gt;
* Обеспечивает предсказуемое и детерминированное поведение независимо от текущего масштаба значения.&lt;br /&gt;
* Не требует накопления или хранения дополнительных данных (окон/истории), вычислительно прост.&lt;br /&gt;
* Удобен при наличии нормативно заданных пределов точности в физических единицах.&lt;br /&gt;
&lt;br /&gt;
'''Ограничения:'''&lt;br /&gt;
&lt;br /&gt;
* Не масштабируется на широкий динамический диапазон: один и тот же порог может быть слишком грубым для малых значений и слишком чувствительным для больших.&lt;br /&gt;
* Требует аккуратного подбора порога под единицы измерения и разрешение датчика; при неверной калибровке возможны либо избыточные записи, либо потеря значимых мелких изменений.&lt;br /&gt;
* Не учитывает относительный контекст изменения (например, 1 единица при значении 10 и при значении 10 000 трактуется одинаково).&lt;br /&gt;
&lt;br /&gt;
'''Настройки в Свойствах архиватора:'''&lt;br /&gt;
&lt;br /&gt;
* '''Допуск''' — абсолютный порог в физических единицах сигнала. Определяет значение &amp;lt;math&amp;gt;tolerance&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
==== Процент от последнего значения ====&lt;br /&gt;
'''Принцип:'''&lt;br /&gt;
&lt;br /&gt;
Новое значение сохраняется, если относительное изменение относительно последнего сохранённого превышает заданный процент.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math display=&amp;quot;block&amp;quot;&amp;gt;\frac{|\Delta|}{|x_{ref}|} \times{100} &amp;gt; tolerance&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Когда использовать:'''&lt;br /&gt;
&lt;br /&gt;
* Для сигналов, где важна относительная динамика, а не абсолютные величины.&lt;br /&gt;
* Для показателей с большим динамическим диапазоном, где относительная точность должна быть сопоставима на всех уровнях.&lt;br /&gt;
&lt;br /&gt;
'''Преимущества:'''&lt;br /&gt;
&lt;br /&gt;
* Масштабируемость: одинаково интерпретирует относительные изменения на низких и высоких уровнях сигнала.&lt;br /&gt;
* Не требует хранения окна значений; использует только последнее сохранённое значение, поэтому вычислительно лёгок.&lt;br /&gt;
* Быстро и корректно реагирует на пропорциональные изменения процесса (проценты), поддерживая заданную относительную чувствительность.&lt;br /&gt;
&lt;br /&gt;
'''Ограничения:'''&lt;br /&gt;
&lt;br /&gt;
* В окрестности нуля относительная метрика становится нестабильной (см. примечание).&lt;br /&gt;
* При малых базовых значениях возможна повышенная чувствительность к шуму и микроколебаниям.&lt;br /&gt;
* Не подавляет высокочастотный шум сам по себе: при необходимости сочетать с обязательной записью по времени и корректной настройкой допуска.&lt;br /&gt;
&lt;br /&gt;
'''Настройки в Свойствах архиватора:'''&lt;br /&gt;
&lt;br /&gt;
* '''Допуск''' — относительный порог в процентах. Определяет значение &amp;lt;math&amp;gt;tolerance&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
==== Процент от среднего N последних ====&lt;br /&gt;
'''Принцип:'''&lt;br /&gt;
&lt;br /&gt;
Новое значение сохраняется, если изменение больше заданного процента от среднего по последним N сохранённым значениям.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math display=&amp;quot;block&amp;quot;&amp;gt;\frac{|\Delta|}{|\bar{x}_{N}|} \times{100} &amp;gt; tolerance&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Когда использовать:'''&lt;br /&gt;
&lt;br /&gt;
* Для сигналов с постоянным шумом или пульсациями, когда важно снижать чувствительность к случайным отклонениям.&lt;br /&gt;
* Для процессов с умеренной динамикой, где требуется устойчивость к «зубчатым» колебаниям.&lt;br /&gt;
&lt;br /&gt;
'''Преимущества:'''&lt;br /&gt;
&lt;br /&gt;
* Снижает чувствительность к высокочастотному шуму за счёт опоры на усреднение; сокращает объём записей на стационарных участках.&lt;br /&gt;
* Гибко настраивается параметром &amp;lt;math&amp;gt;N&amp;lt;/math&amp;gt;: увеличение окна повышает устойчивость, уменьшение — повышает чувствительность и снижает задержку реакции.&lt;br /&gt;
&lt;br /&gt;
'''Ограничения:'''&lt;br /&gt;
&lt;br /&gt;
* В окрестности нуля относительная метрика становится нестабильной (см. примечание).&lt;br /&gt;
&lt;br /&gt;
* Инерционность: при резких скачках возможна задержка фиксации изменения, особенно при большом &amp;lt;math&amp;gt;N&amp;lt;/math&amp;gt;.&lt;br /&gt;
* Усреднение может «сглаживать» и не фиксировать кратковременные, но важные пики; не подходит для задач, критичных к коротким экстремумам.&lt;br /&gt;
* Предполагает относительно стабильную частоту выборок; при сильно переменной частоте эффективная «временная» ширина окна становится непредсказуемой.&lt;br /&gt;
&lt;br /&gt;
'''Настройки в Свойствах архиватора:'''&lt;br /&gt;
&lt;br /&gt;
* '''Допуск''' — относительный порог в процентах. Определяет значение &amp;lt;math&amp;gt;tolerance&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
* '''Размер окна среднего (&amp;lt;math&amp;gt;N&amp;lt;/math&amp;gt;)''' — число последних сохранённых значений, по которым считается среднее. Большее &amp;lt;math&amp;gt;N&amp;lt;/math&amp;gt; повышает устойчивость к шуму, но увеличивает инерционность реакции.&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
==== Процент от среднего по временному окну ====&lt;br /&gt;
'''Принцип:'''&lt;br /&gt;
&lt;br /&gt;
Похож на предыдущий, но среднее считается не по количеству точек, а по всем значениям за заданный интервал времени.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math display=&amp;quot;block&amp;quot;&amp;gt;\frac{|\Delta|}{|\bar{x}_{T}|} \times{100} &amp;gt; tolerance&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Когда использовать:'''&lt;br /&gt;
&lt;br /&gt;
* Для сигналов с непостоянной частотой измерений (событийные, неравномерные потоки).&lt;br /&gt;
* В случаях, когда важно учитывать реальную временную протяжённость усреднения независимо от плотности измерений.&lt;br /&gt;
&lt;br /&gt;
'''Преимущества:'''&lt;br /&gt;
&lt;br /&gt;
* Корректно работает при переменной частоте выборок: окно фиксируется по времени, а не по числу точек.&lt;br /&gt;
* Более реалистично оценивает тренд во времени на участках с неравномерными измерениями.&lt;br /&gt;
* Управляемый компромисс между подавлением шума и чувствительностью за счёт выбора длительности окна.&lt;br /&gt;
&lt;br /&gt;
'''Ограничения:'''&lt;br /&gt;
&lt;br /&gt;
* В окрестности нуля относительная метрика становится нестабильной (см. примечание).&lt;br /&gt;
&lt;br /&gt;
* Более высокая ресурсоёмкость: требуется хранить и периодически «очищать» значения по условию выхода из временного окна; потребление памяти зависит от фактической скорости поступления данных.&lt;br /&gt;
* Инерционность, присущая усреднению: возможна задержка фиксации коротких, но значимых пиковых изменений.&lt;br /&gt;
* Критичен выбор длительности окна: слишком малое окно даёт мало подавления шума, слишком большое — чрезмерную инерцию и риск пропуска кратких событий.&lt;br /&gt;
&lt;br /&gt;
'''Настройки в Свойствах архиватора:'''&lt;br /&gt;
&lt;br /&gt;
* '''Допуск''' — относительный порог в процентах. Определяет значение &amp;lt;math&amp;gt;tolerance&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
* '''Интервал архивирования''' — длительность временного окна &amp;lt;math&amp;gt;T&amp;lt;/math&amp;gt; (мс), в пределах которого вычисляется среднее. При увеличении &amp;lt;math&amp;gt;T&amp;lt;/math&amp;gt; растёт сглаживание и уменьшается чувствительность к кратким всплескам; при уменьшении — наоборот. Значения, чьи метки времени выходят за пределы окна, автоматически исключаются из расчёта.&lt;br /&gt;
&lt;br /&gt;
==== Примечание к алгоритмам 'Процент от…' ====&lt;br /&gt;
При малых опорных значениях система автоматически переходит в абсолютный режим, чтобы избежать деления на величину, близкую к нулю, и связанных с этим скачков чувствительности. Этот механизм применяется ко всем алгоритмам, использующим относительное сравнение: «Процент от последнего», «Процент от среднего N», «Процент от среднего по временному окну» и обеспечивает стабильность критерия при слабых сигналах.&lt;br /&gt;
&lt;br /&gt;
* Условия входа в режим абсолютного допуска:&lt;br /&gt;
** для «Процента от последнего»: &amp;lt;math&amp;gt;|x_{ref}| &amp;lt; \varepsilon&amp;lt;/math&amp;gt;;&lt;br /&gt;
** для «Процента от среднего N»: &amp;lt;math&amp;gt;|\bar{x}_{N}| &amp;lt; \varepsilon&amp;lt;/math&amp;gt;;&lt;br /&gt;
** для «Процента от среднего по времени»: &amp;lt;math&amp;gt;|\bar{x}_{T}| &amp;lt; \varepsilon&amp;lt;/math&amp;gt;.&lt;br /&gt;
* Критерий в режиме абсолютного допуска: значение фиксируется, если &amp;lt;math&amp;gt;|\Delta| &amp;gt; tolerance&amp;lt;/math&amp;gt;.&lt;br /&gt;
* Условие выхода: как только соответствующая базовая величина (&amp;lt;math&amp;gt;|x_{ref}|&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;|\bar{x}_{N}|&amp;lt;/math&amp;gt; или &amp;lt;math&amp;gt;|\bar{x}_{T}|&amp;lt;/math&amp;gt;) становится &amp;lt;math&amp;gt;\geq \varepsilon&amp;lt;/math&amp;gt;, система автоматически возвращается к относительному критерию.&lt;br /&gt;
* Трактовка &amp;lt;math&amp;gt;tolerance&amp;lt;/math&amp;gt;: используется то же значение настройки; в абсолютном режиме оно интерпретируется как порог в физических единицах сигнала.&lt;br /&gt;
&lt;br /&gt;
=== Сравнение алгоритмов прореживания данных ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Критерий&lt;br /&gt;
!Абсолютный&lt;br /&gt;
!% от последнего&lt;br /&gt;
!% от среднего N&lt;br /&gt;
!% от среднего по времени&lt;br /&gt;
|-&lt;br /&gt;
|Единицы допуска&lt;br /&gt;
|Физические&lt;br /&gt;
|Проценты&lt;br /&gt;
|Проценты&lt;br /&gt;
|Проценты&lt;br /&gt;
|-&lt;br /&gt;
|Устойчивость к шуму&lt;br /&gt;
|Низкая&lt;br /&gt;
|Средняя&lt;br /&gt;
|Высокая&lt;br /&gt;
|Высокая&lt;br /&gt;
|-&lt;br /&gt;
|Реакция на резкие скачки&lt;br /&gt;
|Быстрая&lt;br /&gt;
|Быстрая&lt;br /&gt;
|Задержка (при большом N)&lt;br /&gt;
|Задержка&lt;br /&gt;
|-&lt;br /&gt;
|Подходит при переменной частоте&lt;br /&gt;
|Да&lt;br /&gt;
|Да&lt;br /&gt;
|Нет&lt;br /&gt;
|Да&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Система журналирования==&lt;br /&gt;
Система ведения журналов событий предназначена для управления регистрацией и хранением событий. В базу данных записываются все системные события и события, генерируемые с помощью [[Узлы проекта AgavaSCADA/AgavaPLC#.D0.A1.D0.B8.D1.81.D1.82.D0.B5.D0.BC.D0.B0 .D1.82.D1.80.D0.B5.D0.B2.D0.BE.D0.B3|системы тревог]], которые соответствуют выбранному уровню сообщений.&lt;br /&gt;
&lt;br /&gt;
Для ведения журналов используются узлы типа &amp;quot;Логгер&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
===Порядок настройки системы===&lt;br /&gt;
Порядок настройки системы журналирования следующий:&lt;br /&gt;
&lt;br /&gt;
#Добавить и [[Узлы проекта AgavaSCADA/AgavaPLC#.D0.9F.D0.BE.D1.80.D1.8F.D0.B4.D0.BE.D0.BA .D0.BD.D0.B0.D1.81.D1.82.D1.80.D0.BE.D0.B9.D0.BA.D0.B8 .D1.81.D0.B8.D1.81.D1.82.D0.B5.D0.BC.D1.8B|настроить систему тревог]] для генерации событий.&lt;br /&gt;
#Добавить в проект систему журналирования. Для этого нажать ПКМ по узлу «Станция» в дереве проекта, затем выбрать «Добавить узел» - «Система» - «Система журналирования».&lt;br /&gt;
#Добавить в систему журналирования логгер. Для этого нажать ПКМ по узлу «Система архивации» в дереве проекта, затем нажать «Добавить узел» и выбрать нужный логгер.&lt;br /&gt;
#Настроить параметры логгера (см. разделы ниже).&lt;br /&gt;
&lt;br /&gt;
=== Логгер SQLite===&lt;br /&gt;
Логгер SQLite предназначен для сохранения событий, возникающих в ходе исполнения прикладной программы в СУБД SQLite.&lt;br /&gt;
&lt;br /&gt;
Логгер позволяет настраивать срок хранения событий, уровень сохраняемых событий и включать режим разбиения базы данных на отдельные файлы, содержащие данные только за одни сутки.&lt;br /&gt;
&lt;br /&gt;
Информацию о событиях в базе данных, которую ведет логгер, можно просмотреть с помощью виджета &amp;quot;Список событий&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
===Логгер файловый ===&lt;br /&gt;
Логгер файловый предназначен для сохранения журналов событий в текстовых файлах на накопителе. Логгер имеет минимальное количество настроек, и обычно используется для сохранения журнала событий в случае необходимости отладки работы прикладной программы без среды разработки.&lt;br /&gt;
&lt;br /&gt;
===Логгер SMS===&lt;br /&gt;
Логгер SMS предназначен для SMS информирования с помощью субмодуля GRPS или внешнего GPRS модема. &lt;br /&gt;
&lt;br /&gt;
Принцип работы логгера следующий:&lt;br /&gt;
&lt;br /&gt;
#Логгер принимает возникающие события, фильтрует их согласно установленного уровня событий и выбранных групп.&lt;br /&gt;
#События, прошедшие фильтрацию, форматируются согласно установленного шаблона.&lt;br /&gt;
#Отформатированные сообщения отправляются через подключенный модем в виде SMS сообщения. Отправка сообщений производится на телефонные номера, записанные в телефонной книге на SIM-карте.&lt;br /&gt;
&lt;br /&gt;
==Система проверки прав пользователей==&lt;br /&gt;
[[Файл:AgavaPLC-Окно привилегий.png|мини|494x494пкс|Окно привилегий]]&lt;br /&gt;
Система реализует механизм контроля доступа к узлам проекта и их функциях на основе ролей. Узлы при выполнении действий проверяют наличие установленных привилегий у авторизованного в данный момент пользователя. &lt;br /&gt;
&lt;br /&gt;
=== Роли и пользователи ===&lt;br /&gt;
Система содержит в себе две подсистемы:&lt;br /&gt;
*Пользователи. Подсистема определяет пользователей, каждому из которых назначается логин/пароль и одна или несколько ролей.&lt;br /&gt;
*Роли. Роли хранят наборы доступных привилегий.&lt;br /&gt;
Отношения между пользователями, ролями и привилегиями можно описать следующим образом:&lt;br /&gt;
&lt;br /&gt;
* Один пользователь может иметь несколько ролей.&lt;br /&gt;
* Одну роль могут иметь несколько пользователей.&lt;br /&gt;
* Одна роль может иметь несколько привилегий.&lt;br /&gt;
* Одна привилегия может принадлежать нескольким ролям.&lt;br /&gt;
&lt;br /&gt;
=== Привилегии ===&lt;br /&gt;
[[Файл:AgavaPLC-Система проверки прав пользователей.png|мини|Система проверки прав пользователей]]&lt;br /&gt;
Для узлов системы доступна установка следующих привилегий:&lt;br /&gt;
&lt;br /&gt;
Все узлы: &lt;br /&gt;
&lt;br /&gt;
*Чтение значения.&lt;br /&gt;
*Запись значения.&lt;br /&gt;
Окна и фреймы:&lt;br /&gt;
*Открытие окна.&lt;br /&gt;
*Закрытие окна.&lt;br /&gt;
&lt;br /&gt;
При установке привилегий на какой-либо узел, все подчиненные узлы получают те же привилегии с флагом &amp;quot;унаследована&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Если привилегия не установлена, то считается что действие, регулируемое привилегией, запрещено.&lt;br /&gt;
&lt;br /&gt;
Значение унаследованных привилегий можно переопределить с помощью явного задания привилегии.&lt;br /&gt;
===Порядок настройки системы===&lt;br /&gt;
Привилегии настраиваются в отдельном окне привилегий, доступном в меню &amp;quot;Вид&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Порядок настройки системы проверки прав в версии AgavaSCADA 1.2 следующий:&lt;br /&gt;
&lt;br /&gt;
#Добавить в проект систему проверки прав пользователей. Для этого нажать ПКМ по узлу «Станция» в дереве проекта, затем выбрать «Добавить узел» - «Система» - «Система проверки прав пользователей».&lt;br /&gt;
#Добавить в систему проверки прав пользователей узел «Роль». Для этого нажать ПКМ по узлу «Система проверки прав пользователей» в дереве проекта, затем выбрать «Добавить узел» - «Роли».&lt;br /&gt;
#Добавить в узел «Роли» необходимые роли. Для этого нажать ПКМ по узлу «Роли» в дереве проекта, затем выбрать «Добавить узел» - «Роль».&lt;br /&gt;
#Для каждой роли настроить привилегии в окне привилегий. Для этого необходимо нажать «Вид» - «Открыть привилегии». В открывшемся окне в выпадающем списке «Пользователь / роль» выбрать нужную роль. Затем, нажимая ПКМ по узлам и выбирая «Добавить привилегию» настроить все необходимые ограничения для данной роли.&lt;br /&gt;
#Добавить в систему проверки прав пользователей узел «Пользователи». Для этого нажать ПКМ по узлу «Система проверки прав пользователей» в дереве проекта, затем выбрать «Добавить узел» - «Пользователи».&lt;br /&gt;
#Добавить в узел «Пользователи» необходимых пользователей. Для этого нажать ПКМ по узлу «Пользователи» в дереве проекта, затем выбрать «Добавить узел» - «Пользователи».&lt;br /&gt;
#Для каждого пользователя указать имя и пароль, которые будут использоваться при авторизации, и выбрать одну или несколько ролей.&lt;br /&gt;
&lt;br /&gt;
== Сигналы, источники и операции ==&lt;br /&gt;
Регистры и другие узлы, добавленные в группу «Сигналы», являются внутренними для проекта и могут менять свои значения только с помощь скриптов или других узлов, с которыми они связаны.&lt;br /&gt;
&lt;br /&gt;
Сигналы содержат в себе несколько подгрупп.&lt;br /&gt;
&lt;br /&gt;
=== Сигнал===&lt;br /&gt;
Сигнал - специальный тип узла, хранящий значение узла типа &amp;quot;источник&amp;quot;. Сигналы могут использоваться для хранения значений нескольких источников, модифицировать их, обладать дополнительными полями и т. д.&lt;br /&gt;
&lt;br /&gt;
Сигналы некоторых типов позволяют модифицировать исходное значение источников. Принцип обработки значения источника или сигнала с помощью операций: &lt;br /&gt;
&lt;br /&gt;
Первичное значение поступает на вход операции, производится вычисление. Если есть еще операции, то вычисленное значение после первой операции передается на вход второй. И так далее по всем операциям. Если операций больше нет, вычисленное значение устанавливается в качестве значения узла. &lt;br /&gt;
&lt;br /&gt;
Все операции выполняются в порядке, в котором они заданы в соответствующих свойствах.&lt;br /&gt;
&lt;br /&gt;
====Сигнал простой====&lt;br /&gt;
Узел типа &amp;quot;Сигнал простой&amp;quot; предназначен для хранения и обработки значения источника, или другого сигнала или операции. Позволяет произвести какие-либо действия с этим значением с помощью добавления нужных операций в свойство «Операции после чтения».&lt;br /&gt;
&lt;br /&gt;
====Постоянная ====&lt;br /&gt;
Узел типа &amp;quot;Постоянная&amp;quot; предназначен для хранения данных выбранного формата и позволяет изменять их в ходе выполнения программы. Связывание с источником не предусмотрено. Изменение осуществляется с помощью специализированных функций или блока установки значения в задаче ПЛК.&lt;br /&gt;
&lt;br /&gt;
====Массив====&lt;br /&gt;
Массив - совокупность каких-либо объектов, указанных в свойстве «Входные значения». Нумерация объектов в массиве начинается с 0. Может использоваться для взаимодействия с демультиплексором.&lt;br /&gt;
&lt;br /&gt;
====Сигнал комплексный====&lt;br /&gt;
Сигнал используется для взаимодействия с виджетом «Цифровой индикатор». Позволяет контролировать входное значение и генерировать события переходу входного значения через уставки.&lt;br /&gt;
&lt;br /&gt;
Содержит в себе свойства для настройки следующих параметров:&lt;br /&gt;
&lt;br /&gt;
*ВАУ – верхняя аварийная уставка;&lt;br /&gt;
*ВПУ - верхняя предаварийная уставка;&lt;br /&gt;
*НПУ - нижняя предаварийная уставка;&lt;br /&gt;
*НАУ – нижняя аварийная уставка;&lt;br /&gt;
*ФНЧ – фильтр низких частот.&lt;br /&gt;
&lt;br /&gt;
===Источник===&lt;br /&gt;
Источник - специальный тип узлов, предназначенных для передачи данных от внешних устройств.&lt;br /&gt;
&lt;br /&gt;
====Регистр Modbus====&lt;br /&gt;
Регистр Modbus используется для приема и передачи данных по протоколам Modbus-RTU, Modbus-TCP. Данный тип узов также может использоваться для организации работы некоторых алгоритмов программы (например для взаимодействия с контроллером событий).&lt;br /&gt;
&lt;br /&gt;
====Источник индексный====&lt;br /&gt;
Узел типа &amp;quot;Источник индексный&amp;quot; используется для обработки данных, полученных по протоколу Upd, а так же в массивах для индексации значений.&lt;br /&gt;
&lt;br /&gt;
===Операция===&lt;br /&gt;
[[Файл:AgavaPLC-Входные значения операций.png|мини|Входные значения операций]]&lt;br /&gt;
Узлы типа &amp;quot;Операция&amp;quot; используются для реализации вычислительных алгоритмов в задаче ПЛК или отдельно, при их размещении в группе &amp;quot;Сигналы&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
В качестве входных значений операций выбираются константные числа, другие узлы группы «Сигналы», регистры или блоки задачи ПЛК.&lt;br /&gt;
&lt;br /&gt;
====Операция «Сложение»====&lt;br /&gt;
Выходным значением является сумма входных значений. В качестве входных значений можно выбирать как узлы, так и конкретные числа формата int или double.&lt;br /&gt;
&lt;br /&gt;
====Операция «Вычитание»====&lt;br /&gt;
Выходным значением является разность первого входного значения и суммы всех последующих значений. В качестве входных значений можно выбирать как узлы, так и конкретные числа формата int или double.&lt;br /&gt;
&lt;br /&gt;
====Операция «Умножение»====&lt;br /&gt;
Выходным значением является произведение значений всех входных значений. В качестве входных значений можно выбирать как узлы, так и конкретные числа формата int или double.&lt;br /&gt;
&lt;br /&gt;
====Операция «Деление»====&lt;br /&gt;
Выходным значением является результат от деления первого входного значения на произведение всех последующих значений. В качестве входных значений можно выбирать как узлы, так и конкретные числа формата int или double.&lt;br /&gt;
&lt;br /&gt;
====Операция «Условие»====&lt;br /&gt;
Узел типа &amp;quot;Операция условие&amp;quot; предназначен для сравнения значений двух узлов. Для условия задаются сравниваемые параметры и выбирается режим сравнения. В качестве входных значений можно выбирать как узлы, так и конкретные числа формата int или double.&lt;br /&gt;
&lt;br /&gt;
====Операция «Пара условий»====&lt;br /&gt;
[[Файл:AgavaPLC-Операция «Пара условий».png|мини|Операция «Пара условий»]]&lt;br /&gt;
Операция содержит в себе два условия. Для каждого условия задаются индивидуальные сравнимаемые параметры и выбирается режим сравнения.&lt;br /&gt;
&lt;br /&gt;
Выходное значение операции зависит от ее режима проверки – при выбранном режиме «Логическое ИЛИ» выходное значение равно логической «1» если одно из условий равно «1», при «Логическом И»- если оба условия равны «1».&lt;br /&gt;
&lt;br /&gt;
====Операция «Логическое ИЛИ»====&lt;br /&gt;
Если одно из входных значений становится равно логической «1» (контакты замкнуты), то выходное значение становится логической «1» (выход включен).&lt;br /&gt;
&lt;br /&gt;
====Операция «Логическое И»====&lt;br /&gt;
Если все входные значения становятся равны логической «1», выходное значение становится логической «1» (выход включен).&lt;br /&gt;
&lt;br /&gt;
====Операция «Логическое НЕ»====&lt;br /&gt;
Если входное значение блока становится равно логическому «0», то выходное значение становится логической «1», и наоборот.&lt;br /&gt;
&lt;br /&gt;
====Операция «Таймер»====&lt;br /&gt;
Таймер предназначен для выполнения каких-либо [[Узлы проекта AgavaSCADA/AgavaPLC#.D0.94.D0.B5.D0.B9.D1.81.D1.82.D0.B2.D0.B8.D1.8F|действий]] через одинаковые промежутки времени (например запись значения в узел). Промежуток между исполнениями действий задается в свойстве «Интервал срабатывания», а сами действия в свойстве «Действия OnTimer». Для работы операции ее необходимо добавить в свойство «Узлы» [[Узлы проекта AgavaSCADA/AgavaPLC#.D0.97.D0.B0.D0.B4.D0.B0.D1.87.D0.B8|задачи]] с периодическим или разовым режимом выполнения.&lt;br /&gt;
&lt;br /&gt;
====Операция «Мультиплексор»====&lt;br /&gt;
Мультплексор осуществляет перевод нескольких булевых переменных в целочисленное значение по формуле: «выход = вход1 + вход2*2^1 + вход3*2^2 + ...». &lt;br /&gt;
&lt;br /&gt;
Например если в качестве входных значений указаны два регистра, то выходное значение мультиплексора будет формироваться следующим образом:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Значение регистра 1&lt;br /&gt;
!Значение регистра 2&lt;br /&gt;
!Выходное значение&lt;br /&gt;
|-&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|-&lt;br /&gt;
|1&lt;br /&gt;
|0&lt;br /&gt;
|1&lt;br /&gt;
|-&lt;br /&gt;
|0&lt;br /&gt;
|1&lt;br /&gt;
|2&lt;br /&gt;
|-&lt;br /&gt;
|1&lt;br /&gt;
|1&lt;br /&gt;
|3&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
====Операция «Демультиплексор»====&lt;br /&gt;
Демультиплексор осуществляет перевод целочисленных значений из массива в несколько булевых переменных, при этом включается выход, номер которого соответствует числу из массива (например первый элемент массива равен 5, на пятом выходе появится значение true). Нумерация выходов начинается с нуля.&lt;br /&gt;
&lt;br /&gt;
====Операция «Генератор случайного числа»====&lt;br /&gt;
Выходным значением является случайное число в диапазоне между указанным минимальным и максимальным значениями. Для работы операции ее необходимо добавить в свойство «Узлы» [[Узлы проекта AgavaSCADA/AgavaPLC#.D0.97.D0.B0.D0.B4.D0.B0.D1.87.D0.B8|задачи]] с периодическим или разовым режимом выполнения.&lt;br /&gt;
&lt;br /&gt;
====Операция «Скрипт С++»====&lt;br /&gt;
Операция «Скрипт С++» предназначена для реализации разнообразных алгоритмов на языке С++. Операция предусматривает реализацию одной или нескольких функций, выполняющих необходимые пользователю действия. &lt;br /&gt;
&lt;br /&gt;
Для выполнения скрипта, можно добавить в свойство «Узлы» [[Узлы проекта AgavaSCADA/AgavaPLC#.D0.97.D0.B0.D0.B4.D0.B0.D1.87.D0.B8|задачи]] с периодическим или разовым режимом выполнения. Другим способом вызова срабатывания скрипта является добавление его в [[Узлы проекта AgavaSCADA/AgavaPLC#.D0.94.D0.B5.D0.B9.D1.81.D1.82.D0.B2.D0.B8.D0.B5 .C2.AB.D0.92.D1.8B.D0.BF.D0.BE.D0.BB.D0.BD.D0.B5.D0.BD.D0.B8.D0.B5 .D1.81.D0.BA.D1.80.D0.B8.D0.BF.D1.82.D0.B0.C2.BB|действие «Выполнение скрипта»]].&lt;br /&gt;
&lt;br /&gt;
Пример скрипта, выполняющего получение значения определенного узла и запись измененного значения в другой узел:&lt;br /&gt;
 float val()&lt;br /&gt;
 {&lt;br /&gt;
     float f = GetNodeValueAsFloat(&amp;quot;/Конфигурация1/stationSimple1/Signals1/Random2&amp;quot;);&lt;br /&gt;
     float f1 = f*100.0;&lt;br /&gt;
     SetNodeValueAsFloat(&amp;quot;/Конфигурация1/stationSimple1/Signals1/Constant3&amp;quot;, f1);&lt;br /&gt;
     return f*10.0;&lt;br /&gt;
 }&lt;br /&gt;
Приведенный выше скрипт возвращает исходное значение, умноженное на 10. Возвращаемое таким образом значение записывается в выход операции для возможности считывания в других операциях, скриптах и т. д.&lt;br /&gt;
&lt;br /&gt;
Скрипты могут возвращать значения следующих типов:&lt;br /&gt;
&lt;br /&gt;
*void;&lt;br /&gt;
*float;&lt;br /&gt;
*double;&lt;br /&gt;
*int.&lt;br /&gt;
&lt;br /&gt;
Подробное описание реализации языка С++ в AgavaSCADA/AgavaPLC приведено на странице &amp;quot;[[Описание языка С++ в AgavaPLC]]&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
===Объект===&lt;br /&gt;
Узлы типа &amp;quot;Объект&amp;quot; предназначены для взаимодействия с аппаратными компонентами контроллера. Для всех объектов, являющихся субмодулями, необходимо указать слот, в котором они установлены. Доступ к значениям входов/выходов субмодуля осуществляется через его вложенные узлы.&lt;br /&gt;
&lt;br /&gt;
'''ПЛК процессорный модуль''' &lt;br /&gt;
&lt;br /&gt;
Предоставляет возможность регулирования подсветки экрана; включения и отключения индикаторов работы, аварии и программы.&lt;br /&gt;
&lt;br /&gt;
'''ПЛК субмодуль DI'''&lt;br /&gt;
&lt;br /&gt;
Позволяет получать доступ к значениям входов субмодуля DI.&lt;br /&gt;
&lt;br /&gt;
'''ПЛК субмодуль R'''&lt;br /&gt;
&lt;br /&gt;
Позволяет управлять значениями выходов субмодуля R.&lt;br /&gt;
&lt;br /&gt;
'''ПЛК субмодуль SIM'''&lt;br /&gt;
&lt;br /&gt;
Позволяет управлять значениями выходов субмодуля SIM.&lt;br /&gt;
&lt;br /&gt;
'''ПЛК субмодуль DO6'''&lt;br /&gt;
&lt;br /&gt;
Позволяет управлять значениями выходов субмодуля DO6.&lt;br /&gt;
&lt;br /&gt;
'''ПЛК субмодуль AI'''&lt;br /&gt;
&lt;br /&gt;
Позволяет получать доступ к значениям входов субмодуля AI и задавать их тип.&lt;br /&gt;
&lt;br /&gt;
'''ПЛК субмодуль AIO'''&lt;br /&gt;
&lt;br /&gt;
Позволяет получать доступ к значениям входов субмодуля AIO, управлять значениями выходов и задавать тип входов и выходов.&lt;br /&gt;
&lt;br /&gt;
'''ПЛК субмодуль TMP'''&lt;br /&gt;
&lt;br /&gt;
Позволяет получать доступ к значениям входов субмодуля TMP и задавать их тип.&lt;br /&gt;
&lt;br /&gt;
==Задачи==&lt;br /&gt;
Группа «Задачи» предназначена для группировки узлов типа «Задача», которые используются для циклического или разового выполнения созданных пользователем алгоритмов.&lt;br /&gt;
&lt;br /&gt;
===Задача ПЛК===&lt;br /&gt;
Данный узел предоставляет возможности для связывания между собой других узлов (таких как сигналы, субмодули ПЛК, постоянные и т. д.) в удобной графической форме (см. Рисунок 64). Для перехода к редактору необходимо щелкнуть правой кнопкой мыши на задачу ПЛК и выбрать в открывшемся контекстном меню команду «Открыть графическое представление» или дважды щелкнуть левой кнопкой мыши на задаче ПЛК в дереве проекта.&lt;br /&gt;
&lt;br /&gt;
Рисунок 64 – Окно графического редактирования задачи «ПЛК-60»&lt;br /&gt;
&lt;br /&gt;
Панель инструментов задачи ПЛК, расположенная в верхней части окна, содержит следующие элементы (см. Рисунок 16):&lt;br /&gt;
&lt;br /&gt;
*Выпадающий список выбора режима подписи портов.&lt;br /&gt;
*Выпадающий список выбора режима подписи блоков.&lt;br /&gt;
*Кнопка запуска режима симулятора.&lt;br /&gt;
*Кнопка запуска онлайн отладки.&lt;br /&gt;
*Кнопка печати задачи.&lt;br /&gt;
*Инструменты управления симуляцией.&lt;br /&gt;
&lt;br /&gt;
Добавлять узлы в задачу можно перетаскиванием мышью из окна функциональных блоков или из окна дерева проекта. Для связывания узлов между собой необходимо, зажав левую кнопку мыши на выходе одного узла, протянуть линию ко входу другого и затем отпустить левую кнопку мыши для соединения блоков. &lt;br /&gt;
&lt;br /&gt;
Созданную связь можно удалить, выделив ее левой кнопкой мыши и нажав клавишу &amp;quot;Del&amp;quot;. Связь можно &amp;quot;разорвать&amp;quot;, то есть добавить разрыв, нажав по ней правой кнопкой мыши и выбрав в контекстном меню команду «Добавить разрыв». &lt;br /&gt;
&lt;br /&gt;
Для выделения нескольких блоков рамкой зажмите клавишу &amp;quot;Shift&amp;quot; и выделяйте блоки мышью с нажатой левой кнопкой.&lt;br /&gt;
&lt;br /&gt;
Задача ПЛК предоставляет возможности для проведения тестирования и отладки проекта, описанные в разделе [[#Проверка и отладка проекта]].&lt;br /&gt;
&lt;br /&gt;
====Блоки задачи ПЛК====&lt;br /&gt;
Помимо операций, описанных в разделе [[#Операция]], для реализации алгоритмов в задачу ПЛК можно добавлять блоки, описанные ниже.&lt;br /&gt;
&lt;br /&gt;
'''Функциональный блок'''&lt;br /&gt;
&lt;br /&gt;
Используется для выделения каких-либо действий в отдельный блок, для упрощения понимания работы алгоритма программы. Содержит входы, выходы и блоки, обеспечивающие работу внутренней логики. Позволяет проводить изолированную отладку, при которой значения на входах функционального блока вручную задаются пользователем. Блок, работающий в данном режиме выделяется черной рамкой. Для включения изолированной отладки необходимо открыть блок и нажать кнопку «Изолированная отладка» на панели управления задачей.&lt;br /&gt;
&lt;br /&gt;
'''Блок установки значения'''&lt;br /&gt;
&lt;br /&gt;
Блок осуществляет запись значения, поданного на вход in0, в узел, указанный в свойстве «Узел для чтения/записи»&lt;br /&gt;
&lt;br /&gt;
'''Блок задержки'''&lt;br /&gt;
&lt;br /&gt;
Блок задержки используется для создания задержки передачи значения с входа блока на выход на один цикл обработки задачи.&lt;br /&gt;
&lt;br /&gt;
'''Блок «Битовое OR»'''&lt;br /&gt;
&lt;br /&gt;
Для вычисления значения будет произведена операция &amp;quot;ИЛИ&amp;quot; над каждым битом значения в отдельности. Например: 1010 OR 0110 = 1110&lt;br /&gt;
&lt;br /&gt;
'''Блок «Логическое И»'''&lt;br /&gt;
&lt;br /&gt;
Если все входные значения становятся равны логической «1», выходное значение становится логической «1» (выход включен).&lt;br /&gt;
&lt;br /&gt;
'''Блок «Битовое AND»'''&lt;br /&gt;
&lt;br /&gt;
Для вычисления значения будет произведена операция &amp;quot;И&amp;quot; над каждым битом значения в отдельности. Если все биты, стоящие на одинаковых позициях в двоичных представлениях значений, поступающих на входы блока, равны логической «1», то на выходе элемента в этой позиции появляется логическая «1» (выход включен). Например: 1010 AND 0110 = 0010&lt;br /&gt;
&lt;br /&gt;
'''Блок «Логическое НЕ»'''&lt;br /&gt;
&lt;br /&gt;
Если входное значение блока становится равно логическому «0», то выходное значение становится логической «1», и наоборот.&lt;br /&gt;
&lt;br /&gt;
'''Блок «Битовое XOR»'''&lt;br /&gt;
&lt;br /&gt;
Если только на один из входов блока функции поступает логическая «1», то на выходе элемента появляется логическая «1». Если на входы блока функции поступают целочисленные значения, то операция будет произведена над каждым битом значения в отдельности. Например: 1010 XOR 0110 = 1100&lt;br /&gt;
&lt;br /&gt;
'''Блок «Битовое SHR»'''&lt;br /&gt;
&lt;br /&gt;
Побитовый логический сдвиг вправо используется для выполнения операции побитового логического сдвига операнда X вправо на N бит с дополнением нулями слева.&lt;br /&gt;
&lt;br /&gt;
'''Блок «Битовое SHL»'''&lt;br /&gt;
&lt;br /&gt;
Побитовый логический сдвиг влево используется для выполнения операции побитового логического сдвига операнда X влево на N бит с дополнением нулями справа.&lt;br /&gt;
&lt;br /&gt;
'''Блок «Таймер»'''&lt;br /&gt;
&lt;br /&gt;
Таймер предназначен для выполнения каких-либо действий (см. раздел 4.6) через одинаковые промежутки времени (например запись значения в узел).&lt;br /&gt;
&lt;br /&gt;
'''Блок «Мультиплексор»'''&lt;br /&gt;
&lt;br /&gt;
Мультплексор осуществляет перевод нескольких булевых переменных в целочисленное значение по формуле: «выход = вход1 + вход2*2^1 + вход3*2^2 + ...»&lt;br /&gt;
&lt;br /&gt;
'''Блок «Демультиплексор»'''&lt;br /&gt;
&lt;br /&gt;
Демультиплексор осуществляет перевод целочисленных значений из массива в несколько булевых переменных, при этом включается выход, номер которого соответствует числу из массива (например первый элемент массива равен 5, на пятом выходе появится значение true). Нумерация выходов начинается с нуля.&lt;br /&gt;
&lt;br /&gt;
'''Блок «Генератор случайного числа»'''&lt;br /&gt;
&lt;br /&gt;
Выходным значением является случайное число в диапазоне между указанным минимальным и максимальным значениями.&lt;br /&gt;
&lt;br /&gt;
'''Блок «Скрипт С++»'''&lt;br /&gt;
&lt;br /&gt;
Операция «Скрипт С++» предназначена для реализации разнообразных алгоритмов на языке С++. Операция предусматривает реализацию одной или нескольких функций, выполняющих необходимые пользователю действия. Для выполнения скрипта, необходимо добавить его в качестве узла для задачи или задачи ПЛК.&lt;br /&gt;
&lt;br /&gt;
Пример скрипта, выполняющего получение значения определенного узла и запись измененного значения в другой узел:&lt;br /&gt;
 float val()&lt;br /&gt;
 {&lt;br /&gt;
     float f = GetNodeValueAsFloat(&amp;quot;/Конфигурация1/stationSimple1/Signals1/Random2&amp;quot;);&lt;br /&gt;
     float f1 = f*100.0;&lt;br /&gt;
     SetNodeValueAsFloat(&amp;quot;/Конфигурация1/stationSimple1/Signals1/Constant3&amp;quot;, f1);&lt;br /&gt;
     return f*10.0;&lt;br /&gt;
 }&lt;br /&gt;
Приведенный выше скрипт возвращает исходное значение, умноженное на 10. Возвращаемое таким образом значение записывается в выход операции для возможности считывания в других операциях, скриптах и т. д.&lt;br /&gt;
&lt;br /&gt;
Скрипты могут возвращать значения следующих типов:&lt;br /&gt;
&lt;br /&gt;
* void;&lt;br /&gt;
*float;&lt;br /&gt;
*double;&lt;br /&gt;
*int.&lt;br /&gt;
&lt;br /&gt;
Подробное описание реализации языка С++ в AgavaSCADA/AgavaPLC приведено на странице &amp;quot;[[Описание языка С++ в AgavaPLC]]&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
'''Блок «Таймер с задержкой»'''&lt;br /&gt;
&lt;br /&gt;
Таймер с задержкой используется для операции задержки передачи и/или отключения сигнала. На выходе таймера появится сигнал логической «1» с задержкой относительно фронта входного сигнала продолжительностью равной интервалу включения и выключится по спаду входного сигнала с задержкой продолжительностью равной интервалу выключения. В том случае, если необходимо использовать блок только как таймер с задержкой включения (отключения) интервал выключения (включения) устанавливается равным 0.&lt;br /&gt;
&lt;br /&gt;
'''Блок «Генератор прямоугольных импульсов»'''&lt;br /&gt;
&lt;br /&gt;
Генератор прямоугольных импульсов используется для формирования прямоугольных импульсов пульсации. На выходе генератора формируются импульсы с заданными параметрами длительности включенного и отключенного импульса на время действия управляющего сигнала на входе (сигнал логической «1»).&lt;br /&gt;
&lt;br /&gt;
'''Блок «Триггер RS»'''&lt;br /&gt;
&lt;br /&gt;
RS-триггер с приоритетом выключения используется для переключения с фиксацией состояния во время поступления коротких импульсов на соответствующий вход. На выходе появится логическая «1» по фронту сигнала на входе Set, которая будет сброшена в «0», при поступлении импульса на вход Reset.&lt;br /&gt;
&lt;br /&gt;
'''Блок «Триггер SR»'''&lt;br /&gt;
&lt;br /&gt;
SR-триггер с приоритетом включения используется для переключения с фиксацией состояния в случае поступления коротких импульсов на соответствующий вход. На выходе появится логическая «1» по фронту сигнала на входе Set, которая будет сброшена в «0», при поступлении импульса на вход Reset.&lt;br /&gt;
&lt;br /&gt;
'''Блок «Детектор переднего фронта импульса»'''&lt;br /&gt;
&lt;br /&gt;
Детектор переднего фронта импульса используется в случае необходимости иметь реакцию на изменение состояния дискретного входного сигнала. На выходе генерируется единичный импульс при изменении состояния входа из «0» в «1».&lt;br /&gt;
&lt;br /&gt;
'''Блок «Детектор заднего фронта импульса»'''&lt;br /&gt;
&lt;br /&gt;
Детектор заднего фронта импульса используется в случае необходимости иметь реакцию на изменение состояния дискретного входного сигнала. На выходе генерируется единичный импульс при изменении состояния входа из «1» в «0».&lt;br /&gt;
&lt;br /&gt;
'''Блок «D-триггер»'''&lt;br /&gt;
&lt;br /&gt;
D-триггер используется для формирования импульса включения выхода на интервал времени импульса на входе D, выходной интервал будет синхронизирован с тактовой частотой на входе С. На выходе Q триггера появится сигнал логической «1» по фронту тактовых импульсов на входе С при наличии сигнала логической «1» на входе D. Возврат выхода в сигнал логического «0» произойдет по фронту тактовых импульсов на входе С при наличии сигнала логического «0» на входе D. Вход Set принудительно устанавливает выход в состояние логической «1». Вход Reset является приоритетным и устанавливает выход в состояние логического «0».&lt;br /&gt;
&lt;br /&gt;
'''Блок «Селектор»'''&lt;br /&gt;
&lt;br /&gt;
Если на вход Value подается логическая «1», то результатом выполнения операции блока на выходе является входной сигнал ValueT. Если же Value равен логической «0», то результатом выполнения операции блока на выходе является входной сигнал ValueF.&lt;br /&gt;
&lt;br /&gt;
'''Блок «Больше чем»'''&lt;br /&gt;
&lt;br /&gt;
На выход подается логическая «1», если значение in0 больше чем значение in1.&lt;br /&gt;
&lt;br /&gt;
'''Блок «Равенство»'''&lt;br /&gt;
&lt;br /&gt;
На выход подается логическая «1», если значение in0 равно значению in1.&lt;br /&gt;
&lt;br /&gt;
'''Блок «Абсолютное значение числа»'''&lt;br /&gt;
&lt;br /&gt;
Результатом операции функции на выходе является модуль подаваемого на вход значения. Если число на входе положительное, то на выход подается само число, если отрицательное – положительное число, получаемое от перемены его знака с «-» на «+».&lt;br /&gt;
&lt;br /&gt;
'''Блок «Возведение в степень»'''&lt;br /&gt;
&lt;br /&gt;
Результатом операции функции на выходе является значение, равное значению in0, возведенному в степень значения N.&lt;br /&gt;
&lt;br /&gt;
'''Блок «PID-регулятор»'''&lt;br /&gt;
&lt;br /&gt;
Регулятор PID применяется для поддержания заданного значения параметра. На вход Pv подается текущее значение регулируемой величины, на Sp – ее заданное значение. С помощью изменения коэффициентов ПИД регулятора kP, kI и kD достигается оптимальный режим работы. Min задает минимальное значение на выходе, Max – максимальное. time - период регулятора (в мс.).&lt;br /&gt;
&lt;br /&gt;
'''Блок «PWM-регулятор»'''&lt;br /&gt;
&lt;br /&gt;
Применяется для преобразования аналогового сигнала в дискретный с помощью ШИМ. На вход in подается текущее значение регулируемой величины, Min задает минимальное значение на входе, Max – максимальное. time - период регулятора (в мс.)&lt;br /&gt;
&lt;br /&gt;
==Устройства==&lt;br /&gt;
Группа «Устройства» предназначена для группировки узлов типа &amp;quot;Устройство&amp;quot;, выполняющие разнообразные задачи, например работа с внешними накопителями и ПЗУ. &lt;br /&gt;
&lt;br /&gt;
Retain-накопитель дает возможность хранить значения регистров, постоянных и сигналов в постоянной памяти контроллера, что позволяет им сохранять свои значения после отключения питания.&lt;br /&gt;
&lt;br /&gt;
Для сохранения переменных необходимо перечислить их в свойстве «Узлы» и указать путь сохранения на выбранном накопителе.&lt;br /&gt;
&lt;br /&gt;
== Отчеты==&lt;br /&gt;
{{Внимание|Тип=Восклицание желтый.png|Текст=Данный узел доступен только при  исполнении проекта на настольном компьютере. На панелях оператора и контроллерах МПР этот узел не доступен.}}&lt;br /&gt;
Отчет – технологический документ, содержащий информацию о ходе производственного процесса, обработанную по заложенным в отчет алгоритмам. Отчеты формируются на основе макетов (статической части отчетов) путем добавления в них свойств и значений заданных параметров технологического процесса, которые формируются (выбираются из базы данных технологических параметров и проходят соответствующую обработку) по алгоритмам, размещенным в этих шаблонах.&lt;br /&gt;
&lt;br /&gt;
Данные для отчета предоставляет выборка, осуществляющая получение данных и их обработку из базы данных.&lt;br /&gt;
&lt;br /&gt;
===Создание нового отчета===&lt;br /&gt;
Создание любого отчета производится в два этапа.&lt;br /&gt;
&lt;br /&gt;
#Создание необходимых узлов в конфигурации: сам отчет и необходимое количество выборок.&lt;br /&gt;
#Составление макета отчета.&lt;br /&gt;
&lt;br /&gt;
Создание узла типа «Отчет» в конфигурации и выборок для него производится аналогично созданию узлов других типов. К станции добавляется узел типа «Отчеты» с помощью команды контекстного меню «Добавить узел», далее к узлу типа «Отчеты» добавляется отчет и к отчету добавляется необходимое количество выборок.&lt;br /&gt;
&lt;br /&gt;
Выборка – специальный узел, предназначенный для выборки данных из архива и их обработки для последующего отображения в отчете.&lt;br /&gt;
&lt;br /&gt;
Перед переходом к редактированию макета желательно проделать следующие операции:&lt;br /&gt;
&lt;br /&gt;
*в свойстве отчета «Путь к файлу отчета» установить имя файла, в котором будет храниться макет отчета;&lt;br /&gt;
* в свойстве «Источники» выборки (выборок) отчета установить перечень архивных сигналов (коннекторов), которые будут выводиться в отчете.&lt;br /&gt;
&lt;br /&gt;
===Редактирование макета отчета===&lt;br /&gt;
[[Файл:AgavaPLC–Редактор макета отчета.png|мини|Рисунок 42 – Редактор макета отчета]]&lt;br /&gt;
Для редактирования макета отчета необходимо переключиться из редактора конфигурации в редактор макета отчета с помощью команды «Открыть редактор макета отчета», доступной из контекстного меню дерева конфигурации, отображаемого при щелчке правой кнопкой мыши на узле типа «Отчет».&lt;br /&gt;
&lt;br /&gt;
В окне редактора расположены:&lt;br /&gt;
&lt;br /&gt;
*панели инструментов;&lt;br /&gt;
* панель объектов отчета;&lt;br /&gt;
*окно «Инспектор объектов»;&lt;br /&gt;
*окно «Инспектор данных»;&lt;br /&gt;
*окно «Инспектор скриптов»;&lt;br /&gt;
*область построения макета отчета;&lt;br /&gt;
*окно «Структура отчета».&lt;br /&gt;
&lt;br /&gt;
Редактор макета позволяет вызывать команды сочетаниями клавиш:&lt;br /&gt;
&lt;br /&gt;
*Ctrl + N – новый макет;&lt;br /&gt;
*Ctrl + O – загрузить макет;&lt;br /&gt;
*Ctrl + S – сохранить макет;&lt;br /&gt;
*Ctrl + Shift + S – сохранить макет под новым именем;&lt;br /&gt;
*Ctrl + P – предварительный просмотр;&lt;br /&gt;
*Ctrl + Z – отмена изменений;&lt;br /&gt;
*Ctrl + Shift + Z – возврат отмененных изменений;&lt;br /&gt;
* Ctrl + C – копировать объект;&lt;br /&gt;
*Ctrl + X – вырезать объект;&lt;br /&gt;
*Ctrl + V – вставить объект;&lt;br /&gt;
*Ctrl + Стрелки – переместить выделенный объект;&lt;br /&gt;
*Shift + Стрелки – изменить размер выделенных объектов;&lt;br /&gt;
*Del – удалить выделенные объекты;&lt;br /&gt;
*Shift + левая кнопка мыши – создать область выделения.&lt;br /&gt;
&lt;br /&gt;
====Окно «Инспектор объектов»====&lt;br /&gt;
Окно «Инспектор объектов» содержит список свойств выделенного объекта и предназначено для их редактирования.&lt;br /&gt;
&lt;br /&gt;
====Окно «Инспектор данных»====&lt;br /&gt;
Окно «Инспектор данных» содержит список доступных для использования источников данных (выборок) и предназначено для заполнения блока «Данные» элементами соответствующего типа.&lt;br /&gt;
&lt;br /&gt;
====Окно «Инспектор скриптов»====&lt;br /&gt;
Окно «Инспектор скриптов» содержит список доступных для использования в отчете скриптов.&lt;br /&gt;
&lt;br /&gt;
====Окно «Структура отчета»====&lt;br /&gt;
Окно «Структура отчет» отображает структуру отчета в виде дерева связанных элементов.&lt;br /&gt;
&lt;br /&gt;
===Элементы отчета===&lt;br /&gt;
Для составления макета отчета доступны следующие элементы:&lt;br /&gt;
&lt;br /&gt;
*текст;&lt;br /&gt;
*данные;&lt;br /&gt;
*изображение;&lt;br /&gt;
*фигура;&lt;br /&gt;
*компоновка (Layout).&lt;br /&gt;
&lt;br /&gt;
====Текст====&lt;br /&gt;
Элемент «Текст» служит для вывода надписей или содержимого полей источников данных.&lt;br /&gt;
&lt;br /&gt;
Объект «Текст» обладает очень широкими возможностями. Он умеет отображать текст, рамку, заливку. Текст может быть отображен любым шрифтом любого размера, цвета и стиля. Большинство настроек делаются визуально с помощью панелей инструментов.&lt;br /&gt;
&lt;br /&gt;
Одна из самых главных особенностей этого универсального объекта – это возможность отображения не только статичного текста, но и текста с применением вычисляемых выражений. Причем, выражения могут располагаться в объекте вперемешку с текстом. Рассмотрим простой пример – поместим в объект «Текст» следующую строку: «Привет! Сегодня $S{now()}».&lt;br /&gt;
&lt;br /&gt;
Если запустить отчет на построение, мы увидим приблизительно следующее: «Привет! Сегодня 2018­08­03». В процессе построения отчета выражение в тексте, заключенное $S{}, было вычислено и полученное значение вставлено обратно в текст. Объект «Текст» может содержать любое количество выражений, смешанных с обычным текстом. В скобки можно заключать и одиночные переменные, и выражения, например, $S{1+2*(3+4)}. В выражениях можно использовать константы, переменные ($V{}), функции, поля БД ($D{}).&lt;br /&gt;
&lt;br /&gt;
Свойства элемента «Текст»:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Наименование свойства&lt;br /&gt;
!Описание&lt;br /&gt;
|-&lt;br /&gt;
|alignment&lt;br /&gt;
|Выравнивание текста по вертикали и горизонтали&lt;br /&gt;
|-&lt;br /&gt;
|angle&lt;br /&gt;
|Поворот надписи&lt;br /&gt;
|-&lt;br /&gt;
|autoHeight&lt;br /&gt;
|Автоматический подбор высоты&lt;br /&gt;
|-&lt;br /&gt;
|autoWidth&lt;br /&gt;
|Автоматический подбор ширины&lt;br /&gt;
|-&lt;br /&gt;
|backgroundColor&lt;br /&gt;
|Цвет заливки&lt;br /&gt;
|-&lt;br /&gt;
|backgroundMode&lt;br /&gt;
|Режим заливки&lt;br /&gt;
|-&lt;br /&gt;
| backgroundOpacity&lt;br /&gt;
|Прозрачность заливки&lt;br /&gt;
|-&lt;br /&gt;
|borders&lt;br /&gt;
|Границы&lt;br /&gt;
|-&lt;br /&gt;
|content&lt;br /&gt;
|Содержимое объекта «Текст»&lt;br /&gt;
|-&lt;br /&gt;
|font&lt;br /&gt;
|Шрифт&lt;br /&gt;
|-&lt;br /&gt;
|fontColor&lt;br /&gt;
|Цвет шрифта&lt;br /&gt;
|-&lt;br /&gt;
| foregroundOpacity&lt;br /&gt;
|Прозрачность шрифта&lt;br /&gt;
|-&lt;br /&gt;
|geometry&lt;br /&gt;
|Размер и расположение объекта&lt;br /&gt;
|-&lt;br /&gt;
|itemLocation&lt;br /&gt;
|Расположение объекта (страница или бэнд)&lt;br /&gt;
|-&lt;br /&gt;
|margin&lt;br /&gt;
|Отступы&lt;br /&gt;
|-&lt;br /&gt;
|objectName&lt;br /&gt;
| Имя объекта&lt;br /&gt;
|-&lt;br /&gt;
|stretchToMaxHeight&lt;br /&gt;
|Установка значения высоты самого высокого объекта на бэнде&lt;br /&gt;
|-&lt;br /&gt;
|trimValue&lt;br /&gt;
|Удаление  пробелов в начале и в конце надписи&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Для редактирования свойства «Content» используется диалоговое окно «Text Item Editor», вызов которого осуществляется двойным щелчком левой кнопки мыши на элементе «Текст».&lt;br /&gt;
&lt;br /&gt;
Свойство «Content» может содержать: &lt;br /&gt;
&lt;br /&gt;
*текст;&lt;br /&gt;
*значения переменных;&lt;br /&gt;
*значения полей из набора данных;&lt;br /&gt;
*значения, формируемые посредством исполнения скрипта.&lt;br /&gt;
&lt;br /&gt;
Для вывода значений переменных используется синтаксис «$V{имяПеременной}» (без кавычек), для вывода значения поля данных – «$D{имяНабораДанных.ИмяПеременной}», для вывода результата исполнения скрипта – «$S{телоСкрипта}».&lt;br /&gt;
&lt;br /&gt;
==== Изображение ====&lt;br /&gt;
Элемент для вывода изображений:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Наименование свойства&lt;br /&gt;
!Описание&lt;br /&gt;
|-&lt;br /&gt;
|autoSize&lt;br /&gt;
|Подгонять размер под размер изображения&lt;br /&gt;
|-&lt;br /&gt;
|borders&lt;br /&gt;
|Границы&lt;br /&gt;
|-&lt;br /&gt;
|content  &lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|datasource&lt;br /&gt;
|Источник данных&lt;br /&gt;
|-&lt;br /&gt;
|field&lt;br /&gt;
|Поле данных&lt;br /&gt;
|-&lt;br /&gt;
|geometry&lt;br /&gt;
|Размер и расположение&lt;br /&gt;
|-&lt;br /&gt;
|image&lt;br /&gt;
|Изображение&lt;br /&gt;
|-&lt;br /&gt;
| itemLocation&lt;br /&gt;
|Расположение объекта (страница или бэнд)&lt;br /&gt;
|-&lt;br /&gt;
|objectName&lt;br /&gt;
|Имя объекта&lt;br /&gt;
|-&lt;br /&gt;
| stretchToMaxHeight&lt;br /&gt;
|Устанавливать значение высоты самого высокого объекта на  бэнде&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
====Фигура====&lt;br /&gt;
Элемент для вывода фигур:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Наименование свойства&lt;br /&gt;
!Описание&lt;br /&gt;
|-&lt;br /&gt;
|borders&lt;br /&gt;
|Границы&lt;br /&gt;
|-&lt;br /&gt;
| geometry&lt;br /&gt;
|Размер и расположение&lt;br /&gt;
|-&lt;br /&gt;
|itemLocation&lt;br /&gt;
|Расположение объекта (страница или бэнд)&lt;br /&gt;
|-&lt;br /&gt;
|lineWidth&lt;br /&gt;
|Толщина линии&lt;br /&gt;
|-&lt;br /&gt;
|objectName&lt;br /&gt;
|Имя объекта&lt;br /&gt;
|-&lt;br /&gt;
|opacity&lt;br /&gt;
|Прозрачность&lt;br /&gt;
|-&lt;br /&gt;
|penStyle&lt;br /&gt;
|Стиль линии&lt;br /&gt;
|-&lt;br /&gt;
|shape&lt;br /&gt;
|Фигура&lt;br /&gt;
|-&lt;br /&gt;
|shapeBrush&lt;br /&gt;
|Стиль заливки&lt;br /&gt;
|-&lt;br /&gt;
|shapeBrushColor&lt;br /&gt;
|Цвет заливки&lt;br /&gt;
|-&lt;br /&gt;
|shapeColor&lt;br /&gt;
|Цвет фигуры&lt;br /&gt;
|-&lt;br /&gt;
|stretchToMaxHeight&lt;br /&gt;
|Устанавливать значение высоты самого высокого объекта на  бэнде&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
====Горизонтальная компоновка (Layout)====&lt;br /&gt;
Элемент, позволяющий объединять несколько элементов в группу:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Наименование свойства&lt;br /&gt;
!Описание&lt;br /&gt;
|-&lt;br /&gt;
|borders&lt;br /&gt;
|Границы&lt;br /&gt;
|-&lt;br /&gt;
|geometry&lt;br /&gt;
|Размер и расположение&lt;br /&gt;
|-&lt;br /&gt;
|itemLocation&lt;br /&gt;
|Расположение объекта (страница или бэнд)&lt;br /&gt;
|-&lt;br /&gt;
|objectName&lt;br /&gt;
|Имя объекта&lt;br /&gt;
|-&lt;br /&gt;
|stretchToMaxHeight&lt;br /&gt;
|Устанавливать значение высоты самого высокого объекта на  бэнде&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Разделы отчета (бэнды) ===&lt;br /&gt;
Бэнд предназначен для размещения других элементов отчета. Бэнд может быть нескольких типов:&lt;br /&gt;
&lt;br /&gt;
*Report Header – заголовок отчета;&lt;br /&gt;
*Report Footer – завершение отчета;&lt;br /&gt;
*Page Header – верхний колонтитул страницы отчета;&lt;br /&gt;
*Page Footer – нижний колонтитул страницы отчета;&lt;br /&gt;
*Data – данные отчета;&lt;br /&gt;
* SubDetail – подчиненные данные отчета;&lt;br /&gt;
*SubDetailHeader – заголовок подчиненных данных;&lt;br /&gt;
*SubDetailFooter – завершение подчиненных данных;&lt;br /&gt;
*GroupHeader – заголовок группы;&lt;br /&gt;
*GroupFooter – завершение группы.&lt;br /&gt;
&lt;br /&gt;
Бэнды применяются для логической группировки объектов. К примеру, размещение объекта на элементе «Данные» типа «Page Header», приводит к отображению этого объекта в верхней части каждой страницы готового отчета. Аналогичным образом «Page Footer» выводится внизу каждой страницы со всеми лежащими на нем объектами.&lt;br /&gt;
&lt;br /&gt;
Общие для всех элементов «Данные» свойства:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Наименование свойства&lt;br /&gt;
!Описание&lt;br /&gt;
|-&lt;br /&gt;
|autoHeight&lt;br /&gt;
|Автоматический подбор высоты&lt;br /&gt;
|-&lt;br /&gt;
|backgroundColor&lt;br /&gt;
|Цвет заливки бэнда&lt;br /&gt;
|-&lt;br /&gt;
|borders&lt;br /&gt;
|Границы&lt;br /&gt;
|-&lt;br /&gt;
|geometry&lt;br /&gt;
|Размер&lt;br /&gt;
|-&lt;br /&gt;
|keepBottomSpace&lt;br /&gt;
|Сохранение отступа от нижней границы бэнда&lt;br /&gt;
|-&lt;br /&gt;
|objectName&lt;br /&gt;
|Имя объекта&lt;br /&gt;
|-&lt;br /&gt;
|printIfEmpty&lt;br /&gt;
|Отображение пустого бэнда&lt;br /&gt;
|-&lt;br /&gt;
|splittable&lt;br /&gt;
|Разделение  бэнда, если он не влезает на страницу&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Report Footer:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Наименование свойства&lt;br /&gt;
!Описание&lt;br /&gt;
|-&lt;br /&gt;
|maxScalePercent&lt;br /&gt;
|Максимальный процент, на который можно уменьшить бенд, если он не влезает на страницу. Если бэнд даже после сжатия&lt;br /&gt;
&lt;br /&gt;
не влезает на страницу, он будет перенесен полностью или частично  – в зависимости от настроек бэнда&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Data:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Наименование свойства&lt;br /&gt;
!Описание&lt;br /&gt;
|-&lt;br /&gt;
|datasource&lt;br /&gt;
|Источник данных. Data-бэнд будет сформирован для каждой строки в источнике данных&lt;br /&gt;
|-&lt;br /&gt;
|keepFooterTogether&lt;br /&gt;
|Если Report Footer не влезает на страницу, то он будет перенесен на следующую страницу совместно с последним&lt;br /&gt;
&lt;br /&gt;
экземпляром Data-бэнда&lt;br /&gt;
|-&lt;br /&gt;
|sliceLastRow&lt;br /&gt;
| Указывает генератору отчетов на то, можно ли разрезать последний экземпляр Data-бэнда или его нужно перенести&lt;br /&gt;
&lt;br /&gt;
целиком&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Бэнды данного типа предназначены для вывода на печать данных из наборов. Набор данных - это заранее неизвестное количество строк (записей), каждая из которых содержит определенное количество колонок (полей).&lt;br /&gt;
&lt;br /&gt;
SubDetail:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Наименование свойства&lt;br /&gt;
!Описание&lt;br /&gt;
|-&lt;br /&gt;
|datasource&lt;br /&gt;
| Источник данных. SubDetail-бэнд будет сформирован для каждой строки в источнике данных&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
SubDetailHeader, SubDetailFooter:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Наименование свойства&lt;br /&gt;
!Описание&lt;br /&gt;
|-&lt;br /&gt;
|printAlways&lt;br /&gt;
| Печатать, даже если SubDetail пустой&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
GroupHeader:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Наименование свойства&lt;br /&gt;
! Описание&lt;br /&gt;
|-&lt;br /&gt;
|groupFieldName&lt;br /&gt;
|Поле, по которому осуществляется группировка. Экземпляр GroupHeader будет формироваться при смене значения в этом  поле&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===Функции===&lt;br /&gt;
==== Агрегатные функции ====&lt;br /&gt;
Агрегатные функции предназначены для обработки значений, содержащихся в резделах Data и SubDetail.&lt;br /&gt;
&lt;br /&gt;
===== AVG - вычисление среднего значения =====&lt;br /&gt;
Пример использования:&lt;br /&gt;
 $S{AVG(&amp;quot;TextItem4&amp;quot;,&amp;quot;DataBand1&amp;quot;);}&lt;br /&gt;
&lt;br /&gt;
===== SUM - вычисление суммы значений =====&lt;br /&gt;
Пример использования:&lt;br /&gt;
 $S{SUM(&amp;quot;TextItem8&amp;quot;,&amp;quot;DataBand1&amp;quot;);}&lt;br /&gt;
&lt;br /&gt;
===== MIN =====&lt;br /&gt;
&lt;br /&gt;
===== MAX =====&lt;br /&gt;
&lt;br /&gt;
===== COUNT =====&lt;br /&gt;
&lt;br /&gt;
==== Числовые функции ====&lt;br /&gt;
&lt;br /&gt;
===== numberFormat - форматирование числа =====&lt;br /&gt;
Синтаксис:&lt;br /&gt;
 numberFormat(значение, 'формат', точность)&lt;br /&gt;
Форматы:&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;'f'&amp;lt;/code&amp;gt; — фиксированная запись (например, &amp;lt;code&amp;gt;&amp;quot;123.45&amp;quot;&amp;lt;/code&amp;gt;);&lt;br /&gt;
* &amp;lt;code&amp;gt;'g'&amp;lt;/code&amp;gt; — общий формат (автоматически выбирает между &amp;lt;code&amp;gt;'f'&amp;lt;/code&amp;gt; и &amp;lt;code&amp;gt;'e'&amp;lt;/code&amp;gt;);&lt;br /&gt;
* &amp;lt;code&amp;gt;'e'&amp;lt;/code&amp;gt; — экспоненциальная запись (например, &amp;lt;code&amp;gt;&amp;quot;1.2345e+02&amp;quot;&amp;lt;/code&amp;gt;);&lt;br /&gt;
&lt;br /&gt;
Пример использования:&lt;br /&gt;
 $S{numberFormat($D{fetcharchiverdata1.ArchiversSourceConnector0 (среднее)}, 'f', 3)}       -&amp;gt; 123.495&lt;br /&gt;
[[Категория:AgavaSCADA/AgavaPLC]]&lt;/div&gt;</summary>
		<author><name>SharipovRR</name></author>
	</entry>
	<entry>
		<id>https://docs.kb-agava.ru/index.php?title=%D0%9F%D0%B5%D1%80%D0%B5%D1%87%D0%B5%D0%BD%D1%8C_%D0%B8%D0%B7%D0%BC%D0%B5%D0%BD%D0%B5%D0%BD%D0%B8%D0%B9_AgavaSCADA/AgavaPLC_1.6&amp;diff=3193</id>
		<title>Перечень изменений AgavaSCADA/AgavaPLC 1.6</title>
		<link rel="alternate" type="text/html" href="https://docs.kb-agava.ru/index.php?title=%D0%9F%D0%B5%D1%80%D0%B5%D1%87%D0%B5%D0%BD%D1%8C_%D0%B8%D0%B7%D0%BC%D0%B5%D0%BD%D0%B5%D0%BD%D0%B8%D0%B9_AgavaSCADA/AgavaPLC_1.6&amp;diff=3193"/>
		<updated>2025-09-04T08:55:40Z</updated>

		<summary type="html">&lt;p&gt;SharipovRR: /* Узлы */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Основные изменения в сравнении с версией 1.2:&lt;br /&gt;
&lt;br /&gt;
# Добавлена возможность создания программ на языке C++ в соответствии с подходом, описанным в стандарте МЭК 61131-3.&lt;br /&gt;
# Продолжение развития объектной модели и возможности разработки программ, начатых в версии &amp;lt;code&amp;gt;AS 1.5&amp;lt;/code&amp;gt;. [[Объектная модель AgavaSCADA/AgavaPLC]].&lt;br /&gt;
# Добавлена поддержка локального и онлайн (удаленного) отладчика.&lt;br /&gt;
# Для редактирования текстов программ, функций и классов внедрен новый, удобный и функциональный текстовый редактор, подобный распространенному VSCode.&lt;br /&gt;
# Транспорты MQTT, SNMP, МЭК 60870-5-101, МЭК 60870-5-104 портированы на ПК с ОС Linux x64 и контроллеры АГАВА.&lt;br /&gt;
# Реализован новый архиватор в БД PostgreSQL.&lt;br /&gt;
# Добавлена поддержка ресурсов и библиотек ресурсов.&lt;br /&gt;
# Добавлена Web-визуализация. См. пример &amp;lt;code&amp;gt;MultiImageLabel&amp;lt;/code&amp;gt;.&lt;br /&gt;
# Разработан ряд примеров, демонстрирующих новые возможности: &amp;lt;code&amp;gt;PIDRegulator&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;Leds&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;Wdt&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;AgavaAnalogInput&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;WidgetAgavaInput&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;Pump&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;MultiImageLabel&amp;lt;/code&amp;gt; и другие.&lt;br /&gt;
Также запланировано добавление новых возможностей:&lt;br /&gt;
# Поддержка языка ST МЭК 61131-3  (Structured text).&lt;br /&gt;
# Поддержка распределенных проектов.&lt;br /&gt;
# Поддержка сохранения в проекте информации о целевой системе.&lt;br /&gt;
# Конфигурирование целевых устройств из проекта.&lt;br /&gt;
# Создание расширений для среды разработки с помощью SDK.&lt;br /&gt;
Перевод разработанных ранее проектов на актуальную версию описан в документе [[Миграция проектов AgavaSCADA/AgavaPLC]].&lt;br /&gt;
&lt;br /&gt;
== 1.6.20-r0ad724e1e636 от 2025-08-08 ==&lt;br /&gt;
&lt;br /&gt;
=== Узлы ===&lt;br /&gt;
&lt;br /&gt;
# Добавлена функция &amp;lt;code&amp;gt;int StoreMessage(int iMessageLevel, string strMessage, string strGroup).&amp;lt;/code&amp;gt;&lt;br /&gt;
# Добавлена возможность вызова методов экземпляров объектов из действий.&lt;br /&gt;
# Исправлено выполнение действия &amp;lt;code&amp;gt;Создание события&amp;lt;/code&amp;gt;, теперь возможно создание событий из обработчиков.&lt;br /&gt;
# В тренды графиков добавлено свойство &amp;lt;code&amp;gt;Единицы измерения&amp;lt;/code&amp;gt;.&lt;br /&gt;
# Добавлен межстанционный транспорт. Для станций добавлено свойство &amp;lt;code&amp;gt;Роль&amp;lt;/code&amp;gt;. Станция с ролью &amp;lt;code&amp;gt;Клиент&amp;lt;/code&amp;gt; производит подключение к удаленным станциям с ролью &amp;lt;code&amp;gt;Сервер&amp;lt;/code&amp;gt; и уведомляет об изменениях источников и сигналов.&lt;br /&gt;
# Устранена ошибочная генерация нескольких дублирующихся событий при работе контроллеров событий.&lt;br /&gt;
# В окне &amp;lt;code&amp;gt;Фильтр&amp;lt;/code&amp;gt; виджета &amp;lt;code&amp;gt;Список событий&amp;lt;/code&amp;gt; размер элементов теперь зависит от свойства системы тревог &amp;lt;code&amp;gt;Размер кнопки&amp;lt;/code&amp;gt;.&lt;br /&gt;
# Доработаны транспорты &amp;lt;code&amp;gt;Modbus&amp;lt;/code&amp;gt;:&lt;br /&gt;
#* добавлена [[Транспорты AgavaSCADA/AgavaPLC#Этап 2. Объединение команд записи (функции 15 и 16)|группировка команд записи]] для функций 15 и 16;&lt;br /&gt;
#* реализована [[Транспорты AgavaSCADA/AgavaPLC#Этап 1. Дедупликация при постановке в очередь|дедупликация команд записи]].&lt;br /&gt;
# Доработан транспорт OPC-UA: &lt;br /&gt;
#* исправлены типы свойств;&lt;br /&gt;
#* сервер теперь привязывается к порту, указанному в свойстве &amp;lt;code&amp;gt;Адрес&amp;lt;/code&amp;gt; (ранее всегда использовался 4840).&lt;br /&gt;
&lt;br /&gt;
=== Среда разработки ===&lt;br /&gt;
&lt;br /&gt;
# Устранена ошибка при перетаскивании разделителя столбцов.&lt;br /&gt;
# Свойство &amp;quot;Аргументы&amp;quot; программы сделано скрытым.&lt;br /&gt;
# Добавлена возможность размещения определений классов в приложении в подгруппах любой вложенности.&lt;br /&gt;
&lt;br /&gt;
== 1.6.19-r89b594033f4d от 2025-09-02 ==&lt;br /&gt;
&lt;br /&gt;
=== Узлы ===&lt;br /&gt;
&lt;br /&gt;
# Реализовано определение локальной станции для запуска проекта.&lt;br /&gt;
# Исправлен запуск узла типа &amp;lt;code&amp;gt;Сигнал простой&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Среда разработки ===&lt;br /&gt;
&lt;br /&gt;
# В мастер создания проектов добавлена поддержка АГАВА ПЛК-70.А.&lt;br /&gt;
# Исправлена конвертация виджетов &amp;lt;code&amp;gt;Ввод значения&amp;lt;/code&amp;gt; при обновлении проекта с версии 1.2.&lt;br /&gt;
# Исправлена ошибка в окне настройки исторического графика, связанная с одновременным удалением нескольких трендов.&lt;br /&gt;
# Доработана проверка проекта перед сохранением конфигурации. При обнаружении критических ошибок - отказ сохранения.&lt;br /&gt;
# Добавлена проверки станций на использование адреса 127.0.0.1, на дублирующиеся IP-адреса.&lt;br /&gt;
&lt;br /&gt;
== 1.6.18-r4a325427448b от 2025-08-06 ==&lt;br /&gt;
&lt;br /&gt;
=== Узлы ===&lt;br /&gt;
&lt;br /&gt;
# Доработана установка аргументов в вызываемые методы экземпляров (добавлен тип &amp;lt;code&amp;gt;string&amp;lt;/code&amp;gt; для некоторых сценариев).&lt;br /&gt;
# Доработаны узлы &amp;lt;code&amp;gt;Транспорт Modbus-TCP&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;Транспорт Modbus-RTU&amp;lt;/code&amp;gt;: &lt;br /&gt;
#* Добавлен узел типа &amp;lt;code&amp;gt;Счетчик&amp;lt;/code&amp;gt;, хранящий признак активного подключения к устройству с заданным Modbus адресом.&lt;br /&gt;
# Доработан узел &amp;lt;code&amp;gt;Транспорт Modbus-TCP&amp;lt;/code&amp;gt;:&lt;br /&gt;
#* Реализовано множественное подключение клиентов в режиме работы &amp;lt;code&amp;gt;Сервер&amp;lt;/code&amp;gt;.&lt;br /&gt;
#* Доработан режим &amp;lt;code&amp;gt;Сервер&amp;lt;/code&amp;gt;: добавлена возможность настройки таймаута активности клиента и максимального количества подключений к серверу.&lt;br /&gt;
# Узел &amp;lt;code&amp;gt;Шаблонная композиция&amp;lt;/code&amp;gt; убран из списка доступных типов для группы &amp;quot;Композиции&amp;quot;.&lt;br /&gt;
# Исправлена критическая ошибка, изредка возникавшая при переключении окон.&lt;br /&gt;
# Исправлена ошибка выполнения действия Закрытие окна.&lt;br /&gt;
&lt;br /&gt;
=== Среда разработки ===&lt;br /&gt;
&lt;br /&gt;
# Исправлена функция просмотра и редактирования списка источников формы.&lt;br /&gt;
&lt;br /&gt;
# &lt;br /&gt;
&lt;br /&gt;
== 1.6.17-r1f70359a00b4 от 2025-08-01 ==&lt;br /&gt;
&lt;br /&gt;
=== Узлы ===&lt;br /&gt;
&lt;br /&gt;
# Исправлена ошибка передачи аргументов типов &amp;lt;code&amp;gt;float&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;double&amp;lt;/code&amp;gt; в методы классов.&lt;br /&gt;
# Исправлено связывание свойств экземпляров базовых типов с узлами проекта.&lt;br /&gt;
# Доработан вызов методов типа &amp;lt;code&amp;gt;void&amp;lt;/code&amp;gt; классов для исключения критических ошибок.&lt;br /&gt;
# Для кривых графиков изменена толщина линии по умолчанию на &amp;lt;code&amp;gt;1&amp;lt;/code&amp;gt;.&lt;br /&gt;
# Исправлена ошибка в команде &amp;lt;code&amp;gt;Сохранить архив проекта&amp;lt;/code&amp;gt; - устранено ошибочное создание дубликатов некоторых используемых проектом файлов.&lt;br /&gt;
# Доработано восстановление &amp;lt;code&amp;gt;retain&amp;lt;/code&amp;gt; - добавлена возможность восстановления в свойства экземпляров классов.&lt;br /&gt;
# Изменена конвертация &amp;lt;code&amp;gt;Result&amp;lt;/code&amp;gt; в другие типы.&lt;br /&gt;
&lt;br /&gt;
=== Среда разработки ===&lt;br /&gt;
&lt;br /&gt;
# Исправлены ошибки работы отладчика с точками останова в методах и свойствах классов.&lt;br /&gt;
# Изменен уровень ошибок компиляции при поиске путей в проекте (Get/SetNodeValueAs...  и др.) с &amp;lt;code&amp;gt;Ошибка&amp;lt;/code&amp;gt; на &amp;lt;code&amp;gt;Предупреждение&amp;lt;/code&amp;gt;.&lt;br /&gt;
# Реализовано связывание виджетов со свойствами узлов путем перетаскивания.&lt;br /&gt;
# Добавлено местное (inplace) редактирование свойств типа &amp;lt;code&amp;gt;SignalValue&amp;lt;/code&amp;gt; в диалоге редактирования сопоставлений, например в окне редактирования сопоставлений виджета &amp;lt;code&amp;gt;Выпадающий список&amp;lt;/code&amp;gt;.&lt;br /&gt;
# Уточнено сообщение об ошибочном открытии проекта из папки &amp;lt;code&amp;gt;.autosave&amp;lt;/code&amp;gt;.&lt;br /&gt;
# Доработано окно выбора узлов - кнопка &amp;lt;code&amp;gt;ОК&amp;lt;/code&amp;gt; теперь является кнопкой по умолчанию.&lt;br /&gt;
&lt;br /&gt;
=== Примеры ===&lt;br /&gt;
&lt;br /&gt;
# Добавлен пример SQLiteDecimation, демонстрирующий возможности прореживания при записи архива SQLite.&lt;br /&gt;
# Доработан пример TestEventsAlarms.&lt;br /&gt;
&lt;br /&gt;
== 1.6.16-r4dc07fc875a4 от 2025-07-18 ==&lt;br /&gt;
&lt;br /&gt;
=== Узлы ===&lt;br /&gt;
&lt;br /&gt;
# Доработан системный транспорт &amp;lt;code&amp;gt;TransportSystem2&amp;lt;/code&amp;gt; - изменена процедура остановка сервера для устранения незавершенных соединений.&lt;br /&gt;
# Доработаны виджеты &amp;lt;code&amp;gt;Гистограмма&amp;lt;/code&amp;gt; и &amp;lt;code&amp;gt;Кнопка&amp;lt;/code&amp;gt; - исправлена работа с источником.&lt;br /&gt;
# Доработано действие &amp;lt;code&amp;gt;Запуск процесса&amp;lt;/code&amp;gt; - исправлен запуск процесса.&lt;br /&gt;
&lt;br /&gt;
=== Среда разработки ===&lt;br /&gt;
&lt;br /&gt;
# Восстановлено обновление BuildNo и даты сборки проекта.&lt;br /&gt;
&lt;br /&gt;
=== ASLauncher ===&lt;br /&gt;
&lt;br /&gt;
# Убрано диалоговое окно с сообщением о частых попытках перезапуска при выходе.&lt;br /&gt;
# При запуске приложений из `.desktop` файлов добавлена проверка, что логирование в указанные файлы возможно.&lt;br /&gt;
# В файлы логов добавлена информация о версии приложения.&lt;br /&gt;
&lt;br /&gt;
== 1.6.15-r710146e4389e от 2025-07-09 ==&lt;br /&gt;
&lt;br /&gt;
=== Узлы ===&lt;br /&gt;
&lt;br /&gt;
# Узел Система тревог - добавлены настройки окна тревог (ширина, высота, перенос строк в сообщениях).&lt;br /&gt;
# Исправлена ошибка в проверке прав на закрытие фрейма, из-за чего в некоторых проектах без системы проверки прав закрытие фрейма не работало.&lt;br /&gt;
# Виджет &amp;lt;code&amp;gt;Список событий&amp;lt;/code&amp;gt; - исправлена ошибка при работе с диалогом ожидания.&lt;br /&gt;
# Действие &amp;lt;code&amp;gt;Авторизация пользователя&amp;lt;/code&amp;gt; - добавлено свойство &amp;lt;code&amp;gt;Запрашивать пароль&amp;lt;/code&amp;gt;. Действие с включенным свойством &amp;lt;code&amp;gt;Запрашивать пароль&amp;lt;/code&amp;gt; будет отображать окно авторизации без возможности смены пользователя.&lt;br /&gt;
# Реализована возможность инициализации свойств экземпляров объектов постоянными значениями, задаваемыми в среде разработки (доступны типы bool, int, uint, long, ulong, double, string).&lt;br /&gt;
# Для транспортов &amp;lt;code&amp;gt;Modbus-RTU&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;Modbus-TCP&amp;lt;/code&amp;gt; добавлена очистка очереди команд при (ре)старте обмена.&lt;br /&gt;
&lt;br /&gt;
=== Среда разработки ===&lt;br /&gt;
&lt;br /&gt;
# Добавлена поддержка нового системного транспорта. Для подключения к панелям оператора и контроллерам из среды разработки необходимо обновить среду исполнения до версии 1.6.15 или более новой.&lt;br /&gt;
# Добавлена иконка для приложения [[Универсальная среда разработки Agava]] (впервые с версии 1.0!).&lt;br /&gt;
# Исправлены критические ошибки в webvisu из-за отсутствия qml модулей.&lt;br /&gt;
&lt;br /&gt;
=== Среда исполнения ===&lt;br /&gt;
&lt;br /&gt;
# Откорректировано оформление окна авторизации с целью улучшения привлекательности.&lt;br /&gt;
&lt;br /&gt;
=== Примеры ===&lt;br /&gt;
&lt;br /&gt;
# Добавлены примеры &amp;lt;code&amp;gt;MultiImageLabel&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;LayersDemo&amp;lt;/code&amp;gt;. Пример &amp;lt;code&amp;gt;MultiImageLabel&amp;lt;/code&amp;gt; дополнен демонстрацией webvisu.&lt;br /&gt;
# Добавлены примеры &amp;lt;code&amp;gt;OpcUaDemo&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;OpcUaClientDemo&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Версия переведена в стабильную стадию.'''&lt;br /&gt;
&lt;br /&gt;
== 1.6.14-r1c61c35c3da4 от 2025-06-20 ==&lt;br /&gt;
&lt;br /&gt;
=== Среда разработки ===&lt;br /&gt;
&lt;br /&gt;
# Добавлена возможность регулирования частоты обновления форм и экранов с композициями. Добавлено свойство &amp;quot;Интервал обновления&amp;quot; для экранов и композиций.&lt;br /&gt;
# У виджета &amp;quot;График&amp;quot; изменен форматтер оси времени по умолчанию с &amp;quot;dd.MM.yy hh:mm:ss&amp;quot; на &amp;quot;dd.MM.yyyy hh:mm:ss&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
=== Среда исполнения ===&lt;br /&gt;
&lt;br /&gt;
# Оптимизирован вывод информации на экран - исключена повторная отрисовка виджетов, при записи значений в их свойства из скриптов и программ.&lt;br /&gt;
# Реализовано профилирование вызова базовых методов и работы с контекстами.&lt;br /&gt;
# Реализован вывод информации о перерисовке виджетов в консоль с настройкой через файл as.ini.&lt;br /&gt;
&lt;br /&gt;
=== Примеры ===&lt;br /&gt;
&lt;br /&gt;
# Добавлен пример &amp;lt;code&amp;gt;WindowUpdateRate&amp;lt;/code&amp;gt;, демонстрирующий возможность ограничения частоты обновления окон.&lt;br /&gt;
&lt;br /&gt;
== 1.6.13-r13248581de39 от 2025-06-17 ==&lt;br /&gt;
&lt;br /&gt;
=== Среда разработки ===&lt;br /&gt;
&lt;br /&gt;
# Исправлена ошибка функции &amp;quot;Просмотр событий&amp;quot;, из-за которой некорректно выдавались события в проектах без логгеров.&lt;br /&gt;
# Реализовано копирование станций ПК-40, ПК-50, ПК-60.&lt;br /&gt;
# Устранено сохранение в архив проекта файлов .bi?, хранящихся в подпапках, начинающихся с точки. Например .autosave, .backup&lt;br /&gt;
# Разрешено добавление приложений к станциям ПО-40, ПО-50, ПО-60.&lt;br /&gt;
# Убрана зависимость от библиотеки libclang.&lt;br /&gt;
&lt;br /&gt;
=== Среда исполнения ===&lt;br /&gt;
&lt;br /&gt;
# Реализован вывод информации о регионах перерисовки окон в консоль с настройкой через файл as.ini.&lt;br /&gt;
# Доработаны методы BasicSignal::GetValue, BasicSignal::SetValue для корректного обращения к узлам проекта.&lt;br /&gt;
# Исправлена ошибка в работе со светодиодами станции ПК-40.&lt;br /&gt;
# Исправлено создание BasicSource(&amp;quot;path&amp;quot;), BasicSignal(&amp;quot;path&amp;quot;), BasicWidget(&amp;quot;path&amp;quot;) в программах. Теперь появилась возможность доступа ко всем свойствам узла проекта, а не только к свойствам, определенным в BasicNode.&lt;br /&gt;
# Добавлена проверка типа при создании экземпляра BasicSource (ОМ).&lt;br /&gt;
&lt;br /&gt;
=== Примеры ===&lt;br /&gt;
&lt;br /&gt;
# Разработан пример &amp;lt;code&amp;gt;Leds&amp;lt;/code&amp;gt;, демонстрирующий работу со светодиодами ПО-50 из программы с использованием объектной модели.&lt;br /&gt;
&lt;br /&gt;
=== ASLauncher ===&lt;br /&gt;
&lt;br /&gt;
# Добавлен скрипт для восстановления &amp;lt;code&amp;gt;explorer.exe&amp;lt;/code&amp;gt; в качестве оболочки рабочего стола после установки ASLauncher.&lt;br /&gt;
&lt;br /&gt;
== 1.6.12-r17b244111a8c от 2025-05-30 ==&lt;br /&gt;
&lt;br /&gt;
=== Среда разработки ===&lt;br /&gt;
&lt;br /&gt;
# Исправлена ошибка, возникавшая при перемещении узлов в дереве проекта, из-за которой перемещаемые узлы пропадали.&lt;br /&gt;
# Добавлено текстовое описание при появлении окна с ошибками, например при сохранении проекта.&lt;br /&gt;
# Узел &amp;lt;code&amp;gt;Операция Пара условий&amp;lt;/code&amp;gt; - исправлены имена свойств. В проектах версии 1.2 операция не работала в режиме проверки двух условий. '''Необходимо проверить корректность настроек при переходе с версии 1.2.'''&lt;br /&gt;
# Исправлена ошибка определения уровня логгеров при вызове команды &amp;lt;code&amp;gt;Просмотр событий&amp;lt;/code&amp;gt;, из-за которой при наличии в проекте логгеров с уровнями логгирования &amp;lt;code&amp;gt;INFO&amp;lt;/code&amp;gt; в окно событий не попадали события ниже уровнем.&lt;br /&gt;
&lt;br /&gt;
=== Среда исполнения ===&lt;br /&gt;
&lt;br /&gt;
# Оптимизация узла &amp;lt;code&amp;gt;Транспорт TCP&amp;lt;/code&amp;gt;.&lt;br /&gt;
# Оптимизирована система журналирования.&lt;br /&gt;
&lt;br /&gt;
== 1.6.8-r915d8d477fa4 от 2025-05-14 ==&lt;br /&gt;
&lt;br /&gt;
=== Среда разработки ===&lt;br /&gt;
# Исправлено несоответствие настроек узла &amp;lt;code&amp;gt;Действие &amp;quot;Команда узлу&amp;quot;&amp;lt;/code&amp;gt; и фактически исполняемых команд. '''При обновлении на эту версию необходимо проверить корректность настроек всех улов типа &amp;lt;code&amp;gt;Действие &amp;quot;Команда узлу&amp;quot;&amp;lt;/code&amp;gt;.'''&lt;br /&gt;
&lt;br /&gt;
[[Категория:AgavaSCADA/AgavaPLC]]&lt;br /&gt;
__NOTOC__&lt;/div&gt;</summary>
		<author><name>SharipovRR</name></author>
	</entry>
	<entry>
		<id>https://docs.kb-agava.ru/index.php?title=%D0%A2%D1%80%D0%B0%D0%BD%D1%81%D0%BF%D0%BE%D1%80%D1%82%D1%8B_AgavaSCADA/AgavaPLC&amp;diff=3192</id>
		<title>Транспорты AgavaSCADA/AgavaPLC</title>
		<link rel="alternate" type="text/html" href="https://docs.kb-agava.ru/index.php?title=%D0%A2%D1%80%D0%B0%D0%BD%D1%81%D0%BF%D0%BE%D1%80%D1%82%D1%8B_AgavaSCADA/AgavaPLC&amp;diff=3192"/>
		<updated>2025-09-04T08:46:39Z</updated>

		<summary type="html">&lt;p&gt;SharipovRR: /* Транспорты Modbus-RTU, Modbus-TCP */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Транспорты Modbus-RTU, Modbus-TCP==&lt;br /&gt;
Данные виды транспортов предназначены для приема и передачи данных по протоколу Modbus. Поддерживаются последовательные и Ethernet подключения, а также [[Транспорты AgavaSCADA/AgavaPLC#Оптимизации операций записи в Modbus|некоторые оптимизации команд записи]].&lt;br /&gt;
===Узлы===&lt;br /&gt;
*TransportModbus-RTU - транспорт, работающий по последовательным линиям связи.&lt;br /&gt;
*TransportModbus-TCP - транспорт, работающий по ethernet.&lt;br /&gt;
*ModbusRegister - источник типа &amp;quot;Регистр Modbus&amp;quot;.&lt;br /&gt;
====TransportModbus-RTU====&lt;br /&gt;
Узел, представляющий транспорт Modbus, работающий по последовательным линиям связи RS-485, RS-422, RS-232.&lt;br /&gt;
=====Доступные дочерние узлы=====&lt;br /&gt;
*Группа узлов&lt;br /&gt;
*ModbusRegister&lt;br /&gt;
=====Свойства=====&lt;br /&gt;
&lt;br /&gt;
==== TransportModbus-TCP ====&lt;br /&gt;
Узел, представляющий транспорт Modbus, работающий по линиям связи Ethernet.&lt;br /&gt;
=====Доступные дочерние узлы=====&lt;br /&gt;
*Группа узлов&lt;br /&gt;
*ModbusRegister&lt;br /&gt;
=====Свойства=====&lt;br /&gt;
&lt;br /&gt;
==== ModbusRegister ====&lt;br /&gt;
Узел, представляющий источник типа &amp;quot;Регистр Modbus&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
===== Доступные дочерние узлы =====&lt;br /&gt;
Нет&lt;br /&gt;
&lt;br /&gt;
=====Свойства=====&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Наименование свойства&lt;br /&gt;
!Идентификатор&lt;br /&gt;
!Тип&lt;br /&gt;
!Доступ&lt;br /&gt;
!Описание&lt;br /&gt;
|-&lt;br /&gt;
|Устройство&lt;br /&gt;
|DeviceAddr&lt;br /&gt;
|INT&lt;br /&gt;
|Чтение / запись&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|Функция чтения&lt;br /&gt;
|ReadFunction&lt;br /&gt;
|INT&lt;br /&gt;
|Чтение / запись&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|Регистр чтения&lt;br /&gt;
|ReadRegister&lt;br /&gt;
|INT&lt;br /&gt;
|Чтение / запись&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|Размер регистра&lt;br /&gt;
|ParamSize&lt;br /&gt;
|INT&lt;br /&gt;
|Чтение / запись&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|Приоритет&lt;br /&gt;
|Priority&lt;br /&gt;
|INT&lt;br /&gt;
|Чтение / запись&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|Функция записи&lt;br /&gt;
|WriteFunction&lt;br /&gt;
|INT&lt;br /&gt;
|Чтение / запись&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|Регистр записи&lt;br /&gt;
|WriteRegister&lt;br /&gt;
|INT&lt;br /&gt;
|Чтение / запись&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|Тип значения&lt;br /&gt;
|ValueType&lt;br /&gt;
|INT&lt;br /&gt;
|Чтение / запись&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|Порядок байт&lt;br /&gt;
|ByteOrder&lt;br /&gt;
|INT&lt;br /&gt;
|Чтение / запись&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|Операции после чтения&lt;br /&gt;
|OperationsOnRead&lt;br /&gt;
|NODESARRAY&lt;br /&gt;
|Чтение / запись&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|Операции перед записью&lt;br /&gt;
|OperationsOnWrite&lt;br /&gt;
|NODESARRAY&lt;br /&gt;
|Чтение / запись&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|Узел для чтения/записи&lt;br /&gt;
|SourceId&lt;br /&gt;
|NODE&lt;br /&gt;
|Чтение / запись&lt;br /&gt;
|&lt;br /&gt;
|}Устройство&lt;br /&gt;
&lt;br /&gt;
Функция чтения&lt;br /&gt;
&lt;br /&gt;
Регистр чтения&lt;br /&gt;
&lt;br /&gt;
Размер регистра&lt;br /&gt;
&lt;br /&gt;
Приоритет&lt;br /&gt;
&lt;br /&gt;
Функция записи&lt;br /&gt;
&lt;br /&gt;
Регистр записи&lt;br /&gt;
&lt;br /&gt;
Тип значения&lt;br /&gt;
&lt;br /&gt;
Порядок байт&lt;br /&gt;
&lt;br /&gt;
Операции после чтения&lt;br /&gt;
&lt;br /&gt;
Операции перед записью&lt;br /&gt;
&lt;br /&gt;
Узел для чтения/записи&lt;br /&gt;
&lt;br /&gt;
=== Оптимизации операций записи в Modbus ===&lt;br /&gt;
&lt;br /&gt;
* '''Цель''': уменьшить трафик и задержки и ускорить достижение согласованного состояния на устройстве.&lt;br /&gt;
* '''Область применения''': операции записи функций 5/6/15/16; чтение не оптимизируется.&lt;br /&gt;
&lt;br /&gt;
==== Модель команды и терминология ====&lt;br /&gt;
&lt;br /&gt;
* '''Что содержит команда''': идентификатор устройства (&amp;lt;code&amp;gt;Slave ID&amp;lt;/code&amp;gt;), номер функции (&amp;lt;code&amp;gt;func&amp;lt;/code&amp;gt;), адрес или диапазон адресов, и полезную нагрузку (значения для записи).&lt;br /&gt;
** Для функций 5 и 6 записывается один адрес.&lt;br /&gt;
** Для функций 15 и 16 может записываться непрерывный диапазон адресов.&lt;br /&gt;
* При сравнении двух команд '''одинаковыми командами''' считаются те, у которых полностью совпадают &amp;lt;code&amp;gt;Slave ID&amp;lt;/code&amp;gt;, функция и адрес регистра.&lt;br /&gt;
* '''Смежными диапазонами''' являются диапазоны, между которыми нет разрыва — один начинается сразу после другого. Примеры: смежные — &amp;lt;code&amp;gt;1..4&amp;lt;/code&amp;gt; и &amp;lt;code&amp;gt;5..8&amp;lt;/code&amp;gt;; &amp;lt;code&amp;gt;10..10&amp;lt;/code&amp;gt; и &amp;lt;code&amp;gt;11..15&amp;lt;/code&amp;gt;. Не смежные — &amp;lt;code&amp;gt;1..4&amp;lt;/code&amp;gt; и &amp;lt;code&amp;gt;6..8&amp;lt;/code&amp;gt; (разрыв), &amp;lt;code&amp;gt;3..7&amp;lt;/code&amp;gt; и &amp;lt;code&amp;gt;5..9&amp;lt;/code&amp;gt; (перекрытие).&lt;br /&gt;
* '''Неподтверждённой записью''', является та, которая находится в очереди и ещё не была отправлена драйвером на устройство.&lt;br /&gt;
&lt;br /&gt;
==== Этап 1. Дедупликация при постановке в очередь ====&lt;br /&gt;
&lt;br /&gt;
* '''Назначение''': убрать лишние повторные записи одного и того же адреса, если между ними не было попытки отправки на устройство.&lt;br /&gt;
* '''Принцип дедупликации''': Если в очереди уже есть неподтверждённая запись для того же &amp;lt;code&amp;gt;Slave ID&amp;lt;/code&amp;gt;, той же функции и того же адреса, то новая запись заменяет значение в существующей, а сама в очередь не добавляется.&lt;br /&gt;
* '''Что не дедуплицируется''':&lt;br /&gt;
** Разные адреса, разные функции или разные устройства.&lt;br /&gt;
** Операции чтения.&lt;br /&gt;
** Объединение диапазонов — отдельный механизм (см. Этап 2).&lt;br /&gt;
* '''Эффект''':&lt;br /&gt;
** Снижается нагрузка на канал и устройство при частых обновлениях одного тега.&lt;br /&gt;
** В устройство уходит самое свежее значение на момент отправки.&lt;br /&gt;
&lt;br /&gt;
==== Этап 2. Объединение команд записи (функции 15 и 16) ====&lt;br /&gt;
&lt;br /&gt;
* '''Назначение''': сократить число запросов, объединив записи в соседние адреса в один непрерывный блок.&lt;br /&gt;
* '''Что объединяется''':&lt;br /&gt;
** Функция 15 (Write Multiple Coils): катушки с непрерывными адресами.&lt;br /&gt;
** Функция 16 (Write Multiple Registers): регистры хранения с непрерывными адресами.&lt;br /&gt;
** Только записи с одинаковыми &amp;lt;code&amp;gt;Slave ID&amp;lt;/code&amp;gt; и одинаковой функцией (15 или 16).&lt;br /&gt;
* '''Условия объединения''': Несколько записей с одинаковыми &amp;lt;code&amp;gt;Slave ID&amp;lt;/code&amp;gt; и функцией 15 или 16, чьи адресные диапазоны идут подряд без разрывов, объединяются в одну запись с общим диапазоном от минимального до максимального адреса.&lt;br /&gt;
* '''Формирование буфера значений''':&lt;br /&gt;
** Для 15: формируется массив булевых значений по адресам в объединённом диапазоне.&lt;br /&gt;
** Для 16: формируется массив 16-битных слов по адресам в объединённом диапазоне.&lt;br /&gt;
*** 32-битные типы (Int32/UInt32/Float32) занимают два 16-битных слова.&lt;br /&gt;
*** Соблюдается заданный порядок слов (Normal/Inverse).&lt;br /&gt;
** Если для одного адреса есть несколько кандидатов, берётся самое свежее значение на момент отправки.&lt;br /&gt;
* '''Порядок и атомарность''':&lt;br /&gt;
** Адреса в блоке упорядочиваются по возрастанию.&lt;br /&gt;
** Отправка выполняется одной операцией: &amp;lt;code&amp;gt;writeCoils&amp;lt;/code&amp;gt; (15) или &amp;lt;code&amp;gt;writeRegisters&amp;lt;/code&amp;gt; (16).&lt;br /&gt;
** Логирование отражает одну агрегированную запись.&lt;br /&gt;
* '''Что не объединяется''':&lt;br /&gt;
** Разные &amp;lt;code&amp;gt;Slave ID&amp;lt;/code&amp;gt; или разные функции (15 и 16 не смешиваются).&lt;br /&gt;
** Диапазоны с разрывами.&lt;br /&gt;
** Операции чтения и иные типы команд.&lt;br /&gt;
&lt;br /&gt;
==== Ограничения ====&lt;br /&gt;
&lt;br /&gt;
# Ограничение длины кадра устройства/драйвера может приводить к разбиению больших блоков.&lt;br /&gt;
# Объединение выполняется на этапе подготовки к отправке; до него действует дедупликация.&lt;br /&gt;
# При ошибке статусы возвращаются для всей агрегированной операции, повторы — по общей логике.&lt;br /&gt;
&lt;br /&gt;
==== Примеры ====&lt;br /&gt;
&lt;br /&gt;
* '''Дедупликация''':&lt;br /&gt;
** Три записи в один регистр: 10 → 20 → 30. В очереди остаётся одна запись; отправляется значение 30.&lt;br /&gt;
** Две записи в разные регистры: обе будут отправлены независимо.&lt;br /&gt;
** Записи в один адрес, но с разными функциями (например, 5 и 15): считаются разными и отправляются раздельно.&lt;br /&gt;
* '''Объединение 15/16''':&lt;br /&gt;
** Функция 16: записи 40010..40011 и 40012 объединяются в 40010..40012 и уходят одной операцией.&lt;br /&gt;
** Функция 15: записи катушек 1..4 и 5..8 объединяются в 1..8 и отправляются одной операцией.&lt;br /&gt;
{{Шаблон:AgavaSCADA_плагин_OPC_UA}}&lt;br /&gt;
{{Шаблон:AgavaSCADA_плагин_SNMP}}&lt;br /&gt;
&lt;br /&gt;
[[Категория:AgavaSCADA/AgavaPLC]]&lt;/div&gt;</summary>
		<author><name>SharipovRR</name></author>
	</entry>
	<entry>
		<id>https://docs.kb-agava.ru/index.php?title=%D0%A2%D1%80%D0%B0%D0%BD%D1%81%D0%BF%D0%BE%D1%80%D1%82%D1%8B_AgavaSCADA/AgavaPLC&amp;diff=3191</id>
		<title>Транспорты AgavaSCADA/AgavaPLC</title>
		<link rel="alternate" type="text/html" href="https://docs.kb-agava.ru/index.php?title=%D0%A2%D1%80%D0%B0%D0%BD%D1%81%D0%BF%D0%BE%D1%80%D1%82%D1%8B_AgavaSCADA/AgavaPLC&amp;diff=3191"/>
		<updated>2025-09-04T08:37:15Z</updated>

		<summary type="html">&lt;p&gt;SharipovRR: /* Транспорты Modbus-RTU, Modbus-TCP */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Транспорты Modbus-RTU, Modbus-TCP==&lt;br /&gt;
Данные виды транспортов предназначены для приема и передачи данных по протоколу Modbus. Поддерживаются последовательные и Ethernet подключения, а также некоторые оптимизации команд записи.&lt;br /&gt;
===Узлы===&lt;br /&gt;
*TransportModbus-RTU - транспорт, работающий по последовательным линиям связи.&lt;br /&gt;
*TransportModbus-TCP - транспорт, работающий по ethernet.&lt;br /&gt;
*ModbusRegister - источник типа &amp;quot;Регистр Modbus&amp;quot;.&lt;br /&gt;
====TransportModbus-RTU====&lt;br /&gt;
Узел, представляющий транспорт Modbus, работающий по последовательным линиям связи RS-485, RS-422, RS-232.&lt;br /&gt;
=====Доступные дочерние узлы=====&lt;br /&gt;
*Группа узлов&lt;br /&gt;
*ModbusRegister&lt;br /&gt;
=====Свойства=====&lt;br /&gt;
&lt;br /&gt;
==== TransportModbus-TCP ====&lt;br /&gt;
Узел, представляющий транспорт Modbus, работающий по линиям связи Ethernet.&lt;br /&gt;
=====Доступные дочерние узлы=====&lt;br /&gt;
*Группа узлов&lt;br /&gt;
*ModbusRegister&lt;br /&gt;
=====Свойства=====&lt;br /&gt;
&lt;br /&gt;
==== ModbusRegister ====&lt;br /&gt;
Узел, представляющий источник типа &amp;quot;Регистр Modbus&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
===== Доступные дочерние узлы =====&lt;br /&gt;
Нет&lt;br /&gt;
&lt;br /&gt;
=====Свойства=====&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Наименование свойства&lt;br /&gt;
!Идентификатор&lt;br /&gt;
!Тип&lt;br /&gt;
!Доступ&lt;br /&gt;
!Описание&lt;br /&gt;
|-&lt;br /&gt;
|Устройство&lt;br /&gt;
|DeviceAddr&lt;br /&gt;
|INT&lt;br /&gt;
|Чтение / запись&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|Функция чтения&lt;br /&gt;
|ReadFunction&lt;br /&gt;
|INT&lt;br /&gt;
|Чтение / запись&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|Регистр чтения&lt;br /&gt;
|ReadRegister&lt;br /&gt;
|INT&lt;br /&gt;
|Чтение / запись&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|Размер регистра&lt;br /&gt;
|ParamSize&lt;br /&gt;
|INT&lt;br /&gt;
|Чтение / запись&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|Приоритет&lt;br /&gt;
|Priority&lt;br /&gt;
|INT&lt;br /&gt;
|Чтение / запись&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|Функция записи&lt;br /&gt;
|WriteFunction&lt;br /&gt;
|INT&lt;br /&gt;
|Чтение / запись&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|Регистр записи&lt;br /&gt;
|WriteRegister&lt;br /&gt;
|INT&lt;br /&gt;
|Чтение / запись&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|Тип значения&lt;br /&gt;
|ValueType&lt;br /&gt;
|INT&lt;br /&gt;
|Чтение / запись&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|Порядок байт&lt;br /&gt;
|ByteOrder&lt;br /&gt;
|INT&lt;br /&gt;
|Чтение / запись&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|Операции после чтения&lt;br /&gt;
|OperationsOnRead&lt;br /&gt;
|NODESARRAY&lt;br /&gt;
|Чтение / запись&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|Операции перед записью&lt;br /&gt;
|OperationsOnWrite&lt;br /&gt;
|NODESARRAY&lt;br /&gt;
|Чтение / запись&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|Узел для чтения/записи&lt;br /&gt;
|SourceId&lt;br /&gt;
|NODE&lt;br /&gt;
|Чтение / запись&lt;br /&gt;
|&lt;br /&gt;
|}Устройство&lt;br /&gt;
&lt;br /&gt;
Функция чтения&lt;br /&gt;
&lt;br /&gt;
Регистр чтения&lt;br /&gt;
&lt;br /&gt;
Размер регистра&lt;br /&gt;
&lt;br /&gt;
Приоритет&lt;br /&gt;
&lt;br /&gt;
Функция записи&lt;br /&gt;
&lt;br /&gt;
Регистр записи&lt;br /&gt;
&lt;br /&gt;
Тип значения&lt;br /&gt;
&lt;br /&gt;
Порядок байт&lt;br /&gt;
&lt;br /&gt;
Операции после чтения&lt;br /&gt;
&lt;br /&gt;
Операции перед записью&lt;br /&gt;
&lt;br /&gt;
Узел для чтения/записи&lt;br /&gt;
&lt;br /&gt;
=== Оптимизации операций записи в Modbus ===&lt;br /&gt;
&lt;br /&gt;
* '''Цель''': уменьшить трафик и задержки и ускорить достижение согласованного состояния на устройстве.&lt;br /&gt;
* '''Область применения''': операции записи функций 5/6/15/16; чтение не оптимизируется.&lt;br /&gt;
&lt;br /&gt;
==== Модель команды и терминология ====&lt;br /&gt;
&lt;br /&gt;
* '''Что содержит команда''': идентификатор устройства (&amp;lt;code&amp;gt;Slave ID&amp;lt;/code&amp;gt;), номер функции (&amp;lt;code&amp;gt;func&amp;lt;/code&amp;gt;), адрес или диапазон адресов, и полезную нагрузку (значения для записи).&lt;br /&gt;
** Для функций 5 и 6 записывается один адрес.&lt;br /&gt;
** Для функций 15 и 16 может записываться непрерывный диапазон адресов.&lt;br /&gt;
* При сравнении двух команд '''одинаковыми командами''' считаются те, у которых полностью совпадают &amp;lt;code&amp;gt;Slave ID&amp;lt;/code&amp;gt;, функция и адрес регистра.&lt;br /&gt;
* '''Смежными диапазонами''' являются диапазоны, между которыми нет разрыва — один начинается сразу после другого. Примеры: смежные — &amp;lt;code&amp;gt;1..4&amp;lt;/code&amp;gt; и &amp;lt;code&amp;gt;5..8&amp;lt;/code&amp;gt;; &amp;lt;code&amp;gt;10..10&amp;lt;/code&amp;gt; и &amp;lt;code&amp;gt;11..15&amp;lt;/code&amp;gt;. Не смежные — &amp;lt;code&amp;gt;1..4&amp;lt;/code&amp;gt; и &amp;lt;code&amp;gt;6..8&amp;lt;/code&amp;gt; (разрыв), &amp;lt;code&amp;gt;3..7&amp;lt;/code&amp;gt; и &amp;lt;code&amp;gt;5..9&amp;lt;/code&amp;gt; (перекрытие).&lt;br /&gt;
* '''Неподтверждённой записью''', является та, которая находится в очереди и ещё не была отправлена драйвером на устройство.&lt;br /&gt;
&lt;br /&gt;
==== Этап 1. Дедупликация при постановке в очередь ====&lt;br /&gt;
&lt;br /&gt;
* '''Назначение''': убрать лишние повторные записи одного и того же адреса, если между ними не было попытки отправки на устройство.&lt;br /&gt;
* '''Принцип дедупликации''': Если в очереди уже есть неподтверждённая запись для того же &amp;lt;code&amp;gt;Slave ID&amp;lt;/code&amp;gt;, той же функции и того же адреса, то новая запись заменяет значение в существующей, а сама в очередь не добавляется.&lt;br /&gt;
* '''Что не дедуплицируется''':&lt;br /&gt;
** Разные адреса, разные функции или разные устройства.&lt;br /&gt;
** Операции чтения.&lt;br /&gt;
** Объединение диапазонов — отдельный механизм (см. Этап 2).&lt;br /&gt;
* '''Эффект''':&lt;br /&gt;
** Снижается нагрузка на канал и устройство при частых обновлениях одного тега.&lt;br /&gt;
** В устройство уходит самое свежее значение на момент отправки.&lt;br /&gt;
&lt;br /&gt;
==== Этап 2. Объединение команд записи (функции 15 и 16) ====&lt;br /&gt;
&lt;br /&gt;
* '''Назначение''': сократить число запросов, объединив записи в соседние адреса в один непрерывный блок.&lt;br /&gt;
* '''Что объединяется''':&lt;br /&gt;
** Функция 15 (Write Multiple Coils): катушки с непрерывными адресами.&lt;br /&gt;
** Функция 16 (Write Multiple Registers): регистры хранения с непрерывными адресами.&lt;br /&gt;
** Только записи с одинаковыми &amp;lt;code&amp;gt;Slave ID&amp;lt;/code&amp;gt; и одинаковой функцией (15 или 16).&lt;br /&gt;
* '''Условия объединения''': Несколько записей с одинаковыми &amp;lt;code&amp;gt;Slave ID&amp;lt;/code&amp;gt; и функцией 15 или 16, чьи адресные диапазоны идут подряд без разрывов, объединяются в одну запись с общим диапазоном от минимального до максимального адреса.&lt;br /&gt;
* '''Формирование буфера значений''':&lt;br /&gt;
** Для 15: формируется массив булевых значений по адресам в объединённом диапазоне.&lt;br /&gt;
** Для 16: формируется массив 16-битных слов по адресам в объединённом диапазоне.&lt;br /&gt;
*** 32-битные типы (Int32/UInt32/Float32) занимают два 16-битных слова.&lt;br /&gt;
*** Соблюдается заданный порядок слов (Normal/Inverse).&lt;br /&gt;
** Если для одного адреса есть несколько кандидатов, берётся самое свежее значение на момент отправки.&lt;br /&gt;
* '''Порядок и атомарность''':&lt;br /&gt;
** Адреса в блоке упорядочиваются по возрастанию.&lt;br /&gt;
** Отправка выполняется одной операцией: &amp;lt;code&amp;gt;writeCoils&amp;lt;/code&amp;gt; (15) или &amp;lt;code&amp;gt;writeRegisters&amp;lt;/code&amp;gt; (16).&lt;br /&gt;
** Логирование отражает одну агрегированную запись.&lt;br /&gt;
* '''Что не объединяется''':&lt;br /&gt;
** Разные &amp;lt;code&amp;gt;Slave ID&amp;lt;/code&amp;gt; или разные функции (15 и 16 не смешиваются).&lt;br /&gt;
** Диапазоны с разрывами.&lt;br /&gt;
** Операции чтения и иные типы команд.&lt;br /&gt;
&lt;br /&gt;
==== Ограничения ====&lt;br /&gt;
&lt;br /&gt;
# Ограничение длины кадра устройства/драйвера может приводить к разбиению больших блоков.&lt;br /&gt;
# Объединение выполняется на этапе подготовки к отправке; до него действует дедупликация.&lt;br /&gt;
# При ошибке статусы возвращаются для всей агрегированной операции, повторы — по общей логике.&lt;br /&gt;
&lt;br /&gt;
==== Примеры ====&lt;br /&gt;
&lt;br /&gt;
* '''Дедупликация''':&lt;br /&gt;
** Три записи в один регистр: 10 → 20 → 30. В очереди остаётся одна запись; отправляется значение 30.&lt;br /&gt;
** Две записи в разные регистры: обе будут отправлены независимо.&lt;br /&gt;
** Записи в один адрес, но с разными функциями (например, 5 и 15): считаются разными и отправляются раздельно.&lt;br /&gt;
* '''Объединение 15/16''':&lt;br /&gt;
** Функция 16: записи 40010..40011 и 40012 объединяются в 40010..40012 и уходят одной операцией.&lt;br /&gt;
** Функция 15: записи катушек 1..4 и 5..8 объединяются в 1..8 и отправляются одной операцией.&lt;br /&gt;
{{Шаблон:AgavaSCADA_плагин_OPC_UA}}&lt;br /&gt;
{{Шаблон:AgavaSCADA_плагин_SNMP}}&lt;br /&gt;
&lt;br /&gt;
[[Категория:AgavaSCADA/AgavaPLC]]&lt;/div&gt;</summary>
		<author><name>SharipovRR</name></author>
	</entry>
	<entry>
		<id>https://docs.kb-agava.ru/index.php?title=ASLauncher&amp;diff=2609</id>
		<title>ASLauncher</title>
		<link rel="alternate" type="text/html" href="https://docs.kb-agava.ru/index.php?title=ASLauncher&amp;diff=2609"/>
		<updated>2024-12-02T09:07:30Z</updated>

		<summary type="html">&lt;p&gt;SharipovRR: /* Замена рабочего стола Windows */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;ASLauncher - менеджер рабочего стола AgavaSCADA.&lt;br /&gt;
&lt;br /&gt;
ASLauncher предназначен для использования совместно со средой исполнения и позволяет заменить собой штатную оболочку Windows. &lt;br /&gt;
&lt;br /&gt;
ASLauncher реализует следующие функции:&lt;br /&gt;
&lt;br /&gt;
* автозапуск AgavaSCADA;&lt;br /&gt;
* замена рабочего стола Windows;&lt;br /&gt;
* программный сторожевой таймер.&lt;br /&gt;
&lt;br /&gt;
== Автозапуск AgavaSCADA ==&lt;br /&gt;
&lt;br /&gt;
== Замена оболочки рабочего стола Windows 10 ==&lt;br /&gt;
Для настройки ASLauncher в качестве оболочки рабочего стола Windows 10 необходимо внести изменения в реестр операционной системы. Вызовем стандартную утилиту '''«Редактор реестра»''' с помощью сочетания клавиш &amp;lt;code&amp;gt;Win + R&amp;lt;/code&amp;gt;, указав в качестве выполняемой программы &amp;lt;code&amp;gt;regedit&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
'''Внимание:''' Перед внесением изменений в реестр рекомендуется создать резервную копию.&lt;br /&gt;
&lt;br /&gt;
=== Настройка автозапуска ASLauncher ===&lt;br /&gt;
&lt;br /&gt;
# Чтобы ASLauncher автоматически запускался при старте операционной системы, необходимо добавить соответствующую запись в реестр. В '''«Редакторе реестра»''' перейдите в папку: &amp;lt;code&amp;gt;Компьютер\HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Run&amp;lt;/code&amp;gt;&lt;br /&gt;
# В правой части окна нажмите правой кнопкой мыши и выберите '''«Создать»''' → '''«Строковый параметр»'''. Присвойте ему имя &amp;lt;code&amp;gt;ASLauncher&amp;lt;/code&amp;gt;.&lt;br /&gt;
# Для созданного параметра необходимо указать путь до исполняемого файла. Нажмите правой кнопкой мыши на записи &amp;lt;code&amp;gt;ASLauncher&amp;lt;/code&amp;gt; и выберите пункт '''«Изменить...»'''. В поле '''«Значение»''' введите полный путь до исполняемого файла (например, &amp;lt;code&amp;gt;C:\aslauncher-bin\aslauncher.exe&amp;lt;/code&amp;gt;).&lt;br /&gt;
&lt;br /&gt;
=== Установка ASLauncher в качестве стандартной оболочки рабочего стола ===&lt;br /&gt;
&lt;br /&gt;
# Чтобы сделать ASLauncher оболочкой рабочего стола по умолчанию, в '''«Редакторе реестра»''' перейдите в папку: &amp;lt;code&amp;gt;Компьютер\HKEY_CURRENT_USER\Software\Microsoft\Windows NT\CurrentVersion\Winlogon&amp;lt;/code&amp;gt;&lt;br /&gt;
# Найдите параметр &amp;lt;code&amp;gt;Shell&amp;lt;/code&amp;gt; (по умолчанию его значение — &amp;lt;code&amp;gt;explorer.exe&amp;lt;/code&amp;gt;). Если такого параметра нет, создайте новый '''«Строковый параметр»''' с именем &amp;lt;code&amp;gt;Shell&amp;lt;/code&amp;gt;.&lt;br /&gt;
# Нажмите дважды на параметре &amp;lt;code&amp;gt;Shell&amp;lt;/code&amp;gt; и замените его значение на полный путь до исполняемого файла ASLauncher (например, &amp;lt;code&amp;gt;C:\aslauncher-bin\aslauncher.exe&amp;lt;/code&amp;gt;).&lt;br /&gt;
&lt;br /&gt;
=== Отключение Error Reporting ===&lt;br /&gt;
&lt;br /&gt;
# Для отключения отправки отчетов об ошибках, в '''«Редакторе реестра»''' перейдите к следующему разделу: &amp;lt;code&amp;gt;Компьютер\HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\Windows Error Reporting&amp;lt;/code&amp;gt;&lt;br /&gt;
# В правой части окна найдите параметр &amp;lt;code&amp;gt;Disabled&amp;lt;/code&amp;gt; типа &amp;lt;code&amp;gt;DWORD (32-бит)&amp;lt;/code&amp;gt;. Если такого параметра нет, создайте его, нажав правой кнопкой мыши, выбрав '''«Создать»''' → '''«Параметр DWORD (32 бита)»''' и присвоив ему имя '''Disabled'''.&lt;br /&gt;
# Дважды щелкните по параметру &amp;lt;code&amp;gt;Disabled&amp;lt;/code&amp;gt; и установите значение '''1''' в поле '''«Значение»'''. Нажмите '''«ОК»''' для сохранения изменений.&lt;br /&gt;
&lt;br /&gt;
=== Примечание ===&lt;br /&gt;
&lt;br /&gt;
# После внесения всех изменений перезагрузите компьютер, чтобы они вступили в силу.&lt;br /&gt;
# В результате замены стандартной оболочки рабочего стола Windows на ASLauncher, для пользователя блокируются все штатные функции Windows — запуск установленных программ, все операции с файлами на дисках и т. д. ASLauncher предоставляет пользователю собственный рабочий стол со следующими функциями:&lt;br /&gt;
#* Запуск среды исполнения.&lt;br /&gt;
#* Перезагрузка и выключение АРМ.&lt;br /&gt;
#* Просмотр текущей даты и времени.&lt;br /&gt;
#* Запуск штатной оболочки Windows.&lt;br /&gt;
&lt;br /&gt;
== Конфигурирование ASLauncher, версия 1.2 ==&lt;br /&gt;
Все настройки ASLauncher хранятся в файле aslauncher.ini, размещаемом в папке с исполняемыми файлами AgavaSCADA.&lt;br /&gt;
 [General]&lt;br /&gt;
 ProcessFile=&amp;quot;G:/workspace/AgavaScada/bin-win/rtu.exe&amp;quot;&lt;br /&gt;
 RestartProcessAt=00:02&lt;br /&gt;
 Wallpaper=&amp;quot;./GNOME-Shell.jpg&amp;quot;&lt;br /&gt;
&lt;br /&gt;
== Конфигурирование ASLauncher, версия 1.5 ==&lt;br /&gt;
&lt;br /&gt;
=== Описание конфигурационного файла и его параметров ===&lt;br /&gt;
Данный раздел описывает структуру и назначение конфигурационного файла формата &amp;lt;code&amp;gt;.ini&amp;lt;/code&amp;gt;, используемого в нашем приложении. Этот файл содержит настройки для обоев рабочего стола и путей к лог-файлам приложения и связанных процессов.&lt;br /&gt;
&lt;br /&gt;
==== Общая структура &amp;lt;code&amp;gt;.ini&amp;lt;/code&amp;gt; файла ====&lt;br /&gt;
Файл &amp;lt;code&amp;gt;.ini&amp;lt;/code&amp;gt; состоит из разделов и пар ключ-значение:&lt;br /&gt;
&lt;br /&gt;
* '''Разделы''': обозначаются названием в квадратных скобках, например, &amp;lt;code&amp;gt;[General]&amp;lt;/code&amp;gt;.&lt;br /&gt;
* '''Ключи и значения''': пары вида &amp;lt;code&amp;gt;Ключ=Значение&amp;lt;/code&amp;gt;, определяющие настройку.&lt;br /&gt;
&lt;br /&gt;
Образец общей структуры &amp;lt;code&amp;gt;.ini&amp;lt;/code&amp;gt; файла:&lt;br /&gt;
 [SectionName]&lt;br /&gt;
 Key1=Value1&lt;br /&gt;
 Key2=Value2&lt;br /&gt;
&lt;br /&gt;
==== Описание ключей и значений &amp;lt;code&amp;gt;.ini&amp;lt;/code&amp;gt; файла ====&lt;br /&gt;
Секция &amp;lt;code&amp;gt;[General]&amp;lt;/code&amp;gt; содержит основные настройки приложения.&lt;br /&gt;
&lt;br /&gt;
* Ключ &amp;lt;code&amp;gt;Wallpaper&amp;lt;/code&amp;gt;&lt;br /&gt;
** '''Описание''': Задает путь к изображению, используемому в качестве обоев рабочего стола.&lt;br /&gt;
** '''Тип''': Файл.&lt;br /&gt;
** '''Формат''': Абсолютный путь.&lt;br /&gt;
** '''Пример значения''': &amp;lt;code&amp;gt;Wallpaper=/home/user/Images/wallpaper.png&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Ключ &amp;lt;code&amp;gt;ProcessErrorLogFile&amp;lt;/code&amp;gt;&lt;br /&gt;
** '''Описание''': Указывает путь к файлу, в который записываются ошибки основного процесса приложения.&lt;br /&gt;
** '''Тип''': Файл.&lt;br /&gt;
** '''Формат''': Абсолютный путь.&lt;br /&gt;
** '''Пример значения''': &amp;lt;code&amp;gt;ProcessErrorLogFile=/var/log/rtu/rtu_process_error.log&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Ключ &amp;lt;code&amp;gt;ProcessStandardLogFile&amp;lt;/code&amp;gt;&lt;br /&gt;
** '''Описание''': Указывает путь к файлу, в который записывается стандартный вывод основного процесса приложения.&lt;br /&gt;
** '''Тип''': Файл.&lt;br /&gt;
** '''Формат''': Абсолютный путь.&lt;br /&gt;
** '''Пример значения''': &amp;lt;code&amp;gt;ProcessStandardLogFile=/var/log/rtu/rtu_process_standard.log&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Ключ &amp;lt;code&amp;gt;ASLauncherLogsDir&amp;lt;/code&amp;gt;&lt;br /&gt;
** '''Описание''': Задает директорию для хранения файлов логирования ASLauncher и приложений рабочего стола.&lt;br /&gt;
** '''Тип''': Директория.&lt;br /&gt;
** '''Формат''': Абсолютный путь.&lt;br /&gt;
** '''Пример значения''': &amp;lt;code&amp;gt;ASLauncherLogsDir=/var/log/aslauncher&amp;lt;/code&amp;gt;&lt;br /&gt;
* Ключ &amp;lt;code&amp;gt;DesktopEntriesDir&amp;lt;/code&amp;gt;&lt;br /&gt;
** '''Описание''': Задает директорию, в которой хранятся файлы записей рабочих столов (Desktop Entries) в формате &amp;lt;code&amp;gt;.desktop&amp;lt;/code&amp;gt;. Эти файлы используются для запуска приложений и отображения их в меню или на панели запуска.&lt;br /&gt;
** '''Тип''': Директория.&lt;br /&gt;
** '''Формат''': Абсолютный путь.&lt;br /&gt;
** '''Пример значения''': &amp;lt;code&amp;gt;DesktopEntriesDir=/usr/share/aslauncher&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Примечание ====&lt;br /&gt;
&lt;br /&gt;
* Все описанные параметры, за исключением &amp;lt;code&amp;gt;Wallpaper&amp;lt;/code&amp;gt;, являются обязательными и должны иметь корректные значения для запуска и штатной работы программы. Параметр &amp;lt;code&amp;gt;Wallpaper&amp;lt;/code&amp;gt; является необязательным и в случае его отсутствия фон рабочего стола будет залит черным цветом.&lt;br /&gt;
&lt;br /&gt;
* Убедитесь, что все указанные пути существуют и имеют соответствующие права доступа для чтения и записи.&lt;br /&gt;
&lt;br /&gt;
* Используйте абсолютные пути для обеспечения корректной работы независимо от текущей директории.&lt;br /&gt;
&lt;br /&gt;
=== Документация для &amp;lt;code&amp;gt;.desktop&amp;lt;/code&amp;gt; файлов ===&lt;br /&gt;
Файлы с расширением &amp;lt;code&amp;gt;.desktop&amp;lt;/code&amp;gt; используются для описания приложений и их поведения в системе. Они позволяют интегрировать приложения в графическую оболочку, определяя, как они отображаются на рабочем столе, какие иконки используют, и как запускаются.&lt;br /&gt;
&lt;br /&gt;
==== Общая структура &amp;lt;code&amp;gt;.desktop&amp;lt;/code&amp;gt; файла ====&lt;br /&gt;
Файл состоит из секции &amp;lt;code&amp;gt;[Desktop Entry]&amp;lt;/code&amp;gt; и набора ключей с соответствующими значениями. Пример файла:&lt;br /&gt;
 [Desktop Entry]&lt;br /&gt;
 Name=MyApp&lt;br /&gt;
 Process=/usr/bin/myapp&lt;br /&gt;
 Arguments=--mode test&lt;br /&gt;
 Icon=/usr/share/icons/myapp.png&lt;br /&gt;
 Type=Application&lt;br /&gt;
 AutoLaunch=true&lt;br /&gt;
 AutoRestartOnCrash=true&lt;br /&gt;
 User=myuser&lt;br /&gt;
 PasswordPrompt=false&lt;br /&gt;
&lt;br /&gt;
==== Примечания ====&lt;br /&gt;
&lt;br /&gt;
* Для некоторых ключей используются значения типа 'Логическое значение'. Возможные варианты значений для данного типа: &amp;lt;code&amp;gt;true&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;True&amp;lt;/code&amp;gt; или &amp;lt;code&amp;gt;1&amp;lt;/code&amp;gt; — для истинных значений и &amp;lt;code&amp;gt;false&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;False&amp;lt;/code&amp;gt; или &amp;lt;code&amp;gt;0&amp;lt;/code&amp;gt; — для ложных.&lt;br /&gt;
* Ключи и значения чувствительны к регистру — убедитесь, что вы используете правильный регистр для каждого ключа.&lt;br /&gt;
* Убедитесь, что все указанные пути существуют и доступны для чтения/запуска.&lt;br /&gt;
* Если иконка не отображается, значит, по меньшей мере одна пара ключ-значение содержит ошибку. Чтобы исправить это, проверьте файлы логирования ASLauncher — информация, которая поможет выявить и исправить эту ошибку, будет отображена там.&lt;br /&gt;
&lt;br /&gt;
==== Описание ключей и значений &amp;lt;code&amp;gt;.desktop&amp;lt;/code&amp;gt; файла ====&lt;br /&gt;
&lt;br /&gt;
# Ключ &amp;lt;code&amp;gt;Name&amp;lt;/code&amp;gt;&lt;br /&gt;
#* '''Описание''': Отображаемое имя приложения в меню или панели запуска.&lt;br /&gt;
#* '''Формат''': Строка.&lt;br /&gt;
#* '''Пример значения''': &amp;lt;code&amp;gt;Name=MyApp&amp;lt;/code&amp;gt;&lt;br /&gt;
# Ключ &amp;lt;code&amp;gt;Process&amp;lt;/code&amp;gt;&lt;br /&gt;
#* '''Описание''': Путь к исполняемому файлу приложения.&lt;br /&gt;
#* '''Формат''': Абсолютный путь.&lt;br /&gt;
#* '''Пример значения''': &amp;lt;code&amp;gt;Process=/usr/bin/myapp&amp;lt;/code&amp;gt;&lt;br /&gt;
# Ключ &amp;lt;code&amp;gt;Arguments&amp;lt;/code&amp;gt;&lt;br /&gt;
#* '''Описание''': Аргументы командной строки, передаваемые приложению при запуске.&lt;br /&gt;
#* '''Формат''': Строка с аргументами, разделенными пробелами.&lt;br /&gt;
#* '''Пример значения''': &amp;lt;code&amp;gt;Arguments=--mode test --verbose&amp;lt;/code&amp;gt;&lt;br /&gt;
# Ключ &amp;lt;code&amp;gt;Icon&amp;lt;/code&amp;gt;&lt;br /&gt;
#* '''Описание''': Путь к файлу иконки или имя иконки из темы значков.&lt;br /&gt;
#* '''Формат''': Абсолютный путь.&lt;br /&gt;
#* '''Пример значения''': &amp;lt;code&amp;gt;Icon=/usr/share/icons/hicolor/48x48/apps/myapp.png&amp;lt;/code&amp;gt;&lt;br /&gt;
# Ключ &amp;lt;code&amp;gt;Type&amp;lt;/code&amp;gt;&lt;br /&gt;
#* '''Описание''': Тип записи, определяет, как система будет обрабатывать файл.&lt;br /&gt;
#* '''Возможные значения''': &amp;lt;code&amp;gt;Application&amp;lt;/code&amp;gt; — исполняемое приложение.&lt;br /&gt;
#* '''Пример значения''': &amp;lt;code&amp;gt;Type=Application&amp;lt;/code&amp;gt;&lt;br /&gt;
# Ключ &amp;lt;code&amp;gt;AutoLaunch&amp;lt;/code&amp;gt;&lt;br /&gt;
#* '''Описание''': Указывает, должно ли приложение запускаться автоматически при входе пользователя в систему.&lt;br /&gt;
#* '''Формат''': Логическое значение.&lt;br /&gt;
#* '''[Если] Параметр отсутствует''': Значение по умолчанию — &amp;lt;code&amp;gt;false&amp;lt;/code&amp;gt;&lt;br /&gt;
#* '''Пример значения''': &amp;lt;code&amp;gt;AutoLaunch=true&amp;lt;/code&amp;gt;&lt;br /&gt;
# Ключ &amp;lt;code&amp;gt;AutoRestartOnCrash&amp;lt;/code&amp;gt;&lt;br /&gt;
#* '''Описание''': Определяет, будет ли приложение автоматически перезапущено в случае сбоя или аварийного завершения.&lt;br /&gt;
#* '''Формат''': Логическое значение.&lt;br /&gt;
#* '''[Если] Параметр отсутствует''': Значение по умолчанию — &amp;lt;code&amp;gt;false&amp;lt;/code&amp;gt;&lt;br /&gt;
#* '''Пример значения''': &amp;lt;code&amp;gt;AutoRestartOnCrash=true&amp;lt;/code&amp;gt;&lt;br /&gt;
# Ключ &amp;lt;code&amp;gt;User&amp;lt;/code&amp;gt;&lt;br /&gt;
#* '''Описание''': Имя пользователя, от имени которого должно запускаться приложение.&lt;br /&gt;
#* '''Формат''': Строка.&lt;br /&gt;
#* '''[Если] Параметр отсутствует''': Приложение запускается из-под пользователя &amp;lt;code&amp;gt;root&amp;lt;/code&amp;gt;.&lt;br /&gt;
#* '''Пример значения''': &amp;lt;code&amp;gt;User=john_doe&amp;lt;/code&amp;gt;&lt;br /&gt;
# Ключ &amp;lt;code&amp;gt;PasswordPrompt&amp;lt;/code&amp;gt;&lt;br /&gt;
#* '''Описание''': Указывает, необходимо ли запрашивать пароль при запуске приложения.&lt;br /&gt;
#* '''Формат''': Имя пользователя, пароль аккаунта которого должен быть введён.&lt;br /&gt;
#* '''Возможные значения''': &amp;lt;code&amp;gt;default&amp;lt;/code&amp;gt; — будет запрошен пароль &amp;lt;code&amp;gt;123asd890&amp;lt;/code&amp;gt;.&lt;br /&gt;
#* '''[Если] Параметр отсутствует:''' Пароль не запрашивается.&lt;br /&gt;
#* '''Пример значения''': &amp;lt;code&amp;gt;PasswordPrompt=default&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Категория:AgavaSCADA/AgavaPLC]]&lt;/div&gt;</summary>
		<author><name>SharipovRR</name></author>
	</entry>
	<entry>
		<id>https://docs.kb-agava.ru/index.php?title=ASLauncher&amp;diff=2584</id>
		<title>ASLauncher</title>
		<link rel="alternate" type="text/html" href="https://docs.kb-agava.ru/index.php?title=ASLauncher&amp;diff=2584"/>
		<updated>2024-10-07T11:48:54Z</updated>

		<summary type="html">&lt;p&gt;SharipovRR: /* Конфигурирование ASLauncher */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;ASLauncher - менеджер рабочего стола AgavaSCADA.&lt;br /&gt;
&lt;br /&gt;
ASLauncher предназначен для использования совместно со средой исполнения и позволяет заменить собой штатную оболочку Windows. &lt;br /&gt;
&lt;br /&gt;
ASLauncher реализует следующие функции:&lt;br /&gt;
&lt;br /&gt;
* автозапуск AgavaSCADA;&lt;br /&gt;
* замена рабочего стола Windows;&lt;br /&gt;
* программный сторожевой таймер.&lt;br /&gt;
&lt;br /&gt;
== Автозапуск AgavaSCADA ==&lt;br /&gt;
&lt;br /&gt;
== Замена рабочего стола Windows ==&lt;br /&gt;
Заменив стандартную оболочку Windows на ASLauncher, для пользователя блокируются все штатные функции Windows - запуск установленных программ, все операции с файлами на дисках и т. д. ASLauncher предоставляет пользователю собственный рабочий стол со следующими функциями:&lt;br /&gt;
&lt;br /&gt;
* Запуск среды исполнения.&lt;br /&gt;
* Перезагрузка и выключение АРМ.&lt;br /&gt;
* Просмотр текущей даты и времени.&lt;br /&gt;
* Запуск штатной оболочки Windows.&lt;br /&gt;
&lt;br /&gt;
== Конфигурирование ASLauncher, версия 1.2 ==&lt;br /&gt;
Все настройки ASLauncher хранятся в файле aslauncher.ini, размещаемом в папке с исполняемыми файлами AgavaSCADA.&lt;br /&gt;
 [General]&lt;br /&gt;
 ProcessFile=&amp;quot;G:/workspace/AgavaScada/bin-win/rtu.exe&amp;quot;&lt;br /&gt;
 RestartProcessAt=00:02&lt;br /&gt;
 Wallpaper=&amp;quot;./GNOME-Shell.jpg&amp;quot;&lt;br /&gt;
&lt;br /&gt;
== Конфигурирование ASLauncher, версия 1.5 ==&lt;br /&gt;
&lt;br /&gt;
=== Описание конфигурационного файла и его параметров ===&lt;br /&gt;
Данный раздел описывает структуру и назначение конфигурационного файла формата &amp;lt;code&amp;gt;.ini&amp;lt;/code&amp;gt;, используемого в нашем приложении. Этот файл содержит настройки для обоев рабочего стола и путей к лог-файлам приложения и связанных процессов.&lt;br /&gt;
&lt;br /&gt;
==== Общая структура &amp;lt;code&amp;gt;.ini&amp;lt;/code&amp;gt; файла ====&lt;br /&gt;
Файл &amp;lt;code&amp;gt;.ini&amp;lt;/code&amp;gt; состоит из разделов и пар ключ-значение:&lt;br /&gt;
&lt;br /&gt;
* '''Разделы''': обозначаются названием в квадратных скобках, например, &amp;lt;code&amp;gt;[General]&amp;lt;/code&amp;gt;.&lt;br /&gt;
* '''Ключи и значения''': пары вида &amp;lt;code&amp;gt;Ключ=Значение&amp;lt;/code&amp;gt;, определяющие настройку.&lt;br /&gt;
&lt;br /&gt;
Образец общей структуры &amp;lt;code&amp;gt;.ini&amp;lt;/code&amp;gt; файла:&lt;br /&gt;
 [SectionName]&lt;br /&gt;
 Key1=Value1&lt;br /&gt;
 Key2=Value2&lt;br /&gt;
&lt;br /&gt;
==== Описание ключей и значений &amp;lt;code&amp;gt;.ini&amp;lt;/code&amp;gt; файла ====&lt;br /&gt;
Секция &amp;lt;code&amp;gt;[General]&amp;lt;/code&amp;gt; содержит основные настройки приложения.&lt;br /&gt;
&lt;br /&gt;
* Ключ &amp;lt;code&amp;gt;Wallpaper&amp;lt;/code&amp;gt;&lt;br /&gt;
** '''Описание''': Задает путь к изображению, используемому в качестве обоев рабочего стола.&lt;br /&gt;
** '''Тип''': Файл.&lt;br /&gt;
** '''Формат''': Абсолютный путь.&lt;br /&gt;
** '''Пример значения''': &amp;lt;code&amp;gt;Wallpaper=/home/user/Images/wallpaper.png&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Ключ &amp;lt;code&amp;gt;ProcessErrorLogFile&amp;lt;/code&amp;gt;&lt;br /&gt;
** '''Описание''': Указывает путь к файлу, в который записываются ошибки основного процесса приложения.&lt;br /&gt;
** '''Тип''': Файл.&lt;br /&gt;
** '''Формат''': Абсолютный путь.&lt;br /&gt;
** '''Пример значения''': &amp;lt;code&amp;gt;ProcessErrorLogFile=/var/log/rtu/rtu_process_error.log&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Ключ &amp;lt;code&amp;gt;ProcessStandardLogFile&amp;lt;/code&amp;gt;&lt;br /&gt;
** '''Описание''': Указывает путь к файлу, в который записывается стандартный вывод основного процесса приложения.&lt;br /&gt;
** '''Тип''': Файл.&lt;br /&gt;
** '''Формат''': Абсолютный путь.&lt;br /&gt;
** '''Пример значения''': &amp;lt;code&amp;gt;ProcessStandardLogFile=/var/log/rtu/rtu_process_standard.log&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Ключ &amp;lt;code&amp;gt;ASLauncherLogsDir&amp;lt;/code&amp;gt;&lt;br /&gt;
** '''Описание''': Задает директорию для хранения файлов логирования ASLauncher и приложений рабочего стола.&lt;br /&gt;
** '''Тип''': Директория.&lt;br /&gt;
** '''Формат''': Абсолютный путь.&lt;br /&gt;
** '''Пример значения''': &amp;lt;code&amp;gt;ASLauncherLogsDir=/var/log/aslauncher&amp;lt;/code&amp;gt;&lt;br /&gt;
* Ключ &amp;lt;code&amp;gt;DesktopEntriesDir&amp;lt;/code&amp;gt;&lt;br /&gt;
** '''Описание''': Задает директорию, в которой хранятся файлы записей рабочих столов (Desktop Entries) в формате &amp;lt;code&amp;gt;.desktop&amp;lt;/code&amp;gt;. Эти файлы используются для запуска приложений и отображения их в меню или на панели запуска.&lt;br /&gt;
** '''Тип''': Директория.&lt;br /&gt;
** '''Формат''': Абсолютный путь.&lt;br /&gt;
** '''Пример значения''': &amp;lt;code&amp;gt;DesktopEntriesDir=/usr/share/aslauncher&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Примечание ====&lt;br /&gt;
&lt;br /&gt;
* Все описанные параметры, за исключением &amp;lt;code&amp;gt;Wallpaper&amp;lt;/code&amp;gt;, являются обязательными и должны иметь корректные значения для запуска и штатной работы программы. Параметр &amp;lt;code&amp;gt;Wallpaper&amp;lt;/code&amp;gt; является необязательным и в случае его отсутствия фон рабочего стола будет залит черным цветом.&lt;br /&gt;
&lt;br /&gt;
* Убедитесь, что все указанные пути существуют и имеют соответствующие права доступа для чтения и записи.&lt;br /&gt;
&lt;br /&gt;
* Используйте абсолютные пути для обеспечения корректной работы независимо от текущей директории.&lt;br /&gt;
&lt;br /&gt;
=== Документация для &amp;lt;code&amp;gt;.desktop&amp;lt;/code&amp;gt; файлов ===&lt;br /&gt;
Файлы с расширением &amp;lt;code&amp;gt;.desktop&amp;lt;/code&amp;gt; используются для описания приложений и их поведения в системе. Они позволяют интегрировать приложения в графическую оболочку, определяя, как они отображаются на рабочем столе, какие иконки используют, и как запускаются.&lt;br /&gt;
&lt;br /&gt;
==== Общая структура &amp;lt;code&amp;gt;.desktop&amp;lt;/code&amp;gt; файла ====&lt;br /&gt;
Файл состоит из секции &amp;lt;code&amp;gt;[Desktop Entry]&amp;lt;/code&amp;gt; и набора ключей с соответствующими значениями. Пример файла:&lt;br /&gt;
 [Desktop Entry]&lt;br /&gt;
 Name=MyApp&lt;br /&gt;
 Process=/usr/bin/myapp&lt;br /&gt;
 Arguments=--mode test&lt;br /&gt;
 Icon=/usr/share/icons/myapp.png&lt;br /&gt;
 Type=Application&lt;br /&gt;
 AutoLaunch=true&lt;br /&gt;
 AutoRestartOnCrash=true&lt;br /&gt;
 User=myuser&lt;br /&gt;
 PasswordPrompt=false&lt;br /&gt;
&lt;br /&gt;
==== Примечания ====&lt;br /&gt;
&lt;br /&gt;
* Для некоторых ключей используются значения типа 'Логическое значение'. Возможные варианты значений для данного типа: &amp;lt;code&amp;gt;true&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;True&amp;lt;/code&amp;gt; или &amp;lt;code&amp;gt;1&amp;lt;/code&amp;gt; — для истинных значений и &amp;lt;code&amp;gt;false&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;False&amp;lt;/code&amp;gt; или &amp;lt;code&amp;gt;0&amp;lt;/code&amp;gt; — для ложных.&lt;br /&gt;
* Ключи и значения чувствительны к регистру — убедитесь, что вы используете правильный регистр для каждого ключа.&lt;br /&gt;
* Убедитесь, что все указанные пути существуют и доступны для чтения/запуска.&lt;br /&gt;
* Если иконка не отображается, значит, по меньшей мере одна пара ключ-значение содержит ошибку. Чтобы исправить это, проверьте файлы логирования ASLauncher — информация, которая поможет выявить и исправить эту ошибку, будет отображена там.&lt;br /&gt;
&lt;br /&gt;
==== Описание ключей и значений &amp;lt;code&amp;gt;.desktop&amp;lt;/code&amp;gt; файла ====&lt;br /&gt;
&lt;br /&gt;
# Ключ &amp;lt;code&amp;gt;Name&amp;lt;/code&amp;gt;&lt;br /&gt;
#* '''Описание''': Отображаемое имя приложения в меню или панели запуска.&lt;br /&gt;
#* '''Формат''': Строка.&lt;br /&gt;
#* '''Пример значения''': &amp;lt;code&amp;gt;Name=MyApp&amp;lt;/code&amp;gt;&lt;br /&gt;
# Ключ &amp;lt;code&amp;gt;Process&amp;lt;/code&amp;gt;&lt;br /&gt;
#* '''Описание''': Путь к исполняемому файлу приложения.&lt;br /&gt;
#* '''Формат''': Абсолютный путь.&lt;br /&gt;
#* '''Пример значения''': &amp;lt;code&amp;gt;Process=/usr/bin/myapp&amp;lt;/code&amp;gt;&lt;br /&gt;
# Ключ &amp;lt;code&amp;gt;Arguments&amp;lt;/code&amp;gt;&lt;br /&gt;
#* '''Описание''': Аргументы командной строки, передаваемые приложению при запуске.&lt;br /&gt;
#* '''Формат''': Строка с аргументами, разделенными пробелами.&lt;br /&gt;
#* '''Пример значения''': &amp;lt;code&amp;gt;Arguments=--mode test --verbose&amp;lt;/code&amp;gt;&lt;br /&gt;
# Ключ &amp;lt;code&amp;gt;Icon&amp;lt;/code&amp;gt;&lt;br /&gt;
#* '''Описание''': Путь к файлу иконки или имя иконки из темы значков.&lt;br /&gt;
#* '''Формат''': Абсолютный путь.&lt;br /&gt;
#* '''Пример значения''': &amp;lt;code&amp;gt;Icon=/usr/share/icons/hicolor/48x48/apps/myapp.png&amp;lt;/code&amp;gt;&lt;br /&gt;
# Ключ &amp;lt;code&amp;gt;Type&amp;lt;/code&amp;gt;&lt;br /&gt;
#* '''Описание''': Тип записи, определяет, как система будет обрабатывать файл.&lt;br /&gt;
#* '''Возможные значения''': &amp;lt;code&amp;gt;Application&amp;lt;/code&amp;gt; — исполняемое приложение.&lt;br /&gt;
#* '''Пример значения''': &amp;lt;code&amp;gt;Type=Application&amp;lt;/code&amp;gt;&lt;br /&gt;
# Ключ &amp;lt;code&amp;gt;AutoLaunch&amp;lt;/code&amp;gt;&lt;br /&gt;
#* '''Описание''': Указывает, должно ли приложение запускаться автоматически при входе пользователя в систему.&lt;br /&gt;
#* '''Формат''': Логическое значение.&lt;br /&gt;
#* '''[Если] Параметр отсутствует''': Значение по умолчанию — &amp;lt;code&amp;gt;false&amp;lt;/code&amp;gt;&lt;br /&gt;
#* '''Пример значения''': &amp;lt;code&amp;gt;AutoLaunch=true&amp;lt;/code&amp;gt;&lt;br /&gt;
# Ключ &amp;lt;code&amp;gt;AutoRestartOnCrash&amp;lt;/code&amp;gt;&lt;br /&gt;
#* '''Описание''': Определяет, будет ли приложение автоматически перезапущено в случае сбоя или аварийного завершения.&lt;br /&gt;
#* '''Формат''': Логическое значение.&lt;br /&gt;
#* '''[Если] Параметр отсутствует''': Значение по умолчанию — &amp;lt;code&amp;gt;false&amp;lt;/code&amp;gt;&lt;br /&gt;
#* '''Пример значения''': &amp;lt;code&amp;gt;AutoRestartOnCrash=true&amp;lt;/code&amp;gt;&lt;br /&gt;
# Ключ &amp;lt;code&amp;gt;User&amp;lt;/code&amp;gt;&lt;br /&gt;
#* '''Описание''': Имя пользователя, от имени которого должно запускаться приложение.&lt;br /&gt;
#* '''Формат''': Строка.&lt;br /&gt;
#* '''[Если] Параметр отсутствует''': Приложение запускается из-под пользователя &amp;lt;code&amp;gt;root&amp;lt;/code&amp;gt;.&lt;br /&gt;
#* '''Пример значения''': &amp;lt;code&amp;gt;User=john_doe&amp;lt;/code&amp;gt;&lt;br /&gt;
# Ключ &amp;lt;code&amp;gt;PasswordPrompt&amp;lt;/code&amp;gt;&lt;br /&gt;
#* '''Описание''': Указывает, необходимо ли запрашивать пароль при запуске приложения.&lt;br /&gt;
#* '''Формат''': Имя пользователя, пароль аккаунта которого должен быть введён.&lt;br /&gt;
#* '''Возможные значения''': &amp;lt;code&amp;gt;default&amp;lt;/code&amp;gt; — будет запрошен пароль &amp;lt;code&amp;gt;123asd890&amp;lt;/code&amp;gt;.&lt;br /&gt;
#* '''[Если] Параметр отсутствует:''' Пароль не запрашивается.&lt;br /&gt;
#* '''Пример значения''': &amp;lt;code&amp;gt;PasswordPrompt=default&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Категория:AgavaSCADA/AgavaPLC]]&lt;/div&gt;</summary>
		<author><name>SharipovRR</name></author>
	</entry>
	<entry>
		<id>https://docs.kb-agava.ru/index.php?title=ASLauncher&amp;diff=2583</id>
		<title>ASLauncher</title>
		<link rel="alternate" type="text/html" href="https://docs.kb-agava.ru/index.php?title=ASLauncher&amp;diff=2583"/>
		<updated>2024-10-07T11:48:13Z</updated>

		<summary type="html">&lt;p&gt;SharipovRR: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;ASLauncher - менеджер рабочего стола AgavaSCADA.&lt;br /&gt;
&lt;br /&gt;
ASLauncher предназначен для использования совместно со средой исполнения и позволяет заменить собой штатную оболочку Windows. &lt;br /&gt;
&lt;br /&gt;
ASLauncher реализует следующие функции:&lt;br /&gt;
&lt;br /&gt;
* автозапуск AgavaSCADA;&lt;br /&gt;
* замена рабочего стола Windows;&lt;br /&gt;
* программный сторожевой таймер.&lt;br /&gt;
&lt;br /&gt;
== Автозапуск AgavaSCADA ==&lt;br /&gt;
&lt;br /&gt;
== Замена рабочего стола Windows ==&lt;br /&gt;
Заменив стандартную оболочку Windows на ASLauncher, для пользователя блокируются все штатные функции Windows - запуск установленных программ, все операции с файлами на дисках и т. д. ASLauncher предоставляет пользователю собственный рабочий стол со следующими функциями:&lt;br /&gt;
&lt;br /&gt;
* Запуск среды исполнения.&lt;br /&gt;
* Перезагрузка и выключение АРМ.&lt;br /&gt;
* Просмотр текущей даты и времени.&lt;br /&gt;
* Запуск штатной оболочки Windows.&lt;br /&gt;
&lt;br /&gt;
== Конфигурирование ASLauncher ==&lt;br /&gt;
Все настройки ASLauncher хранятся в файле aslauncher.ini, размещаемом в папке с исполняемыми файлами AgavaSCADA.&lt;br /&gt;
 [General]&lt;br /&gt;
 ProcessFile=&amp;quot;G:/workspace/AgavaScada/bin-win/rtu.exe&amp;quot;&lt;br /&gt;
 RestartProcessAt=00:02&lt;br /&gt;
 Wallpaper=&amp;quot;./GNOME-Shell.jpg&amp;quot;&lt;br /&gt;
&lt;br /&gt;
== Конфигурирование ASLauncher, версия 1.5 ==&lt;br /&gt;
&lt;br /&gt;
=== Описание конфигурационного файла и его параметров ===&lt;br /&gt;
Данный раздел описывает структуру и назначение конфигурационного файла формата &amp;lt;code&amp;gt;.ini&amp;lt;/code&amp;gt;, используемого в нашем приложении. Этот файл содержит настройки для обоев рабочего стола и путей к лог-файлам приложения и связанных процессов.&lt;br /&gt;
&lt;br /&gt;
==== Общая структура &amp;lt;code&amp;gt;.ini&amp;lt;/code&amp;gt; файла ====&lt;br /&gt;
Файл &amp;lt;code&amp;gt;.ini&amp;lt;/code&amp;gt; состоит из разделов и пар ключ-значение:&lt;br /&gt;
&lt;br /&gt;
* '''Разделы''': обозначаются названием в квадратных скобках, например, &amp;lt;code&amp;gt;[General]&amp;lt;/code&amp;gt;.&lt;br /&gt;
* '''Ключи и значения''': пары вида &amp;lt;code&amp;gt;Ключ=Значение&amp;lt;/code&amp;gt;, определяющие настройку.&lt;br /&gt;
&lt;br /&gt;
Образец общей структуры &amp;lt;code&amp;gt;.ini&amp;lt;/code&amp;gt; файла:&lt;br /&gt;
 [SectionName]&lt;br /&gt;
 Key1=Value1&lt;br /&gt;
 Key2=Value2&lt;br /&gt;
&lt;br /&gt;
==== Описание ключей и значений &amp;lt;code&amp;gt;.ini&amp;lt;/code&amp;gt; файла ====&lt;br /&gt;
Секция &amp;lt;code&amp;gt;[General]&amp;lt;/code&amp;gt; содержит основные настройки приложения.&lt;br /&gt;
&lt;br /&gt;
* Ключ &amp;lt;code&amp;gt;Wallpaper&amp;lt;/code&amp;gt;&lt;br /&gt;
** '''Описание''': Задает путь к изображению, используемому в качестве обоев рабочего стола.&lt;br /&gt;
** '''Тип''': Файл.&lt;br /&gt;
** '''Формат''': Абсолютный путь.&lt;br /&gt;
** '''Пример значения''': &amp;lt;code&amp;gt;Wallpaper=/home/user/Images/wallpaper.png&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Ключ &amp;lt;code&amp;gt;ProcessErrorLogFile&amp;lt;/code&amp;gt;&lt;br /&gt;
** '''Описание''': Указывает путь к файлу, в который записываются ошибки основного процесса приложения.&lt;br /&gt;
** '''Тип''': Файл.&lt;br /&gt;
** '''Формат''': Абсолютный путь.&lt;br /&gt;
** '''Пример значения''': &amp;lt;code&amp;gt;ProcessErrorLogFile=/var/log/rtu/rtu_process_error.log&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Ключ &amp;lt;code&amp;gt;ProcessStandardLogFile&amp;lt;/code&amp;gt;&lt;br /&gt;
** '''Описание''': Указывает путь к файлу, в который записывается стандартный вывод основного процесса приложения.&lt;br /&gt;
** '''Тип''': Файл.&lt;br /&gt;
** '''Формат''': Абсолютный путь.&lt;br /&gt;
** '''Пример значения''': &amp;lt;code&amp;gt;ProcessStandardLogFile=/var/log/rtu/rtu_process_standard.log&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Ключ &amp;lt;code&amp;gt;ASLauncherLogsDir&amp;lt;/code&amp;gt;&lt;br /&gt;
** '''Описание''': Задает директорию для хранения файлов логирования ASLauncher и приложений рабочего стола.&lt;br /&gt;
** '''Тип''': Директория.&lt;br /&gt;
** '''Формат''': Абсолютный путь.&lt;br /&gt;
** '''Пример значения''': &amp;lt;code&amp;gt;ASLauncherLogsDir=/var/log/aslauncher&amp;lt;/code&amp;gt;&lt;br /&gt;
* Ключ &amp;lt;code&amp;gt;DesktopEntriesDir&amp;lt;/code&amp;gt;&lt;br /&gt;
** '''Описание''': Задает директорию, в которой хранятся файлы записей рабочих столов (Desktop Entries) в формате &amp;lt;code&amp;gt;.desktop&amp;lt;/code&amp;gt;. Эти файлы используются для запуска приложений и отображения их в меню или на панели запуска.&lt;br /&gt;
** '''Тип''': Директория.&lt;br /&gt;
** '''Формат''': Абсолютный путь.&lt;br /&gt;
** '''Пример значения''': &amp;lt;code&amp;gt;DesktopEntriesDir=/usr/share/aslauncher&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Примечание ====&lt;br /&gt;
&lt;br /&gt;
* Все описанные параметры, за исключением &amp;lt;code&amp;gt;Wallpaper&amp;lt;/code&amp;gt;, являются обязательными и должны иметь корректные значения для запуска и штатной работы программы. Параметр &amp;lt;code&amp;gt;Wallpaper&amp;lt;/code&amp;gt; является необязательным и в случае его отсутствия фон рабочего стола будет залит черным цветом.&lt;br /&gt;
&lt;br /&gt;
* Убедитесь, что все указанные пути существуют и имеют соответствующие права доступа для чтения и записи.&lt;br /&gt;
&lt;br /&gt;
* Используйте абсолютные пути для обеспечения корректной работы независимо от текущей директории.&lt;br /&gt;
&lt;br /&gt;
=== Документация для &amp;lt;code&amp;gt;.desktop&amp;lt;/code&amp;gt; файлов ===&lt;br /&gt;
Файлы с расширением &amp;lt;code&amp;gt;.desktop&amp;lt;/code&amp;gt; используются для описания приложений и их поведения в системе. Они позволяют интегрировать приложения в графическую оболочку, определяя, как они отображаются на рабочем столе, какие иконки используют, и как запускаются.&lt;br /&gt;
&lt;br /&gt;
==== Общая структура &amp;lt;code&amp;gt;.desktop&amp;lt;/code&amp;gt; файла ====&lt;br /&gt;
Файл состоит из секции &amp;lt;code&amp;gt;[Desktop Entry]&amp;lt;/code&amp;gt; и набора ключей с соответствующими значениями. Пример файла:&lt;br /&gt;
 [Desktop Entry]&lt;br /&gt;
 Name=MyApp&lt;br /&gt;
 Process=/usr/bin/myapp&lt;br /&gt;
 Arguments=--mode test&lt;br /&gt;
 Icon=/usr/share/icons/myapp.png&lt;br /&gt;
 Type=Application&lt;br /&gt;
 AutoLaunch=true&lt;br /&gt;
 AutoRestartOnCrash=true&lt;br /&gt;
 User=myuser&lt;br /&gt;
 PasswordPrompt=false&lt;br /&gt;
&lt;br /&gt;
==== Примечания ====&lt;br /&gt;
&lt;br /&gt;
* Для некоторых ключей используются значения типа 'Логическое значение'. Возможные варианты значений для данного типа: &amp;lt;code&amp;gt;true&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;True&amp;lt;/code&amp;gt; или &amp;lt;code&amp;gt;1&amp;lt;/code&amp;gt; — для истинных значений и &amp;lt;code&amp;gt;false&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;False&amp;lt;/code&amp;gt; или &amp;lt;code&amp;gt;0&amp;lt;/code&amp;gt; — для ложных.&lt;br /&gt;
* Ключи и значения чувствительны к регистру — убедитесь, что вы используете правильный регистр для каждого ключа.&lt;br /&gt;
* Убедитесь, что все указанные пути существуют и доступны для чтения/запуска.&lt;br /&gt;
* Если иконка не отображается, значит, по меньшей мере одна пара ключ-значение содержит ошибку. Чтобы исправить это, проверьте файлы логирования ASLauncher — информация, которая поможет выявить и исправить эту ошибку, будет отображена там.&lt;br /&gt;
&lt;br /&gt;
==== Описание ключей и значений &amp;lt;code&amp;gt;.desktop&amp;lt;/code&amp;gt; файла ====&lt;br /&gt;
&lt;br /&gt;
# Ключ &amp;lt;code&amp;gt;Name&amp;lt;/code&amp;gt;&lt;br /&gt;
#* '''Описание''': Отображаемое имя приложения в меню или панели запуска.&lt;br /&gt;
#* '''Формат''': Строка.&lt;br /&gt;
#* '''Пример значения''': &amp;lt;code&amp;gt;Name=MyApp&amp;lt;/code&amp;gt;&lt;br /&gt;
# Ключ &amp;lt;code&amp;gt;Process&amp;lt;/code&amp;gt;&lt;br /&gt;
#* '''Описание''': Путь к исполняемому файлу приложения.&lt;br /&gt;
#* '''Формат''': Абсолютный путь.&lt;br /&gt;
#* '''Пример значения''': &amp;lt;code&amp;gt;Process=/usr/bin/myapp&amp;lt;/code&amp;gt;&lt;br /&gt;
# Ключ &amp;lt;code&amp;gt;Arguments&amp;lt;/code&amp;gt;&lt;br /&gt;
#* '''Описание''': Аргументы командной строки, передаваемые приложению при запуске.&lt;br /&gt;
#* '''Формат''': Строка с аргументами, разделенными пробелами.&lt;br /&gt;
#* '''Пример значения''': &amp;lt;code&amp;gt;Arguments=--mode test --verbose&amp;lt;/code&amp;gt;&lt;br /&gt;
# Ключ &amp;lt;code&amp;gt;Icon&amp;lt;/code&amp;gt;&lt;br /&gt;
#* '''Описание''': Путь к файлу иконки или имя иконки из темы значков.&lt;br /&gt;
#* '''Формат''': Абсолютный путь.&lt;br /&gt;
#* '''Пример значения''': &amp;lt;code&amp;gt;Icon=/usr/share/icons/hicolor/48x48/apps/myapp.png&amp;lt;/code&amp;gt;&lt;br /&gt;
# Ключ &amp;lt;code&amp;gt;Type&amp;lt;/code&amp;gt;&lt;br /&gt;
#* '''Описание''': Тип записи, определяет, как система будет обрабатывать файл.&lt;br /&gt;
#* '''Возможные значения''': &amp;lt;code&amp;gt;Application&amp;lt;/code&amp;gt; — исполняемое приложение.&lt;br /&gt;
#* '''Пример значения''': &amp;lt;code&amp;gt;Type=Application&amp;lt;/code&amp;gt;&lt;br /&gt;
# Ключ &amp;lt;code&amp;gt;AutoLaunch&amp;lt;/code&amp;gt;&lt;br /&gt;
#* '''Описание''': Указывает, должно ли приложение запускаться автоматически при входе пользователя в систему.&lt;br /&gt;
#* '''Формат''': Логическое значение.&lt;br /&gt;
#* '''[Если] Параметр отсутствует''': Значение по умолчанию — &amp;lt;code&amp;gt;false&amp;lt;/code&amp;gt;&lt;br /&gt;
#* '''Пример значения''': &amp;lt;code&amp;gt;AutoLaunch=true&amp;lt;/code&amp;gt;&lt;br /&gt;
# Ключ &amp;lt;code&amp;gt;AutoRestartOnCrash&amp;lt;/code&amp;gt;&lt;br /&gt;
#* '''Описание''': Определяет, будет ли приложение автоматически перезапущено в случае сбоя или аварийного завершения.&lt;br /&gt;
#* '''Формат''': Логическое значение.&lt;br /&gt;
#* '''[Если] Параметр отсутствует''': Значение по умолчанию — &amp;lt;code&amp;gt;false&amp;lt;/code&amp;gt;&lt;br /&gt;
#* '''Пример значения''': &amp;lt;code&amp;gt;AutoRestartOnCrash=true&amp;lt;/code&amp;gt;&lt;br /&gt;
# Ключ &amp;lt;code&amp;gt;User&amp;lt;/code&amp;gt;&lt;br /&gt;
#* '''Описание''': Имя пользователя, от имени которого должно запускаться приложение.&lt;br /&gt;
#* '''Формат''': Строка.&lt;br /&gt;
#* '''[Если] Параметр отсутствует''': Приложение запускается из-под пользователя &amp;lt;code&amp;gt;root&amp;lt;/code&amp;gt;.&lt;br /&gt;
#* '''Пример значения''': &amp;lt;code&amp;gt;User=john_doe&amp;lt;/code&amp;gt;&lt;br /&gt;
# Ключ &amp;lt;code&amp;gt;PasswordPrompt&amp;lt;/code&amp;gt;&lt;br /&gt;
#* '''Описание''': Указывает, необходимо ли запрашивать пароль при запуске приложения.&lt;br /&gt;
#* '''Формат''': Имя пользователя, пароль аккаунта которого должен быть введён.&lt;br /&gt;
#* '''Возможные значения''': &amp;lt;code&amp;gt;default&amp;lt;/code&amp;gt; — будет запрошен пароль &amp;lt;code&amp;gt;123asd890&amp;lt;/code&amp;gt;.&lt;br /&gt;
#* '''[Если] Параметр отсутствует:''' Пароль не запрашивается.&lt;br /&gt;
#* '''Пример значения''': &amp;lt;code&amp;gt;PasswordPrompt=default&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Категория:AgavaSCADA/AgavaPLC]]&lt;/div&gt;</summary>
		<author><name>SharipovRR</name></author>
	</entry>
</feed>