PDA

Просмотр полной версии : Альтернатива ПИДу. Ненужная ерунда, или давно известный велосипед?



anthrwpos
19.10.2018, 20:35
Решил разработать регулятор, работающий на основе физической модели с привлечением элементов предуправления.
Для затравки взял простейшую модель помещения с нагревателем.
Модель заключается в следующем:
1) Постулируются следующие величины.
Теплоемкость отапливаемого помещения C и нагревателя C_h, теплопроводность нагреватель-помещение Q,
уставка T_0.
2) на их основе вычисляются следующие величины:
Тепловая энергия нагревателя W_h = ( T_h - T0 ) C_h
Тепловая энергия помещения W = ( T - T0 ) C
Полная тепловая энергия системы WS = W_h+W
3) Изменение тепловой энергии нагревателя моделируется по закону dW_h/dt = Q ( T - T_h ) + P
, где P - подводимая в нагреватель мощность (величина управления)
4) Изменение тепловой энергии помещения постулируется следующим: dW/dt = Q ( T_h - T ) - P_e
, где P_e - тепловые потери.
5) подставив выражение для тепловой энергии помещения, вычисляем значение тепловых потерь.
Pe = Q ( T_h - T ) - C dT/dt.
6) Из соображений наибыстрейшего достижения уставки постулируем следующий целевой уровень полной тепловой энергии
WS = C_h P_e / Q
Наконец, выбираем следующую стратегию регулирования:
Если полная тепловая энергия ниже целевой, нагреватель включен на полную.
Если полная тепловая энергия выше целевой, нагреватель выключен.
В случае равенства мощность нагревателя выбирается равной вычисленным тепловым потерям.

Так как точного равенства конечно-же не бывает, уровень мощности регулятора на практике берем как тепловые потери плюс разница целевого и текущего уровня полной тепловой энергии деленое на некое время крутизны регулирования.
Сейчас я обкатываю такой регулятор и результаты по крайней мере удовлетворительные.
В принципе он при работе чем-то напоминает ПИД. Но есть и отличия. Например при постоянной отстройке управление растет не линейно, а ускоренно. При достижении целевого уровня энергии управление меняется скачкообразно, при правильно заданных параметрах меньше склонность к перерегулированию и автогенерации при лучшей быстроте реакции. Кроме того, в отличии от абстрактных коэффициентов ПИД, здесь мы задаем реальные физические величины, которые можно с хорошей точностью прикинуть и с еще большей - измерить.

Очевидные проблемы: Предполагается, что температура измеряемая датчиком есть температура во всем помещении. По факту это всегда далеко от истины. Приходится фильтровать данные по некоему времени, чтобы через датчик прошли куски воздуха с разными температурами и усреднить их. Отсюда вторая проблема: алгоритм считает измеренную температуру текущей, а на деле - это температура в неком прошлом - соответственно автогенерация может начаться даже при верно введенных параметрах. Но конечно всё это решается теми-же способами, что и аналогичные проблемы ПИДа.

Собственно интересует:
1) я первый подобное придумал, или уже давно было и обкатано и описано? Тогда где и кем?
2) имеет смысл описанное вообще или ерунда всё это?=)

PS: предуправление (англ. feed forward) - система регулирования, которая вводит коррекцию на основе прямых измерений величины внешнего воздействия, в отличии от обратной связи (feedback), которая вводит коррекцию по факту изменения регулируемой величины. Здесь по сути предпринята попытка некого косвенного измерения внешнего воздействия - тепловых потерь, хотя строго это все равно всё та-же обратная связь.

ASo
19.10.2018, 21:13
Если известны параметры системыкоэффициенты ПИД можно вычислить. Откройте учебник по ТАУ.

anthrwpos
20.10.2018, 07:23
Тут даже учебник по ТАУ открывать не надо. Оптимальные коэффициенты любого линейного регулятора достигаются тогда, когда все корни характеристического полинома равны.
Другое дело, является ли ПИД оптимальным в целом?
К примеру, эволюция температуры во времени при ПИД-управлении описывается дифференциальным уравнением 3 порядка из-за интегральной составляющей, причем невозможно подобрать коэффициенты так, чтобы уравнение выродилось.
А регулятор заданный вышеприведенной моделью в идеальном случае просто по определению оптимален - при подстановке закона регулирования в модель у нас просто всё сокращается)

anthrwpos
20.10.2018, 09:24
ну вот если покажете на модели что стандартный пид заметно уступает Вашему, тогда и можно говорить об оптимальности.

Я могу это устроить, но это будет очевидное жульничество)
Ведь регулирование выведенное из модели будет в этой модели очевидно оптимальным, и ПИД ему проиграет однозначно.
Тут вопрос скорее, кто будет себя лучше вести в реальных условиях.


И не забываем что не тепературой только занимаются пиды
Там нет большого труда переделать единицы измерения под другие)

Трофимов Артем
20.10.2018, 10:05
Идея интересная, но не каждый пользователь и наладчик полезет считать по формулам нужные вводные данные для его ситуации.
у Вас в модели регулятора уже используется 2 параметра , тогда как обычный ПИД использует 1 параметр (одноконтурная САР, что наиболее распространена в применении ).
тут переходим к каскадному регулятору по двум параметрам - один это feedback , как и был, второй - некое внешние воздействие , которое требуется компенсировать. скорость реакции и точность такого регулятора будет естественно лучше одноконтурной САР и вот такой бы регулятор я сравнил с Вашей моделью.
http://kipiavp.ru/info/kaskadnoe-regulirovanie.html

и не забываем, что Вы используете тепловые потери и энергию в данном случае (их требуется вычислять косвенными методами а не прямыми измерениями), тогда как ПИД работает с конкретной физической величиной

p.s. всё регулирование сводится к решению уравнений теплового и материального балансов, откуда всё и вытекает

anthrwpos
20.10.2018, 10:38
Идея интересная, но не каждый пользователь и наладчик полезет считать по формулам нужные вводные данные для его ситуации.
Можно вбить и на глазок) ПИД-коэффициенты тоже нужно по уму задавать исходя из тех-же самых теплоемкостей и теплопроводностей по формулам из учебника ТАУ. Но кто так делает? :-)

у Вас в модели регулятора уже используется 2 параметра , тогда как обычный ПИД использует 1 параметр (одноконтурная САР, что наиболее распространена в применении ).
В качественном ПИД должно быть 2 параметра: управление и отдельно - интегральная составляющая. В большинстве второй нет, что дает некоторые недостатки регулирования, порой существенные.

тут переходим к каскадному регулятору по двум параметрам - один это feedback , как и был, второй - некое внешние воздействие , которое требуется компенсировать. скорость реакции и точность такого регулятора будет естественно лучше одноконтурной САР и вот такой бы регулятор я сравнил с Вашей моделью.Если измерять внешнее воздействие непосредственно, конечно это будет значительно лучше моего косвенного метода.

anthrwpos
20.10.2018, 11:27
С кодесисом я еще не работал. Могу предложить для опытов C, Java, Octave/Matlab, Owen Logic =)

Newcomer
20.10.2018, 11:37
Собственно интересует:
1) я первый подобное придумал, или уже давно было и обкатано и описано? Тогда где и кем?
2) имеет смысл описанное вообще или ерунда всё это?=)


Обратитесь в МГТУ им. Н. Э. Баумана, факультет Информатика и системы управления, кафедра ИУ1 Системы автоматического управления и получите исчерпывающий ответ.

степанов
20.10.2018, 12:15
Обратитесь в МГТУ им. Н. Э. Баумана, факультет Информатика и системы управления, кафедра ИУ1 Системы автоматического управления и получите исчерпывающий ответ.

Я там учусь. В понедельник спрошу у преподавателя.

Newcomer
20.10.2018, 16:43
Решил разработать регулятор, работающий на основе физической модели с привлечением элементов предуправления.
Для затравки взял простейшую модель помещения с нагревателем.
Модель заключается в следующем:
1) Постулируются следующие величины.
Теплоемкость отапливаемого помещения C и нагревателя C_h, теплопроводность нагреватель-помещение Q, уставка T_0.

А будет ли определение С, C_h и Q более легкой задачей чем расчет коэффициентов ПИД регулятора ?

