Ejemplo n.º 1
0
        //Получение параметров насыщенного пара по давлению
        public bool GetSaturationParam(ref SaturationParam ResultParam, double Pressure)
        {
            if (DBCon == null) return false;

            OdbcCommand DBCommand = DBCon.CreateCommand();		//Объект для выполнения запросов к базе данных
            OdbcDataReader DBReader;							//Объект для чтения данных
            SaturationParam BeforeParam, AfterParam;

            try
            {
                DBCommand.CommandText = "SELECT TOP 1 * FROM SaturatedSteam WHERE Рнас <= " + Pressure.ToString().Replace(',','.') + " ORDER BY Рнас DESC";
                DBReader = DBCommand.ExecuteReader();
                DBReader.Read();
                    BeforeParam.Pressure	  = DBReader.GetDouble(1);
                    BeforeParam.Temperature   = DBReader.GetDouble(2);
                    BeforeParam.VolumeWater   = DBReader.GetDouble(3);
                    BeforeParam.VolumeSteam   = DBReader.GetDouble(4);
                    BeforeParam.EnthalpyWater = DBReader.GetDouble(5);
                    BeforeParam.EnthalpySteam = DBReader.GetDouble(6);
                    BeforeParam.Heat		  = DBReader.GetDouble(7);
                DBReader.Close();

                DBCommand.CommandText = "SELECT TOP 1 * FROM SaturatedSteam WHERE Рнас > " + Pressure.ToString().Replace(',','.');
                DBReader = DBCommand.ExecuteReader();
                DBReader.Read();
                    AfterParam.Pressure 	 = DBReader.GetDouble(1);
                    AfterParam.Temperature 	 = DBReader.GetDouble(2);
                    AfterParam.VolumeWater 	 = DBReader.GetDouble(3);
                    AfterParam.VolumeSteam 	 = DBReader.GetDouble(4);
                    AfterParam.EnthalpyWater = DBReader.GetDouble(5);
                    AfterParam.EnthalpySteam = DBReader.GetDouble(6);
                    AfterParam.Heat 		 = DBReader.GetDouble(7);
                DBReader.Close();

                DBCommand.Dispose();

                ResultParam.Temperature		= linear(Pressure, BeforeParam.Pressure, AfterParam.Pressure, BeforeParam.Temperature, AfterParam.Temperature);
                ResultParam.Pressure		= Pressure;
                ResultParam.VolumeWater		= linear(Pressure, BeforeParam.Pressure, AfterParam.Pressure, BeforeParam.VolumeWater, AfterParam.VolumeWater);
                ResultParam.VolumeSteam		= linear(Pressure, BeforeParam.Pressure, AfterParam.Pressure, BeforeParam.VolumeSteam, AfterParam.VolumeSteam);
                ResultParam.EnthalpyWater	= linear(Pressure, BeforeParam.Pressure, AfterParam.Pressure, BeforeParam.EnthalpyWater, AfterParam.EnthalpyWater);
                ResultParam.EnthalpySteam	= linear(Pressure, BeforeParam.Pressure, AfterParam.Pressure, BeforeParam.EnthalpySteam, AfterParam.EnthalpySteam);
                ResultParam.Heat			= linear(Pressure, BeforeParam.Pressure, AfterParam.Pressure, BeforeParam.Heat, AfterParam.Heat);
            }
            catch (Exception)
            {
                return false;
            }
            return true;
        }
