PDA

Просмотр полной версии : Rеtain данные не сохраняются при отключении питания



anissimoff
12.03.2010, 15:29
при отключении питания (даже при кратковременном до 1 мин.) все данные включая Retain обнуляются. но внутренние часы и дата сохраняют свои значения. так же свое состояние сохраняют Rs-тригера. подскажите, где копать?

Николаев Андрей
12.03.2010, 18:38
что произойдет, если отключить питание более, чем на 1 минуту - минут на 10?

anissimoff
12.03.2010, 19:12
одинаково ведет себя. правда при обычном сбросе онлайн параметры сохраняются. такое впечатление, что происходит "холодный" сброс.

Николаев Андрей
12.03.2010, 19:23
что за контроллер?

anissimoff
14.03.2010, 06:10
plk100-220-r-m

Николаев Андрей
14.03.2010, 13:49
выложите программку и лог гипертерминала пожалуйста, или на ящик из подписи пришлите

anissimoff
16.03.2010, 04:33
все находится в архиве. есть еще одна любопытная деталь. обратите внимание на Outputs в программе. внезапно функция Pack перестала работать. но скопированная в Page_ip320 превосходно работает. так и не разгадал тайны загадочного плк.

Николаев Андрей
16.03.2010, 10:46
Если можно - лог терминала в TXT - у меня Hyperterm Ваш файл не открывает...
В каком месте программы перестал работать и где начал работать блок Pack? Блок то 100% рабочий, и никак не зависит от ПЛК, а от программиста :)
А где Вы переменные как Retain объявляете?
time_min AT %QW8.1.0.0: WORD; - адрес в конфигурации ПЛК вообще другое имя имеет...
time_sec AT %QW8.1.9.0: WORD;
И как Вы тут планируете проверить Retain, если к обмену привязалисть???
Даже если он Retain загрузил, то до выполнения программы присвоил им значения из области памяти - а там нули априори при загрузке...
Создайте отдельные переменные, их сохраняйте, и в начале\конце\когда надо присваивайте эти значения переменным ModBus.

anissimoff
18.03.2010, 07:40
Спасибо за Вашу оперативность с ответами. Прилагаю лог ПЛК. RETAIN переменные описаны через автообъявления (Вы можете их увидеть в объявлениях переменных в программе). если я неправильно их объявляю, поясните, пожалуйста, где они должны располагаться. Что касается адресов в конфигураторе ПЛК и в программе (имею ввиду time_sec, time_min), то имена в конфигураторе ПЛК и в программе должны быть одинаковые? Писалось в мануле, что в конфигураторе можно создать имена (коментарий) к адресам по желанию. Если у Вас есть возможность, измените программу как считаете нужным (с пояснением ием на будущее) чтоб сохранялись RETAIN. Меня интересует сохранение значений счетчиков time_sec и time_min при длительном отключении питания. Заранее спасибо за помощь.

Николаев Андрей
18.03.2010, 10:16
1. Лог нормальный.
2. Определитесь в принципе со списком переменных.
3. Имена переменным можно задавать прям в конфигураторе, но тогда нельзя задавать их еще раз для другой переменной.

Заведите нужное количество Retain переменных
var retain
a1 : "тип переменной";
b1 : "тип переменной";
end_var

А в программе пишете
if "условие" then
a1:= "переменная, объявленная в конфигурации ПЛК";
b1:= "переменная, объявленная в конфигурации ПЛК";
end_if

Николаев Андрей
18.03.2010, 10:17
Вообще начните с простого.
Без переменных конфигурации, без всего - на пустом проекте просто создайте 2 переменные Retain, и добейтесь понимания работы с ними.

anissimoff
18.03.2010, 16:19
Переменные RETAIN (time_sec, time_min) объявлены как Вы и написали (см. программу ), но это внутреннее состояние счетчиков. как мне их еще объявить в программе? я пробовал даже прописать просто любое значение в области рабочей памяти (М) и объявленную как RETAIN, ничем неуправляемой. Те же результаты. Можете дать пример программы, как объявить данные счетчика в RETAIN? Я загружу в свой ПЛК и посмотрю. Заранее спасибо.

Филоненко Владислав
18.03.2010, 17:35
объявляете экземпляр счетчика как ретайн и все.

anissimoff
19.03.2010, 12:09
Прилагаю простой пример из одной команды с объявлениями в retain. Посмотрите, плиз, и скажите что я делаю не так. Ну не хотят сохраняться данные после отключения питания!

anissimoff
19.03.2010, 12:13
или подправьте в примере необходимое (переменные, конфигурация плк и т.д.) и разъясните где, плиз!

Филоненко Владислав
19.03.2010, 12:56
Прилагаю простой пример из одной команды с объявлениями в retain. Посмотрите, плиз, и скажите что я делаю не так. Ну не хотят сохраняться данные после отключения питания!

1. В Вашей программе, при первом же цикле с замкнутым входом данные сотрутся.
2. Boot Project делали?
3. Питание выключали?

anissimoff
19.03.2010, 14:09
1.boot проект сделал.
2.вход не замкнут (замыкаю только для передачи данных в память ретайн).
3.при выключении питания память все равно обнуляется.

anissimoff
19.03.2010, 14:57
люди, может кто даст (рабочую и проверенную на плк100) простейшую прогу для проверки ретайн моего плк? например, призамыкании входа записать в ретайн значение, потом после выключения питания проверить его значение.

Филоненко Владислав
19.03.2010, 15:27
простейшая программа - создаете переменную, задаете ей значение и проверяете, что оно сохранилось.

anissimoff
19.03.2010, 16:19
так я и сделал! после выключения питания опять нули.
вот сделал простейший пример: создал переменную ретайн. в онлайне прописал ей значение отличное от нуля. выключил, включил питание. смотрю значение переменной. и опять нули! пример см.ниже. что здесь не так?
VAR
END_VAR
VAR RETAIN PERSISTENT
END_VAR
VAR RETAIN
data: WORD; (*primer*)
END_VAR

anissimoff
19.03.2010, 16:25
я уже склоняюсь к мнению что плк косячный.... но ведь состояние выходов он помнит при восстановлении питания (в программе с тригерным управлением выходов)!

Николаев Андрей
20.03.2010, 23:52
между выключил и включил попробуйте время увеличить

Филоненко Владислав
21.03.2010, 10:51
до 10 минут :) как в рэ

anissimoff
24.03.2010, 11:37
господа программисты! благодарю за искреннее желание помочь! проблемма крылась в самом плк. на другом аналогичном плк все прекрасно запоминается!!! похоже, у памяти склероз ... тема закрыта!