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

Тема: Настройка ПИД в ПР200 (уставка/время)

  1. #1

    По умолчанию Настройка ПИД в ПР200 (уставка/время)

    Привет. Тут пытаюсь построить сушило
    Есть 11 параметров температуры (в документе)
    Уставки по температуре вроде дошло до меня как поставить...
    А вот время нагрева до определенной температуры - нет... Не подскажите как отрегулировать ПИД с учетом времени и температуры?
    Вложения Вложения

  2. #2

    По умолчанию

    Цитата Сообщение от Anthony.Alekseev Посмотреть сообщение
    Привет. Тут пытаюсь построить сушило
    Есть 11 параметров температуры (в документе)
    Уставки по температуре вроде дошло до меня как поставить...
    А вот время нагрева до определенной температуры - нет... Не подскажите как отрегулировать ПИД с учетом времени и температуры?
    Вам уже ответили в соседней теме, зачем столько тем создавать? https://owen.ru/forum/showthread.php?t=40181

  3. #3

    По умолчанию

    тот ответ мне не помог

  4. #4

    По умолчанию

    Специально для Вас, Антон.
    Owen.jpg

    Код:
    function Ust: udint;
        var_input 
            tm : udint; 
        end_var
        
        Ust := 0;
        if tm > 0   then Ust := tm * 50 / 30; end_if
        if tm > 30  then Ust := 50; end_if
        if tm > 90  then Ust := 50 + (tm - 90) * 50 / 30; end_if
        if tm > 120 then Ust := 100; end_if
        if tm > 180 then Ust := 100 + (tm - 180) * 10 / 30; end_if
        if tm > 210 then Ust := 110; end_if
        if tm > 300 then Ust := 110 + (tm -300) * 20 / 30; end_if
        if tm > 330 then Ust := 130; end_if
        if tm > 420 then Ust := 130 + (tm - 420) * 20 / 30; end_if
        if tm > 450 then Ust := 150; end_if
        if tm > 560 then Ust := 0; end_if
     
    end_function

  5. #5

    По умолчанию

    FUNCTION_BLOCK FB_PEKA_TOP2
    VAR_INPUT
    start : BOOL; // Стартовый сигнал
    currentTemp : REAL; // Фактическая температура (в градусах)
    elapsedTime : REAL; // Прошедшее время (в секундах)

    // Уставки температуры и времени
    tempSetpoint1 : REAL;
    tempSetpoint2 : REAL;
    tempSetpoint3 : REAL;
    tempSetpoint4 : REAL;
    tempSetpoint5 : REAL;
    tempSetpoint6 : REAL;
    tempSetpoint7 : REAL;
    tempSetpoint8 : REAL;
    tempSetpoint9 : REAL;
    tempSetpoint10 : REAL;
    tempSetpoint11 : REAL;
    tempSetpoint12 : REAL;

    timeSetpoint1 : REAL;
    timeSetpoint2 : REAL;
    timeSetpoint3 : REAL;
    timeSetpoint4 : REAL;
    timeSetpoint5 : REAL;
    timeSetpoint6 : REAL;
    timeSetpoint7 : REAL;
    timeSetpoint8 : REAL;
    timeSetpoint9 : REAL;
    timeSetpoint10 : REAL;
    timeSetpoint11 : REAL;
    timeSetpoint12 : REAL;

    END_VAR

    VAR_OUTPUT
    Ust : REAL; // Уставка температуры для ПИД (в градусах)
    done : BOOL; // Сигнал завершения всех этапов
    currentStage : UDINT; // Текущий этап (цикл)
    END_VAR

    VAR
    stage : UDINT := 1; // Текущий этап (начинается с 1)
    targetTemp : REAL := 0; // Целевая температура для текущего этапа
    targetTime : REAL := 0; // Время для достижения целевой температуры
    stageStartTime : REAL := 0; // Время начала текущего этапа
    heatingTimeElapsed : REAL := 0; // Прошедшее время на текущем этапе
    tempRate : REAL := 0; // Скорость изменения температуры на этапе
    stageTimeReached : BOOL := FALSE; // Флаг, что время этапа закончилось
    END_VAR

    // Основная логика
    IF start THEN
    // Определение текущих целей на основе этапа
    CASE stage OF
    1:
    targetTemp := tempSetpoint1;
    targetTime := timeSetpoint1;
    2:
    targetTemp := tempSetpoint2;
    targetTime := timeSetpoint2;
    3:
    targetTemp := tempSetpoint3;
    targetTime := timeSetpoint3;
    4:
    targetTemp := tempSetpoint4;
    targetTime := timeSetpoint4;
    5:
    targetTemp := tempSetpoint5;
    targetTime := timeSetpoint5;
    6:
    targetTemp := tempSetpoint6;
    targetTime := timeSetpoint6;
    7:
    targetTemp := tempSetpoint7;
    targetTime := timeSetpoint7;
    8:
    targetTemp := tempSetpoint8;
    targetTime := timeSetpoint8;
    9:
    targetTemp := tempSetpoint9;
    targetTime := timeSetpoint9;
    10:
    targetTemp := tempSetpoint10;
    targetTime := timeSetpoint10;
    11:
    targetTemp := tempSetpoint11;
    targetTime := timeSetpoint11;
    12:
    targetTemp := tempSetpoint12;
    targetTime := timeSetpoint12;
    ELSE
    done := TRUE; // Завершение, если этап больше 12
    stage := 12; // Установка текущего этапа на последний
    END_CASE;

    // Обновление текущего этапа на выход
    currentStage := stage;

    // Вычисление времени, прошедшего с начала текущего этапа
    heatingTimeElapsed := elapsedTime - stageStartTime;

    // Расчет скорости изменения температуры (градусы в секунду)
    IF targetTime > 0 THEN
    tempRate := (targetTemp - currentTemp) / targetTime;
    ELSE
    tempRate := 0;
    END_IF

    // Обновление уставки на основании прошедшего времени
    IF heatingTimeElapsed < targetTime THEN
    // Постепенное увеличение уставки температуры для PID
    Ust := currentTemp + tempRate * heatingTimeElapsed;
    ELSE
    // Если этап завершён, уставка равна целевой температуре
    Ust := targetTemp;
    stageTimeReached := TRUE; // Отметка, что время этапа завершено
    END_IF

    // Переход к следующему этапу только если температура достигла целевой
    IF stageTimeReached AND (currentTemp >= targetTemp) THEN
    stage := stage + 1; // Переход на следующий этап
    stageStartTime := elapsedTime; // Обновление времени начала этапа
    stageTimeReached := FALSE; // Сброс флага времени этапа
    END_IF

    // Если этап больше 12, завершение
    IF stage > 12 THEN
    done := TRUE;
    ELSE
    done := FALSE;
    END_IF

    ELSE
    // Сброс параметров при отсутствии сигнала старта
    Ust := 0;
    stage := 1;
    currentStage := stage; // Сброс текущего этапа
    stageStartTime := elapsedTime;
    heatingTimeElapsed := 0;
    done := FALSE;
    END_IF
    END_FUNCTION_BLOCK

Похожие темы

  1. Время в ПР200
    от Safron в разделе Среда программирования OWEN Logic
    Ответов: 11
    Последнее сообщение: 10.12.2023, 07:09
  2. Как в ПР200 вывести время на экран
    от os1967 в разделе Программируемые реле
    Ответов: 5
    Последнее сообщение: 10.12.2018, 00:48
  3. Время цикла ПР200
    от amandra в разделе Среда программирования OWEN Logic
    Ответов: 3
    Последнее сообщение: 25.10.2018, 12:00
  4. Blink и время тика. ПР200
    от Rymaks в разделе Программируемые реле
    Ответов: 3
    Последнее сообщение: 12.03.2018, 13:57
  5. Настройка ПР200 в качестве Master-устройства
    от alexfromnn в разделе Программируемые реле
    Ответов: 2
    Последнее сообщение: 26.10.2016, 16:13

Ваши права

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