private Double GetHeatCapacityBySteelType(Double temp, SteelTypeProperty steelType) { if (steelType == SteelTypeProperty.HighCarbon || steelType == SteelTypeProperty.MiddleCarbon || steelType == SteelTypeProperty.LowCarbon) { return(temp < 800 ? (0.2679 * temp + 444.71) : (-0.0286 * temp + 719)); } else if (steelType == SteelTypeProperty.Stainless) { return(-0.0002 * Math.Pow(temp, 2) + 0.4275 * temp + 405.57); } else if (steelType == SteelTypeProperty.Heatproof) { return(0.0808 * temp + 500.19); } return(Double.NaN); }
private Double GetThermalConductivityBySteelType(Double temp, SteelTypeProperty steelType) { switch (steelType) { case SteelTypeProperty.LowCarbon: return(268.55 * Math.Pow((temp), -0.315)); case SteelTypeProperty.MiddleCarbon: return(0.00000005 * Math.Pow(temp, 3) - 0.00007 * Math.Pow(temp, 2) + 0.0036 * temp + 49.748); case SteelTypeProperty.HighCarbon: return(0.00003 * Math.Pow(temp, 2) - 0.0578 * temp + 54.196); case SteelTypeProperty.Stainless: return(0.000000008 * Math.Pow(temp, 3) - 0.000009 * Math.Pow(temp, 2) - 0.0007 * temp + 28.189); case SteelTypeProperty.Heatproof: return(0.0161 * temp + 13.269); default: return(Double.NaN); } }
/// <summary> /// Вычисляет продолжительность выдержки в сечении 3 /// </summary> /// <param name="t3m">Температура массы заготовки в сечении 3</param> /// <param name="t2m">Температура массы заготовки в сечении 2</param> /// <param name="t3pv">Температура верхней поверхности заготовки в сечении 3</param> /// <param name="t3pn">Температура нижней поверхности заготовки в сечении 3</param> /// <param name="t2p">Температура поверхности заготовки в сечении 2</param> /// <param name="t2c">Минимальная температура заготовки перед заходом на сплошной под (в сечении 2)</param> /// <param name="S">Толщина заготовки</param> /// <param name="steelType">Тип стали: 0 - литая кипящая, 1 - литая спокойная, 2 - кованая или прокатанная</param> /// <returns></returns> public Double GetTimeForZone3(Double t3m, Double t2m, Double t3pv, Double t3pn, Double t2p, Double t2c, Double S, SteelTypeForDensity steelType, SteelTypeProperty steel) { //ПОКА ТОЛЬКО МАЛОУГЛЕРОДИСТАЯ СТАЛЬ //Средняя теплоемкость заготовки Double Cm3 = GetHeatCapacityBySteelType(t3m, steel); Double Cm2 = GetHeatCapacityBySteelType(t2m, steel); Double Cm = (Cm3 * t3m - Cm2 * t2m) / (t3m - t2m); //Средняя теплопроводность заготовки Double lambda = (GetThermalConductivityBySteelType(t3m - 100, steel) + GetThermalConductivityBySteelType(t2m - 100, steel)) / 2; //Средняя температуропроводность Int32 p; switch (steelType) { case SteelTypeForDensity.CastBoiling: p = 6600; break; case SteelTypeForDensity.CastQuiet: p = 7600; break; case SteelTypeForDensity.ForgedLaminated: p = 7850; break; default: throw new InvalidOperationException("Неверно задан тип стали"); } Double Am = lambda / Cm / p; //Прогреваемая сверху толщина заготовки Double Sv = (-0.92 * 0.5 + 1.052) * S; Double Sn = S - Sv; return((Math.Pow(S, 2) / 2.467 / Am) * Math.Log(1.621 * (Math.Pow(S / Sv, 2) * 0.637 - S * Sn / Math.Pow(Sv, 2)) * ((t2p - t2c) / (t3pv - t3pn)))); }
/// <summary> /// Вычисляет время нагрева заготовки в зоне 2 /// </summary> /// <param name="S">Высота заготовки</param> /// <param name="t1">Температура заготовки в сечении 1</param> /// <param name="t2">Температура заготовки в сечении 2</param> /// <param name="q">Средний тепловой поток в зоне 2</param> /// <param name="steelType">Тип стали: 0 - литая кипящая, 1 - литая спокойная, 2 - кованая или прокатанная</param> /// <returns></returns> public Double GetHeatingTimeinZone2(Double S, Double t1, Double t2, Double q, SteelTypeForDensity steelType, SteelTypeProperty steel) { //Верхняя прогреваемая толщина заготовки Double Sv = (-0.92 * 0.5 + 1.052) * S; //0.5 - тепловая мощность низа печи Double Cm2 = GetHeatCapacityBySteelType(t2, steel); Double Cm1 = GetHeatCapacityBySteelType(t1, steel); Double Cm = (Cm2 * t2 - Cm1 * t1) / (t2 - t1); //Плотность нагреваемой стали Double p; switch (steelType) { case SteelTypeForDensity.CastBoiling: p = 6600; break; case SteelTypeForDensity.CastQuiet: p = 7600; break; case SteelTypeForDensity.ForgedLaminated: p = 7850; break; default: throw new InvalidOperationException("Неверно задан тип стали"); } return(Sv * Cm * p * (t2 - t1) / q); }
/// <summary> /// Вычисляет температуру массы верхней части заготовки в сечении 1 /// </summary> /// <param name="S">Высота заготовки</param> /// <param name="surfaceT">Температуры верхней поверхности заготовки</param> /// <param name="qm">Суммарный тепловой поток в сечении 1</param> /// <returns></returns> public Double GetMetalTemperatureInSection1(Double S, Double surfaceT, Double qm, SteelTypeProperty steeltype) { //Верхняя прогреваемая толщина заготовки //Double Sv = (-0.92 * 0.5 + 1.052) * S; //0.5 - тепловая мощность низа печи ////Минимальная температура перед его заходом на сплошной под //Double tc = surfaceT - ((qm * Sv) / (2 * (268.55 * Math.Pow((surfaceT - 75), -0.315)))); Double tc = GetMinimumMetalTemperatureInSection2(S, surfaceT, qm, steeltype); return(surfaceT - 2 * (surfaceT - tc) / 3); }
/// <summary> /// Вычисляет минимальную температуру заготовки перед заходом на сплошной под (в сечении 2) /// </summary> /// <param name="S">Высота заготовки</param> /// <param name="surfaceT">Температура верхней поверхности заготовки</param> /// <param name="qm">Суммарный тепловой поток в сечении 2</param> /// <returns></returns> public Double GetMinimumMetalTemperatureInSection2(Double S, Double surfaceT, Double qm, SteelTypeProperty steelType) { //Верхняя прогреваемая толщина заготовки Double Sv = (-0.92 * 0.5 + 1.052) * S; //0.5 - тепловая мощность низа печи return(surfaceT - ((qm * Sv) / (2 * (GetThermalConductivityBySteelType(surfaceT - 75, steelType))))); }