anthrwpos
20.10.2018, 17:21
А будет ли определение С, C_h и Q более легкой задачей чем расчет коэффициентов ПИД регулятора ?
Пока сложно сказать. То что их можно прикинуть - кажется что проще. Но я когда прикинул теплоемкость комнаты тупо по теплоемкости объема воздуха, промахнулся аж в 30 раз)
Обнаружил тем, что вычисляются неадекватно низкие теплопотери. На основе кривой роста температуры при включенном нагревателе скорректировал.
На основе запаздывания изменения температуры за включением-выключением нагревателя получил величину тепловой инерции, а она дает теплопроводность.
Емкость нагревателя тут самая сложная тема. В модели предполагается, что изменение энергии нагревателя непосредственно отражается на изменении измеряемой температуры. Поэтому в емкость нагревателя приходится включать некий "неизмеренный" объем помещения. По форме графика решил поставить емкость нагревателя как 0,15 емкости помещения.
Сейчас пока я недостаточно этот регулятор использовал, и не знаю, как неточность разных параметров сказывается на характере регулирования, пользоваться им сложнее чем обкатанным вдоль и поперек ПИДом. Со временем может стать и проще, а то и даже лучше.

Newcomer
21.10.2018, 10:38
Мое мнение такое - качество регулирования вашего регулятора будет очень низким.

anthrwpos
22.10.2018, 07:15
Реальность гораздо хуже вами описанного. В автобусе те, кому холодно всегда сидят раздетые и на местах, расположенных прям под лючком, откуда дует.
Те же, кому жарко сидят вдалеке от лючка, запакованные в полярные шубы "бир юса". Попытка пересадить "подлюков" на другие места или раздеть альпинистов ни к чему не приводит)

anthrwpos
23.10.2018, 18:18
Причесал в итоге уравнение регулирования и получил соедующий результат.
Величина управления раскладывается на три слагаемых.
Первое пропорционально отстройке, второе пропорционально производной температуры, а третий зависит от истории работы нагревателя (фактически оно равно среднему значению мощности нагревателя за "интегральное" время).
Таким образом, он почти совпадает с обычным ПИДом. Замена интегральной поправки по температуре на поправку связанную с историей работы однозначно положительно сказывается на регулировании. Эта поправка не срезается из-за достижения предельной мощности, как это происходит обычно. Но она и не приводит к запоздалому началу регулирования как это происходит в моей версии ПИД, где интегральная составляющая считается отдельно.
Кроме того, этот регулятор наглядно показывает интересный факт: пропорциональный и дифференциальный коэффициент могут быть выбраны сколь угодно круто при условии, если между ними соблюдено адекватное соотношение. Если дифференциальное время оказывается слишком низким - возникает перерегулирование. Если слишком высоким - недорегулирование (при сколь угодно низком Xp!). Таким образом распространенный в интернете совет по наладке ПИД о том, чтобы поставить нулевое время дифференцирования и добиться пропорциональным коэффициентом отсуствия перерегулирования оказывается полной ерундой. Кстати до этого я исследовал ПИД аналитически и постоянно получал этот результат - что Xp можно задать сколь угодно крутым, и никак не мог поверить, что это действительно возможно, мне постоянно казалось, что я разучился решать дифференциальные уравнения и искал ошибки).

Вобщем, теперь уже окончательно ясно, что нового регулятора как такового я не открыл, а открыл - адекватный метод вычисления интегральной поправки, коим и буду теперь пользоваться. Ну и плюс открыл неожиданные возможности наладки ПИД, о которых не знал раньше. Есть правда одно НО. Это сработает только если регулятор адекватно фильтрует входные данные и считает производную. Не все регуляторы адекватно считают производную - проверено на опыте)

Вольд
23.10.2018, 18:48
Так изложи нам свою авторскую методику расчета коэффициентов ПИД регулятора.

Трофимов Артем
23.10.2018, 19:56
Причесал в итоге уравнение регулирования и получил соедующий результат.
Величина управления раскладывается на три слагаемых.
Первое пропорционально отстройке, второе пропорционально производной температуры, а третий зависит от истории работы нагревателя (фактически оно равно среднему значению мощности нагревателя за "интегральное" время).
Таким образом, он почти совпадает с обычным ПИДом. Замена интегральной поправки по температуре на поправку связанную с историей работы однозначно положительно сказывается на регулировании. Эта поправка не срезается из-за достижения предельной мощности, как это происходит обычно. Но она и не приводит к запоздалому началу регулирования как это происходит в моей версии ПИД, где интегральная составляющая считается отдельно.
Кроме того, этот регулятор наглядно показывает интересный факт: пропорциональный и дифференциальный коэффициент могут быть выбраны сколь угодно круто при условии, если между ними соблюдено адекватное соотношение. Если дифференциальное время оказывается слишком низким - возникает перерегулирование. Если слишком высоким - недорегулирование (при сколь угодно низком Xp!). Таким образом распространенный в интернете совет по наладке ПИД о том, чтобы поставить нулевое время дифференцирования и добиться пропорциональным коэффициентом отсуствия перерегулирования оказывается полной ерундой. Кстати до этого я исследовал ПИД аналитически и постоянно получал этот результат - что Xp можно задать сколь угодно крутым, и никак не мог поверить, что это действительно возможно, мне постоянно казалось, что я разучился решать дифференциальные уравнения и искал ошибки).

Вобщем, теперь уже окончательно ясно, что нового регулятора как такового я не открыл, а открыл - адекватный метод вычисления интегральной поправки, коим и буду теперь пользоваться. Ну и плюс открыл неожиданные возможности наладки ПИД, о которых не знал раньше. Есть правда одно НО. Это сработает только если регулятор адекватно фильтрует входные данные и считает производную. Не все регуляторы адекватно считают производную - проверено на опыте)

а можете указать данный источник по поводу обнуления Д составляющей? это всё при также происходит при также обнулённой И составляющей?
просто на 3 курсе учебника ТАУ банально видно что П регулятор всегда имеет перерегулирование + статическую погрешность регулирования, ПД - не такое перерегулирование как у П но всё равно не идеально.
и только интеграл помогает нам в конечном счёте избавиться от статической погрешности ( хотя он и разносит колебания динамической )
в общем лично моё мнение по теории и практике настройки - П - скорость выхода на уставку и окно статической погрешности, И - забываем про статику и уже настраиваем колебания кривой разгона , Д - ускоряем тех двух перцев , что перед ним.

и дополню - в большинстве процессов степень затухания 1/3 считается оптимальной - крайне редко , где требуется более точный выход.

anthrwpos
24.10.2018, 11:42
Так изложи нам свою авторскую методику расчета коэффициентов ПИД регулятора.

Могу предложить - согласно данной модели. На картинке: пропорциональный коэффициент, дифференциальное время, интегральное время, а ниже - добавка, которой нет в ПИД-регуляторах) Не могу сказать, как нужно её правильно учесть.
39442
Кроме параметров, которые уже расшифровывались тау - это "крутизна управления". Нужно ставить в 2-3 раза больше, чем задержка от воздействия до реакции.


просто на 3 курсе учебника ТАУ банально видно что П регулятор всегда имеет перерегулирование + статическую погрешность регулирования, изменение регулируемой величины ПД регулятором описываются (в простейшей модели типа той что я использую) диффурой второго порядка. Там возникает характеристическое уравнение второй степени. Где его дискриминант отрицательный, возникает перерегулирование (решение кроме затухающей экспоненты содержит синус и косинус), где положительный - недорегулирование (решение- постоянная умноженная на затухающую экспоненту), ноль - наибыстрейшее затухание (решение - полином 1 степени умноженный на затухающую экспоненту). При определенных условиях экспонента может перестать быть затухающей

и только интеграл помогает нам в конечном счёте избавиться от статической погрешности ( хотя он и разносит колебания динамической )
Теория позволяет сколь угодно крутой пропорциональный коэффициент при правильно выбранном дифференциальном. Поэтому гипотетически статическую погрешность можно сделать сколь угодно малой без интегрального регулирования.
Но на практике возможности ограничены запаздыванием измеренной датчиком реакции системы на управление. В модели этой задержки нет, при включении нагревателя сразу растет 1 производная температуры. Поэтому на практике нельзя сделать слишком низкое Xp и приходится добавлять интегральную подстройку.

