Автомат управления освещением

Материал из TekonWiki
Перейти к навигацииПерейти к поиску

Возможность реализации автомата управления (включение канала управления при изменении состояния дискретного сигнала) существует в 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, логика созданного автомата управления должна работать.