Переменные: различия между версиями

Материал из TekonWiki
Перейти к навигацииПерейти к поиску
Нет описания правки
 
(не показаны 54 промежуточные версии 2 участников)
Строка 1: Строка 1:
[[Category:ПрограммыСКАДА]]
[[Category:ПрограммыСКАДА:SCADA]]


Начиная с версии 2.2.2 в программе АСУД.SCADA доступен ряд дополнительных функциональных возможностей по анализу состояния группы дискретных сигналов.


Данный функционал реализуется с помощью механизма "Переменных".


Переменные - это некий аналог Item в понимании OPC-сервера, но реализованный на стороне Scada.
== Введение ==
<pre>В версии 2.7.14 - модуль работает не корректно, следует скопирвать модуль версии 2.7.13 или
выполнить обновление SCADA до версии 2.7.15
В версии 2.7.4-2.7.5
требуется обновление модуля variables при работе с доп. примитивами
(статус примитивов не обновлялся после запуска SCADA, до открытия окна Дополнительно / Переменные)
</pre>


Переменная может быть связана с несколькими Item OPC-сервера. Значение Переменной при этом определяется, как логическая функция от состояния связанных Item.  
В программе АСУД.SCADA доступен ряд дополнительных функциональных возможностей по анализу состояния группы дискретных сигналов.


В настоящее время реализованы следующие логические функции:
Данный функционал реализуется с помощью механизма "Переменных".
* OR - логическое ИЛИ
* AND - логическое И.  


Значение, которые может принимать Переменная:
Переменные - это некий аналог Item в понимании OPC-сервера, но реализованный на стороне Scada.
* 0 - состояние Норма
* 1 - состояние Активное (Сигнальное)


Изменение состояния Переменной будет отображаться в Журнале событий и в Оперативном журнале.
Переменная в общем случае может быть связана с несколькими Item OPC-сервера. Значение Переменной при этом определяется, как функция от состояния связанных Item.


Несмотря на то, что теоретически переменная может быть связана с любым типом Item, пока (в связи со спецификой реализации) имеет смысл сопоставлять ее с Item OPC-сервера типа:
Переменная может быть двух типов:
* дискретный сигнал;
* канал ПГС;
* канал управления.


В Scada можно привязать Переменную через свойство Тэг к примитивам
*Дискретный сигнал - обычно это некая логическая операция над группой Item, например: отобразить аварию, если Item1 и Item2 в аварии.
* Дискретный сигнал  
*Число - некая математическая операция над значением одного или нескольких Item.  
* Изображение (см. [[Дополнительные_примитивы | дополнительные примитивы]]).  


'''Что в итоге сейчас можно реализовать''':  
Значение, которые может принимать Переменная типа дискретный сигнал:


''Для Дискретного датчика''
*0 - состояние Норма
*1 - состояние Активное (Сигнальное)
*3 - подтвержденное сигнальное состояние (желтый восклицательный знак).


Датчик будет срабатывать при одновременной сработке (переходе в сигнальное состояние) связанных дискретных сигналов или сработке любого из связанных дискретных сигналов.
Изменение состояния Переменной (если она связана с какми-либо Примитивом)&nbsp;будет отображаться в Журнале событий и в Оперативном журнале.


''Для Изображения''
В Scada можно привязать Переменную через свойство Тэг почти к любым&nbsp;примитивам, например:


# Показать Изображение 1 в случае если любой из анализируемых сигналов находится в Активном (сигнальном) состоянии
*Дискретный сигнал (набор примитивов) - это наиболее типовой случай применения.
# Показать Изображение 2 иначе
*LED, Изображение (см. [[Дополнительные_примитивы|дополнительные примитивы]])  
*и т.п.


или
== Настройка OPC-сервера ==


# Показать Изображение 1 в случае если все из анализируемых сигналов находится в Активном (сигнальном) состоянии
Никакой специальной настройки OPC-сервера при использовании переменных не требуется.
# Показать Изображение 2 иначе
 
Для использования Переменных в АСУД.SCADA следует добавить модули fix.psm, variables.psm в папку ..\Scada\Modules
 
== Настройка OPC-сервера ==


При использовании примитивов типа Дискретный датчик для отображения состояния переменной настройка ОРС-сервера не требуется.
&nbsp;


В случае использования примитивов типа Изображение - следует в настройках OPC-сервера для всех связанных с переменной дискретных сигналов настроить режим: "Уровень безопасности: Обычный".
&nbsp;


