Давно хотел спросить, что я концептуально делаю не так? Проблема вот в чём
Есть у меня с десяток Retain переменных. Они сохраняют своё значение, всё ОК - вопрос не про это
Проект новый, живой, самодельный. Каждый день технологи придумывают что-то новое, приходится расширять функционал контроллера
Изменить какое-нибудь условие? Легко меняется, прошивка обновляется на лету, проблем нет никаких
Добавить новый POU? Легко добавляется, прошивка обновляется на лету, проблем нет никаких
Изменить время Task-а? Уже нужна полная загрузка, при которой мои Retain-переменные могут и слететь
Добавить новый Retain? Слетят по-любому
Добавить новый модуль на Modbus? Слетят по-любому
Нет, я не против вручную восстановить после этого десяток значений (не забываем, что для этого их нужно записать перед обновлением себе на листочек - и точно быть уверенным, что после такого вот включения с дефолтными значениями какая-нибудь условная задвижка резко не поедет не туда из-за неверной константы)
А если таких переменных сотни? А тысячи? А у меня такой проект на подходе... Каждое такое обновление как на иголках...
Я уже давно все текущие значения тупо присваиваю при объявлении (так надёжнее, чесслово):
VAR RETAIN
rem1:INT := 10; (* Сохраняемая переменная*)
END_VAR
А на одном контроллере я сделал функцию сохранения переменной на ЖД контроллера по её имени - и такую же на чтение. По старту контроллера - читаю. По изменению значения - пишу. Работает стабильно - и я спокоен
Взять хоть тот же Weintek: нет-нет, там своих тараканов хватает, но за все эти годы константы RW там не слетали ни разу, что ты с ними ни делай и как ни издевайся. Они "слетят" только, если ты своей рукой поставишь птичку рядом с "Очистить RW" при загрузке. А ведь Weintek он даже не контроллер, а лишь старательно косит под него (кто в теме - поймёт)
Заранее спасибо за советы!