Develop the Simulink model based on the given requirements and also create SLDD file and link the same to the model.
Aim:-
To develope a simulink model as per the requirement and sldd creation, JMAAB Testing, MIL and SIL Coverage report & Harness results for the model to be done.
Description:-
Cluster Instrument receives the signals from other ECU's via CAN bus interface. It also receives commands from the driver via steering wheel buttons. The signals are then processed by the Cluster ECU, after which the Cluster ECU may send the vehicle information to the LCD or light the LEDs and so forth, according to the results. Therefore, the Cluster ECU can be viewed as a carrier of the information flow.
Simulink Model:


As per Requirements the subsystems are made which is as seen below.
Requirements:
Requirement 1:- Input_Processing
Average Vehicle Speed would be displayed only if its between 2 kmph & 250 kmph. Any value outside this range will be discarded by its lower limit & upper limit
When Average Vehicle Speed is < 2 kmph, DisplaySpeed = 2 kmph
When Average Vehicle Speed is in between 2 kmph & 250 kmph, Display Speed = Average Vehicle Speed
When Average Vehicle Speed is > 250 kmph, Display Speed = 250 kmph

Requirement 2:- Main_Data_Filtering
Main Data Filtering subsystem will be activated for every 10th millisecond
DisplaySpeed1 (t) = ((DisplaySpeed (t) x 0.65)/ Main Filter Speed Value) - 0.05

Requirement 3:- Auxillary Data Filtering
Auxillary Data Filtering subsystem will be activated for every 10th millisecond
DisplaySpeed_Filter (t) = ((DisplaySpeed1 (t) x 0.78)/ Auxillary Filter Speed Value) - 0.03\

Requirement4:- TFT Speed Output:-
If |(DisplaySpeedFilter - DisplaySpeed)| > 1.5
{
Vehicle Speed Display = DisplaySpeed
}
else
{
Vehicle Speed Display = DisplaySpeed Filter
}

SLDD file

Requirement tagging report


JMAAB Guideline Check

Functional test case, MIL, SIL harness, coverage Reports

Signal Builder

MIL







SIL

