PDA

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



Максим_В
03.05.2011, 06:35
Подскажите, может кто сталкивался с такой проблемой: ПЛК150 не сохраняет в памяти переменные типа RETAIN ? пробовал объявлять их в глобальных, пробовал менять прошивку, не помогает.

capzap
03.05.2011, 07:32
http://www.owen.ru/forum/showpost.php?p=60334&postcount=5 здесь читали?

Максим_В
03.05.2011, 08:07
Прочитал. Впринципе все так и делаю. Просто создаю переменную типа RETAIN , меняю её значение, записываю, выключаю питание, жду 7 минут, включаю питание, переменная равна 0.

Дмитрий Артюховский
03.05.2011, 14:20
главное, не забудьте дать контроллеру проработать пару часов перед выключением чтобы зарядить аккумулятор )))) иначе электричества для фокуса не будет
и установите время до остановки по питанию поменьше... секунд 10

Николаев Андрей
03.05.2011, 14:22
Как давно покупался контроллер?
Попробуйте зарядить аккумулятор (подержать контроллер включенным пару часов).
Если не поможет - сможете после зарядки замерять напряжение, выдаваемое аккумулятором (ПОСЛЕ ЗАРЯДКИ)

Максим_В
03.05.2011, 14:43
зарядить аккумулятор попробую, сейчас напряжение 4,3 В. Вопрос: где устанавливается время для остановки попитанию?

Максим_В
03.05.2011, 14:44
Контроллер покупался менее года назад.

Николаев Андрей
03.05.2011, 22:16
4,3 более чем достаточный заряд. Аккумулятор в норме.
Надо смотреть программу.

Леонид
03.05.2011, 23:09
Был у меня давно плк 154 с такой же проблемой, хоть убей а retein не сохраняются, при нормальном аккумуляторе.
Проблема так и не решилась!
С тех пор мучает вопрос, можно ли както программно анализировать состояние аккумулятора, чтоб:
1.Заранее выдать предупреждающее сообщение.
2.Сохранить на флэш память плк важные данные.

Александр Приходько
04.05.2011, 01:50
Энергонезависимые переменные сохраняются в файл. Если есть желание, вы можете сами реализовать работу с файлами. Как это сделать:
1) Добавляем модуль статистика, с помощью него контролируем питание ПЛК
2) если питание выкл. , то делаем запись в файл
3) Если питание вкл. , то восстанавливаем данные из файла
4) Запускаем основную программу


Что касается не сохранения ретейнов, присылайте программу. Может затык программный.

Максим_В
04.05.2011, 06:12
Заряд на аккумуляторе за ночь не изменился (4.19В). В программе ничего нет только ";" :-)
Объявляю одну единственную переменнаю типа RETAIN, меняю её значение Выключаю контроллер,включаю и она сбрасывается в 0. Видимо вариант один : менять по гарантии.

Николаев Андрей
04.05.2011, 12:50
А как Вы объявили переменную? прям копипаст сделайте из программы.

Адрей
04.05.2011, 13:57
Заряд на аккумуляторе за ночь не изменился (4.19В). В программе ничего нет только ";" :-)
Объявляю одну единственную переменнаю типа RETAIN, меняю её значение Выключаю контроллер,включаю и она сбрасывается в 0. Видимо вариант один : менять по гарантии.

Скиньте проект что пробовали посмотрим.

Максим_В
05.05.2011, 10:41
вот так я объявляю переменную

PROGRAM PLC_PRG
VAR RETAIN
k:INT
END_VAR

а вот весь мой проект

;

больше ничего в программе нет, после запуска присваиваю новое значение отличное от нуля и нажимаю "WRITE Values" , дальше выключаю, включаю контроллер и переменная сбрасывается в 0

Ещё одним подтерждением не сохранения переменных RETAIN является то , что при работе с панелью оператора СП270Т переменным я присваивал значения байтов получаемых с панели и эти переменные тоже сбрасывались хотя тот же самый принцип без проблем работал на других конроллерах.

Леонид
05.05.2011, 13:36
Ох!!!
Как я Вас понимаю точно такие синдромы наблюдал и я!!!:(

Николаев Андрей
05.05.2011, 14:42
вот так я объявляю переменную

PROGRAM PLC_PRG
VAR RETAIN
k:INT
END_VAR

а вот весь мой проект

;

больше ничего в программе нет, после запуска присваиваю новое значение отличное от нуля и нажимаю "WRITE Values" , дальше выключаю, включаю контроллер и переменная сбрасывается в 0

Ещё одним подтерждением не сохранения переменных RETAIN является то , что при работе с панелью оператора СП270Т переменным я присваивал значения байтов получаемых с панели и эти переменные тоже сбрасывались хотя тот же самый принцип без проблем работал на других конроллерах.

Все вроде правильно, не считая того, что после объявления переменной ; не хватает, не копипаст... :)
Попробуйте мой проект. Ничего не изменилось, но все же. (надо только на Ваш тип контроллера переделать).
Работа с панелью - отдельная тема. Где то обсуждалось, что надо переменные для работы с панелью сохранять в Retain при выключении питания, а при включении - из Retain считывать. Делаются обе операции по триггеру от параметра power в подмодуле statistic


