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

Материал из TekonWiki
Перейти к навигацииПерейти к поиску
Нет описания правки
 
(не показаны 32 промежуточные версии 2 участников)
Строка 1: Строка 1:
[[Category:ДокументацияСКАДА]]
== Введение ==
<pre>В версии 2.7.14 - модуль работает не корректно, следует скопирвать модуль версии 2.7.13 или
выполнить обновление SCADA до версии 2.7.15
В версии 2.7.4-2.7.5
требуется обновление модуля variables при работе с доп. примитивами
(статус примитивов не обновлялся после запуска SCADA, до открытия окна Дополнительно / Переменные)
</pre>


== Введение ==
В программе АСУД.SCADA доступен ряд дополнительных функциональных возможностей по анализу состояния группы дискретных сигналов.
'''Внимание!'''
Следует обновить SCADA до версии 2.3.8 или обновить модуль Variables


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


Данный функционал реализуется с помощью механизма "Переменных".
Переменные - это некий аналог Item в понимании OPC-сервера, но реализованный на стороне Scada.


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


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


Значение, которые может принимать Переменная:
*Дискретный сигнал - обычно это некая логическая операция над группой Item, например: отобразить аварию, если Item1 и Item2 в аварии.
* 0 - состояние Норма
*Число - некая математическая операция над значением одного или нескольких Item.  
* 1 - состояние Активное (Сигнальное)
* 3 - подтвержденное сигнальное состояние (желтый восклицательный знак).


Изменение состояния Переменной будет отображаться в Журнале событий и в Оперативном журнале.
Значение, которые может принимать Переменная типа дискретный сигнал:


В Scada можно привязать Переменную через свойство Тэг к примитивам
*0 - состояние Норма
* Дискретный сигнал (набор примитивов) - это наиболее типовой случай применения.
*1 - состояние Активное (Сигнальное)  
* LED, Изображение (см. [[Дополнительные_примитивы | дополнительные примитивы]])
*3 - подтвержденное сигнальное состояние (желтый восклицательный знак).  
* и т.п.


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


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


Если для отображения состояния переменной используется примитив типа Дискретный датчик, то дополнительной настройки ОРС-сервера не требуется.
*Дискретный сигнал (набор примитивов) - это наиболее типовой случай применения.
*LED, Изображение (см. [[Дополнительные_примитивы|дополнительные примитивы]])
*и т.п.


В случае использования примитивов типа Изображение (или любого другого примитива, у которого нет сигнального состояния с красным восклицательным знаком) - следует в настройках OPC-сервера для всех связанных с переменной дискретных сигналов настроить режим  Уровень безопасности в ''Обычный'' (по умолчанию значение установлено в ''Охрана'').
== Настройка OPC-сервера ==


Уровень безопасности в ''Обычный'' - не требует обязательного подтверждения Диспетчером сигнального состояния примитива.
Никакой специальной настройки OPC-сервера при использовании переменных не требуется.


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


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


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


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


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


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


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


Далее следует добавить Item OPC-сервера, выполнив клик правой кнопкой мыши в списке Тэги / Переменные.
Далее следует добавить Item OPC-сервера, выполнив клик правой кнопкой мыши в списке Тэги / Переменные.
Строка 65: Строка 76:
После добавления Item в окне отобразится их текущее состояние и вычисленное текущее состояние Переменной.
После добавления Item в окне отобразится их текущее состояние и вычисленное текущее состояние Переменной.


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


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


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


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


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


После внесения изменений следует сохранить их, нажав на пиктограмму "Сохранить все" панели инструментов.  
После внесения изменений следует сохранить их, нажав на пиктограмму "Сохранить все" панели инструментов.
 
После создания переменной следует связать ее с Примитивом обычном образом
[[Файл:Variable 5.png|центр|542x542пкс|Настройка Переменных]]
 
 
 
И выбрать переменную из списка Item
[[Файл:Variable 6.png|центр|542x542пкс|Настройка Переменных]]
 
== Служебные переменные ==
Это переменные, которые создаются автоматически или создаются не в базовом окне настройке Вид \ Переменные
 
