Страница 22 из 51 ПерваяПервая ... 12202122232432 ... ПоследняяПоследняя
Показано с 211 по 220 из 509

Тема: ПИД регулятор

  1. #211
    Пользователь Аватар для petera
    Регистрация
    06.05.2011
    Адрес
    Минск
    Сообщений
    3,838

    По умолчанию

    Цитата Сообщение от Пьер Посмотреть сообщение
    Если можно, объясните пожалуйста, для чего вы применили этот блок? (Логически) Спасибо!
    Т.к. датчик положения регулирующего органа не предусмотрен, то для устранения рассогласования между реальным положением и виртуальным, сделал импульсы доводки, по аналогии с ТРМ-ами.
    Для этого и нужен блок "GEN_PULSE".
    Импульсы доводки формируются если на входе "VALVE_REG_NO_POS" значение равно "0" или "100".
    Мой канал на ютубе
    https://www.youtube.com/c/ПетрАртюков
    Библиотека ГМ для СП300
    https://disk.yandex.com/d/gHLMhLi8x1_HBg

  2. #212

    По умолчанию

    И снова здравствуйте.
    Помогите пожалуйста разобраться с нелегким вопросом))
    У меня имеется контроллер ПЛК150 с тремя подключенными датчиками температуры и 2 регулируемых клапана. Один датчик температуры наружного воздуха и два датчика теплоносителя, каждый на свой клапан.
    Какой регулятор стоит выбрать? Какие значения мне нужно знать чтобы регулировать клапаны по 4-20? До этого работал только в языке LD и только с релейной логикой. Сильно не пинайте.
    Заранее спасибо за советы.

  3. #213
    Пользователь Аватар для Пьер
    Регистрация
    26.01.2011
    Адрес
    Земля
    Сообщений
    518

    По умолчанию

    Цитата Сообщение от petera Посмотреть сообщение
    Импульсы доводки формируются если на входе "VALVE_REG_NO_POS" значение равно "0" или "100".
    У пид регулятора есть выходной сигнал OUT: REAL; – выходной сигнал регулятора, от -100 до 100% относительной мощности;
    Можно этот сигнал использовать на задвижку напрямую?
    Как понять от -100 до 100% относительной мощности, никак не допрет, получается всего навсего преобразовать (- 100 +100) в (0 +100)?
    Не зная броду, не суйся в воду. (Пословица.)
    Век живи, век учись(а умрешь дураком).
    Опыт растет прямо пропорционально выведенному из строя оборудованию.

  4. #214

    По умолчанию

    В теории сигнал У ПИДа аналговый от: 1.175494351e-38 до 3.402823466e+38, но обычно такими значениями не разбрасываются и ограничивают сигнал сверху и снизу, то есть вы можете установить любое значение если используете PID из библиотеки util. Далее если у вас задвижка с дискретным управлением, вам надо аналог преобразовать в дискрету, пропустив сигнал через ШИМ. У меня почему-то проблемы были с блоком VALVE_NO_POS.
    Последний раз редактировалось Andrew_Stranger; 25.05.2016 в 23:09.

  5. #215
    Пользователь Аватар для Пьер
    Регистрация
    26.01.2011
    Адрес
    Земля
    Сообщений
    518

    По умолчанию

    Цитата Сообщение от Andrew_Stranger Посмотреть сообщение
    В теории сигнал У ПИДа аналговый от: 1.175494351e-38 до 3.402823466e+38, но обычно такими значениями не разбрасываются и ограничивают сигнал сверху и снизу, то есть вы можете установить любое значение если используете PID из библиотеки util. Далее если у вас задвижка с дискретным управлением, вам надо аналог преобразовать в дискрету, пропустив сигнал через ШИМ. У меня почему-то проблемы были с блоком VALVE_NO_POS.
    C управление задвижки блоком VALVE_REG_NO_POS проблем не было, сейчас проблеме с Пидом. Если все получится отпишусь.
    Не зная броду, не суйся в воду. (Пословица.)
    Век живи, век учись(а умрешь дураком).
    Опыт растет прямо пропорционально выведенному из строя оборудованию.

  6. #216

    По умолчанию

    Подскажите: PID_2POS сохраняет настройки ПИД-коэффициентов или при новом включении необходимо опять включать автонастройку? Сам блок очень понравился в работе (правда настольном), но вот на сколько будет удобно всякий раз автонастраивать - большой вопрос.

  7. #217
    Пользователь Аватар для Пьер
    Регистрация
    26.01.2011
    Адрес
    Земля
    Сообщений
    518

    По умолчанию

    Цитата Сообщение от capzap Посмотреть сообщение
    Pid
    Хочу спросить у Вас! У меня 3х поз. задвижка без д.д. Я настроил ее откр/закр. через блок VALVE_REG_NO_POS. Она у меня откр/закр от 0 до 100% как надо.
    Теперь нужно настроить регулирование. Взял PID_3POS_IM_ANR + VALVE_REG_NO_POS. Регулирую температуру. При открытии темп.повышается, а при закрытии понижается, использую сигнал от 0 до +100 отрезая отрицательную часть. Короче говоря при завершении АНР начинаются колебания от 0 до 100, т.е. задвижка полностью закрывается и открывается. Устаканивания не происходит. Инертность около 2 минут.
    1. Время хода задвижки в блоке PID_3POS_IM_ANR TVAL в секундах?
    2. Может использовать "Холодильник"?
    3.Из -за чего может быть такая болтанка?
    Не зная броду, не суйся в воду. (Пословица.)
    Век живи, век учись(а умрешь дураком).
    Опыт растет прямо пропорционально выведенному из строя оборудованию.

  8. #218
    Пользователь Аватар для capzap
    Регистрация
    25.02.2011
    Адрес
    Киров
    Сообщений
    10,243

    По умолчанию

    я с этой бибкой не работаю, мне достаточно классического ПИД-а из степа или оскат, у меня используется оборудование аналоговое с регулированием от 0 до 100% без всяких 3-х позиционных или ШИМ-ов и т.п., для обратной зависимости достаточно пропорциональный задавать с минусом. По поводу колебаний это и должно быть при автонастройке и в это время вмешиваться в работу нельзя, как долго это будет происходить известно только самой программе
    Bad programmers worry about the code. Good programmers worry about data structures and their relationships

    среди успешных людей я не встречала нытиков
    Барбара Коркоран

  9. #219

    По умолчанию 3-х ПОЗИЦИОННЫЙ РЕГУЛЯТОР

    Добрый день, уважаемые форумчане.
    Много было тем про регуляторы и управление электроприводами клапанов по сигналу "Больше", "Стоп" и "Меньше", но к моему большому сожалению ни один из них не оправдал моих ожиданий и работали они не очень корректно, возможно потому, что применялись не на контроллерах ОВЕН а на контроллерах BECKHOFF, вот и пришлось мне написать небольшую программку "прокладку", как тут все называют для PID регулятора из библиотеки UTIL. Буду рад комментариям и замечаниям. Не получилось у меня отредактировать код, так чтобы он был наглядным, поэтому приложил файл с программой.

    FUNCTION_BLOCK VALVE_3_POS
    VAR
    RANGE: REAL; (*ДИАПАЗОН ПИД РЕГУЛЯТОРА*)
    PERIOD: TIME; (*ПЕРИОД ИМПУЛЬСОВ*)
    TIME_PULSE: TIME; (*ВРЕМЯ ИМПУЛЬСА*)
    TIME_PULSE_R: REAL;
    TIME_PAUSE: TIME; (*ВРЕМЯ ПАУЗЫ*)
    TIME_PAUSE_R: REAL;
    TMR_MAX_HIGHT: TP; (*ТАЙМЕР ВЫДАЧИ ИМПУЛЬСА ПРИ ПИД > 0*)
    TMR_MIN_HIGHT: TP; (*ТАЙМЕР ВЫДАЧИ ИМПУЛЬСА ПРИ ПИД < 0*)
    TMR_MAX_LOW: TP; (*ТАЙМЕР ВЫДАЧИ ПАУЗЫ ИМПУЛЬСА ПРИ ПИД > 0*)
    TMR_MIN_LOW: TP; (*ТАЙМЕР ВЫДАЧИ ПАУЗЫ ИМПУЛЬСА ПРИ ПИД < 0*)
    PERIOD_R: REAL;
    MIN_TIME_PULSE_R: REAL;
    MIN_TIME_PULSE:TIME; (*МИНИМАЛЬНОЕ ВРЕМЯ ИМПУЛЬСА*)
    F_TRIG_MAX:F_TRIG; (*ТРИГГЕР ЗАПУСКА ТАЙМЕРА ПАУЗЫ ПРИ ПИД > 0*)
    F_TRIG_MIN:F_TRIG; (*ТРИГГЕР ЗАПУСКА ТАЙМЕРА ПАУЗЫ ПРИ ПИД < 0*)
    END_VAR

    VAR_INPUT
    IN_VAL: REAL; (*ВЫХОД ПИД*)
    IN_VAL_MIN: REAL := -100; (*МИНИМАЛЬНОЕ ЗНАЧЕНИЕ ПИД НА ВЫХОДЕ ЛУЧШЕ ЗАДАТЬ -15*)
    IN_VAL_MAX: REAL := 100; (*МАКСИМАЛЬНОЕ ЗНАЧЕНИЕ ПИД НА ВЫХОДЕ ЛУЧШЕ ЗАДАТЬ 15*)
    FULL_MOTION_TIME: REAL := 120; (*ВРЕМЯ ХОДА ПРИВОДА ПРИМЕР: 120*)
    DEAD_ZONE: REAL := 0.1; (*ЗОНА НЕЧУВСТВИТЕЛЬНОСТИ ПРИМЕР: 0.1*)
    AUTO: BOOL := TRUE; (*АВТОМАТИЧЕСКИЙ РЕЖИМ РАБОТЫ ЕСЛИ TRUE и РУЧНОЙ РЕЖИМ РАБОТЫ ЕСЛИ FALSE*)
    OPENED: BOOL := FALSE; (*ОТКРЫТИЕ*)
    CLOSED: BOOL := FALSE; (*ЗАКРЫТИЕ*)
    END_VAR

    VAR_OUTPUT
    MORE: BOOL; (*БОЛЬШЕ*)
    LESS: BOOL; (*МЕНЬШЕ*)
    END_VAR


    (*\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\НАЧ АЛО\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\ \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\*)
    (*АВТОМАТИЧЕСКИЙ РЕЖИМ РАБОТЫ*)
    IF AUTO THEN
    RANGE := IN_VAL_MAX - IN_VAL_MIN; (*ОТПРЕДЕЛЕНИЕ ДИАПАЗОНА*)
    MIN_TIME_PULSE_R := ( FULL_MOTION_TIME * 0.005 )*1000; (*ОПРЕДЕЛЕНИЕ МИНИМАЛЬНОЙ ДЛИТ. ИМПУЛЬСА*)
    MIN_TIME_PULSE := REAL_TO_TIME( MIN_TIME_PULSE_R ); (*ПРЕОБРАЗОВАНИЕ ТИПОВ*)
    PERIOD_R := ( FULL_MOTION_TIME / 20 ); (*ОПРЕДЕЛЕНИЕ ПЕРИОДА ИМПУЛЬСОВ*)
    PERIOD := REAL_TO_TIME( PERIOD_R ) * 1000; (*ПРЕОБРАЗОВАНИЕ ТИПОВ*)

    (*\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\ \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\ \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\*)
    (*ВЫДАЧА ИМПУЛЬСА ПРИ ПОЛОЖИТЕЛЬНОМ ЗНАЧЕНИИ НА ВЫХОДЕ ПИД*)
    IF (IN_VAL_MIN <0 AND IN_VAL_MAX >0) AND IN_VAL > (0 + DEAD_ZONE) THEN
    LESS := FALSE; (*ОБНУЛЕНИЕ СИГНАЛА "МЕНЬШЕ" ЕСЛИ ОСТАЛСЯ АКТИВИРОВАНЫМ*)
    TMR_MIN_LOW (IN:= FALSE, PT := TIME_PAUSE); (*ОБНУЛЕНИЕ ТАЙМЕРА ПАУЗЫ*)
    TIME_PULSE_R := ( ( IN_VAL * PERIOD_R) / (RANGE / 2) )* 1000; (*РАСЧЕТ ТЕК ВРЕМЕНИ ИМПУЛЬСА*)
    TIME_PAUSE_R := (PERIOD_R*1000 - TIME_PULSE_R); (*РАСЧЕТ ТЕКУЩЕГО ВРЕМЕНИ ПАУЗЫ*)
    TIME_PULSE := REAL_TO_TIME ( TIME_PULSE_R );
    TIME_PAUSE := REAL_TO_TIME ( TIME_PAUSE_R );
    IF TIME_PULSE > MIN_TIME_PULSE THEN (*СРАВНЕНЕНИЕ МИН ВРЕМЕНИ ИМПУЛЬСА И РАСЧ ТЕКУЩЕГО*)
    TMR_MAX_HIGHT (IN:= TRUE AND NOT TMR_MAX_LOW.Q, PT := TIME_PULSE); (*ЗАПУСК ТАЙМЕРА*)
    END_IF
    F_TRIG_MAX (CLK := TMR_MAX_HIGHT.Q); (*ТРИГГЕР ЗАУСКА ТАЙМЕРА ПАУЗЫ ПРИ*)
    TMR_MAX_LOW (IN:= F_TRIG_MAX.Q, PT := TIME_PAUSE); (*ЗАПУСК ТАЙМЕРА ПАУЗЫ*)
    END_IF
    (*ОБНУЛЕНИЕ ТАЙМЕРА ВЫДАЮЩЕГО ИМПУЛЬСЫ ПОКА РАБОТАЕТ ТАЙМЕР ПАУЗЫ*)
    IF TMR_MAX_LOW.Q OR (TIME_PULSE < MIN_TIME_PULSE) THEN
    TMR_MAX_HIGHT (IN:= FALSE, PT := TIME_PULSE);
    END_IF
    (*АКТИВАЦИЯ ВЫХОДА РЕГУЛЯТОРА "БОЛЬШЕ" ПОКА РАБОТАЕТ ТАЙМЕР ИМПУЛЬСА И РАСЧЕТНЫМ ВРЕМЕНЕМ*)
    IF (TMR_MAX_HIGHT.Q OR IN_VAL = IN_VAL_MAX) AND NOT LESS THEN
    MORE := TRUE; (*АКТИВАЦИЯ "БОЛЬШЕ"*)
    ELSE
    MORE := FALSE; (*ИНАЧЕ ДЕАКТИВАЦИЯ "БОЛЬШЕ"*)
    END_IF
    (*\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\ \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\ \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\*)

    (*\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\ \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\ \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\*)
    (*ВЫДАЧА ИМПУЛЬСА ПРИ ОТРИЦАТЕЛЬНОМ ЗНАЧЕНИИ НА ВЫХОДЕ ПИД*)
    IF (IN_VAL_MIN <0 AND IN_VAL_MAX >0) AND IN_VAL < (0 - DEAD_ZONE) THEN
    MORE := FALSE; (*ОБНУЛЕНИЕ СИГНАЛА "БОЛЬШЕ" ЕСЛИ ОСТАЛСЯ АКТИВИРОВАННЫМ*)
    TMR_MAX_LOW (IN:= FALSE, PT := TIME_PAUSE); (*ОБНУЛЕНИЕ ТАЙМЕРА ПАУЗЫ*)
    TIME_PULSE_R := ( ( IN_VAL * PERIOD_R *(-1) ) / ( RANGE / 2) ) * 1000; (*РАСЧЕТ ВРЕМЕНИ ИМПУЛЬСА*)
    TIME_PAUSE_R := (PERIOD_R*1000 - TIME_PULSE_R); (*РАСЧЕТ ТЕКУЩЕГО ВРЕМЕНИ ПАУЗЫ*)
    TIME_PULSE := REAL_TO_TIME ( TIME_PULSE_R );
    TIME_PAUSE := REAL_TO_TIME ( TIME_PAUSE_R );
    IF TIME_PULSE > MIN_TIME_PULSE THEN (*СРАВНЕНЕНИЕ МИН ВР ИМПУЛЬСА И РАСЧЕТНОГО ТЕКУЩЕГО*)
    TMR_MIN_HIGHT (IN:= TRUE AND NOT TMR_MIN_LOW.Q, PT := TIME_PULSE); (*ЗАПУСК ТАЙМЕРА*)
    END_IF
    F_TRIG_MIN (CLK := TMR_MIN_HIGHT.Q); (*ТРИГГЕР ЗАУСКА ТАЙМЕРА ПАУЗЫ ПРИ*)
    TMR_MIN_LOW (IN:= F_TRIG_MIN.Q, PT := TIME_PAUSE); (*ЗАПУСК ТАЙМЕРА ПАУЗЫ ИМПУЛЬСА*)
    END_IF
    (*ОБНУЛЕНИЕ ТАЙМЕРА ВЫДАЮЩЕГО ИМПУЛЬСЫ ПОКА РАБОТАЕТ ТАЙМЕР ПАУЗЫ*)
    IF TMR_MIN_LOW.Q OR (TIME_PULSE < MIN_TIME_PULSE) THEN
    TMR_MIN_HIGHT (IN:= FALSE, PT := TIME_PULSE);
    END_IF
    (*АКТИВАЦИЯ ВЫХОДА РЕГУЛЯТОРА "МЕНЬШЕ" ПОКА РАБОТАЕТ ТАЙМЕР ИМПУЛЬСА И РАСЧЕТНЫМ ВРЕМЕНЕМ*)
    IF (TMR_MIN_HIGHT.Q OR IN_VAL = IN_VAL_MIN) AND NOT MORE THEN
    LESS := TRUE; (*АКТИВАЦИЯ "МЕНЬШЕ"*)
    ELSE
    LESS := FALSE; (*ИНАЧЕ ДЕАКТИВАЦИЯ "МЕНЬШЕ"*)
    END_IF
    END_IF
    (*\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\ \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\ \\\\\\\\\\\\\\\\\\\\\\*)

    (*\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\ \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\ \\\\\\\\\\\\\\\\\\\\\\*)
    (*РУЧНОЙ РЕЖИМ РАБОТЫ*)
    IF NOT AUTO THEN
    IF OPENED AND NOT LESS THEN (*ЕСЛИ АВТИВИРОВАН ВХОД "OPENED" и НЕ АКТИВНО "МЕНЬШЕ"*)
    MORE := TRUE; (*АКТИВАЦИЯ "БОЛЬШЕ"*)
    ELSE
    MORE := FALSE; (*ИНАЧЕ ДЕАКТИВАЦИЯ "БОЛЬШЕ"*)
    END_IF
    IF CLOSED AND NOT MORE THEN (*ЕСЛИ АВТИВИРОВАН ВХОД "CLOSED" и НЕ АКТИВНО "БОЛЬШЕ"*)
    LESS := TRUE; (*АКТИВАЦИЯ "МЕНЬШЕ"*)
    ELSE
    LESS := FALSE; (*ИНАЧЕ ДЕАКТИВАЦИЯ "МЕНЬШЕ"*)
    END_IF
    END_IF
    (*\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\ \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\ \\\\\\\\\\\\\\\\\\*)
    (*\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\К ОНЕЦ\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\ \\\\\\\\\\\\\\\\*)
    Вложения Вложения
    Последний раз редактировалось deniska13; 08.06.2016 в 16:18.

  10. #220
    Пользователь Аватар для Эдуард_Н
    Регистрация
    22.09.2014
    Адрес
    Курган
    Сообщений
    1,612

    По умолчанию

    А не проще выложить сразу файлом?

Страница 22 из 51 ПерваяПервая ... 12202122232432 ... ПоследняяПоследняя

Похожие темы

  1. регулятор
    от Egor в разделе ПЛК63/73
    Ответов: 8
    Последнее сообщение: 23.02.2011, 10:58
  2. пид регулятор плк 150 и.м.
    от mihan-987654321 в разделе ПЛК1хх
    Ответов: 3
    Последнее сообщение: 23.09.2010, 12:17
  3. пид регулятор с шим в 110-60
    от AKHolod в разделе ПЛК1хх
    Ответов: 2
    Последнее сообщение: 07.07.2010, 14:19
  4. ПИД-регулятор
    от trunf в разделе ПЛК1хх
    Ответов: 6
    Последнее сообщение: 14.11.2008, 23:17
  5. ПИД регулятор
    от Александр М в разделе ПЛК1хх
    Ответов: 6
    Последнее сообщение: 22.10.2007, 08:47

Ваши права

  • Вы не можете создавать новые темы
  • Вы не можете отвечать в темах
  • Вы не можете прикреплять вложения
  • Вы не можете редактировать свои сообщения
  •