Страница 9 из 9 ПерваяПервая ... 789
Показано с 81 по 88 из 88

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

  1. #81

    По умолчанию

    Тоже мучался с тем как совместить ПИД регулятор (взял из UTIL.LIB) и двухходовой клапан с трехточечным регулированием без обратной связи.

    Писал и исправлял и проверял недели 2 все пытаясь написать "мат модель клапана" вычисляющую положение исходя из полного времени открытия и все не то. Почитав данную ветку до середины вечерком, пришел и написал блок ШИМ (прокладку), на которую ушол час, работает великолепно, выходит на уставку +- 0,5 градуса за время пока я курю сигарету и больше не дергается.
    Все оказалось просто, забил на позицию клапана просто добавляю импульс если выход ПИД увеличивается или уменьшается с длительностью в зависимости от рассогласования выхода ПИД за время от предыдущего снятия показаний. Ход клапана 60 секунд у меня, поставил 3 секунды частоту имульсов и 500 мс минимальную длительность импульса (значения взял на угад, но так и не менял, заработало с первого раза).
    Спасибо форумам, регулирует температуру отопления в ИТП. А ещё бонусом получилось самопозиционирование, так что блоку все равно в какой момент его запускают и в каком положении при старте клапан.

  2. #82

    По умолчанию

    Я примерно так же делал... (*Расчетная формула Тимп = dY/(Ymax-Ymin)* время полного хода ИМ *) + добавил учет мин. времени реверса и время люфта, а также возможность постоянного открытия/закрытия при Y=Yмах(мин)...
    Скрытый текст:

    Код:
    (* Интерфейс трехточечного управления исполнительным механизмом 
    без датчика положения.*)
    (*ПКК Ладья, 2015 г. www.pkk-ladya.ru*)
    
    
    FUNCTION_BLOCK Valve_Interface_No_Pos
    VAR_INPUT
    	IN_VAL: REAL;			     (*К выходу регулятора*)
            Y_MIN: REAL :=-100;          (*Нижний предел выходного сигнала регулятора *)
    	Y_MAX: REAL :=100;           (*Верхний предел выходного сигнала регулятора *)
            LIMIT_Y: BOOL :=0;           (*Постоянное открытие при IN_VAL >= Y_MAX или закрытие при IN_VAL <= Y_MIN*)
    	RUN: BOOL;                   (*Включение*)
    	FULL_MOTION_TIME :REAL :=45; (*Время хода ИМ, сек *)
    	MIN_WORK:REAL :=0.5;	         (*Минимальное время импульса*)
            REVERS_TIME :REAL :=1;       (*Время реверса ИМ, сек*)
    	LUFT_TIME: REAL :=0;		 (*Время люфта в соединениях ИМ, сек *)
    END_VAR
    VAR_OUTPUT
    	MORE:BOOL; 		              (*Выход БОЛЬШЕ*)
    	LESS: BOOL;	                  (*Выход МЕНЬШЕ*)
    END_VAR
    VAR
    	L_skaly: REAL;
    	TOF_1: TOF;
    	TOF_2: TOF;
            Y1: REAL;
    	X: BOOL;
    	dY: REAL; 
    	T_imp: REAL;
    	Pusk: BOOL;
    	Rass: REAL;
    	Znak: BOOL;
    	TP_1: TP;
    	Q_TP_1: BOOL;
    	TP_2: TP;
    	Q_TP_2: BOOL;
    	PT_1: REAL;
    	T_PWM : REAL;		
            Y_old : REAL;       
    	Rev: BOOL;
    	TP_Rev: TP;
    	RS_1: RS;
    	UP_Old: BOOL;
    END_VAR
    
    (*Расчетная формула Тимп = dY/(Ymax-Ymin)* время полного хода ИМ *)
    
    TOF_1(IN:=NOT X AND RUN, PT:=REAL_TO_TIME(1000*MIN_WORK), Q=>X , ET=>); //Цикл измерения
    IF X=0 THEN dY:=IN_VAL-Y_old; Y_old:=IN_VAL; END_IF;                    //Определение изменения вых сигнала за мин время импульса
    
    L_skaly:=Y_MAX-Y_MIN;                               //Диапазон сигнала регулятора
    IF L_skaly=0 THEN L_skaly:=200; END_IF;             //Защита от деления на ноль при неподсоединении входов или отсутствии значений
    Rass:=MIN_WORK*dY/L_skaly;                          //Рассогласование
    
    IF ABS(T_Imp) >= MIN_WORK  AND NOT Pusk THEN           //Как только величина накопленного импульса превышает мин время импульса и импульс при этом не выдается на выход
             T_PWM:=T_Imp;                           //время управления выходом становится равным длит накопл импульса
             T_Imp:= 0;                                  //Время накопленного импульса сбрасывается
    ELSE T_imp := T_Imp + Rass;                          //иначе накопленный импульс накапливается дальше
    END_IF;
         
    Znak S=  T_PWM>0 AND Up_old OR T_PWM<0 AND NOT Up_old;                                                         //Любое изменение направления знака импульса вызывает "взвод" переменной Znak
    IF Znak THEN PT_1:= ABS(T_PWM) + LUFT_TIME; ELSE PT_1:= ABS(T_PWM); END_IF;          //При изменении направления к времени мпульса добавляется время люфта,
    TP_Rev (IN:= Znak AND NOT Pusk , PT:=REAL_TO_TIME(1000*REVERS_TIME), Q=>Rev , ET=>);  // а также задержка пуска на время реверса 
    
    TOF_2(IN:= (ABS(T_PWM)>0 AND NOT Pusk AND NOT Rev), PT:=REAL_TO_TIME(1000*PT_1) , Q=> Pusk, ET=>);  //Запуск импульса
    IF NOT Pusk AND NOT Rev THEN T_PWM:=0; Znak R=TRUE; END_IF;                                            //По его окончании сброс времени управления выходом и переменной Znak
    
    IF  RUN THEN                                                                 //Если включено...
            IF  IN_VAL<=Y_MIN AND LIMIT_Y AND NOT LESS THEN MORE:=1; 
            ELSIF IN_VAL>=Y_MAX AND LIMIT_Y AND NOT MORE THEN LESS:=1;	         //Если регулятор уперся в ограничение, то соотв. выход открывается постоянно.
            ELSE
                     IF Pusk AND T_PWM<0 AND NOT LESS THEN MORE:=Pusk;          //Если пер UP вверх, не открыто вниз и сигнал Пуск, то запускается открытие 
                     ELSIF Pusk AND T_PWM>0 AND NOT MORE THEN LESS:=Pusk;      //Аналогично закрытие
                     ELSE LESS:=0; MORE:=0;                                     //Иначе отключается
                     END_IF;
            END_IF;
    
            RS_1(SET:= MORE, RESET1:=LESS , Q1=> UP_Old);                          //Триггер запоминает знак предыдущего импульса
    ELSE   T_Imp:=0; T_PWM:=0; Pusk:=0; MORE:=0; LESS :=0; PT_1 :=0; Znak:=FALSE;   //Если выкючено - то все обнуляется
    END_IF;


    Картинка подключения и ссылка на скомпилированную библиотеку на предыдущей странице, для ПИД регулятора из UTIL выходы поменять местами....
    Концевики (по положению или усилию) на электроприводе должны быть во избежании сгорания, в программе они не используются.
    Последний раз редактировалось Монтёр; 31.03.2015 в 00:03.

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

    По умолчанию

    Цитата Сообщение от Karrimdra Посмотреть сообщение
    Тоже мучался с тем как совместить ПИД регулятор (взял из UTIL.LIB) и двухходовой клапан с трехточечным регулированием без обратной связи.

    Писал и исправлял и проверял недели 2 все пытаясь написать "мат модель клапана" вычисляющую положение исходя из полного времени открытия и все не то. Почитав данную ветку до середины вечерком, пришел и написал блок ШИМ (прокладку), на которую ушол час, работает великолепно, выходит на уставку +- 0,5 градуса за время пока я курю сигарету и больше не дергается.
    Все оказалось просто, забил на позицию клапана просто добавляю импульс если выход ПИД увеличивается или уменьшается с длительностью в зависимости от рассогласования выхода ПИД за время от предыдущего снятия показаний. Ход клапана 60 секунд у меня, поставил 3 секунды частоту имульсов и 500 мс минимальную длительность импульса (значения взял на угад, но так и не менял, заработало с первого раза).
    Спасибо форумам, регулирует температуру отопления в ИТП. А ещё бонусом получилось самопозиционирование, так что блоку все равно в какой момент его запускают и в каком положении при старте клапан.
    Уважаемый Karrimdra, можете выложить для посмотреть Ваш вариант?

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

    По умолчанию

    d-view, это всё тот же проект (http://www.owen.ru/forum/showthread.php?t=20892), или доработанный?

  5. #85
    Пользователь Аватар для d-view
    Регистрация
    24.03.2013
    Адрес
    Луганск
    Сообщений
    22

    По умолчанию

    Чуток допилил.

  6. #86

    По умолчанию

    Цитата Сообщение от Ворона Посмотреть сообщение
    Наконец то!!!
    После двух месяцев трудов и поисков мне удалось наконец написать полностью работоспособный ШИМ для клапана без датчика положения.
    В проекте использовались только блоки из стандартной библиотеки CoDeSys и из Util собственно, сам ПИД регулятор, испытания проводил на этом стенде https://yadi.sk/i/0VWFUN4ecnPiQ
    ссылка на мой Яндекс диск. Как это не удивительно я не являюсь специалистом в области составления алгоритмов ПИД регулирования, но результат меня приятно удивил.
    Может мне показалось но мой ПИД регулятор на заданную уставку выходит лучше чем ТРМ212 почти без "проскока" и держит температуру -+ 1 гр. с от заданной уставки.
    Конечно алгоритм еще требует доработки, но проект полностью работоспособен, и может использоваться на реальных объектах регулирования.
    Тестировал в течении нескольких часов и остался доволен результатом. По его принципу написал алгоритм в CoDeSys v2.3 на ПЛК110, и также остался доволен результатом.
    И чему несказанно был рад, что, клапан не дергался туда-сюда почти сразу нашел нужную точку и встал в необходимое положение.
    Выкладываю проект в свободный доступ, ничего не закодировано и не запаролено. Буду рад любым доработкам и улучшениям, также надеюсь, что вы протестируете у себя на объектах, стенд стендом, а реальный объект, это совсем другое. Надеюсь что все выложил правильно на форуме и с открытием файла проекта проблем не возникнут, я новичок в этом деле.
    Стенд обрезано: Вложение 15273
    Фото моих уставок Вложение 15275
    Всем кто использует в своих проектах PID из Util, нужно иметь ввиду и предусмотреть способ сброса ПИДа при смене уставки, как показали мои наблюдения на некоторое время ему (ПИДу) первое время "сносит" "башню".
    А выражаясь грамотно происходит "удар" при регулировании. И это правильно, просто ПИД выдает результат с учетом новой уставки и накопленной старой интегральной составляющей.

    22.11.2014г.
    Тестировал ШИМ, и PID из библиотеки Util, на даче у своего коллеги (на форуме зарегистрирован как "Монтер", огромное ему спасибо), остались оба доволены результатом, правда в начале нам пришлось по-колдовать с Кp, Tn, Tv но результат получили хороший -+ 1,5 гр. после выхода на уставку 55гр., это при условии что газовый котел работал дискретно в диапазоне от 70гр. до 90гр..
    Я устранил проблему с "броском" во время смены уставки и добавил блок архивации (кому не нужно можно удалить) по двум параметрам.
    Скорректированный проект с архивацией также выкладываю (надеюсь все откроется без проблем).
    Фото объекта Вложение 15386
    Доработал; Перевел в данные с уставки и с датчика в целое число, тоесть без запятой, затем завел их в EQ получил буливое значения когда они равны, это значения завел через инверцию на вход PWM и на сброс пид регулятора через R_TRIG. Теперь когда значения фактическое схоже с уставкой булевый сигнал отключает PWM, и через передний фронт дает импульс на сброс пидрегулятора. Работает идеально!!!!

  7. #87

    По умолчанию Управление КЗР

    Хочу реализовать на ПР200 алгоритм управления КЗР. У кого есть последняя версия ПИ для КЗР поделитесь.

  8. #88

    По умолчанию

    Доброго времени суток уважаемые форумчане. Заинтересовался данной темой. Стоит у меня задача сделать управление ИТП на codesys. Будьте добры поделитесь регулятором для клапана (больше/меньше) или ткните носом где взять. За ранее благодарен. Всем здоровья!

Страница 9 из 9 ПерваяПервая ... 789

Похожие темы

  1. Какой ПИД – регулятор выбрать на котёл ДЕ -16
    от Sasha55 в разделе Подбор Оборудования
    Ответов: 20
    Последнее сообщение: 02.04.2019, 16:02
  2. Ответов: 4
    Последнее сообщение: 01.11.2013, 17:42
  3. пид регулятор на плк160
    от smokin в разделе ПЛК1хх
    Ответов: 1
    Последнее сообщение: 20.09.2011, 15:49
  4. ПИД-регулятор на ПЛК100
    от Алексей в разделе ПЛК1хх
    Ответов: 11
    Последнее сообщение: 07.08.2008, 15:02
  5. ПИД регулятор на ПЛК150
    от zilog в разделе ПЛК1хх
    Ответов: 16
    Последнее сообщение: 17.03.2008, 18:32

Ваши права

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