commit 35a73008032908550cd864fee486071df1d7f43a Author: facat Date: Thu Apr 2 17:38:12 2020 +0800 第一次提交。 跑通过了。 diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..f6789f5 --- /dev/null +++ b/.gitignore @@ -0,0 +1,3 @@ +bin +obj +*.csproj \ No newline at end of file diff --git a/Program.cs b/Program.cs new file mode 100644 index 0000000..a91ca0a --- /dev/null +++ b/Program.cs @@ -0,0 +1,20 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; + + +namespace conductortension +{ + class Program + { + static void Main(string[] args) + { + conductortension.Core.calStressLoadNew para = new conductortension.Core.calStressLoadNew(); + double zhangli; + zhangli = 123; + conductortension.Core.CalZhangLi(para, ref zhangli); + + } + } +} diff --git a/Properties/AssemblyInfo.cs b/Properties/AssemblyInfo.cs new file mode 100644 index 0000000..4f18090 --- /dev/null +++ b/Properties/AssemblyInfo.cs @@ -0,0 +1,36 @@ +using System.Reflection; +using System.Runtime.CompilerServices; +using System.Runtime.InteropServices; + +// General Information about an assembly is controlled through the following +// set of attributes. Change these attribute values to modify the information +// associated with an assembly. +[assembly: AssemblyTitle("conductortension")] +[assembly: AssemblyDescription("")] +[assembly: AssemblyConfiguration("")] +[assembly: AssemblyCompany("")] +[assembly: AssemblyProduct("conductortension")] +[assembly: AssemblyCopyright("Copyright © 2020")] +[assembly: AssemblyTrademark("")] +[assembly: AssemblyCulture("")] + +// Setting ComVisible to false makes the types in this assembly not visible +// to COM components. If you need to access a type in this assembly from +// COM, set the ComVisible attribute to true on that type. +[assembly: ComVisible(false)] + +// The following GUID is for the ID of the typelib if this project is exposed to COM +[assembly: Guid("4e88747d-fa6c-4a66-944e-9ad462e082c4")] + +// Version information for an assembly consists of the following four values: +// +// Major Version +// Minor Version +// Build Number +// Revision +// +// You can specify all the values or you can default the Build and Revision Numbers +// by using the '*' as shown below: +// [assembly: AssemblyVersion("1.0.*")] +[assembly: AssemblyVersion("1.0.0.0")] +[assembly: AssemblyFileVersion("1.0.0.0")] diff --git a/core.cs b/core.cs new file mode 100644 index 0000000..3b038aa --- /dev/null +++ b/core.cs @@ -0,0 +1,630 @@ +using System; +namespace conductortension +{ + + partial class Core + { + + 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.BaoZhengPoDuanZhangLi / inPut.AnQuan; + ZuiDaShiYongZhangLi = inPut.LaDuanLi / inPut.AnQuan; + //计算温度线膨胀系数 + double XianPengZhang = inPut.XianPengZhang * 0.000001; + //计算平均运行张力 + //先判断年平均运行张力(%)是否为百分数,如果是百分数则变为小数计算。 + if (inPut.NianPingJun > 100 || inPut.NianPingJun <= 0) + { + return false; + } + else if (inPut.NianPingJun >= 1) + { + inPut.NianPingJun = inPut.NianPingJun / 100; + } + double PingJunYunXingZhangLi = inPut.LaDuanLi * inPut.BaoZhengPoDuanZhangLi * inPut.NianPingJun;///////////////////////////////////////////////////////////////////////年平均是20%还是0.2,这里要求的是小数 + if (inPut.SheJiFengSuGaoDu == 0) + { + inPut.SheJiFengSuGaoDu = 10; + } + if (inPut.PingJunGaoDu == 0) + { + inPut.PingJunGaoDu = 20; + } + double a, b, T1, T2, T3, T4, T5, T6; + //计算待求工况比载 + double BiZai = 0; //待求工况比载 + if (CalHeZai(inPut, ref BiZai) == 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) + double[] ChuShiZuiDiQiWen = new double[5]; //最低温 + double[] ChuShiNianPingJun = new double[5]; //年平均气温 + double[] ChuShiDaFeng = new double[5]; //大风 + double[] ChuShiFuBing = new double[5]; //最大覆冰 + //1:存储各工况温度 + ChuShiZuiDiQiWen[0] = inPut.DiWen; + ChuShiNianPingJun[0] = inPut.PingWen; + ChuShiDaFeng[0] = inPut.FengWen; + ChuShiFuBing[0] = inPut.BingWen; + //定义各个工况结构体,将每个结构体中的待求工况设置为对应工况数据,因为计算荷载时前面写的计算荷载函数中调取的是待求工况的温度等信息,所以需要对应各个工况 + calStressLoadNew ZuiDiWen = inPut; + calStressLoadNew NianPingJun = inPut; + calStressLoadNew DaFeng = inPut; + calStressLoadNew FuBing = inPut; + ZuiDiWen.DaiBing = ZuiDiWen.DiBing; + ZuiDiWen.DaiFeng = ZuiDiWen.DiFeng; + ZuiDiWen.DaiWen = ZuiDiWen.DiWen; + NianPingJun.DaiBing = NianPingJun.PingBing; + NianPingJun.DaiFeng = NianPingJun.PingFeng; + NianPingJun.DaiWen = NianPingJun.PingWen; + DaFeng.DaiBing = DaFeng.FengBing; + DaFeng.DaiFeng = DaFeng.FengFeng; + DaFeng.DaiWen = DaFeng.FengWen; + FuBing.DaiBing = FuBing.BingBing; + FuBing.DaiFeng = FuBing.BingFeng; + FuBing.DaiWen = FuBing.BingWen; + //2:计算并存储各个工况荷载 + CalHeZai(ZuiDiWen, ref ChuShiZuiDiQiWen[1]); + CalHeZai(NianPingJun, ref ChuShiNianPingJun[1]); + CalHeZai(DaFeng, ref ChuShiDaFeng[1]); + CalHeZai(FuBing, ref ChuShiFuBing[1]); + //3:存储各工况容许张力 + ChuShiZuiDiQiWen[2] = ZuiDaShiYongZhangLi; + ChuShiNianPingJun[2] = PingJunYunXingZhangLi; + ChuShiDaFeng[2] = ZuiDaShiYongZhangLi; + ChuShiFuBing[2] = ZuiDaShiYongZhangLi; + //4:计算并存储P/T + ChuShiZuiDiQiWen[3] = ChuShiZuiDiQiWen[1] / ChuShiZuiDiQiWen[2]; + 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++) + { + for (int j = 0; j < 4; j++) + { + JiSuanGongKuangShuZu[i, j] = 0; + } + } + //排序数组,将四组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 (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; + } + } + } + //排序完成后将四组工况数据按照排序顺序写入计算工况数组 + 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]; + } + }//完成计算工况数组的录入 + + // 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]; + } + + //计算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(BiZai, 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; + ZhangLi = BaoLiuLiangWei(ZhangLi); + return true; + } + + public struct calStressLoadNew + { + public double WaiJing; //电线外径(mm) + public double LaDuanLi; //电线计算拉断力(N) + public double ZhongLiang; //电线单位重量(kg/km) + public double JieMianJi; //电线截面积(mm2) + public double MoLiang; //电线弹性模量(N/mm2) + public double XianPengZhang; //电线线性膨胀系数(10e-6/C) + public double AnQuan; //安全系数 + public double NianPingJun; //年平均运行系数 + //public double XinXian; //新线系数 + //public double FuBingGuoZai; //覆冰过载系数 + public double DiBing; //最低温工况覆冰(mm) + public double DiFeng; //最低温工况风速(m/s) + public double DiWen; //最低温工况气温(C) + public double PingBing; //年平均温工况覆冰(mm) + public double PingFeng; //年平均温工况风速(m/s) + public double PingWen; //年平均温工况气温(C) + public double BingBing; //最大覆冰工况覆冰(mm) + public double BingFeng; //最大覆冰工况风速(m/s) + public double BingWen; //最大覆冰工况气温(C) + public double FengBing; //最大风工况覆冰(mm) + public double FengFeng; //最大风工况风速(m/s) + public double FengWen; //最大风工况气温(C) + public double PingJunGaoDu; //导线平均高度(m) 20 + public int CuCaoDu; //地面粗糙度类别(1-田野、乡村、山丘, 2-海岛, 3-城市) + public double CuCaoDu_K; //地面粗糙度系数K + public double CuCaoDu_a; //地面粗糙度指数a + //public double TiXingXiShu; //电线体形系数 1.2 + //public double FengYaBuJunYun; //风压不均匀系数(不需要可以删掉,计算得来) 0.75 + public double DaiBing; //待求工况覆冰(mm) + public double DaiFeng; //待求工况风速(m/s) + public double DaiWen; //待求工况气温(C) + public double DangJu; //档距(m) + public double SheJiFengSuGaoDu; //设计基准风速高度 + public double BaoZhengPoDuanZhangLi; //保证破断张力取计算拉断力的%,即张力系数 + public double dxLoad; //线荷载 + } + + public static bool CalHeZai(calStressLoadNew inPut, ref double HeZai) + { + // //综合荷载=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; + + double u = 1.1;//体型系数 + + if (inPut.DaiBing > 0 || inPut.WaiJing < 17) + u = 1.2; + else + u = 1.1; + + ZiZhongHeZai = inPut.ZhongLiang * 9.80665 / 1000;//'导线自荷载 + + ChuiZhiHeZai = 9.80665 * 0.9 * Math.PI * inPut.DaiBing * (inPut.DaiBing + inPut.WaiJing) / 1000; //'导线冰荷载 + + double a = 1;//定义风压不均匀系数a + + double dx3 = 0;// + + if (inPut.DaiBing == 0) //'无冰工况 + { + if (inPut.DaiFeng < 20) + a = 1; + else if (inPut.DaiFeng < 27) + a = 0.8; + 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 = Math.Pow(inPut.DaiFeng, 2) * (inPut.WaiJing + 2 * inPut.DaiBing) * a * bi * u / 1600; // '导线有冰风荷载 + } + + HeZai = Math.Sqrt(Math.Pow((ZiZhongHeZai + ChuiZhiHeZai), 2) + Math.Pow(dx3, 2));// '存储导线荷载 + + + + + return true; + } + + } + + +} \ No newline at end of file diff --git a/extra.cs b/extra.cs new file mode 100644 index 0000000..6e72c31 --- /dev/null +++ b/extra.cs @@ -0,0 +1,16 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; + +namespace conductortension +{ + partial class Core + { + public static double BaoLiuLiangWei(double a) + { + return a; + } + + } +}