PDA

Просмотр полной версии : изменение логики работы выходов плк150



bigin
23.05.2020, 01:53
Приветствую, форумчане. Кто может поменять подсказать/логику работы выходов в программе. Нужно переделать логику работы выхода ПЛК-150 малое горение. Выход канала большого горения: если выход замкнут- большое горение, разомкнут - малое горение. Выход канала малого горения: если выход замкнут- работа горелки, разомкнут-ждущий режим.



Temperatura :=( TP_3+9)*0.99;

temp:= Temperatura; (* Индикатор температуры текущей*)
zadn := zadanie; zadanie := redakt; (*Индикатор температуры заданной*)

Gisteresis := gist; (*Индикатор гистерезиса*)
Delta := delt; (*Индикатор порога*)

maloe := Maloe_gorenie; (*Индикатор малого горения*)
bolshoe := Bolshoe_gorenie; (*Индикатор большого горения*)

(* Управление гистерезисом*)
IF Temperatura > zadanie THEN G:= TRUE; END_IF;
IF Temperatura < zadanie - Gisteresis THEN G:= FALSE; END_IF;

(* Управление гистерезисом дельты*)
IF Temperatura > zadanie - Delta THEN D:= TRUE; END_IF;
IF Temperatura < zadanie - Delta - Gisteresis THEN D:= FALSE; END_IF;



IF D=TRUE THEN
(*===================(*Включено большое горение опускаемся сверху*)==================*)
IF Temperatura < zadanie - Delta - Gisteresis THEN
MIN_RELE := FALSE; MIN_INDIKATOR := FALSE;
MAX_RELE :=TRUE; MAX_INDIKATOR := TRUE;
Maloe_gorenie:=0;
Bolshoe_gorenie :=8888;

ELSE


(*Включено малое горение*)
IF G = TRUE THEN
IF Temperatura < zadanie - Gisteresis THEN
MIN_RELE := TRUE; MIN_INDIKATOR := TRUE;
MAX_RELE := FALSE; MAX_INDIKATOR := FALSE;
Maloe_gorenie :=8888;
Bolshoe_gorenie :=0;
ELSE
MIN_RELE := FALSE; MIN_INDIKATOR := FALSE;
MAX_RELE := FALSE; MAX_INDIKATOR := FALSE;
Maloe_gorenie := 0;
Bolshoe_gorenie :=0;
END_IF;
ELSE
IF Temperatura < zadanie THEN
MIN_RELE := TRUE; MIN_INDIKATOR := TRUE;
MAX_RELE := FALSE; MAX_INDIKATOR := FALSE;
Maloe_gorenie :=8888;
Bolshoe_gorenie :=0;
ELSE
MIN_RELE := FALSE; MIN_INDIKATOR := FALSE;
MAX_RELE := FALSE; MAX_INDIKATOR := FALSE;
Maloe_gorenie := 0;
Bolshoe_gorenie :=0;
END_IF;
END_IF;

END_IF;



ELSE
(*===================(*Включено большое горение поднимаемся вверх*)==================*)
IF Temperatura < zadanie - Delta THEN
MIN_RELE := FALSE; MIN_INDIKATOR := FALSE;
MAX_RELE :=TRUE; MAX_INDIKATOR := TRUE;
Maloe_gorenie:=0;
Bolshoe_gorenie :=8888;

ELSE

(*Включено малое горение*)
IF G = TRUE THEN
IF Temperatura < zadanie - Gisteresis THEN
MIN_RELE := TRUE; MIN_INDIKATOR := TRUE;
MAX_RELE := FALSE; MAX_INDIKATOR := FALSE;
Maloe_gorenie :=8888;
Bolshoe_gorenie :=0;
ELSE
MIN_RELE := FALSE; MIN_INDIKATOR := FALSE;
MAX_RELE := FALSE; MAX_INDIKATOR := FALSE;
Maloe_gorenie := 0;
Bolshoe_gorenie :=0;
END_IF;
ELSE
IF Temperatura < zadanie THEN
MIN_RELE := TRUE; MIN_INDIKATOR := TRUE;
MAX_RELE := FALSE; MAX_INDIKATOR := FALSE;
Maloe_gorenie :=8888;
Bolshoe_gorenie :=0;
ELSE
MIN_RELE := FALSE; MIN_INDIKATOR := FALSE;
MAX_RELE := FALSE; MAX_INDIKATOR := FALSE;
Maloe_gorenie := 0;
Bolshoe_gorenie :=0;
END_IF;
END_IF;

END_IF;

END_IF;

krollcbas
23.05.2020, 09:59
Вот эту всю неимоверную конструкцию - в утиль бы.
Использую такой подход


CASE State OF
0:
State:=1;
1:(*С этого начинаем*)
;
END_CASE;