там у пид-регуляторов можно задавать диапазон выхода: Ymin и Ymax.
Если нету кодесиса пишите сюда, кину вам на мыло.
Не знаю,
возьмите uitl.lib из кодесиса.
там у пид-регуляторов можно задавать диапазон выхода: Ymin и Ymax.
Если нету кодесиса пишите сюда, кину вам на мыло.
Не
возьмите uitl.lib из кодесиса.
там у пид-регуляторов можно задавать диапазон выхода: Ymin и Ymax.
Если нету кодесиса пишите сюда, кину вам на мыло.
Не знаю, как
возьмите uitl.lib из кодесиса.
там у пид-регуляторов можно задавать диапазон выхода: Ymin и Ymax.
Если нету кодесиса пишите сюда, кину вам на мыло.
Не знаю, как там
возьмите uitl.lib из кодесиса.
там у пид-регуляторов можно задавать диапазон выхода: Ymin и Ymax.
Если нету кодесиса пишите сюда, кину вам на мыло.
Не знаю, как там с
ну я как раз и работаю с этой библиотекой, только видно с не очень новой, т.к. там никаких ограничивающих переменных нет, но наверное раньше люди как-то с ней работали...
Собственно я принцип действия не пойму, выход ПИД начинает расти после запуска, а как его привязать к мощности регулятора непонятно... Что-то вроде задать ему границы например от 30 до 50 и по пропорции задавать мощность регулятора? 30 - 0%, 50 - 100%???
А что мешает задать ему границы сразу 0-100? Или 4-20, например? ;)
Тут вверху я, блин, наспамил. Аж забанили. :)
Простите меня. Я нечаяно. :)
Вот как выглядит ПИД у меня в кодесисе:
(* PD controller *) FUNCTION_BLOCK PID VAR_INPUT ACTUAL :REAL; (* actual value, process variable *) SET_POINT:REAL; (* desired value, set point *) KP:REAL; (* proportionality const. (P)*) TN:REAL; (* reset time (I) in sec *) TV:REAL; (* rate time, derivative time (D) in sec*) Y_MANUAL:REAL; (* Y is set to this value as long as MANUAL=TRUE *) Y_OFFSET:REAL; (* offset for manipulated variable *) Y_MIN:REAL; (* minimum value for manipulated variable *) Y_MAX:REAL; (* maximum value for manipulated variable *) MANUAL:BOOL; (* TRUE: manual: Y is not influenced by controller, FALSE: controller determines Y *) RESET:BOOL; (* reset: set Y output to Y_OFFSET and reset integral part *) END_VAR VAR_OUTPUT Y:REAL; (* manipulated variable, set value*) LIMITS_ACTIVE:BOOL:=FALSE; (* true set value would exceed limits Y_MIN, Y_MAX *) OVERFLOW:BOOL:=FALSE; (* overflow in integral part *) END_VAR
Хотелось бы конечно не тупо в ФБ задавать границы, а понять "как это работает"...
У меня в библиотеке этот ФБ выглядит так:
(* PD controller / PD-Regler Die Einstellung der Werte KP,TN,TD ist etwas heikel und kann zum Ьberlauf fьhren!! Grundsдtzlich ist zu beachten : - Der Proportionalitдtsbeiwert entscheidet, wie rapide der Sollwert angestrebt wird. Empfehlung : 0 < KP < 1.5 - Die Nachstellzeit - Die Vorhaltzeit *) FUNCTION_BLOCK PID VAR_INPUT ACTUAL :REAL; (* Actual value / Istwert *) DESIRED:REAL; (* Desired Value / Sollwert *) KP:REAL; (* Proportional const. / Proportionalitдtskoeff. 0<KP<1 *) TR:DWORD; (* Reset Time / Nachstellzeit in msec *) TD:DWORD; (* Derivative Time / Vorhaltzeit in msec *) RESET:BOOL; END_VAR VAR_OUTPUT OUT:REAL ; (* Set value (absolute) / Stellwert (absolut) *) END_VAR VAR CLOCK:TON; I: INTEGRAL; D: DERIVATIVE; TMDIFF: DWORD; END_VAR
Я, например, задаю ACTUAL := 18 (в градусах), DESIRED := 22 (уставка в градусах), потом назначаю постоянные времени и коэфициенты...
Запускаю ФБ и он сразу начинает расти потихоньку от 18... что это значит? Мне нужно допустим ограничить его значением 100 и вначале сразу включать нагреватель на 18% мощности?
Вы не можете публиковать новые темы в этом форуме Вы не можете отвечать на сообщения в этом форуме Вы не можете удалять Ваши сообщения на этом форуме Вы не можете редактировать Ваши сообщения на этом форуме Вы не можете создавать голосования на этом форуме Вы не можете выражать своё мнение в голосованиях на этом форуме