== Настройка Scada ==
== Настройка Scada ==
Строка 58: Строка 49:
В режиме настройки выбрать меню Вид / Переменные
В режиме настройки выбрать меню Вид / Переменные


[[Файл:Variables1.PNG|600px|center|Настройка Переменных]]
[[File:Variables1.PNG|center|600px|Настройка Переменных]]


Слева указаны зарегистрированные Переменные.
Слева указаны зарегистрированные Переменные.


Имя переменной имеет вид "Var..". Изменить имя нельзя, оно присваивается автоматически при создании переменной.
Имя переменной всегда начинается с&nbsp;'''"VAR."'''
 
Для добавления Переменной следует кликнуть правой кнопкой мыши в списке Переменной.
 
Элементы меню добавления переменной:


Для добавления Переменной следует кликнуть правой кнопкой мыши в списке Имя переменной.
*Добавить - добавить новую переменную
*Копия (полная) - скопировать настройки текущей переменной (удобно при разбивке битовой маски одного Item, при настройке [[Modbus-устройства|Modbus-устройства]])
*Копия (без тегов) - скопировать настройки текущей переменной без заполнения Тегов
*Удалить - удалить переменную
*Имя в буфер обмена - скопировать имя переменной в буфер обмена для последующей вставки в свойство Тег Примитива на карте


Настройки переменной:
Настройки переменной:
* Название - не изменяемое поле
 
* Тип - реализуемая логическая функция OR или AND
*Название - имя переменной (без приставки '''VAR.''')
* Журнал - название типа неисправности (для Дискретного датчика будет отображаться в Журнале событий)
*Журнал событие - название типа неисправности (будет отображаться в [[Журнал_событий,_заявок,_записи_переговоров|Журнале событий]])  
* Адрес - адрес (для Дискретного датчика будет отображаться в Журнале событий)
*Журнал адрес - адрес (отображаться в [[Журнал_событий,_заявок,_записи_переговоров|Журнале событий]])  
*Задержка -&nbsp; задержка в (с) сработки переменной. Только для типа переменной -&nbsp; Дискретный сигнал
*Тип данных - тип переменной
**Дискретный сигнал
**Число 
*Тип обработки&nbsp;- реализуемая функция обработки значения
**для Дискретного сигнала - выбрать из списка (подробнее см. примеры далее)
**для Числа - использовать ВЫРАЖЕНИЕ (подробнее см. примеры далее) 
*Выражение - для типа ВЫРАЖЕНИЕ следует указать правило обработки входного значения


Далее следует добавить Item OPC-сервера, выполнив клик правой кнопкой мыши в списке Тэги / Переменные.
Далее следует добавить Item OPC-сервера, выполнив клик правой кнопкой мыши в списке Тэги / Переменные.


Сохранить изменения, нажав на пиктограмму "Сохранить все" панели инструментов.  
После добавления Item в окне отобразится их текущее состояние и вычисленное текущее состояние Переменной.


=== Дискретный датчик ===
В настоящее время реализованы следующие функции обработки (Типы обработки)&nbsp;значений Item:


Разместить на карте примитив дискретный датчик, указать в поле Тэг имя переменной, например, Var0, нажать Enter.
{| class="wikitable"
|-
! Тип функции
! Описание
! Число связанных Item
! Типы связанных Item
|-
| OR
| Логическое ИЛИ (анализируется только младший бит Item)
| Любое
| &nbsp;
*дискретный сигнал;
*канал ПГС;
*канал управления.  


Размещать (визуализировать) на карте все связанные с переменной дискретные сигналы необходимости нет. Однако, если они будут размещены, то при переходе Примитива, связанного с переменной в сигнальное состояние, его подтверждение (с помощью мыши или трубки) будет приводить к авто-подтверждению связанных с переменной Item-ов.  
|-
| AND
| Логическое И (анализируется только младший бит Item)
| Любое
| &nbsp;
*дискретный сигнал;
*канал ПГС;
*канал управления.  


=== Изображение ===
|-
| XOR
| Логическое исключающее ИЛИ (анализируется только младший бит Item)
| 2
| &nbsp;
*дискретный сигнал;
*канал ПГС;
*канал управления.


Разместить на карте примитив [[Дополнительные_примитивы | Изображение]], указать в поле Тэг имя переменной, например, Var0, нажать Enter.
|-
| &nbsp;!=0
| Сравнение с 0 (авария - числовое значение <> 0)
| 1
| Числовое значение
|-
| ВЫРАЖЕНИЕ
| Логическое выражение
| Любое
| Числовое значение
|}


