using MetroGauges.General; using System; using System.ComponentModel; using System.Runtime.CompilerServices; namespace MetroGauges.Model { /// /// MetroGaugeFormulae(限界计算公式) /// public class KineModel : DataModel { public KineModel() { } public KineModel(string strPosition, string name, double x, double y) { StrPosition = strPosition; Name = name; X = x; Y = y; } /// /// 所在位置 /// public override PositionI Position { get { if (StrPosition == "受电弓") { return PositionI.Pantograph; } else if (StrPosition == "受流器") { return PositionI.Collector; } else if (StrPosition == "车体") { return PositionI.Body; } else if (StrPosition == "转向架构架") { return PositionI.BogieFrame; } else if (StrPosition == "簧下") { return PositionI.Unsprung; } else if (StrPosition == "轮缘") { return PositionI.Rim; } else if (StrPosition == "踏面") { return PositionI.Tread; } else { return PositionI.INVAIL; } } } #region Parameters /// /// A型车:B型车 /// public static NMetro nMetro; /// /// 工况 /// public static WorkCondition Condition; /// /// 上受流切除向上:下受流释放反弹量 /// public static CollectorStatus collectorStatus; /// /// 车辆限界-整体道床:碎石道床 /// public static Ballast m_Bal; /// /// 站台:区间 /// public static Location location; /// /// 直线:曲线 /// public static CurveType CurType; /// /// 车辆运行环境 /// 88 public static General.Environment Env; /// /// 判断高度阀点数 /// public static HeightValve heightValve; /// /// 接触网物理性质 /// public static Physics Catenary; /// /// 车轮物理性质 /// public static Physics Wheel; /// /// 高架受电弓高度 /// public static ElvateHeight Eh; /// /// 销内:销外 /// public static Pin pin; /// /// 车辆结构 /// public static Structure structure; /// /// 含钢轨内侧磨耗的最大轨距(mm) /// private double l => 1441; /// /// 轮对轮缘最大磨耗量时的最小外侧距(mm) /// private double d => 1397; /// /// 线路中心线横向位差值(mm) /// private double Δ_c { get { switch (m_Bal) { case Ballast.Monolithic: return 5; case Ballast.Gravel: return 25; default: return double.NaN; } } } /// /// 转向架轴箱轴承横向游隙(mm) /// private double Δ_q1 => 1; /// /// 车轮横向弹性变形量(mm) /// private double Δ_q2 { get { switch (Wheel) { case Physics.Flexibility: return 2; case Physics.Inflexibility: return 0; default: return double.NaN; } } } /// /// 转向架一系弹簧横向弹性变形量(mm) /// private double Δ_q3 { get { switch (location) { case Location.Platform: return 3; case Location.Region: return 6; default: return double.NaN; } } } /// /// 转向架中心销径向间隙及磨耗量(mm) /// private double Δ_w1 => 0; #region 用户设置参数 //public double result => 15; private static double δ_w2; /// /// 转向架二系弹簧相对名义中心位置的横向弹性变形量(mm)15~20:20~25 /// public double Δ_w2 { get => δ_w2; set { δ_w2 = value; OnPropertyChanged(); } } //{ // get // { //switch (loc) //{ // case Location.Platform: // if (result >= 15 && result <= 20) // { // return result; // } // else // { // throw new ArgumentOutOfRangeException("Δ_w2需在15~20mm之间"); // } // case Location.Region: // if (result >= 20 && result <= 25) // { // return result; // } // else // { // throw new ArgumentOutOfRangeException("Δ_w2需在20~25mm之间"); // } // default: // return double.NaN; //} //} //set //{ //double result = 15; //if (loc == Location.Platform) //{ // if (value > 15 && value < 20) // { // result = value; // } // else // { // throw new ArgumentOutOfRangeException("位于站台时,Δ_w2需在15~20mm之间"); // } //} //else if (loc == Location.Region) //{ // if (value > 20 && value < 25) // { // result = value; // } // else // { // throw new ArgumentOutOfRangeException("位于区间时,Δ_w2需在20~25mm之间"); // } //} //} //} private static double δX_Bxgpx; /// /// 悬挂故障引起的车体横向偏移量(mm) /// public double ΔX_Bxgpx { get => δX_Bxgpx; set { δX_Bxgpx = value; OnPropertyChanged(); } } private static double δY_Bxgpx1; /// /// 悬挂故障引起的车体竖向向上偏移量(mm) /// public double ΔY_Bxgpx1 { get => δY_Bxgpx1; set { δY_Bxgpx1 = value; OnPropertyChanged(); } } private static double δY_Bxgpx2; /// /// 悬挂故障引起的车体竖向向下偏移量(mm) /// public double ΔY_Bxgpx2 { get => δY_Bxgpx2; set { δY_Bxgpx2 = value; OnPropertyChanged(); } } /// /// 转向架高度阀杆横向间距(mm) /// private double _b_h; public double b_h { get => _b_h; set { _b_h = value; OnPropertyChanged(); } } /// /// 计算ΔXa 或ΔXi 时取线路最小平面曲线半径(m) /// public double R_min; /// /// 设备限界在曲线地段标准加宽量(mm) /// public double ΔX_bz; /// /// 车体销外AW3 上翘量/AW0 下垂量或车体销内AW0上拱量(mm) /// public double ΔM_t9 { get { switch (pin) { case Pin.Inside: switch (Condition) { case WorkCondition.AW0: return 8; case WorkCondition.AW3: return 0; default: return 0; } case Pin.Outside: switch (Condition) { case WorkCondition.AW0: return -5; case WorkCondition.AW3: return 0; default: return 0; } default: return double.NaN; } } } private static double _n; private static double _m; /// /// 转向架计算断面至相邻轴距离 /// public double m { get => _m; set { _m = value; OnPropertyChanged(); } } /// /// 车体计算断面至相邻中心销距离 /// public double n { get => _n; set { _n = value; OnPropertyChanged(); } } private static double δX_txgpx; /// /// 悬挂故障引起的构架横向偏移量(mm) /// public double ΔX_txgpx { get => δX_txgpx; set { δX_txgpx = value; OnPropertyChanged(); } } private static double δY_txgpx1; /// /// 悬挂故障引起的构架竖向向上偏移量(mm) /// public double ΔY_txgpx1 { get => δY_txgpx1; set { δY_txgpx1 = value; OnPropertyChanged(); } } private static double δY_txgpx2; /// /// 悬挂故障引起的构架竖向向下偏移量(mm) /// public double ΔY_txgpx2 { get => δY_txgpx2; set { δY_txgpx2 = value; OnPropertyChanged(); } } /// /// 曲线加宽校验补偿量(mm)(A2B2受电弓,A1B1撤下与接触轨接近部分轮廓线校核时) /// private double _ΔX => 0; #endregion /// /// 轨道横向弹性变形量(mm) /// private double Δ_e { get { switch (CurType) { case CurveType.Straight: return 1; case CurveType.Curve: return 3; default: return double.NaN; } } } /// /// AW3 时载客不对称的计算载客重量(kg),AW0 时不对称的计算,载客重量为0 /// public double m_z { get { switch (nMetro) { case NMetro.A: return 12600; case NMetro.B: return 10200; default: return double.NaN; } } } /// /// 转向架高度阀不感度(mm) /// private double _f_2 => 5; /// /// 两条钢轨的相对高度误差值(mm) /// public double Δh_c1 { get { switch (m_Bal) { case Ballast.Monolithic: return 4; case Ballast.Gravel: return 10; default: return double.NaN; } } } /// /// 两条钢轨的相对高度的弹性变化量(mm) /// public double Δh_c2 { get { switch (m_Bal) { case Ballast.Monolithic: return 1; case Ballast.Gravel: return 2; default: return double.NaN; } } } /// /// 车体受风面积(m2) /// private double A_w { get { switch (nMetro) { case NMetro.A: return 70; case NMetro.B: return 57; default: return double.NaN; } } } /// /// 风压 (N/m2) /// private double P_w { get { switch (location) { case Location.Platform: return 210; case Location.Region: return 400; default: return double.NaN; } } } /// /// 横向加速度(m/s2) /// public double a_B { get { switch (location) { case Location.Platform: switch (CurType) { case CurveType.Straight: return 0.3; case CurveType.Curve: return 0.6; default: return double.NaN; } case Location.Region: return 1.0; default: return double.NaN; } } } /// /// 受电弓相对车体横向晃动量(mm) /// public double ΔS_hd => 25; /// /// 轮对横向制造误差值(mm) /// public double Δ_d => 2; /// /// 转向架中心销安装定位误差值(mm) /// public double ΔM_t1 => 1; /// /// 转向架一系弹簧横向定位误差值(mm) /// public double ΔM_t2 => 1; /// /// 车体半宽横向制造误差值(mm) /// public double ΔM_t3 => 5; /// /// 车体表面设备安装误差值(mm) /// public double ΔM_t4 => 2; /// /// 受电弓横向安装误差值(mm) /// private double ΔM_t5 => 5; /// /// 车体倾斜量(mm) /// private double ΔX_Bq => 15; /// /// 车体侧墙高度(mm) /// private double H_cq { get { switch (nMetro) { case NMetro.A: return 2500; case NMetro.B: return 2300; default: return double.NaN; } } } /// /// 车底架边梁底面距轨顶平面高度(mm) /// private double h_sj { get { switch (nMetro) { case NMetro.A: return 870; case NMetro.B: return 870; default: return double.NaN; } } } /// /// 车辆一侧一系弹簧并列数 /// private double n_p => 4; /// /// 每一轴箱一系弹簧垂向刚度值 (N/mm) /// private double c_p { get { switch (nMetro) { case NMetro.A: return 1200; case NMetro.B: return 1200; default: return double.NaN; } } } /// /// 转向架一系弹簧横向间距(mm) /// private double b_p { get { switch (nMetro) { case NMetro.A: return 1940; case NMetro.B: return 1930; default: return double.NaN; } } } /// /// 车辆一侧二系弹簧并列数,四点高度阀为2,三点高度阀为1,二点高度阀为0 /// private double n_s { get { switch (heightValve) { case HeightValve.Two: return 0; case HeightValve.Three: return 1; case HeightValve.Four: return 2; default: return double.NaN; } } } /// /// 转向架一侧二系弹簧垂向刚度值 (N/mm) /// private double c_s { get { switch (Condition) { case WorkCondition.AW0: return 200; case WorkCondition.AW3: switch (nMetro) { case NMetro.A: return 350; case NMetro.B: return 400; default: return double.NaN; } default: return double.NaN; } } } /// /// 转向架二系弹簧横向间距(mm) /// private double b_s { get { switch (nMetro) { case NMetro.A: return 1880; case NMetro.B: return 1850; default: return double.NaN; } } } /// /// 每根抗侧滚扭杆的抗侧滚刚度(N.mm/rad) /// private double K_φn { get { switch (nMetro) { case NMetro.A: return 2.5 * 1E9; case NMetro.B: return 2.5 * 1E9; default: return double.NaN; } } } /// /// AW0 或含AW3 载客的车体重量(kg) /// public double m_B { get { switch (Condition) { case WorkCondition.AW0: return 23400; case WorkCondition.AW3: switch (nMetro) { case NMetro.A: return 48000; case NMetro.B: return 42000; default: return double.NaN; } default: return double.NaN; } } } /// /// 重力加速度(m/s2),取9.81m/s2 /// private double g => 9.81; /// /// 车体重心距轨顶平面高度(mm) /// private double h_sc { get { switch (Condition) { case WorkCondition.AW0: switch (nMetro) { case NMetro.A: return 1600; case NMetro.B: return 1450; default: return double.NaN; } case WorkCondition.AW3: switch (nMetro) { case NMetro.A: return 1800; case NMetro.B: return 1650; default: return double.NaN; } default: return double.NaN; } } } /// /// 转向架一系弹簧上支承面距轨顶平面高度(mm) /// private double h_cp { get { switch (nMetro) { case NMetro.A: return 500; case NMetro.B: return 500; default: return double.NaN; } } } /// /// 转向架二系弹簧上支承面距轨顶平面高度(mm) /// private double h_cs { get { switch (nMetro) { case NMetro.A: return 890; case NMetro.B: return 860; default: return double.NaN; } } } /// /// 车体受风面积形心距轨顶平面高度(mm) /// private double h_sw { get { switch (nMetro) { case NMetro.A: return 2350; case NMetro.B: return 2350; default: return double.NaN; } } } /// /// 车辆地板面未能补赏的高度误差值(mm) /// private double ΔM_t6 => 10; /// /// 车体下部及吊挂物高度尺寸制造安装误差值(mm) /// private double ΔM_t7 => -10; /// /// 车体上部或上部安装设备的高度尺寸制造安装误差值(mm) /// private double ΔM_t8 => 12; /// /// 转向架构架横向制造误差值(mm) /// private double ΔM_t10 { get { switch (nMetro) { case NMetro.A: return 2; case NMetro.B: return 2; default: return double.NaN; } } } /// /// 转向架构架向上竖向制造误差值(mm) /// private double ΔM_t11 { get { switch (nMetro) { case NMetro.A: return 1.5; case NMetro.B: return 1.5; default: return double.NaN; } } } /// /// 转向架构架向下竖向制造误差值(mm); /// private double ΔM_t12 { get { switch (nMetro) { case NMetro.A: return 1.5; case NMetro.B: return 1.5; default: return double.NaN; } } } /// /// 转向架簧下部分横向制造误差值(mm) /// private double ΔM_t13 => 1; /// /// 转向架簧下部分竖向制造误差值(mm) /// private double ΔM_t14 { get { switch (nMetro) { case NMetro.A: return 1; case NMetro.B: return 1; default: return double.NaN; } } } /// /// 受流器横向安装误差值及受流器横向尺寸公差值(mm) /// private double ΔM_t15 => 2; /// /// 受流器竖向安装误差值及受流器竖向尺寸公差值(mm) /// private double ΔM_t16 => 2; /// /// 转向架一系弹簧竖向动挠度(mm) /// private double Δf_p { get { switch (nMetro) { case NMetro.A: return 12; case NMetro.B: return 15; default: return double.NaN; } } } /// /// 转向架二系弹簧竖向动挠度(mm) /// private double Δf_s { get { switch (nMetro) { case NMetro.A: return 15; case NMetro.B: return 20; default: return double.NaN; } } } /// /// 线路中心线竖向位差值(mm) /// private double δ_c { get { switch (m_Bal) { case Ballast.Monolithic: return 5; case Ballast.Gravel: return 10; default: return double.NaN; } } } /// /// 轨道竖向弹性变形量(mm) /// private double δ_e { get { switch (m_Bal) { case Ballast.Monolithic: return -2; case Ballast.Gravel: return -5; default: return double.NaN; } } } /// /// 轨道竖向磨耗量(mm) /// private double δ_w0 => 10.0; /// /// 车轮最大镟削量(mm) /// private double δ_w1 => -35.0; /// /// 两次镟轮间不可补偿的踏面磨耗量(mm) /// private double _δ_w1 { get { switch (Position) { case PositionI.Body: return -12; case PositionI.Rim: return -8; default: return δ_w1; } } } /// /// 转向架一系弹簧空重车挠度变化量 /// private double f_1 { get { switch (nMetro) { case NMetro.A: return -25; case NMetro.B: return -19; default: return double.NaN; } } } /// /// 转向架一系弹簧垂向永久变形量(mm) /// private double f_01 => -5.0; /// /// 车轮竖向弹性变形量(mm) /// private double _f_01 { get { switch (Wheel) { case Physics.Flexibility: return -1; case Physics.Inflexibility: return 0; default: return double.NaN; } } } /// /// 转向架二系弹簧垂向永久变形量(mm) /// private double f_02 => 0; /// /// 转向架二系弹簧空重车挠度变化量(mm) /// private double f_2 => 5.0; /// /// 车辆定距 /// public double a { get { switch (nMetro) { case NMetro.A: return 15700; case NMetro.B: return 12600; default: return double.NaN; } } } /// /// 转向架固定轴距 A:2.5 B 2.2,2.3 /// public double p { get { switch (nMetro) { case NMetro.A: return 2.5; case NMetro.B: return 2.3; default: return double.NaN; } } } /// /// 柔性架空线抬升量或刚性架空线安装误差(mm) /// private double ΔJ_vd { get { switch (Catenary) { case Physics.Flexibility: return 25; case Physics.Inflexibility: return 10; default: return double.NaN; } } } /// /// 架空线磨耗量(mm) /// private double ΔJ_vw { get { switch (Catenary) { case Physics.Flexibility: return 3.7; case Physics.Inflexibility: return 6; default: return double.NaN; } } } /// /// 受电弓炭精板磨耗量(mm) /// private static double ΔS_vw => 15.0; /// /// 轨道横向弹性变形直线与曲线差值 /// private double Δ_de => 0; /// /// 上部受流器切除竖向向上位移量或下部受流工作释放反弹量(mm) /// private double ΔH_vt { get { switch (collectorStatus) { case CollectorStatus.Upper: return 55; case CollectorStatus.Lower: return 70; default: return double.NaN; } } } /// /// 接触轨距走行轨轨顶平面高度公差值(mm) /// private double ΔC_vt => 6.0;//Δcvt取正公差+6mm #endregion /// /// 被比较式子 /// private double ComparedFormula => 2 * _f_2 / b_h; /// /// 整车一系弹簧侧滚刚度 (N.mm/rad) /// /// private double K_φp => 0.5 * n_p * c_p * b_p * b_p; /// /// 整车二系弹簧侧滚刚度 (N.mm/rad) /// /// private double K_φs => 0.5 * n_s * c_s * b_s * b_s + 2 * K_φn; /// /// 含一、二系影响的重力倾角附加系数 /// /// private double S => m_B * g * ((h_sc - h_cp) / K_φp + (h_sc - h_cs) / K_φs); /// /// 只含一系影响的重力倾角附加系数 /// private double S_1 => m_B * g * (h_sc - h_cp) / K_φp; /// /// 只含二系影响的重力倾角附加系数 /// private double S_2 => m_B * g * (h_sc - h_cs) / K_φs; #region 车辆限界 /// /// 侧风载荷引起侧倾的转换系数 /// private double C_h => (Y - h_cp) * (h_sw - h_cp) / K_φp + (Y - h_cs) * (h_sw - h_cs) / K_φs; /// /// 横向加速度载荷引起侧倾的转换系数 /// private double _C_h => (Y - h_cp) * (h_sc - h_cp) / K_φp + (Y - h_cs) * (h_sc - h_cs) / K_φs; /// /// 横向制造误差值(mm) /// private double ΔM() { double result; result = Squa(Δ_d / 2) + Squa(ΔM_t1) + Squa(ΔM_t2) + Squa(ΔM_t3) + Squa(ΔM_t4) + Squa(ΔM_t5) + Math.Sqrt(ΔX_Bq / H_cq * (Y - h_sj) * (Y - h_sj)); return result; } #region 车体横向平移和倾角产生横向偏移方向相同时 /// /// 车体侧倾横向偏移量(mm) /// public double ΔX_Bcp() { //Formula double F1 = 100 * m_z * g * (1 + S_1) / K_φp; double F2 = 100 * m_z * g * (1 + S_2) / K_φs; if (F2 > ComparedFormula) { F2 = ComparedFormula; } double F3 = Squa(Δh_c1 / 1500 * Y * (1 + S)); double F4 = Squa(Δh_c2 / 1500 * Y * (1 + S)); double F5 = Squa(A_w * P_w * (1 + S) * C_h); double F6 = Squa(m_B * a_B * (1 + S) * _C_h); double F7 = ΔS_hd; if (Env == General.Environment.Tunnel) { F5 = 0.0; } if (Position != PositionI.Pantograph) { F7 = 0; } return F2 * Math.Abs(Y - h_cs) + F1 * Math.Abs(Y - h_cp) + Math.Sqrt(F3 + F4 + F5 + F6 + Squa(F7)); } private double δX_BP() { double result; double F1 = Math.Sqrt(Squa((l - d) / 2) + Squa(Δ_c)); double F2 = (Δ_q1 + Δ_q2 + Δ_q3); double F3 = Δ_w1 + Δ_w2; result = (F1 + F2 + F3) * (2 * n + a) / a + Δ_e + ΔM() + _ΔX + ΔX_Bxgpx + ΔX_Bcp(); return Math.Round(result, decimals, MidpointRounding.AwayFromZero); } /// /// 横向平移和倾角产生横向偏移方向相同时,车体横向偏移量 /// public double ΔX_BP { get { double result = δX_BP(); if (Position != PositionI.Body) { result = double.NaN; } return result; } set { double result = δX_BP(); if (Position != PositionI.Body) { result = double.NaN; } result = value; OnPropertyChanged(); } } private double δY_BPu() { double result; double F1 = Squa(ΔM_t6) + Squa(ΔM_t8) + Squa(ΔX_Bq / H_cq * X); double F2 = Squa(Δf_s * (2 * n + a) / a) + Squa(Δf_p * (2 * n + a) / a) + Squa(δ_c); double F3 = 100 * m_z * g * (1 + S_2) / K_φs; if (F3 > ComparedFormula) { F3 = ComparedFormula; } double F4 = 100 * m_z * g * (1 + S_1) / K_φp; double F5 = Squa(Δh_c1 / 1500 * (1 + S) * X) + Squa(Δh_c2 / 1500 * (1 + S) * X); double F6 = Squa(A_w * P_w * (1 + S) * X * ((h_sw - h_cp) / K_φp + (h_sw - h_cs) / K_φs)); double F7 = Squa(m_B * a_B * (1 + S) * X * ((h_sc - h_cp) / K_φp + (h_sc - h_cs) / K_φs)); if (Env == General.Environment.Tunnel) { F6 = 0.0; } result = ΔM_t9 + Math.Sqrt(F1) + Math.Sqrt(F2) - (X * F3 + X * F4 + ΔY_Bxgpx1 + Math.Sqrt(F5 + F6 + F7)); return Math.Round(result, decimals, MidpointRounding.AwayFromZero); } /// /// 横向平移和倾角产生横向偏移方向相同时,车体竖向向上偏移量 /// public double ΔY_BPu { get { double result = δY_BPu(); if (Position != PositionI.Body) { result = double.NaN; } return result; } set { double result = δY_BPu(); if (Position != PositionI.Body) { result = double.NaN; } result = value; OnPropertyChanged(); } } /// /// 横向平移和倾角产生横向偏移方向相同时,车体侧倾竖向偏移量 /// /// /// private double ΔY_Bcpd() { double result; double F1 = 100 * m_z * g * (1 + S_2) / K_φs; if (F1 > ComparedFormula) { F1 = ComparedFormula; } double F2 = 100 * m_z * g * (1 + S_1) / K_φp; double F3 = Squa(Δf_s * (2 * n + a) / a) + Squa(Δf_p * (2 * n + a) / a) + Squa(δ_c); double F4 = Squa(Δh_c1 / 1500 * (1 + S) * X) + Squa(Δh_c2 / 1500 * (1 + S) * X); double F5 = Squa(A_w * P_w * (1 + S) * X * ((h_sw - h_cp) / K_φp + (h_sw - h_cs) / K_φs)); double F6 = Squa(m_B * a_B * (1 + S) * X * ((h_sc - h_cp) / K_φp + (h_sc - h_cs) / K_φs)); if (Env == General.Environment.Tunnel) { F5 = 0; } result = F1 * X + F2 * X + Math.Sqrt(F3 + F4 + F5 + F6); return Math.Round(result, decimals, MidpointRounding.AwayFromZero); } private double δY_BPd() { double result; double F1 = Squa(ΔM_t6) + Squa(ΔM_t7) + Squa(ΔX_Bq / H_cq * X); var value = f_01 + _f_01 + f_1 + f_02 + f_2 + δ_e + δ_w0 + _δ_w1; result = value + Math.Sqrt(F1) + ΔY_Bxgpx2 + ΔY_Bcpd(); return Math.Round(result, decimals, MidpointRounding.AwayFromZero); } /// /// 横向平移和倾角产生横向偏移方向相同时,车体竖向向下偏移量 /// public double ΔY_BPd { get { double result = δY_BPd(); if (Position != PositionI.Body) { result = double.NaN; } return result; } set { double result = δY_BPd(); if (Position != PositionI.Body) { result = double.NaN; } result = value; OnPropertyChanged(); } } #endregion #region 车体横向平移和倾角产生横向偏移方向相反时 private double _δX_BP() { double result; double F1 = Math.Sqrt(Squa(l - d) / 2 + Squa(Δ_c)); double F2 = (Δ_q1 + Δ_q2 + Δ_q3); double F3 = (Δ_w1 + Δ_w2); result = (F1 + F2 + F3) * (2 * n + a) / a + Δ_e + ΔM() + _ΔX - ΔX_Bxgpx - ΔX_Bcp(); return Math.Round(result, decimals, MidpointRounding.AwayFromZero); } /// /// 横向平移和倾角产生横向偏移方向相反时,车体横向偏移量 /// public double _ΔX_BP { get { double result = _δX_BP(); if (Position != PositionI.Body) { result = double.NaN; } return result; } set { double result = _δX_BP(); if (Position != PositionI.Body) { result = double.NaN; } result = value; OnPropertyChanged(); } } ///// ///// 横向平移和倾角产生横向偏移方向相反时,车体侧倾竖向偏移量 ///// ///// ///// //private double _ΔY_Bcpd() //{ // double result; // double F1 = 100 * m_z * g * (1 + S_2) / K_φs; // double F2 = 100 * m_z * g * (1 + S_1) / K_φp; // double F3 = Squa(Δf_s * (2 * n + a) / a) + Squa(Δf_p * (2 * n + a) / a) + Squa(δ_c); // double F4 = Squa(Δh_c1 / 1500 * (1 + S) * X) + Squa(Δh_c2 / 1500 * (1 + S) * X); // double F5 = Squa(A_w * P_w * (1 + S) * X * ((h_sw - h_cp) / K_φp + (h_sw - h_cs) / K_φs)); // double F6 = Squa(m_B * a_B * (1 + S) * X * ((h_sc - h_cp) / K_φp + (h_sc - h_cs) / K_φs)); // if (F1 > ComparedFormula) // { // F1 = ComparedFormula; // } // if (Env == General.Environment.Tunnel) // { // F5 = 0; // } // result = -F2 * X - F1 * X + F3 - Math.Sqrt(F4 + F5 + F6); // return Math.Round(result, decimals, MidpointRounding.AwayFromZero); //} private double _δY_BPu() { double result; double F1 = Squa(ΔM_t6) + Squa(ΔM_t8) + Squa(ΔX_Bq / H_cq * X); double F2 = Squa(Δf_s * (2 * n + a) / a) + Squa(Δf_p * (2 * n + a) / a) + Squa(δ_c); double F3 = 100 * m_z * g * (1 + S_2) / K_φs; if (F3 > ComparedFormula) { F3 = ComparedFormula; } double F4 = 100 * m_z * g * (1 + S_1) / K_φp; double F5 = Squa(Δh_c1 / 1500 * (1 + S) * X) + Squa(Δh_c2 / 1500 * (1 + S) * X); double F6 = Squa(A_w * P_w * (1 + S) * X * ((h_sw - h_cp) / K_φp + (h_sw - h_cs) / K_φs)); double F7 = Squa(m_B * a_B * (1 + S) * X * ((h_sc - h_cp) / K_φp + (h_sc - h_cs) / K_φs)); if (Env == General.Environment.Tunnel) { F6 = 0.0; } result = ΔM_t9 + Math.Sqrt(F1) + Math.Sqrt(F2) + X * F3 + X * F4 + ΔY_Bxgpx1 + Math.Sqrt(F5 + F6 + F7); return Math.Round(result, decimals, MidpointRounding.AwayFromZero); } /// /// 横向平移和倾角产生横向偏移方向相反时,车体竖向向上偏移量 /// public double _ΔY_BPu { get { double result = _δY_BPu(); if (Position != PositionI.Body) { result = double.NaN; } return result; } set { double result = _δY_BPu(); if (Position != PositionI.Body) { result = double.NaN; } result = value; OnPropertyChanged(); } } private double _δY_BPd() { double result; double F1 = Squa(ΔM_t6) + Squa(ΔM_t7) + Squa(ΔX_Bq / H_cq * X); double F2 = Squa(Δf_s * (2 * n + a) / a) + Squa(Δf_p * (2 * n + a) / a) + Squa(δ_c); double F3 = 100 * m_z * g * (1 + S_2) / K_φs; if (F3 > ComparedFormula) { F3 = ComparedFormula; } double F4 = 100 * m_z * g * (1 + S_1) / K_φp; double F5 = Squa(Δh_c1 / 1500 * (1 + S) * X) + Squa(Δh_c2 / 1500 * (1 + S) * X); double F6 = Squa(A_w * P_w * (1 + S) * X * ((h_sw - h_cp) / K_φp + (h_sw - h_cs) / K_φs)); double F7 = Squa(m_B * a_B * (1 + S) * X * ((h_sc - h_cp) / K_φp + (h_sc - h_cs) / K_φs)); result = f_01 + _f_01 + f_1 + f_02 + f_2 + δ_e + δ_w0 + _δ_w1 + Math.Sqrt(F1) + Math.Sqrt(F2) - (X * F3 + X * F4 + ΔY_Bxgpx2 + Math.Sqrt(F5 + F6 + F7)); return Math.Round(result, decimals, MidpointRounding.AwayFromZero); } /// /// 横向平移和倾角产生横向偏移方向相反时,车体竖向向下偏移量 /// public double _ΔY_BPd { get { double result = _δY_BPd(); if (Position != PositionI.Body) { result = double.NaN; } return result; } set { double result = _δY_BPd(); if (Position != PositionI.Body) { result = double.NaN; } result = value; OnPropertyChanged(); } } #endregion private double δX_t() { double result; double F1 = Math.Sqrt(Squa(l - d) / 2 + Squa(Δ_c)); double F2 = (Δ_q1 + Δ_q2 + Δ_q3); double F3 = Squa(ΔM_t10) + Squa(Δ_d / 2); double F4 = 100 * m_z * g * (1 + S_1) / K_φp; double F5 = Squa(Δh_c1 / 1500 * Y * (1 + S_1)); double F6 = Squa(Δh_c2 / 1500 * Y * (1 + S_1)); double F7 = Squa(A_w * P_w * (1 + S_1) * (Y - h_cp) * (h_sw - h_cp) / K_φp); double F8 = Squa(m_B * a_B * (1 + S_1) * (Y - h_cp) * (h_sc - h_cp) / K_φp); if (Position == PositionI.Collector) { F3 = Squa(ΔM_t15) + Squa(Δ_d / 2); } if (Env == General.Environment.Tunnel) { F7 = 0.0; } result = (F1 + F2) * ((2 * m) + p) / p + Δ_e + Math.Sqrt(F3) + F4 * Math.Abs(Y - h_cp) + ΔX_txgpx + _ΔX + Math.Sqrt(F5 + F6 + F7 + F8); return Math.Round(result, decimals, MidpointRounding.AwayFromZero); } /// /// 横向平移和倾角产生横向偏移方向相同,构架横向偏移量 /// public double ΔX_t { get { double result = δX_t(); if (Position != PositionI.BogieFrame) { result = double.NaN; } return result; } set { double result = δX_t(); if (Position != PositionI.BogieFrame) { result = double.NaN; } result = value; OnPropertyChanged(); } } private double _δY_tu() { double result; double F1 = ΔM_t11; double F2 = Squa(Δf_p * ((2 * m + p) / p)) + Squa(δ_c); double F3 = 100 * m_z * g * (1 + S_1) / K_φp; double F4 = Squa(((Δh_c1 / 1500) * (1 + S_1)) * X); double F5 = Squa(((Δh_c2 / 1500) * (1 + S_1)) * X); double F6 = Squa(A_w * P_w * (1 + S_1) * X * (h_sw - h_cp) / K_φp); double F7 = Squa(m_B * a_B * (1 + S_1) * X * (h_sc - h_cp) / K_φp); if (Position == PositionI.Collector) { F1 = Squa(ΔM_t16); } if (Env == General.Environment.Tunnel) { F6 = 0.0; } result = F1 + F3 * X + _ΔX + ΔY_txgpx1 + Math.Sqrt(F2 + F4 + F5 + F6 + F7); return Math.Round(result, decimals, MidpointRounding.AwayFromZero); } /// /// 竖向平移和倾角产生竖向偏移方向相反,构架竖向向上偏移量 /// public double _ΔY_tu { get { double result = _δY_tu(); if (Position != PositionI.BogieFrame) { result = double.NaN; } return result; } set { double result = _δY_tu(); if (Position != PositionI.BogieFrame) { result = double.NaN; } result = value; OnPropertyChanged(); } } private double δY_td() { double result; double F1 = ΔM_t12; double F2 = 100 * m_z * g * (1 + S_1) / K_φp; double F3 = Squa(Δf_p * ((2 * m + p) / p)) + Squa(δ_c); double F4 = Squa(((Δh_c1 / 1500) * (1 + S_1)) * X); double F5 = Squa(((Δh_c2 / 1500) * (1 + S_1)) * X); double F6 = Squa((A_w * P_w) * (1 + S_1) * X * (h_sw - h_cp) / K_φp); double F7 = Squa(m_B * a_B * (1 + S_1) * X * (h_sc - h_cp) / K_φp); if (Position == PositionI.Collector) { F1 = ΔM_t16; } if (Env == General.Environment.Tunnel) { F6 = 0.0; } result = _f_01 + δ_w1 + f_01 + f_1 + δ_e + δ_w0 + F1 + F2 * X + _ΔX + ΔY_txgpx2 + Math.Sqrt(F3 + F4 + F5 + F6 + F7); return Math.Round(result, decimals, MidpointRounding.AwayFromZero); } /// /// 竖向平移和倾角产生竖向偏移方向相同,构架竖向向下偏移量 /// public double ΔY_td { get { double result = δY_td(); if (Position != PositionI.BogieFrame) { result = double.NaN; } return result; } set { double result = δY_td(); if (Position != PositionI.BogieFrame) { result = double.NaN; } result = value; OnPropertyChanged(); } } private double _δX_t() { double result; double F1 = Math.Sqrt(Squa(l - d) / 2 + Squa(Δ_c)); double F2 = (Δ_q1 + Δ_q2 + Δ_q3); double F3 = Squa(ΔM_t10) + Squa(Δ_d / 2); double F4 = 100 * m_z * g * (1 + S_1) / K_φp; double F5 = Squa(Δh_c1 / 1500 * Y * (1 + S_1)); double F6 = Squa(Δh_c2 / 1500 * Y * (1 + S_1)); double F7 = Squa(A_w * P_w * (1 + S_1) * (Y - h_cp) * (h_sw - h_cp) / K_φp); double F8 = Squa(m_B * a_B * (1 + S_1) * (Y - h_cp) * (h_sc - h_cp) / K_φp); if (Position == PositionI.Collector) { F3 = Squa(ΔM_t15) + Squa(Δ_d / 2); } if (Env == General.Environment.Tunnel) { F7 = 0.0; } result = (F1 + F2) * (2 * m + p) / p + Δ_e + Math.Sqrt(F3) + F4 * Math.Abs(Y - h_cp) - ΔX_txgpx + _ΔX - Math.Sqrt(F5 + F6 + F7 + F8); return Math.Round(result, decimals, MidpointRounding.AwayFromZero); } /// /// 横向平移和倾角产生横向偏移方向相反,水平偏移量 /// public double _ΔX_t { get { double result = _δX_t(); if (Position != PositionI.BogieFrame) { result = double.NaN; } return result; } set { double result = _δX_t(); if (Position != PositionI.BogieFrame) { result = double.NaN; } result = value; OnPropertyChanged(); } } private double δY_tu() { double result; double F1 = ΔM_t11; double F2 = Squa(Δf_p * ((2 * m + p) / p)) + Squa(δ_c); double F3 = 100 * m_z * g * (1 + S_1) / K_φp; double F4 = Squa(((Δh_c1 / 1500) * (1 + S_1)) * X); double F5 = Squa(((Δh_c2 / 1500) * (1 + S_1)) * X); double F6 = Squa(A_w * P_w * (1 + S_1) * X * (h_sw - h_cp) / K_φp); double F7 = Squa(m_B * a_B * (1 + S_1) * X * (h_sc - h_cp) / K_φp); if (Position == PositionI.Collector) { F1 = Squa(ΔM_t16); } if (Env == General.Environment.Tunnel) { F6 = 0.0; } result = F1 + Math.Sqrt(F2) - (F3 * X) + _ΔX - ΔY_txgpx1 - Math.Sqrt(F4 + F5 + F6 + F7); return Math.Round(result, decimals, MidpointRounding.AwayFromZero); } /// /// 竖向平移和倾角产生竖向偏移方向相同,构架竖向向上偏移量 /// public double ΔY_tu { get { double result = δY_tu(); if (Position != PositionI.BogieFrame) { result = double.NaN; } return result; } set { double result = δY_tu(); if (Position != PositionI.BogieFrame) { result = double.NaN; } result = value; OnPropertyChanged(); } } private double _δY_td() { double result; double F1 = ΔM_t12; double F2 = 100 * m_z * g * (1 + S_1) / K_φp; double F3 = Squa(Δf_p * ((2 * m + p) / p)) + Squa(δ_c); double F4 = Squa(((Δh_c1 / 1500) * (1 + S_1)) * X); double F5 = Squa(((Δh_c2 / 1500) * (1 + S_1)) * X); double F6 = Squa((A_w * P_w) * (1 + S_1) * X * (h_sw - h_cp) / K_φp); double F7 = Squa(m_B * a_B * (1 + S_1) * X * (h_sc - h_cp) / K_φp); if (Position == PositionI.Collector) { F1 = ΔM_t16; } if (Env == General.Environment.Tunnel) { F6 = 0.0; } result = _f_01 + δ_w1 + f_01 + f_1 + δ_e + δ_w0 + F1 + _ΔX + Math.Sqrt(F3) - ΔY_txgpx2 - F2 * X - Math.Sqrt(F4 + F5 + F6 + F7); return Math.Round(result, decimals, MidpointRounding.AwayFromZero); } /// /// 竖向平移和倾角产生竖向偏移方向相反,构架竖向向下偏移量 /// public double _ΔY_td { get { double result = _δY_td(); if (Position != PositionI.BogieFrame) { result = double.NaN; } return result; } set { double result = _δY_td(); if (Position != PositionI.BogieFrame) { result = double.NaN; } result = value; OnPropertyChanged(); } } #endregion private double δX_w() { double result; double F1 = Squa((l - d) / 2) + Squa(Δ_c); double F2 = Squa(ΔM_t13) + Squa(Δ_d / 2); double F3 = Squa(Δh_c1) + Squa(Δh_c2); result = F1 + Δ_e + Math.Sqrt(F2) + Y / 1500 * Math.Sqrt(F3); return Math.Round(result, decimals, MidpointRounding.AwayFromZero); } /// /// 簧下部分横向偏移量 /// public double ΔX_w { get { double result = δX_w(); if (Position != PositionI.Unsprung) { result = double.NaN; } return result; } set { double result = δX_w(); if (Position != PositionI.Unsprung) { result = double.NaN; } result = value; OnPropertyChanged(); } } private double δY_wd() { double result; double F1 = Squa(δ_c) + Squa(Δh_c1 / 1500 * X) + Squa(Δh_c2 / 1500 * X); result = _f_01 + δ_w1 + δ_e + δ_w0 + ΔM_t14 + Math.Sqrt(F1); return Math.Round(result, decimals, MidpointRounding.AwayFromZero); } /// /// 簧下部分竖向偏移量 /// public double ΔY_wd { get { double result = δY_wd(); if (Position != PositionI.Unsprung) { result = double.NaN; } return result; } set { double result = δY_wd(); if (Position != PositionI.Unsprung) { result = double.NaN; } result = value; OnPropertyChanged(); } } private double δY_f() { double result; double F1 = Squa(δ_c) + Squa(Δh_c1 / 2) + Squa(Δh_c2 / 2); result = _δ_w1 + δ_e + δ_w0 + Math.Sqrt(F1); return Math.Round(result, decimals, MidpointRounding.AwayFromZero); } /// /// 轮缘部分竖向偏移量 /// public double ΔY_f { get { double result = δY_f(); if (Position != PositionI.Rim) { result = double.NaN; } return result; } set { double result = δY_f(); if (Position != PositionI.Rim) { result = double.NaN; } result = value; OnPropertyChanged(); } } private double δY_m() { double result; double F1 = Squa(δ_c) + Squa(Δh_c1 / 2) + Squa(Δh_c2 / 2); result = δ_e + δ_w0 + Math.Sqrt(F1); return Math.Round(result, decimals, MidpointRounding.AwayFromZero); } /// /// 踏面部分竖向偏移量 /// public double ΔY_m { get { double result = δY_m(); if (Position != PositionI.Tread) { result = double.NaN; } return result; } set { double result = δY_m(); if (Position != PositionI.Tread) { result = double.NaN; } result = value; OnPropertyChanged(); } } private double δX_gu() { double result; double F1 = Math.Sqrt(Squa(l - d) / 2 + Squa(Δ_c)); double F2 = (Δ_q1 + Δ_q2 + Δ_q3); double F3 = (Δ_w1 + Δ_w2); result = (F1 + F2 + F3) + Δ_e + ΔM() + ΔX_Bxgpx + ΔX_Bcp(); return Math.Round(result, decimals, MidpointRounding.AwayFromZero); } /// /// 受电弓横向偏移量 /// public double ΔX_gu { get { double result = δX_gu(); if (Position != PositionI.Pantograph) { result = double.NaN; } return result; } set { double result = δX_gu(); if (Position != PositionI.Pantograph) { result = double.NaN; } result = value; OnPropertyChanged(); } } private double δY_gu() { return ΔJ_vd + ΔJ_vw + ΔS_vw; } /// /// 受电弓竖向向上偏移量(mm),注:柔性接触网和刚性接触网的ΔJvd 25,10, ΔJvw 3.7,6 /// public double ΔY_gu { get { double result = δY_gu(); if (Position != PositionI.Pantograph) { result = double.NaN; } return result; } set { double result = δY_gu(); if (Position != PositionI.Pantograph) { result = double.NaN; } result = value; OnPropertyChanged(); } } /// /// 受流器横向偏移量(mm) /// /// /// private double δX_sd() { return δX_t() + Δ_de; } /// /// 上部受流工作状态时受流器根部转轴点的竖向向上偏移量(mm) /// private double δY_su1() { return δY_tu() + ΔM_t16; } /// /// 上部受流工作状态时受流器与接触轨接触点的竖向向上偏移量(mm) /// private double δY_su2 => ΔC_vt; /// /// 上部受流工作释放状态的竖向向上偏移量(mm) /// private double δY_su3() { return δY_tu() + ΔH_vt + ΔM_t16; } /// /// 上部受流工作状态时受流器根部转轴的竖向向下偏移量(mm) /// /// private double δY_sd1() { return δY_td() + ΔM_t16; } /// /// 上部受流工作状态时受流器与接触轨接触点的竖向向下偏移量(mm) /// private double δY_sd2 => ΔC_vt; /// /// 上部受流工作释放状态的竖向向下偏移量(mm) /// private double δY_sd3() { return δY_td() + ΔM_t16; } /// /// 下部受流工作状态的竖向向上偏移量(mm) /// private double δY_su4 => ΔC_vt; /// /// 下部受流工作状态的竖向向下偏移量(mm) /// private double δY_su5() { return δY_tu() + ΔH_vt + ΔM_t16; } /// /// 下部受流工作状态的竖向向下偏移量(mm) /// private double δY_sd4 => ΔC_vt; /// /// 下部受流工作释放状态的竖向向下偏移量(mm) /// public double δY_sd5() { return δY_td() + ΔM_t16; } public static KineModel Copy(KineModel kine) { return new KineModel(kine.StrPosition, kine.Name, kine.X, kine.Y); } } }