/* TargetLimits_Pkg::TargetSelector */ void TargetSelector_TargetLimits_Pkg( /* TargetLimits_Pkg::TargetSelector::Targets */ TargetCollection_T_TargetManage *Targets, /* TargetLimits_Pkg::TargetSelector::Curves */ CurveCollection_T_CalcBrakingCu *Curves, /* TargetLimits_Pkg::TargetSelector::odometry */ odometry_T_Obu_BasicTypes_Pkg *odometry, /* TargetLimits_Pkg::TargetSelector::trainData_int */ trainData_internal_t_SDM_Types_ *trainData_int, /* TargetLimits_Pkg::TargetSelector::T_b */ t_Brake_t_SDMModelPkg *T_b, /* TargetLimits_Pkg::TargetSelector::NationalValues */ P3_NationalValues_T_Packet_Type *NationalValues, /* TargetLimits_Pkg::TargetSelector::trainLocations */ TrainLocations_real_T_SDM_Types *trainLocations, /* TargetLimits_Pkg::TargetSelector::MostRestrictiveDisplayedTarget */ Target_T_TargetManagement_types *MostRestrictiveDisplayedTarget, /* TargetLimits_Pkg::TargetSelector::MostRestrictiveEBDCurve */ ParabolaCurve_T_CalcBrakingCurv *MostRestrictiveEBDCurve, /* TargetLimits_Pkg::TargetSelector::SBDcurve */ ParabolaCurve_T_CalcBrakingCurv *SBDcurve, /* TargetLimits_Pkg::TargetSelector::GUIcurve */ ParabolaCurve_T_CalcBrakingCurv *GUIcurve, /* TargetLimits_Pkg::TargetSelector::GUICurveEnabled */ kcg_bool *GUICurveEnabled, /* TargetLimits_Pkg::TargetSelector::V_Target */ V_internal_real_Type_SDM_Types_ *V_Target, /* TargetLimits_Pkg::TargetSelector::V_P_MRDT */ V_internal_real_Type_SDM_Types_ *V_P_MRDT, /* TargetLimits_Pkg::TargetSelector::D_EOA */ L_internal_real_Type_SDM_Types_ *D_EOA, /* TargetLimits_Pkg::TargetSelector::D_SvL */ L_internal_real_Type_SDM_Types_ *D_SvL, /* TargetLimits_Pkg::TargetSelector::v_est */ V_internal_real_Type_SDM_Types_ *v_est, /* TargetLimits_Pkg::TargetSelector::T */ T_trac_t_TargetLimits_Pkg *T, /* TargetLimits_Pkg::TargetSelector::V_ura */ V_internal_real_Type_SDM_Types_ *V_ura, /* TargetLimits_Pkg::TargetSelector::bec */ bec_t_TargetLimits_Pkg *bec, /* TargetLimits_Pkg::TargetSelector::D_SBI2 */ L_internal_real_Type_SDM_Types_ *D_SBI2, /* TargetLimits_Pkg::TargetSelector::valid_D_SBI2 */ kcg_bool *valid_D_SBI2, /* TargetLimits_Pkg::TargetSelector::D_estfront */ L_internal_real_Type_SDM_Types_ *D_estfront, /* TargetLimits_Pkg::TargetSelector::D_maxsafefront */ L_internal_real_Type_SDM_Types_ *D_maxsafefront) { /* TargetLimits_Pkg::TargetSelector */ static TargetIteratorAkku_TargetLimits acc; static kcg_int i; /* TargetLimits_Pkg::TargetSelector */ static V_internal_real_Type_SDM_Types_ tmp; /* TargetLimits_Pkg::TargetSelector::_L29 */ static TargetIteratorAkku_TargetLimits _L29; /* TargetLimits_Pkg::TargetSelector::_L59 */ static kcg_bool _L59; /* TargetLimits_Pkg::TargetSelector::_L60 */ static TargetIteratorAkku_TargetLimits _L60; /* TargetLimits_Pkg::TargetSelector::_L55 */ static kcg_int _L55; /* TargetLimits_Pkg::TargetSelector::_L157 */ static Target_real_T_TargetManagement_ _L157; /* TargetLimits_Pkg::TargetSelector::_L261 */ static kcg_bool _L261; /* TargetLimits_Pkg::TargetSelector::_L262 */ static kcg_bool _L262; /* TargetLimits_Pkg::TargetSelector::_L282 */ static Target_real_T_TargetManagement_ _L282; _L29.ttype = invalid_TargetManagement_types; _L29.bec.v = 0.0; _L29.bec.d = 0.0; _L29.V_est = 0.0; _L29.V_ura = 0.0; _L29.V_P_MRDT_ebd = 0.0; _L262 = (*Targets).EOA_target.targetType == EoA_TargetManagement_types; kcg_copy_ParabolaCurve_T_CalcBr(SBDcurve, &(*Curves).EOA_SBD_curve); _L55 = - 1; _L29.index = _L55; _L29.V_P_MRDT_index = _L29.index; _L29.SBI2 = 0.0; _L29.T.Traction = 0.0; _L29.T.berem = 0.0; _L29.T.bs = 0.0; _L29.T.bs1 = 0.0; _L29.T.bs2 = 0.0; _L29.T.indication = 0.0; *D_maxsafefront = (*trainLocations).d_maxSafeFrontEndPos; kcg_copy_ParabolaCurve_T_CalcBr(GUIcurve, &(*Curves).GUI_curve); *GUICurveEnabled = (*Curves).GUI_curve_enabled; switch ((*NationalValues).q_nvinhsmicperm) { case Q_NVINHSMICPERM_Yes : _L29.T.inhComp = kcg_true; break; default : _L29.T.inhComp = kcg_false; } for (i = 0; i < 110; i++) { kcg_copy_TargetIteratorAkku_Tar(&acc, &_L29); /* 2 */ TargetIterator_TargetLimits_Pkg( i, &acc, &(*Targets).MRSP_targetList[i], &(*Curves).MRSP_EBD_curves[i], trainData_int, odometry, T_b, *D_maxsafefront, GUIcurve, *GUICurveEnabled, &_L59, &_L29); if (!_L59) { break; } } /* 4 */ TargetIterator_TargetLimits_Pkg( _L55, &_L29, &(*Targets).SvL_LoA_target, &(*Curves).SvL_LoA_EBD_curve, trainData_int, odometry, T_b, *D_maxsafefront, GUIcurve, *GUICurveEnabled, &_L59, &_L60); *v_est = _L60.V_est; *D_estfront = (*trainLocations).d_est_frontendPos; *D_EOA = (*Targets).EOA_target.distance; kcg_copy_T_trac_t_TargetLimits_(T, &_L60.T); *D_SvL = (*Targets).SvL_LoA_target.distance; if ((0 <= _L60.V_P_MRDT_index) & (_L60.V_P_MRDT_index < 110)) { kcg_copy_Target_real_T_TargetMa( &_L157, &(*Targets).MRSP_targetList[_L60.V_P_MRDT_index]); } else { kcg_copy_Target_real_T_TargetMa(&_L157, &(*Targets).SvL_LoA_target); } if ((0 <= _L60.index) & (_L60.index < 110)) { kcg_copy_ParabolaCurve_T_CalcBr( MostRestrictiveEBDCurve, &(*Curves).MRSP_EBD_curves[_L60.index]); } else { kcg_copy_ParabolaCurve_T_CalcBr( MostRestrictiveEBDCurve, &(*Curves).SvL_LoA_EBD_curve); } kcg_copy_bec_t_TargetLimits_Pkg(bec, &_L60.bec); *D_SBI2 = _L60.SBI2; *V_ura = _L60.V_ura; *valid_D_SBI2 = _L60.ttype != invalid_TargetManagement_types; /* ck__L275 */ if (_L262) { /* 2 */ v_SBI1_TargetLimits_Pkg( SBDcurve, *v_est, *D_estfront, *D_EOA, T_driver_SDM_Types_Pkg, *GUICurveEnabled, GUIcurve, T, &_L59, &tmp); } else { _L59 = kcg_false; tmp = 0.0; } /* 1 */ selectLEValid_TargetLimits_Pkg( (kcg_bool) (_L157.targetType != invalid_TargetManagement_types), _L60.V_P_MRDT_ebd, _L59, tmp, &_L261, &_L262, V_P_MRDT); /* 1 */ if (_L261) { kcg_copy_Target_real_T_TargetMa(&_L282, &_L157); } else { kcg_copy_Target_real_T_TargetMa(&_L282, &(*Targets).EOA_target); } (*MostRestrictiveDisplayedTarget).targetType = _L282.targetType; (*MostRestrictiveDisplayedTarget).valid = invalid_TargetManagement_types != _L282.targetType; *V_Target = _L282.speed; (*MostRestrictiveDisplayedTarget).distance = /* 1 */ TransformL_realToL_int_SDM_Type(_L282.distance); (*MostRestrictiveDisplayedTarget).speed = /* 1 */ TransformV_realToV_int_SDM_Type(*V_Target); }
/* TargetLimits_Pkg::SDMLimitLocations */ void SDMLimitLocations_TargetLimits_Pkg( /* TargetLimits_Pkg::SDMLimitLocations::MRSP_Profile */ MRSP_internal_T_TargetManagement_types *MRSP_Profile, /* TargetLimits_Pkg::SDMLimitLocations::odometry */ Odometry_real_T_SDM_Types_Pkg *odometry, /* TargetLimits_Pkg::SDMLimitLocations::trainLocations */ TrainLocations_real_T_SDM_Types_Pkg *trainLocations, /* TargetLimits_Pkg::SDMLimitLocations::targetCollection */ TargetCollection_T_TargetManagement_types *targetCollection, /* TargetLimits_Pkg::SDMLimitLocations::curveCollection */ CurveCollection_T_CalcBrakingCurves_types *curveCollection, /* TargetLimits_Pkg::SDMLimitLocations::v_release */ V_internal_real_Type_SDM_Types_Pkg v_release, /* TargetLimits_Pkg::SDMLimitLocations::V_ura */ V_internal_real_Type_SDM_Types_Pkg V_ura, /* TargetLimits_Pkg::SDMLimitLocations::inhibitUnderReadingCompensation */ Q_NVINHSMICPERM inhibitUnderReadingCompensation, /* TargetLimits_Pkg::SDMLimitLocations::isTractionCutOffImplemented */ kcg_bool isTractionCutOffImplemented, /* TargetLimits_Pkg::SDMLimitLocations::T_traction_cut_off */ T_internal_real_Type_SDM_Types_Pkg T_traction_cut_off, /* TargetLimits_Pkg::SDMLimitLocations::T_be */ T_internal_real_Type_SDM_Types_Pkg T_be, /* TargetLimits_Pkg::SDMLimitLocations::T_bs */ T_internal_real_Type_SDM_Types_Pkg T_bs, /* TargetLimits_Pkg::SDMLimitLocations::locations */ SDM_Locations_T_SDM_Types_Pkg *locations, /* TargetLimits_Pkg::SDMLimitLocations::MostRestrictiveTarget */ Target_real_T_TargetManagement_types *MostRestrictiveTarget, /* TargetLimits_Pkg::SDMLimitLocations::FLOIisSBI1 */ kcg_bool *FLOIisSBI1, /* TargetLimits_Pkg::SDMLimitLocations::v_target */ V_internal_real_Type_SDM_Types_Pkg *v_target, /* TargetLimits_Pkg::SDMLimitLocations::v_MRSP */ V_internal_real_Type_SDM_Types_Pkg *v_MRSP, /* TargetLimits_Pkg::SDMLimitLocations::v_P_SBD */ V_internal_real_Type_SDM_Types_Pkg *v_P_SBD, /* TargetLimits_Pkg::SDMLimitLocations::v_P_EBD */ V_internal_real_Type_SDM_Types_Pkg *v_P_EBD, /* TargetLimits_Pkg::SDMLimitLocations::v_P_EBD_valid */ kcg_bool *v_P_EBD_valid) { V_internal_real_Type_SDM_Types_Pkg tmp; /* TargetLimits_Pkg::SDMLimitLocations::D_bec */ L_internal_real_Type_SDM_Types_Pkg D_bec; /* TargetLimits_Pkg::SDMLimitLocations::SBDcurve */ ParabolaCurve_T_CalcBrakingCurves_types SBDcurve; /* TargetLimits_Pkg::SDMLimitLocations::EBDcurve */ ParabolaCurve_T_CalcBrakingCurves_types EBDcurve; /* TargetLimits_Pkg::SDMLimitLocations::T_Traction */ T_internal_real_Type_SDM_Types_Pkg T_Traction; /* TargetLimits_Pkg::SDMLimitLocations::T_berem */ T_internal_real_Type_SDM_Types_Pkg T_berem; /* TargetLimits_Pkg::SDMLimitLocations::DpiE */ L_internal_real_Type_SDM_Types_Pkg DpiE; /* TargetLimits_Pkg::SDMLimitLocations::DpiS */ L_internal_real_Type_SDM_Types_Pkg DpiS; /* TargetLimits_Pkg::SDMLimitLocations::V_dt */ TractionDeltaTriple_TargetLimits_Pkg V_dt; /* TargetLimits_Pkg::SDMLimitLocations::D_SBI2 */ L_internal_real_Type_SDM_Types_Pkg D_SBI2; /* TargetLimits_Pkg::SDMLimitLocations::GUICurveEnabled */ kcg_bool GUICurveEnabled; /* TargetLimits_Pkg::SDMLimitLocations::GUIcurve */ ParabolaCurve_T_CalcBrakingCurves_types GUIcurve; /* TargetLimits_Pkg::SDMLimitLocations::SBI2val */ kcg_bool SBI2val; /* TargetLimits_Pkg::SDMLimitLocations::_L18 */ L_internal_real_Type_SDM_Types_Pkg _L18; /* TargetLimits_Pkg::SDMLimitLocations::_L23 */ L_internal_real_Type_SDM_Types_Pkg _L23; /* TargetLimits_Pkg::SDMLimitLocations::_L21 */ L_internal_real_Type_SDM_Types_Pkg _L21; /* TargetLimits_Pkg::SDMLimitLocations::_L25 */ V_internal_real_Type_SDM_Types_Pkg _L25; /* TargetLimits_Pkg::SDMLimitLocations::_L26 */ V_internal_real_Type_SDM_Types_Pkg _L26; /* TargetLimits_Pkg::SDMLimitLocations::_L343 */ kcg_bool _L343; /* TargetLimits_Pkg::SDMLimitLocations::_L642 */ kcg_bool _L642; /* 1 */ surplusTractionDeltas_TargetLimits_Pkg( (*odometry).acceleration, inhibitUnderReadingCompensation, isTractionCutOffImplemented, T_traction_cut_off, T_be, V_ura, T_bs, &T_Traction, &T_berem, &V_dt); /* 2 */ TargetSelector_TargetLimits_Pkg( (*odometry).speed.v_safeNominal, targetCollection, curveCollection, T_bs, T_Traction, T_berem, &V_dt, MostRestrictiveTarget, &EBDcurve, &SBDcurve, &GUIcurve, &GUICurveEnabled, v_target, &_L23, &D_bec, &SBI2val, &D_SBI2); (*locations).d_EBI_of_V_est = D_SBI2 + (*odometry).speed.v_safeNominal * T_bs; (*locations).d_eoa = _L23; (*locations).d_svl = D_bec; *v_P_SBD = /* 1 */ P_SpeedRelatedToSBD_SDM_Types_Pkg( GUICurveEnabled, (*trainLocations).d_est_frontendPos, (*odometry).speed.v_safeNominal, &GUIcurve, T_bs, &SBDcurve, _L23); /* 1 */ v_bec_TargetLimits_Pkg( (*odometry).speed.v_safeNominal, *v_target, T_Traction, T_berem, &V_dt, &_L25, &D_bec); /* 1 */ P_SpeedRelatedToEBD_SDM_Types_Pkg( (*trainLocations).d_maxSafeFrontEndPos, (*trainLocations).d_maxSafeFrontEndPos, (*odometry).speed.v_safeNominal, &EBDcurve, &GUIcurve, T_bs, *v_target, GUICurveEnabled, D_bec, _L25, v_P_EBD, v_P_EBD_valid); *v_MRSP = /* 1 */ getMRSFromMRSP_SDM_Types_Pkg( MRSP_Profile, (*trainLocations).d_maxSafeFrontEndPos); /* 2 */ MRSPPreindicationSelector_TargetLimits_Pkg( MRSP_Profile, &SBDcurve, &GUIcurve, GUICurveEnabled, 0.0, 0.0, T_bs, &DpiS, &_L343); (*locations).SBD_preindication_location = DpiS; (*locations).Preindication_SBD_location_valid = _L343; /* 1 */ d_P_target_TargetLimits_Pkg( &EBDcurve, *v_target, T_Traction, T_berem, T_bs, &_L343, &(*locations).d_P_of_V_target); /* 1 */ MRSPPreindicationSelector_TargetLimits_Pkg( MRSP_Profile, &EBDcurve, &GUIcurve, GUICurveEnabled, T_Traction, T_berem, T_bs, &DpiE, &_L343); (*locations).EBD_preindication_location = DpiE; (*locations).Preindication_EBD_location_valid = _L343; /* 1 */ d_RSM_start_TargetLimits_Pkg( v_release, T_Traction, T_berem, &EBDcurve, &SBDcurve, (*trainLocations).d_maxSafeFrontEndPos, (*trainLocations).d_est_frontendPos, T_bs, T_bs, &_L18, &(*locations).EBD_RSM_start_location, &_L21, &_L343, &_L642); (*locations).SBD_RSM_start_location = _L21; (*locations).RSM_start_location_EBD_valid = _L343; (*locations).RSM_start_location_SBD_valid = _L642; /* 1 */ v_SBI2_TargetLimits_Pkg( &EBDcurve, (*odometry).speed.v_safeNominal, *v_target, _L25, (*trainLocations).d_maxSafeFrontEndPos, D_bec, T_bs, &_L26, &_L343); (*locations).SBI2_of_V_est = _L26; /* 1 */ v_SBI1_TargetLimits_Pkg( &SBDcurve, (*odometry).speed.v_safeNominal, (*trainLocations).d_est_frontendPos, _L23, T_bs, &_L25, &_L642); (*locations).SBI1_of_V_est = _L25; /* 1 */ d_SBI1_TargetLimits_Pkg( &SBDcurve, (*odometry).speed.v_safeNominal, T_bs, &_L343, &_L18); /* 2 */ d_limits_TargetLimits_Pkg( (*odometry).speed.v_safeNominal, _L343, _L18, SBI2val, D_SBI2, (*trainLocations).d_est_frontendPos, (*trainLocations).d_maxSafeFrontEndPos, T_bs, &GUIcurve, GUICurveEnabled, &(*locations).d_I_of_V_est, &_L23, &D_bec, &_L21, FLOIisSBI1); (*locations).d_P_of_V_est = _L23; (*locations).d_W_of_V_est = D_bec; (*locations).d_FLOI_of_V_est = _L21; if (*FLOIisSBI1) { (*locations).d_I_of_V_MRSP = DpiS; tmp = _L25; } else { (*locations).d_I_of_V_MRSP = DpiE; tmp = _L26; } (*locations).FLOI_of_V_est = tmp; }