Вход

Просмотр полной версии : Параметры PID



Клаус
26.08.2024, 22:19
Всем привет. Такой вопрос. В PID особо не силён, не доводилось настраивать. В общем проблема такая, сильная "пила" на одном из PID. причём на обоих PID стоят одинаковые параметры, но вот верхний ведёт себе как на скрине (нижний тоже хотелось бы получше конечно). По схеме: Имеется котельная и два контура- верхний и нижний, на каждом контуре по две задвижки, работают синхронно. И вот что происходит - например - температура ниже заданной - клапана открываются, котельная видит увеличение расхода и начинает разгоняться, но когда она разогналась, клапана уже сильно открылись - пошло резкое увеличение температуры. Клапана начали закрываться - расход уменьшается и котельная тормозит, но пока она затормозила, клапана сильно закрыты - температура просаживается- и тд. Причём, нижние графики более гладкие, потому что линия ка бы дальше от котельной. Сейчас у обоих ПИД стоят параметры Kp-5, Ki-500, Kd-0. Каким коэффициентом можно улучшить ситуацию? Или, надо с нуля всё настраивать, начиная всё по нулям, и потом по одному параметру менять?
Проблема может тянется изначально, но просто раньше не было графиков и особо не отслеживалась температура,а вот вывел графики, и увидели такую штуку.

IVM
26.08.2024, 22:49
Задвижки аналоговым сигналом управляются ?

Клаус
26.08.2024, 22:51
Задвижки аналоговым сигналом управляются ?

Да. 0..10В

МихаилГл
27.08.2024, 02:17
А есть более "гладкие" Графики, не с такой пилой. Что за система отображения на верхнем уровне? Судя по поведению похоже на неправильную настройку, но с такой дискретизации измеренных значений очень трудно разглядеть подробности. Если клапана на разных расстояниях от котла, то при одинаковых настройках это и получите. Ищите в сети косвенные методы настройки регуляторов, но с таким шагом отрисовки тяжело будет настроить.

Клаус
27.08.2024, 07:15
А есть более "гладкие" Графики, не с такой пилой.
Гладкие в каком смысле? Масштаб или что? Если масштаб, то вот, в меньшем временном срезе скрин




Что за система отображения на верхнем уровне?
В плане?...


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

Юрий Н
27.08.2024, 07:25
из написанного вообще не понятно ни чего...
что за задвижки? как и где стоят в котельной?
что за разноцветные полосочки, за что отвечают?
как управляются котлы? на какую температуру и чем регулируются?
где прикручены датчики температурные?

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

EFrol
27.08.2024, 11:20
Всем привет. Такой вопрос. В PID особо не силён, не доводилось настраивать. В общем проблема такая, сильная "пила" на одном из PID. причём на обоих PID стоят одинаковые параметры, но вот верхний ведёт себе как на скрине (нижний тоже хотелось бы получше конечно). По схеме: Имеется котельная и два контура- верхний и нижний, на каждом контуре по две задвижки, работают синхронно. И вот что происходит - например - температура ниже заданной - клапана открываются, котельная видит увеличение расхода и начинает разгоняться, но когда она разогналась, клапана уже сильно открылись - пошло резкое увеличение температуры. Клапана начали закрываться - расход уменьшается и котельная тормозит, но пока она затормозила, клапана сильно закрыты - температура просаживается- и тд. Причём, нижние графики более гладкие, потому что линия ка бы дальше от котельной. Сейчас у обоих ПИД стоят параметры Kp-5, Ki-500, Kd-0. Каким коэффициентом можно улучшить ситуацию? Или, надо с нуля всё настраивать, начиная всё по нулям, и потом по одному параметру менять?
Проблема может тянется изначально, но просто раньше не было графиков и особо не отслеживалась температура,а вот вывел графики, и увидели такую штуку.

Пробуйте Kp увеличивать на 1 за раз, а Ki уменьшать на 10 за раз и наблюдайте. Пила должна сгладиться, но если она будет увеличиваться или растягиваться сохраняя амплитуду, то у Вас подклинивают задвижки или большой люфт в них.