Вольд
24.10.2018, 13:16
С, C_h и Q как определить ?

anthrwpos
24.10.2018, 15:02
С, C_h и Q как определить ?

Пока что приходит в голову только так:
Задать на глазок, а затем корректировать с помощью корреляционного анализа.
Теплопотери определяются следующим образом:

Pe(t)=Q*Err(t)+(Wh(t)*Q)/Ch-dT/dt*C;

Соответственно, если Pe(t) коррелирует с Err(t) (отстройка) - нужно корректировать Q
Если с dT/dt - нужно корректировать C
если с Wh(t) - Ch.

Хотя это еще вопрос действительно ли эти величины должны быть независимы?
Я кстати, делаю испытательный стенд на жабе, где можно будет на модели, приближенной к реальности погонять разные регуляторы и посмотреть, что из этого выходит. Как сделаю - опубликую тут.

PS Картина работы данного регулятора. Мне лично нравится)39457
Красным - температура, по левой шкале. По правой шкале - синее - вычисленные теплопотери, зеленое - мощность нагревателя.

PPS Сделал стенд на жабке. Кто владеет жабкой - можете поразвлекаться, а то и улучшить. Забабахал туда простенькую рисовалку графиков, модель комнаты близкую к реальности, с шумами датчика и простенький ПИД-регулятор и свой регулятор.
https://github.com/anthrwpos1/RegTest
Пид сделан специально обычным, дубовым, как его делают в промышленности, чтобы разработчики ПИД-алгоритмов наглядно увидели, как он регулирует)
Чуть позже сделаю "мой ПИД". Разработчикам ОВЕН рекомендую тоже побаловаться со стендом, а так-же посмотреть, не является ли случайно ваша реализация ПИД в ТРМках и прочих местах той самой дубовой, как в этой программе, потому что очень похоже=)

o_nik
14.12.2018, 20:36
Решил разработать регулятор, работающий на основе физической модели с привлечением элементов предуправления.
Мне кажется, или Вы недавно отучились в вузе?) ... Столько оптимизма :)



Если полная тепловая энергия ниже целевой, нагреватель включен на полную.
Если полная тепловая энергия выше целевой, нагреватель выключен.
В случае равенства мощность нагревателя выбирается равной вычисленным тепловым потерям.
Судя по описанию, сам ваш регулятор гораздо проще ПИД, но содержит дополнительные вычисления для частного использования.
Вообще, можно попробовать глянуть в сторону FuzzyLogic управления.


В случае равенства мощность нагревателя выбирается равной вычисленным тепловым потерям.
Обычно, нагреватели управляются дискретно включен/выключен.
Если он с какого-то рода симисторным управлением, имитирующим управление мощностью (температурой нагрева), значит модель самого нагревателя тоже надо учитывать (дискретную). Может, конечно, я не прав.



Например при постоянной отстройке управление растет не линейно, а ускоренно
Линейно работает П-регулятор.
ПИД-регулятор на то и имеет 3 коэффицента, чтобы "пропорционировать", "опережать (ускоряться)" и учитывать наработку "в прошлом". Если не устраивает ПИД-регулятор из коробки, реализацию дифференцирования можно написать самому с дискретизацией как вам удобно.


имеет смысл описанное вообще или ерунда всё это?=)
Имеет, если вы:
1. в состоянии составить полную мат. модель реальной системы (что по моему мнению очень сложно на практике).
2. учесть в модели, что она на самом деле дискретна, а методики синтеза в основном для непрерывных систем (применить теорему Котельникова-Шеннона, если получается,... или опечалиться)
3. синтезировать оптимальный регулятор, используя полученные знания за 5-6 лет вуза (потратив мнооого времени)
4. объект управления - шаттл с посадкой на вертикальную платформу, а не обогрев курятника :)

Синтезированный регулятор будет естественно лучше ПИД, и настраивать его не придется методом научного тыка, но на практике это как правило не реально, трудозатратно, немозгохватаемо (это я про себя если что :)), не поставить на поток, недостаточно времени, недостаточно сведений для составления мат. модели, т.к. используются датчики и исполнительные механизмы с начинкой "черный ящик".

anthrwpos
23.12.2018, 10:11
Мне кажется, или Вы недавно отучились в вузе?) ... Столько оптимизма :)
Давно. Но вообще я физик, а вот с КИП/АСУ работаю не так давно.


Судя по описанию, сам ваш регулятор гораздо проще ПИД, но содержит дополнительные вычисления для частного использования.
По сложности он такой-же как ПИД, но в нем другой алгоритм компенсации статической ошибки ПД-регулятора. Не интегральный.

Обычно, нагреватели управляются дискретно включен/выключен.
Обычно аналоговый выход с регуляторов подается на ШИМ, а он уже управляет нагревателем дискретно.

Линейно работает П-регулятор.
Оператор называют линейным, если A(ax+by) = a*A(x) + b*A(y), где x,y - вектора, a,b - произвольные числа.
Операторы интегрирования и дифференцирования линейны. (интересно, в технических вузах преподают всякие ФункАны и ЛинАлы? =) )

Имеет, если вы:
1. в состоянии составить полную мат. модель реальной системы (что по моему мнению очень сложно на практике).
2. учесть в модели, что она на самом деле дискретна, а методики синтеза в основном для непрерывных систем (применить теорему Котельникова-Шеннона, если получается,... или опечалиться)
3. синтезировать оптимальный регулятор, используя полученные знания за 5-6 лет вуза (потратив мнооого времени)
4. объект управления - шаттл с посадкой на вертикальную платформу, а не обогрев курятника :)
Синтезированный регулятор будет естественно лучше ПИД, и настраивать его не придется методом научного тыка, но на практике это как правило не реально, трудозатратно, немозгохватаемо (это я про себя если что :)), не поставить на поток, недостаточно времени, недостаточно сведений для составления мат. модели, т.к. используются датчики и исполнительные механизмы с начинкой "черный ящик".
Моя цель была сделать не регулятор какой либо одной реальной системы, а регулятор столь-же универсальный как ПИД, на основе модели, которая приближенно описывает большинство существующих реальных систем.
Вообще изначально моей целью было на основе некой простой модели вывести, чему физически должны соответствовать коэффициенты ПИД. Но в итоге я пришел к выводу, что физическое соответствие есть только у дифференциального времени ПИД, наполовину у пропорционального коэффициента, а интегральная компенсация вообще не имеет смысла и её нужно заменить другим алгоритмом.
В итоге на настоящий момент я окончательно пришел к модели ПД+ регулятора, в котором вместо интегрирования отстройки мы в качестве добавки используем нечто что я называю "вычисленными потерями".
Всего у меня так-же как и в ПИД, 3 параметра:
Основной параметр D равный отношению мощности управления к скорости роста величины.
Время инерции системы tU определяется как время отклика системы на управление (строго - время, нужное для того, чтобы скорость роста величины достигла 63% установившегося значения)
Время крутизны регулирования tX.
Тогда пропорциональный коэфициент ПД-регулятора Xp = tX / D
дифференциальное время ПД регулятора tD = tU
добавка, компенсирующая статическую ошибку <PE>_tX (среднее значение потерь за время tX)
где PE = <P>_tU - D * (dX/dt) (среднее значение управления минус основной параметр на производную величины)
Понять смысл данной поправки очень легко. По определению параметра D, произведение D * (dX/dt) есть скорость изменения полной энергии системы. Тогда как <P>_tU есть ни что иное как поступление энергии в систему от исполнительного устройства. Вычитаем из поступлений изменения - получаем потери энергии. Усредняем их за некое время tX, которое обеспечивает достаточное сглаживание и получаем ту самую статическую поправку.
В итоге ПД-регулятор определяет нехватку энергии, которую нужно компенсировать, чтобы "догреть" изолированную систему до уставки за время tX. А добавка определяет потери, которые нужно компенсировать.

o_nik
23.12.2018, 20:11
вообще я физик, а вот с КИП/АСУ работаю не так давно
Хорошо, когда есть физическая и математическая база в голове, особенно если Вы этим занимались на работе. У меня вот ее уже нет :)

Например при постоянной отстройке управление растет не линейно, а ускоренно
Это же Вы писали, а не я. Линейно растет..., т.е. пропорционально, т.е. я имел в виду, что описывается линейным уравнением y = kx + b (я про операторы ничего не писал).

регулятор столь-же универсальный как ПИД
В области компенсирования теплопотерь при использовании нагревателя? Есть еще другие области...там ПИД тоже используют, ... хотя уже писали выше.
Насколько я понимаю, одна из задач синтеза оптимального регулятора - это получение его мат модели с передаточной функцией компенсирующей (обратной) передаточную функцию объекта управления.
Это, в свою очередь, сводится к задаче получения передаточной функции объекта управления, что сложно. Иначе регулятор не будет оптимальным.
До Вас никто не смог описать оптимальную методику подбора настройки ПИД однозначно применимую. Если вы разработаете универсальный регулятор с методикой его настройки, которая проста для понимания и работает, а также применима на работающем объекте, то мы все ждем, я думаю, с нетерпением.

интересно, в технических вузах преподают всякие ФункАны и ЛинАлы? =)
Вы же наверно тоже учились в оных :)
У нас преподавали много всего, больше, чем хотелось бы... до сих пор помню, такие темы как: операционное исчисление, диф. уравнения в частных производных, сфера Римана... уже почти 20 лет прошло.

anthrwpos
24.12.2018, 10:39
я имел в виду, что описывается линейным уравнением y = kx + b (я про операторы ничего не писал).
Я просто хотел сказать, что линейное уравнение - это слишком частный случай линейного регулятора.

В области компенсирования теплопотерь при использовании нагревателя? Есть еще другие области...там ПИД тоже используют, ... хотя уже писали выше.
Я уже даже в последней редакции перевел всё в абстрактные единицы не имеющие отношение к регулированию теплом)

Насколько я понимаю, одна из задач синтеза оптимального регулятора - это получение его мат модели с передаточной функцией компенсирующей (обратной) передаточную функцию объекта управления.
Как я понял, реальная модель будет содержать слишком много трудноопределяемых параметров, которые еще и могут оказаться зависящими от времени, а тут уже без кучи дополнительных датчиков их вычислить нельзя. Поэтому я остановился на простой модели системы вида поток управления - емкость 1 - линейный канал - емкость 2 - поток потерь, поскольку она способна адекватно работать имея всего один датчик и вычисляя всего одну неизвестную величину - поток потерь.
Более того внес туда упрощение малости емкости 1 по сравнению с емкостью 2, потому что обычно это так и есть, плюс добавил смягчение регулирования для того, чтобы не учитывать шумы датчика, флуктуации измеряемой величины связанные с неоднородностью измеряемой среды и неучтенные задержки. Итого получилось нечто вполне подходящее для очень широкого круга решаемых задач, которое у меня работает лучше ПИД по вполне очевидным причинам.

kon48
25.12.2018, 18:33
Альтернативы ПИД регулятору при решении задач производстенной и бытовой автоматизации нет. Хотеось бы услышать от коллеги anthrwpos слабые места ПИД регулирования,
которые собираются устранить разрабатывая альтернативный регулятор. Наверное физику не надо доказывать, что общая погрешность системы регулирования составляют погрешность средства измерения, погрешность регулятора и погрешность вносимая исполнительным устройством. Если взять, к примеру, высоко температурные электрические печи накаливания, то
погрешность термопары вносит наибольшую составляющую в общую погрешность системы авторегулирования. А как известно хочешь снизить общую погрешность - снижай наибольшую из
составляющих, а это термопара. Т.е не следует ловить блох. Вот если будет изобретено средство измерений с лучшими метрологическими характеристиками которое заменит термопару
и возникнут производственные потребности улучшить точностные характеристики системы регулирования, тогда можно использовать и другие методы регулирования. Они уже разработаны
и используются. Это самонастраивающиеся (адаптивные) системы с эталонной моделью. Модель может быть как простой так и сложной, в том числе и физической. И для реализации
используется сложный математический аппарат вплоть до решения обратных некорректных задач.
Но как давали совет классики "Подвергай все сомнению". Уверены в себе - дерзайте. Представите на форуме апробированные результаты исследований буду рад за вас.
С уважением Николай Митюхин

Владимир Ситников
25.12.2018, 18:52
Альтернативы ПИД регулятору при решении задач производстенной и бытовой автоматизации нет. Хотеось бы услышать от коллеги anthrwpos слабые места ПИД регулирования,

Видели статью Google про алгоритм кондиционирования ЦОД (https://deepmind.com/blog/deepmind-ai-reduces-google-data-centre-cooling-bill-40/)?
Там альтернативный алгоритм существенно улучшил энергоэффективность.

И напрямую приводятся 3 проблемы "обычных" решений:


1) The equipment, how we operate that equipment, and the environment interact with each other in complex, nonlinear ways. Traditional formula-based engineering and human intuition often do not capture these interactions.
2) The system cannot adapt quickly to internal or external changes (like the weather). This is because we cannot come up with rules and heuristics for every operating scenario.
3) Each data centre has a unique architecture and environment. A custom-tuned model for one system may not be applicable to another. Therefore, a general intelligence framework is needed to understand the data centre’s interactions.

anthrwpos
26.12.2018, 06:25
Альтернативы ПИД регулятору при решении задач производстенной и бытовой автоматизации нет. Хотеось бы услышать от коллеги anthrwpos слабые места ПИД регулирования,
которые собираются устранить разрабатывая альтернативный регулятор.

Есть хороший ПД-регулятор. Хорошо теоретически обосновывается и рассчитывается. В идеальных условиях его полностью достаточно.
В реальных условиях всегда есть задержки и шумы, которые не позволяют выбрать Xp достаточно крутым. Но если мы ослабляем (увеличиваем) Xp - возникает уже существенная статическая ошибка ПД-регулятора.

А далее начинается вся суть. Устранение статической ошибки. Очевидное решение: интегральная составляющая. И здесь начинаются проблемы.
1) Исполнительное устройство не всегда способно вывести систему на уставку. К примеру - обогреватель комнаты. Если на улице тепло - обогреватель не нужен, отстройка постоянно отрицательная, управление ноль. Что делает интегральная составляющая? Интегрирует постоянную отстройку. Здесь разные производители начинают придумывать заплатки реализации, которые бы нивелировали эту проблему. Но как я убедился на практике - с каждой такой заплаткой всегда следует другая проблема.
2) интегральная составляющая не рассчитана на смену уставки/включение регулятора. Включаем систему - начинаем интегрировать отстройку. Можно легко показать, что не существует такого параметра интегрального времени, который бы обеспечил хороший переходной процесс в общем случае. Для нулевых потерь интегрировать вообще ничего не нужно - систему выведут на уставку ПД-составляющие. Для потерь равных мощности исполнительного устройства нужна максимально возможная поправка.
3) интегральная составляющая очень долго реагирует на смену внешних условий. Она работает от отстройки. Когда отстройка еще мала но уже заметно уползает - интегральная составляющая только начинает корректироваться. В итоге регулируемая величина заметно проседает.

Мой регулятор отличается от ПИД только способом вычисления поправки, устраняющей статическую ошибку ПД-регулятора. И этот способ простым единым образом решает все вышеперечисленные проблемы, не требуя более никаких заплаток.

IVM
26.12.2018, 11:44
Не надо много слов. Переходный процесс для своего чудо регулятора покажи.

kon48
26.12.2018, 12:23
Добрый день коллеги!
Спасибо Владимиру Ситникову. Со статьей познакомился. Это уникальная, не тиражируемая разработка с элементами пиара и огромным объемом задействованной априорной информацией. Априорная информация стоит дорого. Известная фирма может себе это позволить. Производственные задачи при разработке систем автоматизации не позволят иметь и малую толику априорной информации. Сейчас система постановки задач сводится к ущербному и крайне вредному принципу, что бы было сделано вчера. И в этом во многом корень проблем.
Полагаю, что в портфелях наших ученых то же есть уникальные разработки.
Разговор же ведется о массовом применении доступных, надежных, не требующих при эксплуатации высоко квалифицированного персонала регуляторах, каковыми и являются ПИД регуляторы. Всегда с уважением оцениваю работу разработчиков регуляторов ОВЕН - ТРМ101, ТРМ210, ТРМ251.
Примененные в этих регуляторах алгоритмы автонастройки эффективны для большинства применений. Качество регулирования с грамотно выбранными составляющими системы АСУ высокое.

