Вход

Просмотр полной версии : Работа TP



sleyer
01.05.2012, 14:51
Здравствуйте. Помогите разобраться.
В приложенном рисунке:
В цепи 6 сравниваются две величины и, если условие выполняется, вход IN ФБ DELEY1 = true. После этого начинается отсчет времени на выходе ET.
В цепи 5 сравнивается время PT и ET и когда ET=PT, OK1 = true.
Цепь 5 работает как МНЕ надо, когда DELEY1.IN в течении отсчета времени не меняется и равен TRUE, или меняется но в момент завершения отсчета времени снова равен TRUE.
Когда по завершению отсчета DELEY1.IN = FALSE переменная OK1 так и остается FALSE.
Если в цепи 5 сравнивать (DELAY1.ET+T#1s) и DELAY1.PT, то OK1 принимает TRUE, когда DELAY1.ET=T#9s.
Сравнивал с помощью EQ - результат тот же.
Подскажите пожалуйста где ошибка.

capzap
01.05.2012, 16:25
Здравствуйте. Помогите разобраться.
В приложенном рисунке:
В цепи 6 сравниваются две величины и, если условие выполняется, вход IN ФБ DELEY1 = true. После этого начинается отсчет времени на выходе ET.
В цепи 5 сравнивается время PT и ET и когда ET=PT, OK1 = true.
Цепь 5 работает как МНЕ надо, когда DELEY1.IN в течении отсчета времени не меняется и равен TRUE, или меняется но в момент завершения отсчета времени снова равен TRUE.
Когда по завершению отсчета DELEY1.IN = FALSE переменная OK1 так и остается FALSE.
Если в цепи 5 сравнивать (DELAY1.ET+T#1s) и DELAY1.PT, то OK1 принимает TRUE, когда DELAY1.ET=T#9s.
Сравнивал с помощью EQ - результат тот же.
Подскажите пожалуйста где ошибка.
А почему ошибка, попробуйте РТ задать T#10s1ms, от одной миллисекунды же неубудет :)

sleyer
01.05.2012, 19:00
А если вам надо получить фиксированный Ok1 через 10с после любого превышения Formpress над Ustavka, можно, например, так :
TON( IN := TON.IN OR превышение, PT := 10с, Q=>Ok1 );

Formpress в процессе отсчета ET может быть меньше Ustavka (и это нормально).
Если я правильно понял, TON.IN:=TRUE запускает отсчет. Как только TON.IN := FALSE, TON.ET сбрасывается на ноль. TON.IN:=TRUE отсчет начинается с нуля.
TP подходит тем, что не реагирует на свой IN.
Задача простая:
После достижения Formpress >=(однократно) Ustavka идет выполнение остальных цепей в течении определенного времени (в частности 10 сек). Затем переход к следующему шагу SFC.

sleyer
01.05.2012, 19:05
А почему ошибка, попробуйте РТ задать T#10s1ms, от одной миллисекунды же неубудет :)

Я так понимаю ПЛК просто не успевает сравнить DELEY1.PT и ET,а разу присваивает ET ноль.
Если ничего не придумаю, так и зделаю:)
В Delphi такого не бывает... не привычно.

sleyer
01.05.2012, 19:14
Извините за упоминание "Delphi". Я смотрю на форуме это больная тема.;)

capzap
01.05.2012, 19:23
Я так понимаю ПЛК просто не успевает сравнить DELEY1.PT и ET,а разу присваивает ET ноль.
Если ничего не придумаю, так и зделаю:)
В Delphi такого не бывает... не привычно.

ET и PT сравнивается как в пятой так и в шестой цепи, специфика программирования следущая, что до запуска непосредственно блока ТР значения хранят состояния с прошлого цикла и в пятой цепи равенства нет, в шестой цепи происходит очередная итерация блока ТР, наступает равенство, блок выполнил свою работу, блок может "удалиться" (значение ЕТ обнуляется), при следущем цикле в пятой цепи, равенства уже не будет

sleyer
01.05.2012, 19:48
ET и PT сравнивается как в пятой так и в шестой цепи, специфика программирования следущая, что до запуска непосредственно блока ТР значения хранят состояния с прошлого цикла и в пятой цепи равенства нет, в шестой цепи происходит очередная итерация блока ТР, наступает равенство, блок выполнил свою работу, блок может "удалиться" (значение ЕТ обнуляется), при следущем цикле в пятой цепи, равенства уже не будет

Все очень понятно и доступно. Спасибо.

sleyer
01.05.2012, 20:00
//////////////

Да, да. Все верно. Я ни хрена не понимаю... Могу все темы так начинать.
НО, может более полезно будем тратить время на форуме.

Вы, наверняка, понимаете, может по подробней объясните, что хотели сказать:
TON.IN - вып."другие цепи"
TON.Q - выход в другой шаг
А в рамках SFC еще проще - при "превышении" переход на другой шаг с "другими цепями" и с выходом по "родному" таймеру (10с)

Спасибо.
P.S. И я уже понял, что Delphi не причем.

sleyer
02.05.2012, 12:24
Спасибо за столь развернутый ответ.:cool:
Не совсем понял на счет case. Читал в книге Петрова "Программируемые контроллеры" раздел SFC. Пробовал альтернативные ветви делать с разными условиями входа, переходы на произвольный шаг, параллельные ветви - ничего не получается (у меня).
В итоге получил следующее:
Init->
Step0 (FBD)
цепь 1
цепь 2
....
цепь 10
цепь 11 (PID-регулятор);
цепь 12 (if Press>=Ustavka then trans0:=true)
trans0->
Step1
скопировал из Step0 цепи 1-11, а вместо цепи 12:
ton(in:=true, pt := 10s);
trans1 := ton.q;
trans1-> init
Коряво конечно, но ума на большее пока не хватает.

sleyer
03.05.2012, 09:41
цепи 1..11 - и в Step0 и в Step1. Зачем тогда куда-то переходить ?

Если я в step0 цепь 12 (if Press>=Ustavka then trans0:=true) изменю на
if Press>=Ustavka then ton(in:=true,PT:=10s),
то когда (Press>=Ustavka) становится FALSE отсчет времени в ton.et останавливается, (Press>=Ustavka) становится TRUE - продолжается. А мне нужно, чтобы отсчет не останавливался, даже если (Press>=Ustavka) становится FALSE.
Есть идеи?

capzap
03.05.2012, 10:59
Семафор добавте

sleyer
03.05.2012, 12:52
Семафор добавте

Как раз то, что я искал!!! РЕСПЕКТ:cool:
Спасибо.