PDA

Просмотр полной версии : Проблема с пересохранением переменной



Junoka
02.11.2022, 16:18
Здравствуйте!

Помогите, пожалуйста, решить проблему. Написал блок в Codesys 2.3 для ПЛК. В нем какая то загвоздка с присвоением "Temp_Prev := Temp_Curr;"
При выполнении этого присвоения у Temp_Prev сохраняется прошлое значение. Переменные Temp_Prev и Temp_Curr обе глобальные. Подскажите в какую сторону копать?


(*Данный блок выполняется 1 раз при завершении времени таймера отсчета ступени.
Далее он может повторно выполняться при условии, что разница температур была больше 45 градусов.
Условием для повторного выполнения будет сигнал с дополнительного таймера включения с отсчетом 1 час*)

IF Exec_trig THEN

delT := Temp_Curr - Temp_Prev;

IF delT < ust_delT THEN

(*Если разница температур меньше 45 градусов, то подаем сигнал на увеличение ступени на 1 и сбрасываем таймер отсчета ступени*)
StepUp := TRUE;
ResetTimer := TRUE;
ExtraTimer_On := FALSE;


ELSE
(*В противном случае присваиваем текущее значение температуры предыдущему и запускаем таймер повторного выполнения блока спустя 1 час*)

Temp_Prev := Temp_Curr;
StepUp := FALSE;
ResetTimer := FALSE;
ExtraTimer_On := TRUE;

END_IF

ELSE

(*Если нет сигнала на выполнение, то обнуляем подъем ступени и сброс таймеров*)
StepUp := FALSE;
ResetTimer := FALSE;

END_IF

Валенок
02.11.2022, 17:03
В нем какая то загвоздка с присвоением "Temp_Prev := Temp_Curr;"
При выполнении этого присвоения у Temp_Prev сохраняется прошлое значение.
После этого присвоения точка останова на строке "StepUp := FALSE" и смотрим что в Temp_Prev

kondor3000
02.11.2022, 19:12
Здравствуйте!

Помогите, пожалуйста, решить проблему. Написал блок в Codesys 2.3 для ПЛК. В нем какая то загвоздка с присвоением "Temp_Prev := Temp_Curr;"
При выполнении этого присвоения у Temp_Prev сохраняется прошлое значение. Переменные Temp_Prev и Temp_Curr обе глобальные. Подскажите в какую сторону копать?


У меня никакой загвоздки нет. До достижения Temp_Curr=45 градусов присвоения нет.
При достижении и срабатывании таймера Exec_trig, идёт присвоение "Temp_Prev := Temp_Curr;" См. скрин 63591

Пока только одна идея. Возможно у вас переменная Temp_Prev есть глобальная и локальная. Тогда в блоке локальная присвоится, а глобальная нет. Достаточно открыть экземпляр блока при работе и посмотреть.
Если нет то выкладывайте проект целиком.