Easyelectronics.ru

Электроника для всех
Текущее время: 19 сен 2019, 01:08

Часовой пояс: UTC + 5 часов



JLCPCB – Прототипы печатных плат за $2/10pcs (Любой цвет!)
Крупнейший производитель печатных плат и прототипов. Более 600000 клиентов и свыше 10000 заказов в день!
Получите скидку на почтовую отправку при первом заказе в JLCPCB!

Начать новую тему Ответить на тему  [ Сообщений: 14 ] 
Автор Сообщение
 Заголовок сообщения: "Безударное" переключение ПИ - регулятора
СообщениеДобавлено: 15 сен 2014, 17:01 
Старожил

Зарегистрирован: 24 июн 2011, 14:05
Сообщения: 294
Откуда: Новочеркасск
Есть задача, довольно таки простая, но немогу догнать. Имеется Пи регулятор со следующим кодом:
Код:
v.up = v.Kp* (v.Ref - v.Fbk); // пропорциональная часть
v.ui = (v.Out == v.v1)?((v.Ki* v.up)+ v.i1) : v.i1; // интегральная часть
v.i1 = v.ui; // предыдущее значение интегральной части
v.v1 = v.up + v.ui; // выход без ограничения
v.Out= sat(v.v1, v.Umax, v.Umin); // выход ограниченый значениями v.Umax и v.Umin


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


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: "Безударное" переключение ПИ - регулятора
СообщениеДобавлено: 15 сен 2014, 19:28 
Старожил
Аватара пользователя

Зарегистрирован: 28 дек 2011, 11:24
Сообщения: 4084
Откуда: г. Липецк
ELEKTROS писал(а):
...В некоторых ситуациях регулятор не в работе, т.е. выходом управляю вручную. А как "безударно" переключиться обратно на регулятор?

Где тут алгоритм? Если вы выводите агрегат на рабочий режим ручным задатчиком, то и выведите его в зону действия регулятора. Тогда переключение будет безударное...


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: "Безударное" переключение ПИ - регулятора
СообщениеДобавлено: 15 сен 2014, 19:54 
Старожил

Зарегистрирован: 25 фев 2011, 18:45
Сообщения: 3534
Откуда: Новосибирск
Давайте представим, что у вас на руках готовый терморегулятор. И вам потребовалось управлять выходами вручную. Тут варианты, либо вы тупо включили нагрузку, либо через переключатель "терморегулятор-вручную". Но если в ручном режиме терморегулятор остается включенным, то он исправно показывает текущую температуру. Это грубое сравнение.

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

Может не так понял ваш вопрос...


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: "Безударное" переключение ПИ - регулятора
СообщениеДобавлено: 15 сен 2014, 22:45 
Старожил

Зарегистрирован: 24 июн 2011, 14:05
Сообщения: 294
Откуда: Новочеркасск
anakost, я на режим его в ручную не вывожу.
Конкретно управляю напряжением асинхронного генератора, и есть там один режим при котором регулятор не успевает вывести напряжение, этот случай я отпаливаю и задаю максимальное возбуждение генератору, затем когда напряжение еще не дошло до заданного передаю управление регулятору, в этом случае регулятор должен начинать с ненулевого значения v.Out. По идее нужно накопить какую то интегральную часть и это сгладит переходной процесс , а можно как то посчитать значение интегральной составляющей или надо всёже вызывать регулятор только чтобы он не оказывал никакого воздействия (о таком варианте думал, но что будет при частом переключении режимов ручной-авто, не успеет накопить интегральную часть). Или же просто обнулять все значения и переход будет осуществляться только за счёт пропорциональной части, но в этом случае ступень может быть.
demiurg1978, понял что вы имеете ввиду, еще показалось Вы промконтроллерами занимаетесь? Но мне не алгоритм нужен (он кстати не такой в моём случае, нету явно выраженых блоков), а как включить пи регулятор в работу с ненулевых значений. Допустим у регулятора на выходе уже с учётом ограничения может быть число от 0 до 90, регулятор управляет например углом открытия задвижки от 0 градусов до 90, у ручном режиме выставлено открытия задвижки 40 градусов, потом я задаю значение открытия задвижки 55 градусов и переключаюсь на регулятор и вот мне нужно чтобы он плавно начал выдавать значения 40...41...42...43...44... ну и так далее чтобы небыло резкого броска типа 50...52...53... Грубо достаточно, но смысл думаю понятен. Да и вообще что такое "безударное" переключение много где описано, но именно исходника не найду.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: "Безударное" переключение ПИ - регулятора
СообщениеДобавлено: 16 сен 2014, 00:27 
Старожил
Аватара пользователя

