public void ConverWind(double aveHei, char terType) { var temp1 = WeathComm.Where(item => item.Name == "最大风速").FirstOrDefault(); if (temp1 == null) { temp1 = new ElecCalsWorkCondition(); } WeathComm.Add(new ElecCalsWorkCondition { //在计算中相当于Eecel"最大风速" Name = "换算最大风速", IceThickness = temp1.IceThickness, Temperature = temp1.Temperature, WindSpeed = ElecCalsToolBox.WindExChange(temp1.WindSpeed, aveHei, terType), BaseWindSpeed = temp1.WindSpeed, }); var temp = WeathComm.Where(item => item.Name == "不均匀风").FirstOrDefault(); if (temp == null) { temp = new ElecCalsWorkCondition(); } WeathComm.Add(new ElecCalsWorkCondition { //在计算中相当于Eecel"不均匀风" Name = "换算不均匀风", IceThickness = temp.IceThickness, Temperature = temp.Temperature, WindSpeed = ElecCalsToolBox.WindExChange(temp.WindSpeed, aveHei, terType), BaseWindSpeed = temp.WindSpeed, }); }
/// <summary> /// 更新耐张塔的覆冰率 /// </summary> /// <param name="towerType"></param> /// <param name="backWkCdts"></param> /// <param name="backIceArea"></param> /// <param name="frontWkCdts"></param> /// <param name="frontIceArea"></param> public void UpateIceCovrage(string towerType, List <ElecCalsWorkCondition> backWkCdts, string backIceArea, List <ElecCalsWorkCondition> frontWkCdts, string frontIceArea) { var backIceWkCdt = backWkCdts.Where(item => item.Name == "最大覆冰").FirstOrDefault(); double backIceThick = backIceWkCdt == null ? 0 : backIceWkCdt.IceThickness; var frontIceWkCdt = frontWkCdts.Where(item => item.Name == "最大覆冰").FirstOrDefault(); double frontIceThick = frontIceWkCdt == null ? 0 : frontIceWkCdt.IceThickness; Catagory = ElecCalsToolBox.GetCatogory(Volt.ToString()); //BreakIceCoverPer = ElecCalsToolBox.UBlanceR(towerType, backIceThick, frontIceThick, Catagory); BreakIceCoverPer = ElecCalsToolBox.UBlanceR(towerType, Math.Max(backIceThick, frontIceThick), Catagory); //1:考虑断线覆冰率 2:不考虑断线覆冰率 BreakIceCoverPara = (Math.Max(backIceThick, frontIceThick) >= 20) ? 1 : 2; if (backIceThick != frontIceThick) { UnbaIceCoverPerI = 1; UnbaIceCoverPerII = 0; } else { if (backIceArea == "重冰区" || frontIceArea == "重冰区" || backIceArea == "中冰区" || frontIceArea == "中冰区") { UnbaIceCoverPerI = ElecCalsToolBox.IBlanceR1(towerType, Catagory); UnbaIceCoverPerII = ElecCalsToolBox.IBlanceR2(towerType, Catagory); } else { UnbaIceCoverPerI = 1; UnbaIceCoverPerII = 1; } } }
public void AddUnevenIceGKHang(bool bAdd5mm, double dia, double iceCover1, double iceCover2) { ElecCalsWorkCondition iceWkCdt; var elecCalsSpec = GlobalInfo.GetInstance().GetElecCalsSpecParas(); if (elecCalsSpec == null) { return; } if (bAdd5mm) { //增加5mm要地线覆冰工况 iceWkCdt = WeathComm.Where(item => item.Name == "地线覆冰").FirstOrDefault(); } else { //不增加5mm要最大覆冰工况 iceWkCdt = WeathComm.Where(item => item.Name == "最大覆冰").FirstOrDefault(); } double thickness = iceWkCdt == null ? 0 : iceWkCdt.IceThickness; double thickness1 = ElecCalsToolBox.IceThicknessExChange(dia, iceCover1, thickness); double thickness2 = ElecCalsToolBox.IceThicknessExChange(dia, iceCover2, thickness); WeathComm.AddRange(new List <ElecCalsWorkCondition>() { new ElecCalsWorkCondition() { Name = bAdd5mm ? "不均匀冰满冰(导线+5mm)" : "不均匀冰满冰", IceThickness = thickness, Temperature = elecCalsSpec.UnevenIceTemp, WindSpeed = elecCalsSpec.UnevenIceWind, }, new ElecCalsWorkCondition() { Name = bAdd5mm ? "不均匀冰20%(导线+5mm)" : "不均匀冰20%", IceThickness = thickness1, Temperature = elecCalsSpec.UnevenIceTemp, WindSpeed = elecCalsSpec.UnevenIceWind, }, new ElecCalsWorkCondition() { Name = bAdd5mm ? "不均匀冰开断(导线+5mm)" : "不均匀冰开断", IceThickness = thickness2, Temperature = elecCalsSpec.UnevenIceTemp, WindSpeed = elecCalsSpec.UnevenIceWind, }, }); }
/// <summary> /// 增加断线工况-悬垂塔 /// </summary> /// <param name="bGrd">是否是地线:1 地线; 0 导线</param> /// <param name="grdIceUnbaPara">地线不平衡张力取值,1:轻冰区不考虑增加5mm,2:重冰区增加5mm</param> /// <param name="dia">直径</param> /// <param name="breakIceCover">断线覆冰率</param> public void AddBreakGKHang(bool bAdd5mm, double dia, double breakIceCover1, double breakIceCover2) { var elecCalsSpec = GlobalInfo.GetInstance().GetElecCalsSpecParas(); if (elecCalsSpec == null) { return; } ElecCalsWorkCondition iceWkCdt; if (bAdd5mm) { iceWkCdt = WeathComm.Where(item => item.Name == "地线覆冰").FirstOrDefault(); } else { iceWkCdt = WeathComm.Where(item => item.Name == "最大覆冰").FirstOrDefault(); } double iceThickness = iceWkCdt == null ? 0 : iceWkCdt.IceThickness; double thickness1 = ElecCalsToolBox.IceThicknessExChange(dia, breakIceCover1, iceThickness); double thickness2 = ElecCalsToolBox.IceThicknessExChange(dia, breakIceCover2, iceThickness); WeathComm.Add(new ElecCalsWorkCondition() { Name = bAdd5mm ? "断线(导线+5mm)" : "断线", IceThickness = thickness1, Temperature = elecCalsSpec.BreakTemp, WindSpeed = elecCalsSpec.BreakWind, }); WeathComm.Add(new ElecCalsWorkCondition() { Name = bAdd5mm ? "断线开断(导线+5mm)" : "断线开断", IceThickness = thickness2, Temperature = elecCalsSpec.BreakTemp, WindSpeed = elecCalsSpec.BreakWind, }); WeathComm.Add(new ElecCalsWorkCondition() { Name = bAdd5mm ? "断线满冰(导线+5mm)" : "断线满冰", IceThickness = iceThickness, Temperature = iceWkCdt == null ? 0 : iceWkCdt.Temperature, WindSpeed = 0, }); }
/// <summary> /// 换算45风的风速 /// </summary> /// <param name="angle"></param> public void ConverWind45(bool isBackSide, double angle) { var temp = WeathComm.Where(item => item.Name == "换算最大风速").FirstOrDefault(); var wind1 = ElecCalsToolBox.Wind45ExChange1(temp == null ? 0 : temp.WindSpeed, angle); var wind2 = ElecCalsToolBox.Wind45ExChange2(temp == null ? 0 : temp.WindSpeed, angle); WeathComm.AddRange(new List <ElecCalsWorkCondition>() { new ElecCalsWorkCondition() { Name = "顺线路外角侧45风", IceThickness = temp.IceThickness, Temperature = temp.Temperature, WindSpeed = isBackSide ? wind1 : wind2, BaseWindSpeed = temp.BaseWindSpeed, }, new ElecCalsWorkCondition() { Name = "逆线路内角侧45风", IceThickness = temp.IceThickness, Temperature = temp.Temperature, WindSpeed = isBackSide ? wind1 : wind2, BaseWindSpeed = temp.BaseWindSpeed, }, }); WeathComm.AddRange(new List <ElecCalsWorkCondition>() { new ElecCalsWorkCondition() { Name = "逆线路外角侧45风", IceThickness = temp.IceThickness, Temperature = temp.Temperature, WindSpeed = !isBackSide ? wind1 : wind2, BaseWindSpeed = temp.BaseWindSpeed, }, new ElecCalsWorkCondition() { Name = "顺线路内角侧45风", IceThickness = temp.IceThickness, Temperature = temp.Temperature, WindSpeed = !isBackSide ? wind1 : wind2, BaseWindSpeed = temp.BaseWindSpeed, }, }); }
/// <summary> /// 增加断线工况-耐张塔 /// </summary> /// <param name="bGrd">是否是地线:1 地线; 0 导线</param> /// <param name="grdIceUnbaPara">地线不平衡张力取值,1:轻冰区不考虑增加5mm,2:重冰区增加5mm</param> /// <param name="dia">直径</param> /// <param name="breakIceCover">断线覆冰率</param> public void AddBreakGKStrain(string name, int bGrd, int grdIceUnbaPara, double dia, double breakIceCover) { double thickness; ElecCalsWorkCondition iceWkCdt; var elecCalsSpec = GlobalInfo.GetInstance().GetElecCalsSpecParas(); if (elecCalsSpec == null) { return; } if (bGrd == 1 && grdIceUnbaPara == 2) { //地线不平衡张力考虑+5m时,要找到地线覆冰工况 iceWkCdt = WeathComm.Where(item => item.Name == "地线覆冰").FirstOrDefault(); if (iceWkCdt == null) { return; } thickness = ElecCalsToolBox.IceThicknessExChange(dia, breakIceCover, iceWkCdt.IceThickness); } else { //导线以及地线不平衡张力不考虑+5m 要找到最大覆冰工况 iceWkCdt = WeathComm.Where(item => item.Name == "最大覆冰").FirstOrDefault(); if (iceWkCdt == null) { return; } thickness = ElecCalsToolBox.IceThicknessExChange(dia, breakIceCover, iceWkCdt.IceThickness); } WeathComm.Add(new ElecCalsWorkCondition() { Name = name, IceThickness = thickness, Temperature = elecCalsSpec.BreakTemp, WindSpeed = elecCalsSpec.BreakWind, }); }
public void SetAverage(double indAveHei = 0, double grdAveHei = 0) { if (indAveHei <= 0) { //如果平均高度未设置,那么根据电压等级取值,此处平均高度是计算应力弧垂 IndAveHei = ElecCalsToolBox.AveHeightDefault(Volt); } else { IndAveHei = indAveHei; } if (grdAveHei <= 0) { GrdAveHei = IndAveHei; } else { GrdAveHei = grdAveHei; } }
protected void UpdateTensinPara(string towerType, string iceArea) { var iceWea = WeatherParas.WeathComm.Where(item => item.Name == "最大覆冰").FirstOrDefault(); if (iceWea == null) { BreakTensionPara = 0; UnbaTensionPara = 0; return; } double iceThick = iceWea.IceThickness; BreakTensionPara = ElecCalsToolBox.UBlanceK(towerType, iceArea, iceThick, CommParas.Terrain, bGrd == 0 ? "导线": "地线", DevideNum); UnbaTensionPara = ElecCalsToolBox.IBlanceK(towerType, iceArea, iceThick, bGrd == 0 ? "导线" : "地线"); if (towerType == "悬垂塔") { BreakTensionGrdBrePara = ElecCalsToolBox.UBlanceK("耐张塔", iceArea, iceThick, CommParas.Terrain, bGrd == 0 ? "导线" : "地线", DevideNum); UnbaTensionGrdBrePara = ElecCalsToolBox.IBlanceK("耐张塔", iceArea, iceThick, bGrd == 0 ? "导线" : "地线"); } }
/// <summary> /// 更新悬垂塔的的覆冰率 /// </summary> /// <param name="wkDdts"></param> /// <param name="iceArea"></param> public void UpateIceCovrage(List <ElecCalsWorkCondition> wkDdts, string iceArea) { //在悬垂塔的BreakIceCoverPerII,UnbaIceCoverPerII指的应该是地线开断的情况 var backIceWkCdt = wkDdts.Where(item => item.Name == "最大覆冰").FirstOrDefault(); double iceThick = backIceWkCdt == null ? 0 : backIceWkCdt.IceThickness; Catagory = ElecCalsToolBox.GetCatogory(Volt.ToString()); BreakIceCoverPer = ElecCalsToolBox.UBlanceR("悬垂塔", iceThick, Catagory); BreakIceCoverPerII = ElecCalsToolBox.UBlanceR("耐张塔", iceThick, Catagory); //1:考虑断线覆冰率 2:不考虑断线覆冰率 BreakIceCoverPara = iceThick >= 20 ? 1 : 2; if (iceArea == "轻冰区") { UnbaIceCoverPerI = 1; UnbaIceCoverPerII = 1; } else { UnbaIceCoverPerI = ElecCalsToolBox.IBlanceR2("悬垂塔", Catagory); UnbaIceCoverPerII = ElecCalsToolBox.IBlanceR2("耐张塔", Catagory); } }
/// <summary> /// 计算给定档距下各个工况的应力 /// </summary> /// <param name="span"></param> /// <returns></returns> protected Dictionary <string, double> CalFTable(double span) { if (bGrd == 0) { EffectPara = SideParas.IndEffectPara; SafePara = SideParas.IndSafePara; AvePara = SideParas.IndAnPara; } else if (bGrd == 1) { EffectPara = SideParas.GrdEffectPara; SafePara = SideParas.GrdSafePara; AvePara = SideParas.GrdAnPara; } else { //为什么单独给OPGW列出来呢,这样使用还不方便 OPGWEffectPara = SideParas.OPGWEffectPara; OPGWSafePara = SideParas.OPGWSafePara; OPGWAnPara = SideParas.OPGWAnPara; EffectPara = SideParas.OPGWEffectPara; SafePara = SideParas.OPGWSafePara; AvePara = SideParas.OPGWAnPara; } #region 照Excel的算法 var maxWindWkCdt = WeatherParas.WeathComm.Where(item => item.Name == "换算最大风速").First(); var minTempWkCdt = WeatherParas.WeathComm.Where(item => item.Name == "最低气温").First(); var maxIceWkCdt = WeatherParas.WeathComm.Where(item => item.Name == "最大覆冰").First(); var aveTempWkCdt = WeatherParas.WeathComm.Where(item => item.Name == "平均气温").First(); List <ElecCalsWorkCondition> wkCdtList = new List <ElecCalsWorkCondition>(); wkCdtList.Add(maxWindWkCdt); wkCdtList.Add(minTempWkCdt); wkCdtList.Add(maxIceWkCdt); wkCdtList.Add(aveTempWkCdt); CtrlStress = Math.Round(Fore / Sec / CommParas.GraAcc * EffectPara / SafePara, 3); AvaStress = Math.Round(Fore / Sec / CommParas.GraAcc * EffectPara * AvePara / 100, 3); CtrlGkName = ElecCalsToolBox2.GetCtrlWorkConditionName(BzDic, wkCdtList, span, Elas, CtrlStress, AvaStress, Coef); CtrlGkStress = CtrlGkName == "平均气温" ? AvaStress : CtrlStress; CtrlGk = WeatherParas.WeathComm.Where(item => item.Name == CtrlGkName).First(); YLTableXls = new Dictionary <string, double>(); foreach (var wd in WeatherParas.WeathComm) { double stress = ElecCalsToolBox2.StressNew(CtrlGkStress, BzDic[CtrlGkName].BiZai, CtrlGk.Temperature, Math.Round(Elas / CommParas.GraAcc, 0), Coef, span, BzDic[wd.Name].BiZai, wd.Temperature); YLTableXls.Add(wd.Name, stress); } #endregion //最大允许应力 double maxPerFor = Fore * CommParas.NewPerPara / SafePara / Sec; MaxPerFor = maxPerFor / CommParas.GraAcc; //年均应力 double avePerFor = Fore * CommParas.NewPerPara * AvePara / Sec; AvePerFor = avePerFor / CommParas.GraAcc / 100; //控制工况计算 //存储中间计算结果 Dictionary <string, double> YLCalDic = new Dictionary <string, double>(); Dictionary <string, double> ForCalDic = new Dictionary <string, double>(); foreach (var nameWd in WeatherParas.NameOfCtrWkCdt) { double calFor = nameWd != "平均气温" ? maxPerFor : avePerFor; //均采用综合比载计算 double calBz = BzDic[nameWd].g7; double temVal = WeatherParas.WeathComm.Where(item => item.Name == nameWd).First().Temperature; double fm = (Elas * Math.Pow(calBz, 2) * Math.Pow(span, 2) / 24 / Math.Pow(calFor, 2)) - (calFor + Coef * Elas * temVal); YLCalDic.Add(nameWd, fm); //存储每个工况初始控制应力取值 ForCalDic.Add(nameWd, calFor); } //确定控制工况 //存储各个工况应力,采用字典模式 Dictionary <string, double> ForDic = new Dictionary <string, double>(); YLCalDic = (from entry in YLCalDic orderby entry.Value descending select entry).ToDictionary(pair => pair.Key, pair => pair.Value); string CtrName = YLCalDic.First().Key; double CtrFm = YLCalDic.First().Value; ForDic.Add(CtrName, ForCalDic[CtrName]); //将控制工况存储下来 CtrNaSave = CtrName; CtrYLSave = CtrFm; foreach (var wd in WeatherParas.WeathComm) { if (wd.Name == CtrName) { continue; } double calBz = BzDic[wd.Name].g7; double temVal = WeatherParas.WeathComm.Where(item => item.Name == wd.Name).First().Temperature; double temA = CtrFm + Coef * Elas * temVal; double temB = Elas * Math.Pow(calBz, 2) * Math.Pow(span, 2) / 24; double calFor = ElecCalsToolBox.caculateCurDelta(temA, temB); ForDic.Add(wd.Name, calFor); } return(ForDic); }
/// <summary> /// #计算导线比载,默认采用老规范计算,计算参数取1,新规范取2 /// </summary> /// <param name="CalType"></param> public void CalBZ(int CalType = 1) { //计算比载 var graAcc = CommParas.GraAcc; BzDic = new Dictionary <string, BZResult>(); //换算最大风速值 var maxWindCon = WeatherParas.WeathComm.Where(item => item.Name == "换算最大风速").First().WindSpeed; var maxWindSt = WeatherParas.WeathComm.Where(item => item.Name == "最大风速").First().WindSpeed; double maxUpbaWindSt = 0, maxUpbaWindCon = 0; //如果存在不均匀风工况 if (WeatherParas.WeathComm.Where(item => item.Name == "不均匀风").Count() > 0) { maxUpbaWindSt = WeatherParas.WeathComm.Where(item => item.Name == "不均匀风").First().WindSpeed; maxUpbaWindCon = WeatherParas.WeathComm.Where(item => item.Name == "换算不均匀风").First().WindSpeed; } //g1为统一值 Comg1 = Wei * graAcc / Sec; foreach (var weaItem in WeatherParas.WeathComm) { if (CalType == 1) { BZResult bz = new BZResult(); //温度 var temVal = weaItem.Temperature; double winVal; // 大风工况采用换算后的数值计算 if (weaItem.Name == "最大风速") { winVal = maxWindCon; } else if (weaItem.Name == "不均匀风") { winVal = maxUpbaWindCon; } else { winVal = weaItem.WindSpeed; } double iceVal = weaItem.IceThickness; double alpha = ElecCalsToolBox.WindAlpha(winVal, iceVal, 1); bz.g1 = Comg1; double g2 = graAcc * 0.9 * Math.PI * iceVal * (iceVal + Dia) * 1e-3 / Sec; bz.g2 = g2; double g3 = Comg1 + g2; bz.g3 = g3; // Usc系数不区分覆冰与不覆冰 double usc = ElecCalsToolBox.WindEpson(iceVal, Dia); //横向比载 double g4 = 0.625 * Math.Pow(winVal, 2) * Dia * alpha * usc * 1e-3 / Sec; bz.g4 = g4; //在覆冰计算中,计入覆冰增大系数 double bex = ElecCalsToolBox.WindLoadEnlargeCoe(iceVal); double g5 = 0.625 * Math.Pow(winVal, 2) * (Dia + 2 * iceVal) * alpha * usc * bex * 1e-3 / Sec; bz.g5 = g5; double g6 = Math.Sqrt(Math.Pow(Comg1, 2) + Math.Pow(g4, 2)); bz.g6 = g6; double g7 = Math.Sqrt(Math.Pow(g3, 2) + Math.Pow(g5, 2)); bz.g7 = g7; //按照Excel的算法 bz.BiZai = ElecCalsToolBox2.BiZai(Wei * 1000, Dia, Sec, weaItem.IceThickness, weaItem.WindSpeed, weaItem.BaseWindSpeed) / 1000; bz.HorBizai = ElecCalsToolBox2.BiZaiH(Dia, weaItem.IceThickness, weaItem.WindSpeed, weaItem.BaseWindSpeed, Sec) / 1000; bz.VerHezai = ElecCalsToolBox2.Weight(Wei * 1000, Dia, weaItem.IceThickness) / 1000; bz.VerBizai = bz.VerHezai / Sec; bz.WindHezai = ElecCalsToolBox2.WindPa(CommParas.VoltStr, Dia, weaItem.IceThickness, weaItem.WindSpeed, weaItem.BaseWindSpeed) / 1000; BzDic.Add(weaItem.Name, bz); } } }
/// <summary> /// /// </summary> /// <param name="ProjeIn"></param> public void UpdataLevelOfLine(ProInfo projeIn) { LevelOfLine = ElecCalsToolBox.GetLevelOfLine(projeIn.Volt, projeIn.ACorDC); }