Есть хороший ПД-регулятор. Хорошо теоретически обосновывается и рассчитывается. В идеальных условиях его полностью достаточно.
В реальных условиях всегда есть задержки и шумы, которые не позволяют выбрать Xp достаточно крутым. Но если мы ослабляем (увеличиваем) Xp - возникает уже существенная статическая ошибка ПД-регулятора.

А далее начинается вся суть. Устранение статической ошибки. Очевидное решение: интегральная составляющая. И здесь начинаются проблемы.
1) Исполнительное устройство не всегда способно вывести систему на уставку. К примеру - обогреватель комнаты.
Коллега объект испытаний как комната вами выбран на вскидку, без обоснования и предявления требований. И еще. Это что же за исполнительное устройство если оно не в состоянии
вывести систему на уставку?
Полагаю, что для разработчика АСУ важна информация об объектах автоматизации (кривой разгона и др.). Сейчас много разговоров о цифровой экономике.
И в связи с этим хотелось услышать ваше мнение на счет того, что бы на уровне ГОСТ обязать производителей технологического оборудования представлять объективную информацию (например, кривую разгона, передаточную функцию и др.) об изделии как потенциального объекта автоматизации
С уважением и наилучшими пожеланиями Николай Митюхин

anthrwpos
26.12.2018, 19:56
Не надо много слов. Переходный процесс для своего чудо регулятора покажи.

Вообще, в разных условиях переходные процессы выглядят по-разному.
Более того, оптимальные настройки регуляторов на регулирование без резких бросков и для преодоления переходных процессов будут разными.
Ну для затравки я настроил параметры моего и ПИД регуляторов на достижение минимальной среднеквадратичной отстройки методом Монте-Карло. А затем поставил их в условия резкого переходного процесса. Вот что из этого вышло. Здесь кривая моего регулятора черный цвет, ПИД регулятора - красный.
40581
Затем я настроил их параметры на наилучшее прохождение переходных процессов и получил следующую картину.
40583
Upd Для более чистого эксперимента отключил шумы модели вообще.

Стенд для испытаний регуляторов с жесткой моделью здесь https://github.com/anthrwpos1/RegTest
Кто владеет java - можете поразвлекаться тоже а заодно проверить, что я не жульничаю)

kon48
26.12.2018, 20:57
Добрый вечер!
Коллега anthrwpos.
1.О каком сравнении может идти речь если из представленной регистрации видно, что ПИД регулятор не настроен. Такой процесс свойственен П-регулятору.
2.Часто употребляете выражение опримальные настройки регулятора. О каком критерии оптимальности идет речь? Сформулируйте его.
С уважением Николай Митюхин

anthrwpos
27.12.2018, 06:20
Добрый вечер!
Коллега anthrwpos.
1.О каком сравнении может идти речь если из представленной регистрации видно, что ПИД регулятор не настроен. Такой процесс свойственен П-регулятору.
2.Часто употребляете выражение опримальные настройки регулятора. О каком критерии оптимальности идет речь? Сформулируйте его.
С уважением Николай Митюхин
Критерий оптимальности - минимизация среднеквадратичного отклонения от уставки в данных условиях работы.

На первой картинке условия под которые оптимизировались регуляторы - это работа при плавных изменениях внешних условий и с шумами датчика.
На второй картинке условия оптимизации - резкое изменение внешних условий.

Соответственно оптимальные параметры в обоих случаях разные. Можно легко показать, что когда регулятор настроенный на хороший переходной процесс регулирует в условиях где нет резких переходов - отклонение от уставки будет выше.

IVM
27.12.2018, 10:03
Руководство по применению своего регулятора по какому-то конкретному объекту регулирования приведите. С ПИД регулятором все понятно, там все сводится к подбору коэффициентов. А как у вас ?

anthrwpos
28.12.2018, 20:53
Я так понял, все все еще смотрят на формулировку написанную в начале этой темы.
Сейчас мой регулятор задается значительно проще - как ПД-регулятор с некой добавкой. У него всего 3 параметра так-же как и у ПИД, два из них по сути точно такие-же как пропорциональный и дифференциальный параметр ПИД.
Таким образом, отвечая на популярные вопросы: настройка моего ПД+ регулятора в точности такая-же как и ПИД вплоть до того, что можно просто пересчитать коэффициенты ПИД в коэффициенты ПД+ регулятора и оно будет вполне-корректно работать вместо ПИД. Работают они очень схожим образом, заметно отличаясь лишь в условиях, где интегральная поправка ПИД начинает "глючить" моя поправка продолжает работать как положено.
Вот и вся разница)

Владимир Ситников
28.12.2018, 23:22
Затем я настроил их параметры на наилучшее прохождение переходных процессов и получил следующую картину.
40583

Можете пояснить что нарисовано на этих графиках?
По оси x, очевидно, время. А что по оси Y?

О каком воздействии на систему речь?


Кто владеет java - можете поразвлекаться тоже а заодно проверить, что я не жульничаю)
Добавили бы unit-test'ы. Было бы проще на всё это смотреть.

Например, сдаётся мне, что ваш "волшебный" регулятор может выдать управляющий сигнал "больше 100%" (или меньше 0) (см https://github.com/anthrwpos1/RegTest/blob/master/src/Regulators/PhysReg.java#L48-L50 -- возвращается значение pRaw, которое, очевидно, может выходить за границы), и модель подчинится такому управлению и заставит нагреватель сгенерировать больше тепла (или вообще батарею превратит в кондиционер).

Я бы в обработку модели предложил добавить проверку на то, что регулятор не пытается возвращать управляющий сигнал за пределами 0..1

Как у вас работает датчик -- непонятно (я про dSense0/dSense1). Почему не идёте по своей концепции и не делаете в духе "теплопроводность датчика", "теплоёмкость датчика"?


PS. На "new PhysReg(50, 200, 300, 0.1, 20, 40, 300);" без боли смотреть невозможно. Что означают все эти цифры?
Тут нужно либо на Kotlin'е писать (там есть именованые параметры), либо в духе new PhysReg().setTimeStep(0.1).set... , либо ещё как. Но на 50, 200, 300 смотреть невозможно, и, очевидно, тут какое-то жульничество, которое даже проверять не хочется.

o_nik
29.12.2018, 09:52
...я настроил параметры моего и ПИД регуляторов

Комментариев коде явно не хватает, чтобы у желающих посмотреть возникло желание вникнуть :), стиль программирования на яве тоже странноватый, например, интерфейс регулятора, где нет уставки (хотел ее вывести на график)...

А что, если попробовать в вашем примере вот такие коэффициентики ПИДа:


PID_Fine pid = new PID_Fine(4.3, 60, 300, 0.1, 40, 20); //создаем ПИД-регулятор

Алексей Дмитриев
29.12.2018, 10:16
Ребята, много букв, не осилил. Только давно уже известен регулятор с нечеткой логикой (fuzzy logic), и вы, уважаемый anthrwpos изобретаете велосипед, а по идее fuzzy-регулятор под конкретную задачу, не более того.
С задачей регулирования температуры прекрасно справляется обычный ПИ-регулятор.

Владимир Ситников
29.12.2018, 11:38
Комментариев коде явно не хватает, чтобы у желающих посмотреть возникло желание вникнуть :), стиль программирования на яве тоже странноватый, например, интерфейс регулятора, где нет уставки (хотел ее вывести на график)...
Всё так!
Я сначала тоже думал это же самое написать, но остановился на мысли "как бы разговор не перешёл в плоскость Java программирования".

o_nik
29.12.2018, 12:07
как бы разговор не перешёл в плоскость Java программирования
Похоже, уже переходит :) Только я с Вами сильно дискутировать=спорить не буду, т.к. уже лет 7 на Java не писал.

Да, впрочем, ... с ней с явой.
Хотелось бы, таки, чтоб автор прокомментировал ПИД-регулятор с предложенными коэффициентами, интересно дальнейшее развитие темы.

