Не работает функция вызываемая при срабатывании события

Обсуждение SCADA-систем: Citect SCADA, Vijeo Citect, CitectSCADA, CitectFacilities, PowerLogic SCADA, PowerSCADA, MX4SCADA, Desigo Insight.
romasimeiz
Сообщений в теме: 2
Сообщения: 32
Зарегистрирован: 14 май 2015, 09:48

Не работает функция вызываемая при срабатывании события

#1

Сообщение romasimeiz » 14 сен 2015, 17:25

Добрый день! Подскажите пожалуйста, почему происходит следующая ситуация :
Создал событие: если переменная устанавливается в 1 , то вызывается функция со следующим кодом:

Код: Выделить всё

FUNCTION Open_MV2()
INT c;
FOR c = 0 TO T2
DO
Sleep(1);
cO = cO+1;

   IF KO_BUZ_MV2 = 1 AND cO = T1 THEN
      IF ERR4_Z2 = 0 THEN
         IF T_ERR_Z2 = 1 THEN
            T_ERR_Z2 = 0;
            SO_OBJ_MV2 = 0;
            SC_OBJ_MV2 = 0;
         ELSE
            SC_OBJ_MV2 = 0;
         END
      END
   ELSE cO = 0; RETURN;
   END
   
   
   IF KO_BUZ_MV2 = 1 AND cO = T2 THEN
         IF ERR4_Z2 = 0 THEN
         IF ERR1_Z2 = 0 THEN
            IF ERR2_Z2 = 1 THEN
               SC_OBJ_MV2 = 1;
               SO_OBJ_MV2 = 1;
               T_ERR_Z2 = 1;
            ELSE
               IF ERR3_Z2 = 1 THEN
                  SC_OBJ_MV2 = 1;
                  T_ERR_Z2 = 1;
               ELSE
                  SO_OBJ_MV2 = 1;
               END             
            END
         END
      END
   ELSE cO = 0; RETURN;      
   END
   END
END


Дело в том, что если условие в функции не выполняется, то функция просто стоит на месте. Это показал отладчик. По идее должно просто пропускать условие и идти к следующей итерации цикла. По крайней мере эта функция работает в обычном режиме (в новой задаче в бесконечном цикле)
Подскажите, что делать ? Как заставить нормально работать функцию ?
Спасибо!



Аватара пользователя
alex
Администратор
Сообщений в теме: 2
Сообщения: 1781
Зарегистрирован: 05 апр 2010, 21:58
Откуда: Москва
Благодарил (а): 52 раза
Поблагодарили: 111 раз
Контактная информация:

Re: Не работает функция вызываемая при срабатывании события

#2

Сообщение alex » 15 сен 2015, 14:05

В вашем случае, я не совсем понял что не получается, но если под отладчиком функция ведет себя как задумывалось, то нет причин сомневаться что она ведет себя по другому в обычном режиме исполнения.



romasimeiz
Сообщений в теме: 2
Сообщения: 32
Зарегистрирован: 14 май 2015, 09:48

Re: Не работает функция вызываемая при срабатывании события

#3

Сообщение romasimeiz » 15 сен 2015, 16:14

Разобрался в чём была ошибка:
событие я назвал именем отличным от GLOBAL. Когда выполнение кода доходило до строчки, например, IF ERR3_Z2 = 1 THEN , то выполнение просто дальше не шло, потому что ERR3_Z2 объявлена как Локальная переменная (locvar.dbf). Мне кажется, она была просто вне зоны видимости.
Когда поменял имя события на GLOBAL все строчки кода выполняются нормально.
Проблема была не режимах Runtime/Debug, а в том что если функция была вызвана событием, то кусок кода (в частности проверка) просто не выполнялась.
Спасибо за помощь!



Аватара пользователя
alex
Администратор
Сообщений в теме: 2
Сообщения: 1781
Зарегистрирован: 05 апр 2010, 21:58
Откуда: Москва
Благодарил (а): 52 раза
Поблагодарили: 111 раз
Контактная информация:

Re: Не работает функция вызываемая при срабатывании события

#4

Сообщение alex » 15 сен 2015, 16:39

romasimeiz писал(а):потому что ERR3_Z2 объявлена как Локальная переменная (locvar.dbf)

Важный момент для понимания. Образ локальных переменных для каждого процесса Vijeo Citect- свой, и это тонкий момент, т.к. вы можете писать в локальную переменную в процессе клиента визуализации, а проверять её значение в скрипте, который выполняется в процессе аларм-сервера и не понимать что происходить.




Если эта тема может быть полезна другим, поделитесь ссылкой:

Вернуться в «Citect SCADA, Vijeo Citect, CitectSCADA, CitectFacilities, PowerLogic SCADA, PowerSCADA, MX4SCADA, Desigo Insight»