Структура+константы (?) введённые через панель, при старте программы
привет
столкнулся вот с таким вот решением в программе, и не пойму как мне сделать то, что мне надо сделать (каламбурчик)
есть ПЛК, который Слейв. Есть Панель Мастер.
Есть два аналоговых датчика-входных сигнала, параметры диапазона каждого канала для которых задаются с панели - начало и конец диапазона.
есть вот такой код
Код:
(*Уставки*)
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-а ему облегчила работу, но в реальной жизни приносит боль и страдания заказчику, вынужденного потом после вынужденных блекаутов восстанавливать настройки каналов