Ejemplo n.º 2
0
        public static FunctionResult Execute(TechDoc3 TechDoc, TechVariables[] TVSArray)
        {
            CreateReferencList(TechDoc);
            //Общая оформительская часть
            TechDoc.SetMainBlock("Tag_MainText");
            TechDoc.Add_TechNumberSection("Задача расчета");
            TechDoc.Add_TechNumberLine("Задачей расчета является определение пропускной способности предохранительных клапанов, установленных на котле.");
            TechDoc.Add_TechLine("");
            TechDoc.Add_TechNumberSection("Условия расчета");
            TechDoc.Add_TechNumberLine("Расчет выполнен в соответствии с методиками расчета " + TechDoc.GetReference("PB10-574", "GOST24570"));
            TechDoc.Add_TechNumberLine("Данные для расчета приняты по:");
            TechDoc.Add_TechLine("	- технической характеристике котла");
            TechDoc.Add_TechLine("	- технической характеристике клапана " + TechDoc.GetReference("CATALOGKL"));
            TechDoc.Add_TechLine("");

            //Расчёт
            TechFormulaA[] Var_G = new TechFormulaA[TVSArray.Length];	//для подсчёта пропускной способности на каждом участке
            var ListSuperHeatG = new List<TechFormula>();				//список пропускных способностей участков с перегревом (для заключения)
            //return new FunctionResult(true, "ok");
            for (int N = 0; N < TVSArray.Length; N++)
            {
                TechVariables TVS = TVSArray[N];
                #region Блок в котором происходит определение это перегретый пар или насыщенный и получаются температуры для них
                double VolumeSteam;
                double Temperature = TVS.GetTechVariable("T").getDoubleValue();
                double PressureAbsolut = TVS.GetTechVariable("P_изб").getDoubleValue() + 0.1;
                double Bkr;
                double Kad;
                bool isSuperHeat = Math.Abs(Temperature) > Double.Epsilon;

                var DB = new TechDB();
                if (isSuperHeat)
                {
                    var SHP = new SuperHeatParam();
                    if (!DB.GetSuperHeatParam(ref SHP, PressureAbsolut, Temperature)) return new FunctionResult(false, "Значения параметров перегретого пара в базе не найдены");
                    Temperature = SHP.Temperature;
                    VolumeSteam = SHP.VolumeSteam;
                    Bkr = 0.546;
                    Kad = 1.31;
                } else
                {
                    var SP = new SaturationParam();
                    if (!DB.GetSaturationParam(ref SP, PressureAbsolut)) return new FunctionResult(false, "Значения параметров насыщеного пара в базе не найдены");
                    Temperature = SP.Temperature;
                    VolumeSteam = SP.VolumeSteam;
                    Bkr = 0.577;
                    Kad = 1.35;
                }
                //Блок завершен
                #endregion

                //Установка переменных по умолчанию
                var Var_D     = new TechFormulaC(  TVS.GetTechVariable("D"),     ""  );
                var Var_Pizb  = new TechFormulaC(  TVS.GetTechVariable("P_изб"), ""  );
                var Var_Count = new TechFormulaC(  TVS.GetTechVariable("N"),     ""  );
                var Var_F     = new TechFormulaC(  TVS.GetTechVariable("F"),     TechDoc.GetReference("CATALOGKL"));
                var Var_A1    = new TechFormulaC(  TVS.GetTechVariable("α_1"),   TechDoc.GetReference("CATALOGKL"));
                var Var_T     = new TechFormulaC(  TVS.GetTechVariable("T").setDoubleValue(Temperature), TechDoc.GetReference("TEPLONORM"));
                var Var_V1	  = new TechFormulaC("V_1",  VolumeSteam, "Удельный объём пара перед предохранительным клапаном", "м³/кг", TechDoc.GetReference("TEPLONORM"));
                var Var_Bkr   = new TechFormulaC("β_кр", Bkr, "Критическое отношение давлений", "", TechDoc.GetReference("GOST24570"));
                var Var_K     = new TechFormulaC("K",    Kad, "Показатель адиабаты", "", TechDoc.GetReference("GOST24570"));

                //Непосредственный расчет
                var Var_P1 = new TechFormulaA("P_1", "1,1∙P_изб", "Максимальное избыточное давление перед предохранительными клапанами", "МПа", TechDoc.GetReference("GOST24570"));
                Var_P1.AddVariable(Var_Pizb);
                if (!Var_P1.GetResult()) return new FunctionResult(false, "ERROR: " + Var_P1.MainDescription);

                var Var_P2 = new TechFormulaC("P_2", "0", "Давление за предохранительным клапаном", "МПа", TechDoc.GetReference("GOST24570"));
                if (!Var_P2.GetResult()) return new FunctionResult(false, "ERROR: " + Var_P2.MainDescription);

                var Var_IF1 = new TechFormulaL("P_1", "(P_2 + 0,1) ≤ (P_1 + 0,1)∙β_кр", "Условие применимости формулы для расчета пропускной способности предохранительных клапанов", "", TechDoc.GetReference("GOST24570"));
                Var_IF1.AddVariable(Var_P1);
                Var_IF1.AddVariable(Var_P2);
                Var_IF1.AddVariable(Var_Bkr);
                Var_IF1.GetResult();
                //if (!Var_IF1.GetResult()) return new FunctionResult(false, "ERROR: " + Var_IF1.MainDescription);	даже если условие не выполнено расчёт не прерывать

                var Var_A = new TechFormulaA("α", "0,9∙α_1", "Расчётный коэффициент расхода клапанов", "", TechDoc.GetReference("GOST24570"));
                Var_A.AddVariable(Var_A1);
                if (!Var_A.GetResult()) return new FunctionResult(false, "ERROR: " + Var_A.MainDescription);

                var Var_B1 = new TechFormulaA("B_1", "[0,5∙(2/(K+1))^(1/(K-1))∙√((K/(K+1))  )]∙1/√((P_1+0,1)∙V_1 )",
                                             "Коэффициент, учитывающий физико-химические свойства пара", "", TechDoc.GetReference("GOST24570"));
                Var_B1.AddVariable(Var_P1);
                Var_B1.AddVariable(Var_K);
                Var_B1.AddVariable(Var_V1);
                if (!Var_B1.GetResult()) return new FunctionResult(false, "ERROR: " + Var_B1.MainDescription);

                var Var_Gnp = new TechFormulaA("G", "10∙B_1∙α∙F∙(P_1 + 0,1)", "Количество пара, которое может пропустить клапан при полном открытии", "кг/час", TechDoc.GetReference("GOST24570"));
                Var_Gnp.AddVariable(Var_B1);
                Var_Gnp.AddVariable(Var_A);
                Var_Gnp.AddVariable(Var_F);
                Var_Gnp.AddVariable(Var_P1);
                if (!Var_Gnp.GetResult()) return new FunctionResult(false, "ERROR: " + Var_Gnp.MainDescription);

                Var_G[N] = new TechFormulaA("∑G" + ((TVSArray.Length > 1)? "_уч" + (N+1).ToString(): ""),
                                             "N∙G", "Суммарная пропускная способность предохранительных клапанов на участке", "кг/час", "");
                Var_G[N].AddVariable(Var_Count);
                Var_G[N].AddVariable(Var_Gnp);
                if (!Var_G[N].GetResult()) return new FunctionResult(false, "ERROR: " + Var_G[N].MainDescription);

                if (isSuperHeat) ListSuperHeatG.Add(Var_G[N]);	//для заключения

            //Оформительская часть
                TechDoc.Add_TechNumberSection("Данные для расчета участка" + ((TVSArray.Length > 1)? " " + (N+1).ToString(): ""));
                TechDoc.Add_TechLine("");

                string CurrentSectorName = TVS.GetTechVariable("SectorName").Value;

                TechDoc.Add_Table(CurrentSectorName, 3, TVS.Variables.Count + 1);
                TechDoc.Set_TableALLRowHeight(CurrentSectorName, 8);
                TechDoc.Set_TableColumnWidth(CurrentSectorName, 1, 90);
                TechDoc.Set_TableColumnWidth(CurrentSectorName, 2, 15);
                TechDoc.Set_TableColumnWidth(CurrentSectorName, 3, 70);
                TechDoc.Set_TableColumnAlignment(CurrentSectorName, 1, 0, -1);
                TechDoc.Set_TableColumnAlignment(CurrentSectorName, 2, 0, 0);
                TechDoc.Set_TableColumnAlignment(CurrentSectorName, 3, 0, 0);

                TechDoc.Set_TableCellText(CurrentSectorName, 1, 1, "Тип теплоносителя");
                if (isSuperHeat)
                     TechDoc.Set_TableCellText(CurrentSectorName, 3, 1, "Перегретый пар");
                else TechDoc.Set_TableCellText(CurrentSectorName, 3, 1, "Насыщенный пар");

                int i = 2;
                foreach (var element in TVS.Variables)
                {
                    TechDoc.Set_TableCellText(CurrentSectorName, 1, i, element.Description);
                    TechDoc.Set_TableCellText(CurrentSectorName, 2, i, element.MU);
                    TechDoc.Set_TableCellText(CurrentSectorName, 3, i, element.Value);
                    i++;
                }

                TechDoc.Add_TechLine("");
                TechDoc.Add_TechNumberSection("Расчет участка" + ((TVSArray.Length > 1)? " " + (N+1).ToString(): ""));

                var ListFormula = new List<TechFormula>();
                ListFormula.Add(Var_P1);
                ListFormula.Add(Var_P2);
                ListFormula.Add(Var_Bkr);
                ListFormula.Add(Var_IF1);
                ListFormula.Add(Var_A);
                ListFormula.Add(Var_K);
                ListFormula.Add(Var_V1);
                ListFormula.Add(Var_B1);
                ListFormula.Add(Var_Gnp);
                ListFormula.Add(Var_G[N]);
                AddListFormula(TechDoc, ListFormula);
            }
            //завершение расчёта
                string NameVar = "";
                foreach(TechFormulaA TF in Var_G)
                    NameVar += TF.MainVariable + " + ";
                NameVar = NameVar.Substring(0, NameVar.Length - 3);

                var Var_MainG = new TechFormulaA("∑G", NameVar, "Суммарная пропускная способность всех предохранительных клапанов на котле", "", "");
                foreach(TechFormulaA TF in Var_G)
                    Var_MainG.AddVariable(TF);
                Var_MainG.GetResult();

                var Var_MainIF = new TechFormulaL("∑∑G", "∑G ≥ D", "Условие суммарной пропускной способности всех предохранительных клапанов на котле", "", TechDoc.GetReference("GOST24570"));
                Var_MainIF.AddVariable(Var_MainG);
                Var_MainIF.AddVariable(new TechFormulaC(TVSArray[0].GetTechVariable("D"), ""));
                Var_MainIF.GetResult();

                NameVar = "";
                foreach(TechFormula TF in ListSuperHeatG)
                    NameVar += TF.MainVariable + " + ";
                if (NameVar.Length >= 3) NameVar = NameVar.Substring(0, NameVar.Length - 3);

                var Var_MainIF2 = new TechFormulaL("∑∑GG", NameVar + " ≥ 0.5∙D", "Условие суммарной пропускной способности предохранительных клапанов, установленных за пароперегревателем", "", TechDoc.GetReference("PB10-574"));
                foreach(TechFormulaA TF in Var_G)
                    Var_MainIF2.AddVariable(TF);
                Var_MainIF2.AddVariable(new TechFormulaC(TVSArray[0].GetTechVariable("D"), ""));
                Var_MainIF2.GetResult();
            //оформление завершения расчёта
                TechDoc.Add_TechNumberSection("Заключение");
                TechDoc.Add_TechLine("");

                var LF = new List<TechFormula>();
                LF.Add(Var_MainG);
                LF.Add(Var_MainIF);
                if (ListSuperHeatG.Count > 0) LF.Add(Var_MainIF2);
                AddListFormula(TechDoc, LF);

            //TechDoc.DrawBiblio();	//Отрисовка списка литературы
            //TechDoc.Refresh_TablesOfContents();	//Обновления содержания
            TechDoc.ClearTableList();	//Очистка имён таблиц
            return new FunctionResult(true, "");
        }