Меню
Блог Гридина Семёна

Автоматизация и логические контроллеры

Рубрики блога

Как управлять ПИД-регулятором на CoDeSyS?

Как управлять ПИД-регулятором на CoDeSyS?

Многие процессы в автоматизации (например порошковая покраска, изготовление выпечки, поддержание давления в трубопроводе) требуют точного регулирования физического параметра. С такими задачами хорошо справляется библиотека CoDeSyS ПИД регулятор. Эта тема довольно сложная, многогранная. Целые институты занимаются разработкой таких сложных и многоуровневых алгоритмов.

Из этой статьи вы узнаете:

Как работает ПИД-регулятор?
Описание библиотеки для CoDeSyS
Рабочая схема ПИД-регулятора

Приветствую посетителей моего блога! В сегодняшней статье я отвечу на вопрос — как работает ПИД-регулирование, для чего это нужно и как его использовать на практике…

Как работает ПИД-регулятор?

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

Существует специальная формула для формирования сигнала…

ПИД регулятор

Ниже приведена таблица составляющих формулы:

Составляющие формулы

Давайте поговорим о параметрах, которые непосредственно участвуют в процессе работы регулятора:

Хр — полоса пропорциональности. В общих чертах, чем шире Хр, тем меньше величина Y при одном и том же E. То есть чем больше Хр, тем короче импульсы.

Полоса пропорции

Ти — интегральная составляющая. Эта величина позволяет выдавать сигнал в зависимости от накопленной ошибки ( или от накопленного отклонения Е). Чем выше параметр, тем он реже и меньше выдаёт сигнал при рассогласовании Е. Это для того, чтобы сигнал не раскачивал систему и не совершал перерегулирование.

Интегральная составляющая

Тд — дифференциальная составляющая. Эта величина позволяет выдавать сигнал Y, при дополнительных резких возмущениях в системе. по — русски говоря, этот параметр срабатывает, когда нужно быстро среагировать на возмущающие воздействия. Естественно, чем он больше, тем длиннее импульс.

дифференциальная составляющая

Я думаю с точки зрения теории все понятно. Тогда переходим непосредственно к практике. Для чего и как используется ПИД-регулятор?

Описание библиотеки для CoDeSyS

Я говорил об этом, скажу ещё раз, библиотеки обязательно скачивайте с официальных источников. С сайта ОВЕН или библиотеки OSCAT. Рекомендую не использовать библиотеки с форумов или с других источников. Пишите лучше сами. Только вы понимаете от начала до конца, как у вас всё работает.

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

ПИД

Описание каждого входа и выхода:

Входные значения:

ПеременныеТип данныхПояснения
PVREALЗначение измеренного параметра
PV_TimeWORDВремя замера параметра PV 10 c.
SPREALУставка регулятора
RAMPBOOLРазрешение быстрого выхода на уставку
DYXREALПорог включения режима быстрого выхода на уставку, задает величину изменения пользователем уставки, при превышении которой происходит автоматическое включение БВУ
PV_0REALНачальное значение регулируемого параметра или значение параметра при нулевой мощности управляющего сигнала
START_ANRBOOL

Запуск АНР, возможные значения: 0 или 1.

