Ejemplo n.º 1
0
        void Button1Click(object sender, EventArgs e)
        {
            var ListTV = new List<TechVariables>();
            foreach (TreeParent element in this.treeListView1.Objects) ListTV.Add(element.techVariables.Clone());

            //Граничные условия
            if (ListTV.Count == 0)
            {
                MessageBox.Show("Отсутствуют участки для расчёта", "Ошибка");
                //return;
            }
            foreach (var element in ListTV)
            {
                if (element.GetTechVariable("SectorName").Value.Trim() == "")
                {
                    MessageBox.Show("Имя участка не задано", "Ошибка");
                    //return;
                }

            }

            var dialog = new SaveFileDialog();
            dialog.Filter = "Файлы Word (*.docx) | *.docx";
            dialog.InitialDirectory = Directory.GetCurrentDirectory();
            if (dialog.ShowDialog() != DialogResult.OK) return;

            try {
                File.Copy(@"TechTemplate2.docx", dialog.FileName, true);
            } catch (Exception exc) {
                MessageBox.Show(exc.Message, "Ошибка");
                return;
            }

            //Создание документа
            var doc3 = new TechDoc3(dialog.FileName);

            //Установка полей документа

            doc3.SetDocProperty("ZDesignation", textBox2.Text);
            doc3.SetDocProperty("ZKotel", textBox1.Text);
            doc3.SetDocProperty("ZDocTypeShort", "Расчёт");
            doc3.SetDocProperty("ZDocTypeLong", "Расчёт предохранительных клапанов");
            doc3.SetDocProperty("ZNameRazrab", 	((RazrabList.Items[0].SubItems.Count == 2) 	? RazrabList.Items[0].SubItems[1].Text : ""));
            doc3.SetDocProperty("ZNameProv",	((RazrabList.Items[1].SubItems.Count == 2) 	? RazrabList.Items[1].SubItems[1].Text : ""));
            doc3.SetDocProperty("ZNameVed",		((RazrabList.Items[2].SubItems.Count == 2) 	? RazrabList.Items[2].SubItems[1].Text : ""));
            doc3.SetDocProperty("ZNameNKontr", 	((RazrabList.Items[3].SubItems.Count == 2) 	? RazrabList.Items[3].SubItems[1].Text : ""));
            doc3.SetDocProperty("ZNameGlav", 	((RazrabList.Items[4].SubItems.Count == 2) 	? RazrabList.Items[4].SubItems[1].Text : ""));
            doc3.SetDocProperty("ZYear", 		DateTime.Now.Year.ToString());
            doc3.RefreshAllField();

            /*TechVariables TVS = TechRachetRR4.GetMainVariable();			//тестовые данные
            TVS.GetTechVariable("SectorName").Value = "Барабан котла";
            TVS.GetTechVariable("NameKlapan").Value = "17с21нж";
            TVS.GetTechVariable("D").Value = "35000";
            TVS.GetTechVariable("P_изб").Value = "2,8";
            TVS.GetTechVariable("N").Value = "2";
            TVS.GetTechVariable("F").Value = "1256";
            TVS.GetTechVariable("α_1").Value = "0.8";
            //TVS.GetTechVariable("T").Value = "150";

            TechVariables TVS1 = TechRachetRR4.GetMainVariable();
            TVS1.GetTechVariable("SectorName").Value = "Коллектор перегретого пара";
            TVS1.GetTechVariable("NameKlapan").Value = "СППК4Р 50-16, DN50, PN16, 17с6нж";
            TVS1.GetTechVariable("D").Value = "35000";
            TVS1.GetTechVariable("P_изб").Value = "2,4";
            TVS1.GetTechVariable("N").Value = "2";
            TVS1.GetTechVariable("F").Value = "1256";
            TVS1.GetTechVariable("α_1").Value = "0.8";
            TVS1.GetTechVariable("T").Value = "375";*/
            //Непосредственный расчёт
            FunctionResult result = TechRachetRR4.Execute(doc3, ListTV.ToArray());

            if (result.bResult)
                 MessageBox.Show("Расчёт завершен", "!");
            else MessageBox.Show(result.Desciption, "Ошибка");

            doc3.CloseDoc();
        }
