PDA

Просмотр полной версии : ПИД регулятор



Страницы : 1 [2] 3

Эдуард_Н
09.06.2016, 18:37
Y_MIN -100
Y_MAX 100
Коэффициент усиления 5
Интегральная составляющая 25
Дифф. составляющая 0

Остальные входы не имеют значения

А где тут что?

deniska13
09.06.2016, 18:59
А где тут что?

KP = 5
TN = 25
TV =0
Y_MANUAL = 0
Y_OFFSET = 0
Y_MIN = -100
Y_MAX = 100
MANUAL = FALSE
RESET - сброс с выхода регулятора OVERFLOW
ACTUAL - измеряемая величина (тек. значение)
SET_POINT - уставка

deniska13
09.06.2016, 19:06
Поставьте К=0,05. 5 - это слишком много.
Блок работает, используется именно в ИТП.

Если Вас не затруднит, можете прокомментировать свой код и снова прислать?
И конечно возможные пределы задания входных значений, ведь Вы только знаете их.

Эдуард_Н
09.06.2016, 19:07
Спасибо. Попробую, Ваш ФБ VALVE_3_POS мне понравился.

deniska13
09.06.2016, 19:49
Спасибо. Попробую, Ваш ФБ VALVE_3_POS мне понравился.

Если вдруг найдёте минусы в его работе или ошибки, напишите, если не сложно, чтобы я его доработал.

ASo
09.06.2016, 20:33
Если Вас не затруднит, можете прокомментировать свой код и снова прислать?
И конечно возможные пределы задания входных значений, ведь Вы только знаете их.
Прокомментировать ФБ? Могу, но пока не до этого. На самом деле, это обычный ПИ регулятор, переписанный в диф форму, без накопления интегральной составляющей.
Входных значений коэффициентов регулирования? Они те же, что и для "классического ПИД с выходной величиной в диапазоне 0..1 (привычка не пользоваться %). Т.е для типичного АВОК для отопления К=0,02 (аналог 2 для случая выхода 0..100%), T=300. Для ГВС, как динамичной системы, К=0,05, Т=100. Дальше подбираем.

DKFLBVBH
10.06.2016, 09:04
Господа! Может кто поделиться библиотекой OSCAT ?
Мучаюсь над большой проблемой для себя: Есть ПЛК110-60 с датчиком температуры (подключена через модуль МВ110-8А), нужно управлять нагревом тэна, так чтобы по достижению определенной температуры тэн отключался и включался вентелятор.

Уважаемые, может у когото уже был подобный опыт? поделитесь кто чем может :rolleyes:

capzap
10.06.2016, 09:07
бибка же бесплатна, свободно лежит на сайте

DKFLBVBH
10.06.2016, 09:52
24888
Господа знатоки, подскажите пожалуйста студенту, есть следующую проблема:
С ПИД-а выходит величина Y (REAL) - принимает значение от 0 до 100 (чем ближе PV к SP - тем меньше)
Далее я преобразую Y в BOOL и вывожу в BLINK - нужно чтобы нагреватель включался через дискрет импульсно
И тут есть проблема. параметры TIMELOW и TIMEHIGH должны быть непостоянными, а зависеть от величины Y, то есть чем больше величина Y - тем чаще должен срабатывать дискрет MIG1, и соответственно чем ниже величина Y, тем реже срабатывает дискрет.
Y конвертирую в YTIME путем REAL_TO_TIME, далее YTIME завожу на TIMEHIGH или нужно как-то иначе?

rwg
10.06.2016, 10:15
24888
Господа знатоки, подскажите пожалуйста студенту, есть следующую проблема:
С ПИД-а выходит величина Y (REAL) - принимает значение от 0 до 100 (чем ближе PV к SP - тем меньше)
Далее я преобразую Y в BOOL и вывожу в BLINK - нужно чтобы нагреватель включался через дискрет импульсно
И тут есть проблема. параметры TIMELOW и TIMEHIGH должны быть непостоянными, а зависеть от величины Y, то есть чем больше величина Y - тем чаще должен срабатывать дискрет MIG1, и соответственно чем ниже величина Y, тем реже срабатывает дискрет.
Y конвертирую в YTIME путем REAL_TO_TIME, далее YTIME завожу на TIMEHIGH или нужно как-то иначе?

https://ru.wikipedia.org/wiki/%D0%A8%D0%B8%D1%80%D0%BE%D1%82%D0%BD%D0%BE-%D0%B8%D0%BC%D0%BF%D1%83%D0%BB%D1%8C%D1%81%D0%BD%D 0%B0%D1%8F_%D0%BC%D0%BE%D0%B4%D1%83%D0%BB%D1%8F%D1 %86%D0%B8%D1%8F

DKFLBVBH
10.06.2016, 11:34
Спасибо добрый человек!

Эдуард_Н
10.06.2016, 12:38
Уважаемы ASo можете этот ФБ 24892 сделать чуточку интеллектуальней что ли:)

deniska13
10.06.2016, 12:58
Уважаемы ASo можете этот ФБ 24892 сделать чуточку интеллектуальней что ли:)

У вас длительность импульсов всегда одинаковая...в моем блоке длительность импульсов меняется в зависимости на сколько текущее значение близко или далеко от уставки....чем дальше, тем импульс длиннее и наоборот,
при достижении регулятором крайнего положения 100 или -100, импульс имеет постоянное значение...Ваш регулятор будет не очень точно работать

Эдуард_Н
10.06.2016, 13:06
У вас длительность импульсов всегда одинаковая...в моем блоке длительность импульсов меняется в зависимости на сколько текущее значение близко или далеко от уставки....чем дальше, тем импульс длиннее и наоборот,
при достижении регулятором крайнего положения 100 или -100, импульс имеет постоянное значение...Ваш регулятор будет не очень точно работать

У Вас он привязан к PID из Util, а это работает на прямую. Стоит этот ФБ на управлении прогрессивной горелкой CIB Unigaz уже два года, хотелось бы чего-то таково же, но по интеллектуальнее.:)

ASo
10.06.2016, 13:18
У вас длительность импульсов всегда одинаковая...Не всегда. Одинаковая - когда около минимума.
Посмотрите код.
При резких отклонениях, когда работает П-составляющая - длительность большая.

deniska13
10.06.2016, 13:41
Не всегда. Одинаковая - когда около минимума.
Посмотрите код.
При резких отклонениях, когда работает П-составляющая - длительность большая.

Если честно, то не вижу, уставка времени ведь всегда одинаковая, как таймер будет работать дольше или меньше, если уставка одинаковая, тем более таймер ТР, он срабатывает по импульсу или по 1 на входе, как достчитал свое время,
выход равен FALSE...

deniska13
10.06.2016, 13:53
У Вас он привязан к PID из Util, а это работает на прямую. Стоит этот ФБ на управлении прогрессивной горелкой CIB Unigaz уже два года, хотелось бы чего-то таково же, но по интеллектуальнее.:)

В моем блоке можно реализовать, дополнительно свой регулятор, внутренний, и можно будет обойтись без ФБ PID из библиотеки UTIL. Сам блок, как я считаю, работает правильно, есть небольшие недостатки в том, что
он имеет мертвую зону большую, когда выход ПИДа находится в диапазоне от -10 до 10, но это можно устранить путем уменьшения минимальной длительности импульса...при полном ходе ИМ в 120 сек, минимальный импульс будет 600мс, если полный ход ИМ установить 60 сек, то минимальная длительность импульса будет 300 мс, то есть у ФБ VALVE_3_POS импульс будет выдан, когда значение расчетного импульса в зависимости от значения на входе будет больше минимальной длительности импульса...с этим можно поиграться и добиться работы регулятора в пределах выхода ФБ ПИД от -5 до 5 и того меньше...что даст более точное регулирование, но при этом постоянное дерганье ИМ в близи уставки, что сказывается на сроке службе ИМ. Ну и конечно влияют установленные коэффициенты ПИДа, нужно чтобы он работал быстро на системах ГВС, на отоплении можно и даже нужно, чтобы был медленнее, тут нужно подбирать KP и TN...
Что касается управления горелок, так там все гораздо проще, там не нужно обычно очень хорошего регулятора, можно обойтись и обычным 2 поз, ваш будет вообще идеально работать, так как котловой контур обычно более инерционен, нежели чем, например система ГВС..

Эдуард_Н
10.06.2016, 14:11
Работает Ваш ФБ согласен замечательно, но Вот если бы Вы добавили в него регулятор свой, что бы было как у ASo, то было бы ещё лучше.

deniska13
10.06.2016, 14:20
Работает Ваш ФБ согласен замечательно, но Вот если бы Вы добавили в него регулятор свой, что бы было как у ASo, то было бы ещё лучше.

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

Эдуард_Н
10.06.2016, 15:15
Добавлю, просто нужно было быстро сделать регулятор для задвижки на объекте, потому что ни один из тех, что на форуме выкладывали нормально не работал...я его доработаю, добавив в него, свой внутренний регулятор...

Будем ждать новинки.:D

deniska13
10.06.2016, 15:49
Будем ждать новинки.:D

Как будет, готов дам знать)

petera
10.06.2016, 16:03
Мой вариант VALVE_3_POS
24903

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

Эдуард_Н
10.06.2016, 16:11
Мой вариант VALVE_3_POS
24903

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

"Требуемое положение" есть, а измеренное где? Или я не так понял?
Можете этот ФБ без виртуальной задвижки выложить?

petera
10.06.2016, 16:17
"Требуемое положение" есть, а измеренное где? Или я не так понял?

Так нету же измеренного, виртуальная задвижка, так же как и у deniska13
И применять так же - на вход требуемое положение с выхода PID, например, утильного. На выходе импульсы открыть/закрыть.

Эдуард_Н
10.06.2016, 16:22
Не нравится мне этот пид утильный, или настраивать его не умею, входное изменилось он обратно на 100 отсчитывает:(

deniska13
10.06.2016, 16:27
Не нравится мне этот пид утильный, или настраивать его не умею, входное изменилось он обратно на 100 отсчитывает:(

Что Вам в нем не нравится?) Хороший регулятор на самом деле. Если очень быстро считает, значит к Вас большое значение КР и маленькое TN это образно говоря...
Поиграйтесь с значениями на этих входах и увидите как меняется скорость изменения выходного значения на выходе ПИДа

deniska13
10.06.2016, 16:40
Мой вариант VALVE_3_POS
24903

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

Столько у вас много входных параметров) можно запутаться при настройке) чем проще сделано, тем качественнее работает)...в моем блоке можно изменить немного код и минимальную длительность импульсов задавать вручную,
но тот кто будет пользоваться этим блоком, не видя что "внутри" будет слабо понимать, какие параметры для работы блока оптимальные, чтобы блок работал корректно. Что касается люфта и времени реверса, обычно
это происходит мгновенно, и это не атомная станция, а обычные тепловые пункты и котельные где 1 сек не играет сильной роли не говоря уже о люфте в 500мс, но это лично мое мнение....а как у Вас в блоке работает функция синхронизации положения, можете суть ее рассказать, нет возможности сейчас просмотреть код блока..Для чего нужен параметр "минимальная остановка"? MinStop

petera
10.06.2016, 17:54
Столько у вас много входных параметров) можно запутаться при настройке) чем проще сделано, тем качественнее работает)...в моем блоке можно изменить немного код и минимальную длительность импульсов задавать вручную,
но тот кто будет пользоваться этим блоком, не видя что "внутри" будет слабо понимать, какие параметры для работы блока оптимальные, чтобы блок работал корректно. Что касается люфта и времени реверса, обычно
это происходит мгновенно, и это не атомная станция, а обычные тепловые пункты и котельные где 1 сек не играет сильной роли не говоря уже о люфте в 500мс, но это лично мое мнение....а как у Вас в блоке работает функция синхронизации положения, можете суть ее рассказать, нет возможности сейчас просмотреть код блока..Для чего нужен параметр "минимальная остановка"? MinStop

Я ничего не изобретал, а сделал столько входных переменных, сколько было у VALVE_REG_NO_POS из библиотеки PID_Regulators ОВЕН.
24905

24906

24907

Может бы свой ФБ и не сочинял, а взял бы готовый, только ФБ из библиотеки PID_Regulators в эмуляции не работает, только в реальном ПЛК.

Eugene.A
11.06.2016, 19:01
ФБ из библиотеки PID_Regulators в эмуляции не работает, только в реальном ПЛК.
Интересно, почему?

Николаев Андрей
11.06.2016, 19:57
По тому что данная библиотека в ядре ПЛК.

Engeco
14.06.2016, 07:14
ШИМ - частичное решение, вы пытаетесь наладить работу так, чтобы при остывании по датчику температуры дискрет начинал работать активнее (чаще) и по достижению заданной температурной уставки, соответственно, дискрет должен срабатывать немногим реже для поддержания режима.
Оно конечно здорово и ход мыслей у Вас правильный, но простой связки ПИД-а и ШИМ-а тут явно недостаточно, блок управления будет очень громоздким + если учесть множественное регулирование (более 2-х) зон с отдельными нагревателями и контролем температуры по каждой зоне, то вы упретесь в тайминги контроллера, если же проблема с таймингами у Вас каким-то образом разрешится, то могут возникнуть непонятки с BLINK - временами он работает некорректно, особенно с превышением определенных "частот включения".

