Страница 2 из 3 ПерваяПервая 123 ПоследняяПоследняя
Показано с 11 по 20 из 22

Тема: С0414: Не хвататет перманентной памяти

  1. #11
    Пользователь
    Регистрация
    20.07.2021
    Адрес
    Москва, Тула
    Сообщений
    46

    По умолчанию

    Сделал в структурах, которые не RETAIN/PERSISTENT указатели REFERENCE на соответствующие структуры RETAIN/PERSISTENT.
    Но почему-то, все равно уходит 58892 байт (90 %) энергонезависимой памяти. Хотя там их от силы 4 кБ должно быть.
    С чем это связано?
    Если структуры STRUCT RETAIN/END_STRUCT переопределить как STRUCT RETAIN PERSISTENT/END_STRUCT, то при компиляции память уменьшается до 56400 байт (86 %).

  2. #12
    Пользователь
    Регистрация
    23.09.2008
    Адрес
    Центророссийск
    Сообщений
    3,172

    По умолчанию

    Обычный указатель как?

  3. #13
    Пользователь
    Регистрация
    20.07.2021
    Адрес
    Москва, Тула
    Сообщений
    46

    По умолчанию

    Цитата Сообщение от Валенок Посмотреть сообщение
    Обычный указатель как?
    Имеете ввиду POINTER?

    Вот, например тот же:
    Код:
    TYPE SOLENOID_VALVE : //соленодный клапан
    STRUCT
        wsTitle : WSTRING;
        xRun : BOOL; //команда открыть/закрыть э/м клапана
        xWork : BOOL; //ответ э/м клапана "открыт/закрыт"
        xLocal : BOOL; //местный
        xBlock : BOOL; //блокировка
        xAlarm : BOOL; //авария клапана
        fbModeControl : MODE_CONTROL;
        ptRetain : REFERENCE TO SV_SETTINGS;
        // Визуализация
        sVisuPictureID : STRING := 'SolenoidValveCloseNC';
    END_STRUCT
    END_TYPE
    К нему идет вот такая ptRetain:
    Код:
    TYPE SV_SETTINGS : //энергонезависимые уставки
    STRUCT RETAIN PERSISTENT
        rTimeMaxOpen : REAL := 3; //максимальное время открытия, сек
        rTimeMaxClose : REAL := 3; //максимальное время закрытия, сек
        usiMode : USINT := 0; //режим (0-ручной, 1-авто, 2-наладочный)
        eNormalState : NORMAL_STATE := NORMAL_STATE.NC; //нормальное состояние (0-NC, 1-NO)
    END_STRUCT
    END_TYPE
    Экземпляры:
    Код:
    astGVS : ARRAY[c_iStartNumGVS..c_iEndNumGVS] OF SOLENOID_VALVE; //клапана соленоидные
    astGVS_Ret : ARRAY[c_iStartNumGVS..c_iEndNumGVS] OF SV_SETTINGS; //клапана соленоидные
    В инициализации добавлена ссыылка:
    Код:
    astGVS[i].ptRetain REF= astGVS_Ret[i];
    Последний раз редактировалось Paha1977; 17.06.2026 в 10:13.

  4. #14

    По умолчанию

    Зачем объявлять структуру RETAIN PERSISTENT? Нужно объявить простую структуру, а переменные этой структуры уже в области Retain

  5. #15
    Пользователь
    Регистрация
    20.07.2021
    Адрес
    Москва, Тула
    Сообщений
    46

    По умолчанию

    То есть вы предлагаете по выше приведенному примеру объявить
    Код:
    TYPE SV_SETTINGS : //энергонезависимые уставки
    STRUCT
        rTimeMaxOpen : REAL := 3; //максимальное время открытия, сек
        rTimeMaxClose : REAL := 3; //максимальное время закрытия, сек
        usiMode : USINT := 0; //режим (0-ручной, 1-авто, 2-наладочный)
        eNormalState : NORMAL_STATE := NORMAL_STATE.NC; //нормальное состояние (0-NC, 1-NO)
    END_STRUCT
    END_TYPE
    А потом прописать PersistentVars уже переменные экземпляров
    Код:
    VAR_GLOBAL PERSISTENT RETAIN
    //Клапаны соленоидные
    	GV.astGVS_Ret[1].rTimeMaxOpen: REAL := 1;
    	GV.astGVS_Ret[1].rTimeMaxClose: REAL := 1;
    	GV.astGVS_Ret[1].usiMode: USINT := USINT#0;
    	GV.astGVS_Ret[1].eNormalState: NORMAL_STATE := NORMAL_STATE.NC;
    //......и т.д.
    END_VAR
    ???

    Но тогда эти переменные станут плейсхолдерами.

  6. #16
    Пользователь
    Регистрация
    23.09.2008
    Адрес
    Центророссийск
    Сообщений
    3,172

    По умолчанию

    Цитата Сообщение от Paha1977 Посмотреть сообщение
    Имеете ввиду POINTER?
    Да. Без всяких REFERENCE
    С ними как?

  7. #17
    Пользователь
    Регистрация
    20.07.2021
    Адрес
    Москва, Тула
    Сообщений
    46

    По умолчанию

    А в чем различие? Это то же указатель. REF удобнее использовать не разыменовывая знаком ^.

  8. #18
    Пользователь
    Регистрация
    23.09.2008
    Адрес
    Центророссийск
    Сообщений
    3,172

    По умолчанию

    Цитата Сообщение от Paha1977 Посмотреть сообщение
    А в чем различие? Это то же указатель. REF удобнее использовать не разыменовывая знаком ^.
    Проблема решена?

  9. #19

    По умолчанию

    Почему не объявить массив astGVS_Ret в списке PersistentVars?

  10. #20

    По умолчанию

    Что конкретно не получается?
    Пример 100 строк.png

    ________


    Пример 10 000 строк.png

    ________


    Пример 100 000 строк.png

    Занимаемая энергонезависимая память во всех случаях одинаковая, массив строк на неё никак не влияет. Вы же этого хотели добиться?

Страница 2 из 3 ПерваяПервая 123 ПоследняяПоследняя

Похожие темы

  1. МСД-100 карты памяти
    от Yury Evgenev в разделе Эксплуатация
    Ответов: 4
    Последнее сообщение: 09.08.2019, 11:24
  2. Использование памяти в ПЛК
    от Mikhael_2 в разделе ПЛК (среда MasterSCADA 4D)
    Ответов: 0
    Последнее сообщение: 05.07.2019, 17:30
  3. Ячейка памяти
    от Project M в разделе Среда программирования OWEN Logic
    Ответов: 21
    Последнее сообщение: 10.07.2017, 08:59
  4. Нехватка памяти СПК-207
    от Dima_31 в разделе СПК2xx (архив)
    Ответов: 4
    Последнее сообщение: 24.05.2016, 07:23
  5. Распределение памяти
    от Milchuk в разделе ПЛК1хх
    Ответов: 7
    Последнее сообщение: 01.06.2007, 08:26

Ваши права

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