подскажите как удобней реализовать условие и цикл, т.е. если да, то делаем это, если нет то возвращаемся к такому-то шагу..?
подскажите как удобней реализовать условие и цикл, т.е. если да, то делаем это, если нет то возвращаемся к такому-то шагу..?
более подробно про шаги и делаем это.. может вам вообще легче в Sfc писать если программа четко бьется на кускию
попробую, а как в st реализовать следующее...
если а=0 и в=0 то делаем это если нет то делаем другое...еще как в ст организовывется последовательность выполнения инструкции, т.е. если а=0 и в=1 то включаем таймер и только после таймера должно х присваеваться значение x:=true?
1. Сложное условие так и пишется
if a=0 and b=0 then
...
else
...
end_If;
А есть еще и elsif...
Почитайте справку и мануал по ST - там описано.
2. Если нужно ввести таймер - то по условию запускаете таймер.
if a=0 then
timer1(в зависимоти от таймера, Вам наверное нужно задержки включения или TP)...
if timer1.q then
...
End_if;
и если есть, то можно пример с Cfc с условиями циклами и.т.п.
может вам к нам на семинар???
вроде в начале марта планируется... причем расширенный...
я бы с удовольствием, но живу не в москве..(
ELSIF (A=1)AND(B=0) THEN timer1(IN:=GO_AWAY, PT:=T#5S);
ELSIF TIMER1.Q THEN X:=4;
это правильная запись..?
Ну, тогда приезжайте на семинар в Смоленск
Для ST есть стандартный 'автоматный' прием. Заводим некую целую переменную, которая выражает состояние системы. По ней делаем большой CASE и программа бьется на кучу мелких состояний, которыми очень легко управлять, программировать и отлаживать. Например, в одном состоянии взвели таймер и переключились на следующее, в нем ждем сработки таймера. Всегда можно проанализировать условия и прыгнуть на нужное состояние, просто путем изменения 1 переменной.
См. статьи Отладка прикладных ПЛК программ в CoDeSys начиная с часть 2.
++ Обратите внимание на оператор SEL и не придется такие сложные IF писать.
TIMER1.Q может стоять в 1 и раньше. Таймеры МЭК запускаются именно фронтами. Т.е. его надо вызвать раз с 0 на входе, затем еще раз с 1 на входе – тогда он уловит фронт и начнет отсчет.
Последний раз редактировалось Игорь Петров; 17.02.2010 в 11:57. Причина: TIMER
Function_block Wait
Var_input
End_var
Var_output
Ok:bool:=false;
End_var
Var
Zab:ton;
End_var
-----------------------
Cal Zab(in:=true)
Ld T#5s
St Zab.pt
Ld Zab.q
St Ok
Ret
подскажите, почему вот это не хочет работать, ошибок нет, но таймер не работает.