/// <summary> /// 将电气目录和结构目录中这个序列和每个塔的子目录建立好 /// 将电气计算的Eexel模板和结构计算的模板复制到相应的目录下,便于后续计算 /// </summary> /// <param name="seqence"></param> /// <param name="tower"></param> /// <returns></returns> protected void CopyTmeplateToDesDir(int index) { TowerSerial tower = TowerSerials[index]; //建立电气计算下的目录 string elecDirPath = ProjectUtils.GetInstance().ProjectPath + "\\" + ConstVar.ElecCalsStr + "\\" + SequenceName; if (!Directory.Exists(elecDirPath)) { Directory.CreateDirectory(elecDirPath); } elecDirPath += "\\" + tower.TowerName; if (!Directory.Exists(elecDirPath)) { Directory.CreateDirectory(elecDirPath); } //安装目录UserData里面复制电气模板 string scrPath = Directory.GetCurrentDirectory() + "\\" + ConstVar.UserDataStr + "\\" + (tower.TowerType == 1 ? ConstVar.ElecLoadLineTowerTemplateFileName : ConstVar.ElecLoadCornerTowerTemplateFileName); string destPath = elecDirPath + "\\" + ConstVar.ElecLoadTemplateFileName; File.Copy(scrPath, destPath); }
/// <summary> /// 验算计算 根据所选杆塔序列读取不同模式下的相关信息 /// </summary> /// <param name="projectDir">路径</param> /// <param name="navg">杆塔序列名称</param> /// <param name="Type">悬垂塔 耐张塔</param> /// <returns></returns> public static List <TowerSerial> ReadXmlBySequenceNameAndTowerType(string projectDir, string sequenceName, string Type) { //判断塔型 string basePath = projectDir + "\\" + ConstVar.DataBaseStr + "\\TowerStr.xml"; List <TowerStrData> towerList = TowerStrDataReader.ReadLoadFile(basePath).ToList(); string towerTypeStr = Type == "悬垂塔" ? "悬垂塔,直线塔,直线转角塔" : "耐张塔,转角塔,终端塔"; //读取序列信息,并进行逻辑判断 string loadPath = projectDir + "\\" + ConstVar.TowerSequenceStr + "\\" + sequenceName + "\\TowerSequenceStr.xml"; List <TowerSerial> towerSeriList = new List <TowerSerial>(); XmlDocument doc = new XmlDocument(); doc.Load(loadPath); XmlNode rootNode = doc.GetElementsByTagName("Root")[0]; int index = 1; string towerType = ""; foreach (XmlNode xmlNode in rootNode.ChildNodes) { try { towerType = towerList.Where(item => item.Name == xmlNode.Attributes.GetNamedItem("TowerPattern").InnerText).First().TypeName;//塔型类型 } catch (Exception) { towerType = ""; } if (towerType != "" && towerTypeStr.Contains(towerType) && bool.Parse(xmlNode.Attributes.GetNamedItem("IsChecking").InnerText))//判断塔型及是否勾选验算 { TowerSerial item = new TowerSerial(); item.ID = index; //序号 item.TowerName = xmlNode.Attributes.GetNamedItem("TowerName").InnerText; //塔位号 item.NameOfPositioningPile = xmlNode.Attributes.GetNamedItem("NameOfPositioningPile").InnerText; //塔位点 item.TowerPattern = xmlNode.Attributes.GetNamedItem("TowerPattern").InnerText; //塔型 item.WireCounterWeightNum = int.Parse(xmlNode.Attributes.GetNamedItem("WireCounterWeightNum").InnerText); //导线防震锤数量 item.GroundCounterWeightNum = int.Parse(xmlNode.Attributes.GetNamedItem("GroundCounterWeightNum").InnerText); //地线防震锤数量 item.WireSpacerNum = int.Parse(xmlNode.Attributes.GetNamedItem("WireSpacerNum").InnerText); //导线间隔棒数量 item.EngineerPar = int.Parse(xmlNode.Attributes.GetNamedItem("EngineerPar").InnerText); //工程参数 item.FrontSidePar = xmlNode.Attributes.GetNamedItem("FrontSidePar").InnerText; //前侧参数 item.BackSidePar = xmlNode.Attributes.GetNamedItem("BackPar").InnerText; //后侧参数 item.CommPar = xmlNode.Attributes.GetNamedItem("CommPar").InnerText; //公共参数 item.TowerPar = xmlNode.Attributes.GetNamedItem("TowerPar").InnerText; //后侧相参数 towerSeriList.Add(item); index++; } } return(towerSeriList); }
protected void UpdateStruCalsParas(int index) { TowerSerial tower = TowerSerials[index]; string strucDirPath = ProjectUtils.GetInstance().ProjectPath + "\\" + ConstVar.StruCalsStr + "\\" + SequenceName; if (!Directory.Exists(strucDirPath)) { Directory.CreateDirectory(strucDirPath); } strucDirPath += "\\" + tower.TowerName; if (!Directory.Exists(strucDirPath)) { Directory.CreateDirectory(strucDirPath); } TowerStrData towerStr = GlobalInfo.GetInstance().GetLocalTowerStrByName(tower.TowerName); //复制结构计算的模板,结构计算的模板要从通用模板库里面复制 string struTempPathSce = ProjectUtils.GetInstance().ProjectPath + "\\" + ConstVar.DataBaseStr + "\\" + ConstVar.GeneralStruTemplateStr + "\\" + TowerTypeToString(tower.TowerType) + "\\" + towerStr.TempletName.Remove(0, 6) + ".dat"; string struTempPathDes = ProjectUtils.GetInstance().ProjectPath + "\\" + ConstVar.StruCalsStr + "\\" + SequenceName + "\\" + towerStr.Name + "\\" + ConstVar.StruCalsStr + "\\" + towerStr.TempletName.Remove(0, 6) + ".dat"; File.Copy(struTempPathSce, struTempPathDes); //复制应力计算模板文件,需要从TowerUploadFile下相应的塔文件里复制,一共需要复制三个文件:模板文件、data.ini、DataCh.ini string stressTempDirSce = ProjectUtils.GetInstance().ProjectPath + "\\" + ConstVar.DataBaseStr + "\\" + ConstVar.TowerUploadFileStr + "\\" + towerStr.Name + "[" + tower.TowerType.ToString() + "]\\"; string stressTempDirDes = ProjectUtils.GetInstance().ProjectPath + "\\" + ConstVar.StruCalsStr + "\\" + SequenceName + "\\" + towerStr.Name + "\\" + ConstVar.FullStressStr + "\\"; File.Copy(stressTempDirSce + towerStr.ModelFileExtension, stressTempDirDes + towerStr.ModelName); File.Copy(stressTempDirSce + ConstVar.SmartTowerIntFileName, stressTempDirDes + ConstVar.SmartTowerIntFileName); File.Copy(stressTempDirSce + ConstVar.SmartTowerIntCHFileName, stressTempDirDes + ConstVar.SmartTowerIntCHFileName); List <string> stressTempPathList = new List <string> { towerStr.ModelName, ConstVar.SmartTowerIntFileName, ConstVar.SmartTowerIntCHFileName }; //解码挂点参数 string hpSettingPath = stressTempDirSce + towerStr.HangPointFileExtension; List <HangingPointSettingParas> HPSettingsParas = XmlUtils.Deserializer <List <HangingPointSettingParas> >(hpSettingPath); ProjectUtils.GetInstance().NewStruCalsTower(towerStr.Name, SequenceName, ExcelPath, TowerTypeToString(tower.TowerType), ParaList[index].CommParas.Volt, struTempPathDes, stressTempPathList, HPSettingsParas); }
public ElecCalsParas(string sequenceName, TowerSerial backTower, TowerSerial calsTower) { SequenceName = sequenceName; globalInst = GlobalInfo.GetInstance(); CommParas = globalInst.GetElecCalsCommParasByName(calsTower.CommPar); BackSidePara = globalInst.GetElecCalsSideParasByName(calsTower.BackSidePar); UpdateSidePara(true, BackSidePara, out string waring1); FrontSidePara = globalInst.GetElecCalsSideParasByName(calsTower.FrontSidePar); UpdateSidePara(false, FrontSidePara, out string waring2); TowerParas = globalInst.GetElecCalsTowerParasByName(calsTower.TowerPar); UpdateTowerPara(out string warning3); UpdateTowerSerial(backTower, calsTower, out string waring4); }
//更新塔序列参数 protected void UpdateTowerSerial(TowerSerial backTowerSerial, TowerSerial calsTowerSerial, out string waring) { TowerStrData towerStr = globalInst.GetLocalTowerStrByName(calsTowerSerial.TowerPattern); Appre = new ElecCalsTowerAppre() { UpSideInHei = towerStr.UpSideInHei, MidInHei = towerStr.MidInHei, DnSideInHei = towerStr.DnSideInHei, GrDHei = towerStr.GrDHei, UpSideJuHei = towerStr.UpSideJuHei, MidJuHei = towerStr.MidJuHei, DnSideJuHei = towerStr.DnSideJuHei, }; TowerElecCals tower = new TowerElecCals(); tower.SetPosInf(calsTowerSerial.TowerName, calsTowerSerial.TowerPattern, calsTowerSerial.CallItHigh, calsTowerSerial.TowerFootElevation, calsTowerSerial.BaseLevelDescent, TowerParas.RepStrIndLen, TowerParas.RepStrGrdLen, calsTowerSerial.TurningAngle); tower.SetFrontBackPosInf(calsTowerSerial.Span, calsTowerSerial.FrontPreSpan, backTowerSerial.Span, backTowerSerial.FrontPreSpan); waring = ""; }
/// <summary> /// 读取原始TA文件 /// </summary> /// <param name="sourcePath">原始文件路径</param> /// <returns></returns> public static List <TowerSerial> ReadTa(string sourcePath) { List <string> lineList = new List <string>(); List <TowerSerial> towerSeriList = new List <TowerSerial>(); string line; // Read the file and display it line by line. StreamReader file = new StreamReader(sourcePath); while ((line = file.ReadLine()) != null) { lineList.Add(line); } file.Close(); string[] itemLine; TowerSerial tower; for (int i = 1; i < lineList.Count; i++) { itemLine = lineList[i].Split(','); tower = new TowerSerial(); tower.ID = i; tower.TowerName = itemLine[0]; tower.TowerType = int.Parse(itemLine[1]); //塔类型:直线塔1转角塔2门架3 tower.TowerTypeName = itemLine[1].ToString() == "1" ? "直线塔" : itemLine[1].ToString() == "2" ? "耐张塔" : "终端塔"; //塔类型:直线塔1转角塔2门架3 tower.AccumulativeDistance = itemLine[2] == "" ? 0 : Convert.ToDouble(itemLine[2]); tower.PointAndGround_Distance = itemLine[3] == "" ? 0 : Convert.ToDouble(itemLine[3]); tower.KValueOfConductor = itemLine[4] == "" ? 0 : Convert.ToDouble(itemLine[4]); tower.DeviationDistance = itemLine[5] == "" ? 0 : Convert.ToDouble(itemLine[5]); tower.TowerFootElevation = itemLine[6] == "" ? 0 : Convert.ToDouble(itemLine[6]); tower.NameOfPositioningPile = itemLine[7]; tower.TowerPattern = itemLine[8].Split('-')[0]; tower.CallItHigh = itemLine[9] == "" ? 0 : Convert.ToDouble(itemLine[9]); tower.InsulationStringModel = itemLine[10]; tower.InsulationStringNumber = 0; tower.InsulationStringLength = itemLine[11] == "" ? 0 : Convert.ToDouble(itemLine[11]); tower.BaseLevelDescent = itemLine[12] == "" ? 0 : Convert.ToDouble(itemLine[12]); tower.GroundWireKValue = itemLine[13] == "" ? 0 : Convert.ToDouble(itemLine[13]); tower.BackWireDistance = itemLine[14] == "" ? 0 : Convert.ToDouble(itemLine[14]); tower.FrontWireDistance = itemLine[15] == "" ? 0 : Convert.ToDouble(itemLine[15]); tower.ModelOfGroundWireFittings = itemLine[16]; tower.QuantityOfGroundWireFittings = itemLine[17] == "" ? 0 : Convert.ToDouble(itemLine[17]); tower.BackGroundDistance = itemLine[18] == "" ? 0 : Convert.ToDouble(itemLine[18]); tower.FrontGroundDistance = itemLine[19] == "" ? 0 : Convert.ToDouble(itemLine[19]); tower.TurningAngle = itemLine[21] == "" ? 0 : Convert.ToDouble(itemLine[21]); //转角(度 分) tower.TurningAngleStr = itemLine[21] == "" || double.Parse(itemLine[21].ToString()) == 0 ? "" : (Convert.ToDouble(itemLine[21]) < 0 ? "右:" : "左:") + itemLine[21].ToString().Trim(' ').TrimStart('-'); //转角(度 分) tower.SafetyDistanceOfCutWire = itemLine[22] == "" ? 0 : Convert.ToDouble(itemLine[22]); tower.SafetyFactorKConductor = itemLine[23] == "" ? 0 : Convert.ToDouble(itemLine[23]); tower.SafetyFactorKValueOfGroundWire = itemLine[24] == "" ? 0 : Convert.ToDouble(itemLine[24]); tower.SingleORDoubleString = itemLine[25] == "" ? 0 : Convert.ToDouble(itemLine[25]); tower.TotalWeightOfHungWeightHammer = itemLine[26] == "" ? 0 : Convert.ToDouble(itemLine[26]); tower.WireStressInRearSight = itemLine[27] == "" ? 0 : Convert.ToDouble(itemLine[27]); tower.tensionInsulatorStringIsHangingUpsideDown = itemLine[28] == "1" ? true : false; tower.PlanDrawing = itemLine[29]; tower.Display = itemLine[30]; tower.NumberOfGroundWires = itemLine[31] == "" ? 0 : Convert.ToInt32(itemLine[31]); tower.ConductorModel = itemLine[32]; tower.GroundWireModel = itemLine[33]; tower.SteelWeight = itemLine[34]; tower.GroundHorizontalDistance = itemLine[35] == "" ? 0 : Convert.ToDouble(itemLine[35]); tower.DistanceBetweenUpperAndLowerConductors = Convert.ToDouble(itemLine[36]); tower.MiddleAndLowerConductorDistance = itemLine[37] == "" ? 0 : Convert.ToDouble(itemLine[37]); tower.HeightOfGroundWireSupport = itemLine[38] == "" ? 0 : Convert.ToDouble(itemLine[38]); towerSeriList.Add(tower); } CalsParameters(towerSeriList); return(towerSeriList); }
/// <summary> /// 直接读取本地文件xml信息 同时需要判断 塔型、导线型号、导线串型、地线型号 是否满足在本项目中存在 /// </summary> /// <param name="path">文件路径</param> /// <returns></returns> public static List <TowerSerial> ReadXml(string projectDir, string navg) { #region 获取本项目 塔型、导线型号、导线串型、地线型号 信息 string filePath = ""; string basePath = projectDir + "\\" + ConstVar.DataBaseStr + "\\"; //判断塔型 filePath = basePath + "TowerStr.xml"; List <TowerStrData> towerList = TowerStrDataReader.ReadLoadFile(filePath).ToList(); List <String> towerNameList = towerList.Select(t => t.Name).ToList(); //导地线 filePath = basePath + "Wire.xml"; List <WireType> allList = WireReader.Read(filePath); //判断导线 List <string> wireList = allList.Where(w => w.Type == "导线").First().Wires.Select(w => w.ModelSpecification).ToList(); //判断地线 List <string> groundList = allList.Where(g => g.Type == "地线").First().Wires.Select(g => g.ModelSpecification).ToList(); //判断绝缘串 filePath = basePath + @"\StrData.xml"; List <string> strList = StrDataReader.Read(filePath).Where(s => s.Type == "一般子串").First().StrDatas.Select(s => s.Name).ToList(); #endregion //读取序列信息,并进行逻辑判断 string loadPath = projectDir + "\\" + ConstVar.TowerSequenceStr + "\\" + navg + "\\TowerSequenceStr.xml"; List <TowerSerial> towerSeriList = new List <TowerSerial>(); XmlDocument doc = new XmlDocument(); doc.Load(loadPath); XmlNode rootNode = doc.GetElementsByTagName("Root")[0]; foreach (XmlNode xmlNode in rootNode.ChildNodes) { TowerSerial item = new TowerSerial(); item.ID = int.Parse(xmlNode.Attributes.GetNamedItem("ID").InnerText); //序号 item.IsChecking = bool.Parse(xmlNode.Attributes.GetNamedItem("IsChecking").InnerText); //气象条件 item.WeatherCondition = xmlNode.Attributes.GetNamedItem("WeatherCondition").InnerText; //气象条件 item.TowerName = xmlNode.Attributes.GetNamedItem("TowerName").InnerText; //塔位号 item.TowerType = int.Parse(xmlNode.Attributes.GetNamedItem("TowerType").InnerText); //塔型 item.NameOfPositioningPile = xmlNode.Attributes.GetNamedItem("NameOfPositioningPile").InnerText; //塔位点 item.TowerPattern = xmlNode.Attributes.GetNamedItem("TowerPattern").InnerText; //塔型 item.CallItHigh = double.Parse(xmlNode.Attributes.GetNamedItem("CallItHigh").InnerText); //呼高 item.TowerFootElevation = double.Parse(xmlNode.Attributes.GetNamedItem("TowerFootElevation").InnerText); //塔位桩高程 item.BaseLevelDescent = double.Parse(xmlNode.Attributes.GetNamedItem("BaseLevelDescent").InnerText); //定位高差 item.Span = double.Parse(xmlNode.Attributes.GetNamedItem("Span").InnerText); //档距 item.HorizontalSpan = double.Parse(xmlNode.Attributes.GetNamedItem("HorizontalSpan").InnerText); //水平档距 item.VerticalSpan = double.Parse(xmlNode.Attributes.GetNamedItem("VerticalSpan").InnerText); //垂直档距 item.FrontVerticalSpan = double.Parse(xmlNode.Attributes.GetNamedItem("FrontVerticalSpan").InnerText); //前侧垂直档距 item.BackVerticalSpan = double.Parse(xmlNode.Attributes.GetNamedItem("BackVerticalSpan").InnerText); //后侧垂直档距 item.FrontPreSpan = double.Parse(xmlNode.Attributes.GetNamedItem("FrontPreSpan").InnerText); //前侧代表档距 item.FrontAccPreSpan = double.Parse(xmlNode.Attributes.GetNamedItem("FrontAccPreSpan").InnerText); //前侧耐张段长度 item.BackPreSpan = double.Parse(xmlNode.Attributes.GetNamedItem("BackPreSpan").InnerText); //后侧代表档距 item.BackAccPreSpan = double.Parse(xmlNode.Attributes.GetNamedItem("BackAccPreSpan").InnerText); //后侧耐张段长度 item.TurningAngle = double.Parse(xmlNode.Attributes.GetNamedItem("TurningAngle").InnerText); //转角中心桩位移(m) item.TurningAngleStr = xmlNode.Attributes.GetNamedItem("TurningAngleStr").InnerText; //转角中心桩位移(m) item.ConductorModel = xmlNode.Attributes.GetNamedItem("ConductorModel").InnerText; //导线型号 item.InsulationStringModel = xmlNode.Attributes.GetNamedItem("InsulationStringModel").InnerText; //导线串型号 item.InsulationStringSlices = xmlNode.Attributes.GetNamedItem("InsulationStringSlices").InnerText; //导线串片数 item.InsulationStringNumber = double.Parse(xmlNode.Attributes.GetNamedItem("InsulationStringNumber").InnerText); //导线串数量 item.InsulationStringLength = double.Parse(xmlNode.Attributes.GetNamedItem("InsulationStringLength").InnerText); //导线串长度 item.GroundWireModel = xmlNode.Attributes.GetNamedItem("GroundWireModel").InnerText; //地线型号 item.GroundWireInsulationStringModel = xmlNode.Attributes.GetNamedItem("GroundWireInsulationStringModel").InnerText; //地线串型号 item.GroundWireInsulationStringNumber = xmlNode.Attributes.GetNamedItem("GroundWireInsulationStringNumber").InnerText; //地线串数量 if (towerNameList.Contains(item.TowerPattern)) //塔型判断 { item.ExistsTowerPattern = true; } if (wireList.Contains(item.ConductorModel))//导线型号判断 { item.ExistsConductorModel = true; } if (groundList.Contains(item.GroundWireModel))//地线型号判断 { item.ExistsGroundWireModel = true; } if (strList.Contains(item.InsulationStringModel))//导线串型号判断 { item.ExistsWireInsulationString = true; } item.CommPar = xmlNode.Attributes.GetNamedItem("CommPar").InnerText; item.FrontSidePar = xmlNode.Attributes.GetNamedItem("FrontSidePar").InnerText; item.BackSidePar = xmlNode.Attributes.GetNamedItem("BackSidePar").InnerText; item.TowerPar = xmlNode.Attributes.GetNamedItem("TowerPar").InnerText; towerSeriList.Add(item); } return(towerSeriList); }