Автомат управления освещением: различия между версиями
Alex (обсуждение | вклад) Новая страница: «Category:FAQ_SCADA Возможность реализации автомата управления (включение канала управления при…» |
Alex (обсуждение | вклад) Нет описания правки |
||
| Строка 16: | Строка 16: | ||
Предполагаем, что уже существует настройка OPC-сервера, для концентраторов 210 и 202 | Предполагаем, что уже существует настройка OPC-сервера, для концентраторов 210 и 202 | ||
Создадим текстовый файл с именем script1.txt в блокноте | Создадим текстовый файл с именем script1.txt в блокноте следующего содержания: | ||
descret_autocall_task_map = | descret_autocall_task_map = | ||
| Строка 25: | Строка 24: | ||
"DA.[localhost{188D08EC-72CB-425B-8EA8-EE2308736440}].USB Пульт.210 Мини-КУН.КУП Канал 1.Остановка" | "DA.[localhost{188D08EC-72CB-425B-8EA8-EE2308736440}].USB Пульт.210 Мини-КУН.КУП Канал 1.Остановка" | ||
} | } | ||
function DescretSensor_OnDataChange(item, data) | function DescretSensor_OnDataChange(item, data) | ||
if item ~= nil and data ~=nil then | if item ~= nil and data ~=nil then | ||
| Строка 56: | Строка 52: | ||
"DescretSensor_OnDataChange") | "DescretSensor_OnDataChange") | ||
end | end | ||
Рассмотрим его подробнее: | |||
Вначале просто указываем соответствие тэгов (названия тэгов, может быть взято из окна свойств датчика при настройке АСУД.SCADA) дискретного датчика и канала управления, как показано ниже: | |||
descret_autocall_task_map = | |||
{ | |||
["DA.[localhost{188D08EC-72CB-425B-8EA8-EE2308736440}].USB Пульт.202 Мини-КУН.Авария 1"] = | |||
"DA.[localhost{188D08EC-72CB-425B-8EA8-EE2308736440}].USB Пульт.210 Мини-КУН.КУП Канал 1.Остановка" | |||
} | |||
Ниже определена логика работы, а именно: при значении датчика 32769 (авария) записать 0 в канал управления. | |||
if int==32769 then | |||
local newData = base.Variant(0); | |||
itemCtrl:AsyncWrite(newData) | |||
Значения дискретного датчика могут быть следующие: | |||
32769 - активная авария (красный воскл.знак на примитиве); | |||
32771 - активная авария, с которой ознакомился диспетчер (желтый воскл.знак на примитиве); | |||
0 - нет аварии. | |||
Команды каналу управления могут быть следующие: | |||
0 - выключить канал управления; | |||
1 - включить канал управления. | |||
Сохраните файл script1.txt | Сохраните файл script1.txt | ||
| Строка 68: | Строка 88: | ||
end | end | ||
Сохраните файл, запустите АСУД.SCADA, логика созданного автомата управления должна работать. | |||
Версия от 07:38, 24 августа 2011
Возможность реализации автомата управления (включение канала управления при изменении состояния дискретного сигнала) существует в SCADA на основе написание специальных скриптов на языке Lua.
При необходимости использования автомата управления пожалуйста свяжитесь со специалистами службы технической поддержи.
Приведенное ниже описание носит ознакомительный характер.
Скрипт представляет собой текстовый файл с кодом и размещается в папке C:\Program Files\Tekon\ASUD Scada\SCADA\scripts\lua\
По умолчанию в данной папке содержится два файла:
- light.lua (автомат управления групповым освещением).
- lvm_entry.lua (загрузчик скриптов в SCADA).
Рассмотрим пример простого скрипта реализующего выключение канала управления КУП-RS подключенного к концентратору Мини-КУН номер 210, при срабатывании дискретного входа номер 4 на концентраторе Мини-КУН номер 202.
Предполагаем, что уже существует настройка OPC-сервера, для концентраторов 210 и 202
Создадим текстовый файл с именем script1.txt в блокноте следующего содержания:
descret_autocall_task_map =
{
["DA.[localhost{188D08EC-72CB-425B-8EA8-EE2308736440}].USB Пульт.202 Мини-КУН.Авария 1"] =
"DA.[localhost{188D08EC-72CB-425B-8EA8-EE2308736440}].USB Пульт.210 Мини-КУН.КУП Канал 1.Остановка"
}
function DescretSensor_OnDataChange(item, data)
if item ~= nil and data ~=nil then
if data.Quality ~= opc.da.tekon.ItemData.QUALITY_GOOD or data.Data ==nil then
return
end
local int = data.Data.Integer
local prop = item:GetProperty(opc.da.tekon.Item.ITEM_TYPE)
if prop ~= nil and prop.Data.Integer == opc.da.tekon.Item.SENSOR then
if descret_autocall_task_map[item.ItemID] ~= nil then
local itemCtrl, bRes = opc.da.tekon.GetItem(descret_autocall_task_map[item.ItemID])
if (itemCtrl~= nil) and bRes then
if int==32769 then
local newData = base.Variant(0);
itemCtrl:AsyncWrite(newData)
end
end
end
end
end
end
function InitScript1()
opc.da.tekon.RegisterEventHandler(
"OPC::DA::TEKON::OnDataChange",
"DescretSensor_OnDataChange")
opc.da.tekon.RegisterEventHandler(
"OPC::DA::TEKON::OnReadComplete",
"DescretSensor_OnDataChange")
end
Рассмотрим его подробнее:
Вначале просто указываем соответствие тэгов (названия тэгов, может быть взято из окна свойств датчика при настройке АСУД.SCADA) дискретного датчика и канала управления, как показано ниже:
descret_autocall_task_map =
{
["DA.[localhost{188D08EC-72CB-425B-8EA8-EE2308736440}].USB Пульт.202 Мини-КУН.Авария 1"] =
"DA.[localhost{188D08EC-72CB-425B-8EA8-EE2308736440}].USB Пульт.210 Мини-КУН.КУП Канал 1.Остановка"
}
Ниже определена логика работы, а именно: при значении датчика 32769 (авария) записать 0 в канал управления.
if int==32769 then local newData = base.Variant(0); itemCtrl:AsyncWrite(newData)
Значения дискретного датчика могут быть следующие:
32769 - активная авария (красный воскл.знак на примитиве); 32771 - активная авария, с которой ознакомился диспетчер (желтый воскл.знак на примитиве); 0 - нет аварии.
Команды каналу управления могут быть следующие:
0 - выключить канал управления; 1 - включить канал управления.
Сохраните файл script1.txt
Откройте в блокноте файл lvm_entry.lua и внесите следующие изменения:
base.dofile("light.lua")
base.dofile("script1.txt")
function main()
InitLight()
InitScript1()
end
Сохраните файл, запустите АСУД.SCADA, логика созданного автомата управления должна работать.