PDA

Просмотр полной версии : Описание TON



Stas
21.12.2020, 08:03
Здравствуйте, не нашел описания таймера с задержкой включения, а именно описание его выхода на языке ST.
что написать дальше нужно, чтоб привязать выход таймера к дискретному выходу контроллера?

Пишу программу:
IF ai17<0.8 THEN tmp:=1;
ELSE tmp:=0;
END_IF;
TONInst (IN:=tmp, PT:=T#30s);

ferret_maybe
21.12.2020, 08:21
TONInst (IN:= ai17<0.8, PT:=T#30s);
Out:= TONInst.Q;

приборист
21.12.2020, 11:23
ну или
TONInst (IN:= ai17<0.8, PT:=T#30s, Q=>Out);

а т.к. время - константа, в объяве
TONInst : TON := (PT:=T#30s);
в коде
TONInst (IN:= ai17<0.8, Q=>Out);

А потом в коде нашел таймер:
Агаааа, а гдеж ему время то задають, пойду поищу :)

Stas
12.08.2021, 13:58
Написал 2 таймера, которые сбрасывают 1 дискретный выход на контроллере:
VAR
AVAR_TOF: TP;
AVAR_TOF_2:TP;

IF bitmodul1.4=1
OR bitmodul1.5=1
THEN AVAR_TOF (IN:=bitmodul1.4, PT:= T#15s);AVAR_TOF_2 (IN:=bitmodul1.5, PT:= T#5s);
golout5_12.1:= AVAR_TOF.Q OR AVAR_TOF_2.Q;
ELSE golout5_12.1:=1;
END_IF;

При этом работает так: Приходит сигнал bitmodul1.4 = 1, таймер ведёт обратный отсчет и сбрасывает выход golout5_12.1
далее bitmodul1.4 стал равным 0, и при следующем разе когда bitmodul1.4 = 1 таймер ничего не отсчитывает и сразу сбрасывает выход golout5_12.1
Со вторым таймером та же история, в чём причина?

petera
12.08.2021, 14:13
Написал 2 таймера, которые сбрасывают 1 дискретный выход на контроллере:
VAR
AVAR_TOF: TP;
AVAR_TOF_2:TP;

IF bitmodul1.4=1
OR bitmodul1.5=1
THEN AVAR_TOF (IN:=bitmodul1.4, PT:= T#15s);AVAR_TOF_2 (IN:=bitmodul1.5, PT:= T#5s);
golout5_12.1:= AVAR_TOF.Q OR AVAR_TOF_2.Q;
ELSE golout5_12.1:=1;
END_IF;

При этом работает так: Приходит сигнал bitmodul1.4 = 1, таймер ведёт обратный отсчет и сбрасывает выход golout5_12.1
далее bitmodul1.4 стал равным 0, и при следующем разе когда bitmodul1.4 = 1 таймер ничего не отсчитывает и сразу сбрасывает выход golout5_12.1
Со вторым таймером та же история, в чём причина?
....
ELSE golout5_12.1:=1; AVAR_TOF (IN:=FALSE);AVAR_TOF_2 (IN:=FALSE);

krollcbas
12.08.2021, 17:06
Примерно так выглядит код блока TON для Мастерскада 4D
56531

Sergey666
12.08.2021, 17:30
Написал 2 таймера, которые сбрасывают 1 дискретный выход на контроллере:
VAR
AVAR_TOF: TP;
AVAR_TOF_2:TP;

IF bitmodul1.4=1
OR bitmodul1.5=1
THEN AVAR_TOF (IN:=bitmodul1.4, PT:= T#15s);AVAR_TOF_2 (IN:=bitmodul1.5, PT:= T#5s);
golout5_12.1:= AVAR_TOF.Q OR AVAR_TOF_2.Q;
ELSE golout5_12.1:=1;
END_IF;

При этом работает так: Приходит сигнал bitmodul1.4 = 1, таймер ведёт обратный отсчет и сбрасывает выход golout5_12.1
далее bitmodul1.4 стал равным 0, и при следующем разе когда bitmodul1.4 = 1 таймер ничего не отсчитывает и сразу сбрасывает выход golout5_12.1
Со вторым таймером та же история, в чём причина?

Никогда и ни при каких условиях не объявляйте функциональный блок внутри конструкции типа IF...Then, ибо это говнокод, это первое.
Второе - какой нахрен обратный отсчет? У вас таймер импульса TP, посмотрите в справке как он работает.
Третье- сама причина, почему нельзя делать первое: как только условия пропали, экземпляр вашего ФБ TP замер в коматозе, а при следующем появлении условий по IF радостно воскрес!
И в четвертых- что это за индокод, т.е вариант решения задачи наиболее неочевидным хитровывернутым способом? https://owen.ru/forum/showthread.php?t=34129&p=361959&viewfull=1#post361959