Написать простой [[Скрипты | Lua-скрипт]] выбора изображения из перечня (название функции может быть любым).
Последний Тип удобно использовать при визуализации данных контроллеров сторонних производителей, например: [[Modbus-устройства|Modbus-устройств]].


<source lang="php">
Выражения - позволяют реализовать более сложную модель обработки значения одного или нескольких Item. При этом каждый добавленный Item в разделе Теги и/или Переменные получает условное буквенное обозначение X, Y, Z, K, L и т.д.
function img (x)
local xi = math.floor(x)
if (xi == 0)  then
    return "norma.jpg"
end
if (xi == 1) then 
    return "alert.jpg"
end
end
</source>


Указать в настройках примитива Изображение функцию img.
Примеры построения выражений:


=== Пример работы ===
{| class="wikitable"
|-
* два дискретных датчика связанны с Переменными Var1 и Var2
! Выражение
* Переменная Var1 - тип AND
! Описание
* Переменная Var2 - тип OR
|-
| BIT (X;1)
| Проверить установленный 1-ый бит в значении Item-а. Нумерация бит 32..1 (1 - младший)
|-
| X > 10
| Проверить, что значение Item-a больше 10
|-
| X == 5
| Проверить, что значение Item-a равно 5
|-
| X&nbsp;!= 2
| Проверить, что значение Item-a не равно 2
|-
| X &#124;&#124; Y
| Логическое ИЛИ двух значений Item
|-
| X && Y
| Логическое И двух значений Item
|-
| X&nbsp;% 2
| X mod 2
|-
| X div 2
| X div 2
|-
| X && $FFFF&nbsp;!=0
| Проверить факт установки первых 16-ти бит
|}
 
После внесения изменений следует сохранить их, нажав на пиктограмму "Сохранить все" панели инструментов.
 
 
== Пример работы ==
 
Рассмотрим следующий демонстрационный пример.
 
Предположим у нас есть дискретных сигнала: Item1 и Item2.
 
Оба Item связаны с двумя переменными VAR.1 и VAR.2. Обе переменные типа Дискретный сигнал,
 
*Переменная VAR.1 - тип обработки&nbsp;AND&nbsp; (логическое "и")
*Переменная VAR.2 - тип обработки OR&nbsp; (логическое "или").
 
Отобразим на карте четыре примитива типа дискретный датчик и свяжем их с переменными и Item.


1. Ни один из дискретных сигналов не находится в Активном состоянии.
1. Ни один из дискретных сигналов не находится в Активном состоянии.


[[Файл:Variables_norma.PNG|600px|center|Переменные Норма]]
[[File:Variables norma.PNG|center|600px|Переменные Норма]]


2. Один из дискретных сигналов находится в Активном состоянии.
2. Один из дискретных сигналов находится в Активном состоянии.


Это приводит к переводу в сигнальное состояние переменной Var2 (OR) - тип ИЛИ.
Это приводит к переводу в сигнальное состояние переменной VAR.2 (OR) - тип ИЛИ.


[[Файл:Variables_alert.PNG|600px|center|Переменные Норма]]
[[File:Variables alert.PNG|center|600px|Переменные Норма]]


3. Оба дискретных сигнала находятся в Активном состоянии.
3. Оба дискретных сигнала находятся в Активном состоянии.
Строка 122: Строка 199:
Это приводит к переводу в сигнальное состояние обоих переменных.
Это приводит к переводу в сигнальное состояние обоих переменных.


[[Файл:Variables_alert2.PNG|600px|center|Переменные Норма]]
[[File:Variables alert2.PNG|center|600px|Переменные Норма]]
 
&nbsp;
 
== Служебные переменные АСУД.SCADA 3.x ==
 
=== VAR.Spec.Timer ===
 
Переменная формирует сигнал (счетчик) один раз в указанное количество секунд&nbsp;и может быть использована, например:&nbsp; с примитивом Текстовое поле и&nbsp;&nbsp;[[Text-функция|text-функцией]]&nbsp; #Time для отображения текущего времени, или для других целей.
 
Для создания переменной, следует закрыть SCADA и добавить в файл settings \&nbsp;variables_quick.conf&nbsp; строку&nbsp;:
<pre>Timer N</pre>
 
где&nbsp; N=1, 2, 3, .... - количество секунд между обновлениями состояния
 
Например:
 
*Timer 1 - обновление 1 раз в секунду
*Timer 30 - обновление 1 раз в 30 секунд
 
Запустить SCADA, разместить примитив, например: Текстовое поле и связать его с Тегом переменной VAR.Spec.Timer
 
=== VAR.Spec.ATimer ===
 
