PDA

Просмотр полной версии : Retain в СПК110



жекон
08.12.2014, 19:57
Сегодня впервые за время работы с ПЛК столкнулся с нехваткой памяти, есть проект в котором около 50 Retain, добавляю массив данных при загрузке появлякться ошибка нехватка энергонезависимой памяти,в связи с этим вопрос а куда она делась, что вообще пишется в энергонезависимую память, при работе с ПЛК в область Retain я запихивал намного больше и ничего подобного не происходило

Александр Приходько
09.12.2014, 02:07
Это недокументированная фича CODESYS.
Если вы объявили RETAIN внутри Program или Function Block, то это компонент полностью со всеми своими переменными пишется в RETAIN. И памяти расходуется сильно больше.
Чтобы этого избежать Retain лучше всего запихнуть в отдельный GVL(Global Variables List).

жекон
09.12.2014, 04:08
Спасибо сейчас пойду пробовать, вечером отпишусь

жекон
09.12.2014, 19:35
Ерунда не помогает ,выкинул все retain из проекта перевел в global при добавлении любой rfetain переменной вылетает нехватка памяти

Александр Приходько
09.12.2014, 22:31
Ерунда не помогает ,выкинул все retain из проекта перевел в global при добавлении любой rfetain переменной вылетает нехватка памяти
Projectarchive в студию.

жекон
10.12.2014, 15:03
Сегодня опять морочилься вот все что смог запихать последняя переменная уже лишняя 15635
, и архив проекта 15636

capzap
10.12.2014, 15:06
Сегодня опять морочилься вот все что смог запихать последняя переменная уже лишняя 15635
, и архив проекта 15636

так если это один и тот же проект, можжет просто из ретайнов не уддаляются некогда созданные переменные, которые и забивают Вам всю память, пустой проект залейте с ретайном, а потом обратно или так поудаляйте файл

жекон
10.12.2014, 15:11
Да я даже загрузочное не создавал

capzap
10.12.2014, 16:12
а как собирались проверять работу ретайнов? тем более значит осталось от старого проекта, надо чистить однозначно

жекон
10.12.2014, 16:21
Нет там никакого старого проекта, я прошивку менял, ретайны проверяются -сброс-старт проекта

жекон
11.12.2014, 17:50
Что- то все куда-то пропали....

stas1812
12.12.2014, 15:24
Заведите отдельно в отдельном списке глобальных переменных (их можно создавать несколько, а один пусть будет VAR_GLOBAL RETAIN), например

VAR_GLOBAL RETAIN
time_r_sec: DWORD;
st_prog: ARRAY[0..30] OF Q03;
END_VAR

где Q03

TYPE Q03 :
STRUCT
tm: WORD;
dan: ARRAY[0..10] OF WORD;
END_STRUCT
END_TYPE

это из работающего примера.
Если определять RETAIN не в отдельном списке, то будет ошибка
:)
CodeSys 3.5 SP3 Patch 5 и СПК 110
с другими СПК не пробовал.

жекон
12.12.2014, 16:39
По моему в примере показано что все ретаин переменные заведены через глобал, не настолько я глуп и нем что-бы не воспользоваться подсказками более умных братьев, это раз, во вторых проект в половинку выложенного отработал год с небольшим без проблем поэтому, я не высказываю своё како-ето фу, да и не хочу этогог делать потому как слишком сильно уважаю людей которые могут что-то сделать у нас в России и не словах , а делом

жекон
12.12.2014, 16:43
Заведите отдельно в отдельном списке глобальных переменных (их можно создавать несколько, а один пусть будет VAR_GLOBAL RETAIN), например

VAR_GLOBAL RETAIN
time_r_sec: DWORD;
st_prog: ARRAY[0..30] OF Q03;
END_VAR

где Q03

TYPE Q03 :
STRUCT
tm: WORD;
dan: ARRAY[0..10] OF WORD;
END_STRUCT
END_TYPE

это из работающего примера.
Если определять RETAIN не в отдельном списке, то будет ошибка
:)
CodeSys 3.5 SP3 Patch 5 и СПК 110
с другими СПК не пробовал.
Извините что в горячке напорол ,хотя на меня не похоже, сейчас маленько дома разберусь потом отвечу

жекон
12.12.2014, 17:30
Я как понял можно обмануть судьбу левыми способами, по большому счету можно все это завести через сохранения файл, но это же не вариант при таком потенциале CDS 3

жекон
12.12.2014, 23:00
Еще одна фишка всплыла бывает раз на раз не приходиться загрузилься проект без ошибок правда при последующем подключении опять вылезло "не хватает энергонезависимой памяти" я так понимаю это косяк CDS или я ошибаюсь?

stas1812
13.12.2014, 09:58
На картинке у Вас в начале стоит
VAR_GLOBAL
END_VAR
Попробуйте убрать эти строки

жекон
13.12.2014, 10:15
Сейчас не могу, только в понедельник без контроллера компилируеться нормально