Примечания. 1. Запуск АНР происходит в момент изменения значения параметра с 0 на 1. 2. После завершения АНР значение параметра остается равным 1 и нет необходимости устанавливать значение параметра равное 0. Для следующего запуска АНР необходимо сначала установить 0, затем вновь 1. 3. Остановка АНР происходит при установлении значения 0 и имеет смысл только в процессе АНР.
SYNCBOOLУстановка положения задвижки через вход PV. При установке значения TRUE положение задвижки (в диапазоне от 0 до 1) считывается из входа PV и сохраняется во внутренней переменной функционального блока
TVALREALВремя полного хода исполнительного механизма, в секундах
TLUFTREALВремя выборки люфта исполнительного механизма, в секундах
TIMPREALМинимальная длительность импульса управляющего сигнала, в секундах
PMAXREALМаксимальная мощность управляющего сигнала, возможные значения: –1…1
PMINREALМинимальная мощность управляющего сигнала, возможные значения: –1…1. Примечание. При отсутствии физических ограничителей на ИМ (например, концевых переключателей) рекомендуется устанавливать: для «охладителя» PMIN = –1, PMAX = 0, для «нагревателя» PMIN = 0, PMAX = 1. При наличии физических ограничителей на ИМ рекомендуется устанавливать значения PMIN и PMAX, соответствующие крайним возможным положениям ИМ
Y_MANUALREALПриращение мощности управляющего сигнала в режиме РУЧНОЕ УПРАВЛЕНИЕ к значению мощности, которая была при включении ручного управления, возможные значения: –1…1
Y_MAN_SETBOOLРежим РУЧНОЕ УПРАВЛЕНИЕ, возможные значения: 0 — выключен, 1 — включен. Примечание. При выключении режима РУЧНОЕ УПРАВЛЕНИЕ (Y_MAN_SET = 0) происходит безударный переход в режим РЕГУЛИРОВАНИЕ, т. е. выдаваемая регулятором мощность управляющего сигнала будет направлена на достижение заданной уставки

Выходные значения:

ПеременныеТип данныхПояснения
LESSBOOLСигнал на закрытие, возможные значения: 0 — выключено, 1 — включено
MOREBOOLСигнал на открытие, возможные значения: 0 — выключено, 1 — включено
YREALМощность управляющего сигнала в диапазоне PMIN…PMAX
ANR_WORKBOOLПризнак выполнения АНР, возможные значения: 0 — АНР не выполняется, 1 — АНР выполняется
FAST_DSPBOOLПризнак режима быстрого выхода на уставку, возможные значения: 0 — БВУ не выполняется, 1 — БВУ выполняется

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

Рабочая схема ПИД-регулятора

Возникает сразу же вопрос, а как же на самом деле правильно использовать данную библиотеку, чтобы она правильно функционировала и не глючила?

Предлагаю вам рабочую схему библиотеки ПИД-регулятора:

ПИД-регулятор

setAPID_otopl является вспомогательным блоком для ввода коэффициентов ПИД-регулятора.

Хочу сказать, что на входах блока обязательно должны стоять какие-то переменные, пускай даже если будут стоять в положении FALSE. А какие вы используете библиотеки в своих проектах? Пишите в комментариях.

На этом я заканчиваю, хорошего вам настроения, всего наилучшего. Пока, пока.

С уважением, Гридин Семён.

Вам так же может быть интересно