IVM
27.08.2024, 13:14
ПИД регулятор как называется ?

Клаус
27.08.2024, 17:56
Пробуйте Kp увеличивать на 1 за раз, а Ki уменьшать на 10 за раз и наблюдайте. Пила должна сгладиться, но если она будет увеличиваться или растягиваться сохраняя амплитуду, то у Вас подклинивают задвижки или большой люфт в них.

Попробуют завтра...

Клаус
27.08.2024, 17:56
ПИД регулятор как называется ?

PID_FIXCYCLE

Клаус
27.08.2024, 17:57
Сказали, что такая пила началась после замены обоих калориферов на этой линии...

Клаус
27.08.2024, 18:05
что за задвижки? как и где стоят в котельной?

Belivo NV24A-SR-TPC
Клапан 650S
Стоят не в котельной, а непосредственно возле сушилок. Котельная в отдельном здании




что за разноцветные полосочки, за что отвечают?

Tуст и Ттекущая



где прикручены датчики температурные?

В самих сушилках, соответственно верхнем и нижних ярусах

МихаилГл
27.08.2024, 18:23
У вас ответы такие, как будто тут все знают как выглядит ваш объект... Вы можете структуру хоть схематично набросать. Там даже разница в длине/сечении трубопровода и типа калорифера будет влиять на требуемые характеристики регуляторов. Или у вас оба контура ну один в один и никаких отличий? И датчики, и исполнительные, и длины, и сечения... Ну всё одинаковое?

Клаус
27.08.2024, 18:47
У вас ответы такие, как будто тут все знают как выглядит ваш объект... Вы можете структуру хоть схематично набросать. Там даже разница в длине/сечении трубопровода и типа калорифера будет влиять на требуемые характеристики регуляторов. Или у вас оба контура ну один в один и никаких отличий? И датчики, и исполнительные, и длины, и сечения... Ну всё одинаковое?

Да я пониманию )). Конечно не идентичные контуры, длинна линии контура верхнего яруса короче ~ на 2-3 метра чем нижнего, и калориферов (КПСК 3-11) на одном контуре два, на другом четыре. Да вопрос то изначально не в этом, а какими коэффициентами "поиграть", чтобы уменьшить пилу. Естественно, влияющих параметров много. Если б я был на месте, то сам бы пробовал, но нужно объяснить людям, которые там на месте (благо вывел изменения параметров ПИД в меню программы СПК), на что менять, а я отслеживал бы по графикам.

МихаилГл
27.08.2024, 19:25
Не, про "пилу" Это я имел ввиду шаг между измерениями, а вы этот неправильный термин на вооружение взяли. На новых графиках всё нормально, плавно, без скачков. Но верхний график как раз характерен для неправильных параметров.

Как правильнее настроить не подскажу, надо читать...
https://rusautomation.ru/articles/nastroyka-pid-regulyatora-temperatury/
Вот тут можно глянуть... На что параметры влияют и как более менее кривая должна выглядеть. Не люблю регуляторы...

Клаус
27.08.2024, 19:36
Не люблю регуляторы...
А без них никуда ))).


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

IVM
27.08.2024, 19:57
PID_FIXCYCLE

А ПЛК какой ?

IVM
27.08.2024, 20:04
Всем привет. Такой вопрос. В PID особо не силён, не доводилось настраивать. В общем проблема такая, сильная "пила" на одном из PID. причём на обоих PID стоят одинаковые параметры, но вот верхний ведёт себе как на скрине (нижний тоже хотелось бы получше конечно). По схеме: Имеется котельная и два контура- верхний и нижний, на каждом контуре по две задвижки, работают синхронно. И вот что происходит - например - температура ниже заданной - клапана открываются, котельная видит увеличение расхода и начинает разгоняться, но когда она разогналась, клапана уже сильно открылись - пошло резкое увеличение температуры. Клапана начали закрываться - расход уменьшается и котельная тормозит, но пока она затормозила, клапана сильно закрыты - температура просаживается- и тд. Причём, нижние графики более гладкие, потому что линия ка бы дальше от котельной. Сейчас у обоих ПИД стоят параметры Kp-5, Ki-500, Kd-0. Каким коэффициентом можно улучшить ситуацию? Или, надо с нуля всё настраивать, начиная всё по нулям, и потом по одному параметру менять?
Проблема может тянется изначально, но просто раньше не было графиков и особо не отслеживалась температура,а вот вывел графики, и увидели такую штуку.

