PDA

Просмотр полной версии : PID_FUNCTION: Как правильно использовать без охладителя?



Yegor
11.02.2014, 07:01
У PID_FUNCTION диапазон на выходе от −100 до +100, а у нагревателя без охладителя — от 0 до 100. Как привести один диапазон к другому?

Уже пробовал 1: игнорировать отрицательные значения. Получается ерунда после перерегулирования на подходе к уставке сверху, когда значения на управляющем выходе отрицательные. Пролетаем вниз из-за не включившегося вовремя нагревателя.

Уже пробовал 2: сдвинуть на 100 вперёд (0 - 200) и поделить на 2. Получается ерунда на подходе к уставке снизу, т.к. нагреватель должен уже отключиться, а он по-прежнему жарит в пол-накала — пролетаем вверх.

Василий Кашуба
11.02.2014, 09:46
У PID_FUNCTION диапазон на выходе от −100 до +100, а у нагревателя без охладителя — от 0 до 100. Как привести один диапазон к другому?

Уже пробовал 1: игнорировать отрицательные значения. Получается ерунда после перерегулирования на подходе к уставке сверху, когда значения на управляющем выходе отрицательные. Пролетаем вниз из-за не включившегося вовремя нагревателя.

Уже пробовал 2: сдвинуть на 100 вперёд (0 - 200) и поделить на 2. Получается ерунда на подходе к уставке снизу, т.к. нагреватель должен уже отключиться, а он по-прежнему жарит в пол-накала — пролетаем вверх.
Поставьте Min = 0, а не "-1"

petera
11.02.2014, 10:48
У PID_FUNCTION диапазон на выходе от −100 до +100, а у нагревателя без охладителя — от 0 до 100. Как привести один диапазон к другому?

Уже пробовал 1: игнорировать отрицательные значения. Получается ерунда после перерегулирования на подходе к уставке сверху, когда значения на управляющем выходе отрицательные. Пролетаем вниз из-за не включившегося вовремя нагревателя.

Уже пробовал 2: сдвинуть на 100 вперёд (0 - 200) и поделить на 2. Получается ерунда на подходе к уставке снизу, т.к. нагреватель должен уже отключиться, а он по-прежнему жарит в пол-накала — пролетаем вверх.
LIN_TRAFO Вам в помощь
11836

Yegor
11.02.2014, 13:07
Поставьте Min = 0, а не "-1"Где?
LIN_TRAFO Вам в помощь«Уже пробовал 2».

Sergey666
11.02.2014, 13:38
А что , Ymin :=0 ?; Ymax:=100 ; нельзя задать ?
Ага , этого нетути.
Поможет функция(формула линейной апроксимации по 2м точкам) или у Оската F_lin2.
Выходной диапазон -100...+100 наложить на 0...100 , тогда -100 будет соответствовать 0 , а 100 , соотв.-100.

petera
11.02.2014, 14:18
Где?«Уже пробовал 2».
LIN_TRAFO это не тоже самое, что
Уже пробовал 2: сдвинуть на 100 вперёд (0 - 200) и поделить на 2
А именно вот это
Поможет функция(формула линейной апроксимации по 2м точкам) или у Оската F_lin2.
Выходной диапазон -100...+100 наложить на 0...100 , тогда -100 будет соответствовать 0 , а 100 , соотв.-100.
Сигнал с выхода PID в диапазоне от -100 до 100 будет преобразован к диапазону сигнала для нагревателя от 0 до 100

ЗЫ. А что бы не "пролетало" уставку снизу или сверху нужно еще и коэффициенты PID правильно подобрать.

petera
11.02.2014, 14:58
У PID_FUNCTION диапазон на выходе от −100 до +100, а у нагревателя без охладителя — от 0 до 100. Как привести один диапазон к другому?

Уже пробовал 1: игнорировать отрицательные значения. Получается ерунда после перерегулирования на подходе к уставке сверху, когда значения на управляющем выходе отрицательные. Пролетаем вниз из-за не включившегося вовремя нагревателя.

Уже пробовал 2: сдвинуть на 100 вперёд (0 - 200) и поделить на 2. Получается ерунда на подходе к уставке снизу, т.к. нагреватель должен уже отключиться, а он по-прежнему жарит в пол-накала — пролетаем вверх.
Ой чувствую, что Вы ждете от PID регулятора работы в релейном режиме ВКЛ/ОТКЛ.:)
По тому что,
на подходе к уставке сверху, когда значения на управляющем выходе отрицательные. Пролетаем вниз из-за не включившегося вовремя нагревателя
на подходе к уставке снизу, т.к. нагреватель должен уже отключиться, а он по-прежнему жарит в пол-накала — пролетаем вверх
Так PID регулятор, по крайней мере этот работать не может, т.к. нагреватель включен всегда, а вот мощность на нем меняется плавно и в установившемся режиме должна быть в диапазоне от 0 до 100%.
Т.е. в установившемся режиме, когда текущее значение температуры равно уставке, на выходе PID может быть любое значение между заданными MIN=-100 и MAX=100, а не возможно ожидаемое Вами "0". Какое? Такое, которое воздействуя на нагреватель, заставляет его работать с такой мощностью, которой достаточно для соблюдения равенства текущей температуры заданной уставке.
И в этом состоянии выход PID останется сколь угодно долго до тех пор, пока из-за возмущающих факторов, текущая температура не отклонится в ту или иную сторону от заданной. При этом PID найдет новое значение для своего выхода.

Pashtet
18.02.2014, 15:22
На выходе PID_FUNCTION используйте оператор выборки LIMIT
... из справки CoDeSys: "LIMIT
Ограничитель
OUT := LIMIT(Min, IN, Max) означает:
OUT := MIN (MAX (IN, Min), Max)
Max задает верхнюю и Min нижнюю границы ограничителя. Если IN больше верхнего или меньше нижнего пределов, результат 'обрезается' соответственно до Max или Min.
IN и OUT могут быть любого типа."

petera
18.02.2014, 23:58
На выходе PID_FUNCTION используйте оператор выборки LIMIT
... из справки CoDeSys: "LIMIT
Ограничитель
OUT := LIMIT(Min, IN, Max) означает:
OUT := MIN (MAX (IN, Min), Max)
Max задает верхнюю и Min нижнюю границы ограничителя. Если IN больше верхнего или меньше нижнего пределов, результат 'обрезается' соответственно до Max или Min.
IN и OUT могут быть любого типа."
Вот после использования таких советов и возникают на форуме претензии к работе PID_FUNCTION из Util.lib. http://www.owen.ru/forum/attachment.php?attachmentid=11957&d=1392751157

http://www.owen.ru/forum/attachment.php?attachmentid=11947&d=1392750251
Мол стандартный PID не работает, помогите победить утильный PID и т.д.
Зачем здесь ограничитель LIMIT, ведь для ограничения выходного сигнала у PID есть специальные входы Y_MIN и Y_MAX, которые не только ограничивают Y, но и не позволяют интегральной составляющей PID стремиться "в заоблачную даль".
Когда Y упрется в Y_MIN или Y_MAX, после смены знака рассогласования он сразу начнет двигаться в противоположную сторону, а на выходе LIMIT сигнал так и останется на уровне его ограничения, до момента пока величина Y не попадет в диапазон ограничения. Вот и получим "не работающий" PID.