PDA

Просмотр полной версии : Язык ST. Временная задержка.



neoarey
17.03.2011, 22:27
Здравствуйте! Срочно нужна Ваша помощь...

Подскажите пожалуйста как сделать временную задержку на языке ST.

Условие:если вход 1 труе, то выход 3 труе и через 3 сек выход 5 тоже становится труе.

IF iblnInPut1 THEN
qblnOutPut3:=TRUE;
TP1(IN:=TRUE, PT:=t#3s);
qblnOutPut5:=TRUE;
ELSE
qblnOutPut3:=FALSE;
qblnOutPut5:=FALSE;
END_IF

JIexa21
17.03.2011, 22:39
VAR
TP1:TON;
end_var

qblnOutPut3:= iblnInPut1;
TP1(IN:=iblnInPut1, PT:=t#3s);
qblnOutPut5:=TP1.Q;

Что-то типа этого...

neoarey
18.03.2011, 10:38
Какой то странный код... Это точно ST?
А если ещё через секунду выходы 7,8 подключить? Так будет выглядеть:

qblnOutPut3:= iblnInPut1;
TP1(IN:=iblnInPut1, PT:=t#3s);
qblnOutPut5:=TP1.Q;
TP2(IN:=iblnInPut1, PT:=t#1s);
qblnOutPut5:=TP7.Q;
qblnOutPut5:=TP8.Q;

И ещё вопрос. Допустим мы получили условие (в данном случае вход 1 труе). В зависимости от этого условия выполняется программа: загорается 3 выход, через 3 секунды 5 выход, ещё через секунду 7 и 8 выходы. Так вот сам вопрос. Если вход 1 становиться фалзе, т.е. условие не действует, программа продолжается?

Николаев Андрей
18.03.2011, 10:43
Программа продолжается не зависимо от состояния переменных.
Будет ли работать таймер - Вы это хотели узнать.
Работа с таймерами в CoDeSys - вещь постоянная - рекомендую один раз сесть и разобраться с этим вопросом.
Графическое отображение работы таймеров приведено в мануале и хелпе.

НУ и если вся задача такая дискретная - гляньте на на язык LD

neoarey
18.03.2011, 10:52
Хорошо, тогда я расскажу применительно к своему станку. Допустим выходы отвечают за движение пневмоцилиндров. Нужна кнопка сброса (грибок) которая возвращает все цилиндры в исходное положение. Т.е. на выходах (независимо от того окончилась программа или нет) должно установится фалзе.

P.S. форум для того и нужен что бы задавать вопросы...

Николаев Андрей
18.03.2011, 10:55
Так никто и не против - задавайте.
А еще форум очень помогает находить ответы на свои вопросы ;)
Например тут, в одной из самых верхних тем:
http://www.owen.ru/forum/showpost.php?p=10458&postcount=14

neoarey
18.03.2011, 11:38
Спасибо, Андрей! Посмотрю...

neoarey
18.03.2011, 13:00
Подскажите подскажите ещё. Вот пример из архива:

(*задержка включения: если вход 3 true, то через 5 секунд выход 3 true*)

tim1(IN := in3, PT := T#5s);
out3:=tim1.Q;

А если нужно условие от нескольких входов? Как будет?

(*задержка включения: если вход 3 true и вход 4 true , то через 5 секунд выход 3 true и через 7 секунд выход 4 true*)

Заранее спасибо!

swerder
18.03.2011, 14:45
tim1(in:=in3 and in4, pt:=t#5s);
out3:=tim1.q;
tim2(in:=in3 and in4, pt:=t#7s);
out4:=tim2.q;

neoarey
18.03.2011, 15:08
Благодарю!

dmitry90
26.03.2011, 01:15
Если в программе нужно вычислять множество всяких задержек, да и вообще логика достаточно сложная, лучше использовать конечные автоматы. Пример на ST есть здесь: http://robot-develop.org/archives/1440.