コード例 #1
0
/* SDM_Types_Pkg::getMRSFromMRSP */
V_internal_real_Type_SDM_Types_Pkg getMRSFromMRSP_SDM_Types_Pkg(
  /* SDM_Types_Pkg::getMRSFromMRSP::MRSP */ MRSP_internal_T_TargetManagement_types *MRSP,
  /* SDM_Types_Pkg::getMRSFromMRSP::d_max_safe_front */ L_internal_real_Type_SDM_Types_Pkg d_max_safe_front)
{
  /* SDM_Types_Pkg::getMRSFromMRSP */
  static MRSP_internal_section_T_TargetManagement_types tmp;
  /* SDM_Types_Pkg::getMRSFromMRSP */
  static MRSP_internal_section_T_TargetManagement_types acc;
  static kcg_int i;
  /* SDM_Types_Pkg::getMRSFromMRSP::V_MRSP */
  static V_internal_real_Type_SDM_Types_Pkg V_MRSP;
  
  kcg_copy_MRSP_internal_section_T_TargetManagement_types(&tmp, &(*MRSP)[0]);
  for (i = 0; i < 110; i++) {
    kcg_copy_MRSP_internal_section_T_TargetManagement_types(&acc, &tmp);
    /* 1 */ if ((*MRSP)[i].valid & ((*MRSP)[i].Loc_Abs <= d_max_safe_front)) {
      kcg_copy_MRSP_internal_section_T_TargetManagement_types(
        &tmp,
        &(*MRSP)[i]);
    }
    else {
      kcg_copy_MRSP_internal_section_T_TargetManagement_types(&tmp, &acc);
    }
  }
  V_MRSP = tmp.MRS;
  return V_MRSP;
}
/* TargetManagement_pkg::internalOperators::extractTargetsFromMRSPInt */
void extractTargetsFromMRSPInt_TargetManagement_pkg_internalOperators(
  /* TargetManagement_pkg::internalOperators::extractTargetsFromMRSPInt::index */kcg_int index,
  /* TargetManagement_pkg::internalOperators::extractTargetsFromMRSPInt::ACCU */extractTargetsMRSPACC_TargetManagement_pkg *ACCU,
  /* TargetManagement_pkg::internalOperators::extractTargetsFromMRSPInt::MRSP */MRSP_internal_T_TargetManagement_types *MRSP,
  /* TargetManagement_pkg::internalOperators::extractTargetsFromMRSPInt::endCondition */kcg_bool *endCondition,
  /* TargetManagement_pkg::internalOperators::extractTargetsFromMRSPInt::ACCUout */extractTargetsMRSPACC_TargetManagement_pkg *ACCUout)
{
  /* TargetManagement_pkg::internalOperators::extractTargetsFromMRSPInt::_L14 */
  static MRSP_internal_section_T_TargetManagement_types _L14;
  /* TargetManagement_pkg::internalOperators::extractTargetsFromMRSPInt::_L15 */
  static MRSP_internal_section_T_TargetManagement_types _L15;
  /* TargetManagement_pkg::internalOperators::extractTargetsFromMRSPInt::_L34 */
  static kcg_int _L34;
  
  if ((0 <= index + 1) & (index + 1 < 110)) {
    kcg_copy_MRSP_internal_section_T_TargetManagement_types(
      &_L15,
      &(*MRSP)[index + 1]);
  }
  else {
    kcg_copy_MRSP_internal_section_T_TargetManagement_types(
      &_L15,
      (MRSP_internal_section_T_TargetManagement_types *)
        &emptyMRSPSection_TargetManagement_pkg);
  }
  *endCondition = _L15.valid;
  _L34 = 1 + (*ACCU).lastInsertedTargetIndex;
  if ((0 <= index) & (index < 110)) {
    kcg_copy_MRSP_internal_section_T_TargetManagement_types(
      &_L14,
      &(*MRSP)[index]);
  }
  else {
    kcg_copy_MRSP_internal_section_T_TargetManagement_types(
      &_L14,
      (MRSP_internal_section_T_TargetManagement_types *)
        &emptyMRSPSection_TargetManagement_pkg);
  }
  if ((_L14.MRS > _L15.MRS) & _L14.valid & *endCondition) {
    (*ACCUout).lastInsertedTargetIndex = _L34;
    kcg_copy_Target_list_MRSP_real_T_TargetManagement_types(
      &(*ACCUout).targetList,
      &(*ACCU).targetList);
    if ((0 <= _L34) & (_L34 < 110)) {
      (*ACCUout).targetList[_L34].targetType = MRSP_TargetManagement_types;
      (*ACCUout).targetList[_L34].distance = _L15.Loc_Abs;
      (*ACCUout).targetList[_L34].speed = _L15.MRS;
    }
  }
  else {
    kcg_copy_extractTargetsMRSPACC_TargetManagement_pkg(ACCUout, ACCU);
  }
}
/* TargetLimits_Pkg::MRSPPreindicationSelector */
void MRSPPreindicationSelector_TargetLimits_Pkg(
  /* TargetLimits_Pkg::MRSPPreindicationSelector::MRSP */MRSP_internal_T_TargetManagement_types *MRSP,
  /* TargetLimits_Pkg::MRSPPreindicationSelector::EBDcurve */ParabolaCurve_T_CalcBrakingCurves_types *EBDcurve,
  /* TargetLimits_Pkg::MRSPPreindicationSelector::SBDcurve */ParabolaCurve_T_CalcBrakingCurves_types *SBDcurve,
  /* TargetLimits_Pkg::MRSPPreindicationSelector::GUIcurve */ParabolaCurve_T_CalcBrakingCurves_types *GUIcurve,
  /* TargetLimits_Pkg::MRSPPreindicationSelector::guiCurveEnabled */kcg_bool guiCurveEnabled,
  /* TargetLimits_Pkg::MRSPPreindicationSelector::isEoA */kcg_bool isEoA,
  /* TargetLimits_Pkg::MRSPPreindicationSelector::T */T_trac_t_TargetLimits_Pkg *T,
  /* TargetLimits_Pkg::MRSPPreindicationSelector::D_preindication */L_internal_real_Type_SDM_Types_Pkg *D_preindication,
  /* TargetLimits_Pkg::MRSPPreindicationSelector::D_I_V_MRSP */L_internal_real_Type_SDM_Types_Pkg *D_I_V_MRSP,
  /* TargetLimits_Pkg::MRSPPreindicationSelector::valid */kcg_bool *valid)
{
  static struct__130732 tmp1;
  static kcg_bool tmp;
  static kcg_int i;
  /* TargetLimits_Pkg::MRSPPreindicationSelector::_L1 */
  static MRSP_internal_section_T_TargetManagement_types _L1;
  /* TargetLimits_Pkg::MRSPPreindicationSelector::_L69 */
  static ParabolaCurve_T_CalcBrakingCurves_types _L69;
  /* TargetLimits_Pkg::MRSPPreindicationSelector::_L75 */
  static T_trac_t_TargetLimits_Pkg _L75;
  
  _L1.Loc_Abs = 0.0;
  _L1.MRS = 0.0;
  _L1.valid = kcg_false;
  if (isEoA) {
    kcg_copy_ParabolaCurve_T_CalcBrakingCurves_types(&_L69, SBDcurve);
    kcg_copy_T_trac_t_TargetLimits_Pkg(&_L75, T);
    _L75.berem = 0.0;
    _L75.Traction = 0.0;
    _L75.bs2 = (*T).bs1;
  }
  else {
    kcg_copy_ParabolaCurve_T_CalcBrakingCurves_types(&_L69, EBDcurve);
    kcg_copy_T_trac_t_TargetLimits_Pkg(&_L75, T);
  }
  for (i = 0; i < 110; i++) {
    kcg_copy_MRSP_internal_section_T_TargetManagement_types(&tmp1, &_L1);
    /* 1 */
    MRSPPreindicationIterator_TargetLimits_Pkg(
      i,
      &tmp1,
      &(*MRSP)[i],
      &_L69,
      guiCurveEnabled,
      GUIcurve,
      &_L75,
      &tmp,
      &_L1);
    if (!tmp) {
      break;
    }
  }
  *valid = _L1.valid;
  *D_preindication = _L1.Loc_Abs;
  *D_I_V_MRSP = T_preindication_SDM_Types_Pkg * _L1.MRS + *D_preindication;
}
/* TargetLimits_Pkg::MRSPPreindicationSelector */
void MRSPPreindicationSelector_TargetLimits_Pkg(
  /* TargetLimits_Pkg::MRSPPreindicationSelector::MRSP */ MRSP_internal_T_TargetManagement_types *MRSP,
  /* TargetLimits_Pkg::MRSPPreindicationSelector::curve */ ParabolaCurve_T_CalcBrakingCurves_types *curve,
  /* TargetLimits_Pkg::MRSPPreindicationSelector::GUIcurve */ ParabolaCurve_T_CalcBrakingCurves_types *GUIcurve,
  /* TargetLimits_Pkg::MRSPPreindicationSelector::guiCurveEnabled */ kcg_bool guiCurveEnabled,
  /* TargetLimits_Pkg::MRSPPreindicationSelector::T_Traction */ T_internal_real_Type_SDM_Types_Pkg T_Traction,
  /* TargetLimits_Pkg::MRSPPreindicationSelector::T_berem */ T_internal_real_Type_SDM_Types_Pkg T_berem,
  /* TargetLimits_Pkg::MRSPPreindicationSelector::T_bs */ T_internal_real_Type_SDM_Types_Pkg T_bs,
  /* TargetLimits_Pkg::MRSPPreindicationSelector::D_preindication */ L_internal_real_Type_SDM_Types_Pkg *D_preindication,
  /* TargetLimits_Pkg::MRSPPreindicationSelector::valid */ kcg_bool *valid)
{
  MRSP_internal_section_T_TargetManagement_types tmp1;
  kcg_bool tmp;
  kcg_int i;
  /* TargetLimits_Pkg::MRSPPreindicationSelector::_L1 */ MRSP_internal_section_T_TargetManagement_types _L1;
  
  _L1.Loc_Abs = 0.0;
  _L1.MRS = 0.0;
  _L1.valid = kcg_false;
  for (i = 0; i < 200; i++) {
    kcg_copy_MRSP_internal_section_T_TargetManagement_types(&tmp1, &_L1);
    /* 1 */
    MRSPPreindicationIterator_TargetLimits_Pkg(
      i,
      &tmp1,
      &(*MRSP)[i],
      curve,
      T_Traction,
      T_berem,
      guiCurveEnabled,
      GUIcurve,
      T_bs,
      &tmp,
      &_L1);
    if (!tmp) {
      break;
    }
  }
  *D_preindication = _L1.Loc_Abs;
  *valid = _L1.valid;
}