Сообщество Engee

Измерение температуры при закалке стали

Автор
avatar-nkapyrinnkapyrin
Notebook

Измерение температуры при закалке стали

В данном примере показано, как использование блока "Термопара" позволяет моделировать измерение температуры стали во время закалки.

При закалке сталь нагревают до температуры выше температуры рекристаллизации, а затем быстро охлаждают, погружая в жидкость. Из-за высокой температуры невозможно использовать традиционные средства измерения температуры (термисторные или полупроводниковые датчики температуры, жидкостные термометры). Для измерения температур в таких суровых условиях в промышленности и в лабораториях используются термопары, которые преобразуют разность тепловых потенциалов в разность электрических потенциалов.

Обзор модели

Откроем модель thermocouple_quenching.

In [ ]:
cd(@__DIR__) # Переход в папку с примером
engee.open("thermocouple_quenching.engee");
image.png

В этой модели блок "Тепловая масса" моделирует стальной цилиндр нагретый до начальной температуры 850°C. Блок "Камера постоянного объема (ТЖ)" моделирует закалочную ванну и охлаждает цилиндр до 20°C посредством вынужденной конвекции.

Расчет и вывод графиков

В этом расчетном эксперименте мы будем изменять параметры разных блоков. На всякий случай еще раз выставим начальные параметры, с помощью которых мы получаем первые результаты.

In [ ]:
engee.set_param!("thermocouple_quenching/Термопара", "parameterization"=>"Type K (t≥0 degC)")
engee.set_param!("thermocouple_quenching/Термопара", "C_vector"=>"TypeK_Cvec")
engee.set_param!("thermocouple_quenching/Табличная функция одной переменной",
"Table"=>"TypeK_degC", "BreakpointsForDimension1"=>"TypeK_Volts")
engee.set_param!("thermocouple_quenching/Теплопередача конвекцией",
"h" => Dict("value" => 4000, "unit" => "W/(m^2*K)"))

Выполним модель:

In [ ]:
data = engee.run("thermocouple_quenching")
plot(data["TemperatureOut"].time, data["TemperatureOut"].value, leg=false, lw=2)
Out[0]:

Блок "Таблица поиска 1-D" связывает выходное напряжение блока "Термопара" с температурной шкалой, то есть позволяет перевести вольты в градусы. Выведем логарифмический график временной зависимости температуры термопары и температуры цилиндра и убедимся, что расчетные и фактические значения совпадают.

In [ ]:
tempOut = data["TemperatureOut"]
tempCylinder = data["Тепловая масса.T"]
plot( tempOut.time, tempOut.value, xaxis = (:log10, [10^-1, :auto]), lw=2 )
plot!( tempCylinder.time, tempCylinder.value .- 273.15, c=:red, ls=:dash, lw=2 )
Out[0]:

Как мы видим, после перевода в градусы Цельсия графики очень хорошо совпадают.

Посмотрим, как менялась температура жидкости в резервуаре.

In [ ]:
tempVolume = data["Камера постоянного объема (ТЖ).T"]
plot( tempVolume.time, tempVolume.value .- 273.15,
xaxis = (:log10, [10^-1, :auto]), lw=2, ls=:dashdot, leg=false )
Out[0]:

Модель свойств теплопроводной жидкости ограничена максимальными температурами, поэтому чтобы избежать перегрева, в модели прописаны достаточно большие значения объема охлаждающего резервуара и объем интерфейса между резервуаром и окружающей средой (блок "Бак").

Мы видим, что жидкость достигает температуры 52.1°C (325.3К), оставаясь в допустимых пределах, заданных следующими значениями:

In [ ]:
maxTemp = engee.get_param("thermocouple_quenching/Свойства теплопроводной жидкости (ТЖ)", "T_max_2D");
minTemp = engee.get_param("thermocouple_quenching/Свойства теплопроводной жидкости (ТЖ)", "T_min_2D");
println("Максимальная допустимая температура: ", maxTemp["value"], maxTemp["unit"])
println("Минимальная допустимая температура: ", minTemp["value"], minTemp["unit"])
Максимальная допустимая температура: 363.16K
Минимальная допустимая температура: 273.16K

Смена на термопару типа S (ТПП10)

Сейчас параметры блока "Термопара" соответствуют термопаре типа K (ТХА), и нелинейная характеристика для этого блока доступна в базе данных NIST ITS-90 [1]. Сохраним результаты для последующего сравнения:

