PDA

Просмотр полной версии : не сохраняется retain переменная



service
22.11.2012, 12:52
сделал как в справке написано.
задаю из визуализации время, делаю сброс а оно не сохраняется.

SBER
22.11.2012, 13:44
А глобальной ее делать не пробовали?

service
22.11.2012, 15:36
в гобальные вставлял
VAR GLOBAL_RETAIN
tz9:=TIME;
END_VAR

Terrano1992
23.11.2012, 09:35
"Делаю сброс" - вот здесь поподробнее, какое именно действие с ПЛК под "сбросом" подразумевается...
Поясню: retain'ы обязаны сохраняться при обычном прерывании работы путем отключения питания ПЛК. И то при условии, что аккумулятор в ПЛК не сдохший. А вот при всяких "насильственных действиях", выполняемых из среды Codesys, они сохраняться не обязаны.
И, кстати: это при отладке программы на реальном ПЛК происходит, или в симуляции?

service
23.11.2012, 15:01
без реального плк пока. а сброс делаю " онлайн - сброс ". как в справке:
"Сохраняемые переменные обозначаются ключевым словом RETAIN. Эти переменные сохраняют свои значения, даже если произошла авария питания (выключение и включение) контроллера, что равносильно команде сброс (''Онлайн' 'Сброс''). Значения RETAIN переменных сохраняются в энергонезависимой памяти"

YuriBel
23.11.2012, 15:21
Ну вы похоже сами на свой вопрос и ответили. В реальном контроллере есть специальные средства, которые эти переменные записывают, а потом восстанавливают, а в эмуляции их скорее всего нет.

Terrano1992
23.11.2012, 15:25
http://www.owen.ru/forum/showthread.php?t=2985. Почти та же самая проблема, и тоже в симуляторе (на реальном контроллере все работает без проблем). Видимо, такова реализация симулятора в Codesys.

service
23.11.2012, 17:17
понятно.спасибо

Igor.m
06.11.2013, 07:32
Здравствуйте! Подскажите как сделать чтобы переменная была глобальной и ее можно было бы изменить в любой момент, со СКАДЫ например? Т.к. одинаковые имена переменным задать нельзя, то в конфигурации ПЛК для передачи задаю другое имя переменной, а в программе их связываю, но при запуске программы значение из конфигурации (соответственно "0") записывается в глобальную переменную, как исправить ситуацию?
Хочу сказать что если пропадет питание, то переменная RETAIN сохраниться, но программа то запустится сначала и получается что переменная из конфигурации (в которой будет "0") запишет свое значение в глобальную, сбросит получается, вот в чем проблема

YuriBel
06.11.2013, 11:11
Переменные в конфигурации также имеют статус Retain и сохраняются. Другое дело, если некое устройство (например панель) при совместном старте с ПЛК запишет туда ноль, то это будет неприятно. Но это уже другая тема, и она здесь бурно обсуждалась.

Igor.m
07.11.2013, 07:40
Благодарю за ответ! Возможно у меня со временем тоже панель подключится..

melky
07.11.2013, 08:22
С панелью и заливкой новой программы в ПЛК переменная панели может оказаться 0. Если значение переменной не должно быть никогда 0 можно поступить просто, проинициализировать ее.
если на ST то наверное будет выглядеть так.
IF A:=0 then
A:=X
ENDIF
где A - регистр панели, X - переменная в VAR с начально заданным значением. На CFC так делал, работает.

Igor.m
17.03.2014, 08:04
С панелью и заливкой новой программы в ПЛК переменная панели может оказаться 0. Если значение переменной не должно быть никогда 0 можно поступить просто, проинициализировать ее.
если на ST то наверное будет выглядеть так.
IF A:=0 then
A:=X
ENDIF
где A - регистр панели, X - переменная в VAR с начально заданным значением. На CFC так делал, работает.

Что значит "проинициализировать ее"? А если и в панели переменные записываются в энергонезависимую память, но отключение питание панели и ПЛК происходит одновременно, тогда тоже есть вероятность записи значения 0 в ПЛК ? Еще такой вопрос если у ПЛК пропадает питание более чем на 20 мин () как это влияет на его работу и на энергонезависимые переменные?