Вход

Просмотр полной версии : повторение функции Fbd



Olk_74
29.10.2010, 13:05
добрый день, подскажите как в языке Fbd сделать повтор выполнения функции после окончания ее с интервалом времени (зациклить), проблема в том что функция сравнения...ессно на входе логику не принимает только цифры...

lara197a
30.10.2010, 09:41
по фронту окончания выполнения действия взведите таймер.
по фронту выключения таймера запустите выполнение.

Olk_74
01.11.2010, 09:59
в этом то и проблема ... я новичок и конечно же многого не знаю ... но таймер я ставил, на входе выход функции (истина) на выходе имя функции Gt (больше) а он мне пишет "вы вызываете в St экземпляр, имеющий одинаковое с функцией имя. будет вызвана функция. используйте разные имена. " ... так я этого и хочу ... а как еще можно привязать на таймер вызов функции ??

Малышев Олег
01.11.2010, 10:04
Надо объявить экземпляр таймера например:
ton1:TON;

и использовать именно ton1 в программе.

Olk_74
01.11.2010, 12:26
хорошо, спасибо буду пробовать ... а St если я не ошибаюсь это отдельный язык ?? или Fbd и St неразлучны ?? мне с моими "желаниями" "порекомендовали" осваивать St ...

Olk_74
01.11.2010, 12:33
у меня каждый таймер имеет свое имя, я так понимаю он ругается на выход таймера с именем Gt (!) т.к функция сравнения имеет такое имя (gt) ... и следом выдает 4268 "необходимо выражение" я так понимаю он таки требует на выходе хоть что нить кроме злополучного Gt ...

Olk_74
01.11.2010, 12:35
но у меня весь смысл состоит в том что бы таки запустить функцию например через 30 мин после завершения оной ... получается мне в Fbd этого не добиться ??

swerder
01.11.2010, 12:38
если не ошибаюсь, на фбд любая функция выполняется постоянно. соответственно ваше сравнение будет постоянно сравниваться. вам нужно лишь будет в необходимый момент времени "запомнить" этот результат сравнения.

Малышев Олег
01.11.2010, 12:47
но у меня весь смысл состоит в том что бы таки запустить функцию например через 30 мин после завершения оной ... получается мне в Fbd этого не добиться ??

Используйте таймер отсрочки выключения
tof
если нужно что либо сделать однократно используйте детекторы R_TRIG - переднего фронта и F_TRIG - заднего.

Olk_74
01.11.2010, 13:38
я поставил таймер с задержкой включения Ton, ставлю 30 минут, на входе конец операции функции (то есть сравнение закончилось, следующее через 30 мин) но на выходе таймера я не могу поставить имя функции - ругается ... логику тоже не могу - функция с числами ... вот и получается замкнутый круг ...

Olk_74
01.11.2010, 13:44
если не ошибаюсь, на фбд любая функция выполняется постоянно. соответственно ваше сравнение будет постоянно сравниваться. вам нужно лишь будет в необходимый момент времени "запомнить" этот результат сравнения.

моя функция сравнения выполняется однократно независими от результата ... выполнил и все пока значение не изменится до возможности переключения, функция не работает ... так как в системе большое время отклика то необходимо повторное выполнение функции(например через полчаса) ... с помощью блоков я так понял не сделать ...

Малышев Олег
01.11.2010, 14:03
Нет времени рисовать в FBD - напишу на ст - если надо переведите на FBD.

var ton1:TON;
tp1:TP;
f_t:F_TRIG;
....

(*Вариант 1 - сравниваем раз в 30 мин*)
ton1(in:=not ton1.Q,pt:=t#30m);
if (a>b) and ton1.q then (**)
end_if

(*Вариант 2 - с момента как выполнится условие - отчитываем 30 мин*)
tp1(in:=(a>b),pt:=t#30m);
r_t(CLK:=tp1.q);
if r_t.Q then (*Ровно через 30 мин после срабатывания на больше*)
end_if

Olk_74
01.11.2010, 14:12
спасибо буду пробовать :)

Olk_74
01.11.2010, 14:25
интересный факт, если я на один выход "q1" плк привязал 2 "узла" например кнопку с таймером задержки выключения и функцию сравнения с таймером тр то кнопка почему то не работает ... на тр плк переключается (один раз) а при нажатии на кнопку время идет (таймер запустился) а выход Q1 не робит%)

Olk_74
03.11.2010, 12:00
смысл понял, поставил Rs триггер с таймером на сбросе все работает всем спасибо :)

Olk_74
03.11.2010, 12:01
до меня дошло что не обязательно делать повторение функции ))) она исполняется непрерывно, необходимо сделать повторение операции зависящей от этой функции ;)