Challenge

Project 2-Highway Assistant-Lane Changing Assistant

The first step is the creation of the Simulink Data Dictionary File from the given calibration and signal data list. Then data dictionary should be linked to the specified simulink model.

As per the first requirement, the first subsystem will have three inputs. They are Highway_Input_Signal, Enable_Display, and Input_Switch.

The input further goes to the chart. The chart will have the output as Highway_Display_Mode_1, Highway_Display_Mode_2, Highway_Display_Mode_3, and Highway_Display_Mode_4.

Inside the chart, we will implement Highway_Input_Signal, Enable_Display, and Input_Switch using AND blocks. The output is given in the State.

Once the Stateflow logic is written, we will resolve the port for input and output.

As per requirement 2, we will enable the subsystem using Lane_Input_Signal for a value of 6. Input for the block will be Input_Switch and Enable_display. Here, from and to blocks are used to make connections easy and readable. 

EN_D= Enable_Display, IPS= Input_Switch, HIS= Highway_Input_Signal, HD1= Highway_Display_1,...., HD4= Highway_Display_4, LD1= Lane_Display_1,...., LD4= Lane_Display_4.

These inputs will further go to Chart, where the Stateflow logic will be written. The output of the chart are Lane_Display_Mode_1, Lane_Display_Mode_2, Lane_Display_Mode_3, Lane_Display_Model_4.

Inside the chart, the Enable_Display and Input_Switch are used to make logic for Lane Display output.

The main output is written inside the State for Lane_Display_Mode.

The input and output signals are then resolved.

The output of the Highway_Display_Mode and Lane_Display_Mode are provided to the Switch block. That is in total 4 switch blocks are used. The conditional input signal is taken as Highway_Input_Signal for all the blocks.

The final model from the inside can be seen like this:

To give a better look we will put all this in a single subsystem. For better visualization, we will mask the subsystem with the appropriate image.

Then we will make the model in compliance with the AUTOSAR. So, all the input & output signals will be mapped into the Autosar Editor.

But prior to that, we will set the System target file as autosar.tlc

We will make sure that in Solver we will set the solver to Fixed-Step.

Then under App, we will select the AUTOSAR component.

This will open Code Mapping - AUTOSAR SW Component.

For the Reciever port of the model, that is input, we will rename the port with the prefix Rp_.

For the Sender port of the model, that is output, we will rename the port with the prefix Pp_.

For the S-R Interfaces of the model, we will rename the port with the prefix SRIf_.

For the Data Elements of the model, we will rename the port with the prefix DE_.

Then the model was validated with AUTOSAR Compliance.

Once the mapping is done we will check for Model Advisor, the code was generated after successfully running it.

Code Generation:

/*
 * File: Highway_Lane_Assist.c
 *
 * Code generated for Simulink model 'Highway_Lane_Assist'.
 *
 * Model version                  : 1.8
 * Simulink Coder version         : 9.3 (R2020a) 18-Nov-2019
 * C/C++ source code generated on : Sat Sep 18 01:33:33 2021
 *
 * Target selection: autosar.tlc
 * Embedded hardware selection: Intel->x86-64 (Windows64)
 * Code generation objectives: Unspecified
 * Validation result: Not run
 */

#include "Highway_Lane_Assist.h"
#include "Highway_Lane_Assist_private.h"

/* Named constants for Chart: '/Highway_Display_Mode_Logic' */
#define Highway_Lane_Ass_IN_Condition_1 ((uint8)1U)
#define Highway_Lane_Ass_IN_Condition_2 ((uint8)2U)

/* Named constants for Chart: '/Chart' */
#define Highway_Lane_Assist_IN_Mode_1  ((uint8)1U)
#define Highway_Lane_Assist_IN_Mode_2  ((uint8)2U)

/* Block states (default storage) */
DW_Highway_Lane_Assist_T Highway_Lane_Assist_DW;