В отличии от Timer&nbsp; - переменная меняет свое значение из 0 в 1 и обратно.
 
Для создания переменной, следует закрыть SCADA и добавить в файл settings \&nbsp;variables_quick.conf&nbsp; строку&nbsp;:
<pre>ATimer N</pre>
 
где&nbsp; N=1, 2, 3, .... - количество секунд между обновлениями состояния
 
Например:
 
*ATimer 1 - обновление 1 раз в секунду
*ATimer 30 - обновление 1 раз в 30 секунд
 
Запустить SCADA, разместить примитив, например: Текстовое поле и связать его с Тегом переменной VAR.Spec.ATimer
 
=== VAR.AGG_VOICE - агрегатор голосовых каналов&nbsp;ПГС ===
 
Переменная позволяет взаимодействовать с каналами&nbsp;переговорной связи, которые не отражены на карте SCADA данного АРМ.
 
Это дает возможность реализовать функцию помощи в обработке входящих вызовов&nbsp;соседних АРМ. При этом АРМы могут быть настроены, как на работу с одним ОРС-сервервером, так и с несколькими серверами.
 
Пусть у нас есть три АРМ следующей конфигурации:
 
*АРМ1 -&nbsp; ОРС-сервер 1
*АРМ2 -&nbsp;&nbsp;ОРС-сервер 1
*АРМ3 -&nbsp; OPC-сервер 2
 
На каждом из АРМ отрисована своя карта сигналов (причем эти сигналы могут повторяться или не повторяться). Необходимо предоставить возможность диспетчерам АРМ-ов обработывать входящие вызовы соседних АРМ, если основной диспетчер не может на них ответить.
 
Для этого следует выполнить следующие действия: на каждом АРМ зарегистрировать все ОРС-сервера, т.е.
 
*АРМ1 -&nbsp; ОРС-сервер 1, ОРС-сервер-2
*АРМ2 -&nbsp;&nbsp;ОРС-сервер 1, ОРС-сервер-2
*АРМ3 -&nbsp; OPC-сервер 2, ОРС-сервер-1
 
Далее на каждом из АРМ создать подвид, на котором разместить два примитива:
 
*Переговорное устройство
**Тэг:&nbsp; VAR.AGG_VOICE
**Приоритет: Обычный&nbsp; &nbsp; - необходимо для приоритетной обработки локальных входящих вызовов 
*Таблица свойств - для отображения источника вызова
**Тэг:&nbsp; VAR.AGG_VOICE 
 
[[File:Agg voice 1.PNG|center|350px|Agg voice 1.PNG]]
 
[[File:Agg voice 2.PNG|center|350px|Agg voice 2.PNG]]Сохраните изменения. На этом настройка завершена.
 
Теперь в случае, если например: на АРМ2, АРМ3 придет один или несколько входящих&nbsp;вызовов, на который локальный диспетчер не ответит в течение 5 секунд, этот вызов отобразиться на АРМ1, в том случае, если вызов пришел с контроллера или концентратора, с IP-адресом&nbsp;которого в настояший момент нет установленной ПГС.
 
Существующие ограничения:
 
*Диспетчера АРМ могут одновременно совершаться вызовы на контроллеры / концентраторы с уникальными IP-адресами.<br/> Нельзя одновременно позвонить на один и тот же IP-адрес устройства.
*Вызов будет записан в журнал на том АРМ, диспетчер которого обработает вызов.
 
== Служебные переменные АСУД.SCADA 2.x ==
 
Служебные переменные создаются автоматически по запросу и не отображаюся в общем окне настроек переменных.
 
=== VAR.Timer ===
<pre>Добавлено в версии 2.7.17</pre>
 
Переменная формирует сигнал (счетчик) один раз в указанное количество секунд&nbsp;и может быть использована, например:&nbsp; с примитивом Текстовое поле и&nbsp;&nbsp;[[Text-функция|text-функцией]]&nbsp; #Time для отображения текущего времени, или для других целей.
 
Для создания переменной, просто укажите ее имя&nbsp;&nbsp;в поле Тэг выбранного примитива:
<pre>VAR.Timer N</pre>
 
где&nbsp; N=1, 2, 3, .... - количество секунд между обновлениями состояния
 
Например:
 
*VAR.Timer 1 - обновление 1 раз в секунду
*VAR.Timer 30 - обновление 1 раз в 30 секунд
 
=== VAR.ATimer ===
<pre>Добавлено в версии 2.7.17</pre>
 
В отличии от VAR.Timer&nbsp; - переменная меняет свое значение из 0 в 1 и обратно.
 
