Правки в задаче модели

This commit is contained in:
cfif 2026-08-26 14:09:19 +03:00
parent 23d7bef9a6
commit 75f09a30e2
1 changed files with 65 additions and 61 deletions

View File

@ -628,14 +628,13 @@ static _Noreturn void ModelTask_Thread(tModelTask *env) {
rtDW.t_now = SystemGetMs();
//начало--------------------------------------------------ВХОД МОДЕЛИ ADC----------------------------------------------
getCmdBusADCData(env->adc0Task, &rtDW.ADC_Data_Model);
getCmdBusADC2Data(env->adc1Task,(CmdBusADC2Data *) &rtDW.ADC_Data_Model.VN7008AJ_DIAG_FrontLINActuatorPowerDriverAB);
//конец--------------------------------------------------ВХОД МОДЕЛИ ADC------------------------------------------------
getCmdBusADC2Data(env->adc1Task,
(CmdBusADC2Data *) &rtDW.ADC_Data_Model.VN7008AJ_DIAG_FrontLINActuatorPowerDriverAB);
//начало--------------------------------------------------PWM-----------------------------------------------------------
//начало--------------------------------------------------ВХОД МОДЕЛИ PWM-----------------------------------------------
// PWM_Get.pwmPercentFront = env->pwms->pwmFrontCaptureIO.getPwm(env->pwms->pwmFrontCaptureIO.env);
// PWM_Get.pwmPercentRear = env->pwms->pwmRearCaptureIO.getPwm(env->pwms->pwmRearCaptureIO.env);
// PWM_Get.pwmPercentFrontReserved = env->pwms->pwmFrontCaptureIO.getPwm(
@ -645,54 +644,64 @@ static _Noreturn void ModelTask_Thread(tModelTask *env) {
// model_Status_Pwm_For_Model_input.Pwm_Front = PWM_Get.pwmPercentFront * 10;
// model_Status_Pwm_For_Model_input.Pwm_Rear = PWM_Get.pwmPercentRear * 10;
//конец--------------------------------------------------PWM------------------------------------------------------------
//конец--------------------------------------------------ВХОД МОДЕЛИ PWM------------------------------------------------
//начало--------------------------------------------------CAN-----------------------------------------------------------
//начало--------------------------------------------------ВХОД МОДЕЛИ CAN-----------------------------------------------
get_CanSpamReceiver(env->canSpamReceiver);
// Если был захват в UDS (подмена)
if (model_Status_Set_For_Model_output.EMS == 1) {
rtDW.CCUCAN_EMS_HVC_REQ_MSG_MODEL.EMS_eCompChiller_Req = model_Status_EMS_For_Model_output.EMS_Chiller_Req;
}
model_Status_EMS_For_Model_input.EMS_Chiller_Req = rtDW.CCUCAN_EMS_HVC_REQ_MSG_MODEL.EMS_eCompChiller_Req;
bool isT15 = rtDW.CCUCAN_BCM_VEH_STATE_model.BCM_T15_Stat;
//конец--------------------------------------------------CAN------------------------------------------------------------
//конец--------------------------------------------------ВХОД МОДЕЛИ CAN------------------------------------------------
//начало-------------------------------------------------ВХОД МОДЕЛИ SlEEP----------------------------------------------
//начало-------------------------------------------------SlEEP----------------------------------------------------------
memcpy((void *) &rtDW.CCU_STAT1_WAKEUP_MODEL, (void *) &CCU_STAT1_MODEL_SAVE,
sizeof(CmdCAN_CCU_STAT1_WakeUp_Bus));
memcpy((void *) &rtDW.CCU_STAT2_WAKEUP_MODEL, (void *) &CCU_STAT2_MODEL_SAVE,
sizeof(CmdCAN_CCU_STAT2_WakeUp_Bus));
memcpy((void *) &rtDW.CCU_STAT3_WAKEUP_MODEL, (void *) &CCU_STAT3_MODEL_SAVE,
sizeof(CmdCAN_CCU_STAT3_WakeUp_Bus));
memcpy((void *) &rtDW.CCU_STAT1_WAKEUP_MODEL, (void *) &CCU_STAT1_MODEL_SAVE, sizeof(CmdCAN_CCU_STAT1_WakeUp_Bus));
memcpy((void *) &rtDW.CCU_STAT2_WAKEUP_MODEL, (void *) &CCU_STAT2_MODEL_SAVE, sizeof(CmdCAN_CCU_STAT2_WakeUp_Bus));
memcpy((void *) &rtDW.CCU_STAT3_WAKEUP_MODEL, (void *) &CCU_STAT3_MODEL_SAVE, sizeof(CmdCAN_CCU_STAT3_WakeUp_Bus));
memcpy((void *) &rtDW.CCU_Msg1_WakeUp_model, (void *) &CCU_MSG1_MODEL_SAVE, sizeof(CCU_Msg1_WakeUp_Bus));
//конец--------------------------------------------------ВХОД МОДЕЛИ SLEEP----------------------------------------------
//конец--------------------------------------------------SLEEP----------------------------------------------------------
//начало-------------------------------------------------ВХОД МОДЕЛИ LIN4 LIN5------------------------------------------
Lin4_Output_Get_From_Model(env->lin4TaskSensor);
Lin5_Output_Get_From_Model(env->lin5TaskSensor);
//конец--------------------------------------------------ВХОД МОДЕЛИ LIN4 LIN5------------------------------------------
//ШАГ МОДЕЛИ------------------------------------------------------------------------------------------------------------
//ШАГ МОДЕЛИ------------------------------------------------------------------------------------------------------------
//ШАГ МОДЕЛИ------------------------------------------------------------------------------------------------------------
//ШАГ МОДЕЛИ------------------------------------------------------------------------------------------------------------
//ШАГ МОДЕЛИ------------------------------------------------------------------------------------------------------------
HVAC_model_step();
rtDW.sleep_model = 0;
//ШАГ МОДЕЛИ------------------------------------------------------------------------------------------------------------
//ШАГ МОДЕЛИ------------------------------------------------------------------------------------------------------------
//ШАГ МОДЕЛИ------------------------------------------------------------------------------------------------------------
//ШАГ МОДЕЛИ------------------------------------------------------------------------------------------------------------
//начало-------------------------------------------------ВЫХОД МОДЕЛИ ДЛЯ LIN5------------------------------------------
Lin5_Input_Set_From_Model(env->lin5TaskSensor);
//конец--------------------------------------------------ВЫХОД МОДЕЛИ ДЛЯ LIN5------------------------------------------
//начало-------------------------------------------------ВЫХОД МОДЕЛИ ДЛЯ UDS-------------------------------------------
CanUdsOutput_Get_Model(env->canUds);
//конец--------------------------------------------------ВЫХОД МОДЕЛИ ДЛЯ UDS-------------------------------------------
//начало-------------------------------------------------ВЫХОД МОДЕЛИ ДЛЯ LIN1, LIN2, LIN3------------------------------
setActuatorBusy(env);
//конец--------------------------------------------------ВЫХОД МОДЕЛИ ДЛЯ LIN1, LIN2, LIN3------------------------------
//начало--------------------------------------------------GPIO----------------------------------------------------------
//начало--------------------------------------------------ВЫХОД МОДЕЛИ ДЛЯ GPIO-----------------------------------------
// Включение 5V (1 - ВКЛ)
GpioPinSet(&env->gpios->power.SW5V_EN, rtY.PowerEnable_Model.SW5V_EN);
// Контроль напряжения борт-сети (1 - ВКЛ)
@ -707,6 +716,7 @@ static _Noreturn void ModelTask_Thread(tModelTask *env) {
env->PtcRelayDriver1_EN = rtY.PowerEnable_Model.PtcRelayDriver1_EN;
env->PtcRelayDriver2_EN = rtY.PowerEnable_Model.PtcRelayDriver2_EN;
// Для UDS (подмена)
if (model_Status_Set_For_Model_output.IO == 1) {
if (model_Status_IO_For_Model_output._2_Way_Valve == 0) {
@ -785,6 +795,7 @@ static _Noreturn void ModelTask_Thread(tModelTask *env) {
env->PtcRelayDriver2_EN);
}
// Для UDS
model_Status_IO_For_Model_input._2_Way_Valve = env->TwoWayValve_EN;
model_Status_IO_For_Model_input.IncarMotor_Front = env->Incar_Motor_Front_EN;
model_Status_IO_For_Model_input.IncarMotor_Rear = env->Incar_Motor_Rear_EN;
@ -795,7 +806,6 @@ static _Noreturn void ModelTask_Thread(tModelTask *env) {
model_Status_IO_For_Model_input.PTC_2 = env->PtcRelayDriver2_EN;
// GpioPinSet(&env->gpios->power.BTS4175SGAXUMA1_ReservePowerOutput.EN_ReservePower, rtY.PowerEnable_Model.EN_ReservePower);
GpioPinSet(&env->gpios->power.BTS4175SGAXUMA1_PowerReserve.EN_PowerReserve,
rtY.PowerEnable_Model.EN_PowerReserve);
@ -813,11 +823,11 @@ static _Noreturn void ModelTask_Thread(tModelTask *env) {
GpioPinSet(&env->gpios->power.BTS5120_2EKA_ShutoffValvePowerTXV.ShutOffTXV_EN_Diag, true);
GpioPinSet(&env->gpios->power.BTS5120_2EKA_ShutoffValvePowerTXV.ShutOffTXV2_EN,
rtY.PowerEnable_Model.ShutOffTXV2_EN);
//конец--------------------------------------------------GPIO-----------------------------------------------------------
//конец--------------------------------------------------ВЫХОД МОДЕЛИ ДЛЯ GPIO------------------------------------------
//начало--------------------------------------------------PWM-----------------------------------------------------------
//начало--------------------------------------------------ВЫХОД МОДЕЛИ ДЛЯ PWM------------------------------------------
if (model_Status_Set_For_Model_output.Pwm == 1) {
env->pwms->pwmFrontIo.setActivePercent(env->pwms->pwmFrontIo.env, model_Status_Pwm_For_Model_output.Pwm_Front / 10);
@ -836,18 +846,18 @@ static _Noreturn void ModelTask_Thread(tModelTask *env) {
env->pwms->pwmRearReservedIo.setActivePercent(env->pwms->pwmRearReservedIo.env,
rtY.PWM_Get_f.pwmPercentRearReserved);
}
//конец--------------------------------------------------PWM------------------------------------------------------------
//конец--------------------------------------------------ВЫХОД МОДЕЛИ ДЛЯ PWM-------------------------------------------
//начало-------------------------------------------------SlEEP----------------------------------------------------------
//начало-------------------------------------------------ВЫХОД МОДЕЛИ ДЛЯ SlEEP-----------------------------------------
if (isT15) {
memcpy((void *) &CCU_STAT1_MODEL_SAVE, &rtY.CCU_Stat1_model, sizeof(CmdCAN_CCU_STAT1_Bus));
memcpy((void *) &CCU_STAT2_MODEL_SAVE, &rtY.CCU_Stat2_model, sizeof(CmdCAN_CCU_STAT2_Bus));
memcpy((void *) &CCU_STAT3_MODEL_SAVE, &rtY.CCU_Stat3_model, sizeof(CmdCAN_CCU_STAT3_Bus));
memcpy((void *) &CCU_MSG1_MODEL_SAVE, &rtY.CCU_Msg1_model, sizeof(CCU_Msg1_Bus));
}
//конец--------------------------------------------------SLEEP----------------------------------------------------------
//конец--------------------------------------------------ВЫХОД МОДЕЛИ ДЛЯ SLEEP-----------------------------------------
//начало--------------------------------------------------CAN-----------------------------------------------------------
//начало--------------------------------------------------ВЫХОД МОДЕЛИ ДЛЯ CAN------------------------------------------
memcpy(&env->ccu_candb_tx.CCU_Errors, &rtY.CCU_Errors_model, sizeof(env->ccu_candb_tx.CCU_Errors));
memcpy(&env->ccu_candb_tx.CCU_Stat1, &rtY.CCU_Stat1_model, sizeof(env->ccu_candb_tx.CCU_Stat1));
memcpy(&env->ccu_candb_tx.CCU_Stat2, &rtY.CCU_Stat2_model, sizeof(env->ccu_candb_tx.CCU_Stat2));
@ -857,6 +867,7 @@ static _Noreturn void ModelTask_Thread(tModelTask *env) {
memcpy(&env->ccu_candb_tx.CCU_Msg1, &rtY.CCU_Msg1_model, sizeof(env->ccu_candb_tx.CCU_Msg1));
// Для UDS (подмена)
if (model_Status_Set_For_Model_output.eComp == 1) {
env->ccu_candb_tx.CCU_HVC_Req_Msg.CCU_eCompSpeedReq_Val_ro = model_Status_eComp_For_Model_output.Pwm_Front;
@ -927,29 +938,18 @@ static _Noreturn void ModelTask_Thread(tModelTask *env) {
model_Status_Pwm_For_Model_input.Pwm_Rear = env->ccu_candb_dbg_tx.dbg_Logic_Blower.Logic_Blower_Pwm_Rear * 10;
memcpy(&env->ccu_candb_dbg_tx.dbg_Sen_Amb, &rtY.dbgCAN_dbg_Sen_Amb_model,
sizeof(env->ccu_candb_dbg_tx.dbg_Sen_Amb));
memcpy(&env->ccu_candb_dbg_tx.dbg_Sen_Incar, &rtY.dbgCAN_dbg_Sen_Incar_model,
sizeof(env->ccu_candb_dbg_tx.dbg_Sen_Incar));
memcpy(&env->ccu_candb_dbg_tx.dbg_Sen_0, &rtY.dbgCAN_dbg_Sen_0_model,
sizeof(env->ccu_candb_dbg_tx.dbg_Sen_0));
memcpy(&env->ccu_candb_dbg_tx.dbg_Logic_Ac, &rtY.dbg_Logic_Ac_model,
sizeof(env->ccu_candb_dbg_tx.dbg_Logic_Ac));
memcpy(&env->ccu_candb_dbg_tx.dbg_CCU_IO, &rtY.dbgCAN_CCU_IO_model,
sizeof(env->ccu_candb_dbg_tx.dbg_CCU_IO));
memcpy(&env->ccu_candb_dbg_tx.dbg_Logic_Rec, &rtY.dbgCAN_Logic_Rec_model,
sizeof(env->ccu_candb_dbg_tx.dbg_Logic_Rec));
memcpy(&env->ccu_candb_dbg_tx.dbg_Logic_State, &rtY.dbgCAN_Logic_State_model,
sizeof(env->ccu_candb_dbg_tx.dbg_Logic_State));
memcpy(&env->ccu_candb_dbg_tx.dbg_Auto_AF, &rtY.dbgCAN_Auto_AF_model,
sizeof(env->ccu_candb_dbg_tx.dbg_Auto_AF));
memcpy(&env->ccu_candb_dbg_tx.dbg_Auto_Duct, &rtY.dbgCAN_Auto_Duct_model,
sizeof(env->ccu_candb_dbg_tx.dbg_Auto_Duct));
memcpy(&env->ccu_candb_dbg_tx.dbg_Logic_Valve, &rtY.dbg_Logic_Valve_model,
sizeof(env->ccu_candb_dbg_tx.dbg_Logic_Valve));
memcpy(&env->ccu_candb_dbg_tx.dbg_Sen_Amb, &rtY.dbgCAN_dbg_Sen_Amb_model, sizeof(env->ccu_candb_dbg_tx.dbg_Sen_Amb));
memcpy(&env->ccu_candb_dbg_tx.dbg_Sen_Incar, &rtY.dbgCAN_dbg_Sen_Incar_model, sizeof(env->ccu_candb_dbg_tx.dbg_Sen_Incar));
memcpy(&env->ccu_candb_dbg_tx.dbg_Sen_0, &rtY.dbgCAN_dbg_Sen_0_model, sizeof(env->ccu_candb_dbg_tx.dbg_Sen_0));
memcpy(&env->ccu_candb_dbg_tx.dbg_Logic_Ac, &rtY.dbg_Logic_Ac_model, sizeof(env->ccu_candb_dbg_tx.dbg_Logic_Ac));
memcpy(&env->ccu_candb_dbg_tx.dbg_CCU_IO, &rtY.dbgCAN_CCU_IO_model, sizeof(env->ccu_candb_dbg_tx.dbg_CCU_IO));
memcpy(&env->ccu_candb_dbg_tx.dbg_Logic_Rec, &rtY.dbgCAN_Logic_Rec_model, sizeof(env->ccu_candb_dbg_tx.dbg_Logic_Rec));
memcpy(&env->ccu_candb_dbg_tx.dbg_Logic_State, &rtY.dbgCAN_Logic_State_model, sizeof(env->ccu_candb_dbg_tx.dbg_Logic_State));
memcpy(&env->ccu_candb_dbg_tx.dbg_Auto_AF, &rtY.dbgCAN_Auto_AF_model, sizeof(env->ccu_candb_dbg_tx.dbg_Auto_AF));
memcpy(&env->ccu_candb_dbg_tx.dbg_Auto_Duct, &rtY.dbgCAN_Auto_Duct_model, sizeof(env->ccu_candb_dbg_tx.dbg_Auto_Duct));
memcpy(&env->ccu_candb_dbg_tx.dbg_Logic_Valve, &rtY.dbg_Logic_Valve_model, sizeof(env->ccu_candb_dbg_tx.dbg_Logic_Valve));
memcpy(&env->ccu_candb_dbg_tx.dbg_Drs, &rtY.dbg_Drs_t_model, sizeof(env->ccu_candb_dbg_tx.dbg_Drs));
memcpy(&env->ccu_candb_dbg_tx.dbg_LIN_AirQS_Stat, &rtY.dbg_LIN_AirQS_Stat_t_model, sizeof(env->ccu_candb_dbg_tx.dbg_Logic_Valve));
/*
env->ccu_candb_dbg_tx.dbg_stat_PID.P_FUL = 501 + 2048;
env->ccu_candb_dbg_tx.dbg_stat_PID.I_FUL = 502 + 2048;
@ -984,19 +984,23 @@ static _Noreturn void ModelTask_Thread(tModelTask *env) {
//конец--------------------------------------------------CAN------------------------------------------------------------
memcpy(&env->ccu_candb_dbg_tx.dbg_Drs, &rtY.dbg_Drs_t_model, sizeof(env->ccu_candb_dbg_tx.dbg_Drs));
memcpy(&env->ccu_candb_dbg_tx.dbg_LIN_AirQS_Stat, &rtY.dbg_LIN_AirQS_Stat_t_model,
sizeof(env->ccu_candb_dbg_tx.dbg_Logic_Valve));
//конец--------------------------------------------------ВЫХОД МОДЕЛИ ДЛЯ CAN-------------------------------------------
//начало--------------------------------------------------ВЫХОД МОДЕЛИ ДЛЯ Lin4-----------------------------------------
Lin4_Input_Set_From_Model(env->lin4TaskSensor);
//конец--------------------------------------------------ВЫХОД МОДЕЛИ ДЛЯ Lin4------------------------------------------
//начало--------------------------------------------------ВЫХОД МОДЕЛИ ДЛЯ CAN DEBUG------------------------------------
set_CanDebugSpamTransmitter(env->canSpamDebugTransmitter, &env->ccu_candb_dbg_tx);
//конец--------------------------------------------------ВЫХОД МОДЕЛИ ДЛЯ Lin4------------------------------------------
set_Dtc_state(env->diagnostic);
//начало--------------------------------------------------ВЫХОД МОДЕЛИ ДЛЯ CAN DEBUG------------------------------------
CanUdsInput_Set_Model(env->canUds);
//конец--------------------------------------------------ВЫХОД МОДЕЛИ ДЛЯ UDS-------------------------------------------
//начало--------------------------------------------------ВЫХОД МОДЕЛИ ДЛЯ DTC------------------------------------------
set_Dtc_state(env->diagnostic);
//конец--------------------------------------------------ВЫХОД МОДЕЛИ ДЛЯ DTC-------------------------------------------
env->isRunning = true;
osMutexRelease(env->access);