Добрый день! Подскажите пожалуйста по моей тестовой программе:
1. Правильно ли я делаю - уменьшая время работы таймера, из за периодического опроса блока с программой в 1000 мс-заметил что интервалы на тренде увеличения параметра(температуры) начали расти
2. Как можно поменять условие в программе чтобы вначале работал таймер, потом шло приращение температуры - по моему первому IF температура сразу приращается, если условия поменять - то не работает как надо.
программа:
PROGRAM MAIN_PROGRAM

VAR_INPUT
Start_Stop:bool;
Temp_Hold:real:=10;(*Начальная температура*)
Temp_end:real:=15;(*Конечная температура*)
time_Hold_hours:real:=5;(*Время удержания температуры*)
heat_speed_deg_per_min:real:=0.05;(*Скорость нагрева град\мин*)
reset_timer:bool; (*Сброс температуры и температурного приращения к начальной температуре*)
END_VAR
VAR_OUTPUT
ustavka:real;(*Значение температуры на запись в термостат*)
END_VAR
var
shag:real:=0.01; (*Минимальный шаг уставки температуры термостата*)
z:real; (*Время измнения температуры на 0.01 град в мин *)
delta:real; (*Приращение температуры*)
in1:bool;(*Запуск таймера*)
Timer1:TP; (*Таймер, пока один*)
Ti2:time:=T#1m;(*Время таймера в минутах*)
out:bool;(*смотреть что на выходе для отладки*)
outT:time;(*смотреть что на выходе для отладки*)
outint:time;(*смотреть что на выходе для отладки*)
periodOprosa:real:=0.0167; (*Период опроса программы ST в настройках = 1 секунда в минутах *)
period:real;(*уменьшение времени таймера из за периода опроса программы ST*)
end_var
(*TODO: TYPE PROGRAM CODE HERE*)
z:=shag/heat_speed_deg_per_min-period;
Timer1(In:=in1,PT:=MUL(Ti2,z));
out:=Timer1.Q;
outT:=Timer1.ET;
outint:=MUL(Ti2,z);
if Start_Stop=true and out=false then in1:=true; delta:=delta+shag; period:=period-periodOprosa;
else in1:=false;
end_if;
ustavka:=Temp_Hold+delta;
if Start_Stop=false and reset_timer=true then ustavka:=Temp_Hold; delta:=0; period:=0;
end_if;
END_PROGRAM