Ki-500. Зачем Ki такой громадный ? 10 поставь.

Клаус
27.08.2024, 20:06
А ПЛК какой ?

СПК107 древний

Клаус
27.08.2024, 20:20
Ki-500. Зачем Ki такой громадный ? 10 поставь.

Ок. Я так понимаю, что Kd лучше не использовать в данном случае.

IVM
27.08.2024, 23:16
Ок. Я так понимаю, что Kd лучше не использовать в данном случае.

У тебя без Kd проблем хватает. Можно пока только Kp оставить небольшой.

IVM
28.08.2024, 00:59
Скрин FB ПИД выложи. Интересно глянуть что задано на входах FB.

IVM
28.08.2024, 09:31
Сигнал 0...10 В какой модуль формирует ?

FPavel
29.08.2024, 18:48
Судя по графикам, процесс очень инерционный - при скачке уставки температура догоняет её только через 10-15 минут.
Мне кажется, что при такой инерции чистое ПИД регулирование не лучший выбор.

Нужно добавлять какой-то дополнительный быстродействующий параметр.
Например, в больших паровых котлах для поддержания уровня воды в барабане на самом деле поддерживают не уровень, а нулевой баланс между массовыми расходами воды в котёл и паром из котла - они быстрее отражают возмущение. А измеренный уровень служит только для небольшой коррекции.

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

Не знаю, может это неправильно, а есть другой способ...

Клаус
29.08.2024, 19:00
Скрин FB ПИД выложи. Интересно глянуть что задано на входах FB.

Нет пока под руками проекта, на другом ноуте...Позже скину

Клаус
29.08.2024, 19:03
Судя по графикам, процесс очень инерционный - при скачке уставки температура догоняет её только через 10-15 минут.
Мне кажется, что при такой инерции чистое ПИД регулирование не лучший выбор.

Нужно добавлять какой-то дополнительный быстродействующий параметр.
Например, в больших паровых котлах для поддержания уровня воды в барабане на самом деле поддерживают не уровень, а нулевой баланс между массовыми расходами воды в котёл и паром из котла - они быстрее отражают возмущение. А измеренный уровень служит только для небольшой коррекции.

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

Не знаю, может это неправильно, а есть другой способ...

Сегодня коэффициентами удалось такого результата достичь...

IVM
29.08.2024, 22:15
Сегодня коэффициентами удалось такого результата достичь...

И какие коэффициенты ?

Клаус
29.08.2024, 22:23
И какие коэффициенты ?

2 и195 у верхнего графика и 2 и 190 у нижнего.
Но не получается уйти пока от этих всплесков, которыйэе в самом начале цикла сушки, когда температура с больших низов на первую уставку "идёт", дальше, при переходе на следубщий температурный шаг уже всё нормально, но там и разница между уставквми от 3-х до 6-ти градусов, там гладко ±...
Да, бывают небольшие скачки в ровной кривой, но это когда видимо котельная начинает разгоняться, буквально 2-3 градуса, но она в течении 3-х 4-х минут стабилизируется. Вот, как я понял из логики, тут как раз наверно можно попробовать Д подклбчить, хотя это и не критично, но уде чисто спортивный интерес. Но, пока не пробовал это, хочу пока минимизировать этот скачок вначале.

IVM
30.08.2024, 23:40
Почему уставка изначально равна 0 ?

Клаус
03.09.2024, 11:40
Почему уставка изначально равна 0 ?
Хмм. Вопрос интересный, причём уставка стоит 45 и 60 изначально. Ладно, разберусь позже.

