PDA

Просмотр полной версии : определение стремления



Юрий(!)
25.12.2008, 15:12
здраствуйте, подскажите как реализовать определение "стремления" числа. задача следующая, есть число например 12, и есть переменная например реверсивный счетчик, как определить приближается или отдаляется переменная от заданного значения. проблема с выделением значения по времени и привязки значения к этому промяжутку времени.

Chupakabra
25.12.2008, 15:28
здраствуйте, подскажите как реализовать определение "стремления" числа. задача следующая, есть число например 12, и есть переменная например реверсивный счетчик, как определить приближается или отдаляется переменная от заданного значения. проблема с выделением значения по времени и привязки значения к этому промяжутку времени.

На направление движения указывает вектор скорости. А скорость это первая производная перемещения

Николаев Андрей
25.12.2008, 15:29
Отвлекитесь от заданного значения и проверяйте стало ли новое значение в следующий интервал времени больше\меньше значения этой же переменной в предыдущий момент времени.
Для "создания момента времени" используйте ФБ Blink из библиотеки Util.lib
Если значение стало больше - значит bool1 - true (пребавляется)
Если значение стало меньше - значит bool2 - true (уменьшается)
Если не изменилось, то к примеру bool1 и bool2 - false.

Ну и уже отдельным куском программы сравниваете это число с уставкой (12) и принимаете решение что же необходимо с этим делать.

Юрий(!)
25.12.2008, 15:31
спосибо андрей, сейчас поработаю с библиотекой

Юрий(!)
25.12.2008, 15:39
BLINK
Входит в util.lib.

Функциональный блок 'генератор прямоугольных импульсов'

Входы: ENABLE типа BOOL, TIMELOW и TIMEHIGH типа TIME. Выход OUT типа BOOL.

Генератор запускается по входу ENABLE = TRUE. Длительность импульса задается TIMEHIGH, длительность паузы TIMELOW.

Что то я не понял как он в данной ситуации поможет, здесь задается длительность и скважность импульса и все?

Jeck
25.12.2008, 19:16
Для "создания момента времени" используйте ФБ Blink из библиотеки Util.lib
или так... ('генератор единичного импульса')
VAR
TON_START: TON;
END_VAR
...............
TON_START(IN:=NOT(TON_START.Q) , PT:=T#...)
IF TON_START.Q THEN
....................................

Юрий(!)
26.12.2008, 09:10
Отвлекитесь от заданного значения и проверяйте стало ли новое значение в следующий интервал времени больше\меньше значения этой же переменной в предыдущий момент времени.
Для "создания момента времени" используйте ФБ Blink из библиотеки Util.lib. Здраствуйте Андрей опишите поподробней что и куда вставить в ФБ Blink.

Малышев Олег
26.12.2008, 09:16
Так есть ФБ DERIVATIVE из util.lib
И не стоит мучить блинк.

В качестве входа вычисления производной можно использовать Невязку=(Уставка-Вход)

Юрий(!)
26.12.2008, 09:24
А время дифференцирования надо брать из Cycle Time Input?

Юрий(!)
26.12.2008, 10:28
на выходе фб Derivative постоянно ноль

Николаев Андрей
26.12.2008, 10:42
блинкер просто дает прямоугольный импульс. использовать как часы.
время включения, время выключения.
чтобы ввести интервал времени в течении которого вам надо замерять.
например раз в секунду - тогда включ: 2мс и выкл:58мс
и он постоянно с интервалом в 1 секунду будет давать краткосрочный импульс.

Малышев Олег
26.12.2008, 11:44
попробуйте вызывать из отдельной задачи скажем раз в 10 мс

Юрий(!)
26.12.2008, 12:27
хорошо тогда такой вопрос как мне иметь переменную которая будет отставать от реальной на 4 секунды

Jeck
26.12.2008, 12:50
VAR
TON_START: TON;
X_0: REAL;
X_1: REAL;
END_VAR
VAR_INPUT
X: REAL;
END_VAR
VAR_OUTPUT
DELTA_X: REAL;
END_VAR
...............
X_1:=X;
TON_START(IN:=NOT(TON_START.Q) , PT:=T#4s)
IF TON_START.Q THEN
DELTA_X:=X_1-X_0;
X_0:=X_1;
END_IF

Малышев Олег
26.12.2008, 13:24
1) Как она работает можно посмотреть открыв в codesys файл util.lib (правда - интересно!)
2) Вопрос - что подаете на входы. TM - время между вызовами в мсек. Для эксперимента можно попробовать поувеличивать значения между вызовами на N.
3) Попробую придумать программу - если получится

Юрий(!)
27.12.2008, 09:07
3) попробую придумать программу - если получится

было бы здорово.