Показано с 1 по 9 из 9

Тема: Использование ФБ VALVE_REG_NO_POS

  1. #1
    Пользователь
    Регистрация
    22.12.2006
    Адрес
    Тихое зимовье
    Сообщений
    182

    По умолчанию Использование ФБ VALVE_REG_NO_POS

    Возможно использование VALVE_REG_NO_POS без математической модели задвижки?
    Если нет, то как можно сделать управление задвижкой без датчика положения и внешних конечников (внутренние на ограничение крайних положений задвижки имеются) по типу ТРМ12? - просто делать ШИМ на закрытие или открытие в зависимости от требуемой мощности.
    Задача- регулирование температуры воды, задвижка 3-х ходовая.
    Проблема в нарушении синхронизации задвижки, так как по проекту помимо ПИД регулятора должно быть предусмотренно и ручное управление, а при этом положение задвижки на момент включения ПИДа - неизвестно и синхронизацию привязать не к чему.
    Последний раз редактировалось AVit; 07.11.2008 в 07:29.

  2. #2

    По умолчанию

    Вообщем примерно так, но имеейте ввиду, что если КЗР не предусматривает останов на крайних положениях (внутренние концевики) это надо предусмотреть

    FUNCTION_BLOCK PWM_VALV
    VAR_INPUT
    pwr:REAL; (* Мощность -100..100*)
    END_VAR
    VAR_OUTPUT
    Open:BOOL; (* Работа на открытие *)
    Close:BOOL; (* Работа на закрытие*)
    END_VAR
    VAR
    initial:BOOL:=TRUE; (* Начальная инициализация*)
    start_on:TON; (* Работа периода ШИМ*)
    (*
    __ __
    | | Период ШИМ | |
    -----------------------------| |---------------------------------------| |---------------
    ШИМ Период
    *)
    stop_on:TON; (* Работа во ВКЛ состоянии - инверсно .Q*)

    (*
    |--------------------|
    ВКЛ ШИМ | |
    ---------------------------------***********| |************
    *)

    tm_on:TIME; (* Время работы вых. элемента *)
    prev_pwr:REAL:=0;
    tmp_r: REAL;
    tmp_period:REAL;
    tmp_r_dwWORD;
    same_add:REAL;
    END_VAR
    IF initial THEN
    start_on.IN:=FALSE;
    stop_on.IN:=FALSE;
    stop_on.PT:=t#1s;
    initial:=FALSE;
    END_IF
    IF pwr<>prev_pwr THEN

    prev_pwr:=pwr*100+same_add;
    tmp_r_dw:=REAL_TO_DWORD(10*MIN(ABS(pwr*100.0+same_ add),100.0));(* период шим в Миллисек*)

    tm_on:=DWORD_TO_TIME(tmp_r_dw); (* Перевод Real в Миллисек*)
    IF tm_on<T#20ms THEN (* Проверка мин длит импульса*)
    tm_on:=t#0s;
    same_add:=pwr;
    ELSE
    same_add:=0;
    END_IF
    same_add:=0.0;

    END_IF
    start_on(pt:=t#1s);
    start_on.IN:=NOT start_on.Q;

    IF start_on.Q THEN
    stop_on.IN:=FALSE;
    stop_on.PT:=tm_on;
    END_IF
    stop_on();
    stop_on.IN:=TRUE;
    IF pwr<>0.0 THEN
    IF pwr<0 THEN
    Open:=FALSE;
    Close:=(NOT stop_on.Q) OR (pwr=-1.0);
    ELSE
    Open:=NOT stop_on.Q OR (pwr=1.0);
    Close:=FALSE;
    END_IF
    ELSE
    Open:=FALSE;
    Close:=FALSE;
    END_IF

  3. #3
    Пользователь
    Регистрация
    22.12.2006
    Адрес
    Тихое зимовье
    Сообщений
    182

    По умолчанию

    Спасибо, буду пробывать.

    мне вот это место непонятно:
    IF tm_on tm_on:=t#0s;
    same_add:=pwr;
    ELSE
    same_add:=0;
    END_IF
    Объясните пожалуйста
    Последний раз редактировалось AVit; 07.11.2008 в 13:56.

  4. #4
    Пользователь
    Регистрация
    22.12.2006
    Адрес
    Тихое зимовье
    Сообщений
    182

    По умолчанию

    Уф, разобрался,
    только переделал под входной диапазон сигнал (-100...100), был входной диапазон (-1...1).
    Респект прогеру, кто это писал, сделано очень оригинально...
    Вот только у меня сомнения, может ограничить нижний предел импульса включения где нибудь в пределах 0.05-0.1 сек, во избежания дребезга релюшки или не стоит?

  5. #5

    По умолчанию

    Уф, разобрался,
    подскажи че там? а то ошибку на этом месте пишет

  6. #6

    По умолчанию

    1) Ограничение мин. импульса надо ставить исходя из паспортных данных КЗР, промежуточного реле и реле ПЛК(20мс)
    2) Там было что то вроде IF tm_on>t#1s then. Видимо при копировании затерлось
    3) спасибо , рад помочь

  7. #7
    Пользователь
    Регистрация
    22.12.2006
    Адрес
    Тихое зимовье
    Сообщений
    182

    По умолчанию

    После ответа Олега я эту часть переделал так:

    IF tm_on < t # 20 ms THEN (*ограничение импульса меньше 20мс*)
    tm_on:=T#0ms;
    ELSE
    tm_on:=tm_on;
    END_IF

    а то что было закоментировал.
    переменную same_add убрал совсем...
    Последний раз редактировалось AVit; 08.11.2008 в 10:45. Причина: ну не нравятся движку форума символы < и # (при вставке убрать пробелы)

  8. #8

    По умолчанию

    Малышев Олег, AVit спасибо.

  9. #9

    По умолчанию

    выложите пожалуйста пример проекта того что у вас получилось.

Ваши права

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