anthrwpos
29.12.2018, 16:14
И где интегральная поправка ПИД начинает "глючить" ?
Извесно где.
Вот комната, в ней нагреватель и ПИД-регулятор, который должен начать её греть, если температура опускается ниже уставки.
Что делает интегральная поправка летом, когда температура в комнате стабильно выше уставки при выключенном обогревателе?
Правильный ответ: интегрирует по чем зря отрицательную отстройку. В итоге когда настанет зима, там уже столько наинтегрируется, что он еще долго не включится.
Я лично видел один регулятор, кстати, промышленный, голландского производства, который действительно так работает.
Что делают нормальные производители? Придумывают заплатки реализации, где ограничивают бесконтрольное интегрирование в подобных ситуациях. Но я могу целую статью написать о том, какие бывают заплатки и к каким другим глюкам они приводят.

anthrwpos
29.12.2018, 16:49
Можете пояснить что нарисовано на этих графиках?
По оси x, очевидно, время. А что по оси Y?
значение регулируемой величины.

Например, сдаётся мне, что ваш "волшебный" регулятор может выдать управляющий сигнал "больше 100%" (или меньше 0) (см https://github.com/anthrwpos1/RegTest/blob/master/src/Regulators/PhysReg.java#L48-L50 -- возвращается значение pRaw, которое, очевидно, может выходить за границы), и модель подчинится такому управлению и заставит нагреватель сгенерировать больше тепла (или вообще батарею превратит в кондиционер).

Я бы в обработку модели предложил добавить проверку на то, что регулятор не пытается возвращать управляющий сигнал за пределами 0..1


pHeater = limit(regulator.control(tSensor)) * pHeaterMax;
limit - это оно и есть - ограничитель выхода регулятора.
А сам регулятор должен выдавать управление и меньше 0 и больше 1 на случай, если он регулирует не процент включения нагревателя, а какую либо другую величину, которая может изменяться в других пределах.
Например у меня есть регулятор, который вычисляет температуру теплоносителя. Тут уж диапазоном 0..1 никак не обойтись.

Как у вас работает датчик -- непонятно (я про dSense0/dSense1). Почему не идёте по своей концепции и не делаете в духе "теплопроводность датчика", "теплоёмкость датчика"?
этот финт дает более глубокую задержку данных от датчика, которую невозможно компенсировать по производной. Всё как в жестокой реальности)


PS. На "new PhysReg(50, 200, 300, 0.1, 20, 40, 300);" без боли смотреть невозможно. Что означают все эти цифры?
В стандартной библиотеке java есть полно конструкторов с простым перечислением кучи параметров. Я лично уже привык смотреть в исходники либо в документацию, чтобы понять что это всё такое.
Может это конечно плохой стиль, спорить не буду.

Комментариев коде явно не хватает, чтобы у желающих посмотреть возникло желание вникнуть :), стиль программирования на яве тоже странноватый, например, интерфейс регулятора, где нет уставки (хотел ее вывести на график)...
У меня к сожалению очень мало опыта в программировании. Уж что вышло то вышло. Ну и плюс делал второпях, чтобы провести нужные испытания и хоть что нибудь по существу тут задаваемых вопросов ответить. Ну и самому убедиться, что регулятор работает как положено.


А что, если попробовать в вашем примере вот такие коэффициентики ПИДа:


PID_Fine pid = new PID_Fine(4.3, 60, 300, 0.1, 40, 20); //создаем ПИД-регулятор

Я сегодня устранил баг в модели, поэтому там все параметры поменялись. Если вы рассчитывали эти параметры регулятора под старую модель, то нужно пересчитать.
А если просто так - то сейчас оно выглядит так:
40616
уставка черным, график температуры красным.

o_nik
29.12.2018, 17:43
Я сегодня устранил баг в модели, поэтому там все параметры поменялись. Если вы рассчитывали эти параметры регулятора под старую модель, то нужно пересчитать.
Качал с гитхаба сегодня, где-то за 30 - 60 мин до своего поста.

При запуске Main я так понимаю в консоль выхлоп оценки ошибки выдавался для ПИД и вашего регулятора?
А где аналогичный график с вашим регулятором?

Владимир Ситников
29.12.2018, 18:26
значение регулируемой величины.

Это да. Но почему она внезапно вниз скакнула?
Что изменилось?
Где это в Java коде?

anthrwpos
29.12.2018, 18:57
А как предлагаете ? Долбится головой апстену ?

Я вижу проблему в самой процедуре интегральной подстройки. Сам замысел устранять статическую ошибку ПД-регулятора таким образом содержит незаконные допущения, которые расходятся с практикой использования регуляторов, вот и всё)
В замен я предлагаю осмысленную процедуру подстройки, которая в принципе не плохо работает "в лоб", не требуя от производителя регуляторов думать о тонкостях реализации.


Это да. Но почему она внезапно вниз скакнула?
Что изменилось?
Где это в Java коде?

Это тест на реакцию при резкой смене внешних условий.
В коде это выглядит как перегрузка метода setTOut класса PhysModel, где мы задаем внешнюю температуру:

model2 = new PhysModel(random, pr, 0.000, 60, n) {
@Override
public double setTOut(double time) {
// return super.setTOut(time);
return functionT(time);
}
};
В качестве внешней температуры для тестов используется такой алгоритм:

static double functionT(double time) {
if (time < 5000) return 10;
return 0;
}

Если его не перегружать - работает алгоритм случайного блуждания внешней температуры. А так вы можете задать свою форму для своих тестов.

anthrwpos
29.12.2018, 19:06
Качал с гитхаба сегодня, где-то за 30 - 60 мин до своего поста.
Я закоммитил исправленную версию только когда свой пост написал.

При запуске Main я так понимаю в консоль выхлоп оценки ошибки выдавался для ПИД и вашего регулятора?
верно

А где аналогичный график с вашим регулятором?
Вот добавил синим, причем с параметрами "на глазок" исходя из модели, не оптимизированными.
40617

А вот тоже самое со следующими параметрами ПИД: Xp = 0.5, tI = 300, tD = 120
40618

o_nik
29.12.2018, 19:15
Понятно, для старой модели ваш регулятор выдавал ошибку порядка 0,3.
Ваш ПИД с моими настройками около 0,2.
Все расчеты в ваших критериях, вашим софтом.

Если действительно интересно, откатитесь к ветке предыдущей (вы же под гитом) и подставьте мои коэффициенты и графики в студию.

Сейчас вы поменяли модель, через 2 часа после моего поста :) , логично, регулятор надо перенастраивать.... надо опять смотреть... Netbeans под рукой нет.


Величина перерегулирования я надеюсь не критична, главный критерий ошибка?

Владимир Ситников
29.12.2018, 19:24
Если его не перегружать - работает алгоритм случайного блуждания внешней температуры. А так вы можете задать свою форму для своих тестов.

Сейчас получается, что вы показали какой-то график, но непонятно как из него делать выводы.

Вот статья в которой рассматриваются разнообразные сценарии: https://habr.com/post/143388/
Было бы хорошо сделать что-нибудь в подобном случае, где показать "вот наша температура, а вот жахнули морозы, а вот оттепель" и т.п.

Сейчас же просто график "ПИД vs ПИД++", и неясно что за внешнее воздействие было.

anthrwpos
29.12.2018, 19:30
Понятно, для старой модели ваш регулятор выдавал ошибку порядка 0,3.
Ваш ПИД с моими настройками около 0,2.
Ну это не новость. Мой регулятор в половине случаев дает ошибку больше, чем ПИД, а в другой половине - меньше.=)

Величина перерегулирования я надеюсь не критична, главный критерий ошибка?
Что критично, а что нет - зависит от того, что тестируется и что хочется увидеть в результате.
На самом деле я погоняв свой регулятор в различных в том числе и жестких условиях понял, что настройка параметров по легко определяемым физическим параметрам далеко не всегда адекватна.
В тяжелых случаях может понадобиться серьезно корректировать коэффициенты.
Потом, я еще не остановился на финальной формулировке самого вида моего регулятора. Например, должно ли время усреднения PE совпадать с временем крутизны регулирования tX. Должно ли это усреднение использовать компенсацию тренда или нет? Это делает её гораздо реще, но иногда приводит к автогенерации. Сейчас я прикрутил к времени фильтрации адаптивную подстройку, что позволяет использовать и усреднение с компенсацией тренда и подавляет автогенерацию.

