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

Тема: Несколько ПИД регуляторов.

  1. #1

    По умолчанию Несколько ПИД регуляторов.

    Здравствуйте. Помогите пожалуйста советом. Как мне запустить несколько ПИД регуляторов на одном ПЛК 150? Один регулятор работает пекрасно, стоит вставить второй регулятор как выход первого начинает влиять на выход второго.
    Пример:
    VAR REG_PID: PID;
    END_VAR
    VAR_INPUT
    ACTUAL: REAL; (* фактическая переменная величины, процесса *)
    SET_POINT: REAL; (* желаемая величина, уставка *)
    KP: REAL; (* прямая пропорциональность const. (P) *)
    TN: REAL; (* время интегрирования (I) в sec *)
    TV: REAL; (* время дифференцирования (D) в sec *)
    Y_MANUAL: REAL; (* выходная величина в ручном режиме если MANUAL=TRUE *)
    Y_OFFSET: REAL; (* компенсация для манипулирующей переменной *)
    Y_MIN: REAL; (* минимальная величина для манипулирующей переменной *)
    Y_MAX: REAL; (* максимальная величина для манипулирующей переменной *)
    MANUAL: BOOL; (* ИСТИНА: руководство: Y - не под влиянием диспетчера, ЛОЖ: диспетчер определяет Y *)
    RESET: BOOL; (* reset: set Y output to Y_OFFSET and reset integral part *)
    END_VAR
    VAR_OUTPUT
    Y: REAL;(* манипулирующая переменная, установившая величину *)
    LIMITS_ACTIVE: BOOL := FALSE; (* true set value would exceed limits Y_MIN, Y_MAX *)
    OVERFLOW: BOOL := FALSE; (* overflow in integral part *)
    END_VAR
    -------------------------------------------------------------------------
    CAL REG_PID(ACTUAL :=UROV1 , SET_POINT :=UST1 , KP := PROP1, TN := INTEG1, TV := 0, Y_MANUAL :=VIXOD1 , Y_OFFSET := 0, Y_MIN :=MIN1 , Y_MAX :=MAX1 , MANUAL :=AVTRUCH1 , RESET := FALSE)
    LD REG_PID.Y
    ST VIXOD1
    LD REG_PID.Y
    MUL 10
    REAL_TO_WORD
    ST KL1
    CAL REG_PID(ACTUAL :=UROV2 , SET_POINT :=UST2 , KP := PROP2, TN := INTEG2, TV := 0, Y_MANUAL :=VIXOD2 , Y_OFFSET := 0, Y_MIN :=MIN2 , Y_MAX :=MAX2 , MANUAL :=AVTRUCH2 , RESET := FALSE)
    LD REG_PID.Y
    ST VIXOD2
    LD REG_PID.Y
    MUL 10
    REAL_TO_WORD
    ST KL2
    CAL REG_PID(ACTUAL :=UROV3 , SET_POINT :=UST3 , KP := PROP3, TN := INTEG3, TV := 0, Y_MANUAL :=VIXOD3 , Y_OFFSET := 0, Y_MIN :=MIN3 , Y_MAX :=MAX3 , MANUAL :=AVTRUCH3 , RESET := FALSE)
    LD REG_PID.Y
    ST VIXOD3
    LD REG_PID.Y
    MUL 10
    REAL_TO_WORD
    ST KL3
    Заранее благодарен!

  2. #2

    По умолчанию

    Создайте несколько экземпляров ПИД - например REG_PID: array [1..3] of PID; работайте с нужным экземпляром. PID - это не функция, а Функциональный Блок (ФБ), который хранит в себе данные между вызовами.

Ваши права

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