Мы бы посоветовали Вам избавиться от этой бредовой затеи и рассмотреть стандартные модули ОВЕН ТРМ, на своем производстве с пару годков назад мы пробовали то, что пытаетесь реализовать Вы, приглашали целую кучу фрилансеров в АСУ ТП для решения вопроса, пробовали различные ПЛК (110, 150, 160) под наши 5 зон положительного эффекта не достигнули.

Всюду эффект был недостижим, упирались в тайминги ПЛК и в последствии просто воткнули каждую зону на ТРМ, завели центральное управление и диспетчеризацию в ПЛК и перестали мучить это направление.
Денег на сторонних специалистов и время на решение данной задачи потратили столько, что могли бы купить в ЗИП и 2 ПЛК и весь набор переферии ~ 4200$-5000$

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

DKFLBVBH
14.06.2016, 07:47
RWG, сделал следующую реализацию
24940

Оно как бы работает, но не получается сделать так, чтобы при "падении" температуры на входе поднималась частота "включения" дискрета, т.е. выход KL1 всегда срабатывает с одной и той-же частотой, можете подсказать что либо по этому моменту?

Владимир Ситников
14.06.2016, 23:28
пробовали различные ПЛК (110, 150, 160) под наши 5 зон положительного эффекта не достигнули.
Звучит как вызов.
Но, с другой стороны, пишете, что "сейчас всё устраивает"

Engeco
15.06.2016, 05:50
Милейший, я могу предположить то, что я ошибаюсь, мои коллеги ошибались и целых 7 фрилансеров были неадекватными. мир не совершенен.
Давайте опровергнем или подтвердим сие.
Вот к примеру у DKFLBVBH есть задачка над которой он бьется, подобная задача была и у нас, поможем всем миром найти решение?

Владимир Ситников
15.06.2016, 08:43
RWG, сделал следующую реализацию
24940

Оно как бы работает, но не получается сделать так, чтобы при "падении" температуры на входе поднималась частота "включения" дискрета, т.е. выход KL1 всегда срабатывает с одной и той-же частотой, можете подсказать что либо по этому моменту?

А какая зависимость между температурой и частотой нужна?

Нужно умножить timelow и timehigh на что-нибудь (например на температуру, но лучше, конечно, понимать какая зависимость нужна)

DKFLBVBH
15.06.2016, 09:02
можете пример скинуть?

Andrew_Stranger
15.06.2016, 11:59
Всюду эффект был недостижим, упирались в тайминги ПЛК и в последствии просто воткнули каждую зону на ТРМ, завели центральное управление и диспетчеризацию в ПЛК и перестали мучить это направление.
Денег на сторонних специалистов и время на решение данной задачи потратили столько, что могли бы купить в ЗИП и 2 ПЛК и весь набор переферии ~ 4200$-5000$

Сейчас деньги платят не за результат, а за процесс?
DKFLBVBH Чем Вас ШИМ не устраивает и что за установка?

Вольд
15.06.2016, 12:28
Мы бы посоветовали Вам избавиться от этой бредовой затеи и рассмотреть стандартные модули ОВЕН ТРМ, на своем производстве с пару годков назад мы пробовали то, что пытаетесь реализовать Вы, приглашали целую кучу фрилансеров в АСУ ТП для решения вопроса, пробовали различные ПЛК (110, 150, 160) под наши 5 зон положительного эффекта не достигнули.

В известной басне А.Крылова про этот случай написано так:

"А вы, друзья, как ни садитесь;
Всё в музыканты не годитесь".

Туго видать с хорошими специалистами в славном городе Магадан. ;)

Вольд
15.06.2016, 12:48
Сейчас деньги платят не за результат, а за процесс?

За процесс платили в эпоху развитого социализма, а при капитализме хозяин платит только за результат. ;)

DKFLBVBH
15.06.2016, 15:10
Самогонный аппарат

smk1635
15.06.2016, 16:33
Кстати с самогонным аппаратом не все просто. Как раз кипение и не нужно. Там надо держать определённую температуру. Градуса 74.
Процесс долгий получается, часов 12, при 20 литровой фляге. Но после двойной перегонки попробуешь продукт и понимаешь - это того стоило.
Так что ПИД-регулятор там самое то. :D

Eugene.A
15.06.2016, 20:43
Символ ° набирается alt+248

DKFLBVBH
16.06.2016, 06:45
Да, поддержание кипения, не гистерезис же там использовать, нужно удержать тэном 75.8°

Эдуард_Н
19.06.2016, 18:34
Продолжаю делиться функциональными блоками :)
Этот блок я использую для управления частотниками с помощью ПЛК. Сейчас задействован аналоговый выход ПЛК, но с таким же успехом блок можно применять и для соединений ПЛК и ЧП через цифровые интерфейсы.

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

Блок также экспортирован и код открыт. Он очень прост (подробное описание (http://www.asutp-volgograd.com/1/post/2013/05/pid-regulator-for-inverters-codesys.html)), но достаточно универсален и пока отлично показывает себя на практике.

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

Какие библиотеки использовались для создания этого ФБ?

Andrew_Stranger
19.06.2016, 19:26
Библиотека Util

Эдуард_Н
19.06.2016, 19:41
Библиотека Util

А вторая какая? DIG_FLTR откуда?

Andrew_Stranger
19.06.2016, 21:09
Скорее всего это из овеновской библиотеки пид регуляторов

Эдуард_Н
20.06.2016, 03:28
Скорее всего это из овеновской библиотеки пид регуляторов

Точно, она. То-то я смотрю название знакомое.:)

Эдуард_Н
25.06.2016, 14:03
Бибку я уже выкладывал. Повторяю.

А можете в этой бибке в ФБ "PIDP" вывести наружу переключение ручное-автомат?

ASo
25.06.2016, 16:31
Ээээээ.... Так выведено! Есть входы, которые в ручную подают сигналы на выходы и сбрасывают накопленный интеграл.
Или что вам нужно?

Эдуард_Н
25.06.2016, 17:04
Нужен вход переключающий авт.-руч. (если переключил в "руч." то сигнал на выходе появляется только когда управляешь теми входами которые сейчас выведены наружу)
Можно конечно это сорганизовать и с наружи, но думаю лучше будет если это будет внутрях.
В теле программы есть переменная "Hand: BOOL;", может её вытащить наружу?

ASo
25.06.2016, 17:23
Вытаскивайте, бибка открытая.

Денис Сухарев
24.08.2016, 19:50
24888
Господа знатоки, подскажите пожалуйста студенту, есть следующую проблема:
С ПИД-а выходит величина Y (REAL) - принимает значение от 0 до 100 (чем ближе PV к SP - тем меньше)
Далее я преобразую Y в BOOL и вывожу в BLINK - нужно чтобы нагреватель включался через дискрет импульсно
И тут есть проблема. параметры TIMELOW и TIMEHIGH должны быть непостоянными, а зависеть от величины Y, то есть чем больше величина Y - тем чаще должен срабатывать дискрет MIG1, и соответственно чем ниже величина Y, тем реже срабатывает дискрет.
Y конвертирую в YTIME путем REAL_TO_TIME, далее YTIME завожу на TIMEHIGH или нужно как-то иначе?

Изучите пример ниже в режиме эмуляции и вам всё станет понятно.
http://www.owen.ru/forum/attachment.php?attachmentid=20331&d=1444365534

Serhioromano
21.09.2016, 17:08
Устал читать. Так что сделали ПИД? Если да то можно просто первое сообщение поддерживать актуальным. А то пролистать в поисках библиотеки 20 страниц не просто. А так открыл тему, и в первом посте самые последние ссылки. Это удобно. Я вот видел люди используют PID_FUNCTION но не могу ее найти.

Vite4ek
26.09.2016, 21:26
Пытаюсь собрать элементарный регулятор для 3-позиционного управления КЗР. Ставлю PID регулятор, на выход цепляю VALVE_REG_NO_POS. В режиме эмуляции на выходе VALVE_REG_NO_POS всегда намертво включен выход LESS, хотя выход Y на PID меняется адекватно в обе стороны при изменении уставки. Голову сломал, что не так делаю?

petera
27.09.2016, 01:45
Пытаюсь собрать элементарный регулятор для 3-позиционного управления КЗР. Ставлю PID регулятор, на выход цепляю VALVE_REG_NO_POS. В режиме эмуляции на выходе VALVE_REG_NO_POS всегда намертво включен выход LESS, хотя выход Y на PID меняется адекватно в обе стороны при изменении уставки. Голову сломал, что не так делаю?

Не надо голову ломать, ФБ VALVE_REG_NO_POS из библиотеки PID_Regulators в эмуляции не работает, только в реальном ПЛК.
Посмотрите мой аналог http://www.owen.ru/forum/showthread.php?t=24626&p=212048&viewfull=1#post212048
С выборкой люфта механизма, с контролем мин. длительности импульсов и мин. паузы между импульсами и мин. паузы при реверсе механизма.
Есть вход синхронизации виртуального положения текущему значению на входе, входы ручного управления.

Эдуард_Н
27.09.2016, 04:03
Попробуйте блок PIDP http://www.owen.ru/forum/showthread.php?t=24626&page=2&p=211755&viewfull=1#post211755

pikvikone
28.09.2016, 12:16
Добрый день всем форумчани. Мне нужнен пид регулятор для управления 3х ходового клапана. библиотека или фб. и если можно статью как им пользоваться.

Vite4ek
28.09.2016, 17:03
Не надо голову ломать, ФБ VALVE_REG_NO_POS из библиотеки PID_Regulators в эмуляции не работает, только в реальном ПЛК.
Спасибо! А почему так происходит?

Посмотрите мой аналог http://www.owen.ru/forum/showthread....l=1#post212048
С выборкой люфта механизма, с контролем мин. длительности импульсов и мин. паузы между импульсами и мин. паузы при реверсе механизма.
Есть вход синхронизации виртуального положения текущему значению на входе, входы ручного управления.

Попробуйте блок PIDP http://www.owen.ru/forum/showthread.php?t=24626&page=2&p=211755&viewfull=1#post211755
В итоге нашел в этой теме пид-регулятор из библиотеки ПИД_СЕ_11.05.2013, если не понравится буду пробовать ваши варианты.

Владислав Г.
03.11.2016, 14:32
Здравствуйте!

Подскажите можно ли сделать так, чтобы ПИД-регулятор с автонастройкой PID_2POS_IM_ANR сохранял свои коэффициенты в памяти ПЛК?

Попробовал объявить PID_2POS_IM_ANR в RETAIN, программа настроилась, но после перезагрузки ПЛК на выходе повис 0.

MikeF
03.11.2016, 17:12
Сохранять вручную не пробовали? После автонастройки сохранить, при старте запихнуть внутрь блочка.

Владислав Г.
04.11.2016, 09:28
Сохранять вручную не пробовали? После автонастройки сохранить, при старте запихнуть внутрь блочка.

Можно поподробней о подобном сохранении? Какие именно переменные? В объявлении переменных есть какие-то save_K0,save_KdKi,save_Kcool,save_Ki:REAL, они ли это?

MikeF
04.11.2016, 14:40
Вроде бы они, там видно что после автонастройки они принимают какие-то осмысленные значения. Правда непонятен весь смысл затеи, если коэфф. известны, то почему бы не использовать обычный регулятор. Если нужна автонастройка, то зачем ему мешать работать, пусть каждый раз настраивается да крутится с новыми коэф...

Владислав Г.
04.11.2016, 14:50
Вроде бы они, там видно что после автонастройки они принимают какие-то осмысленные значения. Правда непонятен весь смысл затеи, если коэфф. известны, то почему бы не использовать обычный регулятор. Если нужна автонастройка, то зачем ему мешать работать, пусть каждый раз настраивается да крутится с новыми коэф...

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

MikeF
04.11.2016, 15:02
Вот я и вижу что цель непонятна...

Александр_Остриков
05.11.2016, 01:17
Здравствуйте! Накидал простенький ПИД регулятор с пояснениями, может кому пригодится. Буду рад конструктивной критике, как и что улучшить. Это очень упрощенная модель, для простоты.
https://youtu.be/Mc9U7mzL1AM

07bc8d16ad
23.06.2017, 18:39
Прошу помощи , у кого есть библиотека PID_REG_CE (23_12_10).lib разработчик проекта использовал эту библиотеку при входе запрашивает ? весь инет перерыл нету

07bc8d16ad
23.06.2017, 18:49
у кого есть PID_REG_CE (23_12_10).lib скиньте на почту eva20211@mtu-net.ru

smk1635
23.06.2017, 19:02
у кого есть PID_REG_CE (23_12_10).lib скиньте на почту eva20211@mtu-net.ru

Отправил. (10 знаков).

Задолбало это ограничение на 10 знаков

07bc8d16ad
23.06.2017, 19:16
низкий поклон ,огромное человеческое спасибо

Dimooon
08.08.2017, 06:00
Здравствуйте, хочу использовать ПИд регулятор для нагревателей в безумно инертной системе, накачал целое ведро библиотек всевозможных, подскажите пожалуйста - какую бибку лучше использовать, т.к. запутался в них наглухо. Мне бы с автонастройкой подошло, т.к. вручную высчитывать не научили. До этого использовал разок пид регулятор из Util.lib, но там автонастройки нет, научным тыком коэффициенты подбирал. Хочется другое что-то попробовать, столько решений существует - глаза разбегаются. Помогите подобрать оптимальное решение пжс. А то у нас или долго греть надо, или, если быстро нагревать, по инерции уставку пролетаем.
Для начала хочу спросить - что использовать? У меня есть PID_Regulator.lib и Pid_Reg2.lib. Начал обе расковыривать, но еще не определился - какую выбрать. Интересует работа в ШИМ режиме, но я еще ничего не докупал, имею возможность взять модуль аналогового вывода 4-20, если это более рациональное решение

Пьер
08.08.2017, 07:45
Здравствуйте, хочу использовать ПИд регулятор для нагревателей в безумно инертной системе, накачал целое ведро библиотек всевозможных, подскажите пожалуйста - какую бибку лучше использовать, т.к. запутался в них наглухо. Мне бы с автонастройкой подошло, т.к. вручную высчитывать не научили. До этого использовал разок пид регулятор из Util.lib, но там автонастройки нет, научным тыком коэффициенты подбирал. Хочется другое что-то попробовать, столько решений существует - глаза разбегаются. Помогите подобрать оптимальное решение пжс. А то у нас или долго греть надо, или, если быстро нагревать, по инерции уставку пролетаем.
Для начала хочу спросить - что использовать? У меня есть PID_Regulator.lib и Pid_Reg2.lib. Начал обе расковыривать, но еще не определился - какую выбрать. Интересует работа в ШИМ режиме, но я еще ничего не докупал, имею возможность взять модуль аналогового вывода 4-20, если это более рациональное решение

У меня тоже была супер инертная система, автонастройка уходила в забытье. Воспользовался PID_FUNCTION (овеновской библиотекой). Поподбирал коэффициенты пару недель и все отлично работает. держит в полосе +- 0.5 градуса. меня устраивает.

krollcbas
08.08.2017, 07:47
Это видео в конце статьи вам поможет. Чем инертнее контур. тем инертнее должны быть подобраны коэффициенты

http://lapshinvr.ru/nastrojka-pid.html

Юрий27
08.08.2017, 15:54
лично я работаю с нагревателями\охладителями, и мне нужно, чтобы в пидрегуляторе был нагреватель, охладитель, сигнал выхода на уставку регулирования, а еще управляющий вход включающий фб, и вход выключающий фб, (лучше чтоб включался и отключался импульсом-"кнопка"). Чтобы на уставку быстро выходил, и тока когда осталось 10-15% замедлялся, плавно подходя к уставке.

mf_
09.08.2017, 22:17
Добрый день. Собрал пид регулятор на стандартной библиотеке Util.lib.
Протестировал на шаровом кране с эл. приводом без обратной связи для поддержания давления в трубопроводе. Работает, но кажется случайным образом быстро подобрал коэффициенты. Приехали на объект, здесь пид должен был регулировать расход все тем же шаровым без обратной. Три дня угрохал на подбор коэффициентов, после чего задумался... неужели нет никаких расчетных методов??? Каким образом подбираются коэффициенты в модулях автонастройки? Замутил фб с расчетом значений а и L для метода CHR отсюда http://www.bookasutp.ru/Chapter5_5.aspx#ParametersChoose Здесь коэффициенты пид регулятора рассчитываются из переменных полученных из времени задержки реакции и угла перелома графика... И вот тут я не понял, каким образом мне запустить сей процесс? Предположу, что нужно открыть кран на определенную величину и обрабатывать график изменения расхода по времени. Ладно, другой вопрос: кто-то пробовал таким образом рассчитывать коэффициенты? Работает ли это?
В процессе подбора выяснилось, что одни и те же коэффициенты не подходят для уставок с разным знаком, т.е. если нам нужно снизить расход, обязательно без перерегулирования, то подобранные коэффициенты при повышении уставки расхода приводят к значительному перерегулированию, и наоборот (коэфф-ты подобранные для повышения расхода без перерегулирования приводят к провалу при понижении расхода). Как быть? Программно задавать разные коэфф-ты для одного регулятора или лучше использовать разные регуляторы?
Да, еще вопросик.. несколько раз замечал, что при снижении уставки расхода, реальный расход, регулируемый пид-регулятором, сначала идет резко вверх, а затем, после некоторого горизонтального дрейфа, плавно снижается к уставке. Из-за чего это происходит понять не успел. Предполагаю, что из-за интегратора. Может он переполнятся (целочисленно) и выдает отрицательное значение вместо положительного... В пид есть флаг переполнения, я его никак не обрабатываю программно. Может быть в этом дело? Что посоветуете? Извините за сумбурность... накопилось...

MikeF
10.08.2017, 05:27
Предполагаю, что из-за интегратора.
Скорее всего, обычно это самое проблемное место в регуляторах, не всегда грамотно прописано и отлажено.

Sulfur
10.08.2017, 13:00
. В пид есть флаг переполнения, я его никак не обрабатываю программно.

Программировать я не умею, поэтому сделал так:
32561

Скорее всего это не правильно, но у меня этот регулятор работает уже несколько лет на нагреватель с довольно небольшой тепловой инерцией (керамический ИК-излучатель).

mf_
10.08.2017, 21:42
Программировать я не умею, поэтому сделал так:
Спасибо, потестирую.
Несколько замечаний к своему же посту.

Замутил фб с расчетом значений а и L для метода CHR отсюда http://www.bookasutp.ru/Chapter5_5.aspx#ParametersChoose Здесь коэффициенты пид регулятора рассчитываются из переменных полученных из времени задержки реакции и угла перелома графика... И вот тут я не понял, каким образом мне запустить сей процесс? Предположу, что нужно открыть кран на определенную величину и обрабатывать график изменения расхода по времени.
Если с регулятором уровня такой финт прокатил, то с расходом так не получится, потому что график в этом случае уходит резко вверх без всякой задержки... во всяком случае, она очень мала. Как быть?
Также, с нетерпением жду совета по поводу разных коэффициентов для ниспадающего и возрастающего графиков.

mf_
14.08.2017, 21:23
Завтра проверю работу ПИД с разными коэффициентами вверх и вниз.
Правильно ли я понимаю, что при смене уставки можно смело обнулять интегральный компонент?
По поводу остальных сомнений нет - можно обновлять, т.к. они не несут в себе исторических данных.

mf_
17.08.2017, 10:56
Разные коэффициенты сносно работают для регулировки расхода с помощью трехпозиционного шарового крана (управление по шим).

Однако, не могу разобраться с ПИД регулятором для частотника поддерживающего уровень. Уровень поддерживается постоянным (+-1%) даже при сильных колебаниях расхода, но при постоянном расходе (стабильный уровень поддерживается) но частота постоянно гуляет в диапазоне +-10 Гц. И угомонить ее у меня не получается. Код ниже, могу предположить, что как-то не так работаю с аналоговым регулированием (4..20мА).


FUNCTION_BLOCK pid_pchv
VAR_INPUT
actual:REAL;
set_point:REAL;
kp: REAL;
tn: REAL;
tv: REAL;
z:REAL;
y_max:REAL;
period:WORD;
reset:BOOL;
END_VAR
VAR_OUTPUT
out_real:REAL;
END_VAR
VAR
PID:PID;
y_min:REAL;
e:REAL;
y_real: REAL;
y_int: INT;
tm1:TON;
END_VAR

tm1(IN:=TRUE, PT := WORD_TO_TIME(period*1000+10));
y_min:=-1*y_max;
IF tm1.Q THEN (*опрашиваем датчик раз в 10 сек*)
actual := (actual- 4)/0.16; (*переводим ток в уровень от 0 до 100*)
e := actual - set_point;
IF ABS(e) > z THEN
pid(
ACTUAL := e,
SET_POINT := 0,
KP := kp,
TN := tn,
TV := tv,
Y_MIN := y_min/100, (*мА*)
Y_MAX := y_max/100); (*мА*)

END_IF
tm1(IN:=FALSE);
END_IF

out_real := -y_real; (*возвращает разницу которую нужно добавить к текущему значению токового выхода*)
y_real:=0;

mf_
17.08.2017, 11:11
32667
Фото как это выглядит.

MikeF
17.08.2017, 12:28
но частота постоянно гуляет в диапазоне +-10 Гц. И угомонить ее у меня не получается. Код ниже,
Пчшка - довольно шустрый объект, и опрашивать датчик раз в 10 сек тут нельзя - это не воздух в комнате регулировать :)
Вообщем надо инициировать расчет вашей уставки actual заметно чаще чем раз в 10 сек.

