PDA

Просмотр полной версии : Retain переменные не сохраняются!



JuLi
01.03.2010, 12:16
1) Устанавливаю связь с ПЛК
2) Создаю загрузочный проект Онлайн --> Создание загрузочного проектаТочно знаю, что проект создан. Проверяю так:
1) ПЛК-Браузер
2) В командной строке пишу filedir. Появляется следующее:

filedir
log.txt
debug.txt
local_addres.dat
config.dat
retain.bin
source.dat
DEFAULT.PRG
DEFAULT.CHK

3) Запуск программы
Работаю N-е время с программой, отключаю питание (эмитирую случай отключения электроэнергии). После этого вновь пытаюсь устанавить связь с ПЛК, но появляется сообщение: "Программа была изменена. Загрузить новую программу?" Если выбираю Нет, то тогда идет связь с ПЛК устанавливается, retain переменные на месте. Но когда нажимаю Да осуществляется полная загрузка программы, открываю визуализацию - retain переменных след простыл (стоят нули да пустые строки). Можно, конечно, все время нажимать Нет, но при изменении кода программы нажатие Да необходимо. Иначе изменения в программе не вступят в силу. Тогда переменные, описанные как энергонезависимые, стираются и их снова надо вводить.
Вопросы:
1) Такое поведение retain-переменных и программы (имею в виду появление сообщения) при отключении, а потом при включении питания считается нормальным?
2) Можно ли изменить код программы, сохранив при этом retain переменные?

DARNER
01.03.2010, 12:54
проект выкладывайте сразу ...посмотрим.
сделайте их еще и Persistent...
а также инициализируйте при обьявлении там где это необходимо.

JuLi
01.03.2010, 14:14
вот он родной:

Филоненко Владислав
01.03.2010, 14:43
но когда нажимаю да - вот в этом все дело. ретайн обнуляются при загрузке программы.

Pomar
01.03.2010, 16:40
у меня таже проблема установил флаги Retain и Persistent для глобальных переменных. при перезагрузки программы все значения обнуляются (у меня они все Int). как заставить переменные сохраняться?

P.s. использую плк 63

А Вот и Код

VAR RETAIN PERSISTENT
IntgrSum:ARRAY[1..8] OF DINT;
IntgrRemaind: ARRAY[1..8] OF DINT;
PrevSum: ARRAY[1..8] OF DINT;
END_VAR

Филоненко Владислав
01.03.2010, 17:07
при перезагрузке программы - retain всегда стираются. Вы же записываете новую программу!
В ПЛК63 нет online change, поэтому любая запись трактуется как новая.

Pomar
01.03.2010, 17:21
при перезагрузке программы - retain всегда стираются. Вы же записываете новую программу!
В ПЛК63 нет online change, поэтому любая запись трактуется как новая.

В документации CodeSys написано:
Постоянные переменные обозначаются ключевым словом PERSISTENT. В отличие от сохраняемых переменных эти переменные сохраняют свои значения только при загрузке кода новой программы, но не
при выключении питания или любом сбросе. Значения постоянных переменных размещаются внеэнергонезависимого ОЗУ.
Переменные PERSISTENT можно включить в RETAIN объявления. И в данном случае переменные должны сохраняться как при отключении питания так и при перезагрузке программы

Филоненко Владислав
01.03.2010, 23:55
Это правило действует если программа не меняется, т.е. не меняются все распределения данных.
В действительности каждую загрузку программы CoDeSys трактует как новую и все стирает. Не работает.

JuLi
02.03.2010, 06:53
спасибо за объяснение :-)

Pomar
02.03.2010, 16:22
спасибо. буду иметь ввиду