PI регулятор

Автор Max, 30 марта 2016, 09:05:25

« назад - далее »

VladislavMorozov

Попробуйте подойти к задаче с другой стороны — пусть регулятор удерживает значение расстояния от границ мертвой зоны с уставкой 0.
Второй вариант:
- Мертвая зона указывается в границах слева и справа от уставки (например +1 и -1)
- Значение обратной связи на вход в регулятор подавать со смещением -1 в зоне выше мертвой (например при 21.1 подавать 20.1)
- В мертвой зоне подавать значение уставки (от 19 до 21 подавать всегда 20)
- В зоне ниже мертвой подавать со смещением +1 (при 18,9 подавать 19,9)

Tyumentsev

#31
Цитата: HvacZhukovsky от 06 декабря 2023, 17:23:18Если у кого есть ПИД с мертвой зоной, поделитесь пожалуйста!
Я пока даже не понимаю, как это реализовать.
Попробовал со стандартным сделать так, что если значения в пределах мертвой зоны, то вместо входа текущего значения датчика ставить значение уставки. Но если уставка 20, датчик 19, а на выходе условно 30 и в этот момент поставить на вход датчика 20, то выход фиксируется на меньшем значение (в зависимости от значения П). Если потом поставить датчик 21, то выход будет больше.
Как сделать так, чтобы он встал на паузу, а после выхода за мертвую зону, начинал с этого же значения ?

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

VladislavMorozov

А ловко вы из PI регулятора PID сделали! Что-то мне подсказывает, что Tqut "Этот параметр устанавливает скорость реакции регулятора около уставки. Чем больше значение, тем быстрее реакция регулятора при любых значениях коэффициентов dI и dP. С уменьшением значения этого параметра увеличивается общая стабилизация процесса регулирования, но ухудшается реакция на импульсное воздействие." что обсуждалось ранее в этой же теме с ссылкой на https://zentec.ru/forum/index.php?action=dlattach;attach=1436. Это немного не сходится с функцией, которую выполняет дифференциальный коэффициент в PID регуляторе.

Также не совсем понимаю логику применения фильтра на выходном сигнале регулятора. Зачем? Чтобы изменить скорость работы - используйте то же время квантования или изменяйте значение коэффициентов. Для избавления от резких рывков в процессе регулирования - фильтруйте значения сигналов с датчиков.

С самим апериодическим фильтром вы тоже намудрили: для чего вы умножаете величину изменения сигнала на само значение сигнала? А если входное значение упадет до 0, то на выходе получите значение Y, которое тоже обнулится - и никакого медленного падения выходного значения на выходе вы не получите. Где-то на просторах данного форума был прекрасный пример данного фильтра, который я в последствии "адаптировал" и себе, причем без ограничения Ain > 0.

В итоге все-таки представленный в zwb PI - это всего лишь регулятор, который начинает работать с значения 0, который получает уставку и значение обратной связи. Все что сейчас накручено вокруг него - это костыли. Наиболее грамотным решением было бы в данном случае реализовать свой простейший PI, чтобы получить возможность установить начальное значение интегральной составляющей, а мертвую зону учитывать на этапе вычисления значения ошибки.

P.S. Даже если все это работает у вас, является довольно сложным примером для новичка. Количество ссылок - мое почтение) как и большинство кода на форуме является плохим примером качественной обфускации FBD, враг не поймет.
P.P.S. Почему MUX а не IF? ¯\_(ツ)_/¯

Tyumentsev

Да ранее я уже выкладывал свой ПИД регулятор с уставкой интегральной переменной, просил разработчиков Зентек добавить его в штатный, но мне показали, что можно используя штатный сделать тоже самое, что я делал в своем, типа вашего. Меня устраивает штатный регулятор. Добавил к нему немного обвеса и работает как нужно. Фильтр я взял в макросе обработки аналоговых сигналов, ничего не изобрел своего, единственное добавил ему ограничения около нуля, чтобы ерунду не выводил. Фильтр нужен чтобы выходной сигнал при быстрой реакции ПИДа не бросался кусками цифр то 500, то 490, то 520, при наличии фильтра он просто не успеет так кидаться. Если конечно настроить ПИД правильно то и без него все работает, но клиенты иногда крутят все что могут крутить и немного сгладить их ошибки считаю не лишним. Не обязательно же вникать всем как работает макрос. Если он работает хорошо, то я порой и не вникаю как он реализован.
Tqut если правильно настроить, то ведет себя хорошо. При быстром изменении сигнала датчика, он изменяет выходной сигнал в противоход, на величину уставки Tqut(Д), что в принципе в данном случае так и должно быть. Если скорость слишком большая, то и воздействие в противоход большое.
  У меня конечно есть свой классический ПИД, но в принципе и штатный хорошо работает. Поэтому и предложил еще один вариант.

VladislavMorozov

#34
Тогда и я предложу свой вариант - набросал на основе классической формулы PI.

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

Да, и блок я протестировал бегло на коленке, пока не окончательная версия!