Автомат управления освещением: различия между версиями

Материал из TekonWiki
Перейти к навигацииПерейти к поиску
Нет описания правки
Содержимое страницы заменено на «Category:ПрограммыСКАДА Category:ПрограммыСКАДА:SCADA»
Строка 1: Строка 1:
[[Category:ПрограммыСКАДА]]
[[Category:ПрограммыСКАДА]]
[[Category:ПрограммыСКАДА:SCADA]]
[[Category:ПрограммыСКАДА:SCADA]]
Возможность реализации автомата управления (включение канала управления при изменении состояния дискретного сигнала) существует в 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 в блокноте следующего содержания:
<nowiki>
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
</nowiki>
Рассмотрим его подробнее:
Вначале просто указываем соответствие тэгов (названия тэгов, может быть взято из окна свойств датчика при настройке АСУД.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, логика созданного автомата управления должна работать.

Версия от 13:18, 19 июля 2013