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

Тема: В области RETAIN не сохраняются измененные значения переменных

  1. #1

    По умолчанию В области RETAIN не сохраняются измененные значения переменных

    Здравствуйте. Хочу обратиться за помощью по такому вопросу. Работаю с контроллером ПЛК-210. Есть переменные со установленными значениями, которые находятся в PLC_PRG в области RETAIN. Также есть переменные, которые вводятся с панели СП310-Р и пишутся в эти переменные. После перезагрузки контроллера сохраняются старые значения переменных в области RETAIN. Подскажите, пожалуйста, как сделать, чтобы в области RETAIN сохранялись значения, введенные с панели СП310-Р

  2. #2

    По умолчанию

    У панели есть своя энергонезависимая память PFW256 и выше, можно хранить уставки там и при включении передавать (копировать) в сетевые регистры ПЛК.
    В дисплее ввода в панели есть бит уведомлений, по которому можно отслеживать изменения уставок или использовать его для записи в RETAIN ПЛК.
    Можно просто отслеживать изменение любой нужной переменной в ПЛК и по изменению записывать в RETAIN.
    Последний раз редактировалось kondor3000; 27.07.2026 в 14:30.

  3. #3
    Пользователь
    Регистрация
    31.07.2013
    Адрес
    Аркаим
    Сообщений
    1,443

    По умолчанию

    Alex87
    Можете привести кусочек кода, как у вас объявлены переменные, и как организован к ним доступ из панели?

  4. #4

    По умолчанию

    //в GVL
    VAR_GLOBAL
    Ust_per_nas_panel: WORD;
    END_VAR

    //в PLC_PRG
    VAR RETAIN
    Ust_per_nas_plc: WORD :=72;
    END_VAR

    // в программе PLC_PRG
    Ust_per_nas_plc := GVL.Ust_per_nas_panel;

  5. #5
    Пользователь
    Регистрация
    31.07.2013
    Адрес
    Аркаим
    Сообщений
    1,443

    По умолчанию

    //в PLC_PRG
    VAR RETAIN
    Ust_per_nas_plc: WORD :=72;
    END_VAR
    ----
    При включении ПЛК он сначала читает явное задание первоначального значения, поэтому последующие изменения переменной не сохраняются при выключении\перезапуска. Вернее при каждом старте переменной присваивается явно указанное значение.
    Ретайн-переменные обычно объявляются в области GVL. В данный момент нет КДС под рукой, не могу точно правильно подсказать.
    Если ретайн-переменная не должна иметь нулевое значение, то можно сделать так:
    В начале ПЛЦ_ПРГ однократно вызываем подпрограмму проверки переменных и первичной инициализации
    Код:
    если переменная = 0, то переменная:=значение.
    При первом включении после заливки кода в ПЛК переменная=0, подпрограмма инициализации присваивает первичное значение, далее значение переменной может меняться, по выключению ПЛК оно сохранится, но уже не будет нулевым. Следовательно, при последующем включении ПЛК оно и останется таким.
    Последний раз редактировалось Sulfur; 27.07.2026 в 21:28.

  6. #6

    По умолчанию

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

  7. #7
    Пользователь
    Регистрация
    31.07.2013
    Адрес
    Аркаим
    Сообщений
    1,443

    По умолчанию

    Персистент - это хорошо, но для редко изменяемых переменных. У меня в одном проекте была потребность персистент-переменной, которая в проге менялась до двадцати раз в секунду. Что бы не сжечь память, пришлось при включении плк её считывать, а при выключении сохранять. Причем для этого потребовалось поставить реле контроля напряжения, и дополнительный буфер на БП, позволяющий работать мозгам секунд тридцать после выключения питания установки.

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

    По умолчанию

    Цитата Сообщение от Alex87 Посмотреть сообщение
    Здравствуйте. Хочу обратиться за помощью по такому вопросу. Работаю с контроллером ПЛК-210. Есть переменные со установленными значениями, которые находятся в PLC_PRG в области RETAIN. Также есть переменные, которые вводятся с панели СП310-Р и пишутся в эти переменные. После перезагрузки контроллера сохраняются старые значения переменных в области RETAIN. Подскажите, пожалуйста, как сделать, чтобы в области RETAIN сохранялись значения, введенные с панели СП310-Р
    Если панель мастер, и читает и пишет в одну слейв-переменную
    Код:
    //в GVL
    VAR_GLOBAL
      Ust_per_nas_panel: WORD;
    END_VAR
    то
    Код:
    //в PLC_PRG
    VAR RETAIN
      Ust_per_nas_plc: WORD :=72;
    END_VAR
    VAR //не ретайн
      init : bool;
    END_VAR
    
    
    // в программе PLC_PRG
    if not init then
      init := true;
      GVL.Ust_per_nas_panel := Ust_per_nas_plc;
    end_if
    ...
    Ust_per_nas_plc := GVL.Ust_per_nas_panel;
    Цитата Сообщение от Sulfur Посмотреть сообщение
    Вернее при каждом старте переменной присваивается явно указанное значение..
    .. но это не относится к ретайн-переменной. Инит-значение для них - это значение только в момент первой загрузки.
    Последний раз редактировалось Валенок; 27.07.2026 в 22:34.

  9. #9

    По умолчанию

    Панель мастер. Спасибо всем за помощь

Похожие темы

  1. Ответов: 8
    Последнее сообщение: 07.12.2024, 14:43
  2. Ответов: 31
    Последнее сообщение: 02.03.2023, 16:23
  3. СПК107 [М01] не сохраняются RETAIN переменные
    от Mikewolf в разделе СПК210, СПК1xx [М01]
    Ответов: 7
    Последнее сообщение: 20.06.2022, 08:57
  4. Ответов: 7
    Последнее сообщение: 17.02.2013, 16:45
  5. Retain переменные не сохраняются!
    от JuLi в разделе ПЛК1хх
    Ответов: 9
    Последнее сообщение: 02.03.2010, 16:22

Ваши права

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