PDA

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



Виктор_Л
15.11.2008, 10:48
Переменные, объявленные как VAR RETAIN после выключения питания не
восстанавливаются. Что необходимо сделать?

Виктор_Л
15.11.2008, 12:32
Забыл добавить:
контроллер-ПЛК-24.Р-М;
target_2.02_PLC100;
прошивка-PLC_100_2.03.0

Филоненко Владислав
15.11.2008, 13:49
Видимо, Вы их инициализируете при старте. А этого делать не надо.

Виктор_Л
15.11.2008, 14:58
ПЛК и CodeSys я впервые увидел 3 недели назад, поэтому не очень понял что значит инициализировать при старте. Все переменные я объявил в разделе объявлений. Вообще-то у меня ПЛК-100 + ИП320,
ПЛК-мастер. Небходимо запомнить 3 заданных с ИП320 параметра и 2 текущих значения. Спасибо за совет.

Филоненко Владислав
15.11.2008, 17:58
Выложите проект, помогу.

Виктор_Л
15.11.2008, 18:28
Прект прилагаю. Не шедевр но работает.

Филоненко Владислав
16.11.2008, 15:17
Вы объявили переменные как ретайн и в программе в первых же строках их значения перетираете другими (не Retain).

Виктор_Л
16.11.2008, 15:37
Большое спасибо, исправлю.

Виктор_Л
16.11.2008, 16:57
Объявил VAR RETAIN отдельные переменные, не используемые в программе, в конце программы присвоил им значения входных и выходных регистров modbus, ПЛК выключил-включил, эффекта нет. Даже не сохраняется обещанная работоспособность в течение 10 минут. Может быть оформить программу в виде POU?

Виктор_Л
16.11.2008, 19:35
Переменные сохраняются в течение 0.5 сек., затем пропадают. Связано, скорее всего, с тем , что и регистры ИП320 и регистры подмодулей энкодеров при выключении обнуляются. Пока не знаю насколько это удастся объехать.

Филоненко Владислав
16.11.2008, 21:50
Для начала, создайте проект с 1 переменной Retain,
в самой программе только ";",
залейте его в контроллер, не забудьте сделать Create boot Project,
запустите,
назначьте переменной значение (вручную),
разлогиньтесь, выключите питание.
подождите 10 мин, чтобы конроллер выкл. рез. питание.
Включите, залогиньтесь, среда разработки не должна требовать залить новый проект (иначе что-то забыли сделать).
И посмотрите на значение переменной.

Виктор_Л
17.11.2008, 18:01
Свою ошибку я понял. При старте в входные переменные RETAIN записывались значения регистров Modbus, а после выключения питания регистры ИП320 обнулялись, соответственно обнулялось все. В переменные текущих значений записывались показания энкодеров, которые после отключения тоже обнулялись. Свходными параметрами проще-переписывать их из Modbus в RETAIN по нажатию кнопки на ИП320. Правда придется разбираться с битовыми пересылками-не понял в какой регистр эти биты пишутся. С текущими значениями сложнее-энкодеры не предполагают предустановку и восстановить их показания не удастся. А на панели,вероятно, проскакивали остатки RETAIN переменных, поскольку время ответа у мня заложено 150 мс и регистры input-output чередуются. В общем все было так как вы и сказали. Большое спасибо за помощь.

Nekit
17.11.2008, 20:06
Почему RETAIN переменные обнуляются по Reset-у?

Филоненко Владислав
18.11.2008, 09:48
Они не обнуляются, а в них записывается последнее значение ретайн-области. Если у Вас новый проект и Вы ни разу не выключали питание (а только пользовались кнопкой Reset), то в области Retain нули.

Если же речь о программном Reset из среды разработки - аналогично, считывается последнее сохранённое в энергонезависимой памяти значение.

Наберите PERSISTENT в коде и вызовите справку - там всё подробно написано про поведение переменных при разл. событиях.

Виктор_Л
19.11.2008, 17:28
Спасибо, Владислав Филоненко. С обычными RETAIN переменными разобрался-все работает. А содержимое энкодера можно каким либо оразом сделать RETAIN, или придется сохранять промежуточную переменную и затем переписывать в энкодер?

Филоненко Владислав
19.11.2008, 22:15
Нельзя, только сохранять

Виктор_Л
20.11.2008, 05:28
Понятно. Похоже, что энкодер организован на базе аппаратного счетчика-таймера микроконтроллера.Спасибо.

salutt
14.12.2009, 16:01
подскажите пожалуйста , как сохранить показания энкодера после выключения плк.

Nik
14.12.2009, 16:24
смотри выше.

Николаев Андрей
15.12.2009, 10:08
Заводите дополнительную переменную Retain и в программе значение с энкодера ей присваиваете.