Показано с 1 по 6 из 6

Тема: СПК107 Persistent - сколько вас?

Комбинированный просмотр

Предыдущее сообщение Предыдущее сообщение   Следующее сообщение Следующее сообщение
  1. #1

    По умолчанию СПК107 Persistent - сколько вас?

    Добрый день!
    Пишу программу, и решил сделать свою авторизацию.
    Логично, что для этого неплохо бы использовать персистент переменные, но вот беда!

    Имеем всего-навсего структуру
    Код:
    TYPE user_struct:
    STRUCT
    	name: WSTRING(20);
    	pass: UDINT;
    END_STRUCT
    END_TYPE
    и ее экземпляр

    Код:
    VAR_GLOBAL PERSISTENT RETAIN	
    	users: ARRAY [0..49] OF user_struct;
    END_VAR
    Так вот не нравится это ей.
    Ошибки:
    с0414 Недостаточно persistent-памяти!
    с0415 Недостаточно persistent-памяти: Переменная 'users' занимает 2800 байт, наибольший непрерывный промежуток 648 байт.

    Неужели 50 строк по 20 символов (41 байт кажется) это неподъемная величина?

    Попытался где попало поискать настройки памяти целевой платформы - не нашел ничего похожего.

    Как быть? Это я что-то не настроил, или и правда это слишком много?

  2. #2
    Супер Модератор Аватар для Евгений Кислов
    Регистрация
    27.01.2015
    Адрес
    Москва
    Сообщений
    13,597

    По умолчанию

    Добрый день.
    У вас точно СПК1хх [М01], с портом Ethernet?
    Если да - то выкладывайте проект.

    У меня проблема не воспроизводится.

    Объем энергонезависимых (Retain/Persistent) переменных наших современных контроллеров - 64 Кб.

    19-02-2022 18-56-29.png

  3. #3
    Супер Модератор Аватар для Евгений Кислов
    Регистрация
    27.01.2015
    Адрес
    Москва
    Сообщений
    13,597

    По умолчанию

    Посмотрел проект, который вы прислали в личку.
    После команды Компиляция - Очистить всё он без проблем загрузился в мой контроллер.
    Предварительно я в ballon_type_struct и user_struct длину строк увеличил до 80 символов.

    19-02-2022 19-27-23.png

  4. #4
    Пользователь
    Регистрация
    28.02.2020
    Адрес
    Балтийск
    Сообщений
    73

    По умолчанию

    Столкнулся с этой ситуацией в своем проекте Spk107 в теплице. Согласно документации codesys при объявлении Persistent внутри POU, весь POU пишется в энергонезависимую память. На первом этапе 'Компиляция - Очистить всё', удаляет дефрагментацию памяти, и это помогает. Но при дальнейшем увеличении кода в POU проект встает по ошибке, так как я объявляю несколько однотипных объектов. Пришлось все Persistent объявить в отдельном файле и удалить такие переменные из fb, что очень неудобно в ООП при тиражировании объектов, так как приходится сначала создать объект, потом привязать созданные для каждого объекта переменные к соответствующему объекту. Кто знает другой путь?
    Последний раз редактировалось valkv; 24.02.2022 в 08:04.

  5. #5

    По умолчанию

    Цитата Сообщение от valkv Посмотреть сообщение
    Столкнулся с этой ситуацией в своем проекте Spk107 в теплице. Согласно документации codesys при объявлении Persistent внутри POU, весь POU пишется в энергонезависимую память. На первом этапе 'Компиляция - Очистить всё', удаляет дефрагментацию памяти, и это помогает. Но при дальнейшем увеличении кода в POU проект встает по ошибке, так как я объявляю несколько однотипных объектов. Пришлось все Persistent объявить в отдельном файле и удалить такие переменные из fb, что очень неудобно в ООП при тиражировании объектов, так как приходится сначала создать объект, потом привязать созданные для каждого объекта переменные к соответствующему объекту. Кто знает другой путь?
    Сначала пишется программа с обычными и глобальными переменными. Все переменные в слейве (слейвах) и так GLOBAL RETAIN , если нужны ещё такие переменные их вырезаете из глобальных и вставляете в VAR_GLOBAL RETAIN PERSISTENT. Обычно их не так и много.
    Кроме того некоторые переменные лучше просто инициализировать при старте программы, а некоторые вообще просто константы, которые и не надо в RETAIN пихать.
    Последний раз редактировалось kondor3000; 24.02.2022 в 17:31.

  6. #6
    Пользователь
    Регистрация
    28.02.2020
    Адрес
    Балтийск
    Сообщений
    73

    По умолчанию

    Так и пришлось сделать, но это неудобно. Удобно в fb объекта объявлять RETAIN PERSISTENT. И когда размножаешь объект, то эти переменные автоматически привязываются к копиям объекта.

Похожие темы

  1. СПК210 не сохраняются переменные PERSISTENT RETAIN
    от Игорь П в разделе СПК2xx (архив)
    Ответов: 1
    Последнее сообщение: 05.11.2021, 17:05
  2. Ответов: 4
    Последнее сообщение: 05.02.2020, 17:40
  3. Ответов: 15
    Последнее сообщение: 21.12.2013, 11:59
  4. Переменные PERSISTENT RETAIN
    от Edik_Ponomarenko в разделе ПЛК1хх
    Ответов: 9
    Последнее сообщение: 21.11.2012, 19:43
  5. Var_global Retain Persistent не сохраняется
    от Voronok в разделе ПЛК1хх
    Ответов: 1
    Последнее сообщение: 04.12.2008, 14:21

Ваши права

  • Вы не можете создавать новые темы
  • Вы не можете отвечать в темах
  • Вы не можете прикреплять вложения
  • Вы не можете редактировать свои сообщения
  •