Challenge

Project 2-Highway Assistant-Lane Changing Assistant

Aim:

  • To develop the model in MATLAB Simulink as per MBD guidelines.
  • To create Simulink Data Dictionary for the model and to be linked to the model.
  • To create Model Advisor Report , by running the checks in MAAB
  • To generate Autosar code using embedded coder

SLDD Creation:

Create a new Simulink file. In model explorer click on New-->Data Dictionary

Simulink Model:

Requirement 1:

Requirement 2:

ModelAdvisor Check:

Click on Modeling --> Model Advisor

Now check on the the Modeling Standards for MAB

Click on Run Selected checks

Autosar port Mapping:

First, to click on the apps---> Autosar component

Go to Xml options and type the following as shown in the figure:

Now go to S-R interfaces

Click on Add . Enter the name as per the requirement. The number of data elements is set to 1.

Inside every SR interface, enter the corresponding Data element with prefix DE_

In the reciever and sender ports, enter all the input and ouput signals. Select the corresponding S-R interface

Reciever ports are given wit prefix Rp_

Sender ports are given wit prefix Pp_

After completing, go to the code mappings tab. Click on inports.

Select the port and element with respect to the input.

Repeat the same procedure for the output signals by clicking the outport and selecting the corresponding signals

Similarly repeat the procedure for Outports

Click on the Green Tick icon to validate the model.

AUTOSAR CODE:

/*
 * Academic License - for use in teaching, academic research, and meeting
 * course requirements at degree granting institutions only.  Not for
 * government, commercial, or other organizational use.
 *
 * File: LaneChangeAssistant.c
 *
 * Code generated for Simulink model 'LaneChangeAssistant'.
 *
 * Model version                  : 1.25
 * Simulink Coder version         : 9.4 (R2020b) 29-Jul-2020
 * C/C++ source code generated on : Mon Nov 29 12:35:04 2021
 *
 * Target selection: autosar.tlc
 * Embedded hardware selection: Intel->x86-64 (Windows64)
 * Code generation objectives: Unspecified
 * Validation result: Not run
 */

#include "LaneChangeAssistant.h"
#include "LaneChangeAssistant_private.h"

/* Named constants for Chart: '/Chart' */
#define LaneChangeAssistant_IN_Start   ((uint8)1U)
#define LaneChangeAssistant_IN_state1  ((uint8)2U)
#define LaneChangeAssistant_IN_state2  ((uint8)3U)

/* Block signals (default storage) */
B_LaneChangeAssistant_T LaneChangeAssistant_B;

/* Block states (default storage) */
DW_LaneChangeAssistant_T LaneChangeAssistant_DW;

