PDA

Просмотр полной версии : CmpOwenPidRegs помогите разобраться



Ctakah133
20.05.2023, 00:06
Здравствуйте. Помогите разобраться с Авто настройкой ПИД регуляторов.

Я правильно понимаю?
АНР на OPR.APID_PWM:
1.С помощью SET_APID_PWM при запуске контролера записаны из памяти контролера какие-то предыдущие (забитые в ручную) коэффициенты ПИД
2.Задержка, равную 2-м изменениям параметра, передаваемого на вход PV_TIME перед включением функционального блока ПИД-регулятора (в режиме регулирования) при старте проекта после перезагрузки контроллера. (НУЖНО ЛИ ЭТО ДЛЯ OPR.APID_PWM???)
3.Вход EN в TRUE
4.Вход START_ANR в TRUE
5.По заднему фронту ANR_WORK читаю коэффициенты ПИД с помощью GET_APID_PWM и записываю в блок через SET_APID_PWM, Вход START_ANR в FALSE

Сначала нужно: записать коэффициенты, а потом Вход EN в TRUE? или на оборот?

АНР на OPR.APID_POS_VALV:
1.С помощью SET_APID_POS_VALV при запуске контролера записаны из памяти контролера какие-то предыдущие (забитые в ручную) коэффициенты ПИД
2.Задержка, равную 2-м изменениям параметра, передаваемого на вход PV_TIME перед включением функционального блока ПИД-регулятора (в режиме регулирования) при старте проекта после перезагрузки контроллера.
3.Вход EN в TRUE
4.Вход START_ANR в TRUE
5.По заднему фронту ANR_WORK читаю коэффициенты ПИД с помощью GET_APID_POS_VALV и записываю в блок через SET_APID_PWM, Вход START_ANR в FALSE

В описании в АНР на OPR.APID_POS_VALV написано:

"Выключить в программе ФБ ПИД-регулятора и выполнить его сброс присвоив экземпляру ФБ ПИД-регулятора пустой (не вызываемый в программе) экземпляр аналогичного ПИД-регулятора, так как при проведении автонастройки память ФБ должны быть очищена."

Но в готовом примере "Example_ApidPosValv_3516v1", сброс блока происходит только при перезагрузке контролера, с условием что перед этим был включен ручной режим или автонастройка.
Т.е. при включении АНР сброса не происходит или я чего то не понимаю?

Ещё не понятно как реализовать не при первом цикле программы а на ходу:

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

P/s Возможности по тестить на реальном железе нет т.к. объект удаленный, и на объекте плохо со связью. В готовом примере "Example_ApidPosValv_3516v1 в основном всё завязано на включение анр при запуске контролера, от чего сложно понять как с АНР работать уже на запущенной программе. Был бы максимально простой пример, было бы гораздо проще разобраться (без дополнительных примочек в виде проверки коэф., возврата привода при остановке анр и т.д).

Евгений Кислов
22.05.2023, 12:34
Добрый день.


НУЖНО ЛИ ЭТО ДЛЯ OPR.APID_PWM???

Необязательно.


Сначала нужно: записать коэффициенты, а потом Вход EN в TRUE? или на оборот?

Сначала нужно записать коэффициенты.


Т.е. при включении АНР сброса не происходит или я чего то не понимаю?

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


Ещё не понятно как реализовать не при первом цикле программы а на ходу

По аналогии - просто в этом случае блок будет запущен не в первом цикле задачи, а в произвольном.

Jukki
11.09.2023, 10:18
Вопрос по STD_PID.
В описании ФБ в библиотеке написано, что XP = 1/Kp. А в документации 2.1, что XP = 100/Kp. Где правда?

IVM
11.09.2023, 10:47
Kp - это коэффициент при пропорциональной составляющей ?

Jukki
11.09.2023, 11:49
Kp - это коэффициент при пропорциональной составляющей ?
Да. "Полоса пропорциональности связана с коэффициентом пропорциональности."

IVM
11.09.2023, 12:25
Можно задать XP = 1, TD = 0, TI =1, PV = 0, SP = 1, PMAX = 150, PMIN = -150, DB = 0. Запустить программу в эмуляции и посмотреть значение Y, которое будет либо 100, либо 1. Если Y = 100, то XP = 100/Kp, если Y = 1, то XP = 1/Kp.

Jukki
11.09.2023, 12:57
Можно задать XP = 1, TD = 0, TI =1, PV = 0, SP = 1, PMAX = 150, PMIN = -150, DB = 0. Запустить программу в эмуляции и посмотреть значение Y, которое будет либо 100, либо 1. Если Y = 100, то XP = 100/Kp, если Y = 1, то XP = 1/Kp.
Разве?
В той же документации написано, что "Библиотека является внешней (external) и не может быть использована в симуляции или на виртуальном контроллере."
А у PMIN и PMAX допустимый диапазон -1 ... 1.

