Переменные, объявленные как VAR RETAIN после выключения питания не
восстанавливаются. Что необходимо сделать?
Вид для печати
Переменные, объявленные как VAR RETAIN после выключения питания не
восстанавливаются. Что необходимо сделать?
Забыл добавить:
контроллер-ПЛК-24.Р-М;
target_2.02_PLC100;
прошивка-PLC_100_2.03.0
Видимо, Вы их инициализируете при старте. А этого делать не надо.
ПЛК и CodeSys я впервые увидел 3 недели назад, поэтому не очень понял что значит инициализировать при старте. Все переменные я объявил в разделе объявлений. Вообще-то у меня ПЛК-100 + ИП320,
ПЛК-мастер. Небходимо запомнить 3 заданных с ИП320 параметра и 2 текущих значения. Спасибо за совет.
Выложите проект, помогу.
Прект прилагаю. Не шедевр но работает.
Вы объявили переменные как ретайн и в программе в первых же строках их значения перетираете другими (не Retain).
Большое спасибо, исправлю.
Объявил VAR RETAIN отдельные переменные, не используемые в программе, в конце программы присвоил им значения входных и выходных регистров modbus, ПЛК выключил-включил, эффекта нет. Даже не сохраняется обещанная работоспособность в течение 10 минут. Может быть оформить программу в виде POU?
Переменные сохраняются в течение 0.5 сек., затем пропадают. Связано, скорее всего, с тем , что и регистры ИП320 и регистры подмодулей энкодеров при выключении обнуляются. Пока не знаю насколько это удастся объехать.
Для начала, создайте проект с 1 переменной Retain,
в самой программе только ";",
залейте его в контроллер, не забудьте сделать Create boot Project,
запустите,
назначьте переменной значение (вручную),
разлогиньтесь, выключите питание.
подождите 10 мин, чтобы конроллер выкл. рез. питание.
Включите, залогиньтесь, среда разработки не должна требовать залить новый проект (иначе что-то забыли сделать).
И посмотрите на значение переменной.
Свою ошибку я понял. При старте в входные переменные RETAIN записывались значения регистров Modbus, а после выключения питания регистры ИП320 обнулялись, соответственно обнулялось все. В переменные текущих значений записывались показания энкодеров, которые после отключения тоже обнулялись. Свходными параметрами проще-переписывать их из Modbus в RETAIN по нажатию кнопки на ИП320. Правда придется разбираться с битовыми пересылками-не понял в какой регистр эти биты пишутся. С текущими значениями сложнее-энкодеры не предполагают предустановку и восстановить их показания не удастся. А на панели,вероятно, проскакивали остатки RETAIN переменных, поскольку время ответа у мня заложено 150 мс и регистры input-output чередуются. В общем все было так как вы и сказали. Большое спасибо за помощь.
Почему RETAIN переменные обнуляются по Reset-у?
Они не обнуляются, а в них записывается последнее значение ретайн-области. Если у Вас новый проект и Вы ни разу не выключали питание (а только пользовались кнопкой Reset), то в области Retain нули.
Если же речь о программном Reset из среды разработки - аналогично, считывается последнее сохранённое в энергонезависимой памяти значение.
Наберите PERSISTENT в коде и вызовите справку - там всё подробно написано про поведение переменных при разл. событиях.
Спасибо, Владислав Филоненко. С обычными RETAIN переменными разобрался-все работает. А содержимое энкодера можно каким либо оразом сделать RETAIN, или придется сохранять промежуточную переменную и затем переписывать в энкодер?
Нельзя, только сохранять
Понятно. Похоже, что энкодер организован на базе аппаратного счетчика-таймера микроконтроллера.Спасибо.
подскажите пожалуйста , как сохранить показания энкодера после выключения плк.
смотри выше.
Заводите дополнительную переменную Retain и в программе значение с энкодера ей присваиваете.