Страница 1 из 3 123 ПоследняяПоследняя
Показано с 1 по 10 из 21

Тема: Работа с библиотекой PID_Regulators

  1. #1

    Question Работа с библиотекой PID_Regulators

    Здравствуйте! Скажите, пожалуйста, как пользоваться функциями этой библиотеки в языке ST? Я пишу: OUT_VAL:=PID_2POS_IM_ANR(PV,PV_TIME,SP,START_ANR,Y DOP,_IMIN,_IMAX)

    CoDeSys ругается: PID_2POS_IM_ANR is not a function

  2. #2

    По умолчанию

    Ау! Почему вы молчите?

  3. #3

    По умолчанию

    Напишите в разделе объявлений

    PID: PID_2POS_IM_ANR;

    а в программе
    OUT_VAL:=PID(PV,PV_TIME,SP,START_ANR,Y DOP,_IMIN,_IMAX);

    Еще проверьте, добавили ли Вы библиотеку с ПИД-регуляторами в проект

    И симтомы должны пройти
    Последний раз редактировалось Партизан; 09.10.2008 в 11:42.

  4. #4

    Thumbs up

    Здравствуйте.
    К сожалению в техподдержке работают не 4-х рукие шивы, поэтому опять же к сожалению несколько дел делать сразу не получается.
    А в случае необходимости оперативного ответа можно звонить в техподдержку.

    Функциональные блоки из данной библиотеки подключаются точно так же, как функциональные блоки из любой другой библиотеки.
    Более подробно об этом можно почитать в Мануале на CoDeSys или в Help-e, которые русифицированы.
    1. Подключаете библиотеку.
    2. С помощью F2 выбираете из стандартных функциональных блоков нужный Вам блок - все переменные блока появляются автоматически.
    3. Меняете имя блока,
    4. Объявляете экземпляр ФБ

  5. #5

    По умолчанию

    Спасибо, после некоторых "ковыряний" начало работать... но не так, как нужно. PLC_configuration настроил также, как и в примерах использования (файл "Описание библиотеки PID_Regulators.pdf"). Привожу код программы:

    PROGRAM PLC_PRG
    VAR SP1,YDOP1,_IMIN1,_IMAX1,OUT_VAL:REAL;
    START_ANR1:BOOL;
    PID: PID_2POS_IM_ANR; i:INT;
    END_VAR

    SP1:=40;
    START_ANR1:=TRUE;
    YDOP1:=2;
    _IMIN1:=0;
    _IMAX1:=100;

    PID(PV:=PV1, PV_TIME:=PV_TIME1, SP:=SP1, START_ANR:=START_ANR1, YDOP:=YDOP1, _IMIN:=_IMIN1, _IMAX:=_IMAX1);
    heater:=REAL_TO_WORD(PID.OUT_VAL/100);

    (*PV1 - текущая температура*)

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

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

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

  6. #6

    По умолчанию

    1. Строку START_ANR1:=TRUE; надо убрать. START_ANR1 запускает автонастройку. Это делается не так часто, поэтому можно эту переменную менять вручную.

    2. Если верить документации к этой функции, на выходе вы получаете сигнал от -100 до +100. Что вы делаете: просто делите это значение на 100, т.е. на выходе от -1 до +1.

    А потом преобразуете все это дело в WORD. Округление всегда идет вниз. Поясню: когда сигнал с ПИД-регулятора равен 100, на выход (heater) вы подаете 1, т.е. включаете его. Как только сигнал становится меньше 100, на heater всегда подается 0, и он выключается.

    Что надо сделать: перевести аналоговый сигнал с ПИД-регулятора в ШИМ, то бишь чем больше сигнал, тем длиннее импульс на включение нагревателя.

    Например:
    period: TIME:=t#5s; (*Период ШИМ*)
    blinker: BLINK; (это в объявлениях)

    IF PID.OUT_VAL>0 THEN
    imp_on:= PID.OUT_VAL*period/100; (*Длина импульса на включение*)
    ELSE imp_on:=0;
    END_IF

    imp_off:= period - imp_on; (*Длина импульса на отключение*)

    blinker(ENABLE:=TRUE, TIMELOW:=imp_off, TIMEHIGH:=imp_on, OUT=> heater);

    Кажется так. Проверить времени нет. И обязательно включите в проект UTIL.lib
    Последний раз редактировалось Партизан; 09.10.2008 в 15:52.

  7. #7

    По умолчанию

    Большое спасибо за столь подробную консультацию! Завтра обязательно все попробую и о результатах отпишусь!

  8. #8

    Question

    period: TIME:=t#5s; (*Период ШИМ*)
    А как определить период? Или он подбирается в каждом конкретном случае?

  9. #9

    Thumbs up

    Период ШИМ определяется Вами.
    Сильное увеличение времени ухудшает регулирование.
    Сильно малое число сильно нагружает исполнительный механизм.

  10. #10

    По умолчанию

    Здравствуйте еще раз! Попробовал пример, выложенный ПАРТИЗАНом. Вроде все хорошо регулируется. Спасибо ОГРОМНОЕ вам за помощь! И еще, если не трудно, объясните, пожалуйста, смысл понятий "МИНИМУМ ИНТЕГРАЛЬНОЙ СОСТАВЛЯЮЩЕЙ" и "МАКСИМУМ ИНТЕГРАЛЬНОЙ СОСТАВЛЯЮЩЕЙ" и какие значения им лучше задать?

Страница 1 из 3 123 ПоследняяПоследняя

Ваши права

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