Скрипт по записи в канал

Avatar
  • обновлен
Добрый день!
Потребовалось отслеживать момент изменения уставки в приборе ТРМ138.
Да запросто говорю, там есть скрипты, запускаемые по таймеру (кои мы уже широко и с удовольствием используем), а есть скрипты, запускаемые по событию. Изменение уставки прибора является событием, поэтому создадим скрипт по событию - и дело в шляпе.
Сажусь за клавиатуру, запускаю редактор каналов, добавляю виртуальный канал, создаю скрипт … и понимаю, что ничего не понимаю. А как собственно отследить момент изменения уставки в приборе. Руководство по редактору каналов содержит загадочную фразу "…и по событию записи в канал (то есть скрипт выполняется при смене значения на канала – при записи в канал значения)…".
То есть, чтобы сработал скрипт по записи … я сам должен организовать эту запись в канал:S ?
Уважаемые, поможите разобрать эту коллизию. Так как мне отследить событие изменения значения в канале?
В физическом канале я не могу использовать скрипт - там позволительна только формула. А в виртуальном канале при создании скрипта, я указываю вид скрипта "по событию" и ожидаю, что программа спросит ехидно "какое событие желаете отследить". Но не тут то было - открывается редактор и всё - делай дескать всё сам.

С уважением, Анатолий
Новочеркасск
Avatar
SIMP Tech (Сергей)
Уважаемая служба поддержки, помогите, пожалуйста.
Задача: При выходе за значения уставок на выходящем канале аналогового контроллера ADAM-6017 , должен быть изменен сигнал на цифровом контроллере ADAM 6066. (Изменение сигнала на ADAM 6066 приводит к включению предохранителей).
Попытались решить следующим скриптом:
Var In1 : Word; y: boolean;
Begin
y:=true;
In1:= ReadValue('аналог_вх');
If In1<=34372 then y:=false;
If In1>=39400 then y:=false;
WriteValue('вирт_канал,y);
WriteValue ('цифр_выход0',y);
WriteValue ('цифр_выход1',y);
end.

При срабатывании скрипта, значение аналогового контроллера (аналог_вх) необходимо вводить вручную. А хочется чтобы значения передавались как в тесте ОРС-серверов, чтобы условия работали и наконец-то начали срабатывать предохранители при алармах, а также чтобы можно было привязать виртуальный канал к какому-либо объекту на мнемосхеме, отображающему аларм.
Извиняюсь за корявое изложение сути. Понимаю, что трудно разобраться что я тут нагородил, но для наглядности отправляю еще и зазипованную папку slProject
http://zalil.ru/34084524

День добрый.

Свяжитесь пожалуйста с нами по ICQ: 352103362 для более оперативного решения Вашей задачи. Судя по скрипту все правильно, могу предположить что виртуальный канал у Вас со скриптом который выполняется по событию записи в канал, а необходим циклический скрипт.
Avatar
Александр
Уважаемая служба поддержки, помогите, пожалуйста.
Задача: При выходе за значения уставок на выходящем канале аналогового контроллера ADAM-6017 , должен быть изменен сигнал на цифровом контроллере ADAM 6066. (Изменение сигнала на ADAM 6066 приводит к включению предохранителей).
Попытались решить следующим скриптом:
Var In1 : Word; y: boolean;
Begin
y:=true;
In1:= ReadValue('аналог_вх');
If In1<=34372 then y:=false;
If In1>=39400 then y:=false;
WriteValue('вирт_канал,y);
WriteValue ('цифр_выход0',y);
WriteValue ('цифр_выход1',y);
end.

При срабатывании скрипта, значение аналогового контроллера (аналог_вх) необходимо вводить вручную. А хочется чтобы значения передавались как в тесте ОРС-серверов, чтобы условия работали и наконец-то начали срабатывать предохранители при алармах, а также чтобы можно было привязать виртуальный канал к какому-либо объекту на мнемосхеме, отображающему аларм.
Извиняюсь за корявое изложение сути. Понимаю, что трудно разобраться что я тут нагородил, но для наглядности отправляю еще и зазипованную папку slProject
http://zalil.ru/34084524
Avatar
Добрый день!
Спасибо за ответ.
Все-таки придется работать с таймером.
Была надежда, что есть более элегантное решение.

С уважением, Анатолий
Новочеркасск
Avatar
demitsury
Добрый день!

Я бы сделал след. образом.
1. Создать вирт. канал по таймеру
2. В скрипте этого канала проверять состояние опс-тега ответственного за уставку,
т.е. при первоначальном запуске запомнить состояние опс тега с уставкой, используя конструкцию if AsFirstRun then old_value:=ReadValue('opc tag')
затем проверять разницу между старым значением и текущим и если разница больше 0 или заранее заданной "мёртвой зоны", то делать то что Вам нужно. Например писать в этот же виртуальный тег какое то значение.

С уважением, Дмитрий