Для создания переменной, просто укажите ее имя&nbsp;&nbsp;в поле Тэг выбранного примитива:
<pre>VAR.ATimer N</pre>
 
где&nbsp; N=1, 2, 3, .... - количество секунд между обновлениями состояния
 
Например:
 
*VAR.ATimer 1 - обновление 1 раз в секунду
*VAR.ATimer 30 - обновление 1 раз в 30 секунд


== Пример решения типовой задачи с помощью Переменных ==
=== VAR.Ping ===
<pre>Добавлено в версии 2.7.17</pre>


'''Задача:''' Пусть есть устройство, подключенное к концентратору КУН, выдает 5 дискретных сигналов.<br>  
Переменная выполняет ping указанного IP-адреса&nbsp; с заданной периодичностью.
При этом считается, что одновременная сработка сигналов 1-3 с двухминутной задержкой является переходом устройства в состояние ''Неисправность''.<br>
 
Сработка любого из сигналов 4,5 без задержки является признаком состояния ''Выше нормы''.<br>
'''Замечание.'''<br/> Переменная введена для помощи на этапе пусконаладки.<br/> Может быть использована например, для отображения графика доступности оборудования по сети.&nbsp;<br/> Не следует использовать'''более 3''' переменных данного типа в рабочей конфигурации (это может привести к замедлению механизма работы переменных в целом).<br/> В рабочей конфигурации следует использовать похожий функционал в [[Tekon_OPC-сервер|ОРС-серверве]], добавив устройство Компьютерная сеть&nbsp; \ Ping&nbsp;
Необходимо отобразить в Scada 2-а дискретных датчика, отражающих состояния устройства: Неисправность, выше нормы.
 
Результатом переменной является время отклика на ping-запрос в мс.
 
Для создания переменной, просто укажите в поле Тэг выбранного примитива:
<pre>VAR.Ping 192_168_1_100
или
VAR.Ping 192_168_1_100 60</pre>
 
где:&nbsp;
 
*192_168_1_100 - проверяемый IP-адрес, вместо точки&nbsp;следует указываться знак подчеркивания _.
*60&nbsp; (не обязательный параметр) - число секунд между проверками
 
Таймаут выполняемого ping-запроса составляет 300 мс.
 
=== Задержка отображения вызовов ПГС ===
<div>На объектах с двумя АРМ, которые отображают одни и теже каналы ПГС, может потребоваться, чтобы каналы на АРМ1 отображались с задержкой относительно АРМ2.</div>
Т.е. факт вызова сначала отображался на АРМ2, а затем через указанную задержку (если не был обработан на АРМ2), отобразился на АРМ1.
 
Для этого, для требуемых каналов ПГС на АРМ1, следует изменить в настройках свойство тэг, дописав&nbsp;вручную в начале тега VAR.D10,&nbsp; где 10 - длительность задержки в секундах
 
Например:
 
*было:&nbsp;DA.[localhost{188D08EC-72CB-425B-8EA8-EE2308736440}].КУН-IP4 - 0.VoiceChannel01
*стало:&nbsp;VAR.D10.DA.[localhost{188D08EC-72CB-425B-8EA8-EE2308736440}].КУН-IP4 - 0.VoiceChannel01
 
== Пример решения типовых задач ==
 
 
=== Канал управления + дискретный сигнал обратной связи ===
 
Необходимо проинформировать об ошибке, если после включения канала управления, не происходит сработка дискретного сигнала обратной связи в течение 30 секунд.
 
'''Решение'''
 
Открываем меню Вид / Переменные
 
Добавляем переменную VAR.1
 
VAR.1
 
*Журнал событие - Неисправность устройства&nbsp;
*Журнал адрес - адрес установки устройства
*Тэги
**Тэг Канала управления
**Тэг Дискретного сигнала, подтверждающего корректность включения (чего-то) 
*Тип - Дискретный сигнал
*Тип обработки&nbsp;&nbsp;- ВЫРАЖЕНИЕ
*Выражение -&nbsp; X == 32769&nbsp;&& BIT(Y;1) == 0
*Задержка - 30 с
 
Отобразить на карте:
 
*примитив канал управления
*примитив дискретный сигнал обратной связи&nbsp;
*примитив&nbsp;дискретный сигнал, связанный с переменной VAR.1
 
=== Выделить битовое состояние из числа (Modbus-устройства) ===
 
Пусть есть [[Modbus-устройства|Modbus-устройство]], в одном из регистров которого записано целочисленное значение, являющееся битовым набором состояний датчиков и, например: установленный в единицу&nbsp;3-й бит является признаком ошибки Насоса1, которую необходимо визуализировать.
 
