привет
столкнулся вот с таким вот решением в программе, и не пойму как мне сделать то, что мне надо сделать (каламбурчик)
есть ПЛК, который Слейв. Есть Панель Мастер.
Есть два аналоговых датчика-входных сигнала, параметры диапазона каждого канала для которых задаются с панели - начало и конец диапазона.
есть вот такой код
Код:
(*Уставки*)
	IF	NOT FIRST_SCAN	THEN
		(*Уставки FLOAT*)
		MB0000_FLT			:=	PT_Input.Lo_Limit;
		MB0002_FLT			:=	PT_Input.Hi_Limit;
		MB0004_FLT			:=	FT_R1.Lo_Limit;
		MB0006_FLT			:=	FT_R1.Hi_Limit;
		MB0008_FLT			:=	PT_Input_Min_Pressure;
		MB0010_FLT			:=	PT_Input_Max_Pressure;
		MB0012_FLT			:=	FT_R1_Weigth_Pulse;
.......................................................
FIRST_SCAN			:= 	TRUE;
	ELSE
		(*Уставки FLOAT*)
		PT_Input.Lo_Limit						:=	MB0000_FLT;
		PT_Input.Hi_Limit						:=	MB0002_FLT;
		FT_R1.Lo_Limit							:=	MB0004_FLT;
		FT_R1.Hi_Limit							:=	MB0006_FLT;
		PT_Input_Min_Pressure					:=	MB0008_FLT;
		PT_Input_Max_Pressure					:=	MB0010_FLT;
		FT_R1_Weigth_Pulse					        :=	MB0012_FLT;
МВхххх_FLT - это имя переменной и её адрес в слейве.
нас интересует РТ - давление и Расход FT
которые "сделаны" через структуру
Код:
TYPE AIN :
STRUCT
	Hi_Limit:		REAL	:= 50.0;
	Lo_Limit:		REAL	:= 0.0;
	Value:			REAL;
	Status:			REAL;
	Error:			BOOL;
END_STRUCT
END_TYPE
вот это присвоение значений для Hi и Lo - важно, так как при перезагрузке ПЛК происходит "обнуление" введённых через панель настроек канала Давления и Расхода и установка вот на эти 0 и 50, которые заданы в структуре получается как по-умолчанию.
при этом, в глобальных переменных всё это объявлено следующим образом
Код:
VAR_GLOBAL RETAIN PERSISTENT
	(*Аналоговые сигналы*)
	PT_Input:		AIN;	(*Параметры датчика давления*)
	FT_R1:		AIN;	(*Параметры расходомера*)
......................
	(*Уставки REAL*)
	PT_Input_Min_Pressure:	REAL := 0.5;	(*Минимальное давление на входе*)
	PT_Input_Max_Pressure:	REAL := 5.0;	(*Максимальное давление на входе *)
	FT_R1_Weigth_Pulse:		 REAL := 30.0;	(*Расходомер R1. Вес импульса - имп/л*)
мне надо, чтобы сохранялась возможность ввести начало - конец диапазона и это осталось в ПЛК до "следующего" ввода инженером.
То есть, введеённая 1 раз цифра, осталась в памяти, до следующего принудительного изменения через панель и не сбрасывалась на дефолтные, заданные, через структуру, которая в принципе мне только мешает, так как давление и расход конечно же не могут быть вообще одинаковыми по шкале
с уставками Min_Pressure и Max_Pressure и вес импульса мне понятно, я вбил там то, что мне надо и это останется.
Но вот, что мне сделать со структурой, я не понимаю.
и почему вот этот FIRST_SCAN со своим IF.....ELSE мне обнуляет при перезапуске введённые значения
это место я вообще не могу понять, какое-то кольцо сделано

Если убрать из структуры присовения значений
Код:
Hi_Limit:		REAL;
Lo_Limit:		REAL;
то где мне сделать эти присвоения значений своих (!) для КАЖДОГО датчика - для давления отдельно, для расхода отдельно
?
на ходу я попытался заснуть их в VAR_GLOBAL RETAIN PERSISTENT также, как Уставки
Код:
FT_R1.Lo_Limit: REAL := 0.0;
FT_R1.Hi_Limit:	REAL := 100.0;
но КДС гворит это ошибка

как решить эту задачку?

при этом ввод через панель должен остаться, как и структура, чтобы не менять код слишком серьёзно, на это нет ни времени, ни возможности, система не моя, я просто "мимо проходил", но эта шаблонная заготовка неизвестного codemeister-а ему облегчила работу, но в реальной жизни приносит боль и страдания заказчику, вынужденного потом после вынужденных блекаутов восстанавливать настройки каналов