mirror of
https://github.com/Dev-KATECH/ADM.git
synced 2026-05-17 01:43:59 +09:00
- 1채널 DBC 수정 : 0x140 : EstMass 신호 Length 수정(15 → 14) : EstMassFlag 신호 Length 수정(1 → 2) : EstMassFlag 신호 Value Table 추가 - DBC 수정에 따른 can.c 및 관련 변수 수정 - 질량 추정 로직 개선 : R 행렬 중 Ax 분산 실차 데이터 적용 : Flag 신호 개선
1642 lines
50 KiB
C
1642 lines
50 KiB
C
/*
|
|
* 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: ADM_Integrated_Logic.c
|
|
*
|
|
* Code generated for Simulink model 'ADM_Integrated_Logic'.
|
|
*
|
|
* Model version : 14.42
|
|
* Simulink Coder version : 24.2 (R2024b) 21-Jun-2024
|
|
* C/C++ source code generated on : Wed Oct 15 20:57:40 2025
|
|
*
|
|
* Target selection: ert.tlc
|
|
* Embedded hardware selection: NXP->Cortex-M4
|
|
* Code generation objectives:
|
|
* 1. Execution efficiency
|
|
* 2. RAM efficiency
|
|
* 3. Debugging
|
|
* Validation result: Not run
|
|
*/
|
|
|
|
#include "ADM_Integrated_Logic.h"
|
|
#include <stdint.h>
|
|
#include <math.h>
|
|
#include <stdbool.h>
|
|
|
|
/* Named constants for Chart: '<S12>/Chart' */
|
|
#define IN_HAC_OFF ((uint8_t)1U)
|
|
#define IN_HAC_ON ((uint8_t)2U)
|
|
|
|
/* Block signals and states (default storage) */
|
|
DW_ADM_Integrated_Logic_T ADM_Integrated_Logic_DW;
|
|
|
|
/* External inputs (root inport signals with default storage) */
|
|
ExtU_ADM_Integrated_Logic_T ADM_Integrated_Logic_U;
|
|
|
|
/* External outputs (root outports fed by signals with default storage) */
|
|
ExtY_ADM_Integrated_Logic_T ADM_Integrated_Logic_Y;
|
|
|
|
/* Real-time model */
|
|
static RT_MODEL_ADM_Integrated_Logic_T ADM_Integrated_Logic_M_;
|
|
RT_MODEL_ADM_Integrated_Logic_T *const ADM_Integrated_Logic_M =
|
|
&ADM_Integrated_Logic_M_;
|
|
static void ADM_Integrated_Lo_Calculate_F_c(double rtu_W, double rtu_theta,
|
|
double *rty_F_c);
|
|
static void ADM_Integrated__MATLABFunction1(double rtu_u, double *rty_y);
|
|
static void ADM_Integrated__MATLABFunction2(double rtu_u, double *rty_y);
|
|
|
|
/*
|
|
* Output and update for atomic system:
|
|
* '<S55>/Calculate_F_c'
|
|
* '<S55>/Calculate_F_c1'
|
|
*/
|
|
static void ADM_Integrated_Lo_Calculate_F_c(double rtu_W, double rtu_theta,
|
|
double *rty_F_c)
|
|
{
|
|
*rty_F_c = rtu_W * sin(rtu_theta);
|
|
}
|
|
|
|
/*
|
|
* Output and update for atomic system:
|
|
* '<S1>/MATLAB Function1'
|
|
* '<S1>/MATLAB Function5'
|
|
*/
|
|
static void ADM_Integrated__MATLABFunction1(double rtu_u, double *rty_y)
|
|
{
|
|
*rty_y = rtu_u;
|
|
if (rtu_u < 140.0) {
|
|
*rty_y = 140.0;
|
|
}
|
|
}
|
|
|
|
/*
|
|
* Output and update for atomic system:
|
|
* '<S1>/MATLAB Function2'
|
|
* '<S1>/MATLAB Function6'
|
|
*/
|
|
static void ADM_Integrated__MATLABFunction2(double rtu_u, double *rty_y)
|
|
{
|
|
*rty_y = rtu_u;
|
|
if (rtu_u > -140.0) {
|
|
*rty_y = -140.0;
|
|
}
|
|
}
|
|
|
|
/* Model step function */
|
|
void ADM_Integrated_Logic_step(void)
|
|
{
|
|
double tmp[9];
|
|
double x_hat_pred[3];
|
|
double tmp_0[2];
|
|
double tmp_1[2];
|
|
double rtb_Add1;
|
|
double rtb_Add3;
|
|
double rtb_Add_e;
|
|
double rtb_BrakeTorque;
|
|
double rtb_Desired_Torque;
|
|
double rtb_Error_m;
|
|
double rtb_EstMassOut;
|
|
double rtb_Gain;
|
|
double rtb_Gain2_j;
|
|
double rtb_Gain_c;
|
|
double rtb_Integrator_1;
|
|
double rtb_MotorTorque;
|
|
double rtb_Pitch_Saturation;
|
|
double rtb_Product1;
|
|
double rtb_Product1_gg;
|
|
double rtb_Product1_h;
|
|
double rtb_Product1_k3;
|
|
double rtb_Product1_m;
|
|
double rtb_Product1_pd;
|
|
double rtb_Sum;
|
|
double rtb_Sum1_aj;
|
|
double rtb_Sum1_i2;
|
|
double rtb_Sum1_lm;
|
|
double rtb_Sum1_o1;
|
|
double rtb_Sum1_p;
|
|
double rtb_Switch2;
|
|
double rtb_Vx_Cmd_R;
|
|
double rtb_deltafalllimit_a;
|
|
double rtb_deltafalllimit_m;
|
|
double rtb_y;
|
|
double rtb_y_k;
|
|
int32_t i;
|
|
bool rtb_LogicalOperator;
|
|
static const int8_t a[6] = { 1, 0, 0, 1, 0, 0 };
|
|
|
|
static const double b_a[6] = { 0.2997, 0.0, -0.0842, 0.01, 0.9981, 0.0 };
|
|
|
|
double rtb_Add1_tmp;
|
|
|
|
/* MATLAB Function: '<S1>/MATLAB Function' incorporates:
|
|
* Constant: '<S1>/Constant1'
|
|
* Constant: '<S1>/Constant2'
|
|
*/
|
|
tmp[0] = 1.0;
|
|
tmp[3] = 0.002;
|
|
tmp[6] = -0.019620000000000002;
|
|
tmp[1] = 0.0;
|
|
tmp[2] = 0.0;
|
|
tmp[4] = 1.0;
|
|
tmp[5] = 0.0;
|
|
tmp[7] = 0.0;
|
|
tmp[8] = 1.0;
|
|
rtb_EstMassOut = ADM_Integrated_Logic_DW.x_hat[1];
|
|
rtb_Product1 = ADM_Integrated_Logic_DW.x_hat[0];
|
|
rtb_Gain = ADM_Integrated_Logic_DW.x_hat[2];
|
|
for (i = 0; i < 3; i++) {
|
|
x_hat_pred[i] = (tmp[i + 3] * rtb_EstMassOut + tmp[i] * rtb_Product1) +
|
|
tmp[i + 6] * rtb_Gain;
|
|
}
|
|
|
|
/* SignalConversion generated from: '<S15>/ SFunction ' incorporates:
|
|
* Inport: '<Root>/GV_IMU_AX_Val'
|
|
* Inport: '<Root>/GV_Vx_Fbk'
|
|
* MATLAB Function: '<S1>/MATLAB Function'
|
|
*/
|
|
tmp_0[0] = ADM_Integrated_Logic_U.GV_Vx_Fbk;
|
|
tmp_0[1] = ADM_Integrated_Logic_U.GV_IMU_AX_Val;
|
|
|
|
/* MATLAB Function: '<S1>/MATLAB Function' */
|
|
rtb_EstMassOut = x_hat_pred[1];
|
|
rtb_Product1 = x_hat_pred[0];
|
|
rtb_Gain = x_hat_pred[2];
|
|
for (i = 0; i < 2; i++) {
|
|
tmp_1[i] = tmp_0[i] - (((double)a[i + 2] * rtb_EstMassOut + (double)a[i] *
|
|
rtb_Product1) + 0.0 * rtb_Gain);
|
|
}
|
|
|
|
rtb_Add_e = tmp_1[1];
|
|
rtb_EstMassOut = tmp_1[0];
|
|
for (i = 0; i < 3; i++) {
|
|
ADM_Integrated_Logic_DW.x_hat[i] = (b_a[i + 3] * rtb_Add_e + b_a[i] *
|
|
rtb_EstMassOut) + x_hat_pred[i];
|
|
}
|
|
|
|
/* Logic: '<S1>/Logical Operator' incorporates:
|
|
* Constant: '<S5>/Constant'
|
|
* Constant: '<S6>/Constant'
|
|
* Inport: '<Root>/GV_IMU_AX_Val'
|
|
* Inport: '<Root>/GV_Vx_Fbk'
|
|
* RelationalOperator: '<S5>/Compare'
|
|
* RelationalOperator: '<S6>/Compare'
|
|
*/
|
|
rtb_LogicalOperator = ((ADM_Integrated_Logic_U.GV_Vx_Fbk >= 1.0) &&
|
|
(ADM_Integrated_Logic_U.GV_IMU_AX_Val >= 0.5));
|
|
|
|
/* Outputs for Enabled SubSystem: '<S1>/Enabled Subsystem' incorporates:
|
|
* EnablePort: '<S10>/Enable'
|
|
*/
|
|
if (rtb_LogicalOperator) {
|
|
/* MATLAB Function: '<S10>/MATLAB Function' incorporates:
|
|
* Constant: '<S1>/Constant9'
|
|
* Inport: '<Root>/GV_IMU_AZ_Val'
|
|
* Inport: '<Root>/GV_MCU_EstTrq'
|
|
* MATLAB Function: '<S1>/MATLAB Function'
|
|
*/
|
|
ADM_Integrated_Logic_DW.M = ADM_Integrated_Logic_U.GV_MCU_EstTrq / ((0.01 *
|
|
ADM_Integrated_Logic_U.GV_IMU_AZ_Val + ADM_Integrated_Logic_DW.x_hat[1]) *
|
|
0.022698910310142498);
|
|
}
|
|
|
|
/* End of Outputs for SubSystem: '<S1>/Enabled Subsystem' */
|
|
|
|
/* MATLAB Function: '<S1>/MATLAB Function3' */
|
|
if (!ADM_Integrated_Logic_DW.prev_EstMass_not_empty) {
|
|
ADM_Integrated_Logic_DW.prev_EstMass = ADM_Integrated_Logic_DW.M;
|
|
ADM_Integrated_Logic_DW.prev_EstMass_not_empty = true;
|
|
}
|
|
|
|
if (!rtb_LogicalOperator) {
|
|
/* Outport: '<Root>/GV_VCU_EstMassFlag' */
|
|
ADM_Integrated_Logic_Y.GV_VCU_EstMassFlag = 0.0;
|
|
rtb_EstMassOut = 1500.0;
|
|
} else if ((ADM_Integrated_Logic_DW.prev_EstMass != 0.0) && (fabs
|
|
(ADM_Integrated_Logic_DW.M - ADM_Integrated_Logic_DW.prev_EstMass)
|
|
/ ADM_Integrated_Logic_DW.prev_EstMass * 100.0 <= 10.0)) {
|
|
/* Outport: '<Root>/GV_VCU_EstMassFlag' */
|
|
ADM_Integrated_Logic_Y.GV_VCU_EstMassFlag = 2.0;
|
|
rtb_EstMassOut = ADM_Integrated_Logic_DW.M;
|
|
} else {
|
|
/* Outport: '<Root>/GV_VCU_EstMassFlag' */
|
|
ADM_Integrated_Logic_Y.GV_VCU_EstMassFlag = 1.0;
|
|
rtb_EstMassOut = 1500.0;
|
|
}
|
|
|
|
ADM_Integrated_Logic_DW.prev_EstMass = ADM_Integrated_Logic_DW.M;
|
|
|
|
/* End of MATLAB Function: '<S1>/MATLAB Function3' */
|
|
|
|
/* Outport: '<Root>/GV_VCU_EstMass' */
|
|
ADM_Integrated_Logic_Y.GV_VCU_EstMass = rtb_EstMassOut;
|
|
|
|
/* Product: '<S14>/Product1' incorporates:
|
|
* Constant: '<S14>/Constant'
|
|
* Gain: '<S14>/gain'
|
|
* Inport: '<Root>/GV_IMU_AX_Val'
|
|
* Product: '<S14>/Product11'
|
|
* Sum: '<S14>/Sum1'
|
|
* Sum: '<S14>/Sum2'
|
|
* Sum: '<S14>/Sum3'
|
|
* Sum: '<S14>/Sum4'
|
|
* UnitDelay: '<S14>/d'
|
|
* UnitDelay: '<S14>/d1'
|
|
*/
|
|
rtb_Product1 = ((ADM_Integrated_Logic_U.GV_IMU_AX_Val +
|
|
ADM_Integrated_Logic_DW.d1_DSTATE) * 0.002 +
|
|
0.63461977236758138 * ADM_Integrated_Logic_DW.d_DSTATE) /
|
|
0.63861977236758138;
|
|
|
|
/* Gain: '<S2>/Gain' incorporates:
|
|
* Inport: '<Root>/GV_Drive_ACC_Cmd'
|
|
*/
|
|
rtb_Gain = 9.80665 * ADM_Integrated_Logic_U.GV_Drive_ACC_Cmd;
|
|
|
|
/* Switch: '<S28>/Switch2' incorporates:
|
|
* Gain: '<S2>/Gain2'
|
|
* Inport: '<Root>/GV_VCU_Acc_Limit'
|
|
* RelationalOperator: '<S28>/LowerRelop1'
|
|
* RelationalOperator: '<S28>/UpperRelop'
|
|
* Switch: '<S28>/Switch'
|
|
*/
|
|
if (rtb_Gain > ADM_Integrated_Logic_U.GV_VCU_Acc_Limit) {
|
|
rtb_y_k = ADM_Integrated_Logic_U.GV_VCU_Acc_Limit;
|
|
} else if (rtb_Gain < -ADM_Integrated_Logic_U.GV_VCU_Acc_Limit) {
|
|
/* Switch: '<S28>/Switch' incorporates:
|
|
* Gain: '<S2>/Gain2'
|
|
*/
|
|
rtb_y_k = -ADM_Integrated_Logic_U.GV_VCU_Acc_Limit;
|
|
} else {
|
|
rtb_y_k = rtb_Gain;
|
|
}
|
|
|
|
/* End of Switch: '<S28>/Switch2' */
|
|
|
|
/* Product: '<S26>/Product' */
|
|
rtb_y_k *= rtb_EstMassOut;
|
|
|
|
/* Sum: '<S26>/Subtract' incorporates:
|
|
* Gain: '<S2>/Gain1'
|
|
* Product: '<S26>/Product1'
|
|
*/
|
|
rtb_EstMassOut = rtb_y_k - 9.80665 * rtb_Product1 * rtb_EstMassOut;
|
|
|
|
/* SampleTimeMath: '<S29>/TSamp'
|
|
*
|
|
* About '<S29>/TSamp':
|
|
* y = u * K where K = 1 / ( w * Ts )
|
|
* */
|
|
rtb_Gain = rtb_EstMassOut * 500.0;
|
|
|
|
/* Sum: '<S26>/Sum1' incorporates:
|
|
* Constant: '<S1>/Constant10'
|
|
* Constant: '<S1>/Constant11'
|
|
* Constant: '<S1>/Constant13'
|
|
* DiscreteIntegrator: '<S26>/Discrete-Time Integrator'
|
|
* Gain: '<S26>/Gain2'
|
|
* Product: '<S26>/D controller'
|
|
* Product: '<S26>/I controller'
|
|
* Product: '<S26>/P controller'
|
|
* Sum: '<S26>/Subtract1'
|
|
* Sum: '<S29>/Diff'
|
|
* UnitDelay: '<S29>/UD'
|
|
*
|
|
* Block description for '<S29>/Diff':
|
|
*
|
|
* Add in CPU
|
|
*
|
|
* Block description for '<S29>/UD':
|
|
*
|
|
* Store in Global RAM
|
|
*/
|
|
rtb_y_k = ((0.05 * rtb_EstMassOut +
|
|
ADM_Integrated_Logic_DW.DiscreteTimeIntegrator_DSTATE * 0.1) +
|
|
(rtb_Gain - ADM_Integrated_Logic_DW.UD_DSTATE) * 0.0) + 0.0 *
|
|
rtb_y_k;
|
|
|
|
/* RateLimiter: '<S2>/Rate Limiter' */
|
|
rtb_deltafalllimit_a = rtb_y_k - ADM_Integrated_Logic_DW.PrevY;
|
|
if (rtb_deltafalllimit_a > 1.0) {
|
|
rtb_Gain2_j = ADM_Integrated_Logic_DW.PrevY + 1.0;
|
|
} else if (rtb_deltafalllimit_a < -0.3) {
|
|
rtb_Gain2_j = ADM_Integrated_Logic_DW.PrevY - 0.3;
|
|
} else {
|
|
rtb_Gain2_j = rtb_y_k;
|
|
}
|
|
|
|
ADM_Integrated_Logic_DW.PrevY = rtb_Gain2_j;
|
|
|
|
/* End of RateLimiter: '<S2>/Rate Limiter' */
|
|
|
|
/* MATLAB Function: '<S2>/MATLAB Function' */
|
|
if (rtb_Gain2_j >= 0.0) {
|
|
rtb_MotorTorque = rtb_Gain2_j;
|
|
rtb_BrakeTorque = 0.0;
|
|
} else {
|
|
rtb_MotorTorque = 0.0;
|
|
rtb_BrakeTorque = -rtb_Gain2_j;
|
|
}
|
|
|
|
/* End of MATLAB Function: '<S2>/MATLAB Function' */
|
|
|
|
/* RelationalOperator: '<S51>/Compare' incorporates:
|
|
* Constant: '<S51>/Constant'
|
|
* Inport: '<Root>/GV_BrakeTorqueCommand'
|
|
*/
|
|
rtb_LogicalOperator = (ADM_Integrated_Logic_U.GV_BrakeTorqueCommand >= 100.0);
|
|
|
|
/* Delay: '<S11>/Memory' */
|
|
rtb_Gain2_j = ADM_Integrated_Logic_DW.Memory_DSTATE;
|
|
|
|
/* MATLAB Function: '<S11>/Gear_FUNCTION1' incorporates:
|
|
* Inport: '<Root>/GV_VCU_GearSelStat'
|
|
* Inport: '<Root>/GV_Vx_Fbk'
|
|
*/
|
|
if (ADM_Integrated_Logic_U.GV_VCU_GearSelStat == 0.0) {
|
|
if ((ADM_Integrated_Logic_U.GV_Vx_Fbk <= 0.0) && rtb_LogicalOperator) {
|
|
rtb_Gain2_j = 0.0;
|
|
}
|
|
} else {
|
|
switch ((int32_t)rtb_Gain2_j) {
|
|
case 0:
|
|
if ((ADM_Integrated_Logic_U.GV_Vx_Fbk <= 0.0) &&
|
|
((ADM_Integrated_Logic_U.GV_VCU_GearSelStat == 1.0) ||
|
|
(ADM_Integrated_Logic_U.GV_VCU_GearSelStat == 3.0) ||
|
|
(ADM_Integrated_Logic_U.GV_VCU_GearSelStat == 2.0))) {
|
|
rtb_Gain2_j = 2.0;
|
|
}
|
|
break;
|
|
|
|
case 1:
|
|
if (ADM_Integrated_Logic_U.GV_VCU_GearSelStat == 2.0) {
|
|
rtb_Gain2_j = 2.0;
|
|
}
|
|
break;
|
|
|
|
case 2:
|
|
if ((ADM_Integrated_Logic_U.GV_Vx_Fbk <= 0.0) && rtb_LogicalOperator) {
|
|
if (ADM_Integrated_Logic_U.GV_VCU_GearSelStat == 1.0) {
|
|
rtb_Gain2_j = 1.0;
|
|
} else if (ADM_Integrated_Logic_U.GV_VCU_GearSelStat == 3.0) {
|
|
rtb_Gain2_j = 3.0;
|
|
}
|
|
}
|
|
break;
|
|
|
|
case 3:
|
|
if (ADM_Integrated_Logic_U.GV_VCU_GearSelStat == 2.0) {
|
|
rtb_Gain2_j = 2.0;
|
|
}
|
|
break;
|
|
}
|
|
}
|
|
|
|
/* End of MATLAB Function: '<S11>/Gear_FUNCTION1' */
|
|
|
|
/* Gain: '<S7>/Brake_GAIN' incorporates:
|
|
* DiscreteTransferFcn: '<S1>/Discrete Transfer Fcn'
|
|
*/
|
|
rtb_Switch2 = 0.0625 * ADM_Integrated_Logic_DW.DiscreteTransferFcn_states *
|
|
-80.0;
|
|
|
|
/* MATLAB Function: '<S7>/GearCondition_Brake' */
|
|
if (rtb_Gain2_j == 1.0) {
|
|
i = -1;
|
|
} else {
|
|
i = (rtb_Gain2_j == 3.0);
|
|
}
|
|
|
|
/* Saturate: '<S7>/Saturation' */
|
|
if (rtb_Switch2 > 1000.0) {
|
|
rtb_Switch2 = 1000.0;
|
|
} else if (rtb_Switch2 < 0.0) {
|
|
rtb_Switch2 = 0.0;
|
|
}
|
|
|
|
/* Product: '<S7>/Multiply2' incorporates:
|
|
* MATLAB Function: '<S7>/GearCondition_Brake'
|
|
* Saturate: '<S7>/Saturation'
|
|
*/
|
|
rtb_y_k = (double)i * rtb_Switch2;
|
|
|
|
/* RateLimiter: '<S7>/Brake_Out_RateLimiter' */
|
|
rtb_deltafalllimit_a = rtb_y_k - ADM_Integrated_Logic_DW.PrevY_o;
|
|
if (rtb_deltafalllimit_a > 3.0) {
|
|
rtb_y_k = ADM_Integrated_Logic_DW.PrevY_o + 3.0;
|
|
} else if (rtb_deltafalllimit_a < -3.0) {
|
|
rtb_y_k = ADM_Integrated_Logic_DW.PrevY_o - 3.0;
|
|
}
|
|
|
|
ADM_Integrated_Logic_DW.PrevY_o = rtb_y_k;
|
|
|
|
/* End of RateLimiter: '<S7>/Brake_Out_RateLimiter' */
|
|
|
|
/* Saturate: '<S7>/Brake_Saturation' */
|
|
if (rtb_y_k > 1000.0) {
|
|
rtb_y_k = 1000.0;
|
|
} else if (rtb_y_k < 0.0) {
|
|
rtb_y_k = 0.0;
|
|
}
|
|
|
|
/* End of Saturate: '<S7>/Brake_Saturation' */
|
|
|
|
/* Saturate: '<S12>/Pitch_Saturation' incorporates:
|
|
* DiscreteIntegrator: '<S12>/Integrator_2'
|
|
*/
|
|
if (ADM_Integrated_Logic_DW.Integrator_2_DSTATE > 8.0) {
|
|
rtb_Pitch_Saturation = 8.0;
|
|
} else if (ADM_Integrated_Logic_DW.Integrator_2_DSTATE < -8.0) {
|
|
rtb_Pitch_Saturation = -8.0;
|
|
} else {
|
|
rtb_Pitch_Saturation = ADM_Integrated_Logic_DW.Integrator_2_DSTATE;
|
|
}
|
|
|
|
/* End of Saturate: '<S12>/Pitch_Saturation' */
|
|
|
|
/* Delay: '<S62>/Delay' */
|
|
if (ADM_Integrated_Logic_DW.icLoad) {
|
|
ADM_Integrated_Logic_DW.Delay_DSTATE = rtb_Pitch_Saturation;
|
|
}
|
|
|
|
/* Product: '<S62>/delta rise limit' incorporates:
|
|
* Constant: '<S12>/Angle_Upper'
|
|
* SampleTimeMath: '<S62>/sample time'
|
|
*
|
|
* About '<S62>/sample time':
|
|
* y = K where K = ( w * Ts )
|
|
* */
|
|
rtb_Integrator_1 = 0.002;
|
|
|
|
/* Sum: '<S62>/Difference Inputs1' incorporates:
|
|
* Delay: '<S62>/Delay'
|
|
*
|
|
* Block description for '<S62>/Difference Inputs1':
|
|
*
|
|
* Add in CPU
|
|
*/
|
|
rtb_Pitch_Saturation -= ADM_Integrated_Logic_DW.Delay_DSTATE;
|
|
|
|
/* Switch: '<S67>/Switch2' incorporates:
|
|
* RelationalOperator: '<S67>/LowerRelop1'
|
|
*/
|
|
if (!(rtb_Pitch_Saturation > 0.002)) {
|
|
/* Product: '<S62>/delta fall limit' incorporates:
|
|
* Constant: '<S12>/Angle_Down'
|
|
* SampleTimeMath: '<S62>/sample time'
|
|
*
|
|
* About '<S62>/sample time':
|
|
* y = K where K = ( w * Ts )
|
|
* */
|
|
rtb_deltafalllimit_m = -0.002;
|
|
|
|
/* Switch: '<S67>/Switch' incorporates:
|
|
* RelationalOperator: '<S67>/UpperRelop'
|
|
*/
|
|
if (rtb_Pitch_Saturation < -0.002) {
|
|
rtb_Integrator_1 = -0.002;
|
|
} else {
|
|
rtb_Integrator_1 = rtb_Pitch_Saturation;
|
|
}
|
|
|
|
/* End of Switch: '<S67>/Switch' */
|
|
}
|
|
|
|
/* End of Switch: '<S67>/Switch2' */
|
|
|
|
/* Sum: '<S62>/Difference Inputs2' incorporates:
|
|
* Delay: '<S62>/Delay'
|
|
*
|
|
* Block description for '<S62>/Difference Inputs2':
|
|
*
|
|
* Add in CPU
|
|
*/
|
|
rtb_Pitch_Saturation = rtb_Integrator_1 + ADM_Integrated_Logic_DW.Delay_DSTATE;
|
|
|
|
/* MATLAB Function: '<S55>/Calculate_F_c' incorporates:
|
|
* Gain: '<S55>/Gain'
|
|
*/
|
|
ADM_Integrated_Lo_Calculate_F_c(ADM_Integrated_Logic_ConstB.W_value,
|
|
0.017453292519943295 * rtb_Pitch_Saturation, &rtb_deltafalllimit_m);
|
|
|
|
/* Gain: '<S55>/Gain2' incorporates:
|
|
* Constant: '<S55>/Radius'
|
|
* Gain: '<S55>/Gain1'
|
|
* Gain: '<S55>/Rolling_Gain'
|
|
* MATLAB Function: '<S55>/Calculate_F_R'
|
|
* Product: '<S55>/Multiply3'
|
|
* Sum: '<S55>/Required_Brake_Cal'
|
|
*/
|
|
rtb_deltafalllimit_m = (cos(0.017453292519943295 * rtb_Pitch_Saturation) *
|
|
436.7465753424658 * 0.0 + rtb_deltafalllimit_m) * 0.292 *
|
|
0.083822296730930432;
|
|
|
|
/* Saturate: '<S55>/Saturation' */
|
|
if (rtb_deltafalllimit_m > 60.0) {
|
|
rtb_deltafalllimit_m = 60.0;
|
|
} else if (rtb_deltafalllimit_m < 0.0) {
|
|
rtb_deltafalllimit_m = 0.0;
|
|
}
|
|
|
|
/* End of Saturate: '<S55>/Saturation' */
|
|
|
|
/* Delay: '<S61>/Delay' */
|
|
if (ADM_Integrated_Logic_DW.icLoad_e) {
|
|
ADM_Integrated_Logic_DW.Delay_DSTATE_i = rtb_deltafalllimit_m;
|
|
}
|
|
|
|
/* Product: '<S61>/delta rise limit' incorporates:
|
|
* Constant: '<S12>/Upper_Torq'
|
|
* SampleTimeMath: '<S61>/sample time'
|
|
*
|
|
* About '<S61>/sample time':
|
|
* y = K where K = ( w * Ts )
|
|
* */
|
|
rtb_Integrator_1 = 0.016;
|
|
|
|
/* Sum: '<S61>/Difference Inputs1' incorporates:
|
|
* Delay: '<S61>/Delay'
|
|
*
|
|
* Block description for '<S61>/Difference Inputs1':
|
|
*
|
|
* Add in CPU
|
|
*/
|
|
rtb_deltafalllimit_m -= ADM_Integrated_Logic_DW.Delay_DSTATE_i;
|
|
|
|
/* Switch: '<S66>/Switch2' incorporates:
|
|
* RelationalOperator: '<S66>/LowerRelop1'
|
|
*/
|
|
if (!(rtb_deltafalllimit_m > 0.016)) {
|
|
/* Switch: '<S66>/Switch' incorporates:
|
|
* RelationalOperator: '<S66>/UpperRelop'
|
|
*/
|
|
if (rtb_deltafalllimit_m < -0.16) {
|
|
rtb_Integrator_1 = -0.16;
|
|
} else {
|
|
rtb_Integrator_1 = rtb_deltafalllimit_m;
|
|
}
|
|
|
|
/* End of Switch: '<S66>/Switch' */
|
|
}
|
|
|
|
/* End of Switch: '<S66>/Switch2' */
|
|
|
|
/* Sum: '<S61>/Difference Inputs2' incorporates:
|
|
* Delay: '<S61>/Delay'
|
|
*
|
|
* Block description for '<S61>/Difference Inputs2':
|
|
*
|
|
* Add in CPU
|
|
*/
|
|
rtb_deltafalllimit_m = rtb_Integrator_1 +
|
|
ADM_Integrated_Logic_DW.Delay_DSTATE_i;
|
|
|
|
/* Gain: '<S12>/Grade_GAIN' */
|
|
rtb_Desired_Torque = 0.8 * rtb_deltafalllimit_m;
|
|
|
|
/* RelationalOperator: '<S4>/Compare' incorporates:
|
|
* Constant: '<S4>/Constant'
|
|
* Inport: '<Root>/GV_Drive_Mode'
|
|
*/
|
|
rtb_LogicalOperator = (ADM_Integrated_Logic_U.GV_Drive_Mode == 2.0);
|
|
|
|
/* MATLAB Function: '<S25>/Vx_OutPut_Function' incorporates:
|
|
* Constant: '<S70>/Constant'
|
|
* Inport: '<Root>/GV_BrakeTorqueCommand'
|
|
* Inport: '<Root>/GV_Vx_Command'
|
|
* Inport: '<Root>/GV_Vx_Limit'
|
|
* RelationalOperator: '<S70>/Compare'
|
|
*/
|
|
if (!(ADM_Integrated_Logic_U.GV_BrakeTorqueCommand >= 50.0)) {
|
|
if (ADM_Integrated_Logic_U.GV_Vx_Limit <=
|
|
ADM_Integrated_Logic_U.GV_Vx_Command) {
|
|
rtb_Add_e = ADM_Integrated_Logic_U.GV_Vx_Limit;
|
|
} else {
|
|
rtb_Add_e = ADM_Integrated_Logic_U.GV_Vx_Command;
|
|
}
|
|
} else {
|
|
rtb_Add_e = 0.0;
|
|
}
|
|
|
|
/* Product: '<S25>/Product' incorporates:
|
|
* MATLAB Function: '<S25>/Vx_OutPut_Function'
|
|
* Switch: '<S25>/Switch'
|
|
*/
|
|
rtb_Integrator_1 = rtb_Add_e * (double)!rtb_LogicalOperator;
|
|
|
|
/* RateLimiter: '<S25>/Input_Vx_RateLimiter' */
|
|
rtb_deltafalllimit_a = rtb_Integrator_1 - ADM_Integrated_Logic_DW.PrevY_a;
|
|
if (rtb_deltafalllimit_a > 0.004) {
|
|
rtb_Vx_Cmd_R = ADM_Integrated_Logic_DW.PrevY_a + 0.004;
|
|
} else if (rtb_deltafalllimit_a < -0.008) {
|
|
rtb_Vx_Cmd_R = ADM_Integrated_Logic_DW.PrevY_a - 0.008;
|
|
} else {
|
|
rtb_Vx_Cmd_R = rtb_Integrator_1;
|
|
}
|
|
|
|
ADM_Integrated_Logic_DW.PrevY_a = rtb_Vx_Cmd_R;
|
|
|
|
/* End of RateLimiter: '<S25>/Input_Vx_RateLimiter' */
|
|
|
|
/* Chart: '<S12>/Chart' incorporates:
|
|
* Constant: '<S12>/Constant'
|
|
* Constant: '<S12>/Constant1'
|
|
* Inport: '<Root>/GV_MCU_RPM'
|
|
*/
|
|
if (ADM_Integrated_Logic_DW.is_active_c6_ADM_Integrated_Log == 0) {
|
|
ADM_Integrated_Logic_DW.is_active_c6_ADM_Integrated_Log = 1U;
|
|
ADM_Integrated_Logic_DW.is_c6_ADM_Integrated_Logic = IN_HAC_OFF;
|
|
} else if (ADM_Integrated_Logic_DW.is_c6_ADM_Integrated_Logic == IN_HAC_OFF) {
|
|
if (ADM_Integrated_Logic_U.GV_MCU_RPM < -50.0) {
|
|
ADM_Integrated_Logic_DW.is_c6_ADM_Integrated_Logic = IN_HAC_ON;
|
|
} else {
|
|
/* Outport: '<Root>/Debug_HAC_RPM_Decision' */
|
|
ADM_Integrated_Logic_Y.Debug_HAC_RPM_Decision = 0.0;
|
|
}
|
|
|
|
/* case IN_HAC_ON: */
|
|
} else if (ADM_Integrated_Logic_U.GV_MCU_RPM > 150.0) {
|
|
ADM_Integrated_Logic_DW.is_c6_ADM_Integrated_Logic = IN_HAC_OFF;
|
|
} else {
|
|
/* Outport: '<Root>/Debug_HAC_RPM_Decision' */
|
|
ADM_Integrated_Logic_Y.Debug_HAC_RPM_Decision = 1.0;
|
|
}
|
|
|
|
/* End of Chart: '<S12>/Chart' */
|
|
|
|
/* MATLAB Function: '<S12>/HAC_OFF_OK_Func' */
|
|
rtb_deltafalllimit_a = 0.0;
|
|
|
|
/* Outport: '<Root>/Debug_HAC_FLAG' incorporates:
|
|
* MATLAB Function: '<S12>/HAC_OFF_OK_Func'
|
|
*/
|
|
ADM_Integrated_Logic_Y.Debug_HAC_FLAG = 0.0;
|
|
|
|
/* MATLAB Function: '<S12>/HAC_OFF_OK_Func' incorporates:
|
|
* Constant: '<S12>/Accel_Cmd '
|
|
* Constant: '<S12>/Brake_Cmd'
|
|
* Constant: '<S12>/Gear_D'
|
|
* Inport: '<Root>/GV_BrakeTorqueCommand'
|
|
* Inport: '<Root>/GV_MCU_EstTrq'
|
|
* Outport: '<Root>/Debug_HAC_RPM_Decision'
|
|
* RelationalOperator: '<S12>/Relational Operator'
|
|
* RelationalOperator: '<S12>/Relational Operator1'
|
|
* RelationalOperator: '<S12>/Relational Operator2'
|
|
* Sum: '<S12>/HAC_Flags_Add'
|
|
*/
|
|
if ((double)(((ADM_Integrated_Logic_U.GV_BrakeTorqueCommand <= 20.0) +
|
|
(rtb_Vx_Cmd_R <= 2.0)) + (rtb_Gain2_j == 3.0)) +
|
|
ADM_Integrated_Logic_Y.Debug_HAC_RPM_Decision >= 4.0) {
|
|
if (ADM_Integrated_Logic_DW.HAC_ON_FLAG == 0.0) {
|
|
ADM_Integrated_Logic_DW.HAC_ON_Timer = 0.0;
|
|
}
|
|
|
|
ADM_Integrated_Logic_DW.HAC_ON_FLAG = 1.0;
|
|
rtb_deltafalllimit_a = 1000.0;
|
|
ADM_Integrated_Logic_DW.Smoothed_Torque = 1000.0;
|
|
if (ADM_Integrated_Logic_DW.HAC_ON_Timer < 3.0) {
|
|
ADM_Integrated_Logic_DW.HAC_Desired_Torque = rtb_Desired_Torque;
|
|
ADM_Integrated_Logic_DW.HAC_ON_Timer += 0.005;
|
|
}
|
|
|
|
/* Outport: '<Root>/Debug_HAC_FLAG' */
|
|
ADM_Integrated_Logic_Y.Debug_HAC_FLAG = 1.0;
|
|
} else if (ADM_Integrated_Logic_DW.HAC_ON_FLAG == 1.0) {
|
|
if (ADM_Integrated_Logic_U.GV_MCU_EstTrq >=
|
|
ADM_Integrated_Logic_DW.HAC_Desired_Torque) {
|
|
ADM_Integrated_Logic_DW.Smoothed_Torque -= 0.05 *
|
|
ADM_Integrated_Logic_DW.Smoothed_Torque;
|
|
if (ADM_Integrated_Logic_DW.Smoothed_Torque < 0.01) {
|
|
ADM_Integrated_Logic_DW.Smoothed_Torque = 0.0;
|
|
ADM_Integrated_Logic_DW.HAC_ON_FLAG = 0.0;
|
|
ADM_Integrated_Logic_DW.HAC_Desired_Torque = 0.0;
|
|
ADM_Integrated_Logic_DW.HAC_ON_Timer = 0.0;
|
|
}
|
|
|
|
rtb_deltafalllimit_a = ADM_Integrated_Logic_DW.Smoothed_Torque;
|
|
} else {
|
|
rtb_deltafalllimit_a = 1000.0;
|
|
ADM_Integrated_Logic_DW.Smoothed_Torque = 1000.0;
|
|
|
|
/* Outport: '<Root>/Debug_HAC_FLAG' */
|
|
ADM_Integrated_Logic_Y.Debug_HAC_FLAG = 1.0;
|
|
}
|
|
}
|
|
|
|
/* MATLAB Function: '<S1>/Emergency_Brake_Func' incorporates:
|
|
* Inport: '<Root>/GV_VCU_AccControlFlag'
|
|
* Inport: '<Root>/GV_Vx_Fbk'
|
|
* Sum: '<S1>/Add'
|
|
* Switch: '<S1>/Switch2'
|
|
*/
|
|
if (rtb_LogicalOperator) {
|
|
rtb_BrakeTorque = ADM_Integrated_Logic_U.GV_Vx_Fbk * 100.0;
|
|
} else {
|
|
if (!(ADM_Integrated_Logic_U.GV_VCU_AccControlFlag > 0.0)) {
|
|
/* Switch: '<S1>/Switch2' */
|
|
rtb_BrakeTorque = rtb_y_k;
|
|
}
|
|
|
|
rtb_BrakeTorque += rtb_deltafalllimit_a;
|
|
}
|
|
|
|
/* Saturate: '<S1>/Brake_Saturation' incorporates:
|
|
* MATLAB Function: '<S1>/Emergency_Brake_Func'
|
|
*/
|
|
if (rtb_BrakeTorque > 2500.0) {
|
|
rtb_BrakeTorque = 2500.0;
|
|
} else if (rtb_BrakeTorque < 0.0) {
|
|
rtb_BrakeTorque = 0.0;
|
|
}
|
|
|
|
/* End of Saturate: '<S1>/Brake_Saturation' */
|
|
|
|
/* Outport: '<Root>/GV_Brake_Command' incorporates:
|
|
* MATLAB Function: '<S1>/IDB_Fault_Injection'
|
|
*/
|
|
ADM_Integrated_Logic_Y.GV_Brake_Command = rtb_BrakeTorque;
|
|
|
|
/* Outport: '<Root>/Target_IDB_Out' incorporates:
|
|
* MATLAB Function: '<S1>/IDB_Fault_Injection'
|
|
*/
|
|
ADM_Integrated_Logic_Y.Target_IDB_Out = rtb_BrakeTorque;
|
|
|
|
/* Outport: '<Root>/Debug_HAC_Brake_Output' */
|
|
ADM_Integrated_Logic_Y.Debug_HAC_Brake_Output = rtb_deltafalllimit_a;
|
|
|
|
/* MATLAB Function: '<S7>/Target_RPM' */
|
|
if (rtb_Gain2_j == 0.0) {
|
|
i = 0;
|
|
} else if (rtb_Gain2_j == 2.0) {
|
|
i = 0;
|
|
} else if (rtb_Gain2_j == 1.0) {
|
|
i = -1;
|
|
} else {
|
|
i = (rtb_Gain2_j == 3.0);
|
|
}
|
|
|
|
rtb_BrakeTorque = rtb_Vx_Cmd_R * 1000.0 / 3600.0 * 11.93 * 60.0 /
|
|
1.7013672006633955 * (double)i;
|
|
|
|
/* End of MATLAB Function: '<S7>/Target_RPM' */
|
|
|
|
/* RateLimiter: '<S7>/TargetSpd_RateLimiter' */
|
|
rtb_deltafalllimit_a = rtb_BrakeTorque - ADM_Integrated_Logic_DW.PrevY_ak;
|
|
if (rtb_deltafalllimit_a > 0.4) {
|
|
rtb_BrakeTorque = ADM_Integrated_Logic_DW.PrevY_ak + 0.4;
|
|
} else if (rtb_deltafalllimit_a < -0.8) {
|
|
rtb_BrakeTorque = ADM_Integrated_Logic_DW.PrevY_ak - 0.8;
|
|
}
|
|
|
|
ADM_Integrated_Logic_DW.PrevY_ak = rtb_BrakeTorque;
|
|
|
|
/* End of RateLimiter: '<S7>/TargetSpd_RateLimiter' */
|
|
|
|
/* Product: '<S35>/Product1' incorporates:
|
|
* Constant: '<S35>/Constant'
|
|
* Gain: '<S35>/gain'
|
|
* Product: '<S35>/Product11'
|
|
* Sum: '<S35>/Sum1'
|
|
* Sum: '<S35>/Sum2'
|
|
* Sum: '<S35>/Sum3'
|
|
* Sum: '<S35>/Sum4'
|
|
* UnitDelay: '<S35>/d'
|
|
* UnitDelay: '<S35>/d1'
|
|
*/
|
|
rtb_deltafalllimit_a = ((rtb_BrakeTorque + ADM_Integrated_Logic_DW.d1_DSTATE_c)
|
|
* 0.002 + 0.1041032953945969 * ADM_Integrated_Logic_DW.d_DSTATE_l) /
|
|
0.1081032953945969;
|
|
|
|
/* Sum: '<S45>/Sum1' incorporates:
|
|
* Gain: '<S45>/gain'
|
|
* Sum: '<S45>/Sum2'
|
|
* UnitDelay: '<S45>/d'
|
|
* UnitDelay: '<S45>/d1'
|
|
*/
|
|
rtb_Sum1_i2 = (rtb_deltafalllimit_a - ADM_Integrated_Logic_DW.d_DSTATE_i) *
|
|
1000.0 - ADM_Integrated_Logic_DW.d1_DSTATE_p;
|
|
|
|
/* Sum: '<S46>/Sum1' incorporates:
|
|
* Gain: '<S46>/gain'
|
|
* Sum: '<S46>/Sum2'
|
|
* UnitDelay: '<S46>/d'
|
|
* UnitDelay: '<S46>/d1'
|
|
*/
|
|
rtb_Sum1_o1 = (rtb_Sum1_i2 - ADM_Integrated_Logic_DW.d_DSTATE_c) * 1000.0 -
|
|
ADM_Integrated_Logic_DW.d1_DSTATE_h;
|
|
|
|
/* Sum: '<S47>/Sum1' incorporates:
|
|
* Gain: '<S47>/gain'
|
|
* Sum: '<S47>/Sum2'
|
|
* UnitDelay: '<S47>/d'
|
|
* UnitDelay: '<S47>/d1'
|
|
*/
|
|
rtb_Sum1_lm = (rtb_Sum1_o1 - ADM_Integrated_Logic_DW.d_DSTATE_d) * 1000.0 -
|
|
ADM_Integrated_Logic_DW.d1_DSTATE_l;
|
|
|
|
/* Gain: '<S43>/Gain' incorporates:
|
|
* Constant: '<S43>/Constant3'
|
|
* Constant: '<S43>/Constant4'
|
|
* Constant: '<S43>/Constant5'
|
|
* Product: '<S43>/Product'
|
|
* Product: '<S43>/Product1'
|
|
* Product: '<S43>/Product2'
|
|
* Sum: '<S43>/Add5'
|
|
*/
|
|
rtb_Gain_c = (((156.8 * rtb_deltafalllimit_a + 212.8 * rtb_Sum1_i2) + 21.8 *
|
|
rtb_Sum1_o1) + rtb_Sum1_lm) * 9.44822373393802E-6;
|
|
|
|
/* Product: '<S49>/Product1' incorporates:
|
|
* Constant: '<S49>/Constant1'
|
|
* Constant: '<S49>/Constant2'
|
|
* Delay: '<S49>/Delay'
|
|
* Delay: '<S49>/Delay1'
|
|
* Delay: '<S49>/Delay2'
|
|
* Delay: '<S49>/Delay3'
|
|
* Gain: '<S49>/gain1'
|
|
* Gain: '<S49>/gain3'
|
|
* Product: '<S49>/x(n), x(n-1), x(n-2)'
|
|
* Product: '<S49>/y(n-1)'
|
|
* Product: '<S49>/y(n-2)'
|
|
* Sum: '<S49>/Sum1'
|
|
* Sum: '<S49>/Sum2'
|
|
* Sum: '<S49>/Sum3'
|
|
* Sum: '<S49>/Sum4'
|
|
* Sum: '<S49>/Sum5'
|
|
* Sum: '<S49>/Sum6'
|
|
*/
|
|
rtb_Product1_pd = ((((2.0 * ADM_Integrated_Logic_DW.Delay1_DSTATE + rtb_Gain_c)
|
|
+ ADM_Integrated_Logic_DW.Delay_DSTATE_c[0]) *
|
|
0.39478417604357435 - -7.2104316479128512 *
|
|
ADM_Integrated_Logic_DW.Delay2_DSTATE) -
|
|
2.6178993711731877 * ADM_Integrated_Logic_DW.Delay3_DSTATE
|
|
[0]) / 6.1716689809139611;
|
|
|
|
/* Product: '<S48>/Product1' incorporates:
|
|
* Constant: '<S48>/Constant'
|
|
* Gain: '<S48>/gain'
|
|
* Product: '<S48>/Product11'
|
|
* Sum: '<S48>/Sum1'
|
|
* Sum: '<S48>/Sum2'
|
|
* Sum: '<S48>/Sum3'
|
|
* Sum: '<S48>/Sum4'
|
|
* UnitDelay: '<S48>/d'
|
|
* UnitDelay: '<S48>/d1'
|
|
*/
|
|
rtb_Product1_m = ((rtb_Product1_pd + ADM_Integrated_Logic_DW.d1_DSTATE_e) *
|
|
0.002 + 0.00861032953945969 *
|
|
ADM_Integrated_Logic_DW.d_DSTATE_ij) / 0.01261032953945969;
|
|
|
|
/* Sum: '<S7>/Subtract' incorporates:
|
|
* Inport: '<Root>/GV_MCU_RPM'
|
|
* MultiPortSwitch: '<S42>/Multiport Switch1'
|
|
*/
|
|
rtb_Error_m = rtb_deltafalllimit_a - ADM_Integrated_Logic_U.GV_MCU_RPM;
|
|
|
|
/* Saturate: '<S7>/Error_Saturation' incorporates:
|
|
* MultiPortSwitch: '<S42>/Multiport Switch1'
|
|
*/
|
|
if (rtb_Error_m > 2000.0) {
|
|
rtb_Error_m = 2000.0;
|
|
} else if (rtb_Error_m < -2000.0) {
|
|
rtb_Error_m = -2000.0;
|
|
}
|
|
|
|
/* End of Saturate: '<S7>/Error_Saturation' */
|
|
|
|
/* DeadZone: '<S32>/Dead Zone' incorporates:
|
|
* MultiPortSwitch: '<S42>/Multiport Switch1'
|
|
*/
|
|
if (rtb_Error_m > 50.0) {
|
|
rtb_Add_e = rtb_Error_m - 50.0;
|
|
} else if (rtb_Error_m >= -50.0) {
|
|
rtb_Add_e = 0.0;
|
|
} else {
|
|
rtb_Add_e = rtb_Error_m - -50.0;
|
|
}
|
|
|
|
/* Sum: '<S37>/Sum1' incorporates:
|
|
* Gain: '<S37>/gain'
|
|
* Sum: '<S37>/Sum2'
|
|
* UnitDelay: '<S37>/d'
|
|
* UnitDelay: '<S37>/d1'
|
|
*/
|
|
rtb_Error_m = (rtb_deltafalllimit_a - ADM_Integrated_Logic_DW.d_DSTATE_ir) *
|
|
1000.0 - ADM_Integrated_Logic_DW.d1_DSTATE_o;
|
|
|
|
/* Sum: '<S38>/Sum1' incorporates:
|
|
* Gain: '<S38>/gain'
|
|
* Sum: '<S38>/Sum2'
|
|
* UnitDelay: '<S38>/d'
|
|
* UnitDelay: '<S38>/d1'
|
|
*/
|
|
rtb_Sum1_aj = (rtb_Error_m - ADM_Integrated_Logic_DW.d_DSTATE_m) * 1000.0 -
|
|
ADM_Integrated_Logic_DW.d1_DSTATE_hm;
|
|
|
|
/* Sum: '<S39>/Sum1' incorporates:
|
|
* Gain: '<S39>/gain'
|
|
* Sum: '<S39>/Sum2'
|
|
* UnitDelay: '<S39>/d'
|
|
* UnitDelay: '<S39>/d1'
|
|
*/
|
|
rtb_Sum1_p = (rtb_Sum1_aj - ADM_Integrated_Logic_DW.d_DSTATE_mw) * 1000.0 -
|
|
ADM_Integrated_Logic_DW.d1_DSTATE_g;
|
|
|
|
/* Sum: '<S30>/Add3' incorporates:
|
|
* Constant: '<S30>/Constant3'
|
|
* Constant: '<S30>/Constant4'
|
|
* Constant: '<S30>/Constant5'
|
|
* Gain: '<S30>/Gain'
|
|
* Memory: '<S7>/Memory'
|
|
* Product: '<S30>/Product2'
|
|
* Product: '<S30>/Product3'
|
|
* Product: '<S30>/Product4'
|
|
* Sum: '<S30>/Add2'
|
|
*/
|
|
rtb_Add3 = (((156.8 * rtb_deltafalllimit_a + 212.8 * rtb_Error_m) + 21.8 *
|
|
rtb_Sum1_aj) + rtb_Sum1_p) * 9.44822373393802E-6 -
|
|
ADM_Integrated_Logic_DW.Memory_PreviousInput;
|
|
|
|
/* Product: '<S40>/Product1' incorporates:
|
|
* Constant: '<S40>/Constant'
|
|
* Gain: '<S40>/gain'
|
|
* Product: '<S40>/Product11'
|
|
* Sum: '<S40>/Sum1'
|
|
* Sum: '<S40>/Sum2'
|
|
* Sum: '<S40>/Sum3'
|
|
* Sum: '<S40>/Sum4'
|
|
* UnitDelay: '<S40>/d'
|
|
* UnitDelay: '<S40>/d1'
|
|
*/
|
|
rtb_Product1_k3 = ((rtb_Add3 + ADM_Integrated_Logic_DW.d1_DSTATE_ej) * 0.002 +
|
|
0.029830988618379066 * ADM_Integrated_Logic_DW.d_DSTATE_j) /
|
|
0.03383098861837907;
|
|
|
|
/* Product: '<S41>/Product1' incorporates:
|
|
* Constant: '<S41>/Constant1'
|
|
* Constant: '<S41>/Constant2'
|
|
* Delay: '<S41>/Delay'
|
|
* Delay: '<S41>/Delay1'
|
|
* Delay: '<S41>/Delay2'
|
|
* Delay: '<S41>/Delay3'
|
|
* Gain: '<S41>/gain1'
|
|
* Gain: '<S41>/gain3'
|
|
* Product: '<S41>/x(n), x(n-1), x(n-2)'
|
|
* Product: '<S41>/y(n-1)'
|
|
* Product: '<S41>/y(n-2)'
|
|
* Sum: '<S41>/Sum1'
|
|
* Sum: '<S41>/Sum2'
|
|
* Sum: '<S41>/Sum3'
|
|
* Sum: '<S41>/Sum4'
|
|
* Sum: '<S41>/Sum5'
|
|
* Sum: '<S41>/Sum6'
|
|
*/
|
|
rtb_Product1_h = ((((2.0 * ADM_Integrated_Logic_DW.Delay1_DSTATE_c +
|
|
rtb_Product1_k3) +
|
|
ADM_Integrated_Logic_DW.Delay_DSTATE_p[0]) *
|
|
0.00035530575843921691 - -7.9992893884831213 *
|
|
ADM_Integrated_Logic_DW.Delay2_DSTATE_n) -
|
|
3.9470487616123275 *
|
|
ADM_Integrated_Logic_DW.Delay3_DSTATE_h[0]) /
|
|
4.0536618499045511;
|
|
|
|
/* MATLAB Function: '<S7>/DOB_Gain' incorporates:
|
|
* Inport: '<Root>/GV_Vx_Fbk'
|
|
*/
|
|
if (ADM_Integrated_Logic_U.GV_Vx_Fbk < 5.0) {
|
|
rtb_Integrator_1 = 0.0;
|
|
} else {
|
|
rtb_Integrator_1 = (ADM_Integrated_Logic_U.GV_Vx_Fbk - 5.0) * 0.2;
|
|
}
|
|
|
|
if (rtb_Integrator_1 >= 1.0) {
|
|
rtb_Integrator_1 = 1.0;
|
|
}
|
|
|
|
/* End of MATLAB Function: '<S7>/DOB_Gain' */
|
|
|
|
/* Product: '<S7>/Product1' incorporates:
|
|
* Constant: '<S7>/DOBFlag'
|
|
* Product: '<S7>/Product'
|
|
*/
|
|
rtb_Switch2 = -(rtb_Product1_h * 0.9);
|
|
|
|
/* Saturate: '<S7>/DOB_Saturation' */
|
|
if (rtb_Switch2 > 30.0) {
|
|
rtb_Switch2 = 30.0;
|
|
} else if (rtb_Switch2 < -30.0) {
|
|
rtb_Switch2 = -30.0;
|
|
}
|
|
|
|
/* Sum: '<S7>/Subtract2' incorporates:
|
|
* DeadZone: '<S32>/Dead Zone'
|
|
* MultiPortSwitch: '<S42>/Multiport Switch1'
|
|
* Product: '<S44>/Product'
|
|
* Product: '<S7>/Multiply1'
|
|
* Saturate: '<S7>/DOB_Saturation'
|
|
* Sum: '<S32>/Add'
|
|
*/
|
|
rtb_Add_e = (rtb_Add_e * 0.044648264844923756 + rtb_Product1_m) + rtb_Switch2 *
|
|
rtb_Integrator_1;
|
|
|
|
/* Saturate: '<S7>/Torq_Saturation' */
|
|
if (rtb_Add_e > 80.0) {
|
|
rtb_Add_e = 80.0;
|
|
} else if (rtb_Add_e < -80.0) {
|
|
rtb_Add_e = -80.0;
|
|
}
|
|
|
|
/* End of Saturate: '<S7>/Torq_Saturation' */
|
|
|
|
/* Switch: '<S1>/Switch1' incorporates:
|
|
* Constant: '<S2>/Constant'
|
|
* Inport: '<Root>/GV_VCU_AccControlFlag'
|
|
* MATLAB Function: '<S7>/Gear_pos_out'
|
|
* Product: '<S2>/Product1'
|
|
* Product: '<S7>/Multiply'
|
|
*/
|
|
if (ADM_Integrated_Logic_U.GV_VCU_AccControlFlag > 0.0) {
|
|
rtb_Integrator_1 = rtb_MotorTorque * 0.270798;
|
|
} else {
|
|
if (rtb_Gain2_j == 0.0) {
|
|
/* MATLAB Function: '<S7>/Gear_pos_out' */
|
|
i = 0;
|
|
} else if (rtb_Gain2_j == 2.0) {
|
|
/* MATLAB Function: '<S7>/Gear_pos_out' */
|
|
i = 0;
|
|
} else if (rtb_Gain2_j == 1.0) {
|
|
/* MATLAB Function: '<S7>/Gear_pos_out' */
|
|
i = -1;
|
|
} else {
|
|
/* MATLAB Function: '<S7>/Gear_pos_out' */
|
|
i = (rtb_Gain2_j == 3.0);
|
|
}
|
|
|
|
rtb_Integrator_1 = (double)i * rtb_Add_e;
|
|
}
|
|
|
|
/* End of Switch: '<S1>/Switch1' */
|
|
|
|
/* MATLAB Function: '<S1>/Emergency_Motor_Func' incorporates:
|
|
* Inport: '<Root>/GV_IDB_ECU_Fault_Flag'
|
|
* Inport: '<Root>/GV_RCU_ECU_Fault_Flag'
|
|
* Inport: '<Root>/GV_Vx_Fbk'
|
|
* Saturate: '<S1>/Saturation'
|
|
*/
|
|
if (rtb_LogicalOperator) {
|
|
if ((ADM_Integrated_Logic_U.GV_IDB_ECU_Fault_Flag == 1.0) &&
|
|
(ADM_Integrated_Logic_U.GV_RCU_ECU_Fault_Flag == 1.0)) {
|
|
if (ADM_Integrated_Logic_U.GV_Vx_Fbk / 3.6 > 0.5) {
|
|
rtb_MotorTorque = -80.0;
|
|
} else {
|
|
rtb_MotorTorque = 0.0;
|
|
}
|
|
} else {
|
|
rtb_MotorTorque = 0.0;
|
|
}
|
|
} else if (rtb_Integrator_1 > 80.0) {
|
|
/* Saturate: '<S1>/Saturation' */
|
|
rtb_MotorTorque = 80.0;
|
|
} else if (rtb_Integrator_1 < 0.0) {
|
|
/* Saturate: '<S1>/Saturation' */
|
|
rtb_MotorTorque = 0.0;
|
|
} else {
|
|
/* Saturate: '<S1>/Saturation' */
|
|
rtb_MotorTorque = rtb_Integrator_1;
|
|
}
|
|
|
|
/* End of MATLAB Function: '<S1>/Emergency_Motor_Func' */
|
|
|
|
/* MATLAB Function: '<S1>/MCU_Fault_Injection' incorporates:
|
|
* Inport: '<Root>/GV_MCU_Actuator_Fault_Flag'
|
|
*/
|
|
if (ADM_Integrated_Logic_U.GV_MCU_Actuator_Fault_Flag == 1.0) {
|
|
/* Outport: '<Root>/GV_Motor_Torque_Cmd' */
|
|
ADM_Integrated_Logic_Y.GV_Motor_Torque_Cmd = 0.0;
|
|
} else {
|
|
/* Outport: '<Root>/GV_Motor_Torque_Cmd' */
|
|
ADM_Integrated_Logic_Y.GV_Motor_Torque_Cmd = rtb_MotorTorque;
|
|
}
|
|
|
|
/* Outport: '<Root>/Target_MCU_Out' incorporates:
|
|
* MATLAB Function: '<S1>/MCU_Fault_Injection'
|
|
*/
|
|
ADM_Integrated_Logic_Y.Target_MCU_Out = rtb_MotorTorque;
|
|
|
|
/* Sum: '<S1>/Add2' incorporates:
|
|
* Inport: '<Root>/GV_Vx_Fbk'
|
|
*/
|
|
rtb_MotorTorque = rtb_Vx_Cmd_R - ADM_Integrated_Logic_U.GV_Vx_Fbk;
|
|
|
|
/* Outport: '<Root>/GV_Hill_Torque_Assist' */
|
|
ADM_Integrated_Logic_Y.GV_Hill_Torque_Assist = rtb_Desired_Torque;
|
|
|
|
/* Outport: '<Root>/Debug_HAC_Pitch_angle' */
|
|
ADM_Integrated_Logic_Y.Debug_HAC_Pitch_angle = rtb_Pitch_Saturation;
|
|
|
|
/* MATLAB Function: '<S55>/Calculate_F_c1' incorporates:
|
|
* Gain: '<S55>/Gain3'
|
|
*/
|
|
ADM_Integrated_Lo_Calculate_F_c(ADM_Integrated_Logic_ConstB.W_Value_for_Brake,
|
|
0.017453292519943295 * rtb_Pitch_Saturation, &rtb_Desired_Torque);
|
|
|
|
/* Product: '<S56>/Product1' incorporates:
|
|
* Constant: '<S56>/Constant'
|
|
* Gain: '<S56>/gain'
|
|
* Inport: '<Root>/GV_IMU_AX_Val'
|
|
* Product: '<S56>/Product11'
|
|
* Sum: '<S56>/Sum1'
|
|
* Sum: '<S56>/Sum2'
|
|
* Sum: '<S56>/Sum3'
|
|
* Sum: '<S56>/Sum4'
|
|
* UnitDelay: '<S56>/d'
|
|
* UnitDelay: '<S56>/d1'
|
|
*/
|
|
rtb_Desired_Torque = ((ADM_Integrated_Logic_U.GV_IMU_AX_Val +
|
|
ADM_Integrated_Logic_DW.d1_DSTATE_ob) * 0.002 + 0.061661977236758134 *
|
|
ADM_Integrated_Logic_DW.d_DSTATE_e) /
|
|
0.065661977236758137;
|
|
|
|
/* Product: '<S57>/Product1' incorporates:
|
|
* Constant: '<S57>/Constant'
|
|
* Gain: '<S57>/gain'
|
|
* Inport: '<Root>/GV_IMU_AY_Val'
|
|
* Product: '<S57>/Product11'
|
|
* Sum: '<S57>/Sum1'
|
|
* Sum: '<S57>/Sum2'
|
|
* Sum: '<S57>/Sum3'
|
|
* Sum: '<S57>/Sum4'
|
|
* UnitDelay: '<S57>/d'
|
|
* UnitDelay: '<S57>/d1'
|
|
*/
|
|
rtb_Vx_Cmd_R = ((ADM_Integrated_Logic_U.GV_IMU_AY_Val +
|
|
ADM_Integrated_Logic_DW.d1_DSTATE_i) * 0.002 +
|
|
0.061661977236758134 * ADM_Integrated_Logic_DW.d_DSTATE_p) /
|
|
0.065661977236758137;
|
|
|
|
/* Product: '<S58>/Product1' incorporates:
|
|
* Constant: '<S58>/Constant'
|
|
* Gain: '<S58>/gain'
|
|
* Inport: '<Root>/GV_IMU_AZ_Val'
|
|
* Product: '<S58>/Product11'
|
|
* Sum: '<S58>/Sum1'
|
|
* Sum: '<S58>/Sum2'
|
|
* Sum: '<S58>/Sum3'
|
|
* Sum: '<S58>/Sum4'
|
|
* UnitDelay: '<S58>/d'
|
|
* UnitDelay: '<S58>/d1'
|
|
*/
|
|
rtb_Integrator_1 = ((ADM_Integrated_Logic_U.GV_IMU_AZ_Val +
|
|
ADM_Integrated_Logic_DW.d1_DSTATE_o1) * 0.002 +
|
|
0.061661977236758134 * ADM_Integrated_Logic_DW.d_DSTATE_n)
|
|
/ 0.065661977236758137;
|
|
|
|
/* MATLAB Function: '<S12>/Pitch_calculate' */
|
|
rtb_Switch2 = sqrt(rtb_Vx_Cmd_R * rtb_Vx_Cmd_R + rtb_Integrator_1 *
|
|
rtb_Integrator_1);
|
|
if (!(rtb_Switch2 == 0.0)) {
|
|
rtb_Switch2 = atan(rtb_Desired_Torque / rtb_Switch2);
|
|
}
|
|
|
|
/* Sum: '<S12>/Sum' incorporates:
|
|
* DiscreteIntegrator: '<S12>/Integrator_2'
|
|
* MATLAB Function: '<S12>/Pitch_calculate'
|
|
*/
|
|
rtb_Sum = ADM_Integrated_Logic_DW.Integrator_2_DSTATE - rtb_Switch2 *
|
|
57.295779513082323;
|
|
|
|
/* Product: '<S59>/Product1' incorporates:
|
|
* Constant: '<S59>/Constant'
|
|
* Gain: '<S59>/gain'
|
|
* Inport: '<Root>/GV_IMU_PitchRtVal'
|
|
* Product: '<S59>/Product11'
|
|
* Sum: '<S59>/Sum1'
|
|
* Sum: '<S59>/Sum2'
|
|
* Sum: '<S59>/Sum3'
|
|
* Sum: '<S59>/Sum4'
|
|
* UnitDelay: '<S59>/d'
|
|
* UnitDelay: '<S59>/d1'
|
|
*/
|
|
rtb_Product1_gg = ((ADM_Integrated_Logic_U.GV_IMU_PitchRtVal +
|
|
ADM_Integrated_Logic_DW.d1_DSTATE_a) * 0.002 +
|
|
0.061661977236758134 * ADM_Integrated_Logic_DW.d_DSTATE_d1)
|
|
/ 0.065661977236758137;
|
|
|
|
/* Outport: '<Root>/Debug_CC_Brake_Output' */
|
|
ADM_Integrated_Logic_Y.Debug_CC_Brake_Output = rtb_y_k;
|
|
|
|
/* Outport: '<Root>/GV_Gear_Postion_Out' */
|
|
ADM_Integrated_Logic_Y.GV_Gear_Postion_Out = rtb_Gain2_j;
|
|
|
|
/* Sum: '<S1>/Add1' incorporates:
|
|
* Constant: '<S1>/Constant'
|
|
* Gain: '<S1>/Gain1'
|
|
* Inport: '<Root>/GV_Vx_Fbk'
|
|
* Sum: '<S1>/Add3'
|
|
*/
|
|
rtb_Add1_tmp = 400.0 - 6.5 * ADM_Integrated_Logic_U.GV_Vx_Fbk;
|
|
|
|
/* MATLAB Function: '<S1>/MATLAB Function1' incorporates:
|
|
* Sum: '<S1>/Add1'
|
|
*/
|
|
ADM_Integrated__MATLABFunction1(rtb_Add1_tmp, &rtb_y);
|
|
|
|
/* Product: '<S23>/delta rise limit' incorporates:
|
|
* SampleTimeMath: '<S23>/sample time'
|
|
*
|
|
* About '<S23>/sample time':
|
|
* y = K where K = ( w * Ts )
|
|
* */
|
|
rtb_Switch2 = rtb_y * 0.002;
|
|
|
|
/* Delay: '<S23>/Delay' incorporates:
|
|
* Inport: '<Root>/GV_RWA_RackAngleCommand'
|
|
*/
|
|
if (ADM_Integrated_Logic_DW.icLoad_l) {
|
|
ADM_Integrated_Logic_DW.Delay_DSTATE_c4 =
|
|
ADM_Integrated_Logic_U.GV_RWA_RackAngleCommand;
|
|
}
|
|
|
|
/* Sum: '<S23>/Difference Inputs1' incorporates:
|
|
* Delay: '<S23>/Delay'
|
|
* Inport: '<Root>/GV_RWA_RackAngleCommand'
|
|
*
|
|
* Block description for '<S23>/Difference Inputs1':
|
|
*
|
|
* Add in CPU
|
|
*/
|
|
rtb_y_k = ADM_Integrated_Logic_U.GV_RWA_RackAngleCommand -
|
|
ADM_Integrated_Logic_DW.Delay_DSTATE_c4;
|
|
|
|
/* MATLAB Function: '<S1>/MATLAB Function2' incorporates:
|
|
* Gain: '<S1>/Gain3'
|
|
* Sum: '<S1>/Add1'
|
|
*/
|
|
ADM_Integrated__MATLABFunction2(-rtb_Add1_tmp, &rtb_y);
|
|
|
|
/* Switch: '<S68>/Switch2' incorporates:
|
|
* RelationalOperator: '<S68>/LowerRelop1'
|
|
*/
|
|
if (!(rtb_y_k > rtb_Switch2)) {
|
|
/* Product: '<S23>/delta fall limit' incorporates:
|
|
* SampleTimeMath: '<S23>/sample time'
|
|
*
|
|
* About '<S23>/sample time':
|
|
* y = K where K = ( w * Ts )
|
|
* */
|
|
rtb_Switch2 = 0.002 * rtb_y;
|
|
|
|
/* Switch: '<S68>/Switch' incorporates:
|
|
* RelationalOperator: '<S68>/UpperRelop'
|
|
*/
|
|
if (!(rtb_y_k < rtb_Switch2)) {
|
|
rtb_Switch2 = rtb_y_k;
|
|
}
|
|
|
|
/* End of Switch: '<S68>/Switch' */
|
|
}
|
|
|
|
/* End of Switch: '<S68>/Switch2' */
|
|
|
|
/* Sum: '<S23>/Difference Inputs2' incorporates:
|
|
* Delay: '<S23>/Delay'
|
|
*
|
|
* Block description for '<S23>/Difference Inputs2':
|
|
*
|
|
* Add in CPU
|
|
*/
|
|
rtb_Add1 = rtb_Switch2 + ADM_Integrated_Logic_DW.Delay_DSTATE_c4;
|
|
|
|
/* Outport: '<Root>/GV_Master_Rack_Angle_Cmd' incorporates:
|
|
* MATLAB Function: '<S1>/RWA_Actuator_Fault_Injection'
|
|
*/
|
|
ADM_Integrated_Logic_Y.GV_Master_Rack_Angle_Cmd = rtb_Add1;
|
|
|
|
/* Outport: '<Root>/Target_RWA_Out' incorporates:
|
|
* MATLAB Function: '<S1>/RWA_Actuator_Fault_Injection'
|
|
*/
|
|
ADM_Integrated_Logic_Y.Target_RWA_Out = rtb_Add1;
|
|
|
|
/* MATLAB Function: '<S1>/MATLAB Function5' */
|
|
ADM_Integrated__MATLABFunction1(rtb_Add1_tmp, &rtb_Switch2);
|
|
|
|
/* Product: '<S24>/delta rise limit' incorporates:
|
|
* SampleTimeMath: '<S24>/sample time'
|
|
*
|
|
* About '<S24>/sample time':
|
|
* y = K where K = ( w * Ts )
|
|
* */
|
|
rtb_Switch2 *= 0.002;
|
|
|
|
/* Delay: '<S24>/Delay' incorporates:
|
|
* Inport: '<Root>/GV_RWS_RackAngleCommand'
|
|
*/
|
|
if (ADM_Integrated_Logic_DW.icLoad_d) {
|
|
ADM_Integrated_Logic_DW.Delay_DSTATE_i1 =
|
|
ADM_Integrated_Logic_U.GV_RWS_RackAngleCommand;
|
|
}
|
|
|
|
/* Sum: '<S24>/Difference Inputs1' incorporates:
|
|
* Delay: '<S24>/Delay'
|
|
* Inport: '<Root>/GV_RWS_RackAngleCommand'
|
|
*
|
|
* Block description for '<S24>/Difference Inputs1':
|
|
*
|
|
* Add in CPU
|
|
*/
|
|
rtb_y = ADM_Integrated_Logic_U.GV_RWS_RackAngleCommand -
|
|
ADM_Integrated_Logic_DW.Delay_DSTATE_i1;
|
|
|
|
/* MATLAB Function: '<S1>/MATLAB Function6' incorporates:
|
|
* Gain: '<S1>/Gain5'
|
|
*/
|
|
ADM_Integrated__MATLABFunction2(-rtb_Add1_tmp, &rtb_y_k);
|
|
|
|
/* Switch: '<S69>/Switch2' incorporates:
|
|
* RelationalOperator: '<S69>/LowerRelop1'
|
|
*/
|
|
if (!(rtb_y > rtb_Switch2)) {
|
|
/* Product: '<S24>/delta fall limit' incorporates:
|
|
* SampleTimeMath: '<S24>/sample time'
|
|
*
|
|
* About '<S24>/sample time':
|
|
* y = K where K = ( w * Ts )
|
|
* */
|
|
rtb_y_k *= 0.002;
|
|
|
|
/* Switch: '<S69>/Switch' incorporates:
|
|
* RelationalOperator: '<S69>/UpperRelop'
|
|
*/
|
|
if (rtb_y < rtb_y_k) {
|
|
rtb_Switch2 = rtb_y_k;
|
|
} else {
|
|
rtb_Switch2 = rtb_y;
|
|
}
|
|
|
|
/* End of Switch: '<S69>/Switch' */
|
|
}
|
|
|
|
/* End of Switch: '<S69>/Switch2' */
|
|
|
|
/* Sum: '<S24>/Difference Inputs2' incorporates:
|
|
* Delay: '<S24>/Delay'
|
|
*
|
|
* Block description for '<S24>/Difference Inputs2':
|
|
*
|
|
* Add in CPU
|
|
*/
|
|
rtb_y_k = rtb_Switch2 + ADM_Integrated_Logic_DW.Delay_DSTATE_i1;
|
|
|
|
/* Outport: '<Root>/GV_RWS_RackAngleCmd1' */
|
|
ADM_Integrated_Logic_Y.GV_RWS_RackAngleCmd1 = rtb_y_k;
|
|
|
|
/* Outport: '<Root>/Act_Fault_Exist' incorporates:
|
|
* MATLAB Function: '<S1>/Actuator_Fault_Decision'
|
|
*/
|
|
ADM_Integrated_Logic_Y.Act_Fault_Exist = 0.0;
|
|
|
|
/* MATLAB Function: '<S1>/Actuator_Fault_Decision' incorporates:
|
|
* Inport: '<Root>/GV_ACU_ECU_Fault_Flag'
|
|
* Inport: '<Root>/GV_ACU_ECU_Fault_Flag1'
|
|
* Inport: '<Root>/GV_ACU_ECU_Fault_Flag2'
|
|
* Inport: '<Root>/GV_ACU_ECU_Fault_Flag3'
|
|
* Inport: '<Root>/GV_ACU_Fault_Flag'
|
|
* Inport: '<Root>/GV_Drive_Mode'
|
|
* Inport: '<Root>/GV_IDB_ECU_Fault_Flag'
|
|
* Inport: '<Root>/GV_MCU_Actuator_Fault_Flag'
|
|
* Inport: '<Root>/GV_RCU_ECU_Fault_Flag'
|
|
* Inport: '<Root>/GV_RWA1_ECU_Fault_Flag'
|
|
* Inport: '<Root>/GV_RWA2_ECU_Fault_Flag'
|
|
* Inport: '<Root>/GV_RWA_Actuator_Fault'
|
|
*/
|
|
if ((ADM_Integrated_Logic_U.GV_ACU_Fault_Flag == 1.0) ||
|
|
(ADM_Integrated_Logic_U.GV_MCU_Actuator_Fault_Flag == 1.0) ||
|
|
(ADM_Integrated_Logic_U.GV_RWA_Actuator_Fault == 1.0)) {
|
|
/* Outport: '<Root>/Act_Fault_Exist' */
|
|
ADM_Integrated_Logic_Y.Act_Fault_Exist = 1.0;
|
|
}
|
|
|
|
if (((ADM_Integrated_Logic_U.GV_ACU_ECU_Fault_Flag == 1.0) ||
|
|
(ADM_Integrated_Logic_U.GV_ACU_ECU_Fault_Flag1 == 1.0) ||
|
|
(ADM_Integrated_Logic_U.GV_ACU_ECU_Fault_Flag2 == 1.0) ||
|
|
(ADM_Integrated_Logic_U.GV_ACU_ECU_Fault_Flag3 == 1.0)) &&
|
|
((ADM_Integrated_Logic_U.GV_Drive_Mode == 0.0) ||
|
|
(ADM_Integrated_Logic_U.GV_Drive_Mode == 2.0))) {
|
|
/* Outport: '<Root>/Act_Fault_Exist' */
|
|
ADM_Integrated_Logic_Y.Act_Fault_Exist = 1.0;
|
|
}
|
|
|
|
if ((ADM_Integrated_Logic_U.GV_IDB_ECU_Fault_Flag == 1.0) ||
|
|
(ADM_Integrated_Logic_U.GV_RCU_ECU_Fault_Flag == 1.0)) {
|
|
/* Outport: '<Root>/Act_Fault_Exist' */
|
|
ADM_Integrated_Logic_Y.Act_Fault_Exist = 1.0;
|
|
} else if ((ADM_Integrated_Logic_U.GV_RWA1_ECU_Fault_Flag == 1.0) &&
|
|
(ADM_Integrated_Logic_U.GV_RWA2_ECU_Fault_Flag == 1.0)) {
|
|
/* Outport: '<Root>/Act_Fault_Exist' */
|
|
ADM_Integrated_Logic_Y.Act_Fault_Exist = 1.0;
|
|
}
|
|
|
|
/* Update for UnitDelay: '<S14>/d1' incorporates:
|
|
* Inport: '<Root>/GV_IMU_AX_Val'
|
|
*/
|
|
ADM_Integrated_Logic_DW.d1_DSTATE = ADM_Integrated_Logic_U.GV_IMU_AX_Val;
|
|
|
|
/* Update for UnitDelay: '<S14>/d' */
|
|
ADM_Integrated_Logic_DW.d_DSTATE = rtb_Product1;
|
|
|
|
/* Update for DiscreteIntegrator: '<S26>/Discrete-Time Integrator' */
|
|
ADM_Integrated_Logic_DW.DiscreteTimeIntegrator_DSTATE += 0.002 *
|
|
rtb_EstMassOut;
|
|
|
|
/* Update for UnitDelay: '<S29>/UD'
|
|
*
|
|
* Block description for '<S29>/UD':
|
|
*
|
|
* Store in Global RAM
|
|
*/
|
|
ADM_Integrated_Logic_DW.UD_DSTATE = rtb_Gain;
|
|
|
|
/* Update for Delay: '<S11>/Memory' */
|
|
ADM_Integrated_Logic_DW.Memory_DSTATE = rtb_Gain2_j;
|
|
|
|
/* Update for DiscreteTransferFcn: '<S1>/Discrete Transfer Fcn' */
|
|
ADM_Integrated_Logic_DW.DiscreteTransferFcn_states = rtb_MotorTorque - -0.9375
|
|
* ADM_Integrated_Logic_DW.DiscreteTransferFcn_states;
|
|
|
|
/* Update for DiscreteIntegrator: '<S12>/Integrator_2' incorporates:
|
|
* Constant: '<S12>/I_gain'
|
|
* Constant: '<S12>/P_gain'
|
|
* DiscreteIntegrator: '<S12>/Integrator_1'
|
|
* Product: '<S12>/Product'
|
|
* Product: '<S12>/Product1'
|
|
* Sum: '<S12>/Sum1'
|
|
* Sum: '<S12>/Sum2'
|
|
*/
|
|
ADM_Integrated_Logic_DW.Integrator_2_DSTATE += (rtb_Product1_gg -
|
|
(ADM_Integrated_Logic_DW.Integrator_1_DSTATE * 5.0 + rtb_Sum * 100.0)) *
|
|
0.002;
|
|
|
|
/* Update for Delay: '<S62>/Delay' */
|
|
ADM_Integrated_Logic_DW.icLoad = false;
|
|
ADM_Integrated_Logic_DW.Delay_DSTATE = rtb_Pitch_Saturation;
|
|
|
|
/* Update for Delay: '<S61>/Delay' */
|
|
ADM_Integrated_Logic_DW.icLoad_e = false;
|
|
ADM_Integrated_Logic_DW.Delay_DSTATE_i = rtb_deltafalllimit_m;
|
|
|
|
/* Update for UnitDelay: '<S35>/d1' */
|
|
ADM_Integrated_Logic_DW.d1_DSTATE_c = rtb_BrakeTorque;
|
|
|
|
/* Update for UnitDelay: '<S35>/d' */
|
|
ADM_Integrated_Logic_DW.d_DSTATE_l = rtb_deltafalllimit_a;
|
|
|
|
/* Update for UnitDelay: '<S45>/d' */
|
|
ADM_Integrated_Logic_DW.d_DSTATE_i = rtb_deltafalllimit_a;
|
|
|
|
/* Update for UnitDelay: '<S45>/d1' */
|
|
ADM_Integrated_Logic_DW.d1_DSTATE_p = rtb_Sum1_i2;
|
|
|
|
/* Update for UnitDelay: '<S46>/d' */
|
|
ADM_Integrated_Logic_DW.d_DSTATE_c = rtb_Sum1_i2;
|
|
|
|
/* Update for UnitDelay: '<S46>/d1' */
|
|
ADM_Integrated_Logic_DW.d1_DSTATE_h = rtb_Sum1_o1;
|
|
|
|
/* Update for UnitDelay: '<S47>/d' */
|
|
ADM_Integrated_Logic_DW.d_DSTATE_d = rtb_Sum1_o1;
|
|
|
|
/* Update for UnitDelay: '<S47>/d1' */
|
|
ADM_Integrated_Logic_DW.d1_DSTATE_l = rtb_Sum1_lm;
|
|
|
|
/* Update for Delay: '<S49>/Delay1' */
|
|
ADM_Integrated_Logic_DW.Delay1_DSTATE = rtb_Gain_c;
|
|
|
|
/* Update for Delay: '<S49>/Delay' */
|
|
ADM_Integrated_Logic_DW.Delay_DSTATE_c[0] =
|
|
ADM_Integrated_Logic_DW.Delay_DSTATE_c[1];
|
|
ADM_Integrated_Logic_DW.Delay_DSTATE_c[1] = rtb_Gain_c;
|
|
|
|
/* Update for Delay: '<S49>/Delay2' */
|
|
ADM_Integrated_Logic_DW.Delay2_DSTATE = rtb_Product1_pd;
|
|
|
|
/* Update for Delay: '<S49>/Delay3' */
|
|
ADM_Integrated_Logic_DW.Delay3_DSTATE[0] =
|
|
ADM_Integrated_Logic_DW.Delay3_DSTATE[1];
|
|
ADM_Integrated_Logic_DW.Delay3_DSTATE[1] = rtb_Product1_pd;
|
|
|
|
/* Update for UnitDelay: '<S48>/d1' */
|
|
ADM_Integrated_Logic_DW.d1_DSTATE_e = rtb_Product1_pd;
|
|
|
|
/* Update for UnitDelay: '<S48>/d' */
|
|
ADM_Integrated_Logic_DW.d_DSTATE_ij = rtb_Product1_m;
|
|
|
|
/* Update for Memory: '<S7>/Memory' */
|
|
ADM_Integrated_Logic_DW.Memory_PreviousInput = rtb_Add_e;
|
|
|
|
/* Update for UnitDelay: '<S37>/d' */
|
|
ADM_Integrated_Logic_DW.d_DSTATE_ir = rtb_deltafalllimit_a;
|
|
|
|
/* Update for UnitDelay: '<S37>/d1' */
|
|
ADM_Integrated_Logic_DW.d1_DSTATE_o = rtb_Error_m;
|
|
|
|
/* Update for UnitDelay: '<S38>/d' */
|
|
ADM_Integrated_Logic_DW.d_DSTATE_m = rtb_Error_m;
|
|
|
|
/* Update for UnitDelay: '<S38>/d1' */
|
|
ADM_Integrated_Logic_DW.d1_DSTATE_hm = rtb_Sum1_aj;
|
|
|
|
/* Update for UnitDelay: '<S39>/d' */
|
|
ADM_Integrated_Logic_DW.d_DSTATE_mw = rtb_Sum1_aj;
|
|
|
|
/* Update for UnitDelay: '<S39>/d1' */
|
|
ADM_Integrated_Logic_DW.d1_DSTATE_g = rtb_Sum1_p;
|
|
|
|
/* Update for UnitDelay: '<S40>/d1' */
|
|
ADM_Integrated_Logic_DW.d1_DSTATE_ej = rtb_Add3;
|
|
|
|
/* Update for UnitDelay: '<S40>/d' */
|
|
ADM_Integrated_Logic_DW.d_DSTATE_j = rtb_Product1_k3;
|
|
|
|
/* Update for Delay: '<S41>/Delay1' */
|
|
ADM_Integrated_Logic_DW.Delay1_DSTATE_c = rtb_Product1_k3;
|
|
|
|
/* Update for Delay: '<S41>/Delay' */
|
|
ADM_Integrated_Logic_DW.Delay_DSTATE_p[0] =
|
|
ADM_Integrated_Logic_DW.Delay_DSTATE_p[1];
|
|
ADM_Integrated_Logic_DW.Delay_DSTATE_p[1] = rtb_Product1_k3;
|
|
|
|
/* Update for Delay: '<S41>/Delay2' */
|
|
ADM_Integrated_Logic_DW.Delay2_DSTATE_n = rtb_Product1_h;
|
|
|
|
/* Update for Delay: '<S41>/Delay3' */
|
|
ADM_Integrated_Logic_DW.Delay3_DSTATE_h[0] =
|
|
ADM_Integrated_Logic_DW.Delay3_DSTATE_h[1];
|
|
ADM_Integrated_Logic_DW.Delay3_DSTATE_h[1] = rtb_Product1_h;
|
|
|
|
/* Update for UnitDelay: '<S56>/d1' incorporates:
|
|
* Inport: '<Root>/GV_IMU_AX_Val'
|
|
*/
|
|
ADM_Integrated_Logic_DW.d1_DSTATE_ob = ADM_Integrated_Logic_U.GV_IMU_AX_Val;
|
|
|
|
/* Update for UnitDelay: '<S56>/d' */
|
|
ADM_Integrated_Logic_DW.d_DSTATE_e = rtb_Desired_Torque;
|
|
|
|
/* Update for UnitDelay: '<S57>/d1' incorporates:
|
|
* Inport: '<Root>/GV_IMU_AY_Val'
|
|
*/
|
|
ADM_Integrated_Logic_DW.d1_DSTATE_i = ADM_Integrated_Logic_U.GV_IMU_AY_Val;
|
|
|
|
/* Update for UnitDelay: '<S57>/d' */
|
|
ADM_Integrated_Logic_DW.d_DSTATE_p = rtb_Vx_Cmd_R;
|
|
|
|
/* Update for UnitDelay: '<S58>/d1' incorporates:
|
|
* Inport: '<Root>/GV_IMU_AZ_Val'
|
|
*/
|
|
ADM_Integrated_Logic_DW.d1_DSTATE_o1 = ADM_Integrated_Logic_U.GV_IMU_AZ_Val;
|
|
|
|
/* Update for UnitDelay: '<S58>/d' */
|
|
ADM_Integrated_Logic_DW.d_DSTATE_n = rtb_Integrator_1;
|
|
|
|
/* Update for DiscreteIntegrator: '<S12>/Integrator_1' */
|
|
ADM_Integrated_Logic_DW.Integrator_1_DSTATE += 0.002 * rtb_Sum;
|
|
|
|
/* Update for UnitDelay: '<S59>/d1' incorporates:
|
|
* Inport: '<Root>/GV_IMU_PitchRtVal'
|
|
*/
|
|
ADM_Integrated_Logic_DW.d1_DSTATE_a = ADM_Integrated_Logic_U.GV_IMU_PitchRtVal;
|
|
|
|
/* Update for UnitDelay: '<S59>/d' */
|
|
ADM_Integrated_Logic_DW.d_DSTATE_d1 = rtb_Product1_gg;
|
|
|
|
/* Update for Delay: '<S23>/Delay' */
|
|
ADM_Integrated_Logic_DW.icLoad_l = false;
|
|
ADM_Integrated_Logic_DW.Delay_DSTATE_c4 = rtb_Add1;
|
|
|
|
/* Update for Delay: '<S24>/Delay' */
|
|
ADM_Integrated_Logic_DW.icLoad_d = false;
|
|
ADM_Integrated_Logic_DW.Delay_DSTATE_i1 = rtb_y_k;
|
|
}
|
|
|
|
/* Model initialize function */
|
|
void ADM_Integrated_Logic_initialize(void)
|
|
{
|
|
/* InitializeConditions for Delay: '<S62>/Delay' */
|
|
ADM_Integrated_Logic_DW.icLoad = true;
|
|
|
|
/* InitializeConditions for Delay: '<S61>/Delay' */
|
|
ADM_Integrated_Logic_DW.icLoad_e = true;
|
|
|
|
/* InitializeConditions for Delay: '<S23>/Delay' */
|
|
ADM_Integrated_Logic_DW.icLoad_l = true;
|
|
|
|
/* InitializeConditions for Delay: '<S24>/Delay' */
|
|
ADM_Integrated_Logic_DW.icLoad_d = true;
|
|
}
|
|
|
|
/*
|
|
* File trailer for generated code.
|
|
*
|
|
* [EOF]
|
|
*/
|