Прежде чем вникать как, нужно понимать - почему?

1) У ИП320 нет! энергонезависимой памяти.
2) ИП320 не имеет возможности при старте считать изначальные данные.

Поэтому при отключении питания на панели данные все обнуляются и когда на ПЛК подается питание в него пишутся одни нолики.

Для предотвращения потери данных вводится специальный алгоритм, который позволяет предотвратить потерю данных.

Например, есть список переменных, которые нужно сделать энегронезависимыми. Делаем дублирование этих переменных, объявляем их как Retain.
Например так:

Код:
VAR
   x:real;
   y:bool;
   z:word;
END_VAR

VAR RETAIN
   ret_x:real;
   ret_y:bool;
   ret_z:word;
END_VAR
Префикс "ret_" может быть любым, это нужно только для того, чтобы не путать простые переменные и энегонезависимые.

Теперь нужно как-то организовать работу с этими переменными.

Если кратко, то смысл работы таков:

В энергонезависимых переменных должны быть записаны значения (из обычных) переменных в момент отключения питания. Когда питание отсутствует, программу не выполняем.
Как только питание подается на ПЛК и он начинает работу, взводим таймер, примерно на 10 секунд.
Это ну случай если панель включится позже и чтоб данные однозначно пришли в панель.
Далее в течении работы таймера данные из энергонезависимой памяти пишутся в обычные переменные, которые отвечают за работу по интерфейсу. Как только таймер закончит работу, даем добро на работу основного алгоритма программы.

В момент отключения питания данные из обычных переменных заносятся в Retain и включается запрет на выполнение основного цикла программы.


Момент включения\отключения питания можно отловить по переменной Power, которую можно объявить в конфигурации ПЛК, объявив модуль Статистика (Statistik).

Для определения момента включения и отключения питания можно использовать триггеры R_TRIG и F_TRIG.