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(); }
//Формирование списка литературы 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); }
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, ""); }
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, ""); } } }