Просмотр полной версии : определение стремления
здраствуйте, подскажите как реализовать определение "стремления" числа. задача следующая, есть число например 12, и есть переменная например реверсивный счетчик, как определить приближается или отдаляется переменная от заданного значения. проблема с выделением значения по времени и привязки значения к этому промяжутку времени.
Chupakabra
25.12.2008, 15:28
здраствуйте, подскажите как реализовать определение "стремления" числа. задача следующая, есть число например 12, и есть переменная например реверсивный счетчик, как определить приближается или отдаляется переменная от заданного значения. проблема с выделением значения по времени и привязки значения к этому промяжутку времени.
На направление движения указывает вектор скорости. А скорость это первая производная перемещения
Николаев Андрей
25.12.2008, 15:29
Отвлекитесь от заданного значения и проверяйте стало ли новое значение в следующий интервал времени больше\меньше значения этой же переменной в предыдущий момент времени.
Для "создания момента времени" используйте ФБ Blink из библиотеки Util.lib
Если значение стало больше - значит bool1 - true (пребавляется)
Если значение стало меньше - значит bool2 - true (уменьшается)
Если не изменилось, то к примеру bool1 и bool2 - false.
Ну и уже отдельным куском программы сравниваете это число с уставкой (12) и принимаете решение что же необходимо с этим делать.
спосибо андрей, сейчас поработаю с библиотекой
BLINK
Входит в util.lib.
Функциональный блок 'генератор прямоугольных импульсов'
Входы: ENABLE типа BOOL, TIMELOW и TIMEHIGH типа TIME. Выход OUT типа BOOL.
Генератор запускается по входу ENABLE = TRUE. Длительность импульса задается TIMEHIGH, длительность паузы TIMELOW.
Что то я не понял как он в данной ситуации поможет, здесь задается длительность и скважность импульса и все?
Для "создания момента времени" используйте ФБ Blink из библиотеки Util.lib
или так... ('генератор единичного импульса')
VAR
TON_START: TON;
END_VAR
...............
TON_START(IN:=NOT(TON_START.Q) , PT:=T#...)
IF TON_START.Q THEN
....................................
Отвлекитесь от заданного значения и проверяйте стало ли новое значение в следующий интервал времени больше\меньше значения этой же переменной в предыдущий момент времени.
Для "создания момента времени" используйте ФБ Blink из библиотеки Util.lib. Здраствуйте Андрей опишите поподробней что и куда вставить в ФБ Blink.
Малышев Олег
26.12.2008, 09:16
Так есть ФБ DERIVATIVE из util.lib
И не стоит мучить блинк.
В качестве входа вычисления производной можно использовать Невязку=(Уставка-Вход)
А время дифференцирования надо брать из Cycle Time Input?
на выходе фб Derivative постоянно ноль
Николаев Андрей
26.12.2008, 10:42
блинкер просто дает прямоугольный импульс. использовать как часы.
время включения, время выключения.
чтобы ввести интервал времени в течении которого вам надо замерять.
например раз в секунду - тогда включ: 2мс и выкл:58мс
и он постоянно с интервалом в 1 секунду будет давать краткосрочный импульс.
Малышев Олег
26.12.2008, 11:44
попробуйте вызывать из отдельной задачи скажем раз в 10 мс
хорошо тогда такой вопрос как мне иметь переменную которая будет отставать от реальной на 4 секунды
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) Попробую придумать программу - если получится
3) попробую придумать программу - если получится
было бы здорово.
Powered by vBulletin® Version 4.2.3 Copyright © 2024 vBulletin Solutions, Inc. All rights reserved. Перевод: zCarot