TagRead, TagWrite и локальные переменные

Обсуждение SCADA-систем: Citect SCADA, Vijeo Citect, CitectSCADA, CitectFacilities, PowerLogic SCADA, PowerSCADA, MX4SCADA, Desigo Insight.
Аватара пользователя
alex
Администратор
Сообщений в теме: 7
Сообщения: 1764
Зарегистрирован: 05 апр 2010, 21:58
Откуда: Москва
Благодарил (а): 50 раз
Поблагодарили: 107 раз
Контактная информация:

Re: TagRead, TagWrite и локальные переменные

#11

Сообщение alex » 17 сен 2015, 16:45

Попробовал работу функций TagRead и TagWrite с локальными переменными, вроде как читают и пишут в разных режимах. Наверное неточность в хелпе.

kvn писал(а):Получается следующее -
С помощью кнопки со страницы локальную переменную прочитать удается - id_Handle_1 = TagRead("hHandle_CN1_M1_0").
А то же самое ввожу в функции Cicode - локальная переменная не читается......

Как переменная не читается? Вы не получаете ожидаемое значение?



kvn
Сообщений в теме: 12
Сообщения: 105
Зарегистрирован: 08 сен 2015, 12:12
Откуда: Екатеринбург
Благодарил (а): 10 раз

Re: TagRead, TagWrite и локальные переменные

#12

Сообщение kvn » 18 сен 2015, 07:11

kvn писал(а):
Получается следующее -
С помощью кнопки со страницы локальную переменную прочитать удается - id_Handle_1 = TagRead("hHandle_CN1_M1_0").
А то же самое ввожу в функции Cicode - локальная переменная не читается......

Как переменная не читается? Вы не получаете ожидаемое значение?

Наблюдаю следующее -
TagRead располагаю в Cicode перед TaskNew - id_Handle_1 = TagRead("hHandle_CN1_M1_0").
Т.к. функция TagRead является функцией блокировки, следующие действия кода (запуск задачи TaskNew) не выполняется, т.е. TagRead не выполняется.
Располагаю TagRead после TaskNew, задача запускается, хендл задачи читается как 0, но задача то запущена.
Произвожу контрольное считывание хендл кнопкой со страницы (в ней то же, что и в Cicode - id_Handle_1 = TagRead("hHandle_CN1_M1_0")) - все нормально
хендл не равен нулю и равен хендл задачи наблюдаемой в Ядре.



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

Re: TagRead, TagWrite и локальные переменные

#13

Сообщение alex » 18 сен 2015, 08:49

А cicode функция, как выполняется, кто ее вызывает на исполнение?



kvn
Сообщений в теме: 12
Сообщения: 105
Зарегистрирован: 08 сен 2015, 12:12
Откуда: Екатеринбург
Благодарил (а): 10 раз

Re: TagRead, TagWrite и локальные переменные

#14

Сообщение kvn » 18 сен 2015, 10:58

Функция в джине - f(x), джин на странице.
Функция начинает выполняться (запускать задачу) при открытии страницы.



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

Re: TagRead, TagWrite и локальные переменные

#15

Сообщение alex » 18 сен 2015, 11:27

Т.е. Вы используете Cicode object в джинне?



kvn
Сообщений в теме: 12
Сообщения: 105
Зарегистрирован: 08 сен 2015, 12:12
Откуда: Екатеринбург
Благодарил (а): 10 раз

Re: TagRead, TagWrite и локальные переменные

#16

Сообщение kvn » 18 сен 2015, 11:57

Да.



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

Re: TagRead, TagWrite и локальные переменные

#17

Сообщение alex » 18 сен 2015, 12:04

Кажется я догадываюсь, функция TagRead является блокирующей функцией (т.е. вызываемая синхронно), а скрипты выполняемый в объекте Cicode object не должен использовать такие функции, а функция TagWrite по умолчанию вызывается как неблокирующая (т.е. вызывается асинхронно). Думаю что дело в этом.



kvn
Сообщений в теме: 12
Сообщения: 105
Зарегистрирован: 08 сен 2015, 12:12
Откуда: Екатеринбург
Благодарил (а): 10 раз

Re: TagRead, TagWrite и локальные переменные

#18

Сообщение kvn » 18 сен 2015, 12:41

Да, так и есть - от кнопки чтение локальной переменной выполняется с помощью функции в которой есть TagRead для ее чтения.
Похоже я попал в "тупичок"!
С одной стороны мне из джина надо взять его STRING имена для запуска задачи (задачи конкретно для этого джина), считать в Cicode перед запуском хендл задачи (локальную переменную) сформировав имя хендл по STRING взятым из джина для определения что задача не запущена. (Тяжелое получилось предложение :)).
С другой стороны я хендл прочитать по TagRead не могу, т.к. функцию могу расположить только в Cicode object - в джине...

Но выход похоже есть - запускать задачу используя Mode равным не 0, а 8 - TaskNew(sName, sArg, Mode [, sClusterName] ).
Т.е., как я понимаю, при "восьмерке" запуск новой задачи не происходит, если задача с такими аргументами уже запущена?



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

Re: TagRead, TagWrite и локальные переменные

#19

Сообщение alex » 18 сен 2015, 13:07

Можно попробовать решить вопрос через глобальную/модульную переменную Cicode (туда писать хендл задачи), и возвращать хендл из глобальной/модульной переменной через функцию вызывая ее из джинна.



kvn
Сообщений в теме: 12
Сообщения: 105
Зарегистрирован: 08 сен 2015, 12:12
Откуда: Екатеринбург
Благодарил (а): 10 раз

Re: TagRead, TagWrite и локальные переменные

#20

Сообщение kvn » 18 сен 2015, 13:24

Так, а как читать глобальную переменную?
Есть свои функции для чтения глобальных переменных, не TagRead?




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

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