Страница 1 из 1

События аналогового сигнала

СообщениеДобавлено: Чт сен 10, 2015 4:05 pm
NewOrdered
Добрый день!
В интаче создан супертэг, соответствующий аналоговому сигналу
Код: Выделить всё
TT_36\SPAN   REAL (верхний предел)
TT_36\ZERO   REAL (нижний предел)
TT_36\VAL    REAL (значение)
TT_36\SP1    REAL (уставка VHL)
TT_36\SP5    REAL (уставка VLL)
TT_36\VHL    Discreet (Alarm State = On)
TT_36\VLL    Discreet (Alarm State = On)


Вся математика и логика реализованы в PLC, на АРМ лишь выводятся значение, уставки (c возможностью редактирования) и аварии.
Задача в том, чтобы при событии TT_36\VHL == 1 в комментарий этого тэга подставить значение TT_36\SP1, т.е при каком значении уставки произошло это событие и самое главное, чтобы этот измененный комментарий попал в БД WWALMDB и журнал текущих аварий AlarmViewerCtrl.

Пока только видится такое решение:
1. Скрипт Data Change на нужный тэг
2. Вызов Quick Function с передачей ссылки на весь супертэг
3. Обработка полей нужных членов супертэга (подстановка значений в текст комментария)

Re: События аналогового сигнала

СообщениеДобавлено: Вт сен 22, 2015 5:24 am
Steelman63
а что раньше сработает - аларм или скрипт ?

Re: События аналогового сигнала

СообщениеДобавлено: Вт сен 22, 2015 12:26 pm
Генератор зла
Steelman63 писал(а):а что раньше сработает - аларм или скрипт ?

Аларм. Проверено на морских свинках. Ни одна морская свинка во время проверки не пострадала.

Re: События аналогового сигнала

СообщениеДобавлено: Вт сен 22, 2015 1:58 pm
NewOrdered
Генератор зла писал(а):
Steelman63 писал(а):а что раньше сработает - аларм или скрипт ?

Аларм. Проверено на морских свинках. Ни одна морская свинка во время проверки не пострадала.


То есть затея пустая?
Есть ли другие способы?

Re: События аналогового сигнала

СообщениеДобавлено: Вт сен 22, 2015 2:10 pm
Steelman63
Генератор зла писал(а):
Steelman63 писал(а):а что раньше сработает - аларм или скрипт ?

Аларм. Проверено на морских свинках. Ни одна морская свинка во время проверки не пострадала.


тогда вероятно в БД аларм уйдет со старым коментом

Re: События аналогового сигнала

СообщениеДобавлено: Вт сен 22, 2015 2:21 pm
Генератор зла
NewOrdered писал(а):Есть ли другие способы?

Древний как прополис мамонта - через промежуточный тег.
Значение из сервера в/в поступает в промежуточный I/O-тег, там сравнивается с уставками, хранящимися в Memory-теге (основном), в зависимости от результата сравнения в нужные поля поля Memory-тега записывается что надо, после чего Memory=I/O.
Алармы проверяются в Memory-теге, естественно.

Re: События аналогового сигнала

СообщениеДобавлено: Вт сен 22, 2015 3:46 pm
NewOrdered
Генератор зла писал(а): Древний как прополис мамонта - через промежуточный тег.
Значение из сервера в/в поступает в промежуточный I/O-тег, там сравнивается с уставками, хранящимися в Memory-теге (основном), в зависимости от результата сравнения в нужные поля поля Memory-тега записывается что надо, после чего Memory=I/O.
Алармы проверяются в Memory-теге, естественно.


Спасибо!

Re: События аналогового сигнала

СообщениеДобавлено: Чт окт 01, 2015 5:40 pm
NewOrdered
Генератор зла писал(а):Древний как прополис мамонта - через промежуточный тег.
Значение из сервера в/в поступает в промежуточный I/O-тег, там сравнивается с уставками, хранящимися в Memory-теге (основном), в зависимости от результата сравнения в нужные поля поля Memory-тега записывается что надо, после чего Memory=I/O.
Алармы проверяются в Memory-теге, естественно.


Ваш способ отлично работает.
Я переделал структуру тэга
Код: Выделить всё
TT_36\SPAN   REAL (верхний предел)
TT_36\ZERO   REAL (нижний предел)
TT_36\VAL    REAL (значение)
TT_36\SP1    REAL (уставка VHL)
TT_36\SP5    REAL (уставка VLL)
TT_36\VHL    I/O Discrete (Alarm State = None)
TT_36\VLL    I/O Discrete (Alarm State = None)
TT_36\VHLAlarm    Memory Discrete (Alarm State = On)
TT_36\VLLAlarm    Memory Discrete (Alarm State = On)


И в Data Change TT_36\VHL или TT_36\VLL вызываю обработку соответствующих полей с помощью Quick Function. В базу и в журнал заносятся соответственно
TT_36\VHLAlarm и TT_36\VLLAlarm.

В связи с этим вопрос: как при большом количестве (более 200) аналоговых сигналов обойтись без многочисленных Data Change скриптов?

Re: События аналогового сигнала

СообщениеДобавлено: Пт окт 02, 2015 12:26 pm
Генератор зла
NewOrdered писал(а):как при большом количестве (более 200) аналоговых сигналов обойтись без многочисленных Data Change скриптов?

Сделать всё в одном Application Script :)

Re: События аналогового сигнала

СообщениеДобавлено: Пт окт 02, 2015 3:03 pm
NewOrdered
Генератор зла писал(а):Сделать всё в одном Application Script :)


Хотелось бы также избежать over 200 конструкций IF-THEN-ELSE в этом скрипте

Re: События аналогового сигнала

СообщениеДобавлено: Пт окт 02, 2015 4:18 pm
NewOrdered
Генератор зла писал(а):Сделать всё в одном Application Script :)


И да, почему Application Script?
Выполнение вышеуказанных манипуляций должно быть привязано к определенному событию, а не выполняться циклически.

Re: События аналогового сигнала

СообщениеДобавлено: Пт окт 02, 2015 5:37 pm
Генератор зла
NewOrdered писал(а):Хотелось бы также избежать over 200 конструкций IF-THEN-ELSE в этом скрипте

Дайте два! (Киса)
NewOrdered писал(а):Выполнение вышеуказанных манипуляций должно быть привязано к определенному событию, а не выполняться циклически.

Кому должно?

Re: События аналогового сигнала

СообщениеДобавлено: Пт окт 02, 2015 6:09 pm
NewOrdered
Генератор зла писал(а):
NewOrdered писал(а):Выполнение вышеуказанных манипуляций должно быть привязано к определенному событию, а не выполняться циклически.

Кому должно?


Не кому, а почему. По определению. Потому что вся логика сравнения уставок с текущим значением, включая задержки, гистерезис и пр., реализована в PLC. В InTouch подтягиваются уже готовые флаги (TT_36\VHL и TT_36\VLL для моего примера). При изменении значений этих флагов я бы хотел подставлять соответствующие значения в комментарии тэгов. А в связи с большим их количеством и возник вопрос: нельзя ли их обрабатывать группой, а не по отдельности?