IVM
03.09.2024, 11:49
Ymax у ПИД какой стоит ?

Статья по настройке ПИД: http://lazysmart.ru/osnovy-avtomatiki/nastrojka-pid-regulyatora/

Клаус
03.09.2024, 11:50
Ещё один вопрос возник. Соответственно выведены параметры уставки и текущей температуры в OwenCloud для формирования графиков, т.е. просто считываем. Tуст имеет тип Word, Tтек - Real. Т.к. передача с СПК в облако работает только с Word (ModbusTCP_Slave_Device), то через функцию объединения Ттек через 2 ворда передаётся с СПК в Облако, проблем нет, всё работает (см.Скрин 1). Но вот, возникла идея передавать в облако данные по каждому PID и, так же, возможность ЗАПИСЫВАТЬ из Облака в СПК параметры PID, т.е. менять его параметры и из СПК и из Облака. Как считывать, тут всё понятно по аналогии с Ттек (см.Скрин 2), но как писать из облака в СПК? Не разу не делал такого просто... При работе ПЛК210 и облака таких вопросов нет, т.к. там всё через символьную конфигурацию происходит.

Клаус
03.09.2024, 11:53
Ymax у ПИД какой стоит ?



// расчет PID регулятора
GlobalVar.Regul1(
SET_POINT := PLC_PRG.Ust_T1,
KP := GlobalVar.kP1,
TN := GlobalVar.kI1,
TV := GlobalVar.kD1,
Y_MANUAL := GlobalVar.y1_man,
Y_OFFSET := 0,
Y_MIN := 0,
Y_MAX := 100,
MANUAL := GlobalVar.PID1man,
RESET := GlobalVar.res1,
Y=>GlobalVar.outR1,
LIMITS_ACTIVE=>,
OVERFLOW=>);



// приводим диапазон ПИД 0...100 к диапазону 2...10В выхода МУ110-6У 200...1000
// c проверкой ручного режима управления
tempOutR1 := REAL_TO_UINT(OSCAT_BASIC.SCALE_R(X:=valPID1, I_LO:=0, I_HI:=100, O_LO:=closeState, O_HI:=openState));
tempOutR2 := REAL_TO_UINT(OSCAT_BASIC.SCALE_R(X:=valPID2, I_LO:=0, I_HI:=100, O_LO:=closeState, O_HI:=openState));
tempOutR3 := REAL_TO_UINT(OSCAT_BASIC.SCALE_R(X:=valPID3, I_LO:=0, I_HI:=100, O_LO:=closeState, O_HI:=openState));
tempOutR4 := REAL_TO_UINT(OSCAT_BASIC.SCALE_R(X:=valPID4, I_LO:=0, I_HI:=100, O_LO:=closeState, O_HI:=openState));

Клаус
03.09.2024, 12:07
Никак не получается уйти от этого "бугра". Не знаю, может проблема именно с поднятия Уставки с нуля до того значения уставки в момент запуска алгоритма (54 градуса), типа, успевает ошибку накопить, не понятно

IVM
03.09.2024, 12:52
// расчет PID регулятора
GlobalVar.Regul1(
SET_POINT := PLC_PRG.Ust_T1,
KP := GlobalVar.kP1,
TN := GlobalVar.kI1,
TV := GlobalVar.kD1,
Y_MANUAL := GlobalVar.y1_man,
Y_OFFSET := 0,
Y_MIN := 0,
Y_MAX := 100,
MANUAL := GlobalVar.PID1man,
RESET := GlobalVar.res1,
Y=>GlobalVar.outR1,
LIMITS_ACTIVE=>,
OVERFLOW=>);



