Алгоритм PID: як врахувати швидкі зміни значень введення після тривалої затримки


15

Я намагаюся реалізувати базовий алгоритм PID на Arduino Leonardo для змішування гарячої та холодної води з водопровідної арматури, використовуючи клапани, що управляються сервоприводом. Мета - підтримувати температуру якомога ближче до заданої точки. Особливо важливим є запобігання вихідної температури від перевищення заданої точки, щоб захистити користувача від опіків. Важливе значення - максимально швидко досягти температури біля заданої температури.

Для невеликих змін температури, здається , стандартна реалізація алгоритму PID працює нормально. Але я не знаю, як враховувати довгі затримки, які можуть виникнути під час очікування, коли гаряча вода досягне клапана, оскільки ці затримки значно довші, ніж стандартні затримки після зміни положень клапана.

Очевидно, що залежно від тривалості лінії гарячої води та часу з моменту останнього використання гарячої води, до гарячого водопостачання може знадобитися кілька десятків секунд, тому протягом цієї температури температура води залишається досить постійною при низькій температурі і клапан гарячої води незабаром відкривається на 100%. Цілісний компонент починає накопичувати велике значення помилки.

Коли гаряча вода нарешті досягне клапана, виявлена ​​температура дуже швидко піднімається до максимальної температури гарячої води. Через велику інтегральну похибку клапан гарячої води утримується на 100% протягом тривалого часу після того, як температура перевищить задану, через очікування зниження інтегрального значення до нормального рівня. Таким чином, результат - максимальна температура води протягом декількох (десятків) секунд.

Я не впевнений, як пояснити цю можливу велику затримку. У такому випадку було б розумно встановити верхню (і нижню) межу інтегрального значення помилки, щоб обмежити максимальний час відгуку? Це, здається, перешкоджає призначенню цілісного компонента, а також все ще накладе деякий відставання після досягнення заданої точки.

Або є кращий спосіб вирішити швидкі зміни вводу після тривалої затримки?

Дякую за будь-яку пораду!


1
Насправді мені цікаво, чи взагалі вам потрібна дія I, бо я думаю, що зміни температури води відносно повільні порівняно з спрацьовуванням клапана. Що ще гірше, ви можете отримати коливальну поведінку через надзвичайно поганий запас фази, який ви, швидше за все, отримаєте (ваша система може бути стабільною в теорії, але може ніколи не припиняти коливатися на практиці, оскільки I-дія додає відставання у фазі). Крім того, оскільки ви, можливо, спалите людей, я не можу наголоситись на тому, щоб поглянути на коментарі Чу і JonRB!
Санчіз

Відповіді:


15

Ваша проблема називається Integral Windup , це загальна проблема управління. У нелінійній або обмеженій іншою областю контролер не може відстежувати задану температуру, а інтеграл збільшується до великого значення. Це спричиняє великий промах, коли задане значення остаточно досягнуто, саме з цього виникла проблема.

Найпростішим рішенням є обмеження самого значення інтегратора до розумного максимуму. Обмеження інтегрального внеску також не спрацює, оскільки інтегратор все ще буде досягнутий великого значення.

У Mathworks є сторінка з деякими іншими рішеннями інтегрального вікна.

У PID-контролері, як правило, потрібно якомога менше інтегрального терміна. У стандартному механічному вентилі регулювання температури використовується лише пропорційний контроль, і вони працюють нормально. Зберігайте цілісний термін якомога менше - користувач не помітить невеликої помилки в кінцевій температурі. Ви можете виявити, що ви отримуєте прийнятну продуктивність із просто PD.

Оскільки це дуже особливий, відомий випадок, ви можете розглянути можливість використання іншого режиму для контролера. Виміряйте температуру гарячої води на вході, і поки вона нижча за задану, просто запустіть гарячу 100%, холодну 20%. Коли вона прогріється, перейдіть на PID, з хорошими початковими умовами.


1
Так. В ідеалі ви можете вимірювати температуру гарячої води на вході самостійно і таким чином гальмувати пробірку.
Брайан Драммонд

2
Вивітрювання може бути проблемою, але якби інтегратор не був реалізований, наприклад, дестабілізуючий ефект затримки все-таки залишиться. Smith Predictor є хорошим методом для пом’якшення наслідків чистої затримки у часі. Самостійне звернення до інтеграторного завершення не робить нічого для подолання притаманного відставання фази, запровадженого затримкою часу.
Чу

2
точно, я не думаю, що це суто інтеграторне випромінювання, навіть якщо це так. його поважне занепокоєння, яке завжди повинно бути пом’якшене НАДІЙ, якщо нормальні операції не
досягають

Ух, чудова відповідь! Я думав у цьому напрямку (обмежуючи максимальне значення інтегратора), але не ставив це питання належним чином, тому мене неправильно зрозуміли. Добре бачити, що я, принаймні, в бальному парку з рішенням. Я думаю, що найпростішим рішенням буде відключити коефіцієнт "Я", поки температура не досягне контрольованого діапазону. Це дозволило б дуже швидко реагувати на зміни. Потім, коли ми побачимо деяку зміну температури і наблизимося до бажаного результату, знову включіть інтеграл, щоб додати необхідний додатковий натиск. Дякуємо за детальну відповідь!
Райан Гріггс