stas1812
14.12.2014, 22:39
Вот еще нашел на форуме. Может поможет
Версия 3.939 - 28 Июля 2014
- Исправлена проблема с зависанием конфигуратора (проявляется на некоторых устройствах)

Версия 3.938 - 28 Июля 2014
- Обновление CODESYS RUNTIME(тот что в самом контроллере) до 3.5.4.40 - устранена проблема Retain памятью, приводящая к сообщению о нехватке памяти
- Поддержка новой Flash памяти
http://www.owen.ru/forum/showthread.php?t=16792&p=131877&viewfull=1#post131877

жекон
16.12.2014, 16:54
Пока этот проект не горит, можно отложить эту темку , а там глядишь новая прошивка выйдет

Эдуард_Н
07.01.2015, 20:01
Надеюсь, что такой бяки как тут: http://www.owen.ru/forum/showthread.php?t=14536&page=12 с СПК не будет. И ретейна всем хватит и останавливаться самопроизвольно не будет.
И ещё, пожелание производителям, исправляйте и улучшайте качество продукции. Люди хотят покупать вашу продукцию, но из-за вот таких бяк, бояться её брать.

c004ER
12.01.2015, 12:46
Тоже бодался с объявлением Retain:
Обновился аж до CDS 3.5 SP5 Patch 4
Target 3.5.4.20
Не помогло.

- решено, необходимо описывать переменные retain не в отдельном файле PersistentVars, а в уже имеющемся GVL либо создать новый.


VAR_GLOBAL
[глобальные переменные]
END_VAR

VAR_GLOBAL RETAIN
[глобальные переменные Retain]
END_VAR

RV9WFJ
12.01.2015, 17:32
У меня тоже старый проект после заливки в новый СПК207 (600 МГц) стал RETAINы терять после перезагрузки. Более того он теряет еще и файлы с текстами (списками) и у меня вместо текста на экране ????? вылезают. В логах СПК пишет не найдены файлы и полный перечень всех текстовых списков. Но самое интересное что на одном СПК207 600МГц проект работает нормально, а на самых свежих, которые к новому году пришли с новой прошивкой, которой даже на форуме нет, пишет память переполнена и не заливается проект. Так что похоже там память разная и по разному работает. Да еще и с прошивкой явно проблемы есть :-( Через пару дней вот предстоит начать разбираться с этой проблемой...

Makswell
13.01.2015, 08:44
Столкнулся с проблемой ratain переменными, имеется проект на финальной стадии под СПК107. после загрузки проекта в СПК было обнаружено что не сохраняются переменные в retain памяти. Объявление переменных изначально было так
VAR_GLOBAL
T_obr:real;
T_otp:real;
END_VAR

VAR_GLOBAL RETAIN
G_SYST:T_SYST;

END_VAR

где T_SYST структура

Так вот при такой иерархии Глобальных переменных retain не сохранялись, пришлось создать отдельную группу глобальных переменных, после чего все заработало. )))

RV9WFJ
14.01.2015, 16:43
В моем случае контроллер в ремонт оказалось :-)

Эдуард_Н
16.01.2015, 08:42
Кто ни будь подскажите за retain в СПК? Параметры которые вводятся с экрана СПК нужно объявлять retain, или они будут являться retain по умолчанию?
Параметры считанные с модулей расширения по Modbus - slave будут являться retain по умолчанию?
Может где-то это всё расписано?

Мурат Ахриев
16.01.2015, 10:04
По умолчанию все переменные хранятся только в оперативной памяти. Для записи переменных в энергонезависимую память Retain, нужно отдельно об этом позаботиться.
Как писали чуть ранее, в области объявления переменных нужно дописать ключевое слово "RETAIN".
Объем памяти retain на порядки меньше оперативной памяти(цифры в руководстве эксплуатации). При использовании стоит это учесть.

stas1812
03.04.2015, 21:29
Кто ни будь подскажите за retain в СПК? Параметры которые вводятся с экрана СПК нужно объявлять retain, или они будут являться retain по умолчанию?
Параметры считанные с модулей расширения по Modbus - slave будут являться retain по умолчанию?
Может где-то это всё расписано?

Только те переменные, которые Вы объявите как retain, будут retain :) Это могут быть параметры, которые Вы вводите с экрана или данные с модулей. Данные с модулей не рекомендуется хранить в retain, т.к. кол-во обращений в память ограничено, где-то в районе 1000000 , точное число нигде не указано, но это обычная флеш память, а так как там не реализованы алгоритмы SSD :), то долбежка одной и той же ячейки быстро выведет память из строя. Во вторых, объем ограничен, всего 4 Кб. Хватит для сохранения первоначальных параметров загрузки и сохранения установок

жекон
04.04.2015, 06:13
1750617507Самое интересное что к примеру в ПЛК100 те-же 4Кб, только кол-во переменных которые можно сохранить в сотке несоизмеримо больше