Зарегистрирован: 28 фев 2011, 19:28
Сообщения: 3609
Откуда: Белгород РФ
ELEKTROS писал(а):
40...41...42...43...44... ну и так далее чтобы небыло резкого броска типа 50...52...53... Грубо достаточно, но смысл думаю понятен. Да и вообще что такое "безударное" переключение много где описано, но именно исходника не найду.


Если на выходе уже была ошибка, будет ударный переход! Это суть ПИД регулятора

Код:
v.up = v.Kp* (v.Ref - v.Fbk); // пропорциональная часть


1)
Вам может нужен модифицированный регулятор, с плавным включением? Для пропорциональной части:

Код:
v.up = A* v.Kp* (v.Ref - v.Fbk) + B*(v.предыдущее);
где А и B коэффициенты "плавного пуска"
А=0...1 (увеличивается за минуту, например, от 0 до 1 и далее не меняется)
B=1-A


В момент включения A=0 на выходе
v.up =v.предыдущее;
Через минуту A=1 на выходе
v.up = A* v.Kp* (v.Ref - v.Fbk)
По сути через минуту всё превращается в обычный ПИД

2)
Еще есть вариант подогнать интегральную часть таким образом, чтобы в сумме П+И+Д было предыдущее значение.
Если вам нужно на выходе 40, а ПИД сразу дает 50, интегральной части присваиваем "-10" и в таком состоянии запускаем регулятор и он обеспечивает плавную регуляцию с постепенным снижением ошибки.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: "Безударное" переключение ПИ - регулятора
СообщениеДобавлено: 16 сен 2014, 00:31 
Старожил
Аватара пользователя

Зарегистрирован: 28 фев 2011, 19:28
Сообщения: 3609
Откуда: Белгород РФ
ELEKTROS писал(а):
По идее нужно накопить какую то интегральную часть и это сгладит переходной процесс , а можно как то посчитать значение интегральной составляющей

Накопленная интегральная часть при ручном управлении в общем случае уйдет в бесконечность.

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


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: "Безударное" переключение ПИ - регулятора
СообщениеДобавлено: 16 сен 2014, 10:27 
Старожил

Зарегистрирован: 24 июн 2011, 14:05
Сообщения: 294
Откуда: Новочеркасск
sim, я встречал подобную реализацию (модификация П части) в каком то самописном варианте, но везде в описаниях про безударное переключение именно говориться об интегральной части, хотя так подумать и такой вариант вроде неплох. Попробую так, спасибо. Кстати интегральная часть не улетит в бесконечность потому что у ней ограничение на насыщение есть в том варианте что я привёл.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: "Безударное" переключение ПИ - регулятора
СообщениеДобавлено: 16 сен 2014, 10:36 
Старожил

Зарегистрирован: 25 фев 2011, 18:45
Сообщения: 3534
Откуда: Новосибирск
Ваш вопрос специфичен. На caxapa.ru есть несколько участников, которые ответят на ваш вопрос. Попробуйте в разделе "Кибернетика" свой вопрос задать. Еще есть electronix.ru.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: "Безударное" переключение ПИ - регулятора
СообщениеДобавлено: 17 сен 2014, 18:54 
Старожил
Аватара пользователя

Зарегистрирован: 24 июл 2012, 13:54
Сообщения: 849
Хм...

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

Возможности сделать такое переключение качественным конечно же есть, но не столь тривиально.

С интегральной составляющей всегда проблемы вдали от балансового режима.

Можно перейти к контролю производной. Но это будет более медленная и сложная система.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: "Безударное" переключение ПИ - регулятора
СообщениеДобавлено: 17 сен 2014, 20:40 
Старожил
Аватара пользователя

Зарегистрирован: 28 фев 2011, 19:28
Сообщения: 3609
Откуда: Белгород РФ
Mirmik писал(а):
Хм...

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


Сразу после переключения будет хороший эффект снижения этой составляющей до обычного значения ))

Цитата:
Возможности сделать такое переключение качественным конечно же есть, но не столь тривиально.


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

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


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: "Безударное" переключение ПИ - регулятора
СообщениеДобавлено: 17 сен 2014, 21:48 
Старожил
Аватара пользователя

