Обновление
This commit is contained in:
parent
c16c69a3b3
commit
f278451713
323
HVAC_model.c
323
HVAC_model.c
|
|
@ -3,9 +3,9 @@
|
||||||
*
|
*
|
||||||
* Code generated for Simulink model 'HVAC_model'.
|
* Code generated for Simulink model 'HVAC_model'.
|
||||||
*
|
*
|
||||||
* Model version : 1.784
|
* Model version : 1.786
|
||||||
* Simulink Coder version : 24.1 (R2024a) 19-Nov-2023
|
* Simulink Coder version : 24.1 (R2024a) 19-Nov-2023
|
||||||
* C/C++ source code generated on : Tue Apr 14 14:42:16 2026
|
* C/C++ source code generated on : Tue Apr 14 17:41:03 2026
|
||||||
*
|
*
|
||||||
* Target selection: ert.tlc
|
* Target selection: ert.tlc
|
||||||
* Embedded hardware selection: ARM Compatible->ARM Cortex-M
|
* Embedded hardware selection: ARM Compatible->ARM Cortex-M
|
||||||
|
|
@ -25,6 +25,7 @@
|
||||||
#include "Rs_Cal_Base.h"
|
#include "Rs_Cal_Base.h"
|
||||||
|
|
||||||
/* Named constants for Test Sequence: '<Root>/Test Sequence' */
|
/* Named constants for Test Sequence: '<Root>/Test Sequence' */
|
||||||
|
#define IN_NO_ACTIVE_CHILD ((uint8_t)0U)
|
||||||
#define IN_step_1 ((uint8_t)1U)
|
#define IN_step_1 ((uint8_t)1U)
|
||||||
#define IN_step_10 ((uint8_t)2U)
|
#define IN_step_10 ((uint8_t)2U)
|
||||||
#define IN_step_11 ((uint8_t)3U)
|
#define IN_step_11 ((uint8_t)3U)
|
||||||
|
|
@ -76,6 +77,140 @@
|
||||||
#define IN_step_8 ((uint8_t)49U)
|
#define IN_step_8 ((uint8_t)49U)
|
||||||
#define IN_step_9 ((uint8_t)50U)
|
#define IN_step_9 ((uint8_t)50U)
|
||||||
|
|
||||||
|
const CmdBusError HVAC_model_rtZCmdBusError = {
|
||||||
|
0U, /* CCU_IncarTempErrF_Stat */
|
||||||
|
0U, /* CCU_IncarTempErrR_Stat */
|
||||||
|
0U, /* CCU_DuctTempSenErrF_Stat */
|
||||||
|
0U, /* CCU_DuctTempSenErrR_Stat */
|
||||||
|
0U, /* CCU_EvaTempSenErrF_Stat */
|
||||||
|
0U, /* CCU_EvaTempSenErrR_Stat */
|
||||||
|
0U, /* CCU_DeflectorSwErrF_Stat */
|
||||||
|
0U, /* CCU_DeflectorSwErrR_Stat */
|
||||||
|
0U, /* CCU_PressSenErr_Stat */
|
||||||
|
0U, /* CCU_AmbienTemptSenErr_Stat */
|
||||||
|
0U, /* CCU_SealingValveErr_Stat */
|
||||||
|
0U, /* CCU_ETXVerr_Stat */
|
||||||
|
0U, /* CCU_HVACfanOrTXVerrF_Stat */
|
||||||
|
0U, /* CCU_HVACfanOrTXVerrR_Stat */
|
||||||
|
0U, /* CCU_ActuatorErrF_Stat */
|
||||||
|
0U, /* CCU_ActuatorErrR_Stat */
|
||||||
|
0U, /* CCU_UltravioletErr_Stat */
|
||||||
|
0U, /* CCU_VinRecordErr_Stat */
|
||||||
|
0U, /* CCU_AirQualSenErr_Stat */
|
||||||
|
0U, /* CCU_CommErr_Stat */
|
||||||
|
0U, /* CCU_TWVerr_Stat */
|
||||||
|
0U, /* CCU_IonizationErr_Stat */
|
||||||
|
0U /* CCU_AromaErr_Stat */
|
||||||
|
}; /* CmdBusError ground */
|
||||||
|
|
||||||
|
const ActuatorCmdBusInput HVAC_model_rtZActuatorCmdBusInput = {
|
||||||
|
{
|
||||||
|
0, 0, 0, 0, 0, 0, 0, 0, 0 }
|
||||||
|
, /* in_CPOS_ALL */
|
||||||
|
|
||||||
|
{
|
||||||
|
0, 0, 0, 0, 0, 0, 0, 0, 0 }
|
||||||
|
, /* in_Act_Emrf_Slave */
|
||||||
|
|
||||||
|
{
|
||||||
|
0, 0, 0, 0, 0, 0, 0, 0, 0 }
|
||||||
|
, /* in_Mode_Slave */
|
||||||
|
|
||||||
|
{
|
||||||
|
0, 0, 0, 0, 0, 0, 0, 0, 0 }
|
||||||
|
, /* in_Act_Err1_Supply */
|
||||||
|
|
||||||
|
{
|
||||||
|
0, 0, 0, 0, 0, 0, 0, 0, 0 }
|
||||||
|
, /* in_Act_Err2_Communication */
|
||||||
|
|
||||||
|
{
|
||||||
|
0, 0, 0, 0, 0, 0, 0, 0, 0 }
|
||||||
|
, /* in_Act_Err3_Temperature */
|
||||||
|
|
||||||
|
{
|
||||||
|
0, 0, 0, 0, 0, 0, 0, 0, 0 }
|
||||||
|
, /* in_Act_Err4_Permanent_Electrical */
|
||||||
|
|
||||||
|
{
|
||||||
|
0, 0, 0, 0, 0, 0, 0, 0, 0 }
|
||||||
|
, /* in_Act_Stall_Slave */
|
||||||
|
|
||||||
|
{
|
||||||
|
0, 0, 0, 0, 0, 0, 0, 0, 0 }
|
||||||
|
, /* in_Act_Reset */
|
||||||
|
0U, /* Busy */
|
||||||
|
0U /* Error_Connect */
|
||||||
|
}; /* ActuatorCmdBusInput ground */
|
||||||
|
|
||||||
|
const CmdBusStatus HVAC_model_rtZCmdBusStatus = {
|
||||||
|
0, /* Battery */
|
||||||
|
0, /* AMB */
|
||||||
|
0, /* Incar_FL */
|
||||||
|
0, /* Incar_FR */
|
||||||
|
0, /* Incar_RL */
|
||||||
|
0, /* Incar_RR */
|
||||||
|
0, /* Eva_F */
|
||||||
|
0, /* Eva_R */
|
||||||
|
0, /* Pressure */
|
||||||
|
0, /* Duct_FL_Upper */
|
||||||
|
0, /* Duct_FL_Lower */
|
||||||
|
0, /* Duct_FR_Upper */
|
||||||
|
0, /* Duct_FR_Lower */
|
||||||
|
0, /* Duct_RL */
|
||||||
|
0, /* Duct_RR */
|
||||||
|
0, /* Duct_Side_FL */
|
||||||
|
0, /* Duct_Side_FR */
|
||||||
|
0, /* Duct_Side_RL */
|
||||||
|
0, /* Duct_Side_RR */
|
||||||
|
0 /* AQS */
|
||||||
|
}; /* CmdBusStatus ground */
|
||||||
|
|
||||||
|
const ActuatorCmdBus HVAC_model_rtZActuatorCmdBus = {
|
||||||
|
{
|
||||||
|
0U, 0U, 0U, 0U, 0U, 0U, 0U, 0U, 0U }
|
||||||
|
, /* POS */
|
||||||
|
|
||||||
|
{
|
||||||
|
0U, 0U, 0U, 0U, 0U, 0U, 0U, 0U, 0U }
|
||||||
|
, /* BUS_ADR */
|
||||||
|
|
||||||
|
{
|
||||||
|
0U, 0U, 0U, 0U, 0U, 0U, 0U, 0U, 0U }
|
||||||
|
, /* MODE */
|
||||||
|
|
||||||
|
{
|
||||||
|
0U, 0U, 0U, 0U, 0U, 0U, 0U, 0U, 0U }
|
||||||
|
, /* COM */
|
||||||
|
|
||||||
|
{
|
||||||
|
0U, 0U, 0U, 0U, 0U, 0U, 0U, 0U, 0U }
|
||||||
|
, /* Stall_SET */
|
||||||
|
|
||||||
|
{
|
||||||
|
0U, 0U, 0U, 0U, 0U, 0U, 0U, 0U, 0U }
|
||||||
|
, /* Lnoise_SET */
|
||||||
|
|
||||||
|
{
|
||||||
|
0U, 0U, 0U, 0U, 0U, 0U, 0U, 0U, 0U }
|
||||||
|
, /* Autos_SET */
|
||||||
|
|
||||||
|
{
|
||||||
|
0U, 0U, 0U, 0U, 0U, 0U, 0U, 0U, 0U }
|
||||||
|
, /* Speed_SET */
|
||||||
|
|
||||||
|
{
|
||||||
|
0U, 0U, 0U, 0U, 0U, 0U, 0U, 0U, 0U }
|
||||||
|
/* Coils_Stop_SET */
|
||||||
|
}; /* ActuatorCmdBus ground */
|
||||||
|
|
||||||
|
const CmdBusPWMGet HVAC_model_rtZCmdBusPWMGet = {
|
||||||
|
0U, /* pwmPercentFront */
|
||||||
|
0U, /* pwmPercentRear */
|
||||||
|
0U, /* pwmPercentFrontReserved */
|
||||||
|
0U /* pwmPercentRearReserved */
|
||||||
|
}; /* CmdBusPWMGet ground */
|
||||||
|
|
||||||
/* Exported block states */
|
/* Exported block states */
|
||||||
ActuatorCmdBusInput Actuator_Ch1_Status_Model;/* '<Root>/Data Store Memory62' */
|
ActuatorCmdBusInput Actuator_Ch1_Status_Model;/* '<Root>/Data Store Memory62' */
|
||||||
ActuatorCmdBusInput Actuator_Ch2_Status_Model;/* '<Root>/Data Store Memory63' */
|
ActuatorCmdBusInput Actuator_Ch2_Status_Model;/* '<Root>/Data Store Memory63' */
|
||||||
|
|
@ -7806,7 +7941,7 @@ void HVAC_model_step(void)
|
||||||
* Merge: '<S8>/Merge'
|
* Merge: '<S8>/Merge'
|
||||||
*/
|
*/
|
||||||
rtb_u_cuz = look2_iu8bu8s16lu64n32_binlcse(rtB.Merge_b, rtb_Gain_l,
|
rtb_u_cuz = look2_iu8bu8s16lu64n32_binlcse(rtB.Merge_b, rtb_Gain_l,
|
||||||
rtConstP.pooled59, rtConstP.pooled28, rtb_get_modes_for_levels,
|
rtConstP.pooled60, rtConstP.pooled28, rtb_get_modes_for_levels,
|
||||||
rtConstP.pooled22, 6U);
|
rtConstP.pooled22, 6U);
|
||||||
|
|
||||||
/* MATLAB Function: '<S9>/Íà÷àëüíûå ïîëîæåíèÿ çàñëîíîê left' */
|
/* MATLAB Function: '<S9>/Íà÷àëüíûå ïîëîæåíèÿ çàñëîíîê left' */
|
||||||
|
|
@ -7914,7 +8049,7 @@ void HVAC_model_step(void)
|
||||||
* Merge: '<S8>/Merge'
|
* Merge: '<S8>/Merge'
|
||||||
*/
|
*/
|
||||||
rtb_u_cuz = look2_iu8bu8s16lu64n32_binlcse(rtB.Merge_b, rtb_Gain2,
|
rtb_u_cuz = look2_iu8bu8s16lu64n32_binlcse(rtB.Merge_b, rtb_Gain2,
|
||||||
rtConstP.pooled59, rtConstP.pooled28, rtb_get_modes_for_levels,
|
rtConstP.pooled60, rtConstP.pooled28, rtb_get_modes_for_levels,
|
||||||
rtConstP.pooled22, 6U);
|
rtConstP.pooled22, 6U);
|
||||||
|
|
||||||
/* MATLAB Function: '<S9>/Íà÷àëüíûå ïîëîæåíèÿ çàñëîíîê right' */
|
/* MATLAB Function: '<S9>/Íà÷àëüíûå ïîëîæåíèÿ çàñëîíîê right' */
|
||||||
|
|
@ -8078,13 +8213,25 @@ void HVAC_model_step(void)
|
||||||
* ActionPort: '<S441>/Action Port'
|
* ActionPort: '<S441>/Action Port'
|
||||||
*/
|
*/
|
||||||
for (i = 0; i < 9; i++) {
|
for (i = 0; i < 9; i++) {
|
||||||
|
/* Switch: '<S441>/Switch' incorporates:
|
||||||
|
* Constant: '<S441>/Constant1'
|
||||||
|
* Constant: '<S441>/Constant4'
|
||||||
|
* DataStoreRead: '<S441>/Data Store Read1'
|
||||||
|
* DataStoreWrite: '<S441>/Data Store Write7'
|
||||||
|
*/
|
||||||
|
if (rtDW.ErrorCalibration_private[i] != 0) {
|
||||||
|
rtDW.BUS_ADR_private[i] = rtConstP.pooled51[i];
|
||||||
|
} else {
|
||||||
|
rtDW.BUS_ADR_private[i] = 0U;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* End of Switch: '<S441>/Switch' */
|
||||||
|
|
||||||
|
/* DataStoreWrite: '<S441>/Data Store Write1' */
|
||||||
|
rtDW.COM_private[i] = 1U;
|
||||||
|
|
||||||
/* DataStoreWrite: '<S441>/Data Store Write' */
|
/* DataStoreWrite: '<S441>/Data Store Write' */
|
||||||
rtDW.MODE_private[i] = 2U;
|
rtDW.MODE_private[i] = 2U;
|
||||||
|
|
||||||
/* DataStoreWrite: '<S441>/Data Store Write1' incorporates:
|
|
||||||
* DataStoreRead: '<S441>/Data Store Read'
|
|
||||||
*/
|
|
||||||
rtDW.COM_private[i] = rtDW.ErrorCalibration_private[i];
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Merge: '<S381>/Merge' incorporates:
|
/* Merge: '<S381>/Merge' incorporates:
|
||||||
|
|
@ -8128,11 +8275,22 @@ void HVAC_model_step(void)
|
||||||
/* DataStoreWrite: '<S429>/Data Store Write' */
|
/* DataStoreWrite: '<S429>/Data Store Write' */
|
||||||
rtDW.POS_private[i] = 6000U;
|
rtDW.POS_private[i] = 6000U;
|
||||||
|
|
||||||
/* Product: '<S429>/Divide' incorporates:
|
/* DataStoreWrite: '<S429>/Data Store Write1' */
|
||||||
* DataStoreRead: '<S429>/Data Store Read'
|
rtDW.COM_private[i] = 2U;
|
||||||
* DataStoreWrite: '<S429>/Data Store Write1'
|
|
||||||
|
/* Switch: '<S429>/Switch' incorporates:
|
||||||
|
* Constant: '<S429>/Constant3'
|
||||||
|
* Constant: '<S429>/Constant4'
|
||||||
|
* DataStoreRead: '<S429>/Data Store Read1'
|
||||||
|
* DataStoreWrite: '<S429>/Data Store Write7'
|
||||||
*/
|
*/
|
||||||
rtDW.COM_private[i] = (uint8_t)(rtDW.ErrorCalibration_private[i] << 1);
|
if (rtDW.ErrorCalibration_private[i] != 0) {
|
||||||
|
rtDW.BUS_ADR_private[i] = rtConstP.pooled51[i];
|
||||||
|
} else {
|
||||||
|
rtDW.BUS_ADR_private[i] = 0U;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* End of Switch: '<S429>/Switch' */
|
||||||
}
|
}
|
||||||
|
|
||||||
/* MATLAB Function: '<S429>/Initial CPOS Min' incorporates:
|
/* MATLAB Function: '<S429>/Initial CPOS Min' incorporates:
|
||||||
|
|
@ -8189,13 +8347,25 @@ void HVAC_model_step(void)
|
||||||
* ActionPort: '<S438>/Action Port'
|
* ActionPort: '<S438>/Action Port'
|
||||||
*/
|
*/
|
||||||
for (i = 0; i < 9; i++) {
|
for (i = 0; i < 9; i++) {
|
||||||
|
/* Switch: '<S438>/Switch' incorporates:
|
||||||
|
* Constant: '<S438>/Constant1'
|
||||||
|
* Constant: '<S438>/Constant4'
|
||||||
|
* DataStoreRead: '<S438>/Data Store Read1'
|
||||||
|
* DataStoreWrite: '<S438>/Data Store Write7'
|
||||||
|
*/
|
||||||
|
if (rtDW.ErrorCalibration_private[i] != 0) {
|
||||||
|
rtDW.BUS_ADR_private[i] = rtConstP.pooled51[i];
|
||||||
|
} else {
|
||||||
|
rtDW.BUS_ADR_private[i] = 0U;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* End of Switch: '<S438>/Switch' */
|
||||||
|
|
||||||
/* DataStoreWrite: '<S438>/Data Store Write' */
|
/* DataStoreWrite: '<S438>/Data Store Write' */
|
||||||
rtDW.MODE_private[i] = 0U;
|
rtDW.MODE_private[i] = 0U;
|
||||||
|
|
||||||
/* DataStoreWrite: '<S438>/Data Store Write1' incorporates:
|
/* DataStoreWrite: '<S438>/Data Store Write1' */
|
||||||
* DataStoreRead: '<S438>/Data Store Read'
|
rtDW.COM_private[i] = 1U;
|
||||||
*/
|
|
||||||
rtDW.COM_private[i] = rtDW.ErrorCalibration_private[i];
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/* MATLAB Function: '<S438>/Normal Mode' incorporates:
|
/* MATLAB Function: '<S438>/Normal Mode' incorporates:
|
||||||
|
|
@ -8275,15 +8445,27 @@ void HVAC_model_step(void)
|
||||||
*/
|
*/
|
||||||
rtDW.Speed_private[i] = 3U;
|
rtDW.Speed_private[i] = 3U;
|
||||||
|
|
||||||
|
/* Switch: '<S435>/Switch' incorporates:
|
||||||
|
* Constant: '<S435>/Constant3'
|
||||||
|
* Constant: '<S435>/Constant4'
|
||||||
|
* DataStoreRead: '<S435>/Data Store Read'
|
||||||
|
* DataStoreWrite: '<S435>/Data Store Write7'
|
||||||
|
*/
|
||||||
|
if (rtDW.ErrorCalibration_private[i] != 0) {
|
||||||
|
rtDW.BUS_ADR_private[i] = rtConstP.pooled51[i];
|
||||||
|
} else {
|
||||||
|
rtDW.BUS_ADR_private[i] = 0U;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* End of Switch: '<S435>/Switch' */
|
||||||
|
|
||||||
/* DataStoreWrite: '<S435>/Data Store Write' */
|
/* DataStoreWrite: '<S435>/Data Store Write' */
|
||||||
rtDW.POS_private[i] = 0U;
|
rtDW.POS_private[i] = 0U;
|
||||||
|
|
||||||
/* Product: '<S435>/Divide' incorporates:
|
/* DataStoreWrite: '<S435>/Data Store Write1' incorporates:
|
||||||
* Constant: '<S435>/Constant9'
|
* Constant: '<S435>/Constant9'
|
||||||
* DataStoreRead: '<S435>/Data Store Read'
|
|
||||||
* DataStoreWrite: '<S435>/Data Store Write1'
|
|
||||||
*/
|
*/
|
||||||
rtDW.COM_private[i] = (uint8_t)(rtDW.ErrorCalibration_private[i] * 3U);
|
rtDW.COM_private[i] = 3U;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* MATLAB Function: '<S435>/Move to position Min' incorporates:
|
/* MATLAB Function: '<S435>/Move to position Min' incorporates:
|
||||||
|
|
@ -8334,7 +8516,6 @@ void HVAC_model_step(void)
|
||||||
* Logic: '<S385>/Logical Operator2'
|
* Logic: '<S385>/Logical Operator2'
|
||||||
* RelationalOperator: '<S385>/Relational Operator'
|
* RelationalOperator: '<S385>/Relational Operator'
|
||||||
* RelationalOperator: '<S385>/Relational Operator1'
|
* RelationalOperator: '<S385>/Relational Operator1'
|
||||||
* SignalConversion generated from: '<S381>/Bus Selector'
|
|
||||||
*/
|
*/
|
||||||
for (i = 0; i < 9; i++) {
|
for (i = 0; i < 9; i++) {
|
||||||
rtb_LogicalOperator3_c[i] =
|
rtb_LogicalOperator3_c[i] =
|
||||||
|
|
@ -8372,7 +8553,6 @@ void HVAC_model_step(void)
|
||||||
for (i = 0; i < 9; i++) {
|
for (i = 0; i < 9; i++) {
|
||||||
/* Switch: '<S397>/Switch' incorporates:
|
/* Switch: '<S397>/Switch' incorporates:
|
||||||
* DataStoreRead: '<S397>/Data Store Read1'
|
* DataStoreRead: '<S397>/Data Store Read1'
|
||||||
* SignalConversion generated from: '<S381>/Bus Selector'
|
|
||||||
*/
|
*/
|
||||||
if (rtDW.ErrorCalibration_private[i] != 0) {
|
if (rtDW.ErrorCalibration_private[i] != 0) {
|
||||||
rtDW.MinPositionCh0_private[i] =
|
rtDW.MinPositionCh0_private[i] =
|
||||||
|
|
@ -8392,7 +8572,6 @@ void HVAC_model_step(void)
|
||||||
|
|
||||||
/* MATLAB Function: '<S397>/MIN POSITION' incorporates:
|
/* MATLAB Function: '<S397>/MIN POSITION' incorporates:
|
||||||
* DataStoreRead: '<S397>/Data Store Read3'
|
* DataStoreRead: '<S397>/Data Store Read3'
|
||||||
* SignalConversion generated from: '<S381>/Bus Selector'
|
|
||||||
*/
|
*/
|
||||||
/* : y = step; */
|
/* : y = step; */
|
||||||
/* : if(LOGGER==2) */
|
/* : if(LOGGER==2) */
|
||||||
|
|
@ -8446,11 +8625,22 @@ void HVAC_model_step(void)
|
||||||
* ActionPort: '<S426>/Action Port'
|
* ActionPort: '<S426>/Action Port'
|
||||||
*/
|
*/
|
||||||
for (i = 0; i < 9; i++) {
|
for (i = 0; i < 9; i++) {
|
||||||
/* Product: '<S426>/Divide' incorporates:
|
/* Switch: '<S426>/Switch' incorporates:
|
||||||
* DataStoreRead: '<S426>/Data Store Read'
|
* Constant: '<S426>/Constant1'
|
||||||
* DataStoreWrite: '<S426>/Data Store Write1'
|
* Constant: '<S426>/Constant2'
|
||||||
|
* DataStoreRead: '<S426>/Data Store Read1'
|
||||||
|
* DataStoreWrite: '<S426>/Data Store Write7'
|
||||||
*/
|
*/
|
||||||
rtDW.COM_private[i] = (uint8_t)(rtDW.ErrorCalibration_private[i] << 1);
|
if (rtDW.ErrorCalibration_private[i] != 0) {
|
||||||
|
rtDW.BUS_ADR_private[i] = rtConstP.pooled51[i];
|
||||||
|
} else {
|
||||||
|
rtDW.BUS_ADR_private[i] = 0U;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* End of Switch: '<S426>/Switch' */
|
||||||
|
|
||||||
|
/* DataStoreWrite: '<S426>/Data Store Write1' */
|
||||||
|
rtDW.COM_private[i] = 2U;
|
||||||
|
|
||||||
/* DataStoreWrite: '<S426>/Data Store Write' */
|
/* DataStoreWrite: '<S426>/Data Store Write' */
|
||||||
rtDW.POS_private[i] = 1U;
|
rtDW.POS_private[i] = 1U;
|
||||||
|
|
@ -8533,15 +8723,27 @@ void HVAC_model_step(void)
|
||||||
*/
|
*/
|
||||||
rtDW.Speed_private[i] = 3U;
|
rtDW.Speed_private[i] = 3U;
|
||||||
|
|
||||||
|
/* Switch: '<S432>/Switch' incorporates:
|
||||||
|
* Constant: '<S432>/Constant3'
|
||||||
|
* Constant: '<S432>/Constant4'
|
||||||
|
* DataStoreRead: '<S432>/Data Store Read1'
|
||||||
|
* DataStoreWrite: '<S432>/Data Store Write7'
|
||||||
|
*/
|
||||||
|
if (rtDW.ErrorCalibration_private[i] != 0) {
|
||||||
|
rtDW.BUS_ADR_private[i] = rtConstP.pooled51[i];
|
||||||
|
} else {
|
||||||
|
rtDW.BUS_ADR_private[i] = 0U;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* End of Switch: '<S432>/Switch' */
|
||||||
|
|
||||||
/* DataStoreWrite: '<S432>/Data Store Write' */
|
/* DataStoreWrite: '<S432>/Data Store Write' */
|
||||||
rtDW.POS_private[i] = 6000U;
|
rtDW.POS_private[i] = 6000U;
|
||||||
|
|
||||||
/* Product: '<S432>/Divide' incorporates:
|
/* DataStoreWrite: '<S432>/Data Store Write1' incorporates:
|
||||||
* Constant: '<S432>/Constant9'
|
* Constant: '<S432>/Constant9'
|
||||||
* DataStoreRead: '<S432>/Data Store Read'
|
|
||||||
* DataStoreWrite: '<S432>/Data Store Write1'
|
|
||||||
*/
|
*/
|
||||||
rtDW.COM_private[i] = (uint8_t)(rtDW.ErrorCalibration_private[i] * 3U);
|
rtDW.COM_private[i] = 3U;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* MATLAB Function: '<S432>/Move to position Max' incorporates:
|
/* MATLAB Function: '<S432>/Move to position Max' incorporates:
|
||||||
|
|
@ -8592,7 +8794,6 @@ void HVAC_model_step(void)
|
||||||
* Logic: '<S384>/Logical Operator2'
|
* Logic: '<S384>/Logical Operator2'
|
||||||
* RelationalOperator: '<S384>/Relational Operator'
|
* RelationalOperator: '<S384>/Relational Operator'
|
||||||
* RelationalOperator: '<S384>/Relational Operator1'
|
* RelationalOperator: '<S384>/Relational Operator1'
|
||||||
* SignalConversion generated from: '<S381>/Bus Selector'
|
|
||||||
*/
|
*/
|
||||||
for (i = 0; i < 9; i++) {
|
for (i = 0; i < 9; i++) {
|
||||||
rtb_LogicalOperator3_c[i] =
|
rtb_LogicalOperator3_c[i] =
|
||||||
|
|
@ -8630,7 +8831,6 @@ void HVAC_model_step(void)
|
||||||
for (i = 0; i < 9; i++) {
|
for (i = 0; i < 9; i++) {
|
||||||
/* Switch: '<S394>/Switch' incorporates:
|
/* Switch: '<S394>/Switch' incorporates:
|
||||||
* DataStoreRead: '<S394>/Data Store Read1'
|
* DataStoreRead: '<S394>/Data Store Read1'
|
||||||
* SignalConversion generated from: '<S381>/Bus Selector'
|
|
||||||
*/
|
*/
|
||||||
if (rtDW.ErrorCalibration_private[i] != 0) {
|
if (rtDW.ErrorCalibration_private[i] != 0) {
|
||||||
rtDW.MaxPositionCh0_private[i] =
|
rtDW.MaxPositionCh0_private[i] =
|
||||||
|
|
@ -8650,7 +8850,6 @@ void HVAC_model_step(void)
|
||||||
|
|
||||||
/* MATLAB Function: '<S394>/MIN POSITION' incorporates:
|
/* MATLAB Function: '<S394>/MIN POSITION' incorporates:
|
||||||
* DataStoreRead: '<S394>/Data Store Read2'
|
* DataStoreRead: '<S394>/Data Store Read2'
|
||||||
* SignalConversion generated from: '<S381>/Bus Selector'
|
|
||||||
*/
|
*/
|
||||||
/* : y = step; */
|
/* : y = step; */
|
||||||
/* : if(LOGGER==2) */
|
/* : if(LOGGER==2) */
|
||||||
|
|
@ -13153,6 +13352,28 @@ void HVAC_model_step(void)
|
||||||
/* Model initialize function */
|
/* Model initialize function */
|
||||||
void HVAC_model_initialize(void)
|
void HVAC_model_initialize(void)
|
||||||
{
|
{
|
||||||
|
/* Registration code */
|
||||||
|
|
||||||
|
/* initialize error status */
|
||||||
|
rtmSetErrorStatus(rtM, (NULL));
|
||||||
|
|
||||||
|
/* block I/O */
|
||||||
|
(void) memset(((void *) &rtB), 0,
|
||||||
|
sizeof(B));
|
||||||
|
|
||||||
|
/* states (dwork) */
|
||||||
|
(void) memset((void *)&rtDW, 0,
|
||||||
|
sizeof(DW));
|
||||||
|
|
||||||
|
/* exported global states */
|
||||||
|
Actuator_Ch1_Status_Model = HVAC_model_rtZActuatorCmdBusInput;
|
||||||
|
Actuator_Ch2_Status_Model = HVAC_model_rtZActuatorCmdBusInput;
|
||||||
|
Actuator_Ch0_Status_Model = HVAC_model_rtZActuatorCmdBusInput;
|
||||||
|
Actuator_Ch0_Command_Model = HVAC_model_rtZActuatorCmdBus;
|
||||||
|
Status_Sensor_Model = HVAC_model_rtZCmdBusStatus;
|
||||||
|
CCU_Errors_Model = HVAC_model_rtZCmdBusError;
|
||||||
|
PWM_Get = HVAC_model_rtZCmdBusPWMGet;
|
||||||
|
|
||||||
{
|
{
|
||||||
int32_t i;
|
int32_t i;
|
||||||
|
|
||||||
|
|
@ -13174,6 +13395,38 @@ void HVAC_model_initialize(void)
|
||||||
|
|
||||||
/* Start for DataStoreMemory: '<Root>/Data Store Memory5' */
|
/* Start for DataStoreMemory: '<Root>/Data Store Memory5' */
|
||||||
rtDW.t_now = 10U;
|
rtDW.t_now = 10U;
|
||||||
|
|
||||||
|
/* SystemInitialize for Merge: '<S8>/Merge' */
|
||||||
|
rtB.Merge_b = 0U;
|
||||||
|
|
||||||
|
/* SystemInitialize for MATLAB Function: '<S8>/Log Ambient Lv' */
|
||||||
|
rtDW.current_Ambient_Lv_not_empty = false;
|
||||||
|
|
||||||
|
/* SystemInitialize for IfAction SubSystem: '<S381>/Homing' */
|
||||||
|
/* SystemInitialize for Merge: '<S386>/Merge' */
|
||||||
|
rtB.Merge_h1 = 0;
|
||||||
|
|
||||||
|
/* End of SystemInitialize for SubSystem: '<S381>/Homing' */
|
||||||
|
|
||||||
|
/* SystemInitialize for Merge: '<S381>/Merge' */
|
||||||
|
rtB.Merge_l = 0;
|
||||||
|
|
||||||
|
/* SystemInitialize for IfAction SubSystem: '<S6>/Start Control Front' */
|
||||||
|
/* SystemInitialize for Merge: '<S448>/Merge' */
|
||||||
|
rtB.Merge_h = 0;
|
||||||
|
|
||||||
|
/* End of SystemInitialize for SubSystem: '<S6>/Start Control Front' */
|
||||||
|
|
||||||
|
/* SystemInitialize for IfAction SubSystem: '<S6>/Start Control Rear' */
|
||||||
|
/* SystemInitialize for Merge: '<S449>/Merge' */
|
||||||
|
rtB.Merge_c = 0;
|
||||||
|
|
||||||
|
/* End of SystemInitialize for SubSystem: '<S6>/Start Control Rear' */
|
||||||
|
|
||||||
|
/* SystemInitialize for Test Sequence: '<Root>/Test Sequence' */
|
||||||
|
rtDW.temporalCounter_i1 = 0U;
|
||||||
|
rtDW.is_active_c371_HVAC_model = 0U;
|
||||||
|
rtDW.is_c371_HVAC_model = IN_NO_ACTIVE_CHILD;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
31
HVAC_model.h
31
HVAC_model.h
|
|
@ -3,9 +3,9 @@
|
||||||
*
|
*
|
||||||
* Code generated for Simulink model 'HVAC_model'.
|
* Code generated for Simulink model 'HVAC_model'.
|
||||||
*
|
*
|
||||||
* Model version : 1.784
|
* Model version : 1.786
|
||||||
* Simulink Coder version : 24.1 (R2024a) 19-Nov-2023
|
* Simulink Coder version : 24.1 (R2024a) 19-Nov-2023
|
||||||
* C/C++ source code generated on : Tue Apr 14 14:42:16 2026
|
* C/C++ source code generated on : Tue Apr 14 17:41:03 2026
|
||||||
*
|
*
|
||||||
* Target selection: ert.tlc
|
* Target selection: ert.tlc
|
||||||
* Embedded hardware selection: ARM Compatible->ARM Cortex-M
|
* Embedded hardware selection: ARM Compatible->ARM Cortex-M
|
||||||
|
|
@ -25,6 +25,8 @@
|
||||||
#endif /* HVAC_model_COMMON_INCLUDES_ */
|
#endif /* HVAC_model_COMMON_INCLUDES_ */
|
||||||
|
|
||||||
#include "HVAC_model_types.h"
|
#include "HVAC_model_types.h"
|
||||||
|
#include <stddef.h>
|
||||||
|
#include <string.h>
|
||||||
|
|
||||||
/* Macros for accessing real-time model data structure */
|
/* Macros for accessing real-time model data structure */
|
||||||
#ifndef rtmGetErrorStatus
|
#ifndef rtmGetErrorStatus
|
||||||
|
|
@ -286,12 +288,23 @@ typedef struct {
|
||||||
*/
|
*/
|
||||||
uint16_t ACT1_Value[9];
|
uint16_t ACT1_Value[9];
|
||||||
|
|
||||||
|
/* Pooled Parameter (Expression: [1 2 3 4 5 6 7 8 9])
|
||||||
|
* Referenced by:
|
||||||
|
* '<S426>/Constant1'
|
||||||
|
* '<S429>/Constant3'
|
||||||
|
* '<S432>/Constant3'
|
||||||
|
* '<S435>/Constant3'
|
||||||
|
* '<S438>/Constant1'
|
||||||
|
* '<S441>/Constant1'
|
||||||
|
*/
|
||||||
|
uint8_t pooled51[9];
|
||||||
|
|
||||||
/* Pooled Parameter (Expression: )
|
/* Pooled Parameter (Expression: )
|
||||||
* Referenced by:
|
* Referenced by:
|
||||||
* '<S9>/Âûáîð ðåæèìà Left'
|
* '<S9>/Âûáîð ðåæèìà Left'
|
||||||
* '<S9>/Âûáîð ðåæèìà Right'
|
* '<S9>/Âûáîð ðåæèìà Right'
|
||||||
*/
|
*/
|
||||||
uint8_t pooled59[6];
|
uint8_t pooled60[6];
|
||||||
} ConstP;
|
} ConstP;
|
||||||
|
|
||||||
/* External outputs (root outports fed by signals with default storage) */
|
/* External outputs (root outports fed by signals with default storage) */
|
||||||
|
|
@ -314,6 +327,13 @@ extern DW rtDW;
|
||||||
/* External outputs (root outports fed by signals with default storage) */
|
/* External outputs (root outports fed by signals with default storage) */
|
||||||
extern ExtY rtY;
|
extern ExtY rtY;
|
||||||
|
|
||||||
|
/* External data declarations for dependent source files */
|
||||||
|
extern const CmdBusError HVAC_model_rtZCmdBusError;/* CmdBusError ground */
|
||||||
|
extern const ActuatorCmdBusInput HVAC_model_rtZActuatorCmdBusInput;/* ActuatorCmdBusInput ground */
|
||||||
|
extern const CmdBusStatus HVAC_model_rtZCmdBusStatus;/* CmdBusStatus ground */
|
||||||
|
extern const ActuatorCmdBus HVAC_model_rtZActuatorCmdBus;/* ActuatorCmdBus ground */
|
||||||
|
extern const CmdBusPWMGet HVAC_model_rtZCmdBusPWMGet;/* CmdBusPWMGet ground */
|
||||||
|
|
||||||
/* Constant parameters (default storage) */
|
/* Constant parameters (default storage) */
|
||||||
extern const ConstP rtConstP;
|
extern const ConstP rtConstP;
|
||||||
|
|
||||||
|
|
@ -767,10 +787,6 @@ extern RT_MODEL *const rtM;
|
||||||
* Block '<S287>/Display1' : Unused code path elimination
|
* Block '<S287>/Display1' : Unused code path elimination
|
||||||
* Block '<S374>/Display' : Unused code path elimination
|
* Block '<S374>/Display' : Unused code path elimination
|
||||||
* Block '<S374>/Display1' : Unused code path elimination
|
* Block '<S374>/Display1' : Unused code path elimination
|
||||||
* Block '<S397>/Display' : Unused code path elimination
|
|
||||||
* Block '<S397>/Display1' : Unused code path elimination
|
|
||||||
* Block '<S397>/Display2' : Unused code path elimination
|
|
||||||
* Block '<S397>/Display3' : Unused code path elimination
|
|
||||||
* Block '<S381>/Display' : Unused code path elimination
|
* Block '<S381>/Display' : Unused code path elimination
|
||||||
* Block '<S381>/Display1' : Unused code path elimination
|
* Block '<S381>/Display1' : Unused code path elimination
|
||||||
* Block '<S381>/Display2' : Unused code path elimination
|
* Block '<S381>/Display2' : Unused code path elimination
|
||||||
|
|
@ -798,7 +814,6 @@ extern RT_MODEL *const rtM;
|
||||||
* Block '<S419>/Display' : Unused code path elimination
|
* Block '<S419>/Display' : Unused code path elimination
|
||||||
* Block '<S388>/Display' : Unused code path elimination
|
* Block '<S388>/Display' : Unused code path elimination
|
||||||
* Block '<S388>/Display3' : Unused code path elimination
|
* Block '<S388>/Display3' : Unused code path elimination
|
||||||
* Block '<S429>/Display' : Unused code path elimination
|
|
||||||
* Block '<S391>/Display' : Unused code path elimination
|
* Block '<S391>/Display' : Unused code path elimination
|
||||||
* Block '<S6>/Display' : Unused code path elimination
|
* Block '<S6>/Display' : Unused code path elimination
|
||||||
* Block '<S6>/Display1' : Unused code path elimination
|
* Block '<S6>/Display1' : Unused code path elimination
|
||||||
|
|
|
||||||
|
|
@ -3,9 +3,9 @@
|
||||||
*
|
*
|
||||||
* Code generated for Simulink model 'HVAC_model'.
|
* Code generated for Simulink model 'HVAC_model'.
|
||||||
*
|
*
|
||||||
* Model version : 1.784
|
* Model version : 1.786
|
||||||
* Simulink Coder version : 24.1 (R2024a) 19-Nov-2023
|
* Simulink Coder version : 24.1 (R2024a) 19-Nov-2023
|
||||||
* C/C++ source code generated on : Tue Apr 14 14:42:16 2026
|
* C/C++ source code generated on : Tue Apr 14 17:41:03 2026
|
||||||
*
|
*
|
||||||
* Target selection: ert.tlc
|
* Target selection: ert.tlc
|
||||||
* Embedded hardware selection: ARM Compatible->ARM Cortex-M
|
* Embedded hardware selection: ARM Compatible->ARM Cortex-M
|
||||||
|
|
@ -598,6 +598,17 @@ const ConstP rtConstP = {
|
||||||
*/
|
*/
|
||||||
{ 1050U, 1250U, 1195U, 1315U, 1300U, 1485U, 1440U, 1195U, 1175U },
|
{ 1050U, 1250U, 1195U, 1315U, 1300U, 1485U, 1440U, 1195U, 1175U },
|
||||||
|
|
||||||
|
/* Pooled Parameter (Expression: [1 2 3 4 5 6 7 8 9])
|
||||||
|
* Referenced by:
|
||||||
|
* '<S426>/Constant1'
|
||||||
|
* '<S429>/Constant3'
|
||||||
|
* '<S432>/Constant3'
|
||||||
|
* '<S435>/Constant3'
|
||||||
|
* '<S438>/Constant1'
|
||||||
|
* '<S441>/Constant1'
|
||||||
|
*/
|
||||||
|
{ 1U, 2U, 3U, 4U, 5U, 6U, 7U, 8U, 9U },
|
||||||
|
|
||||||
/* Pooled Parameter (Expression: )
|
/* Pooled Parameter (Expression: )
|
||||||
* Referenced by:
|
* Referenced by:
|
||||||
* '<S9>/Âûáîð ðåæèìà Left'
|
* '<S9>/Âûáîð ðåæèìà Left'
|
||||||
|
|
|
||||||
|
|
@ -3,9 +3,9 @@
|
||||||
*
|
*
|
||||||
* Code generated for Simulink model 'HVAC_model'.
|
* Code generated for Simulink model 'HVAC_model'.
|
||||||
*
|
*
|
||||||
* Model version : 1.784
|
* Model version : 1.786
|
||||||
* Simulink Coder version : 24.1 (R2024a) 19-Nov-2023
|
* Simulink Coder version : 24.1 (R2024a) 19-Nov-2023
|
||||||
* C/C++ source code generated on : Tue Apr 14 14:42:16 2026
|
* C/C++ source code generated on : Tue Apr 14 17:41:03 2026
|
||||||
*
|
*
|
||||||
* Target selection: ert.tlc
|
* Target selection: ert.tlc
|
||||||
* Embedded hardware selection: ARM Compatible->ARM Cortex-M
|
* Embedded hardware selection: ARM Compatible->ARM Cortex-M
|
||||||
|
|
|
||||||
|
|
@ -3,9 +3,9 @@
|
||||||
*
|
*
|
||||||
* Code generated for Simulink model 'HVAC_model'.
|
* Code generated for Simulink model 'HVAC_model'.
|
||||||
*
|
*
|
||||||
* Model version : 1.784
|
* Model version : 1.786
|
||||||
* Simulink Coder version : 24.1 (R2024a) 19-Nov-2023
|
* Simulink Coder version : 24.1 (R2024a) 19-Nov-2023
|
||||||
* C/C++ source code generated on : Tue Apr 14 14:42:16 2026
|
* C/C++ source code generated on : Tue Apr 14 17:41:03 2026
|
||||||
*
|
*
|
||||||
* Target selection: ert.tlc
|
* Target selection: ert.tlc
|
||||||
* Embedded hardware selection: ARM Compatible->ARM Cortex-M
|
* Embedded hardware selection: ARM Compatible->ARM Cortex-M
|
||||||
|
|
|
||||||
30
Model_Task.c
30
Model_Task.c
|
|
@ -32,6 +32,14 @@ void ModelTask_Init(
|
||||||
|
|
||||||
static bool setActuatorBusy(tModelTask *env) {
|
static bool setActuatorBusy(tModelTask *env) {
|
||||||
|
|
||||||
|
if (env->triggerCommand1 == false){
|
||||||
|
|
||||||
|
int result = memcmp(&env->triggerActuatorCmdBus_1, &Actuator_Ch0_Command_Model, sizeof(ActuatorCmdBus));
|
||||||
|
|
||||||
|
if (result == 0) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
for (uint8_t i = 0; i < env->linTaskActuator1->LIN_ISSR_ALL; ++i) {
|
for (uint8_t i = 0; i < env->linTaskActuator1->LIN_ISSR_ALL; ++i) {
|
||||||
if (Actuator_Ch0_Command_Model.COM[i] != 0) {
|
if (Actuator_Ch0_Command_Model.COM[i] != 0) {
|
||||||
|
|
||||||
|
|
@ -39,11 +47,18 @@ static bool setActuatorBusy(tModelTask *env) {
|
||||||
|
|
||||||
memcpy(&env->triggerActuatorCmdBus_1, &Actuator_Ch0_Command_Model, sizeof(ActuatorCmdBus));
|
memcpy(&env->triggerActuatorCmdBus_1, &Actuator_Ch0_Command_Model, sizeof(ActuatorCmdBus));
|
||||||
|
|
||||||
|
#if (LOG_LIN_ACTUATOR == 1)
|
||||||
|
LoggerInfoStatic(LOGGER, LOG_SIGN, "ACT1: TRIGGERED COMMAND (SET BUSY)")
|
||||||
|
#endif
|
||||||
Actuator_Ch0_Status_Model.Busy = 1;
|
Actuator_Ch0_Status_Model.Busy = 1;
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
if (env->triggerCommand2 == false) {
|
||||||
|
|
||||||
for (uint8_t i = 0; i < env->linTaskActuator2->LIN_ISSR_ALL; ++i) {
|
for (uint8_t i = 0; i < env->linTaskActuator2->LIN_ISSR_ALL; ++i) {
|
||||||
if (Actuator_Ch1_Command_Model.COM[i] != 0) {
|
if (Actuator_Ch1_Command_Model.COM[i] != 0) {
|
||||||
|
|
||||||
|
|
@ -51,10 +66,18 @@ static bool setActuatorBusy(tModelTask *env) {
|
||||||
|
|
||||||
memcpy(&env->triggerActuatorCmdBus_2, &Actuator_Ch1_Command_Model, sizeof(ActuatorCmdBus));
|
memcpy(&env->triggerActuatorCmdBus_2, &Actuator_Ch1_Command_Model, sizeof(ActuatorCmdBus));
|
||||||
|
|
||||||
|
#if (LOG_LIN_ACTUATOR == 1)
|
||||||
|
LoggerInfoStatic(LOGGER, LOG_SIGN, "ACT2: TRIGGERED COMMAND (SET BUSY)")
|
||||||
|
#endif
|
||||||
|
|
||||||
Actuator_Ch1_Status_Model.Busy = 1;
|
Actuator_Ch1_Status_Model.Busy = 1;
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
if (env->triggerCommand3 == false) {
|
||||||
|
|
||||||
for (uint8_t i = 0; i < env->linTaskActuator3->LIN_ISSR_ALL; ++i) {
|
for (uint8_t i = 0; i < env->linTaskActuator3->LIN_ISSR_ALL; ++i) {
|
||||||
if (Actuator_Ch2_Command_Model.COM[i] != 0) {
|
if (Actuator_Ch2_Command_Model.COM[i] != 0) {
|
||||||
|
|
@ -63,11 +86,16 @@ static bool setActuatorBusy(tModelTask *env) {
|
||||||
|
|
||||||
memcpy(&env->triggerActuatorCmdBus_3, &Actuator_Ch2_Command_Model, sizeof(ActuatorCmdBus));
|
memcpy(&env->triggerActuatorCmdBus_3, &Actuator_Ch2_Command_Model, sizeof(ActuatorCmdBus));
|
||||||
|
|
||||||
|
#if (LOG_LIN_ACTUATOR == 1)
|
||||||
|
LoggerInfoStatic(LOGGER, LOG_SIGN, "ACT3: TRIGGERED COMMAND (SET BUSY)")
|
||||||
|
#endif
|
||||||
Actuator_Ch2_Status_Model.Busy = 1;
|
Actuator_Ch2_Status_Model.Busy = 1;
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
*/
|
*/
|
||||||
|
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -78,8 +106,8 @@ static _Noreturn void ModelTask_Thread(tModelTask *env) {
|
||||||
rtDW.t_now = SystemGetMs();
|
rtDW.t_now = SystemGetMs();
|
||||||
|
|
||||||
HVAC_model_step();
|
HVAC_model_step();
|
||||||
setActuatorBusy(env);
|
|
||||||
env->isUpdate = true;
|
env->isUpdate = true;
|
||||||
|
setActuatorBusy(env);
|
||||||
osMutexRelease(env->access);
|
osMutexRelease(env->access);
|
||||||
}
|
}
|
||||||
SystemDelayMs(100);
|
SystemDelayMs(100);
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue