完成了计算代表档距下控制张力的代码。
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)
|
static void Main(string[] args)
|
||||||
{
|
{
|
||||||
conductortension.Core.calStressLoadNew para = new conductortension.Core.calStressLoadNew();
|
//conductortension.Core.calStressLoadNew para = new conductortension.Core.calStressLoadNew();
|
||||||
double zhangli;
|
//para.DaiWen = 40;
|
||||||
zhangli = 123;
|
//para.DaiBing = 0;
|
||||||
conductortension.Core.CalZhangLi(para, ref zhangli);
|
//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 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 是膨胀系数
|
//alpha 是膨胀系数
|
||||||
//E 弹性模量
|
//E 弹性模量
|
||||||
//area 导线截面
|
//area 导线截面
|
||||||
|
|
@ -49,13 +113,6 @@ namespace conductortension
|
||||||
{
|
{
|
||||||
return false;
|
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)
|
//一、初始计算数组,5项分别代表:1:气温,2:荷载,3:容许张力,4:P/T,5:Fo=-(T+A*E*a*t)(N)
|
||||||
double[] ChuShiZuiDiQiWen = new double[5]; //最低温
|
double[] ChuShiZuiDiQiWen = new double[5]; //最低温
|
||||||
|
|
@ -106,7 +163,7 @@ namespace conductortension
|
||||||
//t_dangju 试探最大Fx时使用的档距
|
//t_dangju 试探最大Fx时使用的档距
|
||||||
int[] MaxFxConditionFlag = new int[inPut.DangJu + 1];//记录不同t_dangju下,哪种工况的Fx最大。1代表最低温,2代表年平均温,3代表大风,4代表覆冰。0位置元素无效。
|
int[] MaxFxConditionFlag = new int[inPut.DangJu + 1];//记录不同t_dangju下,哪种工况的Fx最大。1代表最低温,2代表年平均温,3代表大风,4代表覆冰。0位置元素无效。
|
||||||
MaxFxConditionFlag[0] = 1;
|
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_dangjuZuiDiWen;
|
||||||
double Fx_dangjuNianPingJun;
|
double Fx_dangjuNianPingJun;
|
||||||
|
|
@ -134,6 +191,35 @@ namespace conductortension
|
||||||
maxFx = Fx_dangjuFuBing;
|
maxFx = Fx_dangjuFuBing;
|
||||||
MaxFxConditionFlag[t_dangju] = 4;
|
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])//有突变,找到了临界档距的范围
|
if (MaxFxConditionFlag[t_dangju] != MaxFxConditionFlag[t_dangju - 1])//有突变,找到了临界档距的范围
|
||||||
{
|
{
|
||||||
double criticalSpan;
|
double criticalSpan;
|
||||||
|
|
@ -165,34 +251,6 @@ namespace conductortension
|
||||||
default:
|
default:
|
||||||
break;
|
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 t1 = 24 / inPut.MoLiang * (formerTension - currentTension) / inPut.JieMianJi;
|
||||||
double t2 = 24 * inPut.XianPengZhang * (formerTemperature - currentTemperature);
|
double t2 = 24 * inPut.XianPengZhang * (formerTemperature - currentTemperature);
|
||||||
double t3 = Math.Pow(formerLoad / formerTension, 2) - Math.Pow(currentLoad / currentTension, 2);
|
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}", 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);
|
ZhangLi = BaoLiuLiangWei(ZhangLi);
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue