PDA

Просмотр полной версии : Master OPC Universal Modbus Server: Функция server.SetTagToOnOff() узла PROGRAM



BiancoBovino
25.07.2018, 02:30
Мне нужно программно по условию останавливать и запускать исполнение тэга. Рассчитывал делать это с помощью функции server.SetTagToOnOff(). Но че то подтормаживаю - не понимаю, как ее применять.
Думал, что функция имеет аргумент - имя тэга. Оказалось,что нет - останавливается исполнение текущего тэга. Из скрипта этого тэга. В руководстве дан следующий сниппет:

val,q=server.ReadCurrentTag(); --получаем значение тега

if val==true then --если значение "true"

server.SetDeviceToOnOff (true); --запускаем опрос устройства

else

server.SetDeviceToOnOff (false); --иначе останавливаем

end;
Этот код может устройство выключить, но включить - нет, так как в выключенном тэге скрипт не исполняется. Пробовал писать в отключенный тэг из другого тэга, из MasterSCADA в расчете на то, что функция OnWrite() отработает - ничего не вышло.
Нет идей, ребята? Очень надо

SCADAMaster
25.07.2018, 09:10
Для чего вам вообще нужно останавливать отдельный тег?

BiancoBovino
25.07.2018, 10:45
Решается следующая задача. Нужно детектировать изменение параметра - так называемый рост на некую величину на скользящем окне в трое суток. Параметр - вибрация. Таких однотипных параметров имеется на агрегат порядка 20 штук. При этом в случае, если активная мощность или обороты нестационарны, параметр не считается, если стационарны на окне более получаса - параметр начинает считаться. Если рост обнаружен, нужно выдать сигнал в систему сигнализации, который должен висеть до ручного снятия, обнулить расчет, подождать некоторое время и снова его начать. Если в процессе расчета условие стационарности нарушается, то расчет надо ОСТАНОВИТЬ, ОБНУЛИТЬ, дождаться стационарности по мощности и оборотам и снова его начать.
Предполагалось сделать тэг с собственно параметром и тэг, читающий параметр, рост которого нужно анализировать, и производить расчеты в нем. А в подустройстве, которому принадлежат оба этих тэга, анализировать параметры мощности и оборотов. Если параметры нестационарны - выключать тэг расчета, если стационарны - считать. Сам тэг параметра ВЫКЛЮЧАТЬ нельзя, поэтому отключать подустройство с этими тэгами тоже нельзя. Также предполагалось, что функцию подготовки к расчетам будет выполнять функция OnInit(), также думалось, что эта функция вызывается всякий раз при включении тэга. Такая структура виделась удобной, потому что можно было создать вышеуказанное для одного тэга и затем продублировать нужное число раз.
Тест на нагрузку это хозяйство прошло, но вот с включением выключением не получилось.
Можно в принципе это реализовать и без отключения, но получается очень криво. Нужно городить в OnRead() лапшу из проверок.


PS. Встречный вопрос. Если вы считаете, что задача включения-выключения тэга - это что-то из области абстракции, то зачем тогда делалась функция SetTagToOnOff()?
PPS. ПО функции SetDeviceToOnOff() вопрос аналогичный - как включить, если предварительно выключил?
PPPS. Нужно сказать, что сама программа мне очень нравится. Замечательный продукт.

SCADAMaster
25.07.2018, 11:12
Включение-выключение устройства, можно производить используя тег типа ServerOnly, скрипт записи.
Конкретно в вашем случае не ясно зачем выключать тег, просто не делайте вычисления когда это не требуется в скрипте.

BiancoBovino
25.07.2018, 23:20
Спасибо. Попробовал по устройству. Все работает. Но осадочек остался с тэгом:)) С ним так не прокатывает. Получается, что функцию SetTagToOnOff() следовало бы назвать SetTagToOff() и вызывать без аргументов, потому что при помощи этой функции включить тэг нельзя. Мне было бы удобнее, если бы эта функция работала нормально.

Andrevo
01.06.2022, 08:16
Здравствуйте, при ручной записи в тег Включение-выключение устройства работает отлично, но когда пытаюсь сбросить командой check, тег принимает значение false и сервер не останавливает опрос.

Как можно решить данную проблему?