Просмотр полной версии : С0414: Не хвататет перманентной памяти
Paha1977
10.06.2026, 11:28
Добрый день
Перестало хватать перманентной памяти на ПЛК210-12. До этого все было нормально, все компилировалось и заливалось в контроллер. В проект добавились только несколько констант. И теперь ошибка С0414.
Хотя объем retain намного меньше 64 кбайт. Кнопки "очисить" и "очистить все" не помогают.
Евгений Кислов
10.06.2026, 11:35
Добрый день
Перестало хватать перманентной памяти на ПЛК210-12. До этого все было нормально, все компилировалось и заливалось в контроллер. В проект добавились только несколько констант. И теперь ошибка С0414.
Хотя объем retain намного меньше 64 кбайт. Кнопки "очисить" и "очистить все" не помогают.
Добрый день.
Выложите, пожалуйста, ссылку на проект, в котором проявляется эта проблема.
Paha1977
10.06.2026, 11:44
https://disk.360.yandex.ru/d/1HS4m4KJckReTw
Евгений Кислов
10.06.2026, 12:00
В реализации CODESYS - квалификатор RETAIN/PERSISTENT влияет на весь объект. Это справедливо и для вложенных объектов.
Конкретный пример: SV_SETTINGS помечен как RETAIN PERSISTENT ---> SOLENOID_VALVE тоже целиком размещается в RETAIN PERSISTENT ---> astGVS тоже целиком размещается в RETAIN PERSISTENT.
За счет этого эффекта объекты вашего проекта действительно довольно быстро заполнили всю энергонезависимую память и теперь не влезают в нее.
Paha1977
10.06.2026, 12:43
Почему тогда эти объекты не добавляются автоматически при использовании "Добавить все пути экземпляров" в Persistent Vars?
Если объявить SV_SETTINGS не как STRUCT RETAIN PERSISTENT, а как STRUCT PERSISTENT, то будет ли вся структура SOLENOID_VALVE и экземпляры astGVS попадать в MRAM?
Евгений Кислов
10.06.2026, 12:56
Почему тогда эти объекты не добавляются автоматически при использовании "Добавить все пути экземплятов" в Persistent Vars?
Потому что подразумевается, что в контексте Persistent Vars они вас не интересуют.
Вообще, в типовом сценарии использования Persistent Vars рассматривается как отдельный глобальный список всех PERSISTENT-переменных проекта, в котором они вручную объявляются пользователем.
То, что можно указать квалификатор PERSISTENT где-то еще и потом использовать команду "Добавить все пути экземпляров" - это довольно сомнительное, на мой взгляд, поведение, уходящее корнями в какие-то древние версии среды.
Оно только вносит больше путаницы и вдвое увеличивает количество используемой энергонезависимой памяти.
Даже официальная документация рекомендует не использовать эту команду:
89489
Paha1977
10.06.2026, 13:02
То есть выход только один, разделять структуры на обычные и retain и обявлять экземпляры retain отдельно?
Paha1977
10.06.2026, 13:08
Потому что подразумевается, что в контексте Persistent Vars они вас не интересуют.
Вообще, в типовом сценарии использования Persistent Vars рассматривается как отдельный глобальный список всех PERSISTENT-переменных проекта, в котором они вручную объявляются пользователем.
То, что можно указать квалификатор PERSISTENT где-то еще и потом использовать команду "Добавить все пути экземпляров" - это довольно сомнительное, на мой взгляд, поведение, уходящее корнями в какие-то древние версии среды.
Оно только вносит больше путаницы и вдвое увеличивает количество используемой энергонезависимой памяти.
Даже официальная документация рекомендует не использовать эту команду:
89489
Но оно работает по крайне мере. Теперь все компилируется без ошибок и предупреждениий.
Евгений Кислов
10.06.2026, 13:25
То есть выход только один, разделять структуры на обычные и retain и обявлять экземпляры retain отдельно?
Да, на мой взгляд - это самый разумный подход.
Объекты, которые требуется использовать как PERSISTENT - объявлять в списке PersistentVars.
Объекты, которые требуется использоваться как RETAIN - объявлять в области VAR_RETAIN программ или GVL.
Емельянов Кирилл
12.06.2026, 03:52
То есть выход только один, разделять структуры на обычные и retain и обявлять экземпляры retain отдельно?
Лично я объявляю структуру. Если в этой структуре нужен персистэнт, то в персистэнт листе объявляется переменная нужного типа, а в структуре объявляется ссылка на этот персистэнт. Красота
Powered by vBulletin® Version 4.2.3 Copyright © 2026 vBulletin Solutions, Inc. All rights reserved. Перевод: zCarot