'''Замечание'''
 
Решение данной задачи, устарело. В настоящий момент, вы можете выделять нужные биты либо сразу в настройках Modbus-устройства в ОРС-сервере, либо воспользоваться примитивом [[Дополнительные_примитивы|LED-индикатор]], у которого присутствует данный функционал.
 
'''Решение'''
 
Открываем меню Вид / Переменные
 
Добавляем переменную VAR.0, переименовываем имя в VAR.Pump1
 
VAR.Pump1
 
*Журнал событие - Насос 1
*Журнал адрес - адрес установки устройства
*Тэги
**ваше название Тэга 
*Тип - Дискретный сигнал
*Тип обработки&nbsp;&nbsp;- ВЫРАЖЕНИЕ
*Выражение - BIT(X;3)
 
Отобразить на ситуационном плане любой примитив Дискретный датчик и в свойстве Тэг указать вручную VAR.Pump1 (нажать Enter).
 
=== Логическая группировка сигналов ===
 
Пусть есть устройство, подключенное к концентратору КУН, которое выдает 5 дискретных сигналов.<br/> При этом считается, что:
 
*одновременная сработка сигналов 1-3 с двухминутной задержкой является переходом устройства в состояние ''Неисправность''  
*cработка любого из сигналов 4,5 без задержки является признаком состояния ''Выше нормы''.  
 
Необходимо отобразить в Scada 2-а дискретных датчика, отражающих состояния устройства:
 
*Неисправность.
*Выше нормы.  


'''Решение'''
'''Решение'''
Строка 135: Строка 415:
1. Настройка OPC-сервера
1. Настройка OPC-сервера


Настраиваем концентратор КУН-2Д.1, к которому подключено устройство.  
Настраиваем концентратор КУН-2Д.1, к которому подключено устройство.


Настраиваем 5 дискретных сигналов (например, 1 сигнал устройства подключен к входу 3 КУН, 2 - к 4, и т.д.):
Настраиваем 5 дискретных сигналов (например, 1 сигнал устройства подключен к входу 3 КУН, 2 - к 4, и т.д.):
* для каждого из входов КУН 3 - 5 указываем задержку 2 мин.


Закрываем Конфигуратор  
*для каждого из входов КУН 3 - 5 указываем задержку 2 мин.
 
Закрываем Конфигуратор


2. Настройка Scada
2. Настройка Scada


Открываем меню Вид / Переменные  
Открываем меню Вид / Переменные
 
Добавляем 2 переменные VAR.0, VAR.1
 
VAR.0
 
*Тип - Дискретный сигнал
*Тип обработки - AND
*Журнал - Неисправность
*Адрес - адрес установки устройства
*Тэги
**КУН.DiscretChannel1 (это 3 вход на плате КУН-2Д.1)
**КУН.DiscretChannel2
**КУН.DiscretChannel3 


Добавляем 2 переменные Var0, Var1
VAR.1


Var0
*Тип - Дискретный сигнал
* Тип - AND
*Тип обработки - OR
* Журнал - Неисправность
*Журнал - Выше нормы
* Адрес - адрес установки устройства
*Адрес - адрес установки устройства  
* Тэги
*Тэги  
** КУН.DiscretChannel1  (это 3 вход на плате КУН-2Д.1)
**КУН.DiscretChannel4 (это 6 вход на плате КУН-2Д.1)  
** КУН.DiscretChannel2
**КУН.DiscretChannel5 
**  КУН.DiscretChannel3


Var0
Отобразить на ситуационном плане любой примитив Дискретный датчик и в свойстве Тэг указать вручную VAR.0 (нажать Enter)
* Тип - OR
* Журнал - Выше нормы
* Адрес - адрес установки устройства
* Тэги
**  КУН.DiscretChannel4  (это 6 вход на плате КУН-2Д.1)
**  КУН.DiscretChannel5


Отобразить на ситуационном плане любой примитив Дискретный датчик и в свойстве Тэг указать вручную Var0 (нажать Enter)
Повторить тоже самое для переменной VAR.1


Повторить тоже самое для переменной Var1.
[[Category:SCADA]]

Текущая версия от 09:57, 28 декабря 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, Изображение (см. дополнительные примитивы)
  • и т.п.

Настройка OPC-сервера

Никакой специальной настройки OPC-сервера при использовании переменных не требуется.

 

 

Настройка Scada

В режиме настройки выбрать меню Вид / Переменные

Настройка Переменных
Настройка Переменных

