充电逻辑ok
This commit is contained in:
@@ -3,9 +3,9 @@
|
||||
*
|
||||
* Code generated for Simulink model 'control'.
|
||||
*
|
||||
* Model version : 1.178
|
||||
* Model version : 1.214
|
||||
* Simulink Coder version : 24.1 (R2024a) 19-Nov-2023
|
||||
* C/C++ source code generated on : Thu Sep 11 17:14:08 2025
|
||||
* C/C++ source code generated on : Tue Sep 16 10:55:35 2025
|
||||
*
|
||||
* Target selection: ert.tlc
|
||||
* Embedded hardware selection: ARM Compatible->ARM Cortex
|
||||
@@ -20,7 +20,6 @@
|
||||
#include "RunModeEnumType.h"
|
||||
#include "control_private.h"
|
||||
#include "RunstateEnumType.h"
|
||||
#include "BatteryEnumType.h"
|
||||
#include "control_capi.h"
|
||||
|
||||
/* Named constants for Chart: '<Root>/state' */
|
||||
@@ -35,17 +34,42 @@
|
||||
#define control_IN_deinit ((uint8_T)3U)
|
||||
#define control_IN_discharge ((uint8_T)4U)
|
||||
#define control_IN_init ((uint8_T)5U)
|
||||
#define control_IN_setting ((uint8_T)5U)
|
||||
#define control_IN_stop ((uint8_T)6U)
|
||||
#define control_IN_preCCMode ((uint8_T)5U)
|
||||
#define control_IN_setting ((uint8_T)6U)
|
||||
#define control_IN_stop ((uint8_T)7U)
|
||||
#define control_IN_storage ((uint8_T)6U)
|
||||
#define control_IN_waitBuckVol ((uint8_T)7U)
|
||||
#define control_IN_waitBuckup ((uint8_T)8U)
|
||||
#define control_IN_waitPwrVol ((uint8_T)9U)
|
||||
#define control_IN_waitBuckVol ((uint8_T)8U)
|
||||
#define control_IN_waitBuckup ((uint8_T)9U)
|
||||
#define control_IN_waitPwrVol ((uint8_T)10U)
|
||||
|
||||
/* Named constants for Chart: '<S2>/Chart' */
|
||||
#define control_IN_run ((uint8_T)1U)
|
||||
#define control_IN_stop_l ((uint8_T)2U)
|
||||
|
||||
/* Exported block parameters */
|
||||
real_T NormalVol[9] = { 4.35, 4.2, 4.2, 3.65, 4.2, 1.93, 1.0, 1.0, 2.0 } ;/* Variable: NormalVol
|
||||
* Referenced by: '<Root>/Constant'
|
||||
*/
|
||||
|
||||
real32_T current_d = 0.1F; /* Variable: current_d
|
||||
* Referenced by: '<S34>/Derivative Gain'
|
||||
*/
|
||||
real32_T current_i = 0.5F; /* Variable: current_i
|
||||
* Referenced by: '<S38>/Integral Gain'
|
||||
*/
|
||||
real32_T current_p = 5.0F; /* Variable: current_p
|
||||
* Referenced by: '<S46>/Proportional Gain'
|
||||
*/
|
||||
real32_T voltage_d = 0.1F; /* Variable: voltage_d
|
||||
* Referenced by: '<S88>/Derivative Gain'
|
||||
*/
|
||||
real32_T voltage_i = 0.5F; /* Variable: voltage_i
|
||||
* Referenced by: '<S92>/Integral Gain'
|
||||
*/
|
||||
real32_T voltage_p = 5.0F; /* Variable: voltage_p
|
||||
* Referenced by: '<S100>/Proportional Gain'
|
||||
*/
|
||||
|
||||
/* Block signals (default storage) */
|
||||
B_control_T control_B;
|
||||
|
||||
@@ -65,69 +89,6 @@ RT_MODEL_control_T *const control_M = &control_M_;
|
||||
/* Forward declaration for local functions */
|
||||
static real_T control_check_vol(real_T flag, real_T x);
|
||||
static void control_charge(void);
|
||||
void mul_wide_s32(int32_T in0, int32_T in1, uint32_T *ptrOutBitsHi, uint32_T
|
||||
*ptrOutBitsLo)
|
||||
{
|
||||
uint32_T absIn0;
|
||||
uint32_T absIn1;
|
||||
uint32_T in0Hi;
|
||||
uint32_T in0Lo;
|
||||
uint32_T in1Hi;
|
||||
uint32_T productHiLo;
|
||||
uint32_T productLoHi;
|
||||
absIn0 = in0 < 0 ? ~(uint32_T)in0 + 1U : (uint32_T)in0;
|
||||
absIn1 = in1 < 0 ? ~(uint32_T)in1 + 1U : (uint32_T)in1;
|
||||
in0Hi = absIn0 >> 16U;
|
||||
in0Lo = absIn0 & 65535U;
|
||||
in1Hi = absIn1 >> 16U;
|
||||
absIn0 = absIn1 & 65535U;
|
||||
productHiLo = in0Hi * absIn0;
|
||||
productLoHi = in0Lo * in1Hi;
|
||||
absIn0 *= in0Lo;
|
||||
absIn1 = 0U;
|
||||
in0Lo = (productLoHi << /*MW:OvBitwiseOk*/ 16U) + /*MW:OvCarryOk*/ absIn0;
|
||||
if (in0Lo < absIn0) {
|
||||
absIn1 = 1U;
|
||||
}
|
||||
|
||||
absIn0 = in0Lo;
|
||||
in0Lo += /*MW:OvCarryOk*/ productHiLo << /*MW:OvBitwiseOk*/ 16U;
|
||||
if (in0Lo < absIn0) {
|
||||
absIn1++;
|
||||
}
|
||||
|
||||
absIn0 = (((productLoHi >> 16U) + (productHiLo >> 16U)) + in0Hi * in1Hi) +
|
||||
absIn1;
|
||||
if ((in0 != 0) && ((in1 != 0) && ((in0 > 0) != (in1 > 0)))) {
|
||||
absIn0 = ~absIn0;
|
||||
in0Lo = ~in0Lo;
|
||||
in0Lo++;
|
||||
if (in0Lo == 0U) {
|
||||
absIn0++;
|
||||
}
|
||||
}
|
||||
|
||||
*ptrOutBitsHi = absIn0;
|
||||
*ptrOutBitsLo = in0Lo;
|
||||
}
|
||||
|
||||
int32_T mul_s32_sat(int32_T a, int32_T b)
|
||||
{
|
||||
int32_T result;
|
||||
uint32_T u32_chi;
|
||||
uint32_T u32_clo;
|
||||
mul_wide_s32(a, b, &u32_chi, &u32_clo);
|
||||
if (((int32_T)u32_chi > 0) || ((u32_chi == 0U) && (u32_clo >= 2147483648U))) {
|
||||
result = MAX_int32_T;
|
||||
} else if (((int32_T)u32_chi < -1) || (((int32_T)u32_chi == -1) && (u32_clo <
|
||||
2147483648U))) {
|
||||
result = MIN_int32_T;
|
||||
} else {
|
||||
result = (int32_T)u32_clo;
|
||||
}
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
/* Function for Chart: '<Root>/state' */
|
||||
static real_T control_check_vol(real_T flag, real_T x)
|
||||
@@ -184,7 +145,6 @@ static void control_charge(void)
|
||||
{
|
||||
real_T tmp;
|
||||
boolean_T guard1;
|
||||
boolean_T guard2;
|
||||
|
||||
/* Inport generated from: '<Root>/mode' incorporates:
|
||||
* Inport generated from: '<Root>/run_state'
|
||||
@@ -195,183 +155,153 @@ static void control_charge(void)
|
||||
control_DW.is_c3_control = control_IN_deinit;
|
||||
} else {
|
||||
guard1 = false;
|
||||
guard2 = false;
|
||||
switch (control_DW.is_charge) {
|
||||
case control_IN_BalanceMode:
|
||||
if ((control_U.run_state == Stop) || (control_check_vol(0.0, 4.2) != 0.0) ||
|
||||
control_B.cmd_CV_mode = 3U;
|
||||
if ((control_U.run_state == Stop) || (control_U.mode != (uint32_T)Charge) ||
|
||||
(control_check_vol(0.0, NormalVol[control_U.bat_type - 1]) != 0.0) ||
|
||||
(control_DW.temporalCounter_i1 >= 2160000U)) {
|
||||
control_DW.temporalCounter_i1 = 0U;
|
||||
control_DW.is_charge = control_IN_stop;
|
||||
control_B.cmd_CV_mode = 0U;
|
||||
control_B.cmd_buck_in_relay = 0.0;
|
||||
control_B.cmd_buck_out_relay = 0.0;
|
||||
control_B.cmd_pwm_en = 0.0;
|
||||
control_B.cmd_pwm_en = 0U;
|
||||
}
|
||||
break;
|
||||
|
||||
case control_IN_CCMode:
|
||||
if ((control_check_vol(1.0, 4.2) != 0.0) && (control_DW.temporalCounter_i1
|
||||
>= 400U)) {
|
||||
control_B.cmd_CV_mode = 1U;
|
||||
|
||||
/* Constant: '<Root>/Constant' incorporates:
|
||||
* Inport generated from: '<Root>/bat_type'
|
||||
* Inport generated from: '<Root>/run_state'
|
||||
*/
|
||||
if ((control_check_vol(1.0, NormalVol[control_U.bat_type - 1]) != 0.0) &&
|
||||
(control_DW.temporalCounter_i1 >= 400U)) {
|
||||
control_DW.temporalCounter_i1 = 0U;
|
||||
control_DW.is_charge = control_IN_CVMode;
|
||||
control_B.cmd_CV_mode = 2U;
|
||||
|
||||
/* Outport generated from: '<Root>/cmd_all_current' */
|
||||
control_Y.cmd_all_current = 0.0F;
|
||||
} else if ((control_U.run_state == Stop) || (control_DW.temporalCounter_i1
|
||||
>= 2160000U)) {
|
||||
>= 2160000U) || (control_U.mode != (uint32_T)Charge)) {
|
||||
control_DW.temporalCounter_i1 = 0U;
|
||||
control_DW.is_charge = control_IN_stop;
|
||||
control_B.cmd_CV_mode = 0U;
|
||||
control_B.cmd_buck_in_relay = 0.0;
|
||||
control_B.cmd_buck_out_relay = 0.0;
|
||||
control_B.cmd_pwm_en = 0.0;
|
||||
control_B.cmd_pwm_en = 0U;
|
||||
}
|
||||
break;
|
||||
|
||||
case control_IN_CVMode:
|
||||
/* Inport generated from: '<Root>/In Bus Element4' incorporates:
|
||||
* Inport generated from: '<Root>/bat_capacity'
|
||||
* Inport generated from: '<Root>/run_state'
|
||||
*/
|
||||
if ((control_U.sens_bat_current < control_U.bat_capacity * 0.05F) ||
|
||||
(control_DW.temporalCounter_i1 >= 2160000U)) {
|
||||
control_DW.temporalCounter_i1 = 0U;
|
||||
control_DW.is_charge = control_IN_BalanceMode;
|
||||
} else if (control_U.run_state == Stop) {
|
||||
control_B.cmd_CV_mode = 2U;
|
||||
if (control_U.sens_bat_current < control_U.bat_capacity * 0.05F) {
|
||||
guard1 = true;
|
||||
} else if ((control_U.mode != (uint32_T)Charge) || (control_U.run_state ==
|
||||
Stop)) {
|
||||
control_DW.temporalCounter_i1 = 0U;
|
||||
control_DW.is_charge = control_IN_stop;
|
||||
control_B.cmd_CV_mode = 0U;
|
||||
control_B.cmd_buck_in_relay = 0.0;
|
||||
control_B.cmd_buck_out_relay = 0.0;
|
||||
control_B.cmd_pwm_en = 0.0;
|
||||
control_B.cmd_pwm_en = 0U;
|
||||
} else if (control_DW.temporalCounter_i1 >= 2160000U) {
|
||||
guard1 = true;
|
||||
}
|
||||
|
||||
/* End of Inport generated from: '<Root>/In Bus Element4' */
|
||||
break;
|
||||
|
||||
case control_IN_TCMode:
|
||||
control_B.cmd_buck_out_relay = 1.0;
|
||||
if (control_DW.temporalCounter_i1 >= 2160000U) {
|
||||
guard1 = true;
|
||||
} else if ((control_check_vol(-1.0, 3.0) != 0.0) &&
|
||||
(control_DW.temporalCounter_i1 >= 200U)) {
|
||||
control_B.cmd_CV_mode = 0U;
|
||||
if ((control_check_vol(-1.0, 3.0) != 0.0) &&
|
||||
(control_DW.temporalCounter_i1 >= 200U)) {
|
||||
control_DW.is_charge = control_IN_preCCMode;
|
||||
control_B.cmd_CV_mode = 1U;
|
||||
|
||||
/* Outport generated from: '<Root>/cmd_all_current' incorporates:
|
||||
* Inport generated from: '<Root>/bat_capacity'
|
||||
*/
|
||||
control_Y.cmd_all_current = 0.1F * control_U.bat_capacity;
|
||||
} else if ((control_U.run_state == Stop) || (control_DW.temporalCounter_i1
|
||||
>= 2160000U) || (control_U.mode != (uint32_T)Charge)) {
|
||||
control_DW.temporalCounter_i1 = 0U;
|
||||
control_DW.is_charge = control_IN_stop;
|
||||
control_B.cmd_buck_in_relay = 0.0;
|
||||
control_B.cmd_buck_out_relay = 0.0;
|
||||
control_B.cmd_pwm_en = 0U;
|
||||
}
|
||||
break;
|
||||
|
||||
case control_IN_preCCMode:
|
||||
control_B.cmd_CV_mode = 1U;
|
||||
|
||||
/* Outport generated from: '<Root>/cmd_all_current' incorporates:
|
||||
* Inport generated from: '<Root>/bat_capacity'
|
||||
*/
|
||||
if (control_Y.cmd_all_current >= 0.1F * control_U.bat_capacity) {
|
||||
control_DW.temporalCounter_i1 = 0U;
|
||||
control_DW.is_charge = control_IN_CCMode;
|
||||
} else if (control_U.run_state == Stop) {
|
||||
guard1 = true;
|
||||
control_Y.cmd_all_current = 0.1F * control_U.bat_capacity;
|
||||
} else {
|
||||
control_Y.cmd_all_current += 0.0001F * control_U.bat_capacity;
|
||||
}
|
||||
break;
|
||||
|
||||
case control_IN_setting:
|
||||
control_B.cmd_pwm_en = 0.0;
|
||||
control_B.cmd_pwm_en = 0U;
|
||||
control_B.cmd_buck_in_relay = 0.0;
|
||||
control_B.cmd_buck_out_relay = 0.0;
|
||||
|
||||
/* Inport generated from: '<Root>/run_state' */
|
||||
if (control_U.run_state == Start) {
|
||||
if (control_U.bat_type == LiHv) {
|
||||
/* Inport generated from: '<Root>/bat_num' */
|
||||
tmp = rt_roundd_snf((real_T)control_U.bat_num * 4.2);
|
||||
if (tmp < 2.147483648E+9) {
|
||||
if (tmp >= -2.147483648E+9) {
|
||||
control_B.cmd_all_voltage = (real32_T)tmp;
|
||||
} else {
|
||||
control_B.cmd_all_voltage = -2.14748365E+9F;
|
||||
}
|
||||
/* Constant: '<Root>/Constant' incorporates:
|
||||
* Inport generated from: '<Root>/bat_num'
|
||||
* Inport generated from: '<Root>/bat_type'
|
||||
*/
|
||||
tmp = rt_roundd_snf(NormalVol[control_U.bat_type - 1] * (real_T)
|
||||
control_U.bat_num);
|
||||
if (tmp < 2.147483648E+9) {
|
||||
if (tmp >= -2.147483648E+9) {
|
||||
/* Outport generated from: '<Root>/cmd_all_voltage' */
|
||||
control_Y.cmd_all_voltage = (real32_T)tmp;
|
||||
} else {
|
||||
control_B.cmd_all_voltage = 2.14748365E+9F;
|
||||
/* Outport generated from: '<Root>/cmd_all_voltage' */
|
||||
control_Y.cmd_all_voltage = -2.14748365E+9F;
|
||||
}
|
||||
|
||||
guard2 = true;
|
||||
} else if (control_U.bat_type == LiPo) {
|
||||
/* Inport generated from: '<Root>/bat_num' */
|
||||
tmp = rt_roundd_snf((real_T)control_U.bat_num * 4.26);
|
||||
if (tmp < 2.147483648E+9) {
|
||||
if (tmp >= -2.147483648E+9) {
|
||||
control_B.cmd_all_voltage = (real32_T)tmp;
|
||||
} else {
|
||||
control_B.cmd_all_voltage = -2.14748365E+9F;
|
||||
}
|
||||
} else {
|
||||
control_B.cmd_all_voltage = 2.14748365E+9F;
|
||||
}
|
||||
|
||||
guard2 = true;
|
||||
} else if (control_U.bat_type == Lilon) {
|
||||
/* Inport generated from: '<Root>/bat_num' */
|
||||
tmp = rt_roundd_snf((real_T)control_U.bat_num * 4.2);
|
||||
if (tmp < 2.147483648E+9) {
|
||||
if (tmp >= -2.147483648E+9) {
|
||||
control_B.cmd_all_voltage = (real32_T)tmp;
|
||||
} else {
|
||||
control_B.cmd_all_voltage = -2.14748365E+9F;
|
||||
}
|
||||
} else {
|
||||
control_B.cmd_all_voltage = 2.14748365E+9F;
|
||||
}
|
||||
|
||||
guard2 = true;
|
||||
} else if (control_U.bat_type == LiFe) {
|
||||
/* Inport generated from: '<Root>/bat_num' */
|
||||
tmp = rt_roundd_snf((real_T)control_U.bat_num * 4.2);
|
||||
if (tmp < 2.147483648E+9) {
|
||||
if (tmp >= -2.147483648E+9) {
|
||||
control_B.cmd_all_voltage = (real32_T)tmp;
|
||||
} else {
|
||||
control_B.cmd_all_voltage = -2.14748365E+9F;
|
||||
}
|
||||
} else {
|
||||
control_B.cmd_all_voltage = 2.14748365E+9F;
|
||||
}
|
||||
|
||||
guard2 = true;
|
||||
} else if (control_U.bat_type == LiXX) {
|
||||
/* Inport generated from: '<Root>/bat_num' */
|
||||
tmp = rt_roundd_snf((real_T)control_U.bat_num * 4.2);
|
||||
if (tmp < 2.147483648E+9) {
|
||||
if (tmp >= -2.147483648E+9) {
|
||||
control_B.cmd_all_voltage = (real32_T)tmp;
|
||||
} else {
|
||||
control_B.cmd_all_voltage = -2.14748365E+9F;
|
||||
}
|
||||
} else {
|
||||
control_B.cmd_all_voltage = 2.14748365E+9F;
|
||||
}
|
||||
|
||||
guard2 = true;
|
||||
} else if (control_U.bat_type == NiZn) {
|
||||
/* Inport generated from: '<Root>/bat_num' */
|
||||
control_B.cmd_all_voltage = (real32_T)mul_s32_sat(control_U.bat_num, 3);
|
||||
guard2 = true;
|
||||
} else if (control_U.bat_type == NiCd) {
|
||||
/* Inport generated from: '<Root>/bat_num' */
|
||||
if (control_U.bat_num > 1073741823) {
|
||||
control_B.cmd_all_voltage = 2.14748365E+9F;
|
||||
} else if (control_U.bat_num <= -1073741824) {
|
||||
control_B.cmd_all_voltage = -2.14748365E+9F;
|
||||
} else {
|
||||
control_B.cmd_all_voltage = (real32_T)(control_U.bat_num << 1);
|
||||
}
|
||||
|
||||
guard2 = true;
|
||||
} else if (control_U.bat_type == NiMH) {
|
||||
/* Inport generated from: '<Root>/bat_num' */
|
||||
control_B.cmd_all_voltage = (real32_T)mul_s32_sat(control_U.bat_num, 3);
|
||||
guard2 = true;
|
||||
} else if (control_U.bat_type == Pb) {
|
||||
/* Inport generated from: '<Root>/bat_num' */
|
||||
if (control_U.bat_num > 1073741823) {
|
||||
control_B.cmd_all_voltage = 2.14748365E+9F;
|
||||
} else if (control_U.bat_num <= -1073741824) {
|
||||
control_B.cmd_all_voltage = -2.14748365E+9F;
|
||||
} else {
|
||||
control_B.cmd_all_voltage = (real32_T)(control_U.bat_num << 1);
|
||||
}
|
||||
|
||||
guard2 = true;
|
||||
} else {
|
||||
/* Outport generated from: '<Root>/cmd_all_voltage' */
|
||||
control_Y.cmd_all_voltage = 2.14748365E+9F;
|
||||
}
|
||||
|
||||
control_DW.temporalCounter_i1 = 0U;
|
||||
control_DW.is_charge = control_IN_waitPwrVol;
|
||||
}
|
||||
break;
|
||||
|
||||
case control_IN_stop:
|
||||
control_B.cmd_CV_mode = 0U;
|
||||
control_B.cmd_buck_in_relay = 0.0;
|
||||
control_B.cmd_buck_out_relay = 0.0;
|
||||
control_B.cmd_pwm_en = 0.0;
|
||||
if (control_DW.temporalCounter_i1 >= 200U) {
|
||||
control_B.cmd_pwm_en = 0U;
|
||||
if (control_U.mode != (uint32_T)Charge) {
|
||||
control_DW.is_charge = control_IN_setting;
|
||||
control_B.cmd_all_voltage = 0.0F;
|
||||
|
||||
/* Outport generated from: '<Root>/cmd_all_voltage' */
|
||||
control_Y.cmd_all_voltage = 0.0F;
|
||||
|
||||
/* Outport generated from: '<Root>/cmd_all_current' */
|
||||
control_Y.cmd_all_current = 0.0F;
|
||||
} else if (control_DW.temporalCounter_i1 >= 200U) {
|
||||
control_DW.is_charge = control_IN_setting;
|
||||
|
||||
/* Outport generated from: '<Root>/cmd_all_voltage' */
|
||||
control_Y.cmd_all_voltage = 0.0F;
|
||||
|
||||
/* Outport generated from: '<Root>/cmd_all_current' */
|
||||
control_Y.cmd_all_current = 0.0F;
|
||||
}
|
||||
break;
|
||||
|
||||
@@ -380,25 +310,30 @@ static void control_charge(void)
|
||||
|
||||
/* Inport generated from: '<Root>/In Bus Element2' incorporates:
|
||||
* Inport generated from: '<Root>/run_state'
|
||||
* Outport generated from: '<Root>/cmd_all_voltage'
|
||||
*/
|
||||
if ((control_U.sens_buck_in_voltage >= control_B.cmd_all_voltage) &&
|
||||
if ((control_U.sens_buck_in_voltage >= control_Y.cmd_all_voltage) &&
|
||||
(control_DW.temporalCounter_i1 >= 200U)) {
|
||||
control_DW.temporalCounter_i1 = 0U;
|
||||
control_DW.is_charge = control_IN_waitBuckup;
|
||||
control_B.cmd_pwm_en = 1.0;
|
||||
} else if (control_U.run_state == Stop) {
|
||||
control_B.cmd_CV_mode = 0U;
|
||||
control_B.cmd_pwm_en = 1U;
|
||||
} else if ((control_U.run_state == Stop) || (control_U.mode != (uint32_T)
|
||||
Charge)) {
|
||||
control_DW.temporalCounter_i1 = 0U;
|
||||
control_DW.is_charge = control_IN_stop;
|
||||
control_B.cmd_CV_mode = 0U;
|
||||
control_B.cmd_buck_in_relay = 0.0;
|
||||
control_B.cmd_buck_out_relay = 0.0;
|
||||
control_B.cmd_pwm_en = 0.0;
|
||||
control_B.cmd_pwm_en = 0U;
|
||||
}
|
||||
|
||||
/* End of Inport generated from: '<Root>/In Bus Element2' */
|
||||
break;
|
||||
|
||||
case control_IN_waitBuckup:
|
||||
control_B.cmd_pwm_en = 1.0;
|
||||
control_B.cmd_CV_mode = 0U;
|
||||
control_B.cmd_pwm_en = 1U;
|
||||
|
||||
/* Inport generated from: '<Root>/In Bus Element3' incorporates:
|
||||
* Inport generated from: '<Root>/run_state'
|
||||
@@ -409,12 +344,18 @@ static void control_charge(void)
|
||||
control_DW.temporalCounter_i1 = 0U;
|
||||
control_DW.is_charge = control_IN_TCMode;
|
||||
control_B.cmd_buck_out_relay = 1.0;
|
||||
} else if (control_U.run_state == Stop) {
|
||||
|
||||
/* Outport generated from: '<Root>/cmd_all_current' incorporates:
|
||||
* Inport generated from: '<Root>/bat_capacity'
|
||||
*/
|
||||
control_Y.cmd_all_current = 0.1F * control_U.bat_capacity;
|
||||
} else if ((control_U.run_state == Stop) || (control_U.mode != (uint32_T)
|
||||
Charge)) {
|
||||
control_DW.temporalCounter_i1 = 0U;
|
||||
control_DW.is_charge = control_IN_stop;
|
||||
control_B.cmd_buck_in_relay = 0.0;
|
||||
control_B.cmd_buck_out_relay = 0.0;
|
||||
control_B.cmd_pwm_en = 0.0;
|
||||
control_B.cmd_pwm_en = 0U;
|
||||
}
|
||||
|
||||
/* End of Inport generated from: '<Root>/In Bus Element3' */
|
||||
@@ -422,19 +363,22 @@ static void control_charge(void)
|
||||
|
||||
default:
|
||||
/* case IN_waitPwrVol: */
|
||||
control_B.cmd_pwm_en = 0.0;
|
||||
control_B.cmd_pwm_en = 0U;
|
||||
|
||||
/* Inport generated from: '<Root>/In Bus Element' incorporates:
|
||||
* Inport generated from: '<Root>/run_state'
|
||||
* Outport generated from: '<Root>/cmd_all_voltage'
|
||||
*/
|
||||
if ((control_U.sens_pwr_voltage >= control_B.cmd_all_voltage) &&
|
||||
if ((control_U.sens_pwr_voltage >= control_Y.cmd_all_voltage) &&
|
||||
(control_DW.temporalCounter_i1 >= 200U)) {
|
||||
control_DW.temporalCounter_i1 = 0U;
|
||||
control_DW.is_charge = control_IN_waitBuckVol;
|
||||
control_B.cmd_buck_in_relay = 1.0;
|
||||
} else if (control_U.run_state == Stop) {
|
||||
} else if ((control_U.run_state == Stop) || (control_U.mode != (uint32_T)
|
||||
Charge)) {
|
||||
control_DW.temporalCounter_i1 = 0U;
|
||||
control_DW.is_charge = control_IN_stop;
|
||||
control_B.cmd_CV_mode = 0U;
|
||||
control_B.cmd_buck_in_relay = 0.0;
|
||||
control_B.cmd_buck_out_relay = 0.0;
|
||||
}
|
||||
@@ -443,17 +387,13 @@ static void control_charge(void)
|
||||
break;
|
||||
}
|
||||
|
||||
if (guard2) {
|
||||
control_DW.temporalCounter_i1 = 0U;
|
||||
control_DW.is_charge = control_IN_waitPwrVol;
|
||||
}
|
||||
|
||||
if (guard1) {
|
||||
control_DW.temporalCounter_i1 = 0U;
|
||||
control_DW.is_charge = control_IN_stop;
|
||||
control_B.cmd_buck_in_relay = 0.0;
|
||||
control_B.cmd_buck_out_relay = 0.0;
|
||||
control_B.cmd_pwm_en = 0.0;
|
||||
control_DW.is_charge = control_IN_BalanceMode;
|
||||
control_B.cmd_CV_mode = 3U;
|
||||
|
||||
/* Outport generated from: '<Root>/cmd_all_current' */
|
||||
control_Y.cmd_all_current = 0.0F;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -463,8 +403,11 @@ static void control_charge(void)
|
||||
/* Model step function */
|
||||
void control_step(void)
|
||||
{
|
||||
real_T rtb_Switch;
|
||||
real_T tmp;
|
||||
int32_T rtb_pwm;
|
||||
real32_T Sum;
|
||||
real32_T rtb_Filter;
|
||||
real32_T rtb_FilterCoefficient_c;
|
||||
|
||||
/* Chart: '<Root>/state' incorporates:
|
||||
* Inport generated from: '<Root>/mode'
|
||||
@@ -476,17 +419,24 @@ void control_step(void)
|
||||
if (control_DW.is_active_c3_control == 0U) {
|
||||
control_DW.is_active_c3_control = 1U;
|
||||
control_DW.is_c3_control = control_IN_init;
|
||||
control_B.cmd_all_voltage = 0.0F;
|
||||
|
||||
/* Outport generated from: '<Root>/cmd_all_voltage' */
|
||||
control_Y.cmd_all_voltage = 0.0F;
|
||||
|
||||
/* Outport generated from: '<Root>/cmd_all_current' */
|
||||
control_Y.cmd_all_current = 0.0F;
|
||||
control_B.cmd_temp = 20.0;
|
||||
control_B.cmd_buck_in_relay = 0.0;
|
||||
control_B.cmd_buck_out_relay = 0.0;
|
||||
control_B.cmd_pwm_en = 0.0;
|
||||
control_B.cmd_pwm_en = 0U;
|
||||
} else {
|
||||
switch (control_DW.is_c3_control) {
|
||||
case control_IN_balance:
|
||||
if (control_U.mode == (uint32_T)Init) {
|
||||
control_DW.temporalCounter_i1 = 0U;
|
||||
control_DW.is_c3_control = control_IN_deinit;
|
||||
} else {
|
||||
control_B.cmd_CV_mode = 3U;
|
||||
}
|
||||
break;
|
||||
|
||||
@@ -497,11 +447,16 @@ void control_step(void)
|
||||
case control_IN_deinit:
|
||||
if (control_DW.temporalCounter_i1 >= 200U) {
|
||||
control_DW.is_c3_control = control_IN_init;
|
||||
control_B.cmd_all_voltage = 0.0F;
|
||||
|
||||
/* Outport generated from: '<Root>/cmd_all_voltage' */
|
||||
control_Y.cmd_all_voltage = 0.0F;
|
||||
|
||||
/* Outport generated from: '<Root>/cmd_all_current' */
|
||||
control_Y.cmd_all_current = 0.0F;
|
||||
control_B.cmd_temp = 20.0;
|
||||
control_B.cmd_buck_in_relay = 0.0;
|
||||
control_B.cmd_buck_out_relay = 0.0;
|
||||
control_B.cmd_pwm_en = 0.0;
|
||||
control_B.cmd_pwm_en = 0U;
|
||||
}
|
||||
break;
|
||||
|
||||
@@ -516,18 +471,25 @@ void control_step(void)
|
||||
control_B.cmd_temp = 20.0;
|
||||
control_B.cmd_buck_in_relay = 0.0;
|
||||
control_B.cmd_buck_out_relay = 0.0;
|
||||
control_B.cmd_pwm_en = 0.0;
|
||||
control_B.cmd_pwm_en = 0U;
|
||||
if (control_U.mode == (uint32_T)Discharge) {
|
||||
control_DW.is_c3_control = control_IN_discharge;
|
||||
} else if (control_U.mode == (uint32_T)Storage) {
|
||||
control_DW.is_c3_control = control_IN_storage;
|
||||
control_DW.is_storage = control_IN_DischargeMode;
|
||||
control_B.cmd_CV_mode = 3U;
|
||||
} else if (control_U.mode == (uint32_T)Charge) {
|
||||
control_DW.is_c3_control = control_IN_charge;
|
||||
control_DW.is_charge = control_IN_setting;
|
||||
control_B.cmd_all_voltage = 0.0F;
|
||||
|
||||
/* Outport generated from: '<Root>/cmd_all_voltage' */
|
||||
control_Y.cmd_all_voltage = 0.0F;
|
||||
|
||||
/* Outport generated from: '<Root>/cmd_all_current' */
|
||||
control_Y.cmd_all_current = 0.0F;
|
||||
} else if (control_U.mode == (uint32_T)Balance) {
|
||||
control_DW.is_c3_control = control_IN_balance;
|
||||
control_B.cmd_CV_mode = 3U;
|
||||
}
|
||||
break;
|
||||
|
||||
@@ -537,16 +499,12 @@ void control_step(void)
|
||||
control_DW.is_storage = control_IN_NO_ACTIVE_CHILD;
|
||||
control_DW.temporalCounter_i1 = 0U;
|
||||
control_DW.is_c3_control = control_IN_deinit;
|
||||
} else if (control_DW.is_storage == control_IN_BalanceMode) {
|
||||
control_B.cmd_CV_mode = 3U;
|
||||
} else {
|
||||
switch (control_DW.is_storage) {
|
||||
case control_IN_BalanceMode:
|
||||
break;
|
||||
|
||||
default:
|
||||
/* case IN_DischargeMode: */
|
||||
control_DW.is_storage = control_IN_BalanceMode;
|
||||
break;
|
||||
}
|
||||
/* case IN_DischargeMode: */
|
||||
control_DW.is_storage = control_IN_BalanceMode;
|
||||
control_B.cmd_CV_mode = 3U;
|
||||
}
|
||||
break;
|
||||
}
|
||||
@@ -554,74 +512,6 @@ void control_step(void)
|
||||
|
||||
/* End of Chart: '<Root>/state' */
|
||||
|
||||
/* Switch: '<S3>/Switch' incorporates:
|
||||
* Constant: '<S3>/Constant1'
|
||||
* Inport generated from: '<Root>/In Bus Element3'
|
||||
* Sum: '<S3>/Sum4'
|
||||
*/
|
||||
if (control_B.cmd_pwm_en > control_P.Switch_Threshold) {
|
||||
rtb_Switch = control_B.cmd_all_voltage - control_U.sens_buck_out_voltage;
|
||||
} else {
|
||||
rtb_Switch = control_P.Constant1_Value;
|
||||
}
|
||||
|
||||
/* End of Switch: '<S3>/Switch' */
|
||||
|
||||
/* Gain: '<S3>/I' incorporates:
|
||||
* Delay: '<S3>/Delay'
|
||||
* Sum: '<S3>/Sum5'
|
||||
*/
|
||||
control_DW.Delay_DSTATE = (rtb_Switch + control_DW.Delay_DSTATE) *
|
||||
control_P.I_Gain;
|
||||
|
||||
/* Saturate: '<S3>/Saturation1' */
|
||||
if (control_DW.Delay_DSTATE > control_P.Saturation1_UpperSat) {
|
||||
/* Gain: '<S3>/I' */
|
||||
control_DW.Delay_DSTATE = control_P.Saturation1_UpperSat;
|
||||
} else if (control_DW.Delay_DSTATE < control_P.Saturation1_LowerSat) {
|
||||
/* Gain: '<S3>/I' */
|
||||
control_DW.Delay_DSTATE = control_P.Saturation1_LowerSat;
|
||||
}
|
||||
|
||||
/* End of Saturate: '<S3>/Saturation1' */
|
||||
|
||||
/* Switch: '<S3>/Switch1' incorporates:
|
||||
* Constant: '<S3>/Constant2'
|
||||
*/
|
||||
if (control_B.cmd_pwm_en > control_P.Switch1_Threshold) {
|
||||
/* Sum: '<S3>/Sum6' incorporates:
|
||||
* Delay: '<S3>/Delay'
|
||||
* Gain: '<S3>/P'
|
||||
*/
|
||||
rtb_Switch = control_P.P_Gain * rtb_Switch + control_DW.Delay_DSTATE;
|
||||
|
||||
/* Saturate: '<S3>/Saturation' */
|
||||
if (rtb_Switch > control_P.Saturation_UpperSat) {
|
||||
rtb_Switch = control_P.Saturation_UpperSat;
|
||||
} else if (rtb_Switch < control_P.Saturation_LowerSat) {
|
||||
rtb_Switch = control_P.Saturation_LowerSat;
|
||||
}
|
||||
|
||||
/* End of Saturate: '<S3>/Saturation' */
|
||||
} else {
|
||||
rtb_Switch = control_P.Constant2_Value;
|
||||
}
|
||||
|
||||
/* End of Switch: '<S3>/Switch1' */
|
||||
|
||||
/* DataTypeConversion: '<Root>/Data Type Conversion' */
|
||||
rtb_Switch = floor(rtb_Switch);
|
||||
if (rtIsNaN(rtb_Switch) || rtIsInf(rtb_Switch)) {
|
||||
rtb_Switch = 0.0;
|
||||
} else {
|
||||
rtb_Switch = fmod(rtb_Switch, 65536.0);
|
||||
}
|
||||
|
||||
control_Y.out.power = (uint16_T)(rtb_Switch < 0.0 ? (int32_T)(uint16_T)
|
||||
-(int16_T)(uint16_T)-rtb_Switch : (int32_T)(uint16_T)rtb_Switch);
|
||||
|
||||
/* End of DataTypeConversion: '<Root>/Data Type Conversion' */
|
||||
|
||||
/* Chart: '<S2>/Chart' incorporates:
|
||||
* Inport generated from: '<Root>/In Bus Element5'
|
||||
*/
|
||||
@@ -659,29 +549,186 @@ void control_step(void)
|
||||
/* DataTypeConversion: '<Root>/Data Type Conversion1' */
|
||||
control_Y.out.fan = (uint16_T)rtb_pwm;
|
||||
|
||||
/* DataTypeConversion: '<Root>/Data Type Conversion2' */
|
||||
rtb_Switch = floor(control_B.cmd_buck_in_relay);
|
||||
if (rtIsNaN(rtb_Switch) || rtIsInf(rtb_Switch)) {
|
||||
rtb_Switch = 0.0;
|
||||
/* Outputs for Enabled SubSystem: '<S3>/Voltage' incorporates:
|
||||
* EnablePort: '<S6>/Enable'
|
||||
*/
|
||||
/* Outputs for Enabled SubSystem: '<S3>/Current ' incorporates:
|
||||
* EnablePort: '<S5>/Enable'
|
||||
*/
|
||||
if (control_B.cmd_pwm_en > 0U) {
|
||||
if (!control_DW.Current_MODE) {
|
||||
/* InitializeConditions for DiscreteIntegrator: '<S36>/Filter' */
|
||||
control_DW.Filter_DSTATE_i = control_P.CurrentPID_InitialConditionForF;
|
||||
|
||||
/* InitializeConditions for DiscreteIntegrator: '<S41>/Integrator' */
|
||||
control_DW.Integrator_DSTATE_f = control_P.CurrentPID_InitialConditionForI;
|
||||
control_DW.Current_MODE = true;
|
||||
}
|
||||
|
||||
/* Sum: '<S5>/Sum5' incorporates:
|
||||
* DataTypeConversion: '<Root>/Data Type Conversion4'
|
||||
* Inport generated from: '<Root>/In Bus Element4'
|
||||
* Outport generated from: '<Root>/cmd_all_current'
|
||||
*/
|
||||
rtb_Filter = control_Y.cmd_all_current - (real32_T)
|
||||
control_U.sens_bat_current;
|
||||
|
||||
/* Gain: '<S44>/Filter Coefficient' incorporates:
|
||||
* DiscreteIntegrator: '<S36>/Filter'
|
||||
* Gain: '<S34>/Derivative Gain'
|
||||
* Sum: '<S36>/SumD'
|
||||
*/
|
||||
rtb_FilterCoefficient_c = (current_d * rtb_Filter -
|
||||
control_DW.Filter_DSTATE_i) * control_P.CurrentPID_N;
|
||||
|
||||
/* Sum: '<S50>/Sum' incorporates:
|
||||
* DiscreteIntegrator: '<S41>/Integrator'
|
||||
* Gain: '<S46>/Proportional Gain'
|
||||
*/
|
||||
Sum = (current_p * rtb_Filter + control_DW.Integrator_DSTATE_f) +
|
||||
rtb_FilterCoefficient_c;
|
||||
|
||||
/* Update for DiscreteIntegrator: '<S36>/Filter' */
|
||||
control_DW.Filter_DSTATE_i += control_P.Filter_gainval *
|
||||
rtb_FilterCoefficient_c;
|
||||
|
||||
/* Update for DiscreteIntegrator: '<S41>/Integrator' incorporates:
|
||||
* Gain: '<S38>/Integral Gain'
|
||||
*/
|
||||
control_DW.Integrator_DSTATE_f += current_i * rtb_Filter *
|
||||
control_P.Integrator_gainval;
|
||||
if (!control_DW.Voltage_MODE) {
|
||||
/* InitializeConditions for DiscreteIntegrator: '<S95>/Integrator' */
|
||||
control_DW.Integrator_DSTATE = control_P.VoltagePID_InitialConditionForI;
|
||||
|
||||
/* InitializeConditions for DiscreteIntegrator: '<S90>/Filter' */
|
||||
control_DW.Filter_DSTATE = control_P.VoltagePID_InitialConditionForF;
|
||||
control_DW.Voltage_MODE = true;
|
||||
}
|
||||
|
||||
/* SwitchCase: '<S6>/Switch Case' */
|
||||
switch ((int32_T)control_B.cmd_CV_mode) {
|
||||
case 0:
|
||||
case 1:
|
||||
/* Outputs for IfAction SubSystem: '<S6>/Switch Case Action Subsystem2' incorporates:
|
||||
* ActionPort: '<S60>/Action Port'
|
||||
*/
|
||||
/* Merge: '<S6>/Merge1' incorporates:
|
||||
* SignalConversion generated from: '<S60>/current_out'
|
||||
*/
|
||||
control_B.Merge1 = Sum;
|
||||
|
||||
/* End of Outputs for SubSystem: '<S6>/Switch Case Action Subsystem2' */
|
||||
break;
|
||||
|
||||
case 2:
|
||||
/* Outputs for IfAction SubSystem: '<S6>/Switch Case Action Subsystem1' incorporates:
|
||||
* ActionPort: '<S59>/Action Port'
|
||||
*/
|
||||
/* Merge: '<S6>/Merge1' incorporates:
|
||||
* Outport generated from: '<Root>/cmd_all_voltage'
|
||||
* SignalConversion generated from: '<S59>/cmd_voltage'
|
||||
*/
|
||||
control_B.Merge1 = control_Y.cmd_all_voltage;
|
||||
|
||||
/* End of Outputs for SubSystem: '<S6>/Switch Case Action Subsystem1' */
|
||||
break;
|
||||
|
||||
case 3:
|
||||
break;
|
||||
}
|
||||
|
||||
/* End of SwitchCase: '<S6>/Switch Case' */
|
||||
|
||||
/* Sum: '<S6>/Sum4' incorporates:
|
||||
* DataTypeConversion: '<Root>/Data Type Conversion5'
|
||||
* Inport generated from: '<Root>/In Bus Element3'
|
||||
*/
|
||||
rtb_Filter = control_B.Merge1 - (real32_T)control_U.sens_buck_out_voltage;
|
||||
|
||||
/* Gain: '<S98>/Filter Coefficient' incorporates:
|
||||
* DiscreteIntegrator: '<S90>/Filter'
|
||||
* Gain: '<S88>/Derivative Gain'
|
||||
* Sum: '<S90>/SumD'
|
||||
*/
|
||||
rtb_FilterCoefficient_c = (voltage_d * rtb_Filter - control_DW.Filter_DSTATE)
|
||||
* control_P.VoltagePID_N;
|
||||
|
||||
/* Saturate: '<S6>/Saturation' incorporates:
|
||||
* Constant: '<S6>/Constant2'
|
||||
* DiscreteIntegrator: '<S95>/Integrator'
|
||||
* Gain: '<S100>/Proportional Gain'
|
||||
* Sum: '<S104>/Sum'
|
||||
* Sum: '<S6>/Sum7'
|
||||
*/
|
||||
control_B.Saturation = ((voltage_p * rtb_Filter +
|
||||
control_DW.Integrator_DSTATE) + rtb_FilterCoefficient_c) +
|
||||
control_P.Constant2_Value;
|
||||
|
||||
/* Saturate: '<S6>/Saturation' */
|
||||
if (control_B.Saturation > control_P.Saturation_UpperSat) {
|
||||
/* Saturate: '<S6>/Saturation' */
|
||||
control_B.Saturation = control_P.Saturation_UpperSat;
|
||||
} else if (control_B.Saturation < control_P.Saturation_LowerSat) {
|
||||
/* Saturate: '<S6>/Saturation' */
|
||||
control_B.Saturation = control_P.Saturation_LowerSat;
|
||||
}
|
||||
|
||||
/* End of Saturate: '<S6>/Saturation' */
|
||||
|
||||
/* Update for DiscreteIntegrator: '<S95>/Integrator' incorporates:
|
||||
* Gain: '<S92>/Integral Gain'
|
||||
*/
|
||||
control_DW.Integrator_DSTATE += voltage_i * rtb_Filter *
|
||||
control_P.Integrator_gainval_b;
|
||||
|
||||
/* Update for DiscreteIntegrator: '<S90>/Filter' */
|
||||
control_DW.Filter_DSTATE += control_P.Filter_gainval_h *
|
||||
rtb_FilterCoefficient_c;
|
||||
} else {
|
||||
rtb_Switch = fmod(rtb_Switch, 65536.0);
|
||||
control_DW.Current_MODE = false;
|
||||
control_DW.Voltage_MODE = false;
|
||||
}
|
||||
|
||||
control_Y.out.relay_in = (uint16_T)(rtb_Switch < 0.0 ? (int32_T)(uint16_T)
|
||||
-(int16_T)(uint16_T)-rtb_Switch : (int32_T)(uint16_T)rtb_Switch);
|
||||
/* End of Outputs for SubSystem: '<S3>/Current ' */
|
||||
/* End of Outputs for SubSystem: '<S3>/Voltage' */
|
||||
|
||||
/* DataTypeConversion: '<Root>/Data Type Conversion' */
|
||||
tmp = floor(control_B.Saturation);
|
||||
if (rtIsNaN(tmp) || rtIsInf(tmp)) {
|
||||
tmp = 0.0;
|
||||
} else {
|
||||
tmp = fmod(tmp, 65536.0);
|
||||
}
|
||||
|
||||
control_Y.out.power = (uint16_T)(tmp < 0.0 ? (int32_T)(uint16_T)-(int16_T)
|
||||
(uint16_T)-tmp : (int32_T)(uint16_T)tmp);
|
||||
|
||||
/* End of DataTypeConversion: '<Root>/Data Type Conversion' */
|
||||
|
||||
/* DataTypeConversion: '<Root>/Data Type Conversion2' */
|
||||
tmp = floor(control_B.cmd_buck_in_relay);
|
||||
if (rtIsNaN(tmp) || rtIsInf(tmp)) {
|
||||
tmp = 0.0;
|
||||
} else {
|
||||
tmp = fmod(tmp, 65536.0);
|
||||
}
|
||||
|
||||
control_Y.out.relay_in = (uint16_T)(tmp < 0.0 ? (int32_T)(uint16_T)-(int16_T)
|
||||
(uint16_T)-tmp : (int32_T)(uint16_T)tmp);
|
||||
|
||||
/* End of DataTypeConversion: '<Root>/Data Type Conversion2' */
|
||||
|
||||
/* DataTypeConversion: '<Root>/Data Type Conversion3' */
|
||||
rtb_Switch = floor(control_B.cmd_buck_out_relay);
|
||||
if (rtIsNaN(rtb_Switch) || rtIsInf(rtb_Switch)) {
|
||||
rtb_Switch = 0.0;
|
||||
tmp = floor(control_B.cmd_buck_out_relay);
|
||||
if (rtIsNaN(tmp) || rtIsInf(tmp)) {
|
||||
tmp = 0.0;
|
||||
} else {
|
||||
rtb_Switch = fmod(rtb_Switch, 65536.0);
|
||||
tmp = fmod(tmp, 65536.0);
|
||||
}
|
||||
|
||||
control_Y.out.relay_out = (uint16_T)(rtb_Switch < 0.0 ? (int32_T)(uint16_T)
|
||||
-(int16_T)(uint16_T)-rtb_Switch : (int32_T)(uint16_T)rtb_Switch);
|
||||
control_Y.out.relay_out = (uint16_T)(tmp < 0.0 ? (int32_T)(uint16_T)-(int16_T)
|
||||
(uint16_T)-tmp : (int32_T)(uint16_T)tmp);
|
||||
|
||||
/* End of DataTypeConversion: '<Root>/Data Type Conversion3' */
|
||||
}
|
||||
@@ -694,10 +741,31 @@ void control_initialize(void)
|
||||
/* Initialize DataMapInfo substructure containing ModelMap for C API */
|
||||
control_InitializeDataMapInfo();
|
||||
|
||||
/* InitializeConditions for Gain: '<S3>/I' incorporates:
|
||||
* Delay: '<S3>/Delay'
|
||||
/* SystemInitialize for Enabled SubSystem: '<S3>/Current ' */
|
||||
/* InitializeConditions for DiscreteIntegrator: '<S36>/Filter' */
|
||||
control_DW.Filter_DSTATE_i = control_P.CurrentPID_InitialConditionForF;
|
||||
|
||||
/* InitializeConditions for DiscreteIntegrator: '<S41>/Integrator' */
|
||||
control_DW.Integrator_DSTATE_f = control_P.CurrentPID_InitialConditionForI;
|
||||
|
||||
/* End of SystemInitialize for SubSystem: '<S3>/Current ' */
|
||||
|
||||
/* SystemInitialize for Enabled SubSystem: '<S3>/Voltage' */
|
||||
/* InitializeConditions for DiscreteIntegrator: '<S95>/Integrator' */
|
||||
control_DW.Integrator_DSTATE = control_P.VoltagePID_InitialConditionForI;
|
||||
|
||||
/* InitializeConditions for DiscreteIntegrator: '<S90>/Filter' */
|
||||
control_DW.Filter_DSTATE = control_P.VoltagePID_InitialConditionForF;
|
||||
|
||||
/* SystemInitialize for Merge: '<S6>/Merge1' */
|
||||
control_B.Merge1 = control_P.Merge1_InitialOutput;
|
||||
|
||||
/* SystemInitialize for Saturate: '<S6>/Saturation' incorporates:
|
||||
* Outport: '<S6>/Voltage out'
|
||||
*/
|
||||
control_DW.Delay_DSTATE = control_P.Delay_InitialCondition;
|
||||
control_B.Saturation = control_P.Voltageout_Y0;
|
||||
|
||||
/* End of SystemInitialize for SubSystem: '<S3>/Voltage' */
|
||||
}
|
||||
|
||||
/* Model terminate function */
|
||||
|
||||
Reference in New Issue
Block a user