1.删掉注释掉的无用代码。

2.初步编写好计算临界档距代码。
This commit is contained in:
facat 2020-04-18 09:24:57 +08:00
parent 6bd527bae2
commit 2dd85480ec
1 changed files with 114 additions and 450 deletions

564
core.cs
View File

@ -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应力5Fo=-(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));// '存储导线荷载