=== Служебные переменные АСУД.SCADA 3.x ===
 
==== VAR.OPC-HTTP ====
Это переменные, создаваемые при настройке подключения к OPC-серверу через [[Tekon OPC-сервер|HTTP-шлюз]].
 
При успешном подключении к серверу, его адресное пространство будет спроецировано в дерево
[[Файл:Variable opc gate.png|центр|542x542пкс|Настройка Переменных]]
 
==== 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 и обратно.


Разместить на карте примитив дискретный датчик, указать в поле Тэг имя переменной, например, Var0, нажать Enter.
Для создания переменной, следует закрыть SCADA и добавить в файл settings \&nbsp;variables_quick.conf&nbsp; строку&nbsp;:
<pre>ATimer N</pre>


Размещать (визуализировать) на карте все связанные с переменной дискретные сигналы необходимости нет. Однако, если они будут размещены, то при переходе Примитива, связанного с переменной в сигнальное состояние, его подтверждение (с помощью мыши или трубки) будет приводить к авто-подтверждению связанных с переменной Item-ов.
где&nbsp; N=1, 2, 3, .... - количество секунд между обновлениями состояния


=== Изображение ===
Например:


Разместить на карте примитив [[Дополнительные_примитивы | Изображение]], указать в поле Тэг имя переменной, например, Var0, нажать Enter.
*ATimer 1 - обновление 1 раз в секунду
*ATimer 30 - обновление 1 раз в 30 секунд


Написать простой [[Скрипты | Lua-скрипт]] выбора изображения из перечня (название функции может быть любым).
Запустить SCADA, разместить примитив, например: Текстовое поле и связать его с Тегом переменной VAR.Spec.ATimer


<source lang="php">
==== VAR.AGG_VOICE - агрегатор голосовых каналов&nbsp;ПГС ====
function img (x)
Переменная позволяет взаимодействовать с каналами&nbsp;переговорной связи, которые не отражены на карте SCADA данного АРМ.
local xi = math.floor(x)
if (xi == 0)  then
    return "norma.jpg"
end
if (xi == 1) then 
    return "alert.jpg"
end
end
</source>


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


== Пример работы ==  
Пусть у нас есть три АРМ следующей конфигурации:
 
* два дискретных датчика связанны с Переменными Var1 и Var2
*АРМ1 -&nbsp; ОРС-сервер 1
* Переменная Var1 - тип AND
*АРМ2 -&nbsp;&nbsp;ОРС-сервер 1
* Переменная Var2 - тип OR
*АРМ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>
 
Переменная выполняет ping указанного IP-адреса&nbsp; с заданной периодичностью.
 
'''Замечание.'''<br /> Переменная введена для помощи на этапе пусконаладки.<br /> Может быть использована например, для отображения графика доступности оборудования по сети.&nbsp;<br /> Не следует использовать'''более 3''' переменных данного типа в рабочей конфигурации (это может привести к замедлению механизма работы переменных в целом).<br /> В рабочей конфигурации следует использовать похожий функционал в [[Tekon_OPC-сервер|ОРС-серверве]], добавив устройство Компьютерная сеть&nbsp; \ Ping&nbsp;
 
Результатом переменной является время отклика на 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
 
== Пример решения типовых задач ==
 
=== Логическое объединение сигналов ===
Рассмотрим следующий демонстрационный пример.
 
Предположим у нас есть дискретных сигнала: 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. Оба дискретных сигнала находятся в Активном состоянии.
Строка 168: Строка 344:
Это приводит к переводу в сигнальное состояние обоих переменных.
Это приводит к переводу в сигнальное состояние обоих переменных.


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


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


=== Выделить битовое состояние из числа (Modbus-устройства)  ===
=== Канал управления + дискретный сигнал обратной связи ===
Пусть есть [[Modbus-устройства|Modbus-устройство]], в одном из регистров которого записано целочисленное значение, являющееся битовым набором состояний датчиков и, например: установленный (в 1) 3-й бит является признаком ошибки Насоса1, которую необходимо визуализировать.  
Необходимо проинформировать об ошибке, если после включения канала управления, не происходит сработка дискретного сигнала обратной связи в течение 30 секунд.