IVM
11.09.2023, 13:54
Разве?
В той же документации написано, что "Библиотека является внешней (external) и не может быть использована в симуляции или на виртуальном контроллере."
А у PMIN и PMAX допустимый диапазон -1 ... 1.

Если есть железо, то можно загрузить программу в него, запустить и посмотреть значение Y (XP = 0,01, PMAX = 1, PMIN = -1, остальное как я ранее писал). Если железа нет, то надо задавать вопрос разработчикам этой библиотеки, т.е. ОВЕНу.

Евгений Кислов
12.09.2023, 09:03
Вопрос по STD_PID.
В описании ФБ в библиотеке написано, что XP = 1/Kp. А в документации 2.1, что XP = 100/Kp. Где правда?

Добрый день.

Вообще, Xp = 1/Kp, но в рамках блоков библиотеки на вход Xp должно подаваться значение, выраженное в процентах - отсюда домножение на 100.
Встроенную документацию мы поправим.

Jukki
14.09.2023, 10:16
Добрый день.
Но в документации написано, что полоса пропорциональности измеряется в единицах регулируемой величины.

Евгений Кислов
14.09.2023, 12:02
Добрый день.
Но в документации написано, что полоса пропорциональности измеряется в единицах регулируемой величины.

Более детально уточнил ваш вопрос.
Полоса пропорциональности действительно измеряется в единицах регулируемой величины.
100 в числителе связано вот с чем: у большинства "аппаратных" регуляторов диапазон выхода управления Y - 0...100 (или -100...100).
У блоков библиотеки диапазон выхода управления составляет (-1...1) – поэтому, если вы уже знаете значение Kp, рассчитанное для «аппаратного» регулятора – то вам надо сначала разделить 1 на Kp (так как XP и Kp являются взаимно обратными величинами), а потом домножить результат на 100, чтобы получить значение Xp, подходящее для наших блоков.

Jukki
24.11.2023, 16:28
Евгений, добрый вечер.
Подскажите по STD_PID, пожалуйста.
Почему-то регулятор начинает работать после переключения из ручного режима в авто только после того, как поменяешь уставку SP на какую-нибудь другую.
VSP-Допустимая скорость изменения внутренней уставки ФБ = 100.
INF-Постоянная времени входного фильтра в секундах = 0.04.
То есть, стоит уставка = 7. Выводим регулятор из ручного режима, выход регулятора = PMIN и так и держится, хотя PV = 3, сильно меньше SP. Меняю уставку допустим на 6, и только тогда регулятор начинает работать.

asutpp@t-stroy.com
11.04.2024, 12:40
Добрый день всем.
Я не могу понять, для чего используется pv_time? Его можно взять с модуля овен - первый вариант, и можно просто перед вызовом блока пид регулятора APID_POS_VALV вычислять по времени, тогда pv_time будет меняться каждый цикл.
Вопрос в том, для чего нужен этот счётчик? - на что он влияет?
Или это просто нежелание разработчиков вызвать в коде такую строк: pv_time0 := TIME_TO_UDINT(TIME())/10; или подобное.
Мне не совсем удобно в коде добираться до привязанного значения этого счётчика на аналоговом сигнале на модуле.
Чем то череват второй вариант?

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

Евгений Кислов
11.04.2024, 12:49
Добрый день всем.
Я не могу понять, для чего используется pv_time? Его можно взять с модуля овен - первый вариант, и можно просто перед вызовом блока пид регулятора APID_POS_VALV вычислять по времени, тогда pv_time будет меняться каждый цикл.
Вопрос в том, для чего нужен этот счётчик? - на что он влияет?
Или это просто нежелание разработчиков вызвать в коде такую строк: pv_time0 := TIME_TO_UDINT(TIME())/10; или подобное.
Мне не совсем удобно в коде добираться до привязанного значения этого счётчика на аналоговом сигнале на модуле.
Чем то череват второй вариант?

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

asutpp@t-stroy.com
11.04.2024, 13:02
Добрый день.
Этот счетчик используется для определения моментов времени, в которые меняется PV и, соответственно, требуется выполнить логику блока.
Считайте, что это деталь реализации.
Второй вариант (с ручным инкрементом счетчика в вашем коде) тоже является корректным.