Але інтегральний термін не існує для його прискорення, він повинен виправити систематичну помилку, особливо пропорційний коефіцієнт, який не зовсім правильний. Ні? І в цій ситуації P coef. не може бути ідеальним весь час, оскільки він буде змінюватися залежно від тиску води в обох трубах.
Роман Старков

4

Ключовим фактором для ефективного управління цим процесом є усвідомлення того, що гарячі та холодні крани працюють не симетрично, і будь-який оптимальний алгоритм повинен враховувати це.

Якщо ви не використовуєте гарячу воду протягом певного часу, вона охолоджується в трубі.

Якщо ви холодною водою не користуєтесь протягом певного часу, вона залишається такою, як це було колись (якщо тільки холодна вода не є з бака з холодною водою з чиллером, що було б дивовижно мати у спекотні літні дні, але я ставки на практиці досить рідкісні).

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

Таким чином, з температури змішаної води та знаючи налаштування клапана та з оцінки температури холодної води, ми можемо оцінити, наскільки гаряча вода в даний час надходить з труби гарячої води. Потім ви можете відрегулювати клапан, щоб отримати правильну вихідну температуру без PID, просто на основі оцінки термодинамічної формули.

Щоб отримати "оцінку температури холодної води", ви можете запустити холодну воду на короткий час (можливо, кілька секунд) на початку циклу та прочитати температуру. Тоді припускайте, що це не зміниться після цього, оскільки у вас немає достатньої кількості даних для вирішення обох температур.

Ця схема не буде абсолютно точною, але я вважаю, що вона надійно потрапить у зону проходження без можливості різкого перекриття. Потім ви запускаєте PID поверх цієї схеми для точного налаштування результатів, але обмежуєте зміну налаштуванням клапана, який PID може дозволити. І, можливо, скиньте стан PID, коли у вас значні зміни температури входу гарячої води.

Модніші рішення можливі за допомогою декількох датчиків температури.


Ще одна чудова відповідь - мислення поза PID-скринькою. Я подумав просто перевірити температуру води та створити якусь таблицю пошуку з приблизними положеннями клапанів, щоб отримати бажану вихідну температуру. Ви маєте рацію, що холод відносно постійний, хоч і взимку холодніший. Водні лінії закопуються приблизно в 24-36 дюймів, і у нас зазвичай тут помірні температури. Тоді я міг би також врахувати максимальну температуру виходу гарячої води (близько 120 F) і створити таблицю пошуку, яка розміщує клапани належним чином, використовуючи PID для тонкої настройки після розминки.
Райан Гріггс

1
Вода з колодязя може залишатися дуже прохолодною навіть у теплі літа, залежно від глибини / джерела. «Холодна» вода, що опирається в труби будинку, тепліша, ніж те, що буде перекачуватися знизу. Тож холодна вода насправді стає холоднішою з використанням (поки вона не наблизиться до температури підземної води). Я завжди "здивований", коли їду до "великого міста" і холодна вода ніколи не застуджується.
rickhg12hs

2

Я просто хотів додати одну деталь до приємних відповідей вище про те, що інженери-контролери роблять для цілісних можливостей ліквідації. Це також відбувається у багатьох промислових процесах, і це мистецтво, а не наука.

Проти цього існують типові дії підручника, не втрачаючи при цьому цілісного прибутку, який може бути дійсно необхідним для специфікації продуктивності.

  1. Кожен раз, коли ви переходите нульовий рівень помилки, ви скидаєте інтегратор. Це робить інтегратор інтегратором типу нелінійного елемента на вимогу замість сліпого акумулятора.

  2. Ви в основному підключаєте вхідний блок інтегральної дії до орієнтовного елемента в циклі. Це може бути або результатом інтегратора, щоб оцінити, чи він почав нарощування (що вимагає розуміння процесу, щоб зробити судження правильним). Або ви перевіряєте, чи ваші приводи насичені чи ні, і формуєте цикл зворотного зв'язку на основі цієї інформації. Я просто випадковим чином вибрав перше посилання, яке вийшло з google, і в кінці цього відео є графічне пояснення моєї останньої точки. https://www.youtube.com/watch?v=H4YlL3rZaNw


Хороші бали, дякую за розширення ідеї. Дякую за відео, це дуже добре пояснює проблему.
tomnexus

1

Іноді може бути корисним наявність декількох наборів параметрів PID, для грубозернистих стадій діапазону роботи системи, які ви змінюєте на ходу, коли система переходить від однієї стадії поведінки до іншої. Наприклад, один набір Kp, Ki, & Kd, коли ви включаєте гарячу крану та отримуєте лише холодну воду; потім, як тільки ви почнете бачити підвищення температури, перейдіть на інший набір Kp, Ki & Kd. Потім налаштуйте їх відповідно.

Ви використовуєте бібліотеку PID на майданчику Arduino від Brett Beauregard? Цей досить приємний. І тут є "адаптивний" приклад цього.


