Просмотр полной версии : повторение функции Fbd
добрый день, подскажите как в языке Fbd сделать повтор выполнения функции после окончания ее с интервалом времени (зациклить), проблема в том что функция сравнения...ессно на входе логику не принимает только цифры...
lara197a
30.10.2010, 09:41
по фронту окончания выполнения действия взведите таймер.
по фронту выключения таймера запустите выполнение.
в этом то и проблема ... я новичок и конечно же многого не знаю ... но таймер я ставил, на входе выход функции (истина) на выходе имя функции Gt (больше) а он мне пишет "вы вызываете в St экземпляр, имеющий одинаковое с функцией имя. будет вызвана функция. используйте разные имена. " ... так я этого и хочу ... а как еще можно привязать на таймер вызов функции ??
Малышев Олег
01.11.2010, 10:04
Надо объявить экземпляр таймера например:
ton1:TON;
и использовать именно ton1 в программе.
хорошо, спасибо буду пробовать ... а St если я не ошибаюсь это отдельный язык ?? или Fbd и St неразлучны ?? мне с моими "желаниями" "порекомендовали" осваивать St ...
у меня каждый таймер имеет свое имя, я так понимаю он ругается на выход таймера с именем Gt (!) т.к функция сравнения имеет такое имя (gt) ... и следом выдает 4268 "необходимо выражение" я так понимаю он таки требует на выходе хоть что нить кроме злополучного Gt ...
но у меня весь смысл состоит в том что бы таки запустить функцию например через 30 мин после завершения оной ... получается мне в Fbd этого не добиться ??
если не ошибаюсь, на фбд любая функция выполняется постоянно. соответственно ваше сравнение будет постоянно сравниваться. вам нужно лишь будет в необходимый момент времени "запомнить" этот результат сравнения.
Малышев Олег
01.11.2010, 12:47
но у меня весь смысл состоит в том что бы таки запустить функцию например через 30 мин после завершения оной ... получается мне в Fbd этого не добиться ??
Используйте таймер отсрочки выключения
tof
если нужно что либо сделать однократно используйте детекторы R_TRIG - переднего фронта и F_TRIG - заднего.
я поставил таймер с задержкой включения Ton, ставлю 30 минут, на входе конец операции функции (то есть сравнение закончилось, следующее через 30 мин) но на выходе таймера я не могу поставить имя функции - ругается ... логику тоже не могу - функция с числами ... вот и получается замкнутый круг ...
если не ошибаюсь, на фбд любая функция выполняется постоянно. соответственно ваше сравнение будет постоянно сравниваться. вам нужно лишь будет в необходимый момент времени "запомнить" этот результат сравнения.
моя функция сравнения выполняется однократно независими от результата ... выполнил и все пока значение не изменится до возможности переключения, функция не работает ... так как в системе большое время отклика то необходимо повторное выполнение функции(например через полчаса) ... с помощью блоков я так понял не сделать ...
Малышев Олег
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
спасибо буду пробовать :)
интересный факт, если я на один выход "q1" плк привязал 2 "узла" например кнопку с таймером задержки выключения и функцию сравнения с таймером тр то кнопка почему то не работает ... на тр плк переключается (один раз) а при нажатии на кнопку время идет (таймер запустился) а выход Q1 не робит%)
смысл понял, поставил Rs триггер с таймером на сбросе все работает всем спасибо :)
до меня дошло что не обязательно делать повторение функции ))) она исполняется непрерывно, необходимо сделать повторение операции зависящей от этой функции ;)
Powered by vBulletin® Version 4.2.3 Copyright © 2025 vBulletin Solutions, Inc. All rights reserved. Перевод: zCarot