Слева указаны зарегистрированные Переменные.

Имя переменной всегда начинается с "VAR."

Для добавления Переменной следует кликнуть правой кнопкой мыши в списке Переменной.

Элементы меню добавления переменной:

  • Добавить - добавить новую переменную
  • Копия (полная) - скопировать настройки текущей переменной (удобно при разбивке битовой маски одного Item, при настройке Modbus-устройства)
  • Копия (без тегов) - скопировать настройки текущей переменной без заполнения Тегов
  • Удалить - удалить переменную
  • Имя в буфер обмена - скопировать имя переменной в буфер обмена для последующей вставки в свойство Тег Примитива на карте

Настройки переменной:

  • Название - имя переменной (без приставки VAR.)
  • Журнал событие - название типа неисправности (будет отображаться в Журнале событий)
  • Журнал адрес - адрес (отображаться в Журнале событий)
  • Задержка -  задержка в (с) сработки переменной. Только для типа переменной -  Дискретный сигнал
  • Тип данных - тип переменной
    • Дискретный сигнал
    • Число
  • Тип обработки - реализуемая функция обработки значения
    • для Дискретного сигнала - выбрать из списка (подробнее см. примеры далее)
    • для Числа - использовать ВЫРАЖЕНИЕ (подробнее см. примеры далее)
  • Выражение - для типа ВЫРАЖЕНИЕ следует указать правило обработки входного значения

Далее следует добавить Item OPC-сервера, выполнив клик правой кнопкой мыши в списке Тэги / Переменные.

После добавления Item в окне отобразится их текущее состояние и вычисленное текущее состояние Переменной.

В настоящее время реализованы следующие функции обработки (Типы обработки) значений Item:

Тип функции Описание Число связанных Item Типы связанных Item
OR Логическое ИЛИ (анализируется только младший бит Item) Любое  
  • дискретный сигнал;
  • канал ПГС;
  • канал управления.
AND Логическое И (анализируется только младший бит Item) Любое  
  • дискретный сигнал;
  • канал ПГС;
  • канал управления.
XOR Логическое исключающее ИЛИ (анализируется только младший бит Item) 2  
  • дискретный сигнал;
  • канал ПГС;
  • канал управления.
 !=0 Сравнение с 0 (авария - числовое значение <> 0) 1 Числовое значение
ВЫРАЖЕНИЕ Логическое выражение Любое Числовое значение

Последний Тип удобно использовать при визуализации данных контроллеров сторонних производителей, например: Modbus-устройств.

Выражения - позволяют реализовать более сложную модель обработки значения одного или нескольких Item. При этом каждый добавленный Item в разделе Теги и/или Переменные получает условное буквенное обозначение X, Y, Z, K, L и т.д.

Примеры построения выражений:

Выражение Описание
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. Ни один из дискретных сигналов не находится в Активном состоянии.

Переменные Норма
Переменные Норма

2. Один из дискретных сигналов находится в Активном состоянии.

Это приводит к переводу в сигнальное состояние переменной VAR.2 (OR) - тип ИЛИ.

Переменные Норма
Переменные Норма

3. Оба дискретных сигнала находятся в Активном состоянии.

Это приводит к переводу в сигнальное состояние обоих переменных.

Переменные Норма
Переменные Норма

 

Служебные переменные АСУД.SCADA 3.x

VAR.Spec.Timer

Переменная формирует сигнал (счетчик) один раз в указанное количество секунд и может быть использована, например:  с примитивом Текстовое поле и  text-функцией  #Time для отображения текущего времени, или для других целей.

Для создания переменной, следует закрыть SCADA и добавить в файл settings \ variables_quick.conf  строку :

Timer N

где  N=1, 2, 3, .... - количество секунд между обновлениями состояния

Например:

  • Timer 1 - обновление 1 раз в секунду
  • Timer 30 - обновление 1 раз в 30 секунд

Запустить SCADA, разместить примитив, например: Текстовое поле и связать его с Тегом переменной VAR.Spec.Timer

VAR.Spec.ATimer

В отличии от Timer  - переменная меняет свое значение из 0 в 1 и обратно.

Для создания переменной, следует закрыть SCADA и добавить в файл settings \ variables_quick.conf  строку :

ATimer N

где  N=1, 2, 3, .... - количество секунд между обновлениями состояния

Например:

  • ATimer 1 - обновление 1 раз в секунду
  • ATimer 30 - обновление 1 раз в 30 секунд

Запустить SCADA, разместить примитив, например: Текстовое поле и связать его с Тегом переменной VAR.Spec.ATimer

