PDA

Просмотр полной версии : Прошу помощи с ST



FallenDAY
16.05.2017, 19:50
Здравствуйте) 2 дня топчусь на одном и том же месте, башка уже не варит)) может кто подскажет как мне осуществить переход на второй вентилятор если реле перепада давления не активно после проверки работы первого вентилятора 10сек. Не знаю как с переменной А3 послать 1 импульс, в результате её постоянной активности TOF2 постоянно активен и не начинает отсчёт. Всё что до вентиляции это проверка на разрежения запуска системы. Вот код:

VAR_INPUT
RKF AT %IX8.0: BOOL; (*Реле контроля фаз*)
AvarSTOP AT %IX8.1: BOOL; (*Аварийный СТОП*)
RDV1 AT %IX8.2: BOOL; (*Реле давления входной воды*)
START AT %IX8.3: BOOL; (*Запуск устаовки*)
STOP AT %IX8.4: BOOL; (*Остановка устаовки*)
RPD AT %IX8.5: BOOL; (*Реле перепада давления на вентиляцию*)
VAR_OUTPUT
FAN1 AT %QX2.2: BOOL; (*Вентилятор 1*)
FAN2 AT %QX2.3: BOOL; (*Вентилятор 2*)

IF RKF=TRUE AND RDV1=TRUE AND AvarSTOP=FALSE AND BUM=FALSE
THEN Control := TRUE;
ELSE Control := FALSE;
END_IF;
IF START=TRUE AND Control=TRUE
THEN A1 := TRUE;
ELSE A1 := FALSE;
END_IF;
(*Вентиляция*)
SR3(SET1:= A1, RESET:= STOP);
A2:= SR3.Q1;
TOF1(IN := A1 OR RPD, PT:= T#10s);
TOF1FAN1 := TOF1.Q;
SR1(SET1:= START, RESET:= NOT TOF1FAN1);
FAN1 := SR1.Q1;
IF RPD=FALSE AND FAN1=FALSE AND A2=TRUE
THEN A3 := TRUE;
ELSE A3 := FALSE;
END_IF;
TOF2(IN := A3, PT:= T#10s);
TOF2FAN2 := TOF2.Q;

Вольд
16.05.2017, 20:13
Оператор CASE надо использовать и не будет никаких проблем.

FallenDAY
16.05.2017, 20:26
Спасибо, я пробовал. Итог тот же самый. Может я его не туда ставил, подскажи в какое место алгоритма поставить?

FallenDAY
16.05.2017, 20:54
вместо этого алгоритма

А что будет управлять Int переменной? у меня ж дискретные сигналы.

Dimensy
17.05.2017, 11:38
немного грубо, но работает
VAR
Start: BOOL;
RPD: BOOL;
Fan1, Fan2: BOOL;
TP1,TP2: TP;
Alarm: BOOL;
END_VAR

TP1(IN:=Start, PT:=t#10s);
Fan1:=TP1.Q OR (Start AND RPD AND NOT Fan2);
TP2(IN:=(Start AND NOT Fan1), PT:=t#10s);
Fan2:=TP2.Q OR (Start AND RPD AND NOT Fan1);
Alarm:=Start AND NOT Fan1 AND NOT Fan2;

FallenDAY
17.05.2017, 20:35
немного грубо, но работает
VAR
Start: BOOL;
RPD: BOOL;
Fan1, Fan2: BOOL;
TP1,TP2: TP;
Alarm: BOOL;
END_VAR

TP1(IN:=Start, PT:=t#10s);
Fan1:=TP1.Q OR (Start AND RPD AND NOT Fan2);
TP2(IN:=(Start AND NOT Fan1), PT:=t#10s);
Fan2:=TP2.Q OR (Start AND RPD AND NOT Fan1);
Alarm:=Start AND NOT Fan1 AND NOT Fan2;

Благодарю))) А я там намудрил, оказалось элементарно)

Dimensy
18.05.2017, 07:35
Благодарю))) А я там намудрил, оказалось элементарно)
Вам надо по-изучать булеву алгебру. Для начала, найдите книжку "Программируемые логические контроллеры" И.Г.Минаев