o_nik
29.12.2018, 19:44
Сейчас же просто график "ПИД vs ПИД++", и неясно что за внешнее воздействие было.
Это график стремления температуры к уставке для модели anthrwpos в последней (новой) реинкарнации. Уставка, кстати, +20°C по шкале oY в последних скринах (по коду на жабе можно догадаться, почему бы об этом не написать - я не знаю)
В модель не вникал, если честно (да и не физик я).

Жду ответа автора на мой пост.
Видимо придется ставить нетбинс ...

Пока видится все это так:

настройка моего ПД+ регулятора в точности такая-же как и ПИД вплоть до того, что можно просто пересчитать коэффициенты ПИД в коэффициенты ПД+ регулятора и оно будет вполне-корректно работать вместо ПИД
Регулятор ПД+ это регулятор ПИД, в котором "И" нужно поделить на сорок два (https://www.youtube.com/watch?v=fbaPsiU0FCA), чтобы получить ПД+

o_nik
29.12.2018, 19:47
Ну это не новость. Мой регулятор в половине случаев дает ошибку больше, чем ПИД, а в другой половине - меньше.=)
Поподробнее пожалуйста, не понял.

anthrwpos
29.12.2018, 19:51
"незаконные допущения" - где ?
предполагая, что можно устранить статическую ошибку интегрированием мы неявно полагаем, что она связана только с законом регулирования, а не с физическими ограничениями исполнительного устройства. Например, обогреватель не может греть в минус - поэтому летом интегрировать нельзя. А если бы мог, и еще и не имел бы максимальной мощности - то работало бы отлично и не очень нужно было бы интегральную подстройку ПИД на что-то менять.
Можно придумать заплатку, которая запрещала бы интегрировать летом, или суровой зимой, когда обогреватель уже не справляется. Мои реализации ПИД именно так и делали. Но и в этом случае отработка возврата в нормальное регулирование зачастую происходит с проседанием.


Вопрос из п#34 - ?

С ПИД регулятором все понятно, там все сводится к подбору коэффициентов. А как у вас ?
- Всё точно так-же - подбор трех коэффициентов.
А что бывает иначе? =)

.. и стало еще лучше чем просто ПИД ?
На работе мои реализации ПИД уже давным давно с адаптивными подстройками.
Управление утилизацией тепла ГПУ на обычном ПИД вообще не работает. Или входит в автогенерацию, или машина перегревается потому что регулятор не сообразил вовремя открыть клапан.

anthrwpos
29.12.2018, 20:08
Если действительно интересно, откатитесь к ветке предыдущей (вы же под гитом) и подставьте мои коэффициенты и графики в студию.


откатил, действительно ваши параметры дают ошибку 0,19, мои 0,31. График температур такой.
40619

Переделал параметры своего регулятора так, чтобы они соответствовали вашим.

PhysReg pr = new PhysReg(14, 300, 60, 0.1, 20, 40, 60);
ошибка ПИД 0,19, PR - 0,24
40620

А при таких параметрах мой регулятор уже выигрывает:

PhysReg pr = new PhysReg(8, 150, 22, 0.1, 20, 40, 22);
Ошибка ПИД 0,19, PR - 0,16
40621

а вот при таких параметрах ПИД ошибка будет около 0,15 у обоих регуляторов.

PID_Fine pid = new PID_Fine(2.7, 74, 150, 0.1, 40, 20);
Графики уже не буду приводить.
Да, на графиках температур:
красный - температура датчика в модели управляемой ПИД
розовый - температура комнаты в модели управляемой ПИД
синий - температура датчика в модели управляемой pr
голубой - температура компаны в модели управляемой pr.

o_nik
29.12.2018, 20:20
Переделал параметры своего регулятора так, чтобы они соответствовали вашим.
Это как?
Если ваш регулятор алгебраически пересчитывается в ПИД один к одному, значит он и есть ПИД (ну, я выше об этом писал если что).
Т.е. вы не изобретали регулятора, а придумали (возможно) методику его настройки (при чем, как видно, - не оптимальную)
Или я не прав?

anthrwpos
29.12.2018, 20:33
Это как?
Если ваш регулятор алгебраически пересчитывается в ПИД один к одному, значит он и есть ПИД (ну, я выше об этом писал если что).
Т.е. вы не изобретали регулятора, а придумали (возможно) методику его настройки (при чем, как видно, - не оптимальную)
Или я не прав?
Нет, из картинок явно видно, что характер управления во время скачка качественно другой.

Дифференциальное время ПИД точно соответствует моему времени инерции tU
Пропорциональный коэффициент ПИД точно соответствует отношению tX / D.
Ну это логично, поскольку ПД-часть обоих регуляторов одинаковая.

А вот интегральное время ПИД вообще говоря не совсем соответствует моему параметру tX. При фильтрации вычисленных потерь PE за время tX без компенсации тренда моя поправка стремится к стационарному значению примерно за то-же время, что и интегральная поправка ПИД.
Я тут начал писать описание своего регулятора.
Альфа версия пока выглядит примерно так.
40622
Параметр β я сейчас не использую вообще, он у меня везде равен нулю. Я пока не придумал реальных ситуаций, когда он мог бы быть отличным от нуля)

o_nik
29.12.2018, 20:37
Нет, из картинок явно видно, что характер управления во время скачка качественно другой.

Почему тогда, вы его изначально настроили хуже, чем я настроил ПИД для вашей модели?
Я так понимаю, он прост в настройке (по вашим словам)

anthrwpos
29.12.2018, 21:04
Почему тогда, вы его изначально настроили хуже, чем я настроил ПИД для вашей модели?
Я так понимаю, он прост в настройке (по вашим словам)
Вот это и есть причина по которой я поменял физмодель. Я никак не мог понять, почему модельные параметры плохо работают. Оказалось в модели баг засел)


"Ваши реализации ПИД" - и как именно они это делали ?
В моей реализации запрещается повышать интегральную поправку если управление выше единицы и понижать если управление ниже нуля.
Обычно это работает сильно лучше разностной реализации.

пока нет никаких доказательств невозможности применения ПИД на Вашем ГПУ.
Может быть существуют такие неочевидные параметры, при которых обычный ПИД бы работал нормально.
Только вот адаптивный ПИД там заработал со вбитыми на глазок параметрами.
Для меня это вполне себе аргумент в пользу такой модификации)

Хотя у адаптивного ПИД есть целая гора побочных эффектов. Например, он очень медленно переходит на новую уставку. Может надолго зависнуть в положении, отличающемся от уставки и много чего еще.
Зато он моментально парирует "попытки коня улететь на Марс" и при этом подавляет автогенерацию, что мне было и нужно.


это не "альтернатива ПИДу" (см.название темы), а одна из специализированных модификаций ПИДа
Нет, мой PhysReg регулятор это не модификация ПИД поскольку в нем нет интегрирования отстройки вообще.

o_nik
29.12.2018, 21:17
Только вот адаптивный ПИД там заработал со вбитыми на глазок параметрами.
Если что, я ПИД для вашей модели настраивал методом "научного тыка", заняло это минут 5 моего времени. Я думаю это далеко не оптимальная конфигурация, хотя он лучше вашего на 33%. Ваш же настроенный по моим коэффицентам лучше


а вот при таких параметрах ПИД ошибка будет около 0,15 у обоих регуляторов.

PID_Fine pid = new PID_Fine(2.7, 74, 150, 0.1, 40, 20);
Я не очень понимаю: вы настроили свой регулятор по моим коэффициентам ПИД, потом еще донастроили его, и регуляторы стали примерно одинаковы... и чем ваш регулятор лучше ПИД?

Чтобы отвечать вам по существу, придется вникать в тему полностью... если вдруг время будет, попробую подробнее ознакомиться с вашей концепцией.
Вы будете сюда подробное описание выкладывать вашего регулятора и его настройки?