Комментариев к статье: 21
  • Норм статья !

    Хотелось бы пример использования на реальном железе посмотреть. Видео работы в студию =)

  • В ближайшее время постараюсь осуществить твои пожелания ;-)

  • Нужно специально отмечать, что этот блок реализован внутри прошивки контроллеров OWEN и на других контроллерах с CoDeSys его использовать не получится. Лучше вначале статьи это указать, либо прямо в заголовке в скобках (только OWEN).

    В самой библиотеке нет исходников, а функции помечены как внешние, т.е. применяется позднее связывание с кодом runtime.

  • Подождите подождите, это для меня новость, если честно. Я почему-то был уверен в том, что ПИД есть во всех контроллерах со средой CoDeSyS… Это не так на самом деле??

    • Это не так. Библиотеки Codesys от OWEN содержат только объявление для функциональных блоков, сам же код реализован как часть runtime для конкретного ПЛК. Codesys позволяет так делать. Это называется поздним связыванием. При попытке использовать FB от OWEN например в RaspberyPi приведёт к ошибке позднего связывания.

      Можно почитать комментарии к статье: www.asutp-volgograd.com/b…egulator-codesys

      «Борис Калинин 27/2/2017 21:32:27

      Блоки из овеновских библиотек работают только на ОВЕН ПЛК, т. к. реализация кода зашита в сам контроллер. Поэтому в эмуляции работать ничего не будет.»

    • Более простые блоки PID есть в библиотеке OSCAT-Basic и Util.library, но у них не так много параметров конфигурирования и они не имеют дискретных выходов управления (LESS, MORE), т.е. там почти «чистые» ПИДы.

  • А какие именно библиотеки OSCAT по ПИД-регулированию?? А на Raspberry вы пробовали ставить CoDeSyS??

  • Вот описание библиотеки oscat: www.tecomat.com/wpimages/…_basic333_en.pdf

    Ставить CoDeSys 3.5 на RaspberryPi B пробовал, даже нашёл глюк в работе, который описал на основном форуме поддержки: forum.codesys.com/viewtop…?f=21&t=7679

    Глюк так никто и не победил, но мало кто использует CoDeSys указанным там образом.

  • Всё-таки есть изъяны в использовании такой цепочки. Я читал о том, что там возможно только с ВЕБ-визуализацией, это не очень удобно. :sad:

    • Ну, вообще, никто вам не мешает подключить к RaspberryPi какой-нить графический экранчик, реализовать на ST функции рисования и создавать графику динамически. Это будет работать (я так делаю на специализированном контроллере с нестандартным экраном).

      На ST у вас есть доступ к файлам. Если буфер индикатора (экрана) доступен через файл, то вы можете внутри программы рисовать в свой буфер и периодически копировать его в буфер индикатора.

      Правда так вы не можете использовать встроенную визуализацию из IDE Codesys, но что-то показать вполне получится.

    • Есть ещё вариант. Подключить экран и написать отдельное приложение по визуализации на доступном языке. В программе Codesys нужно реализовать какой-нибудь протокол типа modbus-tcp slave. Запустить обе программы в работу. Runtime Codesys будет отрабатывать алгоритм и отвечать на запросы от программы визуализации.

      По схожему принципу работает панель оператора ИП320.

  • А, это типо панель оператора в режиме Master? Да, реально, я как-то не подумал о таком способе. В принципе можно подключить абсолютно любую панель оператора со своим ПО. Лишь бы она поддерживала TCP/IP MODBUS. ;-)

    • Да, только вряд ли найдётся панель оператора такая же дешёвая как RaspberryPi. Разве что этот китайский ИП320 (Xinje OP320) от овен. Вообще, стоимость RTS Codesys + панель оператора делает бессмысленным, я думаю, использование RaspberryPi. Разве что потренироваться «на кошках».

      Те, кто захотят подешевле скорее купят мелкий сенсорный экран и наваяют отдельную программу визуализации.

  • Нашёл исходники ПИД для управления задвижкой. Как пишет автор, тестировалось с ПИД из oscat библиотеки.

    Тема: www.owen.ru/forum/showthread.php?t=17728

    Библиотека: drive.google.com/file/d/0…view?usp=sharing

    Может кому-то будет интересно, т.к. найти подобное не так просто.

  • О, вообще здорово, очень полезный материал. Мне в первую очередь интересно, спасибо!!! ;-) Она полностью рабочая? На реальных объектах можно применять??

    • Не знаю, но попробую. По ссылке на google диск есть снимки экрана применения для двух ПИД (проекты на Codesys).

  • Доброго вечера, уважаемые коллеги! Подскажите каким образом к ПЛК 63 или 73 на программном уровне (имею ввиду CoDeSys) подключается модуль расширения выходов ОВЕН МР1. Заранее спасибо!

    • Привет, извини за задержку, всё показано на скриншоте prntscr.com/f9lf2c

  • Здравствуйте! Подскажите прошу, где мне найти этот ПИД регулятор APID_VALVE?? В библиотеках от CoDeSys его не нашел! :cry:

    • День добрый, на официальном сайте Овен — форум — раздел codesys 2.3 — библиотеки для плк100 либо для плк63.

      • ;-) Спасибо Вам