Показано с 1 по 10 из 47

Тема: ПЛК110 с ПИД-регулятором из Utils.lib

Комбинированный просмотр

Предыдущее сообщение Предыдущее сообщение   Следующее сообщение Следующее сообщение
  1. #1

    По умолчанию

    Цитата Сообщение от Валенок Посмотреть сообщение
    Почему это ? (я про маnual и offset) //ушел смотреть
    Потому, что не всегда надо начинать регулирование с 0.
    Мануал используется для "подхвата" с предыдущего этапа регулирования (ручного, иным ПИДом, ....)
    Оффсет используется скажем в каскадном регулировании, когда выходное значение ПИДа скажем от 10 до 40.

  2. #2

    По умолчанию

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

    1.
    pid();
    if abs(SP-PV) < deadband then
    pid.Y := 0; // чтобы задвижка стояла на месте
    end_if

    2.
    pid();
    if abs(SP-PV) < deadband then
    SP:=PV;
    end_if

    3.
    pid();
    if abs(SP-PV) < deadband then
    SP:=PV;
    pid.Y := 0;
    end_if

    Можете предложить свой вариант.

  3. #3

    По умолчанию

    Цитата Сообщение от dzukp Посмотреть сообщение
    Посоветуйте как лучше реализовать мертвую зону на утиловском для регулирования температуры задвижкой.
    ....
    Можете предложить свой вариант.
    можно так

    Код:
    Pid();
    IF Pid.Y <5 AND Pid.Y > -5 THEN (*например меньше 5 больше -5*)
    	P:=0;(*исполнитель отключен*)
    ELSE
    	P:=Pid.Y;(*исполнитель в работе*)
    END_IF
    Последний раз редактировалось Crusash; 26.11.2018 в 14:08.

  4. #4

    По умолчанию

    Цитата Сообщение от Crusash Посмотреть сообщение
    можно так

    Код:
    Pid();
    IF Pid.Y <5 AND Pid.Y > -5 THEN (*например меньше 5 больше -5*)
    	P:=0;(*исполнитель отключен*)
    ELSE
    	P:=Pid.Y;(*исполнитель в работе*)
    END_IF
    В этом варианте меня смущает, что, возможно, будет постоянно расти интегральная составляющая.

  5. #5

    По умолчанию

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

  6. #6
    Пользователь
    Регистрация
    28.08.2008
    Адрес
    23..93..123
    Сообщений
    1,799

    По умолчанию

    Цитата Сообщение от SBeaR Посмотреть сообщение
    Ни один из этих вариантов у вас работать не будет. В первом варианте вы не сможете присвоить выходу значение. Во втором варианте у вас уставка будет постоянно "следовать" за переменной, как только переменная попадет в зону нечувствительности. Только если PV изменится резко, чтобы выскочить из зоны, только тогда ПИД заработает.
    Ну а третий вариант это сумма двух первых.
    if Pid.Pv>=Pid.Sv-Dead_band OR Pid.Pv<=Pid.Sv+Dead_band THEN
    Pid.Pv:=Pid.Sv;
    end_if;
    ...
    ...
    ...
    Pid();
    Т.е вариант№2 товарища стартера, именно этого не хватает в "заводской" комплектации утильного ПИД регулятора, проверено десятками стабильно работающих реализаций. Тут еще кто-то пургу мел про Tn="многим тысячам"...,так вот то именно пурга(или бред). Зырьте формулу,для этого даже код открывать не надо.
    Как то так...

    З.Ы Вы тут такую пургу метете... Господа!Пришлите мне того-же, что вы курите.
    Последний раз редактировалось Sergey666; 26.11.2018 в 21:49.

  7. #7

    По умолчанию

    Цитата Сообщение от Sergey666 Посмотреть сообщение
    Т.е вариант№2 товарища стартера, именно этого не хватает в "заводской" комплектации утильного ПИД регулятора, проверено десятками стабильно работающих реализаций.
    З.Ы Вы тут такую пургу метете... Господа!Пришлите мне того-же, что вы курите.
    А вы принципиально не видите разницы между своим вариантом и вариантом dzukp? Вы оперируете в отличии от него с входными переменными ПИД, а он с какими то абстрактными SP и PV, при этом используя в коде вполне конкретный pid.Y.
    Так вот тот конкретный кусок кода работать не будет, так как переменная SP будет изменяться вслед за PV, как только PV попадет в мертвую зону.
    Избежать этого можно только если где-то ранее в коде будет строка вида: SP:=A;
    В явном виде в варианте dzukp этого нет и реализовав данный вариант "как есть" можно сильно удивится, что переменная так ни когда из мертвой зоны и не выйдет (без резкого скачка значения переменной)
    Да и ваш вариант работать не будет. В вашем случае в условии нужен AND, а не OR.
    Я бы наверно реализовал это как-то так:
    Код:
    IF PV>(SP+DB) THEN
        PID.SP:=(SP+DB);
    ELSIF PV<(SP-DB) THEN
        PID.SP:=(SP-DB);
    ELSE
        PID.SP:=PV;
    END_IF;
    Поясню почему PID.SP:=SP+DB.
    Это позволит регулятору при выходе переменной из мертвой зоны более плавно начать регулирование. В противном же случае мы получим ошибку рассогласования >= величине мертвой зоны, что может привести к резкому скачкообразному изменению выхода ПИД из-за больших значений пропорциональной и дифференциальной составляющих регулятора.

  8. #8
    Пользователь
    Регистрация
    11.10.2013
    Адрес
    Домодедово
    Сообщений
    4

    По умолчанию

    Хотел бы внести своё предложение в дискуссию: добавить задержку включения для того, чтобы "пролетая" уставку переменная не "цеплялась" за границы "мертвой зоны", и ввести "мертвую зону" в установившемся режиме.
    Например:
    ton1(IN := ABS(SP - PV) < DB, PT := <время выхода на уставку>);

  9. #9

    По умолчанию

    Цитата Сообщение от Никитин Посмотреть сообщение
    Хотел бы внести своё предложение в дискуссию: добавить задержку включения для того, чтобы "пролетая" уставку переменная не "цеплялась" за границы "мертвой зоны", и ввести "мертвую зону" в установившемся режиме.
    Например:
    ton1(IN := ABS(SP - PV) < DB, PT := <время выхода на уставку>);
    В варианте SBeaR меня тоже смущает, то что идеальный регулятор на уставку выходить не будет, будет либо SP+DB, либо SP-DB.
    Наверное как-то так нужно сделать.

    Код:
    ton1(IN := ABS(SP - PV) < DB, PT := <время выхода на уставку>);
    IF ton1.Q AND PV>(SP+DB) THEN
        PID.SP:=(SP+DB);
    ELSIF ton1.Q AND PV<(SP-DB) THEN
        PID.SP:=(SP-DB);
    ELSE
        PID.SP:=PV;
    END_IF;

Похожие темы

  1. Помогите разобраться с ПИД регулятором
    от Айдар в разделе ПЛК1хх
    Ответов: 4
    Последнее сообщение: 07.11.2016, 15:13
  2. Помогите разобраться с ПИД-регулятором
    от Андрей Макаров в разделе ПЛК1хх
    Ответов: 9
    Последнее сообщение: 10.08.2009, 13:08
  3. Управление регулятором расхода
    от Alju в разделе Подбор Оборудования
    Ответов: 10
    Последнее сообщение: 22.08.2008, 17:05
  4. помогите с ПИД-регулятором.
    от Ден в разделе ПЛК1хх
    Ответов: 3
    Последнее сообщение: 12.08.2008, 15:42

Метки этой темы

Ваши права

  • Вы не можете создавать новые темы
  • Вы не можете отвечать в темах
  • Вы не можете прикреплять вложения
  • Вы не можете редактировать свои сообщения
  •