привет
столкнулся вот с таким вот решением в программе, и не пойму как мне сделать то, что мне надо сделать (каламбурчик)
есть ПЛК, который Слейв. Есть Панель Мастер.
Есть два аналоговых датчика-входных сигнала, параметры диапазона каждого канала для которых задаются с панели - начало и конец диапазона.
есть вот такой код
МВхххх_FLT - это имя переменной и её адрес в слейве.Код:(*Уставки*) 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;
нас интересует РТ - давление и Расход FT
которые "сделаны" через структуру
вот это присвоение значений для Hi и Lo - важно, так как при перезагрузке ПЛК происходит "обнуление" введённых через панель настроек канала Давления и Расхода и установка вот на эти 0 и 50, которые заданы в структуре получается как по-умолчанию.Код:TYPE AIN : STRUCT Hi_Limit: REAL := 50.0; Lo_Limit: REAL := 0.0; Value: REAL; Status: REAL; Error: BOOL; END_STRUCT END_TYPE
при этом, в глобальных переменных всё это объявлено следующим образом
мне надо, чтобы сохранялась возможность ввести начало - конец диапазона и это осталось в ПЛК до "следующего" ввода инженером.Код: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-а ему облегчила работу, но в реальной жизни приносит боль и страдания заказчику, вынужденного потом после вынужденных блекаутов восстанавливать настройки каналов


Ответить с цитированием