// приводим диапазон ПИД 0...100 к диапазону 2...10В выхода МУ110-6У 200...1000
// c проверкой ручного режима управления
tempOutR1 := REAL_TO_UINT(OSCAT_BASIC.SCALE_R(X:=valPID1, I_LO:=0, I_HI:=100, O_LO:=closeState, O_HI:=openState));
tempOutR2 := REAL_TO_UINT(OSCAT_BASIC.SCALE_R(X:=valPID2, I_LO:=0, I_HI:=100, O_LO:=closeState, O_HI:=openState));
tempOutR3 := REAL_TO_UINT(OSCAT_BASIC.SCALE_R(X:=valPID3, I_LO:=0, I_HI:=100, O_LO:=closeState, O_HI:=openState));
tempOutR4 := REAL_TO_UINT(OSCAT_BASIC.SCALE_R(X:=valPID4, I_LO:=0, I_HI:=100, O_LO:=closeState, O_HI:=openState));

Что ты там намудрил ?

Тебе надо задать Ymin = 200, Ymax = 1000. Никаких других приведений делать не надо. То что формируется на выходе ПИД (выход Y) надо по RS-485 отправлять в МУ110-6У.

Коэффициенты KP и TN ПИД после этого надо будет по новой подобрать. Ссылку на методику тебе дали.

Клаус
03.09.2024, 12:59
Что ты там намудрил ?

Тебе надо задать Ymin = 200, Ymax = 1000 и все. Никаких других приведений делать не надо. То что формируется на выходе ПИД (выход Y) надо по RS-485 отправлять в МУ110-6У.

Коэффициенты ПИД после этого надо будет по новой подобрать. Ссылку на методику тебе дали.
Не я мудрил :)) Это наследие )) Я тут только ввёл рецепт изменения уставки (задаваемой) автоматически через, так же, задаваемые промежутки времени. Ну и OwenCloud. А так реально, очень замороченная программа какая-то, мне кажется, можно проще было сделать...

IVM
03.09.2024, 13:10
Не я мудрил :)) Это наследие )) Я тут только ввёл рецепт изменения уставки (задаваемой) автоматически через, так же, задаваемые промежутки времени. Ну и OwenCloud. А так реально, очень замороченная программа какая-то, мне кажется, можно проще было сделать...

К наследию надо относится критически, а не принимать все за чистую монету.

FPavel
03.09.2024, 18:39
Могу ошибиться, в конкретно этом ФБ ПИД вычисление интегральной не останавливается после достижения выходом Ymin (Ymax), а продолжает накапливаться, но из-за присутствия внутри этого ФБ ограничителя, на выходе Y значение в диапазоне Ymin...Ymax.

Для диагностики и реакции на переполнение есть выход OVERFLOW (или LIMITS_ACTIVE). С его помощью останавливают рост интегральной.

IVM
03.09.2024, 18:44
Могу ошибиться, в конкретно этом ФБ ПИД вычисление интегральной не останавливается после достижения выходом Ymin (Ymax), а продолжает накапливаться, но из-за присутствия внутри этого ФБ ограничителя, на выходе Y значение в диапазоне Ymin...Ymax.

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

FPavel
03.09.2024, 19:03
Процесс инерционный, особенно при пуске большое рассогласование.
При наличии времени, на мой взгляд, стоило бы попробовать ограничить этот рост.

IVM
03.09.2024, 22:43
Процесс инерционный, особенно при пуске большое рассогласование.
При наличии времени, на мой взгляд, стоило бы попробовать ограничить этот рост.

TN большой задавать не надо и все будет нормально.

Клаус
04.09.2024, 10:32
TN большой задавать не надо и все будет нормально.
Попробую на следующем цикле поставить 10, посмотрю.

Клаус
04.09.2024, 10:53
Ещё один вопрос возник. Соответственно выведены параметры уставки и текущей температуры в OwenCloud для формирования графиков, т.е. просто считываем. Tуст имеет тип Word, Tтек - Real. Т.к. СПК работает только с Word, то через функцию объединения Ттек через 2 ворда передаётся с СПК в Облако, проблем нет, всё работает (см.Скрин 1). Но вот, возникла идея передавать в облако данные по каждому PID и, так же, возможность ЗАПИСЫВАТЬ из Облака в СПК параметры PID, т.е. менять его параметры и из СПК и из Облака. Как считывать, тут всё понятно по аналогии с Ттек (см.Скрин 2), но как писать из облака в СПК? Не разу не делал такого просто... При работе ПЛК210 и облака таких вопросов нет, т.к. там всё через символьную конфигурацию происходит.