/* Model step function */
void Highway_Lane_Assist_Step(void)
{
  sint32 rtb_Highway_Display_Mode_1;
  sint32 rtb_Lane_Display_Mode_1;
  sint32 rtb_Lane_Display_Mode_2;
  sint32 rtb_Highway_Display_Mode_3;
  sint32 rtb_Lane_Display_Mode_3;
  sint32 rtb_Lane_Display_Mode_4;
  float64 tmp;

  /* Chart: '/Highway_Display_Mode_Logic' incorporates:
   *  Inport: '/Enable_Display'
   *  Inport: '/Highway_Input_Signal'
   *  Inport: '/Input_Switch'
   */
  if (Highway_Lane_Assist_DW.is_active_c3_Highway_Lane_Assis == 0U) {
    Highway_Lane_Assist_DW.is_active_c3_Highway_Lane_Assis = 1U;
    Highway_Lane_Assist_DW.is_c3_Highway_Lane_Assist =
      Highway_Lane_Ass_IN_Condition_1;
    rtb_Highway_Display_Mode_1 = 232;
    rtb_Highway_Display_Mode_3 = 41;
  } else if (Highway_Lane_Assist_DW.is_c3_Highway_Lane_Assist ==
             Highway_Lane_Ass_IN_Condition_1) {
    if ((Rte_IRead_Highway_Lane_Assist_Step_Rp_Highway_Input_Signal_DE_Highway_Input_Signal
         () == 1.0) &&
        (Rte_IRead_Highway_Lane_Assist_Step_Rp_Enable_Display_Enable_Display() ==
         1.0) &&
        (Rte_IRead_Highway_Lane_Assist_Step_Rp_Input_Switch_Input_Switch() ==
         1.0)) {
      Highway_Lane_Assist_DW.is_c3_Highway_Lane_Assist =
        Highway_Lane_Ass_IN_Condition_2;
      rtb_Highway_Display_Mode_1 = 213;
      rtb_Highway_Display_Mode_3 = 9;
    } else {
      rtb_Highway_Display_Mode_1 = 232;
      rtb_Highway_Display_Mode_3 = 41;
    }
  } else {
    /* case IN_Condition_2: */
    if ((Rte_IRead_Highway_Lane_Assist_Step_Rp_Highway_Input_Signal_DE_Highway_Input_Signal
         () == 1.0) &&
        (Rte_IRead_Highway_Lane_Assist_Step_Rp_Enable_Display_Enable_Display() ==
         0.0) &&
        (Rte_IRead_Highway_Lane_Assist_Step_Rp_Input_Switch_Input_Switch() ==
         1.0)) {
      Highway_Lane_Assist_DW.is_c3_Highway_Lane_Assist =
        Highway_Lane_Ass_IN_Condition_1;
      rtb_Highway_Display_Mode_1 = 232;
      rtb_Highway_Display_Mode_3 = 41;
    } else {
      rtb_Highway_Display_Mode_1 = 213;
      rtb_Highway_Display_Mode_3 = 9;
    }
  }

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

  /* Chart: '/Chart' incorporates:
   *  Inport: '/Enable_Display'
   *  Inport: '/Input_Switch'
   *  Inport: '/Lane_Input_Signal'
   */
  if (Highway_Lane_Assist_DW.is_active_c1_Highway_Lane_Assis == 0U) {
    Highway_Lane_Assist_DW.is_active_c1_Highway_Lane_Assis = 1U;
    Highway_Lane_Assist_DW.is_c1_Highway_Lane_Assist =
      Highway_Lane_Assist_IN_Mode_1;
    rtb_Lane_Display_Mode_1 = 132;
    rtb_Lane_Display_Mode_2 = 185;
    rtb_Lane_Display_Mode_3 = 54;
    rtb_Lane_Display_Mode_4 = 67;
  } else if (Highway_Lane_Assist_DW.is_c1_Highway_Lane_Assist ==
             Highway_Lane_Assist_IN_Mode_1) {
    if ((Rte_IRead_Highway_Lane_Assist_Step_Rp_Lane_Input_Signal_Lane_Input_Signal
         () == 6.0) &&
        (Rte_IRead_Highway_Lane_Assist_Step_Rp_Enable_Display_Enable_Display() ==
         1.0) &&
        (Rte_IRead_Highway_Lane_Assist_Step_Rp_Input_Switch_Input_Switch() ==
         1.0)) {
      Highway_Lane_Assist_DW.is_c1_Highway_Lane_Assist =
        Highway_Lane_Assist_IN_Mode_2;
      rtb_Lane_Display_Mode_1 = 127;
      rtb_Lane_Display_Mode_2 = 248;
      rtb_Lane_Display_Mode_3 = 186;
      rtb_Lane_Display_Mode_4 = 84;
    } else {
      rtb_Lane_Display_Mode_1 = 132;
      rtb_Lane_Display_Mode_2 = 185;
      rtb_Lane_Display_Mode_3 = 54;
      rtb_Lane_Display_Mode_4 = 67;
    }
  } else {
    /* case IN_Mode_2: */
    if ((Rte_IRead_Highway_Lane_Assist_Step_Rp_Lane_Input_Signal_Lane_Input_Signal
         () == 6.0) &&
        (Rte_IRead_Highway_Lane_Assist_Step_Rp_Enable_Display_Enable_Display() ==
         0.0) &&
        (Rte_IRead_Highway_Lane_Assist_Step_Rp_Input_Switch_Input_Switch() ==
         1.0)) {
      Highway_Lane_Assist_DW.is_c1_Highway_Lane_Assist =
        Highway_Lane_Assist_IN_Mode_1;
      rtb_Lane_Display_Mode_1 = 132;
      rtb_Lane_Display_Mode_2 = 185;
      rtb_Lane_Display_Mode_3 = 54;
      rtb_Lane_Display_Mode_4 = 67;
    } else {
      rtb_Lane_Display_Mode_1 = 127;
      rtb_Lane_Display_Mode_2 = 248;
      rtb_Lane_Display_Mode_3 = 186;
      rtb_Lane_Display_Mode_4 = 84;
    }
  }

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

  /* Switch: '/Switch' incorporates:
   *  Inport: '/Highway_Input_Signal'
   *  Switch: '/Switch1'
   *  Switch: '/Switch2'
   */
  tmp =
    Rte_IRead_Highway_Lane_Assist_Step_Rp_Highway_Input_Signal_DE_Highway_Input_Signal
    ();
  if (tmp != 0.0) {
    /* Outport: '/Display_Mode_1' */
    Rte_IWrite_Highway_Lane_Assist_Step_Pp_Display_Mode_1_Display_Mode_1
      (rtb_Highway_Display_Mode_1);
    rtb_Lane_Display_Mode_2 = 183;
  } else {
    /* Outport: '/Display_Mode_1' */
    Rte_IWrite_Highway_Lane_Assist_Step_Pp_Display_Mode_1_Display_Mode_1
      (rtb_Lane_Display_Mode_1);
  }

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

  /* Outport: '/Display_Mode_2' */
  Rte_IWrite_Highway_Lane_Assist_Step_Pp_Display_Mode_2_Display_Mode_2
    (rtb_Lane_Display_Mode_2);

  /* Switch: '/Switch2' incorporates:
   *  Switch: '/Switch3'
   */
  if (tmp != 0.0) {
    /* Outport: '/Display_Mode_3' */
    Rte_IWrite_Highway_Lane_Assist_Step_Pp_Display_Mode_3_Display_Mode_3
      (rtb_Highway_Display_Mode_3);
    rtb_Lane_Display_Mode_4 = 94;
  } else {
    /* Outport: '/Display_Mode_3' */
    Rte_IWrite_Highway_Lane_Assist_Step_Pp_Display_Mode_3_Display_Mode_3
      (rtb_Lane_Display_Mode_3);
  }

  /* Outport: '/Display_Mode_4' */
  Rte_IWrite_Highway_Lane_Assist_Step_Pp_Display_Mode_4_Display_Mode_4
    (rtb_Lane_Display_Mode_4);
}

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

/*
 * File trailer for generated code.
 *
 * [EOF]
 */

The following is the Model Advisor Report: will be attacheed in file

most of the maab are followed

The generated report along with the SLDD, Model, Code generation and screenshots, all are given in the zip file.

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.