У меня вопрос есть такой для ясности так сказать задаю: циклическое время на модуле оно каждый цикл изменяется, или только когда реально модуль обработает?
Например, если время цикла контроллера будет 1 мс (по факту то и так возможно), а время обработки аналога на модуле 5 мс, тогда у меня pv_time на вход блока будет принимать значения 0,0,0,0,5,0,0,0,0,10... итд. по первому варианту?
и 0,1,2,3,4,5,6,7,8,9,10 по второму? Изменится ли управляющее воздействие на выходе? вот собственно и был таким изначальный вопрос.
Ну и к примеру же на пятом цикле PV изменится на 40% относительно первого.
И во втором варианте это будет ступенька на pv_time = 5

PS прочел и понял, что можно запутаться, пытаясь понять о чем я спрашиваю ))

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

Евгений Кислов
11.04.2024, 13:11
Из РЭ на модуль:



Время измерения – это циклическое время с шагом 0,01 секунд, передаваемое в двух байтах. Время
точно соответствует времени проведения измерения в данном канале и при работе с ним (например,
при вычислении дифференциальной составляющей при ПИД-регулировании) можно не учитывать
задержку передачи по сети Ethernet. Отсчет циклического времени начинается при включении модуля и
каждые 65536 тактов (что соответствует 655,36 секунд) время обнуляется.

Если вы хотите увеличивать счетчик вручную в коде - то вам нужно повторить описанное поведение.

asutpp@t-stroy.com
11.04.2024, 13:17
Из РЭ на модуль:
Если вы хотите увеличивать счетчик вручную в коде - то вам нужно повторить описанное поведение.
поведение повторить легко, а вот сопоставить фразы из РЭ не очень:
1) это циклическое время с шагом 0,01 секунд
2) Время точно соответствует времени проведения измерения в данном канале и при работе с ним.
Либо циклическое (а очень похоже, что так оно и есть, и каждые 655,35 секунд оно проходит через 0), либо оно должно точно соответствовать времени проведения измерения.
Если по первому варианту - то повторить легко, знай прибавляй
по второму, если точно соответствовать времени измерения - то нужно сравнивать с предыдущим значением и прибавлять только если значение изменится на определенную дельту

Евгений Кислов
11.04.2024, 13:29
Модуль выполняет измерения циклически.
Значение в регистре циклического времени обновляется одновременно с обновлением регистра значения.

asutpp@t-stroy.com
11.04.2024, 13:34
ок, ясно. ) спасибо

asutpp@t-stroy.com
12.04.2024, 08:07
В руководстве по APID_POS_VALV написано, что для перехода в ручной режим из режима регулирования необходимо дождаться отсутствия управляющих воздействий.
Я могу для убирания управляющих воздействий приравнять SP PV и на следующем цикле задать DY_MAN_SET:=true, проконтролировав LESS, MORE?
Просто странно. Нужно ли это вообще? Сколько будет длится "остаточное" управление от регулирования, TIMP?

Ещё непонятно: в руководстве для пуска автонастройки пид регулятора нужно
Выключить в программе ФБ ПИД-регулятора как это делается?


Как понимать вот это:

Режим автонастройки запускается только из режима регулирования, поэтому необходимо
записать нулевые (какие-либо) коэффициенты ПИД-регулятора (перейти в режим START_PID);
Нулевые или какие-либо??????

Евгений Кислов
12.04.2024, 09:12
В руководстве по APID_POS_VALV написано, что для перехода в ручной режим из режима регулирования необходимо дождаться отсутствия управляющих воздействий.
Я могу для убирания управляющих воздействий приравнять SP PV и на следующем цикле задать DY_MAN_SET:=true, проконтролировав LESS, MORE?
Просто странно. Нужно ли это вообще? Сколько будет длится "остаточное" управление от регулирования, TIMP?

Можете. Нужно.

asutpp@t-stroy.com
12.04.2024, 11:53
идём дальше )))

Включить в программе ФБ ПИД-регулятора таким образом, чтобы в первом цикле контроллера
ФБ ПИД-регулятора перешел в режим регулирования со всеми установленными параметрами,
кроме SP, чтобы не началась выработка регулирующих воздействий. Также необходимо
предусмотреть, чтобы во втором цикле контроллера произошел автоматический пуск
автонастройки одновременно с записью уставки регулятора.
Обязательно ли нужно 2 цикла? можно сделать просто 2 вызова подряд?
типа:

if START_ANR then
fb_apid(PV:=param,...);
end_if;
fb_apid(PV:=param,SP:=param1,...);

Евгений Кислов
12.04.2024, 11:59
идём дальше )))

Обязательно ли нужно 2 цикла? можно сделать просто 2 вызова подряд?
типа:

