diff --git a/core.cs b/core.cs index cf0b24b..82a2cf1 100644 --- a/core.cs +++ b/core.cs @@ -9,29 +9,20 @@ namespace conductortension //area 导线截面 //t 温度 // l 档距 - public static double Fx(double E,double load,double tension,double alpha,double area,double t) + public static double Fx(double E, double load, double tension, double alpha, double area, double t,double l) { - return E * Math.Pow(load / tension, 2) /24- tension / area - alpha * E * t; + return E * Math.Pow(load*l / tension, 2) / 24 - tension / area - alpha * E * t; } public static bool CalZhangLi(calStressLoadNew inPut, ref double ZhangLi) { //张力=T6 - //T6=T5-(T5^2*(T5+a)-b)/(T5^2*3+T5*a*2) - //T5=T4-(T4^2*(T4+a)-b)/(T4^2*3+T4*a*2) - //T4=T3-(T3^2*(T3+a)-b)/(T3^2*3+T3*a*2) - //T3=T2-(T2^2*(T2+a)-b)/(T2^2*3+T2*a*2) - //T2=T1-(T1^2*(T1+a)-b)/(T1^2*3+T1*a*2) - //T1=最大使用张力-(最大使用张力^2*(最大使用张力+a)-b)/(最大使用张力^2*3+最大使用张力*a*2) - //a=截面积*控制工况荷载^2*档距^2*弹性模量/(控制工况应力^2*24)-控制工况应力+温度线膨胀系数*截面积*弹性模量*(待求工况温度-控制工况温度) - //b=截面积*弹性模量*待求工况综合荷载^2*档距^2/24 - //计算最大使用张力 double ZuiDaShiYongZhangLi; //最大使用张力=计算拉断力*保证破断张力取计算拉断力的/安全系数 - ZuiDaShiYongZhangLi = inPut.LaDuanLi * inPut.BaoZhengPoDuanZhangLiXiShu / inPut.AnQuan; + ZuiDaShiYongZhangLi = inPut.LaDuanLi * inPut.BaoZhengPoDuanZhangLiXiShu/100 / inPut.AnQuan; //ZuiDaShiYongZhangLi = inPut.LaDuanLi / inPut.AnQuan; //计算温度线膨胀系数 - double XianPengZhang = inPut.XianPengZhang * 0.000001; + double XianPengZhang = inPut.XianPengZhang; //计算平均运行张力 //先判断年平均运行张力(%)是否为百分数,如果是百分数则变为小数计算。 if (inPut.NianPingJun > 100 || inPut.NianPingJun <= 0) @@ -42,7 +33,7 @@ namespace conductortension { inPut.NianPingJun = inPut.NianPingJun / 100; } - double PingJunYunXingZhangLi = inPut.LaDuanLi * inPut.BaoZhengPoDuanZhangLiXiShu * inPut.NianPingJun;///////////////////////////////////////////////////////////////////////年平均是20%还是0.2,这里要求的是小数 + double PingJunYunXingZhangLi = inPut.LaDuanLi * inPut.BaoZhengPoDuanZhangLiXiShu/100 * inPut.NianPingJun;///////////////////////////////////////////////////////////////////////年平均是20%还是0.2,这里要求的是小数 if (inPut.SheJiFengSuGaoDu == 0) { inPut.SheJiFengSuGaoDu = 10; @@ -51,7 +42,7 @@ namespace conductortension { inPut.PingJunGaoDu = 20;//TODO:需要依据电压等级选择 } - double a, b, T1, T2, T3, T4, T5, T6; + //double a, b, T1, T2, T3, T4, T5, T6; //计算待求工况比载 double DaiHeZai = 0; //待求工况比载 if (CalHeZai(inPut, ref DaiHeZai) == false) @@ -88,7 +79,9 @@ namespace conductortension NianPingJun.DaiFeng = NianPingJun.PingFeng; NianPingJun.DaiWen = NianPingJun.PingWen; DaFeng.DaiBing = DaFeng.FengBing; - DaFeng.DaiFeng = DaFeng.FengFeng; + double wind_velocity; + wind_velocity = Math.Round(DaFeng.FengFeng * Math.Pow(DaFeng.PingJunGaoDu / DaFeng.SheJiFengSuGaoDu, 0.16), 2); + DaFeng.DaiFeng = wind_velocity;//大风工况风速折算到平均高。 DaFeng.DaiWen = DaFeng.FengWen; FuBing.DaiBing = FuBing.BingBing; FuBing.DaiFeng = FuBing.BingFeng; @@ -108,375 +101,109 @@ namespace conductortension ChuShiNianPingJun[3] = ChuShiNianPingJun[1] / ChuShiNianPingJun[2]; ChuShiDaFeng[3] = ChuShiDaFeng[1] / ChuShiDaFeng[2]; ChuShiFuBing[3] = ChuShiFuBing[1] / ChuShiFuBing[2]; - //5:计算并存储Fo - ChuShiZuiDiQiWen[4] = -1 * (ChuShiZuiDiQiWen[2] + inPut.JieMianJi * inPut.MoLiang * XianPengZhang * ChuShiZuiDiQiWen[0]); - ChuShiNianPingJun[4] = -1 * (ChuShiNianPingJun[2] + inPut.JieMianJi * inPut.MoLiang * XianPengZhang * ChuShiNianPingJun[0]); - ChuShiDaFeng[4] = -1 * (ChuShiDaFeng[2] + inPut.JieMianJi * inPut.MoLiang * XianPengZhang * ChuShiDaFeng[0]); - ChuShiFuBing[4] = -1 * (ChuShiFuBing[2] + inPut.JieMianJi * inPut.MoLiang * XianPengZhang * ChuShiFuBing[0]); - //二、将四个初始计算数据按照P/T值由小到大排序,形成计算数组 - double[,] JiSuanGongKuangShuZu = new double[5, 4]; //共5行,分别代表1:控制工况(1最低气温,2年平均气温,3大风,4覆冰),2:温度,3:比载,4:应力,5:Fo=-(T+A*E*a*t)(N) - for (int i = 0; i < 5; i++) + + //计算4个工况下的Fx by 杜孟远2020.4.17 + //t_dangju 试探最大Fx时使用的档距 + int[] MaxFxConditionFlag = new int[inPut.DangJu+1];//记录不同t_dangju下,哪种工况的Fx最大。1代表最低温,2代表年平均温,3代表大风,4代表覆冰。0位置元素无效。 + MaxFxConditionFlag[0]=1; + for (int t_dangju = inPut.DangJu-1; t_dangju <= inPut.DangJu; t_dangju++) { - for (int j = 0; j < 4; j++) + double Fx_dangjuZuiDiWen; + double Fx_dangjuNianPingJun; + double Fx_dangjuDaFeng; + double Fx_dangjuFuBing; + Fx_dangjuZuiDiWen = Fx(inPut.MoLiang, ChuShiZuiDiQiWen[1], ChuShiZuiDiQiWen[2], inPut.XianPengZhang, inPut.JieMianJi, ChuShiZuiDiQiWen[0], t_dangju); + Fx_dangjuNianPingJun = Fx(inPut.MoLiang, ChuShiNianPingJun[1], ChuShiNianPingJun[2], inPut.XianPengZhang, inPut.JieMianJi, ChuShiNianPingJun[0], t_dangju); + Fx_dangjuDaFeng = Fx(inPut.MoLiang, ChuShiDaFeng[1], ChuShiDaFeng[2], inPut.XianPengZhang, inPut.JieMianJi, ChuShiDaFeng[0], t_dangju); + Fx_dangjuFuBing = Fx(inPut.MoLiang, ChuShiFuBing[1], ChuShiFuBing[2], inPut.XianPengZhang, inPut.JieMianJi, ChuShiFuBing[0], t_dangju); + double maxFx; + maxFx = Fx_dangjuZuiDiWen; + MaxFxConditionFlag[t_dangju] = 1; + if (maxFx < Fx_dangjuNianPingJun) { - JiSuanGongKuangShuZu[i, j] = 0; + maxFx = Fx_dangjuNianPingJun; + MaxFxConditionFlag[t_dangju] = 2; } - } - //排序数组,将四组P/T值存入排序数组进行由小到大的冒泡排序 - double[,] PaiXuShuZu = new double[4, 2]; - PaiXuShuZu[0, 0] = ChuShiZuiDiQiWen[3]; //第二维度的0代表P/T值 - PaiXuShuZu[0, 1] = 1;//第二维度的1代表工况序号,用于排序后的换位 - PaiXuShuZu[1, 0] = ChuShiNianPingJun[3]; - PaiXuShuZu[1, 1] = 2; - PaiXuShuZu[2, 0] = ChuShiDaFeng[3]; - PaiXuShuZu[2, 1] = 3; - PaiXuShuZu[3, 0] = ChuShiFuBing[3]; - PaiXuShuZu[3, 1] = 4; - double temp_PT = 0; - double temp_BianHao = 0; - for (int i = 0; i < 4; i++) - { - for (int j = 0; j < 3 - i; j++) + if (maxFx < Fx_dangjuDaFeng) { - if (PaiXuShuZu[j, 0] > PaiXuShuZu[j + 1, 0]) - { - temp_PT = PaiXuShuZu[j, 0]; - temp_BianHao = PaiXuShuZu[j, 1]; - PaiXuShuZu[j, 0] = PaiXuShuZu[j + 1, 0]; - PaiXuShuZu[j, 1] = PaiXuShuZu[j + 1, 1]; - PaiXuShuZu[j + 1, 0] = temp_PT; - PaiXuShuZu[j + 1, 1] = temp_BianHao; + maxFx = Fx_dangjuDaFeng; + MaxFxConditionFlag[t_dangju] = 3; + } + if (maxFx < Fx_dangjuFuBing) + { + maxFx = Fx_dangjuFuBing; + MaxFxConditionFlag[t_dangju] = 4; + } + if (MaxFxConditionFlag[t_dangju]!=MaxFxConditionFlag[t_dangju-1] )//有突变,找到了临界档距的范围 + { + double criticalSpan; + double formerTension=0; + double formerLoad=0; + double formerTemperature=0; + switch (MaxFxConditionFlag[t_dangju - 1]) + { + case 1: + formerLoad = ChuShiZuiDiQiWen[1]; + formerTension = ChuShiZuiDiQiWen[2]; + formerTemperature = ChuShiZuiDiQiWen[0]; + break; + case 2: + formerLoad = ChuShiNianPingJun[1]; + formerTension = ChuShiNianPingJun[2]; + formerTemperature = ChuShiNianPingJun[0]; + break; + case 3: + formerLoad = ChuShiDaFeng[1]; + formerTension = ChuShiDaFeng[2]; + formerTemperature = ChuShiDaFeng[0]; + break; + case 4: + formerLoad = ChuShiFuBing[1]; + formerTension = ChuShiFuBing[2]; + formerTemperature = ChuShiFuBing[0]; + break; + default: + break; } - } - } - //排序完成后将四组工况数据按照排序顺序写入计算工况数组 - for (int i = 0; i < 4; i++) - { - if (PaiXuShuZu[i, 1] == 1) - { - JiSuanGongKuangShuZu[0, i] = 1;//1代表最低温 - JiSuanGongKuangShuZu[1, i] = ChuShiZuiDiQiWen[0]; - JiSuanGongKuangShuZu[2, i] = ChuShiZuiDiQiWen[1]; - JiSuanGongKuangShuZu[3, i] = ChuShiZuiDiQiWen[2]; - JiSuanGongKuangShuZu[4, i] = ChuShiZuiDiQiWen[4]; - } - else if (PaiXuShuZu[i, 1] == 2) - { - JiSuanGongKuangShuZu[0, i] = 2;//2代表年平均气温 - JiSuanGongKuangShuZu[1, i] = ChuShiNianPingJun[0]; - JiSuanGongKuangShuZu[2, i] = ChuShiNianPingJun[1]; - JiSuanGongKuangShuZu[3, i] = ChuShiNianPingJun[2]; - JiSuanGongKuangShuZu[4, i] = ChuShiNianPingJun[4]; - } - else if (PaiXuShuZu[i, 1] == 3) - { - JiSuanGongKuangShuZu[0, i] = 3;//3代表最大风 - JiSuanGongKuangShuZu[1, i] = ChuShiDaFeng[0]; - JiSuanGongKuangShuZu[2, i] = ChuShiDaFeng[1]; - JiSuanGongKuangShuZu[3, i] = ChuShiDaFeng[2]; - JiSuanGongKuangShuZu[4, i] = ChuShiDaFeng[4]; - } - else if (PaiXuShuZu[i, 1] == 4) - { - JiSuanGongKuangShuZu[0, i] = 4;//4代表最大覆冰 - JiSuanGongKuangShuZu[1, i] = ChuShiFuBing[0]; - JiSuanGongKuangShuZu[2, i] = ChuShiFuBing[1]; - JiSuanGongKuangShuZu[3, i] = ChuShiFuBing[2]; - JiSuanGongKuangShuZu[4, i] = ChuShiFuBing[4]; - } - }//完成计算工况数组的录入 + double currentTension=0; + double currentLoad=0; + double currentTemperature=0; + switch (MaxFxConditionFlag[t_dangju]) + { + case 1: + currentLoad = ChuShiZuiDiQiWen[1]; + currentTension = ChuShiZuiDiQiWen[2]; + currentTemperature = ChuShiZuiDiQiWen[0]; + break; + case 2: + currentLoad = ChuShiNianPingJun[1]; + currentTension = ChuShiNianPingJun[2]; + currentTemperature = ChuShiNianPingJun[0]; + break; + case 3: + currentLoad = ChuShiDaFeng[1]; + currentTension = ChuShiDaFeng[2]; + currentTemperature = ChuShiDaFeng[0]; + break; + case 4: + currentLoad = ChuShiFuBing[1]; + currentTension = ChuShiFuBing[2]; + currentTemperature = ChuShiFuBing[0]; + break; + default: + break; + } + double t1=24 / inPut.MoLiang * (formerTension - currentTension) / inPut.JieMianJi; + double t2=24 * inPut.XianPengZhang * (formerTemperature - currentTemperature) ; + double t3= Math.Pow(formerLoad / formerTension, 2) - Math.Pow(currentLoad / currentTension, 2); + criticalSpan = Math.Sqrt( (t1+ t2)/t3);//TODO:暂时不用 + Console.WriteLine("{0}", criticalSpan); - // Lab/Lbc/Lcd只算前三个工况 - // Lac/Lbd只算前两个工况 - // Lad只算第一个工况 - double[] QianSanGe = new double[3]; - double[] QianLiangGe = new double[2]; - double DiYiGe = 0; - //以此计算这几个值 - //计算Lab/Lbc/Lcd中的第一个值 - if (PaiXuShuZu[0, 0] == PaiXuShuZu[1, 0]) - { - QianSanGe[0] = -1; - } - else if ((JiSuanGongKuangShuZu[4, 1] - JiSuanGongKuangShuZu[4, 0]) / (Math.Pow(PaiXuShuZu[0, 0], 2) - Math.Pow(PaiXuShuZu[1, 0], 2)) > 0) - { - QianSanGe[0] = Math.Pow(24 * (JiSuanGongKuangShuZu[4, 1] - JiSuanGongKuangShuZu[4, 0]) / (Math.Pow(PaiXuShuZu[0, 0], 2) - Math.Pow(PaiXuShuZu[1, 0], 2)) / inPut.MoLiang / inPut.JieMianJi, 0.5); - } - else - { - QianSanGe[0] = -1; - } - //计算Lab/Lbc/Lcd中的第二个值 - if (PaiXuShuZu[1, 0] == PaiXuShuZu[2, 0]) - { - QianSanGe[1] = -1; - } - else if ((JiSuanGongKuangShuZu[4, 2] - JiSuanGongKuangShuZu[4, 1]) / (Math.Pow(PaiXuShuZu[1, 0], 2) - Math.Pow(PaiXuShuZu[2, 0], 2)) > 0) - { - QianSanGe[1] = Math.Pow(24 * (JiSuanGongKuangShuZu[4, 2] - JiSuanGongKuangShuZu[4, 1]) / (Math.Pow(PaiXuShuZu[1, 0], 2) - Math.Pow(PaiXuShuZu[2, 0], 2)) / inPut.MoLiang / inPut.JieMianJi, 0.5); - } - else - { - QianSanGe[1] = -1; - } - //计算Lab/Lbc/Lcd中的第三个值 - if (PaiXuShuZu[2, 0] == PaiXuShuZu[3, 0]) - { - QianSanGe[2] = -1; - } - else if ((JiSuanGongKuangShuZu[4, 3] - JiSuanGongKuangShuZu[4, 2]) / (Math.Pow(PaiXuShuZu[2, 0], 2) - Math.Pow(PaiXuShuZu[3, 0], 2)) > 0) - { - QianSanGe[2] = Math.Pow(24 * (JiSuanGongKuangShuZu[4, 3] - JiSuanGongKuangShuZu[4, 2]) / (Math.Pow(PaiXuShuZu[2, 0], 2) - Math.Pow(PaiXuShuZu[3, 0], 2)) / inPut.MoLiang / inPut.JieMianJi, 0.5); - } - else - { - QianSanGe[2] = -1; - } - //计算Lac/Lbd中的第一个值 - if (PaiXuShuZu[0, 0] == PaiXuShuZu[2, 0]) - { - QianLiangGe[0] = -1; - } - else if ((JiSuanGongKuangShuZu[4, 2] - JiSuanGongKuangShuZu[4, 0]) / (Math.Pow(PaiXuShuZu[0, 0], 2) - Math.Pow(PaiXuShuZu[2, 0], 2)) > 0) - { - QianLiangGe[0] = Math.Pow(24 * (JiSuanGongKuangShuZu[4, 2] - JiSuanGongKuangShuZu[4, 0]) / (Math.Pow(PaiXuShuZu[0, 0], 2) - Math.Pow(PaiXuShuZu[2, 0], 2)) / inPut.MoLiang / inPut.JieMianJi, 0.5); - } - else - { - QianLiangGe[0] = -1; - } - //计算Lac/Lbd中的第二个值 - if (PaiXuShuZu[1, 0] == PaiXuShuZu[3, 0]) - { - QianLiangGe[1] = -1; - } - else if ((JiSuanGongKuangShuZu[4, 3] - JiSuanGongKuangShuZu[4, 1]) / (Math.Pow(PaiXuShuZu[1, 0], 2) - Math.Pow(PaiXuShuZu[3, 0], 2)) > 0) - { - QianLiangGe[1] = Math.Pow(24 * (JiSuanGongKuangShuZu[4, 3] - JiSuanGongKuangShuZu[4, 1]) / (Math.Pow(PaiXuShuZu[1, 0], 2) - Math.Pow(PaiXuShuZu[3, 0], 2)) / inPut.MoLiang / inPut.JieMianJi, 0.5); - } - else - { - QianLiangGe[1] = -1; - } - //计算Lbd - if (PaiXuShuZu[0, 0] == PaiXuShuZu[3, 0]) - { - DiYiGe = -1; - } - else if ((JiSuanGongKuangShuZu[4, 3] - JiSuanGongKuangShuZu[4, 0]) / (Math.Pow(PaiXuShuZu[0, 0], 2) - Math.Pow(PaiXuShuZu[3, 0], 2)) > 0) - { - DiYiGe = Math.Pow(24 * (JiSuanGongKuangShuZu[4, 3] - JiSuanGongKuangShuZu[4, 0]) / (Math.Pow(PaiXuShuZu[0, 0], 2) - Math.Pow(PaiXuShuZu[3, 0], 2)) / inPut.MoLiang / inPut.JieMianJi, 0.5); - } - else - { - DiYiGe = -1; - } - //根据上述计算值即可判断临界档距有效计算值 - double[] LinJieDangJuYouXiaoJiSuanZhi = new double[4]; - //计算第一个临界档距有效计算值 - if (QianSanGe[0] < 0 || QianLiangGe[0] < 0 || DiYiGe < 0) - { - LinJieDangJuYouXiaoJiSuanZhi[0] = 0; - } - else - { - double MIN = QianSanGe[0]; - if (MIN > QianLiangGe[0]) - { - MIN = QianLiangGe[0]; } - if (MIN > DiYiGe) - { - MIN = DiYiGe; - } - LinJieDangJuYouXiaoJiSuanZhi[0] = MIN; - } - //计算第二个临界档距有效计算值 - if (QianSanGe[1] < 0 || QianLiangGe[1] < 0) - { - LinJieDangJuYouXiaoJiSuanZhi[1] = 0; - } - else - { - if (QianSanGe[1] <= QianLiangGe[1]) - { - LinJieDangJuYouXiaoJiSuanZhi[1] = QianSanGe[1]; - } - else - { - LinJieDangJuYouXiaoJiSuanZhi[1] = QianLiangGe[1]; - } - } - //计算第三个临界档距有效计算值 - if (QianSanGe[2] < 0) - { - LinJieDangJuYouXiaoJiSuanZhi[2] = 0; - } - else - { - LinJieDangJuYouXiaoJiSuanZhi[2] = QianSanGe[2]; - } - //定义第四个临界档距有效计算值 - LinJieDangJuYouXiaoJiSuanZhi[3] = 999999; - //完成临界档距有效计算值的计算 - - //临界档距表,第一列:临界档距,第二列:控制工况,第三列:气温,第四列:比载,第五列:应力 - double[,] LinJieDangJuBiao = new double[4, 5]; - for (int i = 0; i < 4; i++) - { - for (int j = 0; j < 5; j++) - { - LinJieDangJuBiao[i, j] = 0; - } - } - //计算第一行 - if (LinJieDangJuYouXiaoJiSuanZhi[0] != 0) - { - LinJieDangJuBiao[0, 0] = LinJieDangJuYouXiaoJiSuanZhi[0]; - LinJieDangJuBiao[0, 1] = JiSuanGongKuangShuZu[0, 0]; - LinJieDangJuBiao[0, 2] = JiSuanGongKuangShuZu[1, 0]; - LinJieDangJuBiao[0, 3] = JiSuanGongKuangShuZu[2, 0]; - LinJieDangJuBiao[0, 4] = JiSuanGongKuangShuZu[3, 0]; - } - else if (LinJieDangJuYouXiaoJiSuanZhi[1] != 0) - { - LinJieDangJuBiao[0, 0] = LinJieDangJuYouXiaoJiSuanZhi[1]; - LinJieDangJuBiao[0, 1] = JiSuanGongKuangShuZu[0, 1]; - LinJieDangJuBiao[0, 2] = JiSuanGongKuangShuZu[1, 1]; - LinJieDangJuBiao[0, 3] = JiSuanGongKuangShuZu[2, 1]; - LinJieDangJuBiao[0, 4] = JiSuanGongKuangShuZu[3, 1]; - } - else if (LinJieDangJuYouXiaoJiSuanZhi[2] != 0) - { - LinJieDangJuBiao[0, 0] = LinJieDangJuYouXiaoJiSuanZhi[2]; - LinJieDangJuBiao[0, 1] = JiSuanGongKuangShuZu[0, 2]; - LinJieDangJuBiao[0, 2] = JiSuanGongKuangShuZu[1, 2]; - LinJieDangJuBiao[0, 3] = JiSuanGongKuangShuZu[2, 2]; - LinJieDangJuBiao[0, 4] = JiSuanGongKuangShuZu[3, 2]; - } - else - { - LinJieDangJuBiao[0, 0] = LinJieDangJuYouXiaoJiSuanZhi[3]; - LinJieDangJuBiao[0, 1] = JiSuanGongKuangShuZu[0, 3]; - LinJieDangJuBiao[0, 2] = JiSuanGongKuangShuZu[1, 3]; - LinJieDangJuBiao[0, 3] = JiSuanGongKuangShuZu[2, 3]; - LinJieDangJuBiao[0, 4] = JiSuanGongKuangShuZu[3, 3]; - } - //计算第二个临界档距 - if (LinJieDangJuYouXiaoJiSuanZhi[1] > LinJieDangJuBiao[0, 0]) - { - LinJieDangJuBiao[1, 0] = LinJieDangJuYouXiaoJiSuanZhi[1]; - } - else if (LinJieDangJuYouXiaoJiSuanZhi[2] > LinJieDangJuBiao[0, 0]) - { - LinJieDangJuBiao[1, 0] = LinJieDangJuYouXiaoJiSuanZhi[2]; - } - else - { - LinJieDangJuBiao[1, 0] = LinJieDangJuYouXiaoJiSuanZhi[3]; - } - //计算第三个临界档距 - if (LinJieDangJuYouXiaoJiSuanZhi[2] > LinJieDangJuBiao[1, 0]) - { - LinJieDangJuBiao[2, 0] = LinJieDangJuYouXiaoJiSuanZhi[2]; - } - else - { - LinJieDangJuBiao[2, 0] = LinJieDangJuYouXiaoJiSuanZhi[3]; - } - //计算第二行(除[1,0]) - if (QianSanGe[0] == LinJieDangJuBiao[0, 0]) - { - LinJieDangJuBiao[1, 1] = JiSuanGongKuangShuZu[0, 1]; - LinJieDangJuBiao[1, 2] = JiSuanGongKuangShuZu[1, 1]; - LinJieDangJuBiao[1, 3] = JiSuanGongKuangShuZu[2, 1]; - LinJieDangJuBiao[1, 4] = JiSuanGongKuangShuZu[3, 1]; - } - else if (QianLiangGe[0] == LinJieDangJuBiao[0, 0]) - { - LinJieDangJuBiao[1, 1] = JiSuanGongKuangShuZu[0, 2]; - LinJieDangJuBiao[1, 2] = JiSuanGongKuangShuZu[1, 2]; - LinJieDangJuBiao[1, 3] = JiSuanGongKuangShuZu[2, 2]; - LinJieDangJuBiao[1, 4] = JiSuanGongKuangShuZu[3, 2]; - } - else if (QianSanGe[1] == LinJieDangJuBiao[0, 0]) - { - LinJieDangJuBiao[1, 1] = JiSuanGongKuangShuZu[0, 2]; - LinJieDangJuBiao[1, 2] = JiSuanGongKuangShuZu[1, 2]; - LinJieDangJuBiao[1, 3] = JiSuanGongKuangShuZu[2, 2]; - LinJieDangJuBiao[1, 4] = JiSuanGongKuangShuZu[3, 2]; - } - else - { - LinJieDangJuBiao[1, 1] = JiSuanGongKuangShuZu[0, 3]; - LinJieDangJuBiao[1, 2] = JiSuanGongKuangShuZu[1, 3]; - LinJieDangJuBiao[1, 3] = JiSuanGongKuangShuZu[2, 3]; - LinJieDangJuBiao[1, 4] = JiSuanGongKuangShuZu[3, 3]; - } - //计算第三行(除[2,0]) - if (QianSanGe[1] == LinJieDangJuBiao[1, 0]) - { - LinJieDangJuBiao[2, 1] = JiSuanGongKuangShuZu[0, 2]; - LinJieDangJuBiao[2, 2] = JiSuanGongKuangShuZu[1, 2]; - LinJieDangJuBiao[2, 3] = JiSuanGongKuangShuZu[2, 2]; - LinJieDangJuBiao[2, 4] = JiSuanGongKuangShuZu[3, 2]; - } - else - { - LinJieDangJuBiao[2, 1] = JiSuanGongKuangShuZu[0, 3]; - LinJieDangJuBiao[2, 2] = JiSuanGongKuangShuZu[1, 3]; - LinJieDangJuBiao[2, 3] = JiSuanGongKuangShuZu[2, 3]; - LinJieDangJuBiao[2, 4] = JiSuanGongKuangShuZu[3, 3]; - } - //计算第四行(除[3,0]) - LinJieDangJuBiao[3, 1] = JiSuanGongKuangShuZu[0, 3]; - LinJieDangJuBiao[3, 2] = JiSuanGongKuangShuZu[1, 3]; - LinJieDangJuBiao[3, 3] = JiSuanGongKuangShuZu[2, 3]; - LinJieDangJuBiao[3, 4] = JiSuanGongKuangShuZu[3, 3]; - //完成临界档距表的计算 - - //计算控制工况、控制气温、控制比载、控制张力 - if (inPut.DangJu < LinJieDangJuBiao[0, 0]) - { - KongZhiGongKuang = (int)LinJieDangJuBiao[0, 1]; - KongZhiQiWen = LinJieDangJuBiao[0, 2]; - KongZhiBiZai = LinJieDangJuBiao[0, 3]; - KongZhiYingLi = LinJieDangJuBiao[0, 4]; - } - else if (inPut.DangJu < LinJieDangJuBiao[1, 0]) - { - KongZhiGongKuang = (int)LinJieDangJuBiao[1, 1]; - KongZhiQiWen = LinJieDangJuBiao[1, 2]; - KongZhiBiZai = LinJieDangJuBiao[1, 3]; - KongZhiYingLi = LinJieDangJuBiao[1, 4]; - } - else if (inPut.DangJu < LinJieDangJuBiao[2, 0]) - { - KongZhiGongKuang = (int)LinJieDangJuBiao[2, 1]; - KongZhiQiWen = LinJieDangJuBiao[2, 2]; - KongZhiBiZai = LinJieDangJuBiao[2, 3]; - KongZhiYingLi = LinJieDangJuBiao[2, 4]; - } - else - { - KongZhiGongKuang = (int)LinJieDangJuBiao[3, 1]; - KongZhiQiWen = LinJieDangJuBiao[3, 2]; - KongZhiBiZai = LinJieDangJuBiao[3, 3]; - KongZhiYingLi = LinJieDangJuBiao[3, 4]; + //Console.WriteLine("{0}:{1}",t_dangju,MaxFxConditionFlag[t_dangju]); } - //计算a - a = inPut.JieMianJi * Math.Pow(KongZhiBiZai, 2) * Math.Pow(inPut.DangJu, 2) * inPut.MoLiang / (Math.Pow(KongZhiYingLi, 2) * 24) - KongZhiYingLi + XianPengZhang * inPut.JieMianJi * inPut.MoLiang * (inPut.DaiWen - KongZhiQiWen); - //计算b - b = inPut.JieMianJi * inPut.MoLiang * Math.Pow(DaiHeZai, 2) * Math.Pow(inPut.DangJu, 2) / 24; - - T1 = ZuiDaShiYongZhangLi - (Math.Pow(ZuiDaShiYongZhangLi, 2) * (ZuiDaShiYongZhangLi + a) - b) / (Math.Pow(ZuiDaShiYongZhangLi, 2) * 3 + ZuiDaShiYongZhangLi * a * 2); - T2 = T1 - (T1 * T1 * (T1 + a) - b) / (T1 * T1 * 3 + T1 * a * 2); - T3 = T2 - (T2 * T2 * (T2 + a) - b) / (T2 * T2 * 3 + T2 * a * 2); - T4 = T3 - (T3 * T3 * (T3 + a) - b) / (T3 * T3 * 3 + T3 * a * 2); - T5 = T4 - (T4 * T4 * (T4 + a) - b) / (T4 * T4 * 3 + T4 * a * 2); - T6 = T5 - (T5 * T5 * (T5 + a) - b) / (T5 * T5 * 3 + T5 * a * 2); - ZhangLi = T6; + Console.ReadKey(); ZhangLi = BaoLiuLiangWei(ZhangLi); return true; } @@ -514,7 +241,7 @@ namespace conductortension public double DaiBing; //待求工况覆冰(mm) public double DaiFeng; //待求工况风速(m/s) public double DaiWen; //待求工况气温(C) - public double DangJu; //档距(m) + public int DangJu; //档距(m) public double SheJiFengSuGaoDu; //设计基准风速高度 public double BaoZhengPoDuanZhangLiXiShu; //保证破断张力取计算拉断力的%,即张力系数 public double dxLoad; //线荷载 @@ -525,70 +252,7 @@ namespace conductortension // //综合荷载=Math.Pow(Math.Pow(垂直荷载,2)+Math.Pow(水平荷载,2),0.5) double ChuiZhiHeZai = 0; //垂直荷载=自重荷载+9.80665*0.9*PI*待求工况覆冰厚度*(待求工况覆冰厚度+导线直径)/1000 double ZiZhongHeZai = 0; //自重荷载=导线单位重量*9.80665/1000/ - //double ShuiPingHeZai = 0; //水平荷载=0.625*待求工况风速^2*(导线直径+2*待求工况覆冰厚度)*风压不均匀系数*(如果待求工况覆冰厚度>10或者导线直径<17,则为1.2,否则是1.1) - // //*(导线平均高度/设计风速基准高度)^(2*地面粗糙度指数)*地面粗糙度系数K/1000 - // double FengYaBuJunYun = CalFengYaBuJunYun(inPut.DaiFeng); //风压不均匀系数 - // double a = 0; //地面粗糙度指数a - // double K = 0; //系数K - // //计算地面粗糙度指数a和系数K - // if (inPut.CuCaoDu == 4) - // { - // a = inPut.CuCaoDu_a; - // K = inPut.CuCaoDu_K; - // } - // else if (CalCuCaoDu(inPut.CuCaoDu , ref a , ref K) == false) - // { - // return false; - // } - // if (inPut.SheJiFengSuGaoDu == 0) - // { - // inPut.SheJiFengSuGaoDu = 10; - // } - // if (inPut.PingJunGaoDu == 0) - // { - // inPut.PingJunGaoDu = 20; - // } - // //计算自重荷载 - // ZiZhongHeZai = inPut.ZhongLiang * 9.80665 / 1000; - // //计算垂直荷载 - // ChuiZhiHeZai = ZiZhongHeZai + 9.80665 * 0.9 * Math .PI * inPut.DaiBing * (inPut.DaiBing + inPut.WaiJing) / 1000; - // //计算水平荷载 - // double temp; //计算水平荷载中所需进行判断的中间值 - - // if (inPut.DaiBing> 0 || inPut.WaiJing <17) - // { - // temp = 1.2; - // } - // else - // { - // temp = 1.1; - // } - //// ShuiPingHeZai = 0.625 * Math.Pow(inPut.DaiFeng, 2) * (inPut.WaiJing + 2 * inPut.DaiBing) * FengYaBuJunYun * temp * Math.Pow(inPut.PingJunGaoDu / inPut.SheJiFengSuGaoDu, 2 * a) * K / 1000; - // ShuiPingHeZai =1 * Math.Pow(inPut.DaiFeng, 2) * (inPut.WaiJing + 2 * inPut.DaiBing) * FengYaBuJunYun * temp * Math.Pow(inPut.PingJunGaoDu / inPut.SheJiFengSuGaoDu, 2 * a) * K / 1600; - - // HeZai = Math.Pow(Math.Pow(ChuiZhiHeZai, 2) + Math.Pow(ShuiPingHeZai, 2), 0.5); - // // HeZai = BaoLiuLiangWei(HeZai); - double bi = 1;//覆冰增大系数B - - //if (inPut.DaiBing == 0) //'无冰工况 - // bi = 1; - //else if (inPut.DaiBing <= 5) - // bi = 1.1; - //else if (inPut.DaiBing <= 10) - // bi = 1.2; - //else if (inPut.DaiBing <= 15) - // bi = 1.3; - //else if (inPut.DaiBing <= 20) - // bi = 1.5; - //else if (inPut.DaiBing <= 25) - // bi = 1.7; - //else if (inPut.DaiBing <= 30) - // bi = 1.8; - //else if (inPut.DaiBing <= 40) - // bi = 1.9; - //else if (inPut.DaiBing <= 60) - // bi = 2; //导线力学计算不考虑覆冰增大系数 by 杜孟远 20200406 double u;//体型系数 @@ -607,20 +271,20 @@ namespace conductortension if (inPut.DaiBing == 0) //'无冰工况 { - if (inPut.DaiFeng < 20) - a = 1; - else if (inPut.DaiFeng < 27) - a = 0.85; - else if (inPut.DaiFeng < 31.5) - a = 0.75; - else - a = 0.7; - dx3 = Math.Pow(inPut.DaiFeng, 2) * inPut.WaiJing * u * a * bi / 1600;// '导线无冰风荷载 + if (inPut.DaiFeng < 20) + a = 1; + else if (inPut.DaiFeng < 27) + a = 0.85; + else if (inPut.DaiFeng < 31.5) + a = 0.75; + else + a = 0.7; + dx3 = Math.Pow(inPut.DaiFeng, 2) * inPut.WaiJing * u * a * bi / 1600;// '导线无冰风荷载 } else { //a = 1; // '有冰工况定义风压不均匀系数a=1 - dx3 = 1.2*Math.Pow(inPut.DaiFeng, 2) * (inPut.WaiJing + 2 * inPut.DaiBing) * a * bi/ 1600; // '导线有冰风荷载 + dx3 = 1.2 * Math.Pow(inPut.DaiFeng, 2) * (inPut.WaiJing + 2 * inPut.DaiBing) * a * bi / 1600; // '导线有冰风荷载 } HeZai = Math.Sqrt(Math.Pow((ZiZhongHeZai + ChuiZhiHeZai), 2) + Math.Pow(dx3, 2));// '存储导线荷载