'''Решение'''
'''Решение'''


1. Настройка ASUDBase
Открываем меню Вид / Переменные
 
Добавляем переменную 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-индикатор]], у которого присутствует данный функционал.


Выполнить регистрацию [[Modbus-устройства]]. Добавить настройку регистра, указав тип в виде целочисленного значения. При этом нет необходимости дополнительно указывать регистр с типом BIT и использовать настройку [[Виртуальный КДД-RS]] (как это было ранее).
'''Решение'''


Далее, запустить [[KCSLogger]] и прочитать состояние устройства. 
Открываем меню Вид / Переменные


2. Настройка OPC-сервера
Добавляем переменную VAR.0, переименовываем имя в VAR.Pump1


Добавить Контейнер оборудования \ Прибор учета
VAR.Pump1


3. Настройка Scada
*Журнал событие - Насос 1
*Журнал адрес - адрес установки устройства
*Тэги
**ваше название Тэга 
*Тип - Дискретный сигнал
*Тип обработки&nbsp;&nbsp;- ВЫРАЖЕНИЕ
*Выражение - BIT(X;3)


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


Добавляем переменную Var0, переименовываем имя в VarPump1
=== Логическая группировка сигналов ===


VarPump1
Пусть есть устройство, подключенное к концентратору КУН, которое выдает 5 дискретных сигналов.<br/> При этом считается, что:
* Журнал событие - Насос 1
* Журнал адрес - адрес установки устройства
* Тэги
**  Контейнер.Прибор.PumpState  (ваше название Тэга)
* Тип - ВЫРАЖЕНИЕ
* Выражение - BIT(X;3)


Отобразить на ситуационном плане любой примитив Дискретный датчик и в свойстве Тэг указать вручную VarPump1 (нажать Enter).
*одновременная сработка сигналов 1-3 с двухминутной задержкой является переходом устройства в состояние ''Неисправность''
*cработка любого из сигналов 4,5 без задержки является признаком состояния ''Выше нормы''.  


=== Логическая группировка сигналов  ===
Необходимо отобразить в Scada 2-а дискретных датчика, отражающих состояния устройства:
Пусть есть устройство, подключенное к концентратору КУН, которое выдает 5 дискретных сигналов.<br>
При этом считается, что:  
* одновременная сработка  сигналов 1-3 с двухминутной задержкой является переходом устройства в состояние ''Неисправность''
* cработка любого из сигналов 4,5 без задержки является признаком состояния ''Выше нормы''.<br>


Необходимо отобразить в Scada 2-а дискретных датчика, отражающих состояния устройства:
*Неисправность.  
* Неисправность.
*Выше нормы.  
* Выше нормы.


'''Решение'''
'''Решение'''
Строка 217: Строка 417:
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


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


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


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

Текущая версия от 07:50, 9 февраля 2026

Введение

В версии 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-ти бит

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

После создания переменной следует связать ее с Примитивом обычном образом

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


И выбрать переменную из списка Item

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

Служебные переменные

Это переменные, которые создаются автоматически или создаются не в базовом окне настройке Вид \ Переменные

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

VAR.OPC-HTTP

Это переменные, создаваемые при настройке подключения к OPC-серверу через HTTP-шлюз.

При успешном подключении к серверу, его адресное пространство будет спроецировано в дерево

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

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

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

Логическое объединение сигналов

Рассмотрим следующий демонстрационный пример.

Предположим у нас есть дискретных сигнала: Item1 и Item2.

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

  • Переменная VAR.1 - тип обработки AND  (логическое "и")
  • Переменная VAR.2 - тип обработки OR  (логическое "или").

Отобразим на карте четыре примитива типа дискретный датчик и свяжем их с переменными и Item.

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

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

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

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

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

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

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

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

 

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

Необходимо проинформировать об ошибке, если после включения канала управления, не происходит сработка дискретного сигнала обратной связи в течение 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