А по этому вопросу можете подсказать? Тут получается то, что данные с СПК в облака передаются с выходов ModbusTCP_Slave_Device. Что бы писать с облака в СПК надо использовать Входы ModbusTCP_Slave_Device, но как организовать? Ведь у меня коэффициенты ПИД'ов - Real, которые передаются как два ворда через функцию объединения, но что тогда использовать на входах ModbusTCP_Slave_Device? Те же самые 2 ворда?

Клаус
04.09.2024, 15:01
Попробую на следующем цикле поставить 10, посмотрю.
Поставили TN=10...Котельная 5 раз в аварию уходила :)

IVM
04.09.2024, 18:41
Поставили TN=10...Котельная 5 раз в аварию уходила :)

Из-за чего котельная в аварию уходила ? При увеличении уставки задвижка быстро полностью открывается ? Сделай график выхода ПИД (Y).

Клаус
04.09.2024, 18:47
Из-за чего котельная в аварию уходила ? Сделай график выхода ПИД (Y).

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

Валенок
05.09.2024, 08:21
Сделай график выхода ПИД (Y).
+100500.
На той же временной оси с уставкой и актуалом

Валенок
05.09.2024, 08:50
// расчет PID регулятора
GlobalVar.Regul1(
....
KP := GlobalVar.kP1,
TN := GlobalVar.kI1,
TV := GlobalVar.kD1,
...

Смешалисьвкучулюдикони.
Вам не мешало бы почитать теорию и понять разницу между T и K применительно к ПИД.
Время интегрирования - делитель. Меньше время - быстрее И-часть..
Ki = 1 / Ti
Время дифференцирования - множитель. Меньше время - медленнее Д-часть..
Kd = Td

Для инерционного процесса (вроде вашего)
1. нужно большое время интегрирования => малый коэффициент Ki => Большое время TN
2. D-часть влияет мало - можно не юзать (выше говорили). Время дифференцирования - множитель. Меньше время - медленнее Д-часть. Т.е малое TV => почти отключение Д-части. Kd = 0 - да, норм.

Kp и TN - ваше все для инерционных процессов.

Клаус
05.09.2024, 09:16
Смешалисьвкучулюдикони.
Вам не мешало бы почитать теорию и понять разницу между T и K применительно к ПИД.
Время интегрирования - делитель. Меньше время - быстрее И-часть..
Ki = 1 / Ti
Время дифференцирования - множитель. Меньше время - медленнее Д-часть..
Kd = Td

Для инерционного процесса (вроде вашего)
1. нужно большое время интегрирования => малый коэффициент Ki => Большое время TN
2. D-часть влияет мало - можно не юзать (выше говорили). Время дифференцирования - множитель. Меньше время - медленнее Д-часть. Т.е малое TV => почти отключение Д-части. Kd = 0 - да, норм.

Kp и TN - ваше все для инерционных процессов.

----

Не наоборот? ))

Да, теорию я уже читал-перечитал, уже неделю с этим вопросом возимся, понятно, что сказывается отсутствие опыта. А то, что у вас выделено красным это просто, ну не знаю, названия, не более. Методами разными пробовал и Зиглера-Никольса и вот подбором. Тут просто ещё проблема, что пар с котельной не регулируется. По- хорошему, нужен какой-то общий клапан, который бы регулировал подачу пара на "гребёнку", а уже задвижки регулировали бы каждая пара по своей линии. А тут получается, давление пара падает, задвижки открыты полностью, потом котельная начинает разгоняться, пар идёт по линиям через калориферы, датчик срабатывает, но задвижки не успевают закрыться вот и скачки такие. Не знаю, это всё конечно предположения. График ровный, порядка до 1 градуса в разные от уставки стороны, но до тех пор пока давление в котельной не доходит до минимума, потом начинается её разгон и вот результат.