if START_ANR then
fb_apid(PV:=param,...);
end_if;
fb_apid(PV:=param,SP:=param1,...);

Я рекомендую следовать документации. Если там что-то написано - то обязательно нужно сделать именно так.

asutpp@t-stroy.com
16.04.2024, 11:57
Добрый день! После перезагрузки ПЛК регулятор уходит в режим автонастройки! Не могу от этого избавиться. При первом пуске записываю коэффициенты ПИД регулятора (правда только XP=100), или не записываю, но ПИД регулятор переходит в режим автонастройки. Как от этого избавиться - понять не могу.
в какую сторону посмотреть?

при пуске:
- ПИД включаю только после получения 2х значений от PV
- параметр на входе START_ANR - FALSE

APID_VALVE_POS

Евгений Кислов
16.04.2024, 12:05
Добрый день! После перезагрузки ПЛК регулятор уходит в режим автонастройки! Не могу от этого избавиться. При первом пуске записываю коэффициенты ПИД регулятора (правда только XP=100), или не записываю, но ПИД регулятор переходит в режим автонастройки. Как от этого избавиться - понять не могу.
в какую сторону посмотреть?

при пуске:
- ПИД включаю только после получения 2х значений от PV
- параметр на входе START_ANR - FALSE

APID_VALVE_POS

Добрый день.
Напишите, пожалуйста, запрос на support@owen.ru.
К письму приложите ссылку на ваш проект и подробную инструкцию по воспроизведению проблемы (с указанием, как вы определяете, что регулятор уходит в режим автонастройки).

asutpp@t-stroy.com
17.04.2024, 14:32
С этим разобрался - перепутал условия для чтения и записи...
Сейчас другое: АНР.
Делаю как по инструкции:
1. вручную вывожу до установившегося режима.
2. на первом цикле приравниваю блок ПИДа другому, пустому блоку. Вызываю ПИД без SP. и START_ANR = FALSE;
3. на следующем шаге вызываю ПИД уже с SP и соответственно вызываю ПИД блок нормально.
Косяк в следующем: YSM у ПИДа после присвоения ему пустого блока идет с 0-ля! В итоге, ничего не настраивается. Если делать без приравнивания, то настраивается, стартуя с текущей позиции, но АНР отрабатывает только 1 раз, второй уже нет. Но второй раз - ожидаемо.
Какие варианты можете посоветовать?
код:

(*вызов ПИДа*)
IF valve_proc.START_ANR AND NOT valve_proc.START_ANR0 THEN
//вызвать PID в режиме регулирования 1 раз, без ввода SP
valve_proc.apid := valve_proc.apid_reset;
valve_proc.apid(PV:=Out.PV.Value,PV_TIME:=valve_pr oc.pv_time,PV_0:=Out.PV_0.Value,ANR_MODE:=valve_cf g.ANR_MODE,START_ANR:=FALSE,SM:=Out.Posizion.Value/100.0,
TVAL:=valve_cfg.TVAL,TLUFT:=valve_cfg.TLUFT,TIMP:= valve_cfg.TIMP,DY_ANR:=valve_cfg.DY_ANR,XN:=valve_ cfg.XN,Y_MAN_SET:=valve_proc.Y_MAN_SET,DY_MANUAL:= valve_proc.DY_MANUAL);
ELSE
//нормальный вызов пид блока
valve_proc.apid(PV:=Out.PV.Value,PV_TIME:=valve_pr oc.pv_time,SP:=Out.SP, PV_0:=Out.PV_0.Value,ANR_MODE:=valve_cfg.ANR_MODE, START_ANR:=valve_proc.START_ANR,SM:=Out.Posizion.V alue/100.0,
TVAL:=valve_cfg.TVAL,TLUFT:=valve_cfg.TLUFT,TIMP:= valve_cfg.TIMP,DY_ANR:=valve_cfg.DY_ANR,XN:=valve_ cfg.XN,Y_MAN_SET:=valve_proc.Y_MAN_SET,DY_MANUAL:= valve_proc.DY_MANUAL);
END_IF

valve_proc.bStateANR := valve.bStateANR;
Out.bStateANR := valve_proc.apid.ANR_WORK;
IF NOT valve_proc.apid.ANR_WORK AND valve_proc.bStateANR AND valve_proc.START_ANR THEN valve_proc.START_ANR := FALSE;END_IF

valve_proc.START_ANR0 := valve_proc.START_ANR;

Евгений Кислов
17.04.2024, 15:54
Какие варианты можете посоветовать?

https://owen.ru/forum/showthread.php?t=37934&p=435279&viewfull=1#post435279