Вход

Просмотр полной версии : Retain и Persistant переменные



aaaSashaMGGU
10.12.2023, 19:46
Давно хотел спросить, что я концептуально делаю не так? Проблема вот в чём
Есть у меня с десяток Retain переменных. Они сохраняют своё значение, всё ОК - вопрос не про это
Проект новый, живой, самодельный. Каждый день технологи придумывают что-то новое, приходится расширять функционал контроллера

Изменить какое-нибудь условие? Легко меняется, прошивка обновляется на лету, проблем нет никаких
Добавить новый POU? Легко добавляется, прошивка обновляется на лету, проблем нет никаких
Изменить время Task-а? Уже нужна полная загрузка, при которой мои Retain-переменные могут и слететь
Добавить новый Retain? Слетят по-любому
Добавить новый модуль на Modbus? Слетят по-любому
Нет, я не против вручную восстановить после этого десяток значений (не забываем, что для этого их нужно записать перед обновлением себе на листочек - и точно быть уверенным, что после такого вот включения с дефолтными значениями какая-нибудь условная задвижка резко не поедет не туда из-за неверной константы)
А если таких переменных сотни? А тысячи? А у меня такой проект на подходе... Каждое такое обновление как на иголках...

Я уже давно все текущие значения тупо присваиваю при объявлении (так надёжнее, чесслово):
VAR RETAIN
rem1:INT := 10; (* Сохраняемая переменная*)
END_VAR

А на одном контроллере я сделал функцию сохранения переменной на ЖД контроллера по её имени - и такую же на чтение. По старту контроллера - читаю. По изменению значения - пишу. Работает стабильно - и я спокоен

Взять хоть тот же Weintek: нет-нет, там своих тараканов хватает, но за все эти годы константы RW там не слетали ни разу, что ты с ними ни делай и как ни издевайся. Они "слетят" только, если ты своей рукой поставишь птичку рядом с "Очистить RW" при загрузке. А ведь Weintek он даже не контроллер, а лишь старательно косит под него (кто в теме - поймёт)

Заранее спасибо за советы!

capzap
10.12.2023, 19:54
Зачем значения переменых записывать на листочек если есть экспорт импорт

Cs-Cs
11.12.2023, 11:44
...какие тут могут быть советы, если ответ заключен в самом названии темы про "Retain и Persistant".
Нужно читать справку, в которой написано:
* Retain сбрасываются на значения по умолчанию КАЖДЫЙ РАЗ при загрузке программы в контроллер. Они так устроены и ДОЛЖНЫ так работать. Зато их количество может быть большим.
* Persistent сбрасываются только при изменении их списка или их начальных значений и НЕ сбрасываются при загрузке программы в контроллер. Их количество ограничено.