Валенок
05.09.2024, 09:21
А то, что у вас выделено красным это просто ... названия, не более.
Удачи
....

Клаус
05.09.2024, 09:32
Но нигде не видно за .CYCLE. По дефолту он 0.
PID_FIXCYCLE:

IF TN>0 AND KP<> 0 AND (NOT OVERFLOW OR RESET OR MANUAL) THEN
...
IF RESET OR MANUAL OR INIT OR (KP<>KPcopy OR TN<>TNcopy OR TV<>TVcopy) THEN
....
ELSE
tmDiff:=REAL_TO_DWORD(CYCLE*1000);
END_IF;

IF TMDIFF>0 THEN
работа регулятора тута
END_IF;

END_IF;

Да, тут я не верно указал- не PID_CYCLE, а просто PID

_________________
RegCycle : DWORD:=15;

________________
GlobalVar.TimerPID(IN:=NOT GlobalVar.TimerPID.Q , PT:=GlobalVar.RegCycle*T#1S);
IF GlobalVar.TimerPID.Q THEN .....

Клаус
05.09.2024, 09:36
Удачи
....

VAR_GLOBAL RETAIN


// уставка регулятора
kP1:REAL:=5.0; // P регулятора
kI1:REAL:=500.0; // I регулятора
kD1:REAL:=0.0; // D регулятора
__________________________________________________ _______________

GlobalVar.Regul1(
SET_POINT := PLC_PRG.Ust_T1,
KP := GlobalVar.kP1,
TN := GlobalVar.kI1,
TV := GlobalVar.kD1,
Y_MANUAL := GlobalVar.y1_man,
Y_OFFSET := 0,
Y_MIN := 0,
Y_MAX := 100,
MANUAL := GlobalVar.PID1man,
RESET := GlobalVar.res1,
Y=>GlobalVar.outR1,
LIMITS_ACTIVE=>,
OVERFLOW=>);

Валенок
05.09.2024, 09:38
тут я не верно указал- не PID_CYCLE, а просто PID

Ближе к октябрю еще что-нить внезапно всплывет?


RegCycle : DWORD:=15;

________________
GlobalVar.TimerPID(IN:=NOT GlobalVar.TimerPID.Q , PT:=GlobalVar.RegCycle*T#1S);
IF GlobalVar.TimerPID.Q THEN .....
Что за чудо неведомое?


RESET зачем трогаете?

Клаус
05.09.2024, 09:43
Ближе к октябрю еще что-нить внезапно всплывет?


Что за чудо неведомое?


RESET зачем трогаете?

Повторюсь: Не я автор, я просто внёс изменения, чтобы не человек уставку перебивал, а она сама менялась, а человек только мог корректировать в таблице значения уставок и время шага, по необходимости, поэтому в саму программу работы PID я не лез. Только недавно вопрос возник, вот сейчас разбираюсь с основной программой, поэтому про Reset не могу сказать ничего.

Валенок
05.09.2024, 09:53
вот сейчас разбираюсь с основной программой,
Ну как разберетесь - расскажите что и когда вызывается

Клаус
05.09.2024, 09:55
Ну как разберетесь - расскажите что и когда вызывается

Обязательно

Валенок
05.09.2024, 10:15
.. Сделай график выхода ПИД (Y).
Актуально
....

Клаус
05.09.2024, 10:21
RESET зачем трогаете?

Reset, в данном случае используется исключительно в "ручном" режиме.

Клаус
05.09.2024, 10:22
Актуально
....

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

Валенок
05.09.2024, 11:13
Могу ошибиться, в конкретно этом ФБ ПИД вычисление интегральной не останавливается после достижения выходом Ymin (Ymax), а продолжает накапливаться...
Ошибаетесь.
При Y_MIN <> Y_MAX останавливается. Но значение интеграла при этом <> граница выхода. Значение интеграла упирается в такую расчетную границу которая дает возможность выходу сдвинутся от своей границы при первом же изменении знака E с учетом текущей П и Д частей. Этот ПИД писали реальные ребята, а не сферические кони.
При Y_MIN <> Y_MAX никогда не будет OVERFLOW
При Y_MIN = Y_MAX этот ПИД работает как "классический конно-сферический" с неограниченным интегралом, и как следствие, с OVERFLOW и вытекающими.


Клапана начали закрываться
А kvs этих клапанов адекватный? Уверены что зависимость расхода линейна/близка линейному от выхода ПИД'а? Что после 5...10% открытия клапана им вообще что-то регулируется?

IVM
05.09.2024, 11:18
Если TN стоит в знаменателе (см. картинку), то он должен быть большим. Ранее про величину TN я написал не верно. Я бы поставил для начала TN = 5000, а KP = 10.

Nomad
05.09.2024, 12:43
...потом котельная начинает разгоняться...

Значит в котельной есть свои параметры ПИД? Или как этот "разгон" определяется?

Nomad
05.09.2024, 12:46
2 и195 у верхнего графика и 2 и 190 у нижнего....
...хочу пока минимизировать этот скачок вначале.

Есть возможность уставку плавно повысить, а не скачкообразно?

Валенок
05.09.2024, 12:50
Поставили TN=10...
Кстати, ввиду условий получения графика - он очень любопытный с точки зрения - а как оно будет на релюшках с обычным термостатом в режиме практически ОТКР/ЗАКР.
Некая планка от которой можно только лучше. Вывезет ли ПЛК с датчиком в руках ТС супротив реле с термостатом? ))