VAR.AGG_VOICE - агрегатор голосовых каналов ПГС

Переменная позволяет взаимодействовать с каналами переговорной связи, которые не отражены на карте SCADA данного АРМ.

Это дает возможность реализовать функцию помощи в обработке входящих вызовов соседних АРМ. При этом АРМы могут быть настроены, как на работу с одним ОРС-сервервером, так и с несколькими серверами.

Пусть у нас есть три АРМ следующей конфигурации:

  • АРМ1 -  ОРС-сервер 1
  • АРМ2 -  ОРС-сервер 1
  • АРМ3 -  OPC-сервер 2

На каждом из АРМ отрисована своя карта сигналов (причем эти сигналы могут повторяться или не повторяться). Необходимо предоставить возможность диспетчерам АРМ-ов обработывать входящие вызовы соседних АРМ, если основной диспетчер не может на них ответить.

Для этого следует выполнить следующие действия: на каждом АРМ зарегистрировать все ОРС-сервера, т.е.

  • АРМ1 -  ОРС-сервер 1, ОРС-сервер-2
  • АРМ2 -  ОРС-сервер 1, ОРС-сервер-2
  • АРМ3 -  OPC-сервер 2, ОРС-сервер-1

Далее на каждом из АРМ создать подвид, на котором разместить два примитива:

  • Переговорное устройство
    • Тэг:  VAR.AGG_VOICE
    • Приоритет: Обычный    - необходимо для приоритетной обработки локальных входящих вызовов
  • Таблица свойств - для отображения источника вызова
    • Тэг:  VAR.AGG_VOICE
Agg voice 1.PNG
Agg voice 1.PNG
Agg voice 2.PNG
Agg voice 2.PNG

Сохраните изменения. На этом настройка завершена.

Теперь в случае, если например: на АРМ2, АРМ3 придет один или несколько входящих вызовов, на который локальный диспетчер не ответит в течение 5 секунд, этот вызов отобразиться на АРМ1, в том случае, если вызов пришел с контроллера или концентратора, с IP-адресом которого в настояший момент нет установленной ПГС.

Существующие ограничения:

  • Диспетчера АРМ могут одновременно совершаться вызовы на контроллеры / концентраторы с уникальными IP-адресами.
    Нельзя одновременно позвонить на один и тот же IP-адрес устройства.
  • Вызов будет записан в журнал на том АРМ, диспетчер которого обработает вызов.

Служебные переменные АСУД.SCADA 2.x

Служебные переменные создаются автоматически по запросу и не отображаюся в общем окне настроек переменных.

VAR.Timer

Добавлено в версии 2.7.17

Переменная формирует сигнал (счетчик) один раз в указанное количество секунд и может быть использована, например:  с примитивом Текстовое поле и  text-функцией  #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 переменных данного типа в рабочей конфигурации (это может привести к замедлению механизма работы переменных в целом).
В рабочей конфигурации следует использовать похожий функционал в ОРС-серверве, добавив устройство Компьютерная сеть  \ 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

Пример решения типовых задач

Канал управления + дискретный сигнал обратной связи

Необходимо проинформировать об ошибке, если после включения канала управления, не происходит сработка дискретного сигнала обратной связи в течение 30 секунд.

Решение

Открываем меню Вид / Переменные

Добавляем переменную VAR.1

VAR.1

  • Журнал событие - Неисправность устройства 
  • Журнал адрес - адрес установки устройства
  • Тэги
    • Тэг Канала управления
    • Тэг Дискретного сигнала, подтверждающего корректность включения (чего-то)
  • Тип - Дискретный сигнал
  • Тип обработки  - ВЫРАЖЕНИЕ
  • Выражение -  X == 32769 && BIT(Y;1) == 0
  • Задержка - 30 с

Отобразить на карте:

  • примитив канал управления
  • примитив дискретный сигнал обратной связи 
  • примитив дискретный сигнал, связанный с переменной VAR.1

Выделить битовое состояние из числа (Modbus-устройства)

Пусть есть Modbus-устройство, в одном из регистров которого записано целочисленное значение, являющееся битовым набором состояний датчиков и, например: установленный в единицу 3-й бит является признаком ошибки Насоса1, которую необходимо визуализировать.

Замечание

Решение данной задачи, устарело. В настоящий момент, вы можете выделять нужные биты либо сразу в настройках Modbus-устройства в ОРС-сервере, либо воспользоваться примитивом LED-индикатор, у которого присутствует данный функционал.

Решение

Открываем меню Вид / Переменные

Добавляем переменную 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