Алгоритм PID
-
taras_33
- professional
- Сообщения: 392
- Зарегистрирован: 31 окт 2009, 18:25
- Награды: 1
- Версия LabVIEW: 2019
- Поблагодарили: 13 раз
- Контактная информация:
Алгоритм PID
Решил спросить совета о ПИД регулировании.
Суть вот в чем. Гидравлический цилиндр управляется сервоклапаном (типа такого), с наличием датчика перемещения, установленном на цилиндре. Вообщем такая система: Set Point 0 - 10V , Feed Back 0 - 10V и Process Variable +/- 8mA. Так вот при любом установившимся положении цилиндра ток сервоклапана близок к нулю. В этом собственно и отличие от классической системы. Например взять электро печь, для поддержания температуры в 200 С требуется 70 вольт, для 300 С ну скажем 110 вольт. То есть каждой установки температуры SP соответствует определенное значение PV. В моем случае PV конечном итоге близка к нулю, ну дергается туда сюда с частотой 2000 Гц (частота воздействия) для удержания цилиндра в заданном положении.
Проблема в том, что не получается задействовать полноценный PID, только P (пропорциональная состовляющая) То есть error = SP - FB, а PV= error * Kp
При попытке задействовать интегральную либо дифференцирующую составляющую система ведет себя нестабильно. Может кто подскажет какой алгоритм PID, либо вообще другой подход к решению данных задач.
Суть вот в чем. Гидравлический цилиндр управляется сервоклапаном (типа такого), с наличием датчика перемещения, установленном на цилиндре. Вообщем такая система: Set Point 0 - 10V , Feed Back 0 - 10V и Process Variable +/- 8mA. Так вот при любом установившимся положении цилиндра ток сервоклапана близок к нулю. В этом собственно и отличие от классической системы. Например взять электро печь, для поддержания температуры в 200 С требуется 70 вольт, для 300 С ну скажем 110 вольт. То есть каждой установки температуры SP соответствует определенное значение PV. В моем случае PV конечном итоге близка к нулю, ну дергается туда сюда с частотой 2000 Гц (частота воздействия) для удержания цилиндра в заданном положении.
Проблема в том, что не получается задействовать полноценный PID, только P (пропорциональная состовляющая) То есть error = SP - FB, а PV= error * Kp
При попытке задействовать интегральную либо дифференцирующую составляющую система ведет себя нестабильно. Может кто подскажет какой алгоритм PID, либо вообще другой подход к решению данных задач.
Programming today is a race between software engineers striving to build bigger and better idiot-proof programs, and the Universe trying to produce bigger and better idiots.
So far, the Universe is winning!
So far, the Universe is winning!
Re: Алгоритм PID
Я бы при поддержании требуемого перемещения поддерживал скорость перемещения, задание которой изменяется в зависимости от приближения к уставке ( т.е. контролируемый разгон и останов).
-
taras_33
- professional
- Сообщения: 392
- Зарегистрирован: 31 окт 2009, 18:25
- Награды: 1
- Версия LabVIEW: 2019
- Поблагодарили: 13 раз
- Контактная информация:
Re: Алгоритм PID
Проблема не в скорости, а в ошибке установки. Скажем я подаю синусоиду 0.1Гц в качестве SP, цилиндр медленно делает полный цикл за 10 секунд. Я вывожу это дело на XY Graph. Установка по X, положение по Y ( SP vs FB). И наблюдаю гистерезис, при перемещении в 30 см, ошибка (в самом худшем месте на графике) 0.6 мм. В моем случае это не приемлемо. В идеале движение вперед, должно совпадать с движением назад. Увеличиваю Kp, ошибка уменьшается, но увеличивается нестабильность...
Programming today is a race between software engineers striving to build bigger and better idiot-proof programs, and the Universe trying to produce bigger and better idiots.
So far, the Universe is winning!
So far, the Universe is winning!
-
Jakob Brontfeyn
- expert
- Сообщения: 1729
- Зарегистрирован: 28 фев 2008, 11:01
- Награды: 6
- Благодарил (а): 1 раз
- Контактная информация:
Re: Алгоритм PID
Было такое в моей практике, смотри пример демомодель,
я вместо ПИД поставил только одно умножение для демо,
в реале если постсвить ПИД будет работать быстрее
я вместо ПИД поставил только одно умножение для демо,
в реале если постсвить ПИД будет работать быстрее
- Вложения
-
- PID_Hydravlik.vi
- (31.59 КБ) 145 скачиваний
Re: Алгоритм PID
Если регулировать сразу по положению- основная составляющая в выходном сигнале-пропорциональная,если регулировать скорость движения цилиндра- основная составляющая будет интегральная, за счет этого не будет биений.
- Вложения
-
- Hydro1.vi
- (25.4 КБ) 153 скачивания
-
taras_33
- professional
- Сообщения: 392
- Зарегистрирован: 31 окт 2009, 18:25
- Награды: 1
- Версия LabVIEW: 2019
- Поблагодарили: 13 раз
- Контактная информация:
Re: Алгоритм PID
Спасибо. Любопытное решение! Нужно опробывать на практике. Когда появится возможность, прошью контроллер (ПИД у меня в ARM контроллере) с новым алгоритмом, о результатах отпишусь.Было такое в моей практике, смотри пример демомодель,
я вместо ПИД поставил только одно умножение для демо,
в реале если постсвить ПИД будет работать быстрее
Programming today is a race between software engineers striving to build bigger and better idiot-proof programs, and the Universe trying to produce bigger and better idiots.
So far, the Universe is winning!
So far, the Universe is winning!
-
taras_33
- professional
- Сообщения: 392
- Зарегистрирован: 31 окт 2009, 18:25
- Награды: 1
- Версия LabVIEW: 2019
- Поблагодарили: 13 раз
- Контактная информация:
Re: Алгоритм PID
Скорость мало зависит от тока (что 8mA что 2mA разница почти не заметна) это специфика работы сервоклапанов, особенно если они двухступеньчатые, гораздо больше от приложенного давления.Если регулировать сразу по положению- основная составляющая в выходном сигнале-пропорциональная,если регулировать скорость движения цилиндра- основная составляющая будет интегральная, за счет этого не будет биений
Programming today is a race between software engineers striving to build bigger and better idiot-proof programs, and the Universe trying to produce bigger and better idiots.
So far, the Universe is winning!
So far, the Universe is winning!
-
taras_33
- professional
- Сообщения: 392
- Зарегистрирован: 31 окт 2009, 18:25
- Награды: 1
- Версия LabVIEW: 2019
- Поблагодарили: 13 раз
- Контактная информация:
Re: Алгоритм PID
На демо все красиво. Только не совсем понял куда мой FB прикрутить.если постсвить ПИД будет работать быстрее
У ПИД два входа на демо один, значит ли это что второй вход и есть мой FB?
Programming today is a race between software engineers striving to build bigger and better idiot-proof programs, and the Universe trying to produce bigger and better idiots.
So far, the Universe is winning!
So far, the Universe is winning!
-
Jakob Brontfeyn
- expert
- Сообщения: 1729
- Зарегистрирован: 28 фев 2008, 11:01
- Награды: 6
- Благодарил (а): 1 раз
- Контактная информация:
Re: Алгоритм PID
Почему 2 входа? у ПИД алгоритма один вход, это разность между сетпоинт
и процесс вариабле.
Где прозводится вычитание в Вашем конкретном случае внутри или снаружи
ПИД-суб-Ви, наверное не так уже и важно. В моем примере разность
вычисляется снаружи.
и процесс вариабле.
Где прозводится вычитание в Вашем конкретном случае внутри или снаружи
ПИД-суб-Ви, наверное не так уже и важно. В моем примере разность
вычисляется снаружи.
-
taras_33
- professional
- Сообщения: 392
- Зарегистрирован: 31 окт 2009, 18:25
- Награды: 1
- Версия LabVIEW: 2019
- Поблагодарили: 13 раз
- Контактная информация:
Re: Алгоритм PID
а
У меня два входа:
Желаемое положение - SP
Фактическое положение - FB
Один выход PV
Три PID параметра
Kp
Ki
Kd
Высчитываю ошибку положения
Error = SP - FB
Пропорциональная составляющая = Error * Kp
Интегральная = накопленная ошибка * Ki
Деффиринциальная = (последнее значение PV минус текущее положение FB) * Kd
То есть при вычислении используется FB
далее выход это сумма всех трех составляющих PV = Пропорциональной +Интегральной + Деффиринциальной
Данный алгоритм хорошо работает в системах, где выход не нулевой - электропечь например.
А где обратная связь? FBПочему 2 входа? у ПИД алгоритма один вход, это разность между сетпоинт
и процесс вариабле.
У меня два входа:
Желаемое положение - SP
Фактическое положение - FB
Один выход PV
Три PID параметра
Kp
Ki
Kd
Высчитываю ошибку положения
Error = SP - FB
Пропорциональная составляющая = Error * Kp
Интегральная = накопленная ошибка * Ki
Деффиринциальная = (последнее значение PV минус текущее положение FB) * Kd
То есть при вычислении используется FB
далее выход это сумма всех трех составляющих PV = Пропорциональной +Интегральной + Деффиринциальной
Данный алгоритм хорошо работает в системах, где выход не нулевой - электропечь например.
Programming today is a race between software engineers striving to build bigger and better idiot-proof programs, and the Universe trying to produce bigger and better idiots.
So far, the Universe is winning!
So far, the Universe is winning!
-
IvanLis
- guru
- Сообщения: 5463
- Зарегистрирован: 02 дек 2009, 17:44
- Награды: 7
- Версия LabVIEW: 2015, 2016
- Откуда: СССР
- Благодарил (а): 28 раз
- Поблагодарили: 86 раз
Re: Алгоритм PID
В примере обратная связь сделана через локальную переменную.taras_33 писал(а):А где обратная связь? FB
Но это только П от ПИД, интегральная и диф. составляющие там отсутствуют, о чем автор и написал
Ждите советов от профи.
Знание нескольких принципов освобождает от знания многих фактов!
Правила форума
Как добавить в сообщение картинку или файл
Конвертация / версий (форматов) VI
Как правильно задать вопрос...
Правила форума
Как добавить в сообщение картинку или файл
Конвертация / версий (форматов) VI
Как правильно задать вопрос...
-
taras_33
- professional
- Сообщения: 392
- Зарегистрирован: 31 окт 2009, 18:25
- Награды: 1
- Версия LabVIEW: 2019
- Поблагодарили: 13 раз
- Контактная информация:
Re: Алгоритм PID
В примере обратная связь сделана через локальную переменную
Так это понятно, просто в примере происходит запись в эту переменную. А с Feed Back только прочитать можно.
Дело все в том, что у меня PID адаптирован к контроллеру и алгоритм очень упрощен. Кроме того у меня PV это и есть выход. В примере выход отдельный. Вообщем нужно "курить" теорию и думать как организовать грамотное взаимодействие (вычисление) между четырьмя "объектами"
SP - только чтение
FB - только чтение
PV - чтение/запись
Output - результат вычислений
Programming today is a race between software engineers striving to build bigger and better idiot-proof programs, and the Universe trying to produce bigger and better idiots.
So far, the Universe is winning!
So far, the Universe is winning!
-
Jakob Brontfeyn
- expert
- Сообщения: 1729
- Зарегистрирован: 28 фев 2008, 11:01
- Награды: 6
- Благодарил (а): 1 раз
- Контактная информация:
Re: Алгоритм PID
Вот вставил в модель ПИД-суб-ВИ,
сейчас работа модели уже очень близка
к реальной.
сейчас работа модели уже очень близка
к реальной.
- Вложения
-
- PID_Hydravlik_1_1.llb
- (63.52 КБ) 169 скачиваний
-
taras_33
- professional
- Сообщения: 392
- Зарегистрирован: 31 окт 2009, 18:25
- Награды: 1
- Версия LabVIEW: 2019
- Поблагодарили: 13 раз
- Контактная информация:
Re: Алгоритм PID
Спасибо, выглядит супер. Но вопрос остался открытым.
Вот выделил желтым, что до меня не доходит и где происходит конфликт. Из контекста справки понятно что PV это аналоговый вход. Все верно, в моем случае это датчик положения.
В Вашем примере PV это переменная, в которую кроме чтения, происходит еще и запись.
PS. Отдельное спасибо за PID subVI
Вот выделил желтым, что до меня не доходит и где происходит конфликт. Из контекста справки понятно что PV это аналоговый вход. Все верно, в моем случае это датчик положения.
В Вашем примере PV это переменная, в которую кроме чтения, происходит еще и запись.
PS. Отдельное спасибо за PID subVI
Programming today is a race between software engineers striving to build bigger and better idiot-proof programs, and the Universe trying to produce bigger and better idiots.
So far, the Universe is winning!
So far, the Universe is winning!
-
Jakob Brontfeyn
- expert
- Сообщения: 1729
- Зарегистрирован: 28 фев 2008, 11:01
- Награды: 6
- Благодарил (а): 1 раз
- Контактная информация:
Re: Алгоритм PID
Тарас, это же модель.
Запись в локальную переменную
моделирует здесь следующую реальную цепочку:
-выходной аналоговый сигнал поступает с выхода системы на управляющий вентиль
- аналоговый вентиль переключением подачи масла под давлением
смещает поршень в нужном направлении.
- аналоговый сигнал датчика перемещения поршня поступает на вход
и считывается системой как PV
Запись в локальную переменную
моделирует здесь следующую реальную цепочку:
-выходной аналоговый сигнал поступает с выхода системы на управляющий вентиль
- аналоговый вентиль переключением подачи масла под давлением
смещает поршень в нужном направлении.
- аналоговый сигнал датчика перемещения поршня поступает на вход
и считывается системой как PV