Как передать имя процедуры в суперджин (SuperGine) для выполнения.

Обсуждение SCADA-систем: Citect SCADA, Vijeo Citect, CitectSCADA, CitectFacilities, PowerLogic SCADA, PowerSCADA, MX4SCADA, Desigo Insight.
gogol
Сообщений в теме: 4
Сообщения: 34
Зарегистрирован: 16 апр 2014, 13:56

Как передать имя процедуры в суперджин (SuperGine) для выполнения.

#1

Сообщение gogol » 24 июл 2014, 10:05

Как передать имя процедуры в суперджин (SuperGine) чтобы она выполнилась при нажатии на кнопку супрерджина.
Вызов ?String 11? прописанный в команде для действия "Вниз" при компиляции вызывает сообщение Possible missing operand between tags типа WARNING.
При запуске переданная процедура не выполняется.
Передача через джин UstavkaT - см. вложение.
Суперджин !Ustavka вызывается процедурой
Ustavka("'%Value%'","%Value%","'%Command%'","'%EU%'","'%area%'","'%DevName%'","'%Location%'","'%OnAfterComplit%'")

Сама процедура:
FUNCTION Ustavka(STRING Tag, STRING ValueS, STRING command, STRING EU="", STRING area="", STRING DevName="", STRING Location="", STRING OnAfterComplit="");
 ....
    AssVarTags(-2, 11, OnAfterComplit);
....
    CSV_MM_WinNewAt("!Ustavka", iX+10, iY-10, 1 + 16 + 128 + 256);
....
END
У вас нет необходимых прав для просмотра вложений в этом сообщении.



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

Re: Как передать имя процедуры в суперджин (SuperGine) для выполнения.

#2

Сообщение alex » 24 июл 2014, 15:57

Можно попробовать использовать функцию
TaskCall
Чтобы увидеть ссылку зарегистрируйтесь или войдите под своим логином.
, а параметры ей передавать штатным способом.



gogol
Сообщений в теме: 4
Сообщения: 34
Зарегистрирован: 16 апр 2014, 13:56

Re: Как передать имя процедуры в суперджин (SuperGine) для выполнения.

#3

Сообщение gogol » 24 июл 2014, 17:47

Спасибо, как раз то, что нужно.
Но возникла другая проблема
В функции которая передается на выполнение устанавливаются тэги
INT FUNCTION SetGr1T()
F1T_Set = StrToReal(Gr1TempSet);
Sleep(1);
F2T_Set = StrToReal(Gr1TempSet);
Sleep(1);
F3T_Set = StrToReal(Gr1TempSet);
Sleep(1);
F4T_Set = StrToReal(Gr1TempSet);
Sleep(1);
F5T_Set = StrToReal(Gr1TempSet);
Sleep(1);
F6T_Set = StrToReal(Gr1TempSet);
RETURN 0;
END;

Происходят непонятные вещи:
F6T_Set - устанавливается в нужное значение, а F1T_Set нет!
Но пр повторном щелчке на джине, который вызывает супер джин - тэг F1T_Set устанавливается в нужное значение (сразу по щелчку мыши)
Как отловить в чем ошибка?



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

Re: Как передать имя процедуры в суперджин (SuperGine) для выполнения.

#4

Сообщение alex » 24 июл 2014, 20:36

Зачем sleep-ы после каждого присвоения? С ними функция выполняется 5 секунд, это так задумано?



gogol
Сообщений в теме: 4
Сообщения: 34
Зарегистрирован: 16 апр 2014, 13:56

Re: Как передать имя процедуры в суперджин (SuperGine) для выполнения.

#5

Сообщение gogol » 25 июл 2014, 07:48

Эта процедура уже имеется в рабочей системе, кроме того аналогичным способом реализована уставка значений во всех процедурах проекта, вероятно смысл в этом есть.
Раньше вызов процедуры был реализован ч/з джин на странице, и вызывалась по кнопке ок - уставка значений всех тэгов в процедуре отрабатывала корректно.
Сейчас, для освобождения места на форме, групповую уставку нужно реализовать суперджином.
Для проверки, убирал, sleep - результат тот же.
Понятно, что последний тэг установится после 5 сек., не понятно почему первый устанавливается странным образом описанным в первом посте.



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

Re: Как передать имя процедуры в суперджин (SuperGine) для выполнения.

#6

Сообщение alex » 25 июл 2014, 08:26

Слипы здесь используются, я думаю, чтобы бы подождать пока "гарантировано" запишется тег в "железо", это на самом деле "костыль", лучше использовать синхронную запись в тег, ну и код сам "не очень", я немного переписал код, который можно попробовать в Вашей ситуации, может быть поможет.
INT FUNCTION SetGr1T()
   
  STRING s;
 
  s = Gr1TempSet;

  TagWrite("F1T_Set", s, 0, TRUE);
  TagWrite("F2T_Set", s, 0, TRUE);
  TagWrite("F3T_Set", s, 0, TRUE);
  TagWrite("F4T_Set", s, 0, TRUE);
  TagWrite("F4T_Set", s, 0, TRUE);
  TagWrite("F6T_Set", s, 0, TRUE);

  RETURN 0;
 
END;


p.s. По поводу ситуации, думаю это может быть связано с временем выполнения функции, попробуйте подождать, не закрывая суперджинн, и выведите значения тегов чтобы наблюдать за их значениями.



gogol
Сообщений в теме: 4
Сообщения: 34
Зарегистрирован: 16 апр 2014, 13:56

Re: Как передать имя процедуры в суперджин (SuperGine) для выполнения.

#7

Сообщение gogol » 25 июл 2014, 09:09

Спасибо, попробую.




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

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