anthrwpos
29.12.2018, 21:31
Я не очень понимаю: вы настроили свой регулятор по моим коэффициентам ПИД, потом еще донастроили его, и регуляторы стали примерно одинаковы... и чем ваш регулятор лучше ПИД?
Я сперва настроил свой по вашим коэффициентам, затем донастроил его с помощью автоматической настраивалки (класс OptiFind) - он стал давать ошибку меньше ПИД. А затем этой-же настраивалкой подстроил и сам ПИД. Ошибки сравнялись.
Если судить по значениям ошибки - то получается что ничем не лучше. Но по графикам например мне поведение моего physreg больше нравится).

Чтобы убедиться, что physreg однозначно лучше ПИД, нужно проводить множество тестов, варируя параметры окружения включая например ситуацию когда обогреватель не может догреть систему и когда систему не нужно греть вообще. Тогда мне кажется, можно будет показать, что усредненно оптимальная настройка моего регулятора будет давать по совокупности разных тестов значительно меньшую ошибку чем ПИД. Я думаю такие тесты со временем провести и показать результаты.

Вы будете сюда подробное описание выкладывать вашего регулятора и его настройки?
Как только оно устаканится - выложу.

anthrwpos
29.12.2018, 21:47
Исполнение "местной" заплатки - иное. Сомневаетесь ?
Обычная заплатка - это так называемый разностный метод. У него противоположная беда: ложные включения и выключения.
У моего ТРМ-500 постоянно такое видел. В комнате +30. Подул ветерок - снизилось до +28. уставка +24, дифференциальное время = 0. Обогреватель включился. Нафига?
А всё просто. При разностном методе производная управления зависит от производной температуры делить на пропорциональный коэффициент плюс отстройка делить на интегральное время. Если температура снижается медленно - интегральная часть этой разности зануляет управление быстрее чем пропорциональная пытается его повысить. А если нет - возникает то что я называю ложным включением.
Против этой беды и направлена моя реализация заплатки.

Если медленно изменяет выход - см. параметры ПИДа (обычно П)
Если регулируемая величина медленно выходит на новую уставку - см. параметры и инерцию регулируемой системы включающую инерцию датчика и исполнительного механизма, но на инерцию системы выбор регулятора не влияет.
Завис выход ПИДа - см. настройки (обычно И). Не реагирует обратная связь - см. выше про инерцию системы.
Так пишете, как буд-то я ни разу ПИД не настраивал) Я на работе все ПИДы перенастроил так, что коллеги называли меня гуру ПИДа=) Я отлично понимаю какой там коэффициент за какое поведение отвечает.

Так как устраняется статическая ошибка ?
Поправка к ПД-регулированию, которая устраняет статическую ошибку физически является некими "потерями энергии" из управляемой системы, назовем это так.
Потери равны поступлениям минус полному изменению "энергии".
Поступления от исполнительного устройства вычисляются как среднее значение управления за время инерции τU (дифференциальное время ПД).
Полное изменение - как производная умножить на параметр емкости (D).
Наконец, полученная разность усредняется, потому что производная обычно содержит много шумов.

Полученная поправка устраняет статическую ошибку ПД, а кроме того, отлично отрабатывает в описанных мной случаях, где интегральная поправка ПИД ведет себя неправильно.

o_nik
29.12.2018, 21:53
Но по графикам например мне поведение моего physreg больше нравится).
Нас в учительница в школе учила, что при синтезе регулятора устанавливаются начальные условия: время регулирования и перерегулирование (как один из популярных вариантов), а также надо обеспечить определенный запас устойчивости, чтобы система не перешла в неустойчивое состояние при выходе параметров её модели за определенные пределы (например, из-за старения элементов системы).
"Больше нравится", - звучит как-то по-дилетантски. Вы же все-таки физик, давайте мат. часть подтянем, когда поясняете критерии "лучшезны".


что коллеги называли меня гуру ПИДа
Тогда зовите меня Владыка, я настроил ваш регулятор лучше вас, ничего не делая :)


Чтобы убедиться, что physreg однозначно лучше ПИД, нужно проводить множество тестов,
Я так понимаю, это только для вашей модели опять же, что весьма не показательно будет.
Вообще, у вас есть модель, она известна, если реалии объекта очень похожи на модель, то настоятельно советую вам синтезировать частный регулятор, а не использовать ПИД и ваш ПД+ тоже не использовать, он вам даст великолепные характеристики я думаю.


У моего ТРМ-500
Не лучший пример для эталона ПИД

В общем и целом, спасибо за тему ... заставляет немного подумать, а то мозг вянет.

anthrwpos
29.12.2018, 22:38
"дифференциальное время = 0" ? В виду недостижимости этого в натуре, "0" имеет особое значение, например у некоторых отключает Д-часть.
Нет, это у интегрального времени ноль недостижим поскольку оно в знаменателе. Дифференциальное время ноль это вполне нормальное значение..
Тут ?
Пока обозначили плохую настройку. Но это не проблема регулятора.
Тут можно снизить интегральное время и эффект станет проявляться не так сильно. Но вылезет перерегулирование, а то и автогенерация. Проходили всё это)
Повышать в ответ пропорциональный коэффициент нельзя - эффект вылезет снова.

А вот потери - это как ? Потихоньку сочится ?
Просто некие абстрактные потери.
Никак не могу определиться с тем, в каких терминах объяснять работу регулятора.
Если объяснять в понятных всем терминах обогрева комнаты - начинаются вопросы "твой регулятор только для обогрева годится?"
Если объяснять в полностью абстрактных терминах - вообще никому ничего не понятно)
Поэтому я синтезировал нечто промежуточное - адаптированная терминология из теплотехники применительно к общим абстрактным вещам.
Мне на самом деле больше нравится терминология из электроники. Тогда будут не потери, а утекающий со второй емкости ток. Плюс можно понятную схему нарисовать. Но поймут только знакомые с электроникой.

anthrwpos
29.12.2018, 22:48
Вообще, у вас есть модель, она известна, если реалии объекта очень похожи на модель, то настоятельно советую вам синтезировать частный регулятор, а не использовать ПИД и ваш ПД+ тоже не использовать, он вам даст великолепные характеристики я думаю.Про частный регулятор я уже думал. Но пришел к выводу, что он потребует дополнительных датчиков для вычисления дополнительных параметров, а мне такого не надо.

Не лучший пример для эталона ПИД
Пример совершенно типичный. Самая распространенная реализация.

В общем и целом, спасибо за тему ... заставляет немного подумать, а то мозг вянет.

Спасибо всем за критические комментарии, а особенно тем, кто не поленился разобраться в моем криво написанном коде)
Буду работать над этой темой дальше.

anthrwpos
30.12.2018, 07:35
Не напишите производную чего-нить по времени ?

дифференциальное слагаемое ПИД выглядит так: PD = tD / Xp * (dX/dt), где tD - дифференциальное время, xP - пропорциональный коэффициент, dX/dt - производная.
Никаких проблем поставить tD=0 нет.


Даже боюсь уточнять - где-где у интеграла дифференциальное время ?
вообще я писал "интегральное время" ну да ладно.

Можно еще раз :
Т.е. Вы полагаете что нагреватель должен включаться исключительно при температуре датчика ниже уставки ?
С одной стороны нет, а с другой - ну не до такой же степени.
Хотя мой регулятор тоже может подобным образом делать, если при снижении температуры с 30 до 28 вычисленные потери окажутся выше чем отрицательная пропорциональная составляющая.
Вообщем - проведу дополнительные испытания и тогда уже точно скажу это "баг или фича".


А какая разница - какая терминология ? Т.е. потери - это некоторый эквивалент утекающего тока ?
Точно.

"Так как устраняется статическая ошибка ?"
Хорошо. Красиво. Вот только "интегральная поправка ПИД" и есть эти "потери энергии". Не будете возражать ? )))
Именно. Но сложно не согласиться, что вычислять потери интегрируя отстройку - плохая затея)
Потери - объективная физическая величина, она не должна зависеть от уставки вашего регулятора.

Алексей Дмитриев
27.08.2021, 14:41
Правильный ответ: интегрирует по чем зря отрицательную отстройку.

Нормальный регулятор перестает интегрировать, если выход уходит в отсечку, ту или иную. Не надо рассказывать про кривые реализации ПИД-ов, здесь уже столько было про это сказано, аж жуть!