mf_
17.08.2017, 12:48
Пчшка - довольно шустрый объект, и опрашивать датчик раз в 10 сек тут нельзя - это не воздух в комнате регулировать :)
Вообщем надо инициировать расчет вашей уставки actual заметно чаще чем раз в 10 сек.
Пробовал раз в 1 сек, ситуация не меняется. Мне кажется тут дело не в шустроте объекта, а в том, что за 1 сек уровень не сильно изменится, т.е. график роста или падения уровня достаточно пологий.

MikeF
17.08.2017, 12:53
Значит сам датчик опрашивается медленно модулем аналогового ввода. Скачки то с каким периодом идут?

mf_
17.08.2017, 12:56
Значит сам датчик опрашивается медленно модулем аналогового ввода. Скачки то с каким периодом идут?
Период колебаний около 4-х минут. Извините, не понял как датчик может опрашиваться медленнее, чем я его опрашиваю (с частотой периода)?
Т.е. я с заданной частотой 1..10 сек опрашиваю датчик, запихиваю результат в модуль пид, получаю результат - выдаю воздействие.

MikeF
17.08.2017, 13:15
Если 4 мин тогда это конечно не то, а скорее всего неправильные настройки регулятора, может надо ув. П и ускорить И составляющую. Также возможно ПИД-регулятор написан в целочисленке и соответственно возникают погрешности при округлении, отсюда и ступеньки.

mf_
17.08.2017, 13:25
PID из стандартной библиотеки Util.lib. С коэффициентами как только я не плясал, влияет только на период колебаний. Единственное что не пробовал - скормить регулятору коэффициенты меньше единицы.
Был обрадован стабильной работой регулятора для поддержания расхода (который меняется моментально), и думал, что уж с уровнем, который медленный, я справлюсь и подавно.. Ан нет.

Сергей0308
17.08.2017, 13:34
Можно попробовать ПИД-регулятор встроенный в ПЧ, если не хуже получится, лишние "железки" - выкинуть!

mf_
17.08.2017, 13:54
Если получится лучше - суть проблемы в реализации пид-регулятора, значит будем искать другую или писать свою. Правда, насчет второго сомневаюсь. Тут этот велосипед каждый пишет с начала жизни форума... неужели никто еще не написал стоящего?
А лишних железок нет - контроллер выполняет много других задач, а эта - прицепом.

MikeF
17.08.2017, 16:40
А лишних железок нет - контроллер выполняет много других задач, а эта - прицепом.
Так вам и говорят возложить эту функцию на ПЧ, обычно работает лучше.

mf_
17.08.2017, 17:18
Это я, конечно же, понял. Мое высказывание относилось к предложению выкинуть лишние железки :)

RV9WFJ
18.08.2017, 21:02
Можно еще попробовать учесть что уровень это расход, а расход связан с частотой в кубе.

mf_
20.08.2017, 21:30
К сожалению, я не математик и мне сложно сходу ловить о какой частоте идет речь и как данное обстоятельство нужно учесть практически.
RV9WFJ, был бы рад, если бы вы пояснили.

RV9WFJ
21.08.2017, 09:44
А тут и не про математику, а про физику.

В простом варианте если вы подаете на вход ПИДа расход, и получаете от него нужную частоту то получается у вас F2/F1 = Q2/Q1 что не соответствует действительности. Из за этого насос сначала долго набирает частоту за счет интегральной составляющей, а потом пролетает мимо уставки, все за счет переполнения интегральной составляющей.

На самом деле все примерно соответствует формуле (F2/F1)^3=(P2/P1)^2=F2/F1
Исходя из этого можно попробовать выход ПИДа 0..100 возвести в корень. Для простоты, для начала в квадратный, и уже значение 0..10 подать на ПЧ.
P.S. Это пока теория, на практике еще не проверял.

Второй вариант сделать так как у Danfoss и дугих производителей ПЧ - быстрый выход на уставку Fmin и уже там начинать регулировать через ПИД в диапазоне 25..50 Гц.

Почитать можно тут (стр. 24)

Eugene.A
21.08.2017, 11:29
Одно замечание по поводу шарового крана. Регулировочная характеристика шарового крана резко нелинейна, возможно, этим объясняются ваши проблемы:


В процессе подбора выяснилось, что одни и те же коэффициенты не подходят для уставок с разным знаком, т.е. если нам нужно снизить расход, обязательно без перерегулирования, то подобранные коэффициенты при повышении уставки расхода приводят к значительному перерегулированию, и наоборот (коэфф-ты подобранные для повышения расхода без перерегулирования приводят к провалу при понижении расхода). Как быть? Программно задавать разные коэфф-ты для одного регулятора или лучше использовать разные регуляторы?
Да, еще вопросик.. несколько раз замечал, что при снижении уставки расхода, реальный расход, регулируемый пид-регулятором, сначала идет резко вверх, а затем, после некоторого горизонтального дрейфа, плавно снижается к уставке. Из-за чего это происходит понять не успел. Предполагаю, что из-за интегратора. Может он переполнятся (целочисленно) и выдает отрицательное значение вместо положительного... В пид есть флаг переполнения, я его никак не обрабатываю программно. Может быть в этом дело? Что посоветуете?
http://www.belimo.ru/catalog/zaporno-reguliruyushchaya-armatura-s-elektroprivodami/reguliruyushchie-sharovye-krany-/

mf_
22.08.2017, 10:58
Исходя из этого можно попробовать выход ПИДа 0..100 возвести в корень. Для простоты, для начала в квадратный, и уже значение 0..10 подать на ПЧ.
P.S. Это пока теория, на практике еще не проверял.