In [ ]:
TypeK_tout = tempOut;
TypeK_vout = data["Термопара.p.v"];

Для расчета термопары типа S (ТПП10). переведем наш блок термопары в другой режим:

In [ ]:
engee.set_param!("thermocouple_quenching/Термопара", "parameterization"=>"Type B, E, J, K (t≤0 degC), N, R, S or T")

В качестве коэффициентов модели термопары подставим имеющиеся коэффициенты для термопары типа S:

In [ ]:
engee.set_param!("thermocouple_quenching/Термопара", "C_vector"=>"TypeS_Cvec")

Кроме этого изменим таблицу в блоке нелинейной коррекции ("Табличная функция одной переменной") на соответствующие:

In [ ]:
engee.set_param!("thermocouple_quenching/Табличная функция одной переменной",
"Table"=>"TypeS_degC", "BreakpointsForDimension1"=>"TypeS_Volts")

Запустим эту модель и тоже сохраним результаты для сравнения:

In [ ]:
data = engee.run("thermocouple_quenching")
plot(data["TemperatureOut"].time, data["TemperatureOut"].value, leg=false, lw=2)
Out[0]:
In [ ]:
TypeS_tout = data["TemperatureOut"];
TypeS_vout = data["Термопара.p.v"];

Теперь мы можем вывести выходные характеристики термопар обоих типов:

In [ ]:
plot( TypeS_vout.time, TypeS_vout.value, xaxis = (:log10, [10^-1, :auto]), ls=:dashdot, lw=2, label="Тип S" )
plot!( TypeK_vout.time, TypeK_vout.value, c=:red, ls=:dash, lw=2, label="Тип K" )
Out[0]:

Напряжение на положительном выходе термопар разных типов - разное. Но рассчитанные на выходе температурные измерения - совпадают.

In [ ]:
plot( TypeS_tout.time, TypeS_tout.value, xaxis = (:log10, [10^-1, :auto]), ls=:dashdot, lw=2, label="Тип S" )
plot!( TypeK_tout.time, TypeK_tout.value, c=:red, ls=:dash, lw=2, label="Тип K" )
Out[0]:

Изменение свойств теплопередачи

В этом примере параметр "Коэффициент удельной теплоемкости" блока "Тепловая масса" и "Коэффициент теплопередачи" блока "Теплопередача конвекцией" являются оценками, полученными в лабораторном исследовании масштабной модели промышленной закалки стального цилиндра в воде [2].

Для простоты эти параметры заданы константами. Для более точных результатов потребовалось бы задать их в виде функции от температуры (если данные доступны), но есть более простой путь. Можно провести моделирование с разными значениями этих параметров и получить диапазон оценок.

Установим параметр "Коэффициент теплопередачи" в блоке "Теплопередача конвекцией" равный 4000.

In [ ]:
engee.set_param!("thermocouple_quenching/Теплопередача конвекцией",
"h" => Dict("value" => 2000, "unit" => "W/(m^2*K)"))

Запустим модель и построим график.

In [ ]:
data = engee.run("thermocouple_quenching")

tempOut4000 = TypeK_tout;
tempOut2000 = data["TemperatureOut"]
plot( tempOut2000.time, tempOut2000.value, ls=:dash, lw=2, label="2000 W/(K*m)^2" )
plot!( tempOut4000.time, tempOut4000.value, c=:red, xaxis = (:log10, [10^-1, :auto]), lw=2, label="4000 W/(K*m)^2", ls=:dashdot )
Out[0]:

Заключение

Эта модель создана, чтобы точно измерить температуру стали при закалке с помощью термопары, там, где обычные датчики не работают. Чтобы улучшить результат, нужно использовать реальные зависимости коэффициента теплопередачи от температуры, а не постоянные значения.

Библиография

[1] Angela Y. Lee, NIST ITS-90 Thermocouple Database - SRD 60, National Institute of Standards and Technology, 2000. https://data.nist.gov/od/id/ECBCC1C1302A2ED9E04306570681B10748.

[2] Hasan, H. S., M. J. Peet, J. M. Jalil, and H. K. D. H. Bhadeshia. “Heat Transfer Coefficients during Quenching of Steels.” Heat and Mass Transfer 47, no. 3 (March 2011): 315–21. https://doi.org/10.1007/s00231-010-0721-4.