Дякуємо за пропозиції. Не використовуючи бібліотеку pid, я написав це сам, щоб дізнатися більше про те, як це працює.
Райан Гріггс

Ви розглядали подачу вперед? Це як швидкі зміни впливають на вихід через відкритий цикл, тому ви не чекаєте, коли закритий цикл реагує.
Григорій Корнблум

Я намагаюся обернути мозок навколо того, як "подавати вперед" буде працювати в цьому випадку. Чи буде вхід бажаною температурою, а вихід буде встановлювати клапани на заздалегідь визначене положення (як обговорювалося в моєму іншому коментарі вище) за допомогою таблиці пошуку або простого рівняння?
Райан Гріггс

Ви можете використовувати feedforward на додаток до зворотного зв’язку (закритий цикл PID). Ви просто додаєте дію контролера зворотного зв'язку до дії контролера подачі. В ідеалі контролер подачі подачі буде зворотною моделлю клапана. Feedforward по суті дає вам миттєві дії щодо зміни заданої точки. Навіть із подачею зворотного зв'язку плюс зворотній зв'язок все одно потрібно враховувати випромінювання в компенсаторі управління зворотним зв'язком. Компонент зворотного зв'язку потрібно враховувати.
Документація

1

Ви моделювали систему?

Чи є у вас дані, що базуються на часі, що показують промах - особливо частоту

Це два питання, які слід задати у будь-якому запиті на основі контролю.

З того, що ви описали, ваш інтегральний прибуток занадто високий, шлях до високого. Це може бути пов'язано з інтегратором інтегратора: показаний код має деякі реальні практичні проблеми, одне з яких - це не найбільший з дискретних інтеграторів

  • Дуже погана дискретна інтеграторна топологія
  • Ні затискачів / обмежень ні на виході I, тим більше на виході P + I

Це в рівній мірі може бути і тому, що воно дуже високе і потрібен час, щоб зменшитись.

Так, так, значення, збережене в реєстрі I, могло би сказати ... 1000C, оскільки P + я не був налаштований на відповідь системи, і тоді він повинен завершити роботу.

Перше, що я б зробив - це зафіксувати дані в режимі реального часу для післяобробки. Наступний я запустив би лише P і забезпечив, щоб пропорційний коефіцієнт підсилення досяг ТІЛЬКИ бажаної температури (теорія управління стверджує, що цього не буде). Залежно від того, чи

  1. Аналіз наявних даних про захоплення, що полегшує визначення підходящого I отримання
  2. Побудована рослинна модель для створення відповідних прибутків

Я б почав, змінивши PID-код на кращу реалізацію, а потім додати трохи I, щоб довести свою точку.

Вам справді потрібно визначити, проти чого ці вигоди мають на меті. Вхід - температура, вихід - ... витрата? тому повинна бути передача потоку / С і функція передачі Flow / Cs.


Гарна відповідь також, дякую. Я не моделював цю систему, тому що ще не знаю як - тільки починаю мочити ноги в цьому дослідженні. Ви вірні, що значення I збільшується за розумними межами. Чи можете ви направити мене на кращий алгоритм реалізації інтегратора? Псевдокод найкращий, оскільки він дозволяє мені вчитися і вводити код своїми словами, а не копіювати / вставляти. Також ви можете направити мене на будь-які вступи до моделювання простих систем, як це? Ви впевнені, що рівні потоку (гаряча та холодна суміш) є виходами цієї системи. В даний час це просто обернено пропорційна H / C.
Райан Гріггс

1
Я невдовзі
додаю твік

1

Мені подобається вирішити інтегральний Windup припинити накопичувати помилку, коли ваш керуючий висновок знаходиться на максимальному відхиленні . Або масштабуйте його на відстань від максимального прогину. Отже, коли ваш контролер видає "гарячу воду 100%, холодну воду 0%", просто не накопичуйте помилку, але і не скидайте її на нуль.

Мені не подобається обмежувати інтеграл максимумом, оскільки тоді існує обмеження в тому, яку систематичну помилку може компенсувати ваш PID.

Я б також запропонував, що замість того, щоб робити "тупий" PID, який має лише один параметр, який він намагається керувати без знання базової системи, ви встановлюєте два додаткових датчика температури, як на гарячому, так і на холодному вході. Потім ви намагаєтеся знайти функцію, яка наближає до бажаного положення залежно від вхідних температур, і ви використовуєте лише цикл PID для коригування помилки на виході цієї функції.

Помилка буде значною, оскільки ви не вимірюєте витрату (ну, якщо ви, звичайно, не зробите), що залежить не тільки від положення клапанів (відоме), але і від тиску води (невідомо).

Тим не менш, це має сильно допомогти проблемі, коли гаряча вода нарешті дістається до крана, оскільки в добре затупленому циклі PID ви повинні розраховувати на те, що D-елемент добре відкалібрований для швидкого зменшення гарячого потоку. З мого досвіду, правильний коефіцієнт похідних правильний, як правило, найважче. Але якби у вас були два додаткові датчики, основний вихід змінився б точно так само швидко, як і температура вхідної води, настільки миттєво, без потреби в похідному елементі.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.