Не будет ли это тоже самое, что и подбор переменных Y_MAX & Y_MIN?



Второй вариант сделать так как у Danfoss и дугих производителей ПЧ - быстрый выход на уставку Fmin и уже там начинать регулировать через ПИД в диапазоне 25..50 Гц.

Почитать можно тут (стр. 24)
Тоже думал над этим. За интересное чтиво спасибо!


Одно замечание по поводу шарового крана. Регулировочная характеристика шарового крана резко нелинейна, возможно, этим объясняются ваши проблемы:
Шаровый кран у меня не работает в крайних положениях, его рабочее положение примерно посередине +-20%. И большее влияние, мне кажется, оказывает тот факт, что при уменьшении расхода давление растет, а при увеличении падает. Разные коэффициенты внедрены в эксплуатацию, все работает гуд! Спасибо!


А можно вообще пояснить - как образуется расход для actual ? (наверно где-то в тексте - сразу на нашел)
кто генерит 4-20 ? (собсно какая скорость цапы ?)
и раз уж 4-20, а на частотнике как лимитирована скорость изменения частоты (бывают там такие параметры типа dГц/сек) ?
Добрый день, Валенок! Если это вопросы ко мне, то:
я регулирую уровень с помощью ПЧВ по датчику уровня ПДУ.И, который выдает мне 4..20;
перед емкостью стоит расходомер взлет, по которому я регулирую расход (задается на панели оператора) шаровым краном и тут проблем нет;
лимитировать скорость можно и рампом, но зачем?

RV9WFJ
22.08.2017, 12:45
Не будет ли это тоже самое, что и подбор переменных Y_MAX & Y_MIN?Нет, это совсем о другом. В корень возвести я предлагаю для получения большей линейности управляющего воздействия относительно регулируемой величины, а Y_MAX & Y_MIN лишь ограничивают границы этого воздействия.

ASo
23.08.2017, 08:43
Выкиньте дурацкий таймер для вызова пида.
Вызывать пид нужно только в момент получения очередного (следующего) оцифрованного значения обратной связи (ну и при изменениях настроек самого пида ессно). Никаким боком к таймеру.Не совсем так.
Допустим, измерение величины раз в ~5..10c, это нормально для модулей 8А с входами с терморезистрами полностью. А зачем тормозить работу интегральной составляющей?

mf_
23.08.2017, 09:09
Валенок, проблема в поддержании уровня с помощью частотника. Уровень постоянно плавает при любых настройках коэффициентов, только период и амплитуда меняется.

Причем тут рамп ? Собственный (бортовой) рамп и на пчв есть. Но если выходной сигнал пида сильно шустрее фактической реакции привода - явный косяк.
Если генерите для управления физический сигнал 4-20 - как часто производится изменение самим цап'ом (тоже фактор).

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

ASo
23.08.2017, 09:38
А с чем у Вас работает интегральная составляющая - с выдуманными данными ? И все это время (5-10с) видя константу непонятно что и зачем делает ?Понятно что - подкручивает выходной сигнал пропорционально разности уставки и ОС, обратно пропорционально Ки. Как и положено интегратору. Это же звено 2-го порядка, т.е. зависит от времени.

ASo
23.08.2017, 10:53
Дык и я на пальцах!
Если разность уставки и ОС неизменна, то выход интегрального звена линейно непрерывно изменяется по времени.

mf_
23.08.2017, 11:08
Ище скажите - непрерывно )))
Здесь имеется ввиду с частотой работы контроллера.
Все остальное делается по одному и тому же таймеру, время которого я могу изменять настройками. Сработал таймер - посмотрели значение уровня - вызвали пид - получили величину воздействия - прибавили величину воздействия к текущему сигналу. И это работает с расходом и шаровым краном управляемым ШИМ прекрасно, но почему-то не работает с уровнем и частотником.
Если Вы предполагаете, что пид я дергаю регулярно, а воздействие прилагаю к частотнику с каким-то другим интервалом (по смс раз в пару секунд) - это не так. В этом ошибка?

mf_
23.08.2017, 12:36
Если б по интрефейсу на ПЧВ слали..
Спалил я его :(

mf_
23.08.2017, 12:47
Да +десять символов.

mf_
23.08.2017, 13:16
Боюсь даже спросить.
А на одной трубе ?
Кран на подаче, частотник на насос забирающий воду из емкости.
На всякий случай уточню: давление перед шаровым краном может меняться, давление (сопротивление) после насоса, также, может меняться. Т.е., линейно связать это все не получится.

mf_
23.08.2017, 20:39
А шаркран прям на изливе ?
Абсолютно. После него метра 3 трубы идущей до дна емкости.

mf_
24.08.2017, 18:31
Мдя-я-я, задачка.
Тут где-то графики были. А не хотите смастерить несколько графиков по одной временной шкале -уровень/расход/оба пида прям в КДС ? Минут так за 6-12. У Вас же там вроде 4 минуты цикл болтанки.
Хочу, но объект далеко. Графики я пока на панель оператора выводил, разные, но в одном временном интервале. При существующих настройках при изменении расхода (вручную) от 2 до 5 кубов в час и обратно с периодом минут в 20, уровень остается стабильным отклоняясь не более 2%. Меня это вполне устраивает. Не устраивает болтанка при стабильном расходе. Сейчас у меня коллега на объекте. Скинул ему программу в которой попробовал сгладить эту пилу рампом... прямо сейчас ждем результата. Отпишусь.

mf_
24.08.2017, 19:59
А что рамп ? Он ведь может и ухудшить ситуацию
Да, походу. Только период с амплитудой увеличился.

stskr
30.11.2017, 15:33
Добрый день, коллеги!

Есть система: генератор - инвертор - аккумуляторные батареи.
Избыточная мощность от генератора после питания полезной нагрузки идет на заряд батарей,
при недостаточной мощности генератора, мощность для питания нагрузки берется от батарей.

Мне нужно задавать уставку мощности на генератор, у генератора есть своя система управления,
в основе которой ПИ-регулятор, на работу которого я не могу влиять.

Уставка мощности на двигатель задается, исходя из напряжения на батарее.
Сделал программу, за основу взял ПИД из библиотеки OSCAT (можно брать из родной библиотеки util.lib) - разницы особо нет.
Проблема в том, что двигатель отрабатывает эту уставку с задержкой до 5-10 минут.

Получается так:
- напряжение снизилось до минимума, уставка мощности выросла до максимума, мощность минимальна;
- выходная мощность растет, следовательно, растет напряжение на батарее, уставка мощности снижается;
- выходная мощность вырастает до максимума, напряжение максимально, уставка мощности минимальна;
- выходная мощность снижается, напряжение снижается, уставка мощности растет.

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

Подскажите, пожалуйста, что нужно сделать, чтобы избавиться от автоколебаний?
Кто-то использовал блоки автонастройки ПИД из OSCAT? Просьба поделиться в этом случае каким-то рабочим примером.
Есть ли у кого-нибудь опыт моделирования подобных систем (например, в Matlab)? Просьба дать ссылки на математические модели.
Что лучше прочитать, чтобы разработать самому такую модель?

krollcbas
30.11.2017, 15:54
1. Обзаводитесь терпением. Уберите всех тех людей, кто вас торопит и кричит что все пропало.
2. Настройте тренды. Вам нужна уставка (setpoint), переменная процесса (PV) и выход регулятора
3. Выведете коэффициенты в тэги, чтоб было удобно их подбирать

Далее почитав мою или другие статьи, таких много - настраиваете и анализируете, лучше стало или хуже.
Видео в конце посмотрите - поясняет хорошо
http://lapshinvr.ru/nastrojka-pid.html

stskr
01.12.2017, 15:33
Здравствуйте, Виктор!

Спасибо, что ответили - не ожидал. У меня ваша статья открыта в браузере.

В русской версии статьи много опечаток и листинг отличается от английской:
http://lapshinvr.ru/avtotyuning.html

Какой листинг брать?

А где взять описание блоков State_mem, STBL (русский листинг)?

stskr
01.12.2017, 15:33
А у этого дедушки есть еще видео про настройку ПИД? Не нашел других видео на его канале.

stskr
01.12.2017, 16:33
Можете еще дать блок, который имитирует процесс?
Хотелось бы вначале проверить на тестовой программе, прежде чем запускать на рабочей установке.

krollcbas
01.12.2017, 17:21
Ответил личным сообщением.

Эдуард_Н
04.12.2017, 13:19
Уважаемый ASo Ваш фб PIDP просто замечательный, на объектах очень хорошо себя показал (регулировали ГВС и отопление). Только не стал я пользоваться переменной "Hand: BOOL;" которую вытащил наружу, если ей воспользоваться то фб как замирает и перестаёт реагировать.

rwg
04.12.2017, 13:47
Уважаемые коллеги, советую поменять заголовок темы. Случайно открыл эту страницу и оказалось, что обсуждается не примитивный аналог трёхпозиционного ТРМ202, а импульсный ПИД-регулятор (типа ТРМ212),

василий17061980
10.12.2017, 17:12
Блок не работает

alex55
10.12.2017, 17:17
В эмуляторе не работает..

stskr
18.12.2017, 18:17
Кто-нибудь использовал регулятор CTRL_PID из OSCAT?

Сравнил его работу с работой блока PID из Util.lib - работают похоже, но есть небольшая разница.

1) Если я задаю LL, LH и OFS, то значение выхода PID задается в диапазоне LL - LH и к этой величине прибавляется смещение OFS,
что дает завышенное значение на величину OFS. Поэтому приходится задавать OFS = 0, чтобы работало корректно.
Похоже, что это ошибка в реализации блока, т. к. со стандартным PID такой проблемы нет?

2) Подсчет интегральной составляющей идет здесь:

(* run integrator *)
i := (IN + in_last) * 5.0E-7 * KI * tc + i;
in_last := IN;

Для меня загадка, что это за коэффициент - 5.0E-7 и почему он именно такой?
Если исходить из той логики, что там микросекунды, то должно быть тогда 1.0E-6?!


В блоке PID интегральная составляющая считается так:

IF 1E38 - IN*TM < OUT OR -1E38 - IN*TM > OUT THEN
OVERFLOW:=TRUE;
ELSE
OUT:=OUT+IN*TM/1000;
END_IF;

Здесь все логично: время в миллисекундах делим на 1000, получаем секунды.

Опять ошибка в OSCAT?

А частота вызова задачи влияет на работу блока ПИД?

dkadun
28.01.2018, 12:13
Вы исходный код просмотрите, он открытый.
Грубо, произведен перевод обычного ПИД (ПИ) регулятора в дифференциальную форму dt (с) = (dY(%)/100%) * Stroke (с)
Поэтому указанные П и И коэффициенты "классического" ПИДа пересчитываются. Так удобнее.

Уважаемый ASo, благодарю вас за отличную биб-ку. Пробовал её на нескольких объектах, работает исключительно. Я в восторге! Можно ли реализовать эту биб-ку на языке С? Прошу Вас помочь мне в этом вопросе.

ASo
28.01.2018, 13:20
Я владею С. Но нужно знать особенности конкретной системы - как реализуются задержки и пр. исчесление времени.
Я не думаю, что для Вас будет сложно перевести грубо с Паскаля на С. Код библиотеки открытый, как util.lib, которую она использует.

dkadun
28.01.2018, 16:20
Я владею С. Но нужно знать особенности конкретной системы - как реализуются задержки и пр. исчесление времени.
Я не думаю, что для Вас будет сложно перевести грубо с Паскаля на С. Код библиотеки открытый, как util.lib, которую она использует.

