|
|
| Строка 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, логика созданного автомата управления должна работать.
| |