Ох!!!
Как я Вас понимаю точно такие синдромы наблюдал и я!!!:(
И как Вы решили вопрос?

Александр Приходько
06.05.2011, 09:33
Пример с панелью можно посмотреть тут.
http://www.owen.ru/forum/showpost.php?p=22012&postcount=41

Александр Приходько
06.05.2011, 09:36
Максим_В, вышлите мне на почту ваш пример. Проверим на нашем ПЛК.
Можете связаться со мной по телефону (495) 64-111-56 доб 1121

Леонид
06.05.2011, 14:39
Никак не решил!
Мне тогда нужен был ПЛК 100, а его небыло, ПЛК 154 я брал для экспериментов, затем вернул.:(
Когда получил ПЛК 100 проверил и данной проблемы не обнаружил!:o
Вообще складывается впечатление что ПЛК 100 самый стабильный контроллер!:cool:

Николаев Андрей
06.05.2011, 17:49
Никак не решил!
Мне тогда нужен был ПЛК 100, а его небыло, ПЛК 154 я брал для экспериментов, затем вернул.:(
Когда получил ПЛК 100 проверил и данной проблемы не обнаружил!:o
Вообще складывается впечатление что ПЛК 100 самый стабильный контроллер!:cool:

Все бы было хорошо, да вот только процессорная плата, на которой и ЦП и ОЗУ и FLASH у ПЛК100 и ПЛК150 абсолютно одна и та же.

nalnik
19.09.2011, 11:23
Два ПЛ150 2009 года. Прошивка 2.10.5, проект одинаковый.
"Первый" запоминает RETAIN "второй" не запоминает.
Меняю аккумуляторы местами--- "1"-НЕ помнит, "2"-Помнит.
Смотрел тестером питание на аккумуляторах примерно одинаковое, при отключении питания аккум проседает на секунду до 3,1-3,2v потом становится 3,6-3,7v.

Что делать. У меня ПЛК от 2008 по 2011 год.
Из за этого начинаются проблемы.
Что снимать штук 30 ПЛК и отправлять в серв центр?????????????

Николаев Андрей
20.09.2011, 00:37
3,7 - рабочее напряжение.
Надо смотреть дополнительные данные.

nalnik
30.09.2011, 10:11
Подскажите как можно обойти такую проблему ( без замены аккумуляторов больше 50шт плк150).
Прошу ответить.

Николаев Андрей
01.10.2011, 14:52
Для того, чтоб сказать что делать - слишком мало данных, как я уже и писал.
Присылайте проект и все данные по контроллерами на plc@owen.ru

nalnik
01.10.2011, 17:04
Какие еще данные, по 68 штукам ПЛК150?

У меня ПЛК от 2008 по 2011 год.

Два ПЛ150 2009 года. Прошивка 2.10.5, проект одинаковый.
"Первый" запоминает RETAIN "второй" не запоминает.
Меняю аккумуляторы местами--- "1"-НЕ помнит, "2"-Помнит.

Глючат больше 30 ПЛК.

Николаев Андрей
01.10.2011, 20:26
Выходов из ситуации несколько:
Либо действительно доставлять ПЛК в СЦ, либо заказать в СЦ нужное количество аккумуляторов.
Были слова про то, что часы не слетают на контроллере, который не запоминает Retain... Что с часами?

Safron
04.10.2011, 21:08
У меня была проблема с ретайнами с ПЛК 63. Сохранялись только, если объявлял их в PLC_PRG, в других блоках - дохлый номер. Поэтому в своих проектах я пользуюсь теперь другим методом (про ретайны забудь). Используя промежуточный буфер, то записываю из него переменные в файловую систему, то идёт их полное считывание и запись в буфер при включении питания. Попробуй приспособить к своему проекту. Будут вопросы пиши на личку.
Файл не могу прикрепить - интернет глючит, еле форум открывается...

Scream
28.11.2012, 14:25
Проблема не решилась и по сей день как я смотрю. У меня аналогичная проблема, не сохраняются не retain, не retain persistent (плк 150). Необходимо сохранять моточасы на оборудовании! Что же делать?
Всё выше перечитанное делал. Объявленных в ретаин пер-нт около 15, их считывание происходит по переднему фронту Power, так вот в неккоторые считываются значения вовсе не то что было записанно. Тоесть я записал например 3 в ретаин пер-нт, перезагружаю (или выключаю и жду 20 мин) включаю, по power считывается уже не 3, а 20!!!
Вместо 3 можно записать что угодно, а возвращает 20 (не во всех). Если я добавлю хотяб еще одну ретаин пер-нт, то всё меняется и возращать может уже кто угодно (из тех кто объявлен в ретаин пер-нт) и что угодно, в основном 0!

petera
28.11.2012, 14:55
Проблема не решилась и по сей день как я смотрю. У меня аналогичная проблема, не сохраняются не retain, не retain persistent (плк 150). Необходимо сохранять моточасы на оборудовании! Что же делать?
Всё выше перечитанное делал. Объявленных в ретаин пер-нт около 15, их считывание происходит по переднему фронту Power, так вот в неккоторые считываются значения вовсе не то что было записанно. Тоесть я записал например 3 в ретаин пер-нт, перезагружаю (или выключаю и жду 20 мин) включаю, по power считывается уже не 3, а 20!!!
Вместо 3 можно записать что угодно, а возвращает 20 (не во всех). Если я добавлю хотяб еще одну ретаин пер-нт, то всё меняется и возращать может уже кто угодно (из тех кто объявлен в ретаин пер-нт) и что угодно, в основном 0!
Не надо считывать и записывать retain принудительно с использованием Power. Просто используйте сами retain переменные в программе не задумываясь о состоянии Power (тем более куда Вы записываете и от куда считываете не понятно).
если аккумулятор исправный retain сохраняются и восстанавливаются автоматически в (из) специальный файл
А Вы своими действиями по флагу Power может мешаете этому процессу.

Scream
28.11.2012, 15:24
Сделал и так, после включения\перезагрузки всёравно 0.:(

Scream
28.11.2012, 15:27
Вы не знаете может иных способов сохранения значений и считывания их по необходимости?

petera
28.11.2012, 16:46
Вы не знаете может иных способов сохранения значений и считывания их по необходимости?
Держите простой пример
Счетчик подсчитывает секунды и накопленное значение сохраняется в Retain
Замените целевую платформу на свою.

petera
28.11.2012, 17:02
То же самое но на ST

capzap
28.11.2012, 23:14
Сделал и так, после включения\перезагрузки всё равно 0.:(

Уберите в проекте любое упоминание о RETAIN переменных, уберите функции считывания/записи от переменной power или как там Вы её называете. Добавте в конфигурацию слейв на какой нибудь незадействованный интерфейс, создайте в нем соответствующие каналы, именуйте их, так как должны выглядеть Ваши сохраняемые переменные и проведите процедуру выключения до полной остановки и последующего включения.
Не забудьте отписаться сохранятся ли после перезапуска значения тех переменных

petera
29.11.2012, 08:03
Уберите в проекте любое упоминание о RETAIN переменных, уберите функции считывания/записи от переменной power или как там Вы её называете. Добавте в конфигурацию слейв на какой нибудь незадействованный интерфейс, создайте в нем соответствующие каналы, именуйте их, так как должны выглядеть Ваши сохраняемые переменные и проведите процедуру выключения до полной остановки и последующего включения.
Не забудьте отписаться сохранятся ли после перезапуска значения тех переменных
+100 500%:)

Scream
29.11.2012, 11:32
Да, опробую и отпишусь сегодня. Скажите, а сброс в Codesys->онлайн->сброс и сброс со скрытой кнопки на панели плк эквивалентны? При нажатии того или этого сброса RETAIN сохраняются? или только через 10 мин после отключения питания происходит запись RETAIN?

Scream
29.11.2012, 11:51
Вот собственно как я делаю, может чтото не так в программе?

petera
29.11.2012, 13:36
Да, опробую и отпишусь сегодня. Скажите, а сброс в Codesys->онлайн->сброс и сброс со скрытой кнопки на панели плк эквивалентны? При нажатии того или этого сброса RETAIN сохраняются? или только через 10 мин после отключения питания происходит запись RETAIN?
запись RETAIN происходит не через 10 мин после отключения питания, а после того, как на ПЛК перестанет моргать лампочка "работа"

'Онлайн' 'Сброс'
Заново инициализирует все переменные, за исключением VAR RETAIN. Если вы определили начальные значения переменных, они будут присвоены (включая VAR PERSISTENT). Прочие переменные приобретут стандартные значения по умолчанию (например, 0 для целых типов). Перед тем как переменные будут инициализированы, вы должны будете подтвердить это. Данный сброс аналогичен выключению и включению питания ПЛК при работающей программе.
Т.е Codesys->онлайн->сброс не трогает RETAIN переменные какое у них было значение, такое и останется, значение моточасов в Вашем случае останутся, если конечно Вы с ними ни чего не делаете в программе, а она начнет выполняться с нуля, как после включения питания.

'Онлйн' 'Сброс (холодный)'
Выполняет те же действия, что и команда "Онлайн" 'Сброс', , и дополнительно выполняет инициализацию энергонезависимой области памяти RETAIN.
Т.е Codesys->онлайн->сброс(холодный) эквивалентен аппартной кнопке сброс контроллера, при этом значения RETAIN (значение моточасов в Вашем случае) пропадут
Вы должны понять, что любой способ сброса не вызывает принудительной записи RETAIN куда-нибудь или загрузки их откуда-нибудь.
В контроллере есть файл retain.bin.
1.При включении питания контроллера данные из файла retain.bin присваиваются retain-переменным.
2.Программа выполняется и в ней изменяются текущие значения retain-переменных. Содержимое файла retain.bin остается пока не изменным. И так продолжается до момента выключения питания.
3. В момент выключения питания, текущие значения retain-переменных сохраняются в файле retain.bin, автоматически без Вашего участия
Пункт 3 должен так работать! Так задумано в кодесис.
Но компания ОВЕН придумала дебильную возможность работать контроллеру после отключения питания на аккумуляторе.
Управлять обесточенными механизмами какого-либо оборудования полный бред, а иногда и до беды не далеко, если например произошло кратковременное пропадание питания.
Например, ПЛК управлял клапаном подачи газа в котел и на несколько секунд пропало питание в котельной.
Клапан без напряжения закроется автоматически.
Контроллер бодро продолжает работать на батарейке и удерживает свой выход управления клапаном во включенном состоянии.
Клапан закрылся без участия контроллера, пламя в котле потухло.
Через несколько секунд в котельной появилось питание клапан открылся и запустил несколько кубометров газа в раскаленную топку котла.
Все. Взрыв. Нет больше котла, а может и котельной тоже больше нет:D
Но это лирическое отступление.
Контроллер ОВЕН, вместо выполнения действий п.3 сразу после отключения напряжения питания, упорно продолжает работать на аккумуляторе средне потолочное время в зависимости от здоровья аккумулятора, а затем когда заряд в аккумуляторе практически исчерпан начинает записывать в файл retain.bin текущие значения retain-переменных.
Если аккумулятор умер, то и retain-переменные ни где и ни когда не сохранятся.
В этом случае. При включении питания контроллера retain-переменным присваиваются данные из файла retain.bin. А это файл мог быть создан при удачном отключении питания, день или неделю или месяц назад.:D

Scream
29.11.2012, 14:08
Т.е Codesys->онлайн->сброс(холодный) эквивалентен аппартной кнопке сброс контроллера, при этом значения RETAIN (значение моточасов в Вашем случае) пропадут


Вот, что собственно происходило! Попробывал выключить питание на 20 мин и при включении все RETAIN вернулись (я до этого пользовался как раз таки сбросом, лень ждать было).
Теперь всё работает как надо.
Большое спасибо за развёрнутый ответ, очень помогли.

petera
29.11.2012, 14:48
Но я бы не очень радовался по поводу "Теперь всё работает как надо."
1. Несколько выключений подряд с интервалом 20 мин приводят к полной разрядке аккумулятора и Вы вернетесь в начало проблемы т.к на полный заряд разряженного аккумулятора надо 3 часа.
2. Аккумулятор имеет ограниченное количество циклов заряд-разряд и имеет свойство умирать через несколько лет эксплуатации.
Так, что моточасы Вы сможете считать несколько лет подряд, а затем замена аккумулятора и подсчет моточасов с 0 :D
Ищите альтернативу, например сохранять время работы оборудования в файл. Но не часто, а то портрете во флешке контроллера дырку:) Ее ресурс циклов записи тоже ограничен.
Нет ничего лучше старого электромеханического счетчика хранит информацию вечно (шутка):)

Scream
29.11.2012, 15:47
1. Несколько выключений подряд с интервалом 20 мин приводят к полной разрядке аккумулятора и Вы вернетесь в начало проблемы т.к на полный заряд разряженного аккумулятора надо 3 часа.

Это конечно я учел.

2. Аккумулятор имеет ограниченное количество циклов заряд-разряд и имеет свойство умирать через несколько лет эксплуатации.
Так, что моточасы Вы сможете считать несколько лет подряд, а затем замена аккумулятора и подсчет моточасов с 0
Моточасы сбрасываются раз в один, два месяца. Так что норм
Еще раз спасибо