Ejemplo n.º 2
0
        //Формирование списка литературы
        private static void CreateReferencList(TechDoc3 TechDoc)
        {
            /*var BS = new BiblioSource();
            BS.UnicName = "UNIC";
            BS.SourceType = "Book";
            BS.Title = "Индивидуальный предприниматель без образования юридического лица";
            BS.Autors.Add (new Author("Ю.А.", "Лукаш"));
            BS.City = "Москва";
            BS.Year = "2002";
            BS.Publisher = "Книжный мир";
            TechDoc.AddToSource(BS);*/
            BiblioSource BS;
            BS = new BiblioSource();
            BS.UnicName = "PB10-574";
            BS.SourceType = "Book";
            BS.Title = "Правила устройства и безопасной эксплуатации паровых и водогрейных котлов";
            BS.Year = "2003";
            TechDoc.AddToSource(BS);

            BS = new BiblioSource();
            BS.UnicName = "TEPLONORM";
            BS.SourceType = "Book";
            BS.Title = "Тепловой расчёт котельных агрегатов (нормативный метод)";
            BS.City = "Санкт-Петербург";
            BS.Year = "1998";
            TechDoc.AddToSource(BS);

            BS = new BiblioSource();
            BS.UnicName = "GOST24570";
            BS.SourceType = "Gost";
            BS.Designation = "ГОСТ 24570-81";
            BS.Title = "Клапаны предохранительные паровых и водогрейных котлов";
            BS.TitleDescription = "Технические требования";
            BS.City = "Москва";
            BS.Year = "1987";
            BS.Publisher = "Издательство стандартов";
            BS.WorkDate = "01.12.81";
            TechDoc.AddToSource(BS);

            BS = new BiblioSource();
            BS.UnicName = "CATALOGKL";
            BS.MainSTR = @"ОАО ""Армагус"". Каталог продукции. 2014г.";
            TechDoc.AddToSource(BS);
        }
Ejemplo n.º 3
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, "");
        }
Ejemplo n.º 4
0
 private static void AddListFormula(TechDoc3 TechDoc, List<TechFormula> ListFormula)
 {
     foreach (TechFormula TF in ListFormula)
     {
         if (TF is TechFormulaA)
         {
             TechDoc.Add_TechNumberLine(TF.MainDescription);
             TechDoc.Add_TechFormulaWithReference(String.Format("{0}={1}", TF.MainVariable, TF.DrawFormula), TF.ReferenceBibl);
             TechDoc.Add_TechFormula(String.Format("{0}={1}={2} {3}", TF.MainVariable, TF.getResultFormula(), TF.Result, TF.MU));
         }
         if (TF is TechFormulaC)
         {
             TechDoc.Add_TechNumberLine(TF.MainDescription);
             TechDoc.Add_TechFormulaWithReference(String.Format("{0}={1} {2}", TF.MainVariable, TF.DrawFormula, TF.MU), TF.ReferenceBibl);
         }
         if (TF is TechFormulaL)
         {
             TechDoc.Add_TechNumberLine(TF.MainDescription);
             TechDoc.Add_TechFormulaWithReference(TF.DrawFormula, TF.ReferenceBibl);
             if (TF.ResultStr != TF.getResultFormula())
                 TechDoc.Add_TechFormula(TF.getResultFormula());
             TechDoc.Add_TechFormula(TF.ResultStr);
             if (Math.Abs(TF.Result) < double.Epsilon)
                 TechDoc.Add_TechLineExt("Условие не выполнено", 0, "red");
             else TechDoc.Add_TechLineExt("Условие выполнено", 0, "");
         }
     }
 }