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

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

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

Предыдущее сообщение Предыдущее сообщение   Следующее сообщение Следующее сообщение
  1. #1
    Пользователь
    Регистрация
    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.

  2. #2

    По умолчанию

    Цитата Сообщение от 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.
    Это позволит регулятору при выходе переменной из мертвой зоны более плавно начать регулирование. В противном же случае мы получим ошибку рассогласования >= величине мертвой зоны, что может привести к резкому скачкообразному изменению выхода ПИД из-за больших значений пропорциональной и дифференциальной составляющих регулятора.

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

    По умолчанию

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

  4. #4

    По умолчанию

    Цитата Сообщение от Никитин Посмотреть сообщение
    Хотел бы внести своё предложение в дискуссию: добавить задержку включения для того, чтобы "пролетая" уставку переменная не "цеплялась" за границы "мертвой зоны", и ввести "мертвую зону" в установившемся режиме.
    Например:
    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;

  5. #5

    По умолчанию

    Цитата Сообщение от dzukp Посмотреть сообщение
    В варианте SBeaR меня тоже смущает, то что идеальный регулятор на уставку выходить не будет, будет либо SP+DB, либо SP-DB.
    Идеальных регуляторов не существует, если только вы не настроили параметры ПИД таким образом, чтобы он полчаса выходил на уставку, вместо положенной 1 минуты (время условно), но тогда зачем вам мертвая зона?
    Инерционность выведет объект к уставке хотя бы за счет дифференциальной составляющей, которая еще один цикл будет действовать из-за разницы между прошлым и настоящим значением процесса.
    Ну а если процесс у вас медленный сам по себе, то смысла использовать мертвую зону как правило нет.
    Последний раз редактировалось SBeaR; 29.11.2018 в 10:09.

  6. #6

    По умолчанию

    Цитата Сообщение от SBeaR Посмотреть сообщение
    Идеальных регуляторов не существует, если только вы не настроили параметры ПИД таким образом, чтобы он полчаса выходил на уставку, вместо положенной 1 минуты (время условно), но тогда зачем вам мертвая зона?
    Инерционность выведет объект к уставке хотя бы за счет дифференциальной составляющей, которая еще один цикл будет действовать из-за разницы между прошлым и настоящим значением процесса.
    Ну а если процесс у вас медленный сам по себе, то смысла использовать мертвую зону как правило нет.
    В данный момент у меня задвижка трехпозиционная, ПИД регулирует температуру изменяя скорость движения задвижки на открытие и закрытие ШИМ-ом. Процесс достаточно медленный, выход на уставку десятки минут. Мертвая зона, чтобы без нужды не дергать исполнительный механизм, когда более-менее установится.

  7. #7

    По умолчанию

    Цитата Сообщение от dzukp Посмотреть сообщение
    В данный момент у меня задвижка трехпозиционная, ПИД регулирует температуру изменяя скорость движения задвижки на открытие и закрытие ШИМ-ом. Процесс достаточно медленный, выход на уставку десятки минут. Мертвая зона, чтобы без нужды не дергать исполнительный механизм, когда более-менее установится.
    А у вас процесс идеально выходит на уставку без перерегулирования хотя бы в градус, два? Вот этот градус и можно по идее сделать зоной нечувствительности. За счет инерционности задвижки объект сам себя загонит к уставке и успокоится там.

Похожие темы

  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

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

Ваши права

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