ASo, хотелось бы попробовать перенести вашу биб-ку на Atmega 328, сам я это не сделаю(не владею языком С). :( К стати, Ваша биб-ка использует ФБ Standart.lib, и она не открытая.

ASo
28.01.2018, 16:49
Она открытая. Откройте ее в CDS2.

art1980
14.03.2018, 18:51
1. Добавил минимальное время импульса: Time_PWM_Min измеряется в тиках (циклы программы);
2. Теперь можно задавать время реверса: T_REVERS (в сек.);
3. При переходе рассогласования регулятора через "0" регулятор сбрасывается;
4. При переводе в ручной режим регулятор сбрасывается и накопление ошибки не происходит;
5. Также теперь имеется возможность сбрасывать регулятор из вне.

Просьба к автору продублировать вложение. Или может у кого есть данная библиотека.

petera
14.03.2018, 19:23
Просьба к автору продублировать вложение. Или может у кого есть данная библиотека.

Случайно завалялась.

art1980
14.03.2018, 20:08
Случайно завалялась.

Спасибо большое!

Egerenok
30.03.2018, 23:00
ПИД рег. с вых. 4..20 мА с шим - такое возможно?
Поясню: стоит регулятор (китай) с выходом 4...20мА. В нём из коэф. Kp, Tn и коэф.задания мощности в %.
Управляет СИФУ а уже СИФУ 2хполупериодным тиристорным мостом... на выходе интересует температура(порядка 2300 град по Цельсию)
Есть или библиотечный или .exp ПИД рег. для CDS 2?
Если есть такая беда, то скиньте или ссылку где порыться можно.
Занимался насосами и клапанами, короче вода,пар и конденсат.
А задача нагрев в металлургии.

MikeF
31.03.2018, 05:50
ПИД рег. с вых. 4..20 мА с шим - такое возможно?

непонятно как это 4-20 и шим выходы одновременно? Или ШИМ вместо 4-20?

Осинский Алексей
01.04.2018, 12:57
ПИД рег. с вых. 4..20 мА с шим - такое возможно?
Поясню: стоит регулятор (китай) с выходом 4...20мА. В нём из коэф. Kp, Tn и коэф.задания мощности в %.
Управляет СИФУ а уже СИФУ 2хполупериодным тиристорным мостом... на выходе интересует температура(порядка 2300 град по Цельсию)
Есть или библиотечный или .exp ПИД рег. для CDS 2?
Если есть такая беда, то скиньте или ссылку где порыться можно.
Занимался насосами и клапанами, короче вода,пар и конденсат.
А задача нагрев в металлургии.


Для работы с ПИД-регуляторами в Codesys 2.3 разработаны библиотеки PID_Reg2.lib и PID_Regulators.lib.

По ссылке (http://www.owen.ru/uploads/txtlic.php?url=http:/kipshop.ru/CoDeSys/bibl/Lib_OWEN_PLC1xx_v8.12.zip) Вы можете скачать архив библиотек ОВЕН с описанием, в котором находятся PID_Reg2.lib и PID_Regulators.lib.

Выбор конкретной библиотеки зависит от ПЛК, для которого Вы разрабатываете программу:
Библиотека PID_Reg2.lib поддержана только в ПЛК63/73.
Библиотека PID_Regulators.lib поддержана только в ПЛК1хх (в т.ч. ПЛК110 [M02]).

Выход библиотечного ПИД-регулятора свяжите с аналоговым выходом ПЛК типа 4-20 мА.

Egerenok
01.04.2018, 14:10
Да. С этими lib я знаком и пользуюсь ими с удовольствием. Меня смущали настройки в китайском регуляторе:
выход 4..20 мА и и коэф. мощности. В ШИМ рег. не силён. Теорию немного-в курсе. И по логике вещей
4-20 и ШИМ не совместимы. Есть Русское: а вдруг чего-то не знаю.
У меня планируется ПЛК160.
Благодарю за оперативный ответ.

Dimooon
08.05.2018, 05:28
Никак не получается запустить двухпозиционный регулятор из бибки PID_Regulators.lib. Чета не так делаю, не пойму... Автонастройка не включается. ПОдскажите пожалуйста, на видео видно, что температура значительно проскочила уставку
https://www.youtube.com/watch?v=FedcXqL5_RU

RV9WFJ
09.05.2018, 06:47
Можете мой код использовать, так сможете увидеть что внутри и цеплять кучу лишнего не надо с библиотекой.


FUNCTION_BLOCK fbOnOffHistReg
VAR_INPUT
PV: REAL; (*Значение регулируемой величины*)
SP: REAL; (*Уставка регулятора*)
HYST: REAL; (*Гистерезис переключения выхода в единицах регулируемой величины*)
ERR: BOOL; (*Ошибка датчика*)
END_VAR
VAR_OUTPUT
HEATER: BOOL; (*Сигнал управления для включения реле исполнительного механизма типа нагреватель*)
COOLER:BOOL; (*Сигнал управления для включения реле исполнительного механизма типа холодильник*)
END_VAR

IF ERR THEN
HEATER:= FALSE;
COOLER:= FALSE;
ELSE
IF PV <= SP - HYST THEN
HEATER:= TRUE;
COOLER:= FALSE;
ELSIF PV >= SP + HYST THEN
HEATER:= FALSE;
COOLER:= TRUE;
END_IF
END_IF

Эдуард_Н
09.05.2018, 10:34
Можете мой код использовать, так сможете увидеть что внутри и цеплять кучу лишнего не надо с библиотекой.


FUNCTION_BLOCK fbOnOffHistReg
VAR_INPUT
PV: REAL; (*Значение регулируемой величины*)
SP: REAL; (*Уставка регулятора*)
HYST: REAL; (*Гистерезис переключения выхода в единицах регулируемой величины*)
ERR: BOOL; (*Ошибка датчика*)
END_VAR
VAR_OUTPUT
HEATER: BOOL; (*Сигнал управления для включения реле исполнительного механизма типа нагреватель*)
COOLER:BOOL; (*Сигнал управления для включения реле исполнительного механизма типа холодильник*)
END_VAR

IF ERR THEN
HEATER:= FALSE;
COOLER:= FALSE;
ELSE
IF PV <= SP - HYST THEN
HEATER:= TRUE;
COOLER:= FALSE;
ELSIF PV >= SP + HYST THEN
HEATER:= FALSE;
COOLER:= TRUE;
END_IF
END_IF


И для чего этот ФБ, как использовать?

IVM
09.05.2018, 13:11
Это двухпозиционный регулятор.

Эдуард_Н
09.05.2018, 14:07
Это двухпозиционный регулятор.

Открыто-закрыто?

Dimooon
10.05.2018, 05:38
Спасибо, работает. Единственное - есть хотелка иметь два гистерезиса - на вкл и на откл. Ща, в тестовом режиме, тен нагревается до 100 градусов за пару секунд, остывает намного медленнее. Если уставка 50 градусов,а гист =5, то вкл в 45, откл в 55. А если откл в 55 - то накатом долетает до 100

Dimooon
10.05.2018, 10:15
ДТПL014-00.20/2. Я его прям к тэну примотал. ПОнятно, что когда будет нагревать 500 литров воды в рубашке, то поинертней будет нагреваться. Но управлять хотелось бы при любом раскладе

Dimooon
10.05.2018, 11:24
Мощность тэнов будет 90 кВт. 500 литров в рубашке + в самом баке от 3 до 5 тонн.

Dimooon
10.05.2018, 12:41
Ну так то да... Тот ФБ, который мне выше скинули, вполне подходит. Простой и понятный, как калаш. И все-таки, допишите пжс в него две уставки гистерезиса, на вкл и откл.
Но, в принципе, я сам щас допишу. Первый мой опыт на ST

SBeaR
02.11.2018, 17:26
В свое время часто работал с ПЛК от Сименса серии S7-300, поэтому привык к их ПИД-регулятору (плюс для него очень хорошее описание в документации).
Так как ни один из ПИД-регуляторов, используемых в библиотеках ОВЕН меня до конца так и не устроил, то я решил перенести алгоритм сименсовского ПИДа в CoDeSys.
Если кому-то нужна реализация FB41 "CONT_C" для ПЛК ОВЕН, могу скинуть библиотеку. Единственное отличие от оригинальной: границы периферийного входа и выхода переделаны с расчетом использовать МВ110, то есть имеют пределы 0-1000 для выхода и 0-100.0 (Float) для входа.

DIPHENHYDRAMINE
02.11.2018, 20:52
Если кому-то нужна реализация

как раз в данный момент выбираю ПИД.... и тоже не устраивает рег. в биб-ках ОВЕН....
поделитесь...

alexx751
02.11.2018, 21:06
FB42 тоже хорошо работает на ОВЕНе

SBeaR
02.11.2018, 21:17
Выкладываю библиотеку с родным описанием на русском языке.

FB42 тоже хорошо работает на ОВЕНе
Данным регулятором пользоваться не доводилось, но в принципе реализовать можно попробовать.

RV9WFJ
03.11.2018, 07:49
Выкладываю библиотеку с родным описанием на русском языке.

Данным регулятором пользоваться не доводилось, но в принципе реализовать можно попробовать.
На библиотеке пароль

SBeaR
03.11.2018, 08:44
На библиотеке пароль
Забыл про него.
Это не моя интеллектуальная собственность, поэтому не вижу повода прятать.
Во вложении без пароля.

Lektor_Di
23.11.2018, 12:53
Добрый день. Скиньте пожалуйста на почту библиотеку PID_REG_CE (23_12_10).lib katkov_dv@bk.ru

SBeaR
30.11.2018, 09:59
FB42 тоже хорошо работает на ОВЕНе
Самому этим регулятором пользоваться не доводилось. Не было необходимости управлять трехпозиционными исполнителями.
Для интереса перенес код в CoDeSys. Пробуйте кому интересно.
Бонусом добавил два блока:
FB100 "PROC_C" - подпрограмма, предназначеная для изучения принципов ПИД-регулирования. При подаче на вход блока сигнала ПИД-регулятора выход моделирует поведение процесса 3-го порядка. Изменяя задержки можно условно моделировать изменение температуры или давления.
FB101 "PROC_S" - подпрограмма аналогичная предыдущей, но предназначенная для управления трехпозиционным ПИД-регулятором.

Пьер
30.11.2018, 12:21
Есть кто, кто пользовался?

Павел_Р
11.12.2018, 11:00
Я один понимаю, почему классический ПИД нельзя использовать с 3-х позиционными регуляторами???

Уважаемый ASo, не могли бы вы пояснить почему? Это как то связанно с накоплением интегральной составляющей?

ASo
11.12.2018, 18:54
Именно так.

gkpluh
20.12.2018, 21:37
Здраствуйте, настраиваю сервопривод теплых полов (всего пять контуров). Управление сервоприводами осуществляется при помощи биб-ки UTIL.
Подбираю коэффициенты первый раз и столкнулся с некоторыми трудностями, а именно:
1. Система установилась, держит температуру +, - 2 градуса, что очень удовлетворительно, но при снижении заданной температуры (уставки ПИД) выходной сигнал с ПИД резко скачит вверх, чем вызывает резкое перерегулирование, процентов до 40.
2. Так же заметил, что при перерегулировании, выходной сигнал постепенно падает, но при снижении температуры на 1 градус, происходит резкий скачек вверх выходного сигнала ПИД регулятора.

Я использую для входного значения температуры целочисленные значения (т.е. перед входом приобразовую в REAL

Коэффициенты подбирал следующие:

П - 0.8 - 1
И 5 - 80
Д 1 - 20

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

Еще проблема, что генератором тепла, является электро котел с 4 мя тенами разной мощности, которые тоже работают по ПИД регулятору, т.к. темрература в нем, скачет тоже градусов на 20 и вносит свои коррективы.

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

krollcbas
20.12.2018, 22:05
Отличный, кстати блок. У меня работает на ура по более чем 10 объектам.
Попробуйте дифференциальную составляющую поставить = 0

gkpluh
20.12.2018, 22:09
Хорошо, попробую.

gkpluh
21.12.2018, 16:32
Спасибо, большое, все получилось

Eugene.A
21.12.2018, 18:53
А объяснение этому у кого-нибудь есть?

ASo
21.12.2018, 18:58
Объяснения чего?

krollcbas
21.12.2018, 19:10
Долгое время запуская объекты вынужден был признаться самому себе, что ПИД контуры я не умею настраивать (тупо не хватало времени).
Разозлился, стал искать простой или даже лучше всего примитивный способ настройки.
Пообщавшись с одним немецким спецом из MTU все встало на свои места.
Составил статью:
http://lapshinvr.ru/articals/nastrojka-pid.html

Eugene.A
21.12.2018, 20:25
Объяснения чего?
Почему ПИД заносит, и работать начинает только с D=0

ASo
21.12.2018, 20:38
По формуле ПИДа.40490

Eugene.A
21.12.2018, 20:51
Формула объясняет этот эффект


1. Система установилась, держит температуру +, - 2 градуса, что очень удовлетворительно, но при снижении заданной температуры (уставки ПИД) выходной сигнал с ПИД резко скачит вверх, чем вызывает резкое перерегулирование, процентов до 40.

?

ASo
21.12.2018, 20:54
Ну так распишите реакцию ПИДа в любой форме - Вам все станет ясно.
Если не брать ТФКП, а обычную алгебру - задача для 7..8 класса школы.

Eugene.A
21.12.2018, 21:12
Ещё раз обращаю ваше внимание - на уменьшение уставки ПИД реагирует скачком вверх.
Это явно делает данный ПИД непригодным к употреблению.

ASo
21.12.2018, 21:22
Для начала, надо привести кусок программы - тогда можно разбираться.

vovksextra
11.01.2019, 20:17
Добрый вечер. А можно как-то получить исходник (PID_INVERTER.EXP)?. С данного ресурса скачать не получается - черный экран. Спасибо.

vovksextra
12.01.2019, 03:09
ВО вложении

Нажимаю на вложение. Снова черный экран... Не все вложения могу скачать.Причина не понятная. Можно выложить куд нить еще? Или на почту vovks собака укр нет. Спасибо.

smk1635
14.01.2019, 09:48
Нажимаю на вложение. Снова черный экран... Не все вложения могу скачать.Причина не понятная. Можно выложить куд нить еще? Или на почту vovks собака укр нет. Спасибо.

Десять символов.

vovksextra
14.01.2019, 19:55
Десять символов.

Что это значит? Это вложение скачал. Спасибо.

smk1635
15.01.2019, 18:21
Что это значит? Это вложение скачал. Спасибо.

Если попробовать отправить пустое сообщение, появится предупреждение: Ваше сообщение слишком короткое. Оно должно быть не менее 10 символов.

Ну вот и приходится набивать десять символов. :)

Юрий_М
10.03.2019, 11:26
Самому этим регулятором пользоваться не доводилось. Не было необходимости управлять трехпозиционными исполнителями.
Для интереса перенес код в CoDeSys. Пробуйте кому интересно.
Бонусом добавил два блока:
FB100 "PROC_C" - подпрограмма, предназначеная для изучения принципов ПИД-регулирования. При подаче на вход блока сигнала ПИД-регулятора выход моделирует поведение процесса 3-го порядка. Изменяя задержки можно условно моделировать изменение температуры или давления.
FB101 "PROC_S" - подпрограмма аналогичная предыдущей, но предназначенная для управления трехпозиционным ПИД-регулятором.

В симуляторе ПИД-регулятор CONT_S работает как надо,
но когда загрузил его в реальный ПЛК110-60,
на его выходах получаются какие-то бешенные импульсы и вообще с контроллером пропадает связь,
может его надо вызывать как-то по особенному или нужны дополнительные библиотеки?

alexx751
10.03.2019, 13:09
надо вызывать в отдельной задаче 100мс (как ОВ35 у сименса)

Юрий_М
10.03.2019, 13:23
Да, так импульсы стали работать как надо,
но почему-то связь с ПЛК стала пропадать,
когда библиотеку удаляю - связь сразу становится стабильной.

SBeaR
21.03.2019, 08:08
Использовал в нескольких проектах CONT_C и никаких проблем со связью не было, поэтому даже сказать ничего не могу по этому поводу.
Я использую вот такую конфигурацию задач в проекте.
41826
Так как у меня процесс не быстрый, то 20 мс на основной цикл вполне хватает. В основном цикле запускается PLC_PRG из которого уже при необходимости вызываются другие процедуры.
Подпрограмма OB35 запускается раз в 100 мс и в ней выполняются два процесса CONT_C, каждый для своего исполнительного устройства.
Проблем со связью нет ни с панелью управления (Modbus TCP), ни с CoDeSys.

Newcomer
21.03.2019, 09:57
CONT_C в STEP7 используется, как этот ФБ в CoDeSys можно применить ?

SBeaR
21.03.2019, 10:07
Поднимитесь выше на пару страниц, там я выкладывал библиотеку для CoDeSys с реализацией FB41 и FB42.
http://www.owen.ru/forum/showthread.php?t=11443&p=294073&viewfull=1#post294073

АндрейК
17.04.2019, 12:06
На библиотеке пароль

пароль 071811

АндрейК
17.04.2019, 12:07
пароль 071811

freeon
26.09.2019, 11:00
Друзья, подскажите, задача следующая: имеем ПЛК110М02 и преобразователь частоты ОВЕН ПЧВ2. По интерфейсу RS485 ПЛК дает задание частоты на ПЧ. Частота вращения вентилятора должна зависеть от температуры воды в котле (стоит газовый клапан, изменяющий соотношение газа от изменения давления воздуха). Я использовал ПИД регулятор из библиотеки Util.lib, соответственно выход ПИД регулятора варьировался в пределах от 0 до 16384, что соответствует заданию частоты от 0 до 50 Гц. Но по факту ПИД регулятор работает таким образом, что пока значение температуры не достигнет значения уставки частотник продолжает набор частоты, а после достижения уставки, в силу большой инерционности системы, котел успевает уйти в безаварийный останов до того, как частота снизится. Возможно я что-то не понимаю и данный ПИД регулятор вообще не подходит для подобной задачи. Буду благодарен за советы.

capzap
26.09.2019, 11:11
Друзья, подскажите, задача следующая: имеем ПЛК110М02 и преобразователь частоты ОВЕН ПЧВ2. По интерфейсу RS485 ПЛК дает задание частоты на ПЧ. Частота вращения вентилятора должна зависеть от температуры воды в котле (стоит газовый клапан, изменяющий соотношение газа от изменения давления воздуха). Я использовал ПИД регулятор из библиотеки Util.lib, соответственно выход ПИД регулятора варьировался в пределах от 0 до 16384, что соответствует заданию частоты от 0 до 50 Гц. Но по факту ПИД регулятор работает таким образом, что пока значение температуры не достигнет значения уставки частотник продолжает набор частоты, а после достижения уставки, в силу большой инерционности системы, котел успевает уйти в безаварийный останов до того, как частота снизится. Возможно я что-то не понимаю и данный ПИД регулятор вообще не подходит для подобной задачи. Буду благодарен за советы.

коэффициенты вообще не изменяли? Не прозвучало это в посте

freeon
26.09.2019, 11:21
Изменяли в широком диапазоне. Сперва вообще исключили диф составляющую, попробовали поработать с ПИ регулятором, затем после введения дифференциального коэффициента система попросту ушла в разнос с большим перерегулированием. Потому и возник вопрос насколько вообще идея жизнеспособна. При работе с КЗР таких сложностей никогда не возникало, ПИД регулятор всегда отрабатывал исправно, начиная прикрывать задвижку задолго до достижения уставки, здесь же вообще никакого противодействия не наблюдается, только линейное нарастание выходного сигнала до тех пор пока значение температуры не сравняется со значением уставки.

capzap
26.09.2019, 11:28
есть график температуры, уставки и процента открытия? Или табличные данные

freeon
26.09.2019, 11:40
Температура уставки котлового контура 85 градусов. Не понял про процент открытия. Требуется изменять частоту вращения вентилятора горелки котла в пределах от 0 до 50 Гц, то есть исполнительный механизм это ПЧ.

capzap
26.09.2019, 11:49
Температура уставки котлового контура 85 градусов. Не понял про процент открытия. Требуется изменять частоту вращения вентилятора горелки котла в пределах от 0 до 50 Гц, то есть исполнительный механизм это ПЧ.

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

freeon
26.09.2019, 12:46
Значения на которых закончили эксперименты: Пропорциональная составляющая=2, интегральная=200, дифференциальная=1. Если примерно описать тех процесс, то все выглядит так: изначально температура 65 градусов, после начала управления процессом частотник начинает разгоняться, температура начинает расти, к тому моменту когда частота достигает 50 Гц температура находится на уровне 78 градусов, после этого частота застывает на месте до тех пор пока температура не достигнет уставки в 85 градусов, после чего начинает снижаться, но успевает снизиться примерно до 35 Гц, когда котел уже нагревается до температуры безаварийного отключения 95 градусов. Никак не получается добиться того, чтобы частотник начинал заблаговременно снижать частоту до достижения уставки. Как-то так.

capzap
26.09.2019, 13:16
а как его запускаете, каждый цикл, в отдельной задаче или просто при срабатывании таймера каждые 100мс? Так то код регулятора открыт, можете сами оценить, как по мне так не нравиться реализация, когда выход достигает максимума, тут можно испробовать много вариантов и коэффициент пропорциональности уменьшить с увеличением интеграла, верхнее ограничение поставить 35Гц(Y_MAX), чтоб не раскручивался сильно, заменить на оскатовскую реализацию регулятор

freeon
26.09.2019, 13:37
ПИД регулятор запускается одновременно с началом старта программы ПЛК, коэффициенты пробовали по разному менять, так как вы и советуете, верхнее ограничение выставить нет возможности, поскольку в данном случае котел не выйдет на максимальную мощность и в морозы просто напросто просядет температура, по видимому придется попробовать заменить регулятор, возможно и вправду оскатовская реализация окажется более работоспособной. Спасибо за совет.

capzap
26.09.2019, 13:45
ПИД регулятор запускается одновременно с началом старта программы ПЛК
не про это я спрашивал, попробуйте запустить регулятор внутри такой конструкции


IF timer_TON.Q THEN
pid();
END_IF;
timer_TON(IN:=NOT timer_TON.Q,PT:=T#100ms);

freeon
26.09.2019, 15:24
Спасибо, сейчас попробую

RV9WFJ
27.09.2019, 06:59
А не проще ПИД оставить вообще в частотнике, а значение температуры передавать ему по интерфейсу. У меня такая схема обычно лучше работает.

freeon
27.09.2019, 11:11
Такая схема безусловно лучше, но в некоторых случаях необходимо задавать определенные значения частоты на ПЧ, например при вентиляции котла, либо при розжиге, поэтому приходится использовать именно ПЛК

freeon
27.09.2019, 11:20
не про это я спрашивал, попробуйте запустить регулятор внутри такой конструкции


IF timer_TON.Q THEN
pid();
END_IF;
timer_TON(IN:=NOT timer_TON.Q,PT:=T#100ms);


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

capzap
27.09.2019, 11:21
Такая схема безусловно лучше, но в некоторых случаях необходимо задавать определенные значения частоты на ПЧ, например при вентиляции котла, либо при розжиге, поэтому приходится использовать именно ПЛК

удалось ли победить проблему? Здесь (https://owen.ru/forum/showthread.php?t=28284&p=314686&viewfull=1#post314686)могу предложить способ регулирования без настроек, на скрине два регулятора с имитацией разной степени инерции вполне справляются

freeon
27.09.2019, 12:06
Все разобрался, завтра поеду на объект, буду пробовать, спасибо за советы

ZDV28
01.11.2019, 15:15
Подскажите в каких единицах задается входная переменная TVAL (время хода рабочего органа исполнительного механизма) в ФБ PID_3POS_IM_ANR (регулятор с автонастройкой второго типа) из библиотеки PID_Regulators?

Александр Ч.
08.11.2019, 08:42
В секундах. Описание всех входов блоков PID_Regulators можно посмотреть в самом Менеджере библиотек

Салихов Ильдар
26.02.2020, 11:10
Подскажите, а как реализовано в библиотеке влияние вот этого входного параметра
PV_TIME:WORD;
Я так понимаю, что ФБ не работает пока входной сигнал не обновится?

starter_up
30.03.2020, 21:05
Хочу проэмулировать работу различных ПИД-регуляторов с аналоговым выходом совместно с моделью объекта. В качестве объекта использовать модель двигателя постоянного тока, апериодического звена или что-то подобное. Есть ли такие функциональные блоки в библиотеках (искал, но не нашел) или надо самостоятельно писать их? Тогда вопрос – как это сделать, например для ДПТ? Диф. уравнение такое: Ω= Kдв *U/Tм*S+1. Что посоветуете?

Eugene.A
30.03.2020, 21:33
Но у вас же двигатель не будет подключен непосредственно к аналоговому выходу? Будет ведь какой-то электропривод? Так его свойства существенно повлияют на поведение системы. Т.е. его тоже необходимо эмулировать. Датчиком обратной связи что послужит? Тахогенератор, энкодер?

starter_up
30.03.2020, 22:06
Да придется использовать в качестве ДОС масштабирующее звено. А поведение системы не принципиально,т.к главное - это не настройка коэффициентов ПИД-регулятора, а проверка его работоспособности.

Eugene.A
30.03.2020, 22:55
Мне не доводилось управлять ДПТ от ПЛК, я имел дело только с тиристорными электроприводами, которые содержали чисто "железные" ПИД-регуляторы, с настройками которых приходилось повозиться. С ПИД регуляторами в ПЛК, однако, уже много лет эксплуатируются насосы с частотными преобразователями и датчиками давления или перепада давления. Это, конечно, не обратная связь по скорости или положению, однако по времени реакции на обороты близко. Особых проблем именно с ПИД регулированием не испытывал.

starter_up
31.03.2020, 09:01
Вообще-то ПИД-регуляторы нужны для управления нагревом воды и для управления расходом воды с помощью частотного преобразователя. А двигатель постоянного тока упомянут только как один из возможных вариантов, используемых в качестве объекта управления для ПИД-регулятора. Это не принципиально.Просто хочется как-то убедиться в работоспособности ФБ ПИД-регулятора перед его использовании на производстве.

capzap
31.03.2020, 09:20
Просто хочется как-то убедиться в работоспособности ФБ ПИД-регулятора перед его использовании на производстве.
просто хочетя узнать, сколько лет Вы работаете на производстве и что стояло/ит сейчас для регулирования температуры воды и производительности насоса?

starter_up
31.03.2020, 09:34
Работаю,как Вы поняли, немного. Воду греет ТЭН, а расходом управляет двигатель насоса с частотником.

capzap
31.03.2020, 09:40
Работаю,как Вы поняли, немного. Воду греет ТЭН, а расходом управляет двигатель насоса с частотником.

что бы ТЭН не просто грел воду, а поддерживал определенную температуру, должно быть устройство периодически включая/выключая ТЭН в зависимости от температуры воды, у Вас оно есть? Кто крутит ручку на частотнике, чтоб анологично поддержать определенный расход?

starter_up
31.03.2020, 09:44
что бы ТЭН не просто грел воду, а поддерживал определенную температуру, должно быть устройство периодически включая/выключая ТЭН в зависимости от температуры воды, у Вас оно есть? Кто крутит ручку на частотнике, чтоб анологично поддержать определенный расход?
А ПИД-регуляторы не для этого?

capzap
31.03.2020, 10:09
А ПИД-регуляторы не для этого?

для этого, но я спрашивал что было, а не что хотите

Eugene.A
31.03.2020, 11:54
Вообще-то ПИД-регуляторы нужны для управления нагревом воды и для управления расходом воды с помощью частотного преобразователя. А двигатель постоянного тока упомянут только как один из возможных вариантов, используемых в качестве объекта управления для ПИД-регулятора. Это не принципиально.Просто хочется как-то убедиться в работоспособности ФБ ПИД-регулятора перед его использовании на производстве.
Я для этого изготовил пару симуляторов, один для регулирования температуры, другой для поддержания уровня в ёмкости. Чисто железные. Имеют входы открытие/закрытие регулирующего клапана. У первого симулятора выход - нагреватель с термодатчиком, у второго - токовый выход, симулирующий выход датчика уровня.
С их помощью можно проверить и отладить работу программ на столе, перед установкой в щит, тем самым сократив выезды на объекты при пусконаладке.

starter_up
31.03.2020, 12:06
Я для этого изготовил пару симуляторов, один для регулирования температуры, другой для поддержания уровня в ёмкости. Чисто железные. Имеют входы открытие/закрытие регулирующего клапана. У первого симулятора выход - нагреватель с термодатчиком, у второго - токовый выход, симулирующий выход датчика уровня.
С их помощью можно проверить и отладить работу программ на столе, перед установкой в щит, тем самым сократив выезды на объекты при пусконаладке.
Я тоже так хочу, только до железа хотелось бы проверить с программным симулятором.

Eugene.A
31.03.2020, 12:25
В качестве модели объекта можно использовать, например, реверсивный счётчик. Подавая импульсы с тактового генератора на счётные входы +/-, можно имитировать изменение параметра объекта регулирования, например, температуры или уровня в баке или расхода. Это и будет симулятор клапана запорно-регулирующего. Выход ПИД- регулятора должен задавать частоту тактового генератора.

starter_up
31.03.2020, 21:02
В качестве модели объекта можно использовать, например, реверсивный счётчик. Подавая импульсы с тактового генератора на счётные входы +/-, можно имитировать изменение параметра объекта регулирования, например, температуры или уровня в баке или расхода. Это и будет симулятор клапана запорно-регулирующего. Выход ПИД- регулятора должен задавать частоту тактового генератора.
Спасибо.Я тоже к этому пришел.Только на вход ПИД-регулятора подавать разницу между заданием и числом импульсов.Это,конечно,не настоящая проверка, но работоспособность регулятора оценить можно.Еще раз спасибо.

krollcbas
06.07.2020, 08:45
Коллеги, автоматический подбор коэффициентов. Кто чем пользуется?
Платно/бесплатно, то не так важно, важнее понять успешно или нет, удобно или есть свои ньюансы.

Сам ранее для вентсистем писал алгоритмы подбора коэффициентов P и I по принципу больше-меньше.
Если дельта синусоиды уменьшилась еще чуть прибавляем, если нет уменьшаем, затем коэффициент интегрирования и так по кругу.
Работает, но слишком долго и весит порядочно.
Вот здесь описал: http://lapshinvr.ru/articals/avtotyuning.html

Посмотрел вебинар компании Инсат про PID-Expert, там более качественное решение, но тоже свои недостатки.
Не рассчитывает коэффициент дифференцирования и не подходит для инкрементальных процессов (RAMP)
50059

VladGC
06.07.2020, 09:25
Коллеги, автоматический подбор коэффициентов. Кто чем пользуется?
Платно/бесплатно, то не так важно, важнее понять успешно или нет, удобно или есть свои ньюансы.

Сам ранее для вентсистем писал алгоритмы подбора коэффициентов P и I по принципу больше-меньше.
Если дельта синусоиды уменьшилась еще чуть прибавляем, если нет уменьшаем, затем коэффициент интегрирования и так по кругу.
Работает, но слишком долго и весит порядочно.
Вот здесь описал: http://lapshinvr.ru/articals/avtotyuning.html

Посмотрел вебинар компании Инсат про PID-Expert, там более качественное решение, но тоже свои недостатки.
Не рассчитывает коэффициент дифференцирования и не подходит для инкрементальных процессов (RAMP)
50059
Для ПР200 использовал трм101
Для CDS3.5 регулятор из UTIL пробовал тоже трм101, но что то не очень они подходят, надо может быть преобразовывать

Sulfur
05.10.2020, 13:38
Разбираюсь я PID_FUNCTION из библиотеки PID_Regulators Овен.
Сочиняю нагрев (только) на ПЛК110М2, греть буду большую толстую чугунину.
В описании сказано

OUT REAL Выходной сигнал регулятора, в диапазоне от –100 до 100
Мне в конечном итоге нужно получить целое 0..1000.
Следовательно мне нужно:
а). Игнорировать отрицательные значения выхода?
или
б). Масштабировать -100..100 в 0..1000?

RV9WFJ
06.10.2020, 04:49
Игнорировать т.е а)

Sulfur
06.10.2020, 06:22
Спасибо, я примерно так и рассчитывал.

Sibiryak22rus
27.10.2020, 06:15
всем привет, подскажите проверенный пид регулятор для ПЛК110 с выходами больше/меньше для регулирования уровня, воздуха, разрежения и нагрузки, самому написать мозгов не хватит :(

Sergey666
27.10.2020, 08:09
всем привет, подскажите проверенный пид регулятор для ПЛК110 с выходами больше/меньше для регулирования уровня, воздуха, разрежения и нагрузки, самому написать мозгов не хватит :(

https://owen.ru/forum/attachment.php?attachmentid=3235&d=1293175635

Работает хорошо, применял для регулировки оборотов дизеля(больше-меньше).

Sibiryak22rus
27.10.2020, 08:24
https://owen.ru/forum/attachment.php?attachmentid=3235&d=1293175635
Работает хорошо, применял для регулировки оборотов дизеля(больше-меньше).
ссылка не открывается

Sergey666
28.10.2020, 08:21
Страница- https://owen.ru/forum/showthread.php?t=551&page=7
Но ссылка на ПИД регулятор не работает... снова кто-то лажает.

petera
28.10.2020, 10:32
Страница- https://owen.ru/forum/showthread.php?t=551&page=7
Но ссылка на ПИД регулятор не работает... снова кто-то лажает.

Речь идет про это?
51540

У меня сохранились несколько библиотек от CEkip

petera
28.10.2020, 10:45
библиотеки от CEkip

ЗЫ.
Если речь идет о примере использования, то он есть на диске ПЛК (Диск Навигатор)
51549
Там же - описание примера
51550

Если диска нет, то выкладываю 14 пример полностью

Sergey666
28.10.2020, 18:25
Спасибо, а то у меня на компе, что под рукой нет этих библиотек.

Grostel
30.11.2020, 06:11
Товарищи, подскажите! Столкнулся с проблемой при использовании блока CONT_S. Выяснился такой момент, при заданном времени минимального импульса управляющего воздействия блока отличного от времени цикла блока, при подаче на входы блока импульсов для ручного управления, на выходах соотвественно появляется управляющее воздействие и так остается висеть. Блок пробовал помещать в различные задачи с различным временем вызова. Контроллер 110-60.

TATARin
29.12.2020, 17:11
Здравствуйте форумчане. Я пытаюсь конвертировать библиотеку ПИД_СЕ_12.10.2012.lib из CoDeSys2.3(ПЛК110-32) в CoDeSys3(ПЛК210-03), но при конвертации требует какой-то пароль - в описании к библиотеки нет пароля. Кто может подсказать где искать?

Alexey_Palich
29.12.2020, 17:54
Здравствуйте форумчане. Я пытаюсь конвертировать библиотеку ПИД_СЕ_12.10.2012.lib из CoDeSys2.3(ПЛК110-32) в CoDeSys3(ПЛК210-03), но при конвертации требует какой-то пароль - в описании к библиотеки нет пароля. Кто может подсказать где искать?
Напишите автору. Cekip.

viktor__
19.04.2021, 03:16
Здравствуйте уважаемые форумчане!
Вопрос по приведению шкал ПИД-регулятора CTRL_PID из библиотеки oscat. Регулируется процесс поддержания плотности замкнутого контура. Регулировка осуществляется клапаном, который увеличивая угол своего открытия, увеличивает поток вывода воды из контура. Т.е. имеется прямое управление: при низкой плотности клапан открывается сильнее, что приводит к повышению плотности и наоборот, уменьшение угла открытия клапана приводит к снижению плотности. Плотность меняется в пределах 1000 - 2000 кг/м3, клапан открывается в пределах 0 - 100%, но при работе САР ПИД, делается ограничение клапана 0 -70%, которое подается на входы LL, LH в CTRL_PID. На вход ACT подается текущая плотность dens, а на вход SET подается уставка плотности sp_dens. Выход Y поступает на задание положения клапана.
1. Как будет вести себя регулятор при высокой плотности, например уставка = 1730, а текущая = 1790? В этом случае рассогласование DIFF = SET – ACT = -60 будет отрицательным.
Правильно ли я понимаю поведение регулятора следующим образом: (обнулив для упрощения Д-составляющую). Если плотность повысилась (внешнее возмущение, изменение уставки и т.п.), то какое-то время выход будет компенсироваться И-частью, а затем, клапан просто закроется по срабатыванию нижнего ограничения выходной величины. И как таковой процесс регулировки прекратиться, а будет наблюдаться процесс «аварийного» принудительного ограничения управления клапаном.
2. Нужно ли предусматривать обязательное приведение шкал регулируемого и управляющего параметров в том случае, если выходная величина имеет ограничение только в одном знаке (т.е. только положительный, либо только отрицательный диапазон)?

RV9WFJ
20.04.2021, 05:57
1. В целом все верно
2. Шкалы приведутся пропорциональным коэффициентом.

krollcbas
10.06.2021, 18:21
Линейно-нарастающая функция.
Сделал статью, описывающую код
Код на ST так же выложен в статье
55512

https://lapshinvr.ru/articals/lineyno-narastayushchaya-funktsiya.html

aven
16.08.2021, 18:25
Что-то не понял
PID_Regulators ПЛК1хх /ПЛК1хх [М02] должна же работать на ПЛК150 ?

ПЛК пока нет, но в режиме симулятора не работает почему-то. Веду поиск решения... 8-(

petera
16.08.2021, 19:07
Что-то не понял
PID_Regulators ПЛК1хх /ПЛК1хх [М02] должна же работать на ПЛК150 ?

ПЛК пока нет, но в режиме симулятора не работает почему-то. Веду поиск решения... 8-(

И не будет работать в симуляторе, только в реальном ПЛК, т.к. реализована в прошивке ПЛК

aven
17.08.2021, 23:48
Super :) подозревал, но не хотел соглашаться

darkall
10.04.2022, 10:28
Добрый день коллеги!
(Решил свой вопрос еще здесь разместить. Извиняюсь перед модератором так как в вопросах для новичков этот же вопрос оставил)

Оборудование: ПЛК110-30, МВ110-8А, МУ110-8И

Процесс поддержания уровня воды в баке, при помощи насоса управляемого частотником.
Уровень в баке меряет датчик давления и переводим в метры 4-20мА.
Частотник управляется то же 4-20мА.
Тут все ок.

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

Решил использовать ПИД регулятор с автонастройкой из библиотеки PID_Regulators.lib
взял вот такой PID_2POS_IM_ANR
Но тут начались танцы с бубном...

В примере дя тако регулятора на входы
_IMIN подают -100, а в инструкции на писано число диапазон от 0 до минус 1
_IMAX подают 100, а в инструкции на писано число диапазон от 0 до плюс 1

так кому верить?

Плюс при попытках настроить этот регулятор он начал работать в режиме:
0 мощности
100 мощности
промежуточных он не выдавал почти, а так нельзя там насос с двигателем на 75кВт гидроудары все разломают
плюс последний раз он выдал на выход OUT_VAL -1#QNAN (я так понял это не число из за переполнения интегральной составляющей)

привожу настройки PID_2POS_IM_ANR перед включение автонастройки
PV - данные от датчика переведенные в метры 5,1 (к примеру) меньше уставки
PV_TIME - беру из регистра Циклическое время измерения входа МВ110-8А (все ли верно здесь?)
SP - уставка 5,5
START_ANR тут все ясно подам TRUE включиться автонастройка
YDOP - максимальная амплитуда при автонастройке 0,2 (может тут нужно больше к примеру 0,5)
_IMIN подаю -100, а в инструкции на писано число диапазон от 0 до минус 1 (подать -1 ?)
_IMAX подаю 100, а в инструкции на писано число диапазон от 0 до плюс 1 (подать 1 ?)

с выхода OUT_VAL
забираю только положительную часть от 0 до 100 перевожу в диапазон WORD от 0 до 1000
и подаю на частотник через модуль МУ110-8И (4-20мА) (в ручном режиме четко слушается, так что тут точно все верно)

Помогите разобраться. От этого процесса зависит город с населением 100 тыс человек.

Может нужно и можно использовать другой алгоритм другой ПИД.

Сергей0308
10.04.2022, 10:55
Добрый день коллеги!
(Решил свой вопрос еще здесь разместить. Извиняюсь перед модератором так как в вопросах для новичков этот же вопрос оставил)

Оборудование: ПЛК110-30, МВ110-8А, МУ110-8И

Процесс поддержания уровня воды в баке, при помощи насоса управляемого частотником.
Уровень в баке меряет датчик давления и переводим в метры 4-20мА.
Частотник управляется то же 4-20мА.
Тут все ок.

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

Решил использовать ПИД регулятор с автонастройкой из библиотеки PID_Regulators.lib
взял вот такой PID_2POS_IM_ANR
Но тут начались танцы с бубном...

В примере дя тако регулятора на входы
_IMIN подают -100, а в инструкции на писано число диапазон от 0 до минус 1
_IMAX подают 100, а в инструкции на писано число диапазон от 0 до плюс 1

так кому верить?

Плюс при попытках настроить этот регулятор он начал работать в режиме:
0 мощности
100 мощности
промежуточных он не выдавал почти, а так нельзя там насос с двигателем на 75кВт гидроудары все разломают
плюс последний раз он выдал на выход OUT_VAL -1#QNAN (я так понял это не число из за переполнения интегральной составляющей)

привожу настройки PID_2POS_IM_ANR перед включение автонастройки
PV - данные от датчика переведенные в метры 5,1 (к примеру) меньше уставки
PV_TIME - беру из регистра Циклическое время измерения входа МВ110-8А (все ли верно здесь?)
SP - уставка 5,5
START_ANR тут все ясно подам TRUE включиться автонастройка
YDOP - максимальная амплитуда при автонастройке 0,2 (может тут нужно больше к примеру 0,5)
_IMIN подаю -100, а в инструкции на писано число диапазон от 0 до минус 1 (подать -1 ?)
_IMAX подаю 100, а в инструкции на писано число диапазон от 0 до плюс 1 (подать 1 ?)

с выхода OUT_VAL
забираю только положительную часть от 0 до 100 перевожу в диапазон WORD от 0 до 1000
и подаю на частотник через модуль МУ110-8И (4-20мА) (в ручном режиме четко слушается, так что тут точно все верно)

Помогите разобраться. От этого процесса зависит город с населением 100 тыс человек.

Может нужно и можно использовать другой алгоритм другой ПИД.

Если процесс столь важный(ответственный), можно использовать ПИД-регулятор ПЧ, это повысит надёжность установки в целом, так как не потребуется весь список вашего оборудования, к тому же и денег сэкономите, я конечно не знаю всех тонкостей, но из того что Вы сообщили, мне кажется просто идеальное решение!

krollcbas
10.04.2022, 22:05
Обычно использую в своих проектах обычный PID из библиотеки UTIL.
Он почти для всего годится, а если нужны какие-то особенности при управлении, то их можно дописать.

Вы можете нарисовать график как должен вести себя процесс с учетом инерционности? Три переменные PV, SP, OUT

melky
10.04.2022, 22:13
Если контролируется уровень в баке, то на кой тут вообще ПИД ?
Быстрее/медленнее разбор ? ну и считайте скорость разбора и чуть быстрее заполняйте. Ну и в соседних темах - контроль фильтров тут более важен, чем придумка с ПИДом.

BDA
10.02.2023, 07:44
Добрый день!
Кто-нибудь использовал два блока ПИД с одинаковыми настройками, но разными заданиями и ИМ в одной программе? Будут ли они адекватно и стабильно работать?

1exan
10.02.2023, 08:04
Добрый день коллеги!
(Решил свой вопрос еще здесь разместить. Извиняюсь перед модератором так как в вопросах для новичков этот же вопрос оставил)

Оборудование: ПЛК110-30, МВ110-8А, МУ110-8И

Процесс поддержания уровня воды в баке, при помощи насоса управляемого частотником.
Уровень в баке меряет датчик давления и переводим в метры 4-20мА.
Частотник управляется то же 4-20мА.
Тут все ок.

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

Решил использовать ПИД регулятор с автонастройкой из библиотеки PID_Regulators.lib
взял вот такой PID_2POS_IM_ANR
Но тут начались танцы с бубном...


Вас наличие сочетания '2POS_IM' в названии совсем не насторожило? Посмотрите описание библиотеки (https://ftp.owen.ru/CoDeSys23/05_Library/01_Manuals/PID_Regulators.pdf).
Вам скорее нужен блок PID_FUNCTION.
Есть блок PID_FIXCYCLE в библиотеке Util

1exan
10.02.2023, 08:08
Добрый день!
Кто-нибудь использовал два блока ПИД с одинаковыми настройками, но разными заданиями и ИМ в одной программе? Будут ли они адекватно и стабильно работать?

Если это два различных экземпляра ФБ ПИД, то проблем нет.
Вызывать один и тот-же экземпляр ФБ с разными заданиями затея плохая.

starmos
20.04.2023, 07:04
Есть где-нибудь описание работы PID_FUNCTION? Или хотя бы уравнение, которое реализует этот блок? Не совсем понимаю точный смысл параметров, которые на вход подаются и как они соотносятся с классическими параметрами ПИД регулятора: K, TI и TD.

Dimensy
20.04.2023, 07:39
Есть где-нибудь описание работы PID_FUNCTION? Или хотя бы уравнение, которое реализует этот блок? Не совсем понимаю точный смысл параметров, которые на вход подаются и как они соотносятся с классическими параметрами ПИД регулятора: K, TI и TD.

Так через один пост выше давали ссылку на описание библиотеки

starmos
20.04.2023, 20:17
Так через один пост выше давали ссылку на описание библиотеки

Если вы имеете ввиду стандартное описание, то из него как раз ничего и не понятно. Я надеялся на более развернуый вариант найти. И там найти ответы на вопросы. Например как все-таки правильно задавать значения на входы IMAX и IMIN? В описании сказано 0...1 для первого, 0...-1 для второго. Но я в Инете уже встречал примеры, где люди задают это в процентах 0...100. Как правильно-то? Что значит выходной сигнал в диапазоне -100...100? В плюс условно нагрев, а в минус охлаждение? Или как? Или я должен прибавить 100, чтобы сдвинуть сигнал, если мне надо значение в диапазоне 0...сколько-то? Люди же как-то это используют ведь, ОВЕН это для чего-то писали? Почему не снять все возможные вопросы заранее, просто написав внятную инструкцию? Приходится самому искать концы и спрашивать.

Игорь Владиславович
23.03.2024, 11:58
PID_REG_CE из библиотеки PID_REG_CE (23_12_10). lib 23.12.10
Нашел единственный регулятор который, кроме Y.REAL выход, имеет дискретный выход БОЛБШЕ, МЕНЬШЕ. При опробовании в режиме эмуляция, он моргает при разбалансе, но скважность и длительность импульсов не отличается при минимальном, максимальном разбалансе.
Я вроде читал, что нужны разные приблуды, для формировании ШИМ на выходе регулятора. Надеюсь на совет.
Спасибо.

krollcbas
23.03.2024, 12:18
При управлении клапанами "Больше/меньше" использую простой блок PID
Его выход 0 -100% завожу на свой блок разделения по импульсам.
Если вам нужно, вышлю ЛС

Игорь Владиславович
23.03.2024, 12:27
Пожалуйста, буду весьма признателен. И Желательно, если выход -100 +100.

Игорь Владиславович
23.03.2024, 12:54
При управлении клапанами "Больше/меньше" использую простой блок PID
Его выход 0 -100% завожу на свой блок разделения по импульсам.
Если вам нужно, вышлю ЛС

ООООчень нужно. Выход -100..+100

krollcbas
23.03.2024, 13:07
Выслал. На что будет ругаться - закомментируйте, это отладочная информация

Игорь Владиславович
23.03.2024, 13:53
Выслал. На что будет ругаться - закомментируйте, это отладочная информация

не получил :((

FPavel
23.03.2024, 14:34
Делал на основе ФБ PID из Util.lib.
Но он получился костыль на костыле (как внутри самого ФБ, так и в программе, использующей этот ФБ), хотя и работал.

FUNCTION_BLOCK PID_3_POS
(*
Идея взята по ссылке
https://www.asutp-volgograd.com/blog/pid-regulator-codesys.html
из файла "pid_valve_new.exp"

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

В случае управления КЗР без обратной связи о положении штока
ПИД на самом деле не имеет границ: при достижении условных 100%
на выходе он сбрасывается в 0 и продолжает расти дальше.
Следующий после перехода импульс игнорируется.

Первый импульс после сброса требуется пропустить из-за того, что
ФБ VALVE_REG_NO_POS не сбрасывает внутреннюю переменную "текущее
положение привода" на 50%, поэтому создаётся положение, когда
на входе IN_VAL значение 50%, а в переменной 100% (или 0%)
и ФБ формирует импульс в противоположную сторону.
Чтобы этот импульс быстрее выполнился - добавил замену временных
параметров этого блока на близкие к нулю.

Чтобы избежать ударного перехода Руч-Авто, значение выхода Y (PID)
подал на вход Y_MANUAL (PID).

Для исключения "залипания" внешнего сброса интегральной составляющей,
входной сигнал bReset подал через выделитель переднего фронта.
*)
VAR
pidPID: PID;
ltScale: LIN_TRAFO;
vlValve: VALVE_REG_NO_POS;
ftF_TRIG: F_TRIG;
rsOut_Enable: RS;
tpAutoResetBIAS: TP; (* таймер автоматического сброса накопленной
интегральной составляющей при возникновении переполнения *)
rtrigResetPulse: R_TRIG;
rFMT: REAL; (*время полного хода - с учётом сброса накопленной интегральной*)
rMW: REAL; (*минимальное время импульса с учётом сброса*)
rDBand: REAL; (*зона нечувствительности позиционирования привода
с учётом сброса интегральной составляющей*)
rLT: REAL; (*время люфта*)
rRT: REAL; (*пауза перед реверсом*)
rMS: REAL;
END_VAR
VAR_INPUT
rPV: REAL; (* Измеренное значение *)
rSP: REAL; (* Уставка *)
rKp: REAL; (* Коэффициент пропорциональности *)
diTi_s: DINT; (* Время интегрирования, в секундах *)
rTd_s: REAL; (* Время дифференцирования в секундах *)
bReset: BOOL; (* Внешний сигнал сброса накопленной интегральной составляющей *)
bManual: BOOL; (* переключение Руч/Авт 0/1 *)
(* rYManual: REAL; значение выхода при Руч *)
rDBF: REAL; (* Зона нечувствительности позиционирования *)
rFullMotionTime: REAL; (* Время полного хода *)
rLuftTime: REAL; (* Длительность люфта *)
rReverseTime: REAL; (* Пауза перед реверсом привода *)
rMinWork: REAL; (* Минимальная длительность импульса на привод *)
rMinStop: REAL; (* Минимальное время для остановки привода *)
tofOverflow: TOF;
END_VAR
VAR_OUTPUT
bClose: BOOL;
bOpen: BOOL;
END_VAR

74623

74624




FUNCTION DeadBand : REAL
VAR_INPUT
rPV, rSP, rDeadBand: REAL;
END_VAR
VAR
END_VAR

IF rPV<rSP-rDeadBand THEN
DeadBand := rPV+rDeadBand;
ELSIF rPV>rSP+rDeadBand THEN
DeadBand := rPV-rDeadBand;
ELSE
DeadBand := rSP;
END_IF;


(* Регулятор действует непрерывно *)
pidLevel(
rPV := DeadBand(rLevel, rLevel_PID_SP, rLevel_PID_DBand), (* Измеренное значение *)
rSP := rLevel_PID_SP, (* Уставка *)
rKp := rLevel_PID_Kp, (* Коэффициент пропорциональности *)
diTi_s := diLevel_PID_Ti, (* Время интегрирования, в секундах *)
rTd_s := rLevel_PID_Td, (* Время дифференцирования в секундах *)
bReset := FALSE, (* Внешний сигнал сброса накопленной интегральной составляющей *)
bManual := NOT xLevelValveInAuto, (* переключение Руч/Авт 0/1 *)
rDBF := rLevel_Act_DBand, (* Зона нечувствительности позиционирования *)
rFullMotionTime := rLevel_Act_FullMotionTime, (* Время полного хода *)
rLuftTime := rLevel_Act_LuftTime, (* Длительность люфта *)
rReverseTime := rLevel_Act_ReverseTime, (* Пауза перед реверсом привода *)
rMinWork := rLevel_Act_MinWorkTime, (* Мининмальная длительность импульса на привод *)
rMinStop := rLevel_Act_MinStopTime, (* Минимальное время для остановки привода *)
bClose => yLevelValveDown,
bOpen => yLevelValveUp
);
(* костыль для отключения переполнения при abs(Кп*(SP-PV)) >= 100 - тогда регулятор зависает и отключает выходы *)
rTemp := (rLevel_PID_SP-DeadBand(rLevel, rLevel_PID_SP, rLevel_PID_DBand))*rLevel_PID_Kp;
IF (ABS(rTemp) >= 100) THEN
IF rTemp>0 THEN
yLevelValveDown := FALSE;
yLevelValveUp := TRUE;
ELSE
yLevelValveDown := TRUE;
yLevelValveUp := FALSE;
END_IF;
END_IF;

Если есть время, попробуйте самостоятельно сделать и отладить ПИ регулятор по простым формулам и их физическому представлению.
Как только у меня появилось время - сам и сделал собственный. Это несложно.


Идея своего ПИД простая.

Физическая аналогия следующая:
1) по формуле ПИД производится периодическая "зарядка конденсатора"
2) если привод перемещается, то с периодом 100 мс (или 50 мс - не важно) производится "разрядка" конденсатора на величину, пропорциональную времени полного хода, которая прекращается при "полном разряде конденсатора"

Имеется формула ПИД в конечных разностях, т.е. по которой периодически пересчитывается выходное воздействие регулятора ("заряд конденсатора").

Т.е. запускаете таймер BLINK с заданным периодом и по приходу фронта импульса выполняете пересчёт.

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

Также, нужно учесть возможное "взвинчивание интегральной составляющей" и ограничить "заряд конденсатора" величиной 105-120%.

Можно поместить вызов ФБ в периодические задачи, нужно только, чтобы период вызова совпадал с пересчётом "разряда" при перемещении регулирующего органа.

Тут подробнее описал такой ФБ для OwenLogic
https://owen.ru/forum/showthread.php?t=25068&p=430251&viewfull=1#post430251

Свободного времени сейчас у меня мало, поэтому в CDS ничего переносить и отлаживать не буду.

Игорь Владиславович
23.03.2024, 15:09
Павел, Спасибо. Буду пробовать.

Игорь Владиславович
24.03.2024, 07:01
74645
Не хочет моргать. На F_TRIG приходит , на выходе нуль.

Игорь Владиславович
24.03.2024, 07:37
Типа, на ПИД параметр 70, уставка 50, а на выходе нуль. Попробую найти адекватный ПИД. И к тому же нужно не только открывать арматуру, но и закрывать. Нужно прикрутить еще лабуду.
74646