..Котельная 5 раз в аварию уходила :)
время до зимы есть. Зимой ПИД регулятор настраивается по бразильской системе)

Валенок
05.09.2024, 12:55
Есть возможность уставку плавно повысить, а не скачкообразно?
При LIN_TRAFO есть. Но исходный код в стадии изучения вроде

Клаус
05.09.2024, 17:34
Значит в котельной есть свои параметры ПИД? Или как этот "разгон" определяется?

По котельной сказать ничего не могу...

Клаус
05.09.2024, 17:36
Она повышается автоматом на 2-3 градуса(в зависимости сколько поставит оператор) и цикл идёт полчаса (ну или так же, сколько выставит оператор, но обычно полчаса) на этой уставке. До этого я делал, что 5-6 градусов и цикл час.

Клаус
05.09.2024, 17:39
Поставили параметры для верхнего графика 6 и 650, для нижнего 5 и 600...Наблюдаем...

Клаус
05.09.2024, 17:43
При LIN_TRAFO есть. Но исходный код в стадии изучения вроде

LIN_TRAFO знаю...Даже больше скажу - Использовал в другом проекте и не поверите, успешно работает :)

Валенок
05.09.2024, 18:14
#47 актульно
на фоне графиков выше,
А про "неповерю" - зачем мне это? Это не основная полирующая настройка

Клаус
05.09.2024, 18:22
#47 актульно
на фоне графиков выше,

Программно сделано, но пока не залито, человек не доехал...

Валенок
05.09.2024, 18:40
по нижнему графику,
kp умножить бы на 1.5, а TN на 2.5
но это просто предположение. Гарантий улучшения нет) Куда откатится сами знаете.

Как вызывается пид?

IVM
06.09.2024, 13:00
При LIN_TRAFO есть. Но исходный код в стадии изучения вроде

Валенок, зачем автору темы понадобился LIN_TRAFO ?

Валенок
06.09.2024, 13:45
Предположу что конкретно здесь TC LIN_TRAFO'ой по сути ограничивает рассогласование при изменении уставки.
На графике #68 же видно.


LIN_TRAFO можно и для actual'а использовать для той же цели. Как более явный фильтр
..
Хотя не. Для общей фильтрации рассогласования придется по-другому ПИД обвешивать (само рассогласование подавать на acual, а уставку делать 0) или внутрь лезть.