Beispiel #1
0
        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;
                }
            }
        }
Beispiel #3
0
        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,
                },
            });
        }
Beispiel #4
0
        /// <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,
            });
        }
Beispiel #5
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,
                },
            });
        }
Beispiel #6
0
        /// <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;
            }
        }
Beispiel #8
0
        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);
            }
        }
Beispiel #10
0
        /// <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);
        }
Beispiel #11
0
        /// <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);
 }