示例#1
0
        /// <summary>
        /// 计算绝缘子串的风荷载和垂直荷载
        /// </summary>
        public void CalsStrLoad()
        {
            foreach (var weaItem in WireData.WeatherParas.WeathComm)
            {
                double wload = Math.Round(ElecCalsToolBox2.StringWind(HangStr.PieceNum, HangStr.LNum, HangStr.GoldPieceNum, weaItem.IceThickness, weaItem.WindSpeed, weaItem.BaseWindSpeed, out string str1), 3);
                double vload = HangStr.Weight + WeightIceIn(weaItem.IceThickness) * (HangStr.PieceNum * HangStr.LNum + HangStr.GoldPieceNum);

                StrLoad.Add(weaItem.Name, new StrLoadResult
                {
                    WindLoad = wload,
                    VerLoad  = vload,
                });
            }

            WindArea = 0.04 * (HangStr.PieceNum * HangStr.LNum + HangStr.GoldPieceNum);
        }
        /// <summary>
        ///
        /// </summary>
        /// <param name="span"></param>
        public override void CalDFCure(double span, double repStrLen, double cl, char terrainType, double wireHei)
        {
            double bzHighTemp = WireData.BzDic["最高气温"].BiZai;
            double ylHighTemp = WireData.YLTableXls["最高气温"];

            HC1 = Math.Round(bzHighTemp / ylHighTemp / 8 * Math.Pow(span, 2), 1);
            HC2 = SpaceStr.GDHei - repStrLen - cl;
            HC  = Math.Min(HC1, HC2);

            double windHBizai = WireData.BzDic["换算最大风速"].HorBizai;
            double windVBizai = WireData.BzDic["换算最大风速"].VerBizai;

            WindAngle = Math.Atan(windHBizai / windVBizai) / Math.PI * 180;

            CalHei = SpaceStr.GDHei - (repStrLen + 2d / 3 * HC) * Math.Cos(WindAngle / 180 * Math.PI);

            WireWindPara = ElecCalsToolBox2.UZFunction(CalHei, terrainType, wireHei);

            double terrainPara = ElecCalsToolBox2.TerrainValue(terrainType);

            StrWindPara = Math.Round(Math.Pow(SpaceStr.GDHei / wireHei, terrainPara * 2), 3);
        }
示例#3
0
        /// <summary>
        /// 计算跳线绝缘子串的风荷载
        /// </summary>
        /// <param name="volt">电压</param>
        /// <param name="anSideWkCdtList">另一侧的工况</param>
        public void CalsWindLoad(string volt, List <ElecCalsWorkCondition> anSideWkCdtList)
        {
            foreach (var weaItem in WireData.WeatherParas.WeathComm)
            {
                var anWea = anSideWkCdtList.Where(wea => wea.Name == weaItem.Name).FirstOrDefault();

                JumpStrLoadResult rslt = new JumpStrLoadResult();

                rslt.Temperature = weaItem.Temperature;

                //冰厚,风速和基本风速需要比较大号侧和小号侧相应的工况,取其中的较大值
                rslt.IceThickness  = (anWea != null && anWea.IceThickness > weaItem.IceThickness) ? anWea.IceThickness : weaItem.IceThickness;
                rslt.WindSpeed     = (anWea != null && anWea.WindSpeed > weaItem.WindSpeed) ? anWea.WindSpeed : weaItem.WindSpeed;
                rslt.BaseWindSpeed = (anWea != null && anWea.BaseWindSpeed > weaItem.BaseWindSpeed) ? anWea.BaseWindSpeed : weaItem.BaseWindSpeed;

                rslt.JumpStrWindLoad = Math.Round(ElecCalsToolBox2.StringWind(JumpStr.PieceNum, JumpStr.LNum, JumpStr.GoldPieceNum, rslt.IceThickness, rslt.WindSpeed, rslt.BaseWindSpeed, out string str1), 3);
                rslt.JumpWindLoad    = Math.Round(ElecCalsToolBox2.WindPaT(volt, JmWireData.Dia, rslt.IceThickness, rslt.WindSpeed, rslt.BaseWindSpeed, out string str2) / 1000, 3) * JumpStr.SoftLineLen;
                rslt.SuTubleWindLoad = Math.Round(ElecCalsToolBox2.WindPaT(volt, JumpStr.SuTubleDia, rslt.IceThickness, rslt.WindSpeed, rslt.BaseWindSpeed, out string str3) / 1000, 3) * JumpStr.SuTubleLen;

                JumpStrLoad.Add(weaItem.Name, rslt);
            }
        }
示例#4
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);
        }
示例#5
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);
                }
            }
        }