Его достаточно будет, если одно условие, я так понимаю, но мне надо включить еще условия при различных температурах с включением подогрева и контролем температуры.(
Вид для печати
Я обычно собираю все условия в одну переменную, а уже её управляю таймером, счетчиком и т.д
Доброго дня, сделайте массив для записи. В ячейку записываете температуру по запуску вентилятора, далее таймер работы вентилятора и т.д.
Набросал такой алгоритм, работа получается, только вот, если температура в пороге от -5 до 5 градусов включается (режим 2) обогрев и Вебасто, но в течении режима работы 2 происходит увеличение температуры, и цикл не дорабатывает до конца, а сразу переходит в режим работы 1, где при температуре выше +5 градусов сразу запускается дизель....
код:
Необходимо чтобы если запускался какой либо из режимов и начале работы программы, то дорабатывал до конца. Я новичок в этом деле, может необходимо пользоваться системными событиями и как можно это реализовать? желательно с примером...Цитата:
VAR
Start: BOOL;
U_in_1_conv: REAL; (*напряжение канал_1*)
U_in_2_conv: REAL; (*напряжение канал_2*)
Timer_letom: TON; (*таймер запуска ДГУ летом через 5 минут после вентиляции*)
Timer_TP23: TP;
Obog: BOOL;
Indikator0: BOOL;
Indikator1: BOOL;
Indikator2: BOOL;
Timer_viklDGU: TOF;
Timer_Webasto: TON;
Timer_raboti_Webasto: TP;
Timer_zad_vkl_DGU: TOF;
F_TRIG1: F_TRIG;
Timer_DGU: TP;
END_VAR
VAR RETAIN
END_VAR
VAR CONSTANT RETAIN
T_porog_1: REAL := 40; (*порог температуры летом 40 градусов*)
T_porog_2: REAL := +5; (*порог температуры_+5*)
T_porog_3: REAL := -5; (*порог температуры_-5*)
T_porog_4: REAL := -20; (*порог температуры_-20*)
T_porog_5: REAL := -30; (*порог температуры_-30*)
U_porog_AKB: REAL := 50; (*порог разряда АКБ*)
U_porog_AKB_zrd: REAL := 55.9; (*порог заряда АКБ*)
U_porog_AKB_start: REAL := 12 ; (*порог напряжения АКБ стартового*)
END_VAR
PLC_PRG
U_in_1_conv := DWORD_TO_REAL(U_in_11)*4.768372E-006; (*напряжение канал_1*)
U_in_2_conv := DWORD_TO_REAL(U_in_2)*4.768372E-006; (*напряжение канал_2*)
IF U_in_1_conv <= U_porog_AKB THEN
Start := 1; (*старт программы*)
END_IF
Timer_letom(IN:=U_out_2 , PT:=T#5m , Q=> , ET=> ); (*таймер на вкл.дгу после вентиляции*)
Timer_TP23(IN:=Obog , PT:=T#45m , Q=> , ET=> ); (*таймер работы подогрева картера*)
Timer_Webasto(IN:=U_out_3 , PT:=T#15s , Q=> , ET=> ); (*таймер задержки включения обогрева webasto*)
Timer_raboti_Webasto(IN:=Timer_Webasto.Q , PT:=T#43m45s , Q=> , ET=> ); (*таймер работы обогрева*)
Timer_zad_vkl_DGU(IN:=U_out_3 , PT:=T#10s , Q=> , ET=> ); (*таймер задержки вкл.ДГУ после обогрева через 10 сек*)
F_TRIG1(CLK:=Timer_zad_vkl_DGU.Q , Q=> ); (*триггер активации таймера работы дгу*)
Timer_DGU(IN:=F_TRIG1.Q , PT:=T#120m , Q=> , ET=> ); (*таймер работы ДГУ*)
(*Если старт программы и температура от 5 до 40 то запустить ДГУ*)
IF Start = 1 AND Temp_1 >= T_porog_2 AND Temp_1 <= T_porog_1 THEN (*режим_0*)
Indikator0 := 1;
U_out_1 := 1;
U_out_3 := 0;
U_out_4 := 0;
Obog := 0;
(*если старт программы и температура больше 40 то включить вентиляцию и ДГУ*)
ELSIF Start = 1 AND Temp_1 >= T_porog_1 THEN (*режим_1*)
Indikator1 := 1;
U_out_2 := 1;
U_out_1 := Timer_letom.Q;
(*Если старт программы и температура от -5 до +5 то включить подогрев картера, обогрев и ДГУ*)
ELSIF Start = 1 AND Temp_1 > T_porog_3 AND Temp_1 < T_porog_2 THEN (*режим_2*)
Indikator2 := 1;
Obog := 1;
U_out_3 := Timer_TP23.Q;
U_out_4 := Timer_raboti_Webasto.Q;
U_out_1 := Timer_DGU.Q;
ELSE
Obog := 0;
Indikator0 := 0;
Indikator1 := 0;
Indikator2 := 0;
U_out_1 := 0;
U_out_2 := 0;
U_out_3 := 0;
U_out_4 := 0;
END_IF
(*если АКБ зарядился то выключить все*)
IF U_in_1_conv >= U_porog_AKB_zrd(* OR F = 0*) THEN
Start := 0;
(* U_out_2 := 0; Rele_2 := 0;
U_out_1 := 0; Rele_1 := 0;
U_out_3 := 0;*)
END_IF
задача такова, как только напряжение на аккумуляторе падает ниже 50В то активируется программа:
0 режим: если температура больше 40 градусов, то включается вентиляция и через 5 минут включается Дизель-генератор, и отрабатывает пока АКБ не зарядится до 55.9 В, но не более 120 минут.
1 режим: если температура от +5 до 40 градусов, то сразу включается Дизель-генератор и отрабатывает пока АКБ не зарядится до 55.9 В, но не более 120 минут.
2 режим: если температура от -5 до +5 градусов, то включается подогрев картера, через 15 секунд включается обогреватель на 45 минут, после выключаются и через 10 сек, после выключения обогревателя и подогрева картера запускается дизель-генератор и отрабатывает пока АКБ не зарядится до 55.9 В, но не более 120 минут.
К этому необходимо проконтролировать запуск обогрева (после того как запускается второй режим, где температура -5 - +5, запоминаем температуру, после 10 минут работы обогрева нужно сравнить реальную и зафиксированную температуру, если она поднялась на 10 градусов, то продолжить отработку режима до конца, если не поднялась, то провести запуск режима еще раз с самого начала, при 3х неудачных попытках выдать сигнал тревоги)
Вы не там ищите разницу, константа и без энергонезависимости при включении останется с таким же значением, а сохранение при пропадании питания нужно только изменяемым переменным
по поводу кейсов, в теле условия наступления старта, присвойте переменной номер режима, далее откройте кейс с этой переменной и пропишите все действия необходимые для данного режима
фронт события, так будет понятно когда задавать режимы