完成了计算代表档距下控制张力的代码。
This commit is contained in:
parent
2dd85480ec
commit
c84261e24e
12
Program.cs
12
Program.cs
|
|
@ -10,10 +10,14 @@ namespace conductortension
|
|||
{
|
||||
static void Main(string[] args)
|
||||
{
|
||||
conductortension.Core.calStressLoadNew para = new conductortension.Core.calStressLoadNew();
|
||||
double zhangli;
|
||||
zhangli = 123;
|
||||
conductortension.Core.CalZhangLi(para, ref zhangli);
|
||||
//conductortension.Core.calStressLoadNew para = new conductortension.Core.calStressLoadNew();
|
||||
//para.DaiWen = 40;
|
||||
//para.DaiBing = 0;
|
||||
//para.DaiFeng = 0;
|
||||
//para.DangJu = 300;
|
||||
//double zhangli;
|
||||
//zhangli = 123;
|
||||
//conductortension.Core.CalZhangLi(para, ref zhangli);
|
||||
|
||||
}
|
||||
}
|
||||
|
|
|
|||
134
core.cs
134
core.cs
|
|
@ -4,6 +4,70 @@ namespace conductortension
|
|||
|
||||
public partial class Core
|
||||
{
|
||||
|
||||
//解状态方程的牛顿法
|
||||
public static double nt_equation(double A, double B, double sigma)
|
||||
{
|
||||
return Math.Pow(sigma, 3) + A * Math.Pow(sigma, 2) - B;
|
||||
}
|
||||
|
||||
|
||||
public static double d_eqution(double A, double sigma)
|
||||
{
|
||||
return 3 * Math.Pow(sigma, 2) + 2 * A * sigma;
|
||||
}
|
||||
|
||||
|
||||
|
||||
public static double newton(double A, double B, double sigma,ref bool succeed)
|
||||
{
|
||||
succeed = false;
|
||||
double _sigma = sigma;
|
||||
int i;
|
||||
for (i=0; i < 20; i++)
|
||||
{
|
||||
double fx = nt_equation(A, B, _sigma);
|
||||
double d_fx = d_eqution(A, _sigma);
|
||||
double d_sigma = -fx / d_fx;
|
||||
if (Math.Abs(d_sigma) < 1e-5)
|
||||
{
|
||||
succeed = true;
|
||||
break;
|
||||
}
|
||||
|
||||
_sigma = _sigma + d_sigma;
|
||||
}
|
||||
return _sigma;
|
||||
}
|
||||
|
||||
|
||||
|
||||
//从状态方程接触张力
|
||||
//start_tension 牛顿法初值
|
||||
//alpha 是膨胀系数
|
||||
//E 弹性模量
|
||||
//area 导线截面
|
||||
//conrol_t 控制条件温度
|
||||
//conrol_load 控制条件荷载
|
||||
//conrol_tension 控制条件张力
|
||||
//load 计算工况荷载
|
||||
//t 计算工况温度
|
||||
//l 档距
|
||||
public static double tensionFrmoStateEquation(double start_tension, double E, double alpha, double area, double control_load, double control_tension, double control_t, double load, double t, double l)
|
||||
{
|
||||
double A, B;
|
||||
//A = E / 24 * Math.Pow(control_load * l / control_tension, 2) - control_tension / area + alpha * E * (t - control_t);
|
||||
A = Fx(E, control_load, control_tension, alpha, area, control_t, l) + alpha * E * t;
|
||||
B = E * Math.Pow(load/area * l, 2) / 24;
|
||||
double tension;//牛顿法初值
|
||||
bool succeed=false;
|
||||
tension = newton(A, B, start_tension / area, ref succeed) * area;
|
||||
if (succeed)
|
||||
{
|
||||
return tension;
|
||||
}
|
||||
return double.NaN;
|
||||
}
|
||||
//alpha 是膨胀系数
|
||||
//E 弹性模量
|
||||
//area 导线截面
|
||||
|
|
@ -49,13 +113,6 @@ namespace conductortension
|
|||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
//计算控制工况、气温、比载、应力
|
||||
int KongZhiGongKuang;//1:最低气温,2:覆冰,3大风,4,年平均气温
|
||||
double KongZhiQiWen;
|
||||
double KongZhiBiZai;
|
||||
double KongZhiYingLi;
|
||||
|
||||
//临界档距表计算
|
||||
//一、初始计算数组,5项分别代表:1:气温,2:荷载,3:容许张力,4:P/T,5:Fo=-(T+A*E*a*t)(N)
|
||||
double[] ChuShiZuiDiQiWen = new double[5]; //最低温
|
||||
|
|
@ -106,7 +163,7 @@ namespace conductortension
|
|||
//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 t_dangju = inPut.DangJu; t_dangju <= inPut.DangJu; t_dangju++)
|
||||
{
|
||||
double Fx_dangjuZuiDiWen;
|
||||
double Fx_dangjuNianPingJun;
|
||||
|
|
@ -134,6 +191,35 @@ namespace conductortension
|
|||
maxFx = Fx_dangjuFuBing;
|
||||
MaxFxConditionFlag[t_dangju] = 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;
|
||||
}
|
||||
//TODO: 目前不会进入这个判断 by 杜孟远 2020.4.18
|
||||
if (MaxFxConditionFlag[t_dangju] != MaxFxConditionFlag[t_dangju - 1])//有突变,找到了临界档距的范围
|
||||
{
|
||||
double criticalSpan;
|
||||
|
|
@ -165,34 +251,6 @@ namespace conductortension
|
|||
default:
|
||||
break;
|
||||
}
|
||||
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);
|
||||
|
|
@ -200,10 +258,10 @@ namespace conductortension
|
|||
Console.WriteLine("{0}", criticalSpan);
|
||||
|
||||
}
|
||||
//Console.WriteLine("{0}:{1}",t_dangju,MaxFxConditionFlag[t_dangju]);
|
||||
double start_tension = inPut.LaDuanLi / inPut.AnQuan;
|
||||
ZhangLi = tensionFrmoStateEquation(start_tension,inPut.MoLiang, inPut.XianPengZhang, inPut.JieMianJi, currentLoad, currentTension, currentTemperature, DaiHeZai, inPut.DaiWen, inPut.DangJu);
|
||||
}
|
||||
|
||||
Console.ReadKey();
|
||||
ZhangLi = BaoLiuLiangWei(ZhangLi);
|
||||
return true;
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in New Issue