Зарегистрирован: 24 июл 2012, 13:54
Сообщения: 849
sim писал(а):
Mirmik писал(а):
Хм...

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

Сразу после переключения будет хороший эффект снижения этой составляющей до обычного значения ))

Не сразу.

Цитата:
затем когда напряжение еще не дошло до заданного передаю управление регулятору


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

Тогда, учитывая что выходное значение еще не доползло до уставки, ошибка будет положительной. Это означает, что интеграл ошибки будет увеличиваться до тех пор, пока ошибка не дойдёт до значения уставки.

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

ИМХО задача требует скорее частного решения в условиях конкретной системы, чем общих рекомендаций.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: "Безударное" переключение ПИ - регулятора
СообщениеДобавлено: 22 сен 2014, 15:21 
Старожил

Зарегистрирован: 24 июн 2011, 14:05
Сообщения: 294
Откуда: Новочеркасск
Вообщем, нужно было немного подумать и вот что получилось, попробывал, работает.
Регулятор крутиться в своем цикле всегда, но в момент перехода с ручного управления Out величиной на управление регулятором делаю так :
Код:
v.up = v.Kp* (v.Ref - v.Fbk); // считаю пропорциональную часть в момент перехода
pi_str.Out = Out_main; // значение выхода регулятора приравниваю к последнему значению в ручном режиме
pi_str.v1 = Out_main/2; // надо чтобы функция пи-регулятора сработала в режиме насыщения интегральной составляющей
if((pi_str.Out-pi_str.up)>0) pi_str.i1 = pi_str.Out-pi_str.up; // считаем значение интегральной составляющей (выход ограничен от нуля до 0.1, поэтому проверка только на положительную разницу)
else pi_str.i1 = 0; // никогда не заходит в эту ветку, так на всякий случай, вдруг что-то накосячил
PI_MACRO(pi_str); // вызов регулятора

sim, про такое говорил наверное (как один из вариантов).


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: "Безударное" переключение ПИ - регулятора
СообщениеДобавлено: 24 сен 2014, 09:23 
Заглядывает иногда

Зарегистрирован: 10 фев 2010, 00:33
Сообщения: 198
Откуда: Нижний Новгород
ELEKTROS писал(а):
Вообщем, нужно было немного подумать и вот что получилось, попробывал, работает.
Регулятор крутиться в своем цикле всегда, но в момент перехода с ручного управления Out величиной на управление регулятором делаю так :
Код:
v.up = v.Kp* (v.Ref - v.Fbk); // считаю пропорциональную часть в момент перехода
pi_str.Out = Out_main; // значение выхода регулятора приравниваю к последнему значению в ручном режиме
pi_str.v1 = Out_main/2; // надо чтобы функция пи-регулятора сработала в режиме насыщения интегральной составляющей
if((pi_str.Out-pi_str.up)>0) pi_str.i1 = pi_str.Out-pi_str.up; // считаем значение интегральной составляющей (выход ограничен от нуля до 0.1, поэтому проверка только на положительную разницу)
else pi_str.i1 = 0; // никогда не заходит в эту ветку, так на всякий случай, вдруг что-то накосячил
PI_MACRO(pi_str); // вызов регулятора

sim, про такое говорил наверное (как один из вариантов).


А есть у тебя готовый проект с PI или PID регулированием. Чтоб дома можно было попробовать. А то я не знаю с чего начать изучать PI/PID регулирование.

_________________
http://chyvack.ru/ Умные используют компьютер для экономии времени, дураки - чтобы его потратить...


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: "Безударное" переключение ПИ - регулятора
СообщениеДобавлено: 24 сен 2014, 11:40 
Старожил

Зарегистрирован: 24 июн 2011, 14:05
Сообщения: 294
Откуда: Новочеркасск
Хм, rol20, а Вы не подумали что у меня контроллер (да и компилятор) не тот что используется у Вас, у меня часть кода вообще в *.dll и асме сидит. Или вам на ПК надо?
Да я и вообщем-то весь код регулятора привёл.
Кстати вопрос: данный регулятор не начнёт уменьшать воздействие пока не увидит отрицательную ошибку рассогласования ведь? Тока щас об этом подумал, негодиться так наверное.


Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 14 ] 

Часовой пояс: UTC + 5 часов


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей


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

Найти:
Перейти:  

Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Русская поддержка phpBB