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

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

Комбинированный просмотр

Предыдущее сообщение Предыдущее сообщение   Следующее сообщение Следующее сообщение
  1. #1

    По умолчанию

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

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

    По умолчанию

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

  3. #3

    По умолчанию

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

  4. #4

    По умолчанию 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.

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

    По умолчанию

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

  6. #6

    По умолчанию

    Цитата Сообщение от Эдуард_Н Посмотреть сообщение
    А не проще выложить сразу файлом?
    файл вложил)

  7. #7

    По умолчанию В собранном виде

    Выкладываю ФБ в собранном виде, кому лень. ФБ с комментариями, но если что-то будет не понятно, спрашивайте..
    На вход ФБ IN_VAL нужно подключить выход ФБ PID из библиотеки UTIL, на ФБ PID входы Y_MIN должен быть равен входу ФБ VALVE_3_POS IN_VAL_MIN, а Y_MAX должен быть равен IN_VAL_MAX. Вроде все, остальное должно быть понятно.
    Вложения Вложения

  8. #8

    По умолчанию

    Что-то жутко большой размер кода для такой задачи.

  9. #9

    По умолчанию

    Цитата Сообщение от Newcomer Посмотреть сообщение
    Что-то жутко большой размер кода для такой задачи.
    Если у Вас есть решение этой задачи рабочее и у которой объем кода меньше буду рад увидеть его)

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

    По умолчанию

    ну как вариант LESS := CLOSED AND NOT MORE;
    Bad programmers worry about the code. Good programmers worry about data structures and their relationships

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

Страница 22 из 49 ПерваяПервая ... 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

Ваши права

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