Code generation
* TFT_cluster_speedometer.c
* Student License - for use by students to meet course requirements and
* perform academic research at degree granting institutions only. Not
* for government, commercial, or other organizational use.
* Code generation for model "TFT_cluster_speedometer".
* Simulink Coder version : 9.8 (R2022b) 13-May-2022
* C source code generated on : Wed Oct 26 18:49:44 2022
* Target selection: grt.tlc
* Note: GRT includes extra infrastructure and instrumentation for prototyping
* Embedded hardware selection: Intel->x86-64 (Windows64)
* Code generation objectives: Unspecified
* Validation result: Not run
#include "TFT_cluster_speedometer.h"
#include "TFT_cluster_speedometer_private.h"
#include "rt_nonfinite.h"
/* Exported block signals */
uint16_T Out_VehicleSpeedDisplay; /* '/Switch' */
/* Block signals (default storage) */
B_TFT_cluster_speedometer_T TFT_cluster_speedometer_B;
/* External inputs (root inport signals with default storage) */
ExtU_TFT_cluster_speedometer_T TFT_cluster_speedometer_U;
/* External outputs (root outports fed by signals with default storage) */
ExtY_TFT_cluster_speedometer_T TFT_cluster_speedometer_Y;
static RT_MODEL_TFT_cluster_speedome_T TFT_cluster_speedometer_M_;
RT_MODEL_TFT_cluster_speedome_T *const TFT_cluster_speedometer_M =
&TFT_cluster_speedometer_M_;
real_T rt_remd_snf(real_T u0, real_T u1)
if (rtIsNaN(u0) || rtIsNaN(u1) || rtIsInf(u0)) {
} else if (rtIsInf(u1)) {
} else if ((u1 != 0.0) && (u1 != trunc(u1))) {
if (!(fabs(q - floor(q + 0.5)) > DBL_EPSILON * q)) {
/* Model step function */
void TFT_cluster_speedometer_step(void)
/* Saturate: '/Saturation' incorporates:
* Inport: '/Avg_vehiclespeed'
if (TFT_cluster_speedometer_U.Avg_vehiclespeed >
TFT_cluster_speedometer_P.Saturation_UpperSat) {
/* Saturate: '/Saturation' */
TFT_cluster_speedometer_B.Displayspeed =
TFT_cluster_speedometer_P.Saturation_UpperSat;
} else if (TFT_cluster_speedometer_U.Avg_vehiclespeed <
TFT_cluster_speedometer_P.Saturation_LowerSat) {
/* Saturate: '/Saturation' */
TFT_cluster_speedometer_B.Displayspeed =
TFT_cluster_speedometer_P.Saturation_LowerSat;
/* Saturate: '/Saturation' */
TFT_cluster_speedometer_B.Displayspeed =
TFT_cluster_speedometer_U.Avg_vehiclespeed;
/* End of Saturate: '/Saturation' */
/* Outputs for Enabled SubSystem: '/Requirement3' incorporates:
/* Outputs for Enabled SubSystem: '/Requirement2' incorporates:
/* RelationalOperator: '/Compare' incorporates:
if (rt_remd_snf(TFT_cluster_speedometer_U.Time_Input,
TFT_cluster_speedometer_P.Constant_Value) ==
TFT_cluster_speedometer_P.CompareToConstant_const) {
/* Product: '/Divide' incorporates:
* Inport: '/In_MainFilt_SpeedValue'
if (TFT_cluster_speedometer_U.In_MainFilt_SpeedValue == 0U) {
/* Divide by zero handler */
tmp = (uint16_T)((uint32_T)(uint16_T)
(TFT_cluster_speedometer_B.Displayspeed *
TFT_cluster_speedometer_P.Constant_Value_m) /
TFT_cluster_speedometer_U.In_MainFilt_SpeedValue);
/* Sum: '/Subtract' incorporates:
TFT_cluster_speedometer_B.Displayspeed1 = (uint16_T)(tmp -
TFT_cluster_speedometer_P.Constant1_Value);
/* Product: '/Divide' incorporates:
* Inport: '/In_AuxillaryFilt_SpeedValue'
if (TFT_cluster_speedometer_U.In_AuxillaryFilt_SpeedValue == 0U) {
/* Divide by zero handler */
tmp = (uint16_T)((uint32_T)(uint16_T)
(TFT_cluster_speedometer_B.Displayspeed1 *
TFT_cluster_speedometer_P.Constant_Value_c) /
TFT_cluster_speedometer_U.In_AuxillaryFilt_SpeedValue);
/* Sum: '/Subtract' incorporates:
TFT_cluster_speedometer_B.Displayspeed_Filter = (uint16_T)(tmp -
TFT_cluster_speedometer_P.Constant1_Value_b);
/* End of RelationalOperator: '/Compare' */
/* End of Outputs for SubSystem: '/Requirement2' */
/* End of Outputs for SubSystem: '/Requirement3' */
/* Switch: '/Switch' incorporates:
* RelationalOperator: '/Compare'
if ((uint16_T)(TFT_cluster_speedometer_B.Displayspeed_Filter -
TFT_cluster_speedometer_B.Displayspeed) >
TFT_cluster_speedometer_P.CompareToConstant_const_l) {
Out_VehicleSpeedDisplay = TFT_cluster_speedometer_B.Displayspeed;
Out_VehicleSpeedDisplay = TFT_cluster_speedometer_B.Displayspeed_Filter;
/* End of Switch: '/Switch' */
/* Outport: '/Out_VehicleSpeedDisplay' */
TFT_cluster_speedometer_Y.Out_VehicleSpeedDisplay_e = Out_VehicleSpeedDisplay;
rt_UpdateTXYLogVars(TFT_cluster_speedometer_M->rtwLogInfo,
(&TFT_cluster_speedometer_M->Timing.taskTime0));
/* signal main to stop simulation */
{ /* Sample time: [0.2s, 0.0s] */
if ((rtmGetTFinal(TFT_cluster_speedometer_M)!=-1) &&
!((rtmGetTFinal(TFT_cluster_speedometer_M)-
TFT_cluster_speedometer_M->Timing.taskTime0) >
TFT_cluster_speedometer_M->Timing.taskTime0 * (DBL_EPSILON))) {
rtmSetErrorStatus(TFT_cluster_speedometer_M, "Simulation finished");
/* Update absolute time for base rate */
/* The "clockTick0" counts the number of times the code of this task has
* been executed. The absolute time is the multiplication of "clockTick0"
* and "Timing.stepSize0". Size of "clockTick0" ensures timer will not
* overflow during the application lifespan selected.
* Timer of this task consists of two 32 bit unsigned integers.
* The two integers represent the low bits Timing.clockTick0 and the high bits
* Timing.clockTickH0. When the low bit overflows to 0, the high bits increment.
if (!(++TFT_cluster_speedometer_M->Timing.clockTick0)) {
++TFT_cluster_speedometer_M->Timing.clockTickH0;
TFT_cluster_speedometer_M->Timing.taskTime0 =
TFT_cluster_speedometer_M->Timing.clockTick0 *
TFT_cluster_speedometer_M->Timing.stepSize0 +
TFT_cluster_speedometer_M->Timing.clockTickH0 *
TFT_cluster_speedometer_M->Timing.stepSize0 * 4294967296.0;
/* Model initialize function */
void TFT_cluster_speedometer_initialize(void)
/* initialize non-finites */
rt_InitInfAndNaN(sizeof(real_T));
/* initialize real-time model */
(void) memset((void *)TFT_cluster_speedometer_M, 0,
sizeof(RT_MODEL_TFT_cluster_speedome_T));
rtmSetTFinal(TFT_cluster_speedometer_M, 10.0);
TFT_cluster_speedometer_M->Timing.stepSize0 = 0.2;
/* Setup for data logging */
static RTWLogInfo rt_DataLoggingInfo;
rt_DataLoggingInfo.loggingInterval = (NULL);
TFT_cluster_speedometer_M->rtwLogInfo = &rt_DataLoggingInfo;
/* Setup for data logging */
rtliSetLogXSignalInfo(TFT_cluster_speedometer_M->rtwLogInfo, (NULL));
rtliSetLogXSignalPtrs(TFT_cluster_speedometer_M->rtwLogInfo, (NULL));
rtliSetLogT(TFT_cluster_speedometer_M->rtwLogInfo, "tout");
rtliSetLogX(TFT_cluster_speedometer_M->rtwLogInfo, "");
rtliSetLogXFinal(TFT_cluster_speedometer_M->rtwLogInfo, "");
rtliSetLogVarNameModifier(TFT_cluster_speedometer_M->rtwLogInfo, "rt_");
rtliSetLogFormat(TFT_cluster_speedometer_M->rtwLogInfo, 4);
rtliSetLogMaxRows(TFT_cluster_speedometer_M->rtwLogInfo, 0);
rtliSetLogDecimation(TFT_cluster_speedometer_M->rtwLogInfo, 1);
rtliSetLogY(TFT_cluster_speedometer_M->rtwLogInfo, "");
rtliSetLogYSignalInfo(TFT_cluster_speedometer_M->rtwLogInfo, (NULL));
rtliSetLogYSignalPtrs(TFT_cluster_speedometer_M->rtwLogInfo, (NULL));
(void) memset(((void *) &TFT_cluster_speedometer_B), 0,
sizeof(B_TFT_cluster_speedometer_T));
/* exported global signals */
Out_VehicleSpeedDisplay = 0U;
(void)memset(&TFT_cluster_speedometer_U, 0, sizeof
(ExtU_TFT_cluster_speedometer_T));
TFT_cluster_speedometer_Y.Out_VehicleSpeedDisplay_e = 0U;
rt_StartDataLoggingWithStartTime(TFT_cluster_speedometer_M->rtwLogInfo, 0.0,
rtmGetTFinal(TFT_cluster_speedometer_M),
TFT_cluster_speedometer_M->Timing.stepSize0, (&rtmGetErrorStatus
(TFT_cluster_speedometer_M)));
/* SystemInitialize for Enabled SubSystem: '/Requirement2' */
/* SystemInitialize for Sum: '/Subtract' incorporates:
* Outport: '/Displayspeed1'
TFT_cluster_speedometer_B.Displayspeed1 =
TFT_cluster_speedometer_P.Displayspeed1_Y0;
/* End of SystemInitialize for SubSystem: '/Requirement2' */
/* SystemInitialize for Enabled SubSystem: '/Requirement3' */
/* SystemInitialize for Sum: '/Subtract' incorporates:
* Outport: '/Displayspeed_Filter'
TFT_cluster_speedometer_B.Displayspeed_Filter =
TFT_cluster_speedometer_P.Displayspeed_Filter_Y0;
/* End of SystemInitialize for SubSystem: '/Requirement3' */
/* Model terminate function */
void TFT_cluster_speedometer_terminate(void)
/* (no terminate code required) */
Report:
Result
The simulink model is developed as per the requirement and sldd creation, JMAAB Testing, MIL and SIL Coverage report & Harness results for the model are done.