Страница 1 из 2 12 ПоследняяПоследняя
Показано с 1 по 10 из 11

Тема: Измерение и регулирование скорости нагрева

  1. #1

    По умолчанию Измерение и регулирование скорости нагрева

    Здравствуйте, изучаю codesys не так давно, пишу свою программу для управления печью. Запнулся на этапе скоростных параметров. Необходимо измерить скорость нагрева, и при необходимости её ограничить. Никак не могу реализовать данную функцию, может кто сталкивался?
    Пробовал измерять скорость через массив, каждую единицу времени записывая показания температуры, а затем искать разницу, но что-то все равно не получается адекватный результат получить.
    А в дальнейшем по ограничению скорости вообще идей нет...

  2. #2

    По умолчанию

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

  3. #3

    По умолчанию

    То есть достаточно только двух показаний? Текущей температуры, и скажем, температуры секунду назад? То есть массивы ни к чему? И выборка из 10-20 значений бесполезна?
    То, что нужно управлять мощностью регулятора, это понятно. Не понятно, как его ограничить, чтобы, к примеру он грел не более 1 град./мин на всем этапе нагрева.

  4. #4

    По умолчанию

    Частота выборок определяется тепловой инерционностью объекта регулирования. Если температура заметно меняется за секунду - значит нужно вычислять скорость ежесекундно и корректировать мощность соответственно. Для чего накапливать массив и как потом интерпретировать полученные данные - не совсем понятно. Что делать с мощностью во время накопления данных? Это лишь внесёт дополнительную задержку в процесс регулирования.
    Мне представляется так: за заданный интервал времени вычисляем скорость изменения температуры и полученную величину подаём на вход ПИД-регулятора, на другой вход подаём задание скорости, ПИД регулирует мощность нагревателя.
    Последний раз редактировалось Eugene.A; 27.11.2018 в 00:00.

  5. #5

    По умолчанию

    Производная функции - скорость изменения физической величины. Вычисляя производную находите скорость изменения температуры. Блок Derivative вроде бы...
    Последний раз редактировалось ferret_maybe; 27.11.2018 в 21:01.

  6. #6

    По умолчанию

    Цитата Сообщение от ferret_maybe Посмотреть сообщение
    Производная функции - скорость изменения физической величины. Вычисляя производную находите скорость изменения температуры. Блок Derivative вроде бы...
    Попробовал для интересу этот блок Derivative, както странно он работает:
    тенденцию изменений (нагрев\охлаждение\удержание) он отображает точно, а вот количественные показатели странные - чтобы привести к боле менее реальным показаниям, вызывая блок раз в секунду, параметр для TM получилось подобрать 20 (судя по документам миллисекунд).

    Лучше как ТС предлагает, самому собирать массив и аппроксимируй как хочешь, на любой диапазон времени...

  7. #7

    По умолчанию

    Цитата Сообщение от Crusash Посмотреть сообщение
    Попробовал для интересу этот блок Derivative, както странно он работает:
    тенденцию изменений (нагрев\охлаждение\удержание) он отображает точно, а вот количественные показатели странные - чтобы привести к боле менее реальным показаниям, вызывая блок раз в секунду, параметр для TM получилось подобрать 20 (судя по документам миллисекунд).

    Лучше как ТС предлагает, самому собирать массив и аппроксимируй как хочешь, на любой диапазон времени...
    Попробуйте стандартную формулу дифференцирования:
    Код:
    OUT:=TD*(IN-OLD_IN)/CYCLE;
    OLD_IN:=IN;
    CYCLE - период вызова данной функции;
    TD - время дифференцирования.
    Размерности CYCLE и TD естественно должны совпадать.
    То есть вы смотрите на сколько изменилась переменная за время CYCLE (например 100мс) и экстраполируя определяете на сколько она изменится за время TD (например 1 сек = 1000мс) при сохранении текущей скорости.

  8. #8
    Пользователь
    Регистрация
    20.02.2008
    Адрес
    Тверь
    Сообщений
    506

    По умолчанию

    Когда вы вычисляете скорость изменения температуры, вы делите 0 на 0, микроизменение температуры на секундный интервал времени. Чтобы повысить точность, нужно увеличить время между измерениями и фильтровать результат. Но это приведёт к задержкам измерения, что снижает точность регулирования и может вызвать автоколебания регулятора. Проще настроить регулятор температуры и с заданной скоростью изменять его уставку, заданная скорость нагрева получится автоматически, а погрешности её вычисления не будут влиять на работу регулятора.

  9. #9

    По умолчанию

    Цитата Сообщение от rwg Посмотреть сообщение
    Когда вы вычисляете скорость изменения температуры, вы делите 0 на 0, микроизменение температуры на секундный интервал времени. Чтобы повысить точность, нужно увеличить время между измерениями и фильтровать результат. Но это приведёт к задержкам измерения, что снижает точность регулирования и может вызвать автоколебания регулятора. Проще настроить регулятор температуры и с заданной скоростью изменять его уставку, заданная скорость нагрева получится автоматически, а погрешности её вычисления не будут влиять на работу регулятора.
    Подтверждаю, регулировку скорости много проще делать изменением уставки, но и подсчет скорости не помешает. Я это делаю накапливая массив:

    Код:
    TYPE mnt_temp_time :
    STRUCT
    	temp:REAL;
    	mt_time:DWORD;
    END_STRUCT
    END_TYPE
    
    VAR
    (*переменные подсчета скорости температуры*)
    	arr_tt:ARRAY [0..20] OF mnt_temp_time;(*массив меток времени и температур для расчёта скорости*)
    	j:INT:=0;
    	j2:INT:=0;
    	n:INT:=20;
    END_VAR
    
    (*подсчет скорости изменения температуры*)
    IF NOT(arr_tt[j].temp=mashina.tek_t) AND (timer.dw_time_ms-arr_tt[j].mt_time)>1000 THEN
    	IF j=n THEN j:=0;
    	ELSE j:=j+1; END_IF
    	arr_tt[j].temp:=mashina.tek_t;
    	arr_tt[j].mt_time:=timer.dw_time_ms;
    	IF j=n THEN j2:=0;
    	ELSE j2:=j+1;END_IF
    	mashina.spid_temp2:=((arr_tt[j].temp - arr_tt[j2].temp)/
    		(DWORD_TO_REAL(arr_tt[j].mt_time)-DWORD_TO_REAL(arr_tt[j2].mt_time)))*60000;
    END_IF

  10. #10

    По умолчанию

    Спасибо! Помогло! А не подскажете, как регулировку скорости делаете?

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

Похожие темы

  1. Тиристорный модуль для регулировки скорости нагрева
    от Gennadiy550 в разделе Подбор Оборудования
    Ответов: 15
    Последнее сообщение: 06.12.2016, 10:18
  2. Регулирование нагрева ёмкости с рубашкой
    от Crew в разделе Помощь Разработчикам
    Ответов: 11
    Последнее сообщение: 23.11.2016, 04:32
  3. Регулирование скорости нагрева
    от Ильнур в разделе Эксплуатация
    Ответов: 8
    Последнее сообщение: 18.03.2013, 11:47
  4. Регулирование температуры нагрева тэн
    от Сомов Сергей в разделе Подбор Оборудования
    Ответов: 6
    Последнее сообщение: 19.12.2012, 09:54
  5. измерение скорости
    от незарегистрированный в разделе Подбор Оборудования
    Ответов: 9
    Последнее сообщение: 21.11.2007, 08:20

Ваши права

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