/* Model step function */
void LaneChangeAssistant_Step(void)
{
  sint32 tmp;
  sint32 tmp_0;
  sint32 tmp_1;

  /* Chart: '/Chart' incorporates:
   *  Inport: '/Enable_Display'
   *  Inport: '/Input_Switch'
   *  Inport: '/Lane_Input_Signal'
   */
  if (LaneChangeAssistant_DW.is_active_c1_LaneChangeAssistan == 0U) {
    LaneChangeAssistant_DW.is_active_c1_LaneChangeAssistan = 1U;
    LaneChangeAssistant_DW.is_c1_LaneChangeAssistant =
      LaneChangeAssistant_IN_Start;
  } else {
    switch (LaneChangeAssistant_DW.is_c1_LaneChangeAssistant) {
     case LaneChangeAssistant_IN_Start:
      tmp =
        Rte_IRead_LaneChangeAssistant_Step_Rp_Lane_Input_Signal_DE_Lane_Input_Signal
        ();
      tmp_0 =
        Rte_IRead_LaneChangeAssistant_Step_Rp_Enable_Display_DE_Enable_Display();
      tmp_1 = Rte_IRead_LaneChangeAssistant_Step_Rp_Input_Switch_DE_Input_Switch
        ();
      if ((tmp == 6) && (tmp_0 == 0) && (tmp_1 == 1)) {
        LaneChangeAssistant_DW.is_c1_LaneChangeAssistant =
          LaneChangeAssistant_IN_state1;
        LaneChangeAssistant_B.Lane_Display_Mode_1 = 132.0;
        LaneChangeAssistant_B.Lane_Display_Mode_2 = 185.0;
        LaneChangeAssistant_B.Lane_Display_Mode_3 = 54.0;
        LaneChangeAssistant_B.Lane_Display_Mode_4 = 67.0;
      } else {
        if ((tmp == 6) && (tmp_0 == 1) && (tmp_1 == 1)) {
          LaneChangeAssistant_DW.is_c1_LaneChangeAssistant =
            LaneChangeAssistant_IN_state2;
          LaneChangeAssistant_B.Lane_Display_Mode_1 = 127.0;
          LaneChangeAssistant_B.Lane_Display_Mode_2 = 248.0;
          LaneChangeAssistant_B.Lane_Display_Mode_3 = 186.0;
          LaneChangeAssistant_B.Lane_Display_Mode_4 = 84.0;
        }
      }
      break;

     case LaneChangeAssistant_IN_state1:
      LaneChangeAssistant_B.Lane_Display_Mode_1 = 132.0;
      LaneChangeAssistant_B.Lane_Display_Mode_2 = 185.0;
      LaneChangeAssistant_B.Lane_Display_Mode_3 = 54.0;
      LaneChangeAssistant_B.Lane_Display_Mode_4 = 67.0;
      break;

     default:
      /* case IN_state2: */
      LaneChangeAssistant_B.Lane_Display_Mode_1 = 127.0;
      LaneChangeAssistant_B.Lane_Display_Mode_2 = 248.0;
      LaneChangeAssistant_B.Lane_Display_Mode_3 = 186.0;
      LaneChangeAssistant_B.Lane_Display_Mode_4 = 84.0;
      break;
    }
  }

  /* End of Chart: '/Chart' */

  /* Chart: '/Chart' incorporates:
   *  Inport: '/Enable_Display'
   *  Inport: '/Highway_Input_Signal'
   *  Inport: '/Input_Switch'
   */
  if (LaneChangeAssistant_DW.is_active_c3_LaneChangeAssistan == 0U) {
    LaneChangeAssistant_DW.is_active_c3_LaneChangeAssistan = 1U;
    LaneChangeAssistant_DW.is_c3_LaneChangeAssistant =
      LaneChangeAssistant_IN_Start;
  } else {
    switch (LaneChangeAssistant_DW.is_c3_LaneChangeAssistant) {
     case LaneChangeAssistant_IN_Start:
      tmp =
        Rte_IRead_LaneChangeAssistant_Step_Rp_Highway_Input_Signal_DE_Highway_Input_Signal
        ();
      tmp_0 =
        Rte_IRead_LaneChangeAssistant_Step_Rp_Enable_Display_DE_Enable_Display();
      tmp_1 = Rte_IRead_LaneChangeAssistant_Step_Rp_Input_Switch_DE_Input_Switch
        ();
      if ((tmp == 1) && (tmp_0 == 0) && (tmp_1 == 1)) {
        LaneChangeAssistant_DW.is_c3_LaneChangeAssistant =
          LaneChangeAssistant_IN_state1;
        LaneChangeAssistant_B.Highway_Display_Mode_1 = 232.0;
        LaneChangeAssistant_B.Highway_Display_Mode_2 = 183.0;
        LaneChangeAssistant_B.Highway_Display_Mode_3 = 41.0;
        LaneChangeAssistant_B.Highway_Display_Mode_4 = 94.0;
      } else {
        if ((tmp == 1) && (tmp_0 == 1) && (tmp_1 == 1)) {
          LaneChangeAssistant_DW.is_c3_LaneChangeAssistant =
            LaneChangeAssistant_IN_state2;
          LaneChangeAssistant_B.Highway_Display_Mode_1 = 213.0;
          LaneChangeAssistant_B.Highway_Display_Mode_2 = 183.0;
          LaneChangeAssistant_B.Highway_Display_Mode_3 = 9.0;
          LaneChangeAssistant_B.Highway_Display_Mode_4 = 94.0;
        }
      }
      break;

     case LaneChangeAssistant_IN_state1:
      LaneChangeAssistant_B.Highway_Display_Mode_1 = 232.0;
      LaneChangeAssistant_B.Highway_Display_Mode_2 = 183.0;
      LaneChangeAssistant_B.Highway_Display_Mode_3 = 41.0;
      LaneChangeAssistant_B.Highway_Display_Mode_4 = 94.0;
      break;

     default:
      /* case IN_state2: */
      LaneChangeAssistant_B.Highway_Display_Mode_1 = 213.0;
      LaneChangeAssistant_B.Highway_Display_Mode_2 = 183.0;
      LaneChangeAssistant_B.Highway_Display_Mode_3 = 9.0;
      LaneChangeAssistant_B.Highway_Display_Mode_4 = 94.0;
      break;
    }
  }

  /* End of Chart: '/Chart' */

  /* Switch: '/Switch' incorporates:
   *  Inport: '/Highway_Input_Signal'
   *  Switch: '/Switch1'
   *  Switch: '/Switch2'
   *  Switch: '/Switch3'
   */
  if (Rte_IRead_LaneChangeAssistant_Step_Rp_Highway_Input_Signal_DE_Highway_Input_Signal
      () != 0) {
    /* Outport: '/Display_Mode_1' */
    Rte_IWrite_LaneChangeAssistant_Step_Pp_Display_Mode_1_DE_Display_Mode_1
      (LaneChangeAssistant_B.Lane_Display_Mode_1);

    /* Outport: '/Display_Mode_2' */
    Rte_IWrite_LaneChangeAssistant_Step_Pp_Display_Mode_2_DE_Display_Mode_2
      (LaneChangeAssistant_B.Lane_Display_Mode_2);

    /* Outport: '/Display_Mode_3' */
    Rte_IWrite_LaneChangeAssistant_Step_Pp_Display_Mode_3_DE_Display_Mode_3
      (LaneChangeAssistant_B.Lane_Display_Mode_3);

    /* Outport: '/Display_Mode_4' */
    Rte_IWrite_LaneChangeAssistant_Step_Pp_Display_Mode_4_DE_Display_Mode_4
      (LaneChangeAssistant_B.Lane_Display_Mode_4);
  } else {
    /* Outport: '/Display_Mode_1' */
    Rte_IWrite_LaneChangeAssistant_Step_Pp_Display_Mode_1_DE_Display_Mode_1
      (LaneChangeAssistant_B.Highway_Display_Mode_1);

    /* Outport: '/Display_Mode_2' */
    Rte_IWrite_LaneChangeAssistant_Step_Pp_Display_Mode_2_DE_Display_Mode_2
      (LaneChangeAssistant_B.Highway_Display_Mode_2);

    /* Outport: '/Display_Mode_3' */
    Rte_IWrite_LaneChangeAssistant_Step_Pp_Display_Mode_3_DE_Display_Mode_3
      (LaneChangeAssistant_B.Highway_Display_Mode_3);

    /* Outport: '/Display_Mode_4' */
    Rte_IWrite_LaneChangeAssistant_Step_Pp_Display_Mode_4_DE_Display_Mode_4
      (LaneChangeAssistant_B.Highway_Display_Mode_4);
  }

  /* End of Switch: '/Switch' */
}

/* Model initialize function */
void LaneChangeAssistant_Init(void)
{
  /* (no initialization code required) */
}

/*
 * File trailer for generated code.
 *
 * [EOF]
 */
Your portfolio, next

Ship work like this
in your own course.

Talk to a career counsellor

Free 20-minute call. We'll map the right course to where you want to work.

By submitting you agree to our Terms and Privacy Policy.

Talk to a career counsellor

Free 20-minute call. We'll map the right course to where you want to work.

By submitting you agree to our Terms and Privacy Policy.