Переменные: различия между версиями
Viktor (обсуждение | вклад) Нет описания правки |
Viktor (обсуждение | вклад) Нет описания правки |
||
| Строка 1: | Строка 1: | ||
<h2>Введение</h2> | <h2>Введение</h2> | ||
<pre> | <pre> | ||
В версии 2.7.14 - модуль работает не корректно, следует скопировать модуль версии 2.7.13 или | В версии 2.7.14 - модуль работает не корректно, следует скопировать модуль версии 2.7.13 или | ||
выполнить обновление SCADA до версии 2.7.15 | |||
В версии 2.7.4-2.7.5 | В версии 2.7.4-2.7.5 | ||
требуется | требуется обновление модуля variables при работе с доп. примитивами | ||
(статус примитивов не обновлялся после запуска SCADA, до открытия окна Дополнительно / Переменные) | (статус примитивов не обновлялся после запуска SCADA, до открытия окна Дополнительно / Переменные) | ||
</pre> | </pre> | ||
| Строка 40: | Строка 38: | ||
<ul> | <ul> | ||
<li>Дискретный сигнал (набор примитивов) - это наиболее типовой случай применения.</li> | <li>Дискретный сигнал (набор примитивов) - это наиболее типовой случай применения.</li> | ||
<li>LED, Изображение (см. | <li>LED, Изображение (см. <a href="%D0%94%D0%BE%D0%BF%D0%BE%D0%BB%D0%BD%D0%B8%D1%82%D0%B5%D0%BB%D1%8C%D0%BD%D1%8B%D0%B5%20%D0%BF%D1%80%D0%B8%D0%BC%D0%B8%D1%82%D0%B8%D0%B2%D1%8B">дополнительные примитивы</a>)</li> | ||
<li>и т.п.</li> | <li>и т.п.</li> | ||
</ul> | </ul> | ||
<h2>Настройка OPC-сервера</h2> | |||
Никакой специальной настройки OPC-сервера при использовании переменных не требуется. | <p>Никакой специальной настройки OPC-сервера при использовании переменных не требуется.</p> | ||
| <p> </p> | ||
| <p> </p> | ||
<h2>Настройка Scada</h2> | |||
В режиме настройки выбрать меню Вид / Переменные | <p>В режиме настройки выбрать меню Вид / Переменные</p> | ||
<p><img _fck_mw_filename="Variables1.PNG" _fck_mw_location="center" _fck_mw_origimgheight="432" _fck_mw_origimgwidth="1130" alt="Настройка Переменных" class="fck_mw_center" src="/images/a/a2/Variables1.PNG" style="vertical-align:middle;" title="Настройка Переменных" width="600" /></p> | |||
Слева указаны зарегистрированные Переменные. | <p>Слева указаны зарегистрированные Переменные.</p> | ||
Имя переменной всегда начинается с | <p>Имя переменной всегда начинается с <b>"VAR."</b></p> | ||
Для добавления Переменной следует кликнуть правой кнопкой мыши в списке Переменной. | <p>Для добавления Переменной следует кликнуть правой кнопкой мыши в списке Переменной.</p> | ||
Элементы меню добавления переменной: | <p>Элементы меню добавления переменной:</p> | ||
<ul> | |||
<li>Добавить - добавить новую переменную</li> | |||
<li>Копия (полная) - скопировать настройки текущей переменной (удобно при разбивке битовой маски одного Item, при настройке <a href="Modbus-%D1%83%D1%81%D1%82%D1%80%D0%BE%D0%B9%D1%81%D1%82%D0%B2%D0%B0">Modbus-устройства</a>)</li> | |||
<li>Копия (без тегов) - скопировать настройки текущей переменной без заполнения Тегов</li> | |||
<li>Удалить - удалить переменную</li> | |||
<li>Имя в буфер обмена - скопировать имя переменной в буфер обмена для последующей вставки в свойство Тег Примитива на карте</li> | |||
</ul> | |||
Настройки переменной: | <p>Настройки переменной:</p> | ||
<ul> | |||
<li>Название - имя переменной (без приставки <b>VAR.</b>)</li> | |||
<li>Журнал событие - название типа неисправности (будет отображаться в <a href="%D0%96%D1%83%D1%80%D0%BD%D0%B0%D0%BB%20%D1%81%D0%BE%D0%B1%D1%8B%D1%82%D0%B8%D0%B9%2C%20%D0%B7%D0%B0%D1%8F%D0%B2%D0%BE%D0%BA%2C%20%D0%B7%D0%B0%D0%BF%D0%B8%D1%81%D0%B8%20%D0%BF%D0%B5%D1%80%D0%B5%D0%B3%D0%BE%D0%B2%D0%BE%D1%80%D0%BE%D0%B2">Журнале событий</a>)</li> | |||
<li>Журнал адрес - адрес (отображаться в <a href="%D0%96%D1%83%D1%80%D0%BD%D0%B0%D0%BB%20%D1%81%D0%BE%D0%B1%D1%8B%D1%82%D0%B8%D0%B9%2C%20%D0%B7%D0%B0%D1%8F%D0%B2%D0%BE%D0%BA%2C%20%D0%B7%D0%B0%D0%BF%D0%B8%D1%81%D0%B8%20%D0%BF%D0%B5%D1%80%D0%B5%D0%B3%D0%BE%D0%B2%D0%BE%D1%80%D0%BE%D0%B2">Журнале событий</a>)</li> | |||
<li>Задержка - задержка в (с) сработки переменной. Только для типа переменной - Дискретный сигнал</li> | |||
<li>Тип данных - тип переменной | |||
<ul> | |||
<li>Дискретный сигнал</li> | |||
<li>Число</li> | |||
</ul> | |||
</li> | |||
<li>Тип обработки - реализуемая функция обработки значения | |||
<ul> | |||
<li>для Дискретного сигнала - выбрать из списка (подробнее см. примеры далее)</li> | |||
<li>для Числа - использовать ВЫРАЖЕНИЕ (подробнее см. примеры далее)</li> | |||
</ul> | |||
</li> | |||
<li>Выражение - для типа ВЫРАЖЕНИЕ следует указать правило обработки входного значения</li> | |||
</ul> | |||
Далее следует добавить Item OPC-сервера, выполнив клик правой кнопкой мыши в списке Тэги / Переменные. | <p>Далее следует добавить Item OPC-сервера, выполнив клик правой кнопкой мыши в списке Тэги / Переменные.</p> | ||
После добавления Item в окне отобразится их текущее состояние и вычисленное текущее состояние Переменной. | <p>После добавления Item в окне отобразится их текущее состояние и вычисленное текущее состояние Переменной.</p> | ||
В настоящее время реализованы следующие функции обработки (Типы обработки) значений Item: | <p>В настоящее время реализованы следующие функции обработки (Типы обработки) значений Item:</p> | ||
<table class="wikitable"> | |||
<tbody> | |||
<tr> | |||
<th>Тип функции</th> | |||
<th>Описание</th> | |||
<th>Число связанных Item</th> | |||
<th>Типы связанных Item</th> | |||
</tr> | |||
<tr> | |||
<td>OR</td> | |||
<td>Логическое ИЛИ (анализируется только младший бит Item)</td> | |||
<td>Любое</td> | |||
<td> | |||
<ul> | |||
<li>дискретный сигнал;</li> | |||
<li>канал ПГС;</li> | |||
<li>канал управления.</li> | |||
</ul> | |||
</td> | |||
</tr> | |||
<tr> | |||
<td>AND</td> | |||
<td>Логическое И (анализируется только младший бит Item)</td> | |||
<td>Любое</td> | |||
<td> | |||
<ul> | |||
<li>дискретный сигнал;</li> | |||
<li>канал ПГС;</li> | |||
<li>канал управления.</li> | |||
</ul> | |||
</td> | |||
</tr> | |||
<tr> | |||
<td>XOR</td> | |||
<td>Логическое исключающее ИЛИ (анализируется только младший бит Item)</td> | |||
<td>2</td> | |||
<td> | |||
<ul> | |||
<li>дискретный сигнал;</li> | |||
<li>канал ПГС;</li> | |||
<li>канал управления.</li> | |||
</ul> | |||
</td> | |||
</tr> | |||
<tr> | |||
<td> !=0</td> | |||
<td>Сравнение с 0 (авария - числовое значение <> 0)</td> | |||
<td>1</td> | |||
<td>Числовое значение</td> | |||
</tr> | |||
<tr> | |||
<td>ВЫРАЖЕНИЕ</td> | |||
<td>Логическое выражение</td> | |||
<td>Любое</td> | |||
<td>Числовое значение</td> | |||
</tr> | |||
</tbody> | |||
</table> | |||
<p>Последний Тип удобно использовать при визуализации данных контроллеров сторонних производителей, например: <a href="Modbus-%D1%83%D1%81%D1%82%D1%80%D0%BE%D0%B9%D1%81%D1%82%D0%B2%D0%B0">Modbus-устройств</a>.</p> | |||
<p>Выражения - позволяют реализовать более сложную модель обработки значения одного или нескольких Item. При этом каждый добавленный Item в разделе Теги и/или Переменные получает условное буквенное обозначение X, Y, Z, K, L и т.д.</p> | |||
<p>Примеры построения выражений:</p> | |||
<table class="wikitable"> | |||
<tbody> | |||
<tr> | |||
<th>Выражение</th> | |||
<th>Описание</th> | |||
</tr> | |||
<tr> | |||
<td>BIT (X;1)</td> | |||
<td>Проверить установленный 1-ый бит в значении Item-а. Нумерация бит 32..1 (1 - младший)</td> | |||
</tr> | |||
<tr> | |||
<td>X > 10</td> | |||
<td>Проверить, что значение Item-a больше 10</td> | |||
</tr> | |||
<tr> | |||
<td>X == 5</td> | |||
<td>Проверить, что значение Item-a равно 5</td> | |||
</tr> | |||
<tr> | |||
<td>X != 2</td> | |||
<td>Проверить, что значение Item-a не равно 2</td> | |||
</tr> | |||
<tr> | |||
<td>X || Y</td> | |||
<td>Логическое ИЛИ двух значений Item</td> | |||
</tr> | |||
<tr> | |||
<td>X && Y</td> | |||
<td>Логическое И двух значений Item</td> | |||
</tr> | |||
<tr> | |||
<td>X % 2</td> | |||
<td>X mod 2</td> | |||
</tr> | |||
<tr> | |||
<td>X div 2</td> | |||
<td>X div 2</td> | |||
</tr> | |||
<tr> | |||
<td>X && $FFFF !=0</td> | |||
<td>Проверить факт установки первых 16-ти бит</td> | |||
</tr> | |||
</tbody> | |||
</table> | |||
<p>После внесения изменений следует сохранить их, нажав на пиктограмму "Сохранить все" панели инструментов.</p> | |||
<h2>Пример работы</h2> | |||
<p>Рассмотрим следующий демонстрационный пример.</p> | |||
<p>Предположим у нас есть дискретных сигнала: Item1 и Item2.</p> | |||
<p>Оба Item связаны с двумя переменными VAR.1 и VAR.2. Обе переменные типа Дискретный сигнал,</p> | |||
<ul> | |||
<li>Переменная VAR.1 - тип обработки AND (логическое "и")</li> | |||
<li>Переменная VAR.2 - тип обработки OR (логическое "или").</li> | |||
</ul> | |||
<p>Отобразим на карте четыре примитива типа дискретный датчик и свяжем их с переменными и Item.</p> | |||
<p>1. Ни один из дискретных сигналов не находится в Активном состоянии.</p> | |||
<p><img _fck_mw_filename="Variables norma.PNG" _fck_mw_location="center" _fck_mw_origimgheight="199" _fck_mw_origimgwidth="678" alt="Переменные Норма" class="fck_mw_center" src="/images/c/ce/Variables_norma.PNG" style="vertical-align:middle;" title="Переменные Норма" width="600" /></p> | |||
<p>2. Один из дискретных сигналов находится в Активном состоянии.</p> | |||
<p>Это приводит к переводу в сигнальное состояние переменной VAR.2 (OR) - тип ИЛИ.</p> | |||
<p><img _fck_mw_filename="Variables alert.PNG" _fck_mw_location="center" _fck_mw_origimgheight="204" _fck_mw_origimgwidth="670" alt="Переменные Норма" class="fck_mw_center" src="/images/f/fd/Variables_alert.PNG" style="vertical-align:middle;" title="Переменные Норма" width="600" /></p> | |||
<p>3. Оба дискретных сигнала находятся в Активном состоянии.</p> | |||
Это приводит к переводу в сигнальное состояние | <p>Это приводит к переводу в сигнальное состояние обоих переменных.</p> | ||
<p><img _fck_mw_filename="Variables alert2.PNG" _fck_mw_location="center" _fck_mw_origimgheight="185" _fck_mw_origimgwidth="664" alt="Переменные Норма" class="fck_mw_center" src="/images/3/3d/Variables_alert2.PNG" style="vertical-align:middle;" title="Переменные Норма" width="600" /></p> | |||
<p> </p> | |||
<p> </p> | |||
<h2>Служебные переменные</h2> | |||
<p>Служебные переменные создаются автоматически по запросу и не отображаюся в общем окне настроек переменных.</p> | |||
<p> </p> | |||
<h3>VAR.Timer</h3> | |||
<pre> | |||
Добавлено в версии 2.7.17</pre> | |||
<p>Переменная формирует сигнал (счетчик) один раз в указанное количество секунд и может быть использована, например: с примитивом Текстовое поле и <a href="Text-%D1%84%D1%83%D0%BD%D0%BA%D1%86%D0%B8%D1%8F">text-функцией</a> #Time для отображения текущего времени, или для других целей.</p> | |||
<p>Для создания переменной, просто укажите ее имя в поле Тэг выбранного примитива:</p> | |||
<pre> | |||
VAR.Timer N</pre> | |||
<p>где N=1, 2, 3, .... - количество секунд между обновлениями состояния</p> | |||
< | |||
<p>Например:</p> | |||
<ul> | |||
< | <li>VAR.Timer 1 - обновление 1 раз в секунду</li> | ||
<li>VAR.Timer 30 - обновление 1 раз в 30 секунд</li> | |||
</ul> | |||
<h3>VAR.ATimer</h3> | |||
<pre> | |||
Добавлено в версии 2.7.17</pre> | |||
<p>В отличии от VAR.Timer - переменная меняет свое значение из 0 в 1 и обратно.</p> | |||
<p>Для создания переменной, просто укажите ее имя в поле Тэг выбранного примитива:</p> | |||
< | |||
<pre> | |||
VAR.ATimer N</pre> | |||
<p>где N=1, 2, 3, .... - количество секунд между обновлениями состояния</p> | |||
<p>Например:</p> | |||
<ul> | |||
<li>VAR.ATimer 1 - обновление 1 раз в секунду</li> | |||
<li>VAR.ATimer 30 - обновление 1 раз в 30 секунд</li> | |||
</ul> | |||
<h3>VAR.Ping</h3> | |||
<pre> | |||
Добавлено в версии 2.7.17</pre> | |||
<p>Переменная выполняет ping указанного IP-адреса с заданной периодичностью.</p> | |||
< | |||
Переменная | <p><b>Замечание.</b><br /> | ||
Переменная введена для помощи на этапе пусконаладки.<br /> | |||
Может быть использована например, для отображения графика доступности оборудования по сети. <br /> | |||
Не следует использовать<b>более 3</b> переменных данного типа в рабочей конфигурации (это может привести к замедлению механизма работы переменных в целом).<br /> | |||
В рабочей конфигурации следует использовать похожий функционал в <a href="Tekon%20OPC-%D1%81%D0%B5%D1%80%D0%B2%D0%B5%D1%80">ОРС-серверве</a>, добавив устройство Компьютерная сеть \ Ping </p> | |||
<p>Результатом переменной является время отклика на ping-запрос в мс.</p> | |||
<p>Для создания переменной, просто укажите в поле Тэг выбранного примитива:</p> | |||
<pre> | |||
<pre>VAR.Ping 192_168_1_100 | VAR.Ping 192_168_1_100 | ||
или | или | ||
VAR.Ping 192_168_1_100 60</pre> | VAR.Ping 192_168_1_100 60</pre> | ||
где: | <p>где: </p> | ||
<ul> | |||
<li>192_168_1_100 - проверяемый IP-адрес, вместо точки следует указываться знак подчеркивания _.</li> | |||
<li>60 (не обязательный параметр) - число секунд между проверками</li> | |||
</ul> | |||
Таймаут выполняемого ping-запроса составляет 300 мс. | <p>Таймаут выполняемого ping-запроса составляет 300 мс.</p> | ||
<p> </p> | |||
<h3>Задержка отображения вызовов ПГС</h3> | |||
На объектах с двумя АРМ, которые отображают одни и теже каналы ПГС, может потребоваться, чтобы каналы на АРМ1 отображались с задержкой относительно АРМ2. | <p>На объектах с двумя АРМ, которые отображают одни и теже каналы ПГС, может потребоваться, чтобы каналы на АРМ1 отображались с задержкой относительно АРМ2.</p> | ||
Т.е. факт вызова сначала отображался на АРМ2, а затем через указанную задержку (если не был обработан на АРМ2), отобразился на АРМ1. | <p>Т.е. факт вызова сначала отображался на АРМ2, а затем через указанную задержку (если не был обработан на АРМ2), отобразился на АРМ1.</p> | ||
Для этого, для требуемых каналов ПГС на АРМ1, следует изменить в настройках свойство тэг, дописав вручную в начале тега VAR.D10, где 10 - длительность задержки в секундах | <p>Для этого, для требуемых каналов ПГС на АРМ1, следует изменить в настройках свойство тэг, дописав вручную в начале тега VAR.D10, где 10 - длительность задержки в секундах</p> | ||
Например: | <p>Например:</p> | ||
<ul> | |||
<li>было: DA.[localhost{188D08EC-72CB-425B-8EA8-EE2308736440}].КУН-IP4 - 0.VoiceChannel01</li> | |||
<li>стало: VAR.D10.DA.[localhost{188D08EC-72CB-425B-8EA8-EE2308736440}].КУН-IP4 - 0.VoiceChannel01</li> | |||
</ul> | |||
<p> </p> | |||
<h3>VAR.AGG_VOICE - агрегатор голосовых каналов ПГС</h3> | |||
<pre> | |||
<pre>Доступно с версии АСУД.SCADA 3.0</pre> | Доступно с версии АСУД.SCADA 3.0</pre> | ||
Переменная позволяет взаимодействовать с каналами переговорной связи, которые не отражены на карте SCADA данного АРМ. | <p>Переменная позволяет взаимодействовать с каналами переговорной связи, которые не отражены на карте SCADA данного АРМ.</p> | ||
Это дает возможность реализовать функцию помощи в обработке входящих вызовов соседних АРМ. При этом АРМы могут быть настроены, как на работу с одним ОРС-сервервером, так и с несколькими серверами. | <p>Это дает возможность реализовать функцию помощи в обработке входящих вызовов соседних АРМ. При этом АРМы могут быть настроены, как на работу с одним ОРС-сервервером, так и с несколькими серверами.</p> | ||
Пусть у нас есть три АРМ следующей конфигурации: | <p>Пусть у нас есть три АРМ следующей конфигурации:</p> | ||
<ul> | |||
<li>АРМ1 - ОРС-сервер 1</li> | |||
<li>АРМ2 - ОРС-сервер 1</li> | |||
<li>АРМ3 - OPC-сервер 2</li> | |||
</ul> | |||
На каждом из АРМ отрисована своя карта сигналов (причем эти сигналы могут повторяться или не повторяться). Необходимо предоставить возможность диспетчерам АРМ-ов обработывать входящие вызовы соседних АРМ, если основной диспетчер не может на них ответить. | <p>На каждом из АРМ отрисована своя карта сигналов (причем эти сигналы могут повторяться или не повторяться). Необходимо предоставить возможность диспетчерам АРМ-ов обработывать входящие вызовы соседних АРМ, если основной диспетчер не может на них ответить.</p> | ||
Для этого следует выполнить следующие действия: на каждом АРМ зарегистрировать все ОРС-сервера, т.е. | <p>Для этого следует выполнить следующие действия: на каждом АРМ зарегистрировать все ОРС-сервера, т.е.</p> | ||
<ul> | |||
<li>АРМ1 - ОРС-сервер 1, ОРС-сервер-2</li> | |||
<li>АРМ2 - ОРС-сервер 1, ОРС-сервер-2</li> | |||
<li>АРМ3 - OPC-сервер 2, ОРС-сервер-1</li> | |||
</ul> | |||
Далее на каждом из АРМ создать подвид, на котором разместить два примитива: | <p>Далее на каждом из АРМ создать подвид, на котором разместить два примитива:</p> | ||
<ul> | |||
<li>Переговорное устройство | |||
<ul> | |||
<li>Тэг: VAR.AGG_VOICE</li> | |||
<li>Приоритет: Обычный - необходимо для приоритетной обработки локальных входящих вызовов</li> | |||
</ul> | |||
</li> | |||
<li>Таблица свойств - для отображения источника вызова | |||
<ul> | |||
<li>Тэг: VAR.AGG_VOICE</li> | |||
</ul> | |||
</li> | |||
</ul> | |||
<p><img _fck_mw_filename="Agg voice 1.PNG" _fck_mw_location="center" _fck_mw_origimgheight="466" _fck_mw_origimgwidth="834" alt="Agg voice 1.PNG" class="fck_mw_center" src="/images/a/aa/Agg_voice_1.PNG" style="vertical-align:middle;" title="Agg voice 1.PNG" width="350" /></p> | |||
<p><img _fck_mw_filename="Agg voice 2.PNG" _fck_mw_location="center" _fck_mw_origimgheight="416" _fck_mw_origimgwidth="809" alt="Agg voice 2.PNG" class="fck_mw_center" src="/images/d/d7/Agg_voice_2.PNG" style="vertical-align:middle;" title="Agg voice 2.PNG" width="350" />Сохраните изменения. На этом настройка завершена.</p> | |||
Теперь в случае, если например: на АРМ2, АРМ3 придет один или несколько входящих вызовов, на который локальный диспетчер не ответит в течение 5 секунд, этот вызов отобразиться на АРМ1, в том случае, если вызов пришел с контроллера или концентратора, с IP-адресом которого в настояший момент нет установленной ПГС. | <p>Теперь в случае, если например: на АРМ2, АРМ3 придет один или несколько входящих вызовов, на который локальный диспетчер не ответит в течение 5 секунд, этот вызов отобразиться на АРМ1, в том случае, если вызов пришел с контроллера или концентратора, с IP-адресом которого в настояший момент нет установленной ПГС.</p> | ||
Существующие ограничения: | <p>Существующие ограничения:</p> | ||
<ul> | |||
<li>Диспетчера АРМ могут одновременно совершаться вызовы на контроллеры / концентраторы с уникальными IP-адресами.<br /> | |||
Нельзя одновременно позвонить на один и тот же IP-адрес устройства.</li> | |||
<li>Вызов будет записан в журнал на том АРМ, диспетчер которого обработает вызов.</li> | |||
</ul> | |||
| <p> </p> | ||
| <p> </p> | ||
| <p> </p> | ||
<h2>Пример решения типовых задач</h2> | |||
<h3>Канал управления + дискретный сигнал обратной связи</h3> | |||
<p>Необходимо проинформировать об ошибке, если после включения канала управления, не происходит сработка дискретного сигнала обратной связи в течение 30 секунд.</p> | |||
<p><b>Решение</b></p> | |||
<p>Открываем меню Вид / Переменные</p> | |||
<p>Добавляем переменную VAR.1</p> | |||
<p>VAR.1</p> | |||
<ul> | |||
<li>Журнал событие - Неисправность устройства </li> | |||
<li>Журнал адрес - адрес установки устройства</li> | |||
<li>Тэги | |||
<ul> | |||
<li>Тэг Канала управления</li> | |||
<li>Тэг Дискретного сигнала, подтверждающего корректность включения (чего-то)</li> | |||
</ul> | |||
</li> | |||
<li>Тип - Дискретный сигнал</li> | |||
<li>Тип обработки - ВЫРАЖЕНИЕ</li> | |||
<li>Выражение - X == 32769 && BIT(Y;1) == 0</li> | |||
<li>Задержка - 30 с</li> | |||
</ul> | |||
<p>Отобразить на карте:</p> | |||
<ul> | |||
<li>примитив канал управления</li> | |||
<li>примитив дискретный сигнал обратной связи </li> | |||
<li>примитив дискретный сигнал, связанный с переменной VAR.1</li> | |||
</ul> | |||
<h3>Выделить битовое состояние из числа (Modbus-устройства)</h3> | |||
= | <p>Пусть есть <a href="Modbus-%D1%83%D1%81%D1%82%D1%80%D0%BE%D0%B9%D1%81%D1%82%D0%B2%D0%B0">Modbus-устройство</a>, в одном из регистров которого записано целочисленное значение, являющееся битовым набором состояний датчиков и, например: установленный в единицу 3-й бит является признаком ошибки Насоса1, которую необходимо визуализировать.</p> | ||
<p><b>Замечание</b></p> | |||
<p>Решение данной задачи, устарело. В настоящий момент, вы можете выделять нужные биты либо сразу в настройках Modbus-устройства в ОРС-сервере, либо воспользоваться примитивом <a href="%D0%94%D0%BE%D0%BF%D0%BE%D0%BB%D0%BD%D0%B8%D1%82%D0%B5%D0%BB%D1%8C%D0%BD%D1%8B%D0%B5%20%D0%BF%D1%80%D0%B8%D0%BC%D0%B8%D1%82%D0%B8%D0%B2%D1%8B">LED-индикатор</a>, у которого присутствует данный функционал.</p> | |||
Решение | <p><b>Решение</b></p> | ||
<p>Открываем меню Вид / Переменные</p> | |||
<p>Добавляем переменную VAR.0, переименовываем имя в VAR.Pump1</p> | |||
<p>VAR.Pump1</p> | |||
<ul> | |||
<li>Журнал событие - Насос 1</li> | |||
<li>Журнал адрес - адрес установки устройства</li> | |||
<li>Тэги | |||
<ul> | |||
<li>ваше название Тэга</li> | |||
</ul> | |||
</li> | |||
<li>Тип - Дискретный сигнал</li> | |||
<li>Тип обработки - ВЫРАЖЕНИЕ</li> | |||
<li>Выражение - BIT(X;3)</li> | |||
</ul> | |||
<p>Отобразить на ситуационном плане любой примитив Дискретный датчик и в свойстве Тэг указать вручную VAR.Pump1 (нажать Enter).</p> | |||
<h3>Логическая группировка сигналов</h3> | |||
<p>Пусть есть устройство, подключенное к концентратору КУН, которое выдает 5 дискретных сигналов.<br /> | |||
При этом считается, что:</p> | |||
<ul> | |||
<li>одновременная сработка сигналов 1-3 с двухминутной задержкой является переходом устройства в состояние <i>Неисправность</i></li> | |||
<li>cработка любого из сигналов 4,5 без задержки является признаком состояния <i>Выше нормы</i>.</li> | |||
</ul> | |||
<p>Необходимо отобразить в Scada 2-а дискретных датчика, отражающих состояния устройства:</p> | |||
<ul> | |||
<li>Неисправность.</li> | |||
<li>Выше нормы.</li> | |||
</ul> | |||
<p><b>Решение</b></p> | |||
<p>1. Настройка OPC-сервера</p> | |||
1. | <p>Настраиваем концентратор КУН-2Д.1, к которому подключено устройство.</p> | ||
Настраиваем | <p>Настраиваем 5 дискретных сигналов (например, 1 сигнал устройства подключен к входу 3 КУН, 2 - к 4, и т.д.):</p> | ||
<ul> | |||
<li>для каждого из входов КУН 3 - 5 указываем задержку 2 мин.</li> | |||
</ul> | |||
<p>Закрываем Конфигуратор</p> | |||
<p>2. Настройка Scada</p> | |||
<p>Открываем меню Вид / Переменные</p> | |||
<p>Добавляем 2 переменные VAR.0, VAR.1</p> | |||
<p>VAR.0</p> | |||
<ul> | |||
<li>Тип - Дискретный сигнал</li> | |||
<li>Тип обработки - AND</li> | |||
<li>Журнал - Неисправность</li> | |||
<li>Адрес - адрес установки устройства</li> | |||
<li>Тэги | |||
<ul> | |||
<li>КУН.DiscretChannel1 (это 3 вход на плате КУН-2Д.1)</li> | |||
<li>КУН.DiscretChannel2</li> | |||
<li>КУН.DiscretChannel3</li> | |||
</ul> | |||
</li> | |||
</ul> | |||
<p>VAR.1</p> | |||
<ul> | |||
<li>Тип - Дискретный сигнал</li> | |||
<li>Тип обработки - OR</li> | |||
<li>Журнал - Выше нормы</li> | |||
<li>Адрес - адрес установки устройства</li> | |||
<li>Тэги | |||
<ul> | |||
<li>КУН.DiscretChannel4 (это 6 вход на плате КУН-2Д.1)</li> | |||
<li>КУН.DiscretChannel5</li> | |||
</ul> | |||
</li> | |||
</ul> | |||
Отобразить на ситуационном плане любой примитив Дискретный датчик и в свойстве Тэг указать вручную VAR.0 (нажать Enter) | <p>Отобразить на ситуационном плане любой примитив Дискретный датчик и в свойстве Тэг указать вручную VAR.0 (нажать Enter)</p> | ||
Повторить тоже самое для переменной VAR.1 | <p>Повторить тоже самое для переменной VAR.1</p> | ||
<p><span _fcknotitle="true" class="fck_mw_category" contenteditable="false">SCADA</span></p> | |||
Версия от 09:17, 25 августа 2025
Введение
В версии 2.7.14 - модуль работает не корректно, следует скопировать модуль версии 2.7.13 или выполнить обновление SCADA до версии 2.7.15 В версии 2.7.4-2.7.5 требуется обновление модуля variables при работе с доп. примитивами (статус примитивов не обновлялся после запуска SCADA, до открытия окна Дополнительно / Переменные)
В программе АСУД.SCADA доступен ряд дополнительных функциональных возможностей по анализу состояния группы дискретных сигналов.
Данный функционал реализуется с помощью механизма "Переменных".
Переменные - это некий аналог Item в понимании OPC-сервера, но реализованный на стороне Scada.
Переменная в общем случае может быть связана с несколькими Item OPC-сервера. Значение Переменной при этом определяется, как функция от состояния связанных Item.
Переменная может быть двух типов:
- Дискретный сигнал - обычно это некая логическая операция над группой Item, например: отобразить аварию, если Item1 и Item2 в аварии.
- Число - некая математическая операция над значением одного или нескольких Item.
Значение, которые может принимать Переменная типа дискретный сигнал:
- 0 - состояние Норма
- 1 - состояние Активное (Сигнальное)
- 3 - подтвержденное сигнальное состояние (желтый восклицательный знак).
Изменение состояния Переменной (если она связана с какми-либо Примитивом) будет отображаться в Журнале событий и в Оперативном журнале.
В Scada можно привязать Переменную через свойство Тэг почти к любым примитивам, например:
- Дискретный сигнал (набор примитивов) - это наиболее типовой случай применения.
- LED, Изображение (см. <a href="%D0%94%D0%BE%D0%BF%D0%BE%D0%BB%D0%BD%D0%B8%D1%82%D0%B5%D0%BB%D1%8C%D0%BD%D1%8B%D0%B5%20%D0%BF%D1%80%D0%B8%D0%BC%D0%B8%D1%82%D0%B8%D0%B2%D1%8B">дополнительные примитивы</a>)
- и т.п.
Настройка OPC-сервера
Никакой специальной настройки OPC-сервера при использовании переменных не требуется.
Настройка Scada
В режиме настройки выбрать меню Вид / Переменные
<img _fck_mw_filename="Variables1.PNG" _fck_mw_location="center" _fck_mw_origimgheight="432" _fck_mw_origimgwidth="1130" alt="Настройка Переменных" class="fck_mw_center" src="/images/a/a2/Variables1.PNG" style="vertical-align:middle;" title="Настройка Переменных" width="600" />
Слева указаны зарегистрированные Переменные.
Имя переменной всегда начинается с "VAR."
Для добавления Переменной следует кликнуть правой кнопкой мыши в списке Переменной.
Элементы меню добавления переменной:
- Добавить - добавить новую переменную
- Копия (полная) - скопировать настройки текущей переменной (удобно при разбивке битовой маски одного Item, при настройке <a href="Modbus-%D1%83%D1%81%D1%82%D1%80%D0%BE%D0%B9%D1%81%D1%82%D0%B2%D0%B0">Modbus-устройства</a>)
- Копия (без тегов) - скопировать настройки текущей переменной без заполнения Тегов
- Удалить - удалить переменную
- Имя в буфер обмена - скопировать имя переменной в буфер обмена для последующей вставки в свойство Тег Примитива на карте
Настройки переменной:
- Название - имя переменной (без приставки VAR.)
- Журнал событие - название типа неисправности (будет отображаться в <a href="%D0%96%D1%83%D1%80%D0%BD%D0%B0%D0%BB%20%D1%81%D0%BE%D0%B1%D1%8B%D1%82%D0%B8%D0%B9%2C%20%D0%B7%D0%B0%D1%8F%D0%B2%D0%BE%D0%BA%2C%20%D0%B7%D0%B0%D0%BF%D0%B8%D1%81%D0%B8%20%D0%BF%D0%B5%D1%80%D0%B5%D0%B3%D0%BE%D0%B2%D0%BE%D1%80%D0%BE%D0%B2">Журнале событий</a>)
- Журнал адрес - адрес (отображаться в <a href="%D0%96%D1%83%D1%80%D0%BD%D0%B0%D0%BB%20%D1%81%D0%BE%D0%B1%D1%8B%D1%82%D0%B8%D0%B9%2C%20%D0%B7%D0%B0%D1%8F%D0%B2%D0%BE%D0%BA%2C%20%D0%B7%D0%B0%D0%BF%D0%B8%D1%81%D0%B8%20%D0%BF%D0%B5%D1%80%D0%B5%D0%B3%D0%BE%D0%B2%D0%BE%D1%80%D0%BE%D0%B2">Журнале событий</a>)
- Задержка - задержка в (с) сработки переменной. Только для типа переменной - Дискретный сигнал
- Тип данных - тип переменной
- Дискретный сигнал
- Число
- Тип обработки - реализуемая функция обработки значения
- для Дискретного сигнала - выбрать из списка (подробнее см. примеры далее)
- для Числа - использовать ВЫРАЖЕНИЕ (подробнее см. примеры далее)
- Выражение - для типа ВЫРАЖЕНИЕ следует указать правило обработки входного значения
Далее следует добавить Item OPC-сервера, выполнив клик правой кнопкой мыши в списке Тэги / Переменные.
После добавления Item в окне отобразится их текущее состояние и вычисленное текущее состояние Переменной.
В настоящее время реализованы следующие функции обработки (Типы обработки) значений Item:
<tbody> </tbody>| Тип функции | Описание | Число связанных Item | Типы связанных Item |
|---|---|---|---|
| OR | Логическое ИЛИ (анализируется только младший бит Item) | Любое |
|
| AND | Логическое И (анализируется только младший бит Item) | Любое |
|
| XOR | Логическое исключающее ИЛИ (анализируется только младший бит Item) | 2 |
|
| !=0 | Сравнение с 0 (авария - числовое значение <> 0) | 1 | Числовое значение |
| ВЫРАЖЕНИЕ | Логическое выражение | Любое | Числовое значение |
Последний Тип удобно использовать при визуализации данных контроллеров сторонних производителей, например: <a href="Modbus-%D1%83%D1%81%D1%82%D1%80%D0%BE%D0%B9%D1%81%D1%82%D0%B2%D0%B0">Modbus-устройств</a>.
Выражения - позволяют реализовать более сложную модель обработки значения одного или нескольких Item. При этом каждый добавленный Item в разделе Теги и/или Переменные получает условное буквенное обозначение X, Y, Z, K, L и т.д.
Примеры построения выражений:
<tbody> </tbody>| Выражение | Описание |
|---|---|
| BIT (X;1) | Проверить установленный 1-ый бит в значении Item-а. Нумерация бит 32..1 (1 - младший) |
| X > 10 | Проверить, что значение Item-a больше 10 |
| X == 5 | Проверить, что значение Item-a равно 5 |
| X != 2 | Проверить, что значение Item-a не равно 2 |
| X || Y | Логическое ИЛИ двух значений Item |
| X && Y | Логическое И двух значений Item |
| X % 2 | X mod 2 |
| X div 2 | X div 2 |
| X && $FFFF !=0 | Проверить факт установки первых 16-ти бит |
После внесения изменений следует сохранить их, нажав на пиктограмму "Сохранить все" панели инструментов.
Пример работы
Рассмотрим следующий демонстрационный пример.
Предположим у нас есть дискретных сигнала: Item1 и Item2.
Оба Item связаны с двумя переменными VAR.1 и VAR.2. Обе переменные типа Дискретный сигнал,
- Переменная VAR.1 - тип обработки AND (логическое "и")
- Переменная VAR.2 - тип обработки OR (логическое "или").
Отобразим на карте четыре примитива типа дискретный датчик и свяжем их с переменными и Item.
1. Ни один из дискретных сигналов не находится в Активном состоянии.
<img _fck_mw_filename="Variables norma.PNG" _fck_mw_location="center" _fck_mw_origimgheight="199" _fck_mw_origimgwidth="678" alt="Переменные Норма" class="fck_mw_center" src="/images/c/ce/Variables_norma.PNG" style="vertical-align:middle;" title="Переменные Норма" width="600" />
2. Один из дискретных сигналов находится в Активном состоянии.
Это приводит к переводу в сигнальное состояние переменной VAR.2 (OR) - тип ИЛИ.
<img _fck_mw_filename="Variables alert.PNG" _fck_mw_location="center" _fck_mw_origimgheight="204" _fck_mw_origimgwidth="670" alt="Переменные Норма" class="fck_mw_center" src="/images/f/fd/Variables_alert.PNG" style="vertical-align:middle;" title="Переменные Норма" width="600" />
3. Оба дискретных сигнала находятся в Активном состоянии.
Это приводит к переводу в сигнальное состояние обоих переменных.
<img _fck_mw_filename="Variables alert2.PNG" _fck_mw_location="center" _fck_mw_origimgheight="185" _fck_mw_origimgwidth="664" alt="Переменные Норма" class="fck_mw_center" src="/images/3/3d/Variables_alert2.PNG" style="vertical-align:middle;" title="Переменные Норма" width="600" />
Служебные переменные
Служебные переменные создаются автоматически по запросу и не отображаюся в общем окне настроек переменных.
VAR.Timer
Добавлено в версии 2.7.17
Переменная формирует сигнал (счетчик) один раз в указанное количество секунд и может быть использована, например: с примитивом Текстовое поле и <a href="Text-%D1%84%D1%83%D0%BD%D0%BA%D1%86%D0%B8%D1%8F">text-функцией</a> #Time для отображения текущего времени, или для других целей.
Для создания переменной, просто укажите ее имя в поле Тэг выбранного примитива:
VAR.Timer N
где N=1, 2, 3, .... - количество секунд между обновлениями состояния
Например:
- VAR.Timer 1 - обновление 1 раз в секунду
- VAR.Timer 30 - обновление 1 раз в 30 секунд
VAR.ATimer
Добавлено в версии 2.7.17
В отличии от VAR.Timer - переменная меняет свое значение из 0 в 1 и обратно.
Для создания переменной, просто укажите ее имя в поле Тэг выбранного примитива:
VAR.ATimer N
где N=1, 2, 3, .... - количество секунд между обновлениями состояния
Например:
- VAR.ATimer 1 - обновление 1 раз в секунду
- VAR.ATimer 30 - обновление 1 раз в 30 секунд
VAR.Ping
Добавлено в версии 2.7.17
Переменная выполняет ping указанного IP-адреса с заданной периодичностью.
Замечание.
Переменная введена для помощи на этапе пусконаладки.
Может быть использована например, для отображения графика доступности оборудования по сети.
Не следует использоватьболее 3 переменных данного типа в рабочей конфигурации (это может привести к замедлению механизма работы переменных в целом).
В рабочей конфигурации следует использовать похожий функционал в <a href="Tekon%20OPC-%D1%81%D0%B5%D1%80%D0%B2%D0%B5%D1%80">ОРС-серверве</a>, добавив устройство Компьютерная сеть \ Ping
Результатом переменной является время отклика на ping-запрос в мс.
Для создания переменной, просто укажите в поле Тэг выбранного примитива:
VAR.Ping 192_168_1_100 или VAR.Ping 192_168_1_100 60
где:
- 192_168_1_100 - проверяемый IP-адрес, вместо точки следует указываться знак подчеркивания _.
- 60 (не обязательный параметр) - число секунд между проверками
Таймаут выполняемого ping-запроса составляет 300 мс.
Задержка отображения вызовов ПГС
На объектах с двумя АРМ, которые отображают одни и теже каналы ПГС, может потребоваться, чтобы каналы на АРМ1 отображались с задержкой относительно АРМ2.
Т.е. факт вызова сначала отображался на АРМ2, а затем через указанную задержку (если не был обработан на АРМ2), отобразился на АРМ1.
Для этого, для требуемых каналов ПГС на АРМ1, следует изменить в настройках свойство тэг, дописав вручную в начале тега VAR.D10, где 10 - длительность задержки в секундах
Например:
- было: DA.[localhost{188D08EC-72CB-425B-8EA8-EE2308736440}].КУН-IP4 - 0.VoiceChannel01
- стало: VAR.D10.DA.[localhost{188D08EC-72CB-425B-8EA8-EE2308736440}].КУН-IP4 - 0.VoiceChannel01
VAR.AGG_VOICE - агрегатор голосовых каналов ПГС
Доступно с версии АСУД.SCADA 3.0
Переменная позволяет взаимодействовать с каналами переговорной связи, которые не отражены на карте SCADA данного АРМ.
Это дает возможность реализовать функцию помощи в обработке входящих вызовов соседних АРМ. При этом АРМы могут быть настроены, как на работу с одним ОРС-сервервером, так и с несколькими серверами.
Пусть у нас есть три АРМ следующей конфигурации:
- АРМ1 - ОРС-сервер 1
- АРМ2 - ОРС-сервер 1
- АРМ3 - OPC-сервер 2
На каждом из АРМ отрисована своя карта сигналов (причем эти сигналы могут повторяться или не повторяться). Необходимо предоставить возможность диспетчерам АРМ-ов обработывать входящие вызовы соседних АРМ, если основной диспетчер не может на них ответить.
Для этого следует выполнить следующие действия: на каждом АРМ зарегистрировать все ОРС-сервера, т.е.
- АРМ1 - ОРС-сервер 1, ОРС-сервер-2
- АРМ2 - ОРС-сервер 1, ОРС-сервер-2
- АРМ3 - OPC-сервер 2, ОРС-сервер-1
Далее на каждом из АРМ создать подвид, на котором разместить два примитива:
- Переговорное устройство
- Тэг: VAR.AGG_VOICE
- Приоритет: Обычный - необходимо для приоритетной обработки локальных входящих вызовов
- Таблица свойств - для отображения источника вызова
- Тэг: VAR.AGG_VOICE
<img _fck_mw_filename="Agg voice 1.PNG" _fck_mw_location="center" _fck_mw_origimgheight="466" _fck_mw_origimgwidth="834" alt="Agg voice 1.PNG" class="fck_mw_center" src="/images/a/aa/Agg_voice_1.PNG" style="vertical-align:middle;" title="Agg voice 1.PNG" width="350" />
<img _fck_mw_filename="Agg voice 2.PNG" _fck_mw_location="center" _fck_mw_origimgheight="416" _fck_mw_origimgwidth="809" alt="Agg voice 2.PNG" class="fck_mw_center" src="/images/d/d7/Agg_voice_2.PNG" style="vertical-align:middle;" title="Agg voice 2.PNG" width="350" />Сохраните изменения. На этом настройка завершена.
Теперь в случае, если например: на АРМ2, АРМ3 придет один или несколько входящих вызовов, на который локальный диспетчер не ответит в течение 5 секунд, этот вызов отобразиться на АРМ1, в том случае, если вызов пришел с контроллера или концентратора, с IP-адресом которого в настояший момент нет установленной ПГС.
Существующие ограничения:
- Диспетчера АРМ могут одновременно совершаться вызовы на контроллеры / концентраторы с уникальными IP-адресами.
Нельзя одновременно позвонить на один и тот же IP-адрес устройства. - Вызов будет записан в журнал на том АРМ, диспетчер которого обработает вызов.
Пример решения типовых задач
Канал управления + дискретный сигнал обратной связи
Необходимо проинформировать об ошибке, если после включения канала управления, не происходит сработка дискретного сигнала обратной связи в течение 30 секунд.
Решение
Открываем меню Вид / Переменные
Добавляем переменную VAR.1
VAR.1
- Журнал событие - Неисправность устройства
- Журнал адрес - адрес установки устройства
- Тэги
- Тэг Канала управления
- Тэг Дискретного сигнала, подтверждающего корректность включения (чего-то)
- Тип - Дискретный сигнал
- Тип обработки - ВЫРАЖЕНИЕ
- Выражение - X == 32769 && BIT(Y;1) == 0
- Задержка - 30 с
Отобразить на карте:
- примитив канал управления
- примитив дискретный сигнал обратной связи
- примитив дискретный сигнал, связанный с переменной VAR.1
Выделить битовое состояние из числа (Modbus-устройства)
Пусть есть <a href="Modbus-%D1%83%D1%81%D1%82%D1%80%D0%BE%D0%B9%D1%81%D1%82%D0%B2%D0%B0">Modbus-устройство</a>, в одном из регистров которого записано целочисленное значение, являющееся битовым набором состояний датчиков и, например: установленный в единицу 3-й бит является признаком ошибки Насоса1, которую необходимо визуализировать.
Замечание
Решение данной задачи, устарело. В настоящий момент, вы можете выделять нужные биты либо сразу в настройках Modbus-устройства в ОРС-сервере, либо воспользоваться примитивом <a href="%D0%94%D0%BE%D0%BF%D0%BE%D0%BB%D0%BD%D0%B8%D1%82%D0%B5%D0%BB%D1%8C%D0%BD%D1%8B%D0%B5%20%D0%BF%D1%80%D0%B8%D0%BC%D0%B8%D1%82%D0%B8%D0%B2%D1%8B">LED-индикатор</a>, у которого присутствует данный функционал.
Решение
Открываем меню Вид / Переменные
Добавляем переменную VAR.0, переименовываем имя в VAR.Pump1
VAR.Pump1
- Журнал событие - Насос 1
- Журнал адрес - адрес установки устройства
- Тэги
- ваше название Тэга
- Тип - Дискретный сигнал
- Тип обработки - ВЫРАЖЕНИЕ
- Выражение - BIT(X;3)
Отобразить на ситуационном плане любой примитив Дискретный датчик и в свойстве Тэг указать вручную VAR.Pump1 (нажать Enter).
Логическая группировка сигналов
Пусть есть устройство, подключенное к концентратору КУН, которое выдает 5 дискретных сигналов.
При этом считается, что:
- одновременная сработка сигналов 1-3 с двухминутной задержкой является переходом устройства в состояние Неисправность
- cработка любого из сигналов 4,5 без задержки является признаком состояния Выше нормы.
Необходимо отобразить в Scada 2-а дискретных датчика, отражающих состояния устройства:
- Неисправность.
- Выше нормы.
Решение
1. Настройка OPC-сервера
Настраиваем концентратор КУН-2Д.1, к которому подключено устройство.
Настраиваем 5 дискретных сигналов (например, 1 сигнал устройства подключен к входу 3 КУН, 2 - к 4, и т.д.):
- для каждого из входов КУН 3 - 5 указываем задержку 2 мин.
Закрываем Конфигуратор
2. Настройка Scada
Открываем меню Вид / Переменные
Добавляем 2 переменные VAR.0, VAR.1
VAR.0
- Тип - Дискретный сигнал
- Тип обработки - AND
- Журнал - Неисправность
- Адрес - адрес установки устройства
- Тэги
- КУН.DiscretChannel1 (это 3 вход на плате КУН-2Д.1)
- КУН.DiscretChannel2
- КУН.DiscretChannel3
VAR.1
- Тип - Дискретный сигнал
- Тип обработки - OR
- Журнал - Выше нормы
- Адрес - адрес установки устройства
- Тэги
- КУН.DiscretChannel4 (это 6 вход на плате КУН-2Д.1)
- КУН.DiscretChannel5
Отобразить на ситуационном плане любой примитив Дискретный датчик и в свойстве Тэг указать вручную VAR.0 (нажать Enter)
Повторить тоже самое для переменной VAR.1
SCADA