From 98bda970fd5c4a90942b489b982c3de47a508da2 Mon Sep 17 00:00:00 2001 From: cfif Date: Wed, 26 Aug 2026 16:27:09 +0300 Subject: [PATCH] =?UTF-8?q?=D0=9F=D1=80=D0=B0=D0=B2=D0=BA=D0=B8=20=D0=BF?= =?UTF-8?q?=D0=BE=20DTC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- MODULES/HVAC_M7_CAN_SPAM/CanSpamReceiver.c | 10 +- MODULES/HVAC_M7_CAN_SPAM/CanSpamReceiver.h | 2 +- MODULES/HVAC_M7_MODEL/Model_Task.c | 7 +- MODULES/HVAC_M7_MODEL/Model_Task.h | 3 + MODULES/HVAC_M7_StatusData/DiagnosticTask.c | 27 +++- MODULES/HVAC_M7_StatusData/DiagnosticTask.h | 4 +- MODULES/HVAC_M7_StatusData/StatusError.c | 4 +- MODULES/HVAC_M7_StatusData/StatusError.h | 130 ++++++++++++++++++++ 8 files changed, 173 insertions(+), 14 deletions(-) diff --git a/MODULES/HVAC_M7_CAN_SPAM/CanSpamReceiver.c b/MODULES/HVAC_M7_CAN_SPAM/CanSpamReceiver.c index f53d3e1..766a6fc 100644 --- a/MODULES/HVAC_M7_CAN_SPAM/CanSpamReceiver.c +++ b/MODULES/HVAC_M7_CAN_SPAM/CanSpamReceiver.c @@ -12,8 +12,6 @@ #define LOG_SIGN "CAN_RECEIVED" #define LOGGER env->logger -char GET_HVAC_VIN[17] = {'0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'}; - void CanSpamReceiver_Init(tCanSpamReceiver *env, tSerialPortFrameIO *ioCanFrame, tLoggerInterface *logger) { @@ -23,8 +21,8 @@ void CanSpamReceiver_Init(tCanSpamReceiver *env, env->access = osMutexNew(NULL); - env->ccu_candb_rx_LOCAL_HVAC_VIN = osMessageQueueNew(1, sizeof(GET_HVAC_VIN), NULL); - env->ccu_candb_rx_LOCAL_HVAC_UDS_VIN = osMessageQueueNew(1, sizeof(GET_HVAC_VIN), NULL); + env->ccu_candb_rx_LOCAL_HVAC_VIN = osMessageQueueNew(1, 17, NULL); + env->ccu_candb_rx_LOCAL_HVAC_UDS_VIN = osMessageQueueNew(1, 17, NULL); env->ccu_candb_rx_TM_CP = osMessageQueueNew(1, sizeof(ccu_candb_rx.TM_CP), NULL); env->ccu_candb_rx_FIU_CCU1 = osMessageQueueNew(1, sizeof(ccu_candb_rx.FIU_CCU1), NULL); env->ccu_candb_rx_FIU_CCU2 = osMessageQueueNew(1, sizeof(ccu_candb_rx.FIU_CCU2), NULL); @@ -213,7 +211,7 @@ bool get_is_NoNull_CanSpam_BCM_PowerTrain_Receiver(tCanSpamReceiver *env) { return false; } -void get_CanSpamReceiver(tCanSpamReceiver *env) { +void get_CanSpamReceiver(tCanSpamReceiver *env, char *VIN) { osStatus_t status = osOK; @@ -272,7 +270,7 @@ void get_CanSpamReceiver(tCanSpamReceiver *env) { countQueue_ccu_candb_rx = osMessageQueueGetSpace(env->ccu_candb_rx_LOCAL_HVAC_VIN); if (countQueue_ccu_candb_rx == 0) { - status = osMessageQueueGet(env->ccu_candb_rx_LOCAL_HVAC_VIN, GET_HVAC_VIN, 0, 0U); + status = osMessageQueueGet(env->ccu_candb_rx_LOCAL_HVAC_VIN, VIN, 0, 0U); } /* diff --git a/MODULES/HVAC_M7_CAN_SPAM/CanSpamReceiver.h b/MODULES/HVAC_M7_CAN_SPAM/CanSpamReceiver.h index af0a881..6a359f2 100644 --- a/MODULES/HVAC_M7_CAN_SPAM/CanSpamReceiver.h +++ b/MODULES/HVAC_M7_CAN_SPAM/CanSpamReceiver.h @@ -53,7 +53,7 @@ void CanSpamReceiver_Init(tCanSpamReceiver *env, tSerialPortFrameIO *ioCanFrame, void CanSpamReceiver_StartThread(tCanSpamReceiver *env); -void get_CanSpamReceiver(tCanSpamReceiver *env); +void get_CanSpamReceiver(tCanSpamReceiver *env, char *VIN); bool get_CanSpamReceiverUDS(tCanSpamReceiver *env, char *VIN, func_update_func update_func, void *update_func_env, uint32_t timeout, uint32_t count); diff --git a/MODULES/HVAC_M7_MODEL/Model_Task.c b/MODULES/HVAC_M7_MODEL/Model_Task.c index 9aa4987..81eb1d7 100644 --- a/MODULES/HVAC_M7_MODEL/Model_Task.c +++ b/MODULES/HVAC_M7_MODEL/Model_Task.c @@ -84,6 +84,8 @@ void ModelTask_Init( env->diagnostic = diagnostic; + memset(env->GET_HVAC_VIN, 0x20, sizeof(env->GET_HVAC_VIN)); + env->access = osMutexNew(NULL); env->logger = logger; // InitThreadAtrStatic(&env->thread.attr, "ModelTask", env->thread.controlBlock, env->thread.stack, osPriorityNormal); @@ -648,7 +650,7 @@ static _Noreturn void ModelTask_Thread(tModelTask *env) { //начало--------------------------------------------------ВХОД МОДЕЛИ CAN----------------------------------------------- - get_CanSpamReceiver(env->canSpamReceiver); + get_CanSpamReceiver(env->canSpamReceiver, env->GET_HVAC_VIN); // Если был захват в UDS (подмена) if (model_Status_Set_For_Model_output.EMS == 1) { @@ -999,7 +1001,8 @@ static _Noreturn void ModelTask_Thread(tModelTask *env) { //конец--------------------------------------------------ВЫХОД МОДЕЛИ ДЛЯ UDS------------------------------------------- //начало--------------------------------------------------ВЫХОД МОДЕЛИ ДЛЯ DTC------------------------------------------ - set_Dtc_state(env->diagnostic); + memcpy(env->dtc_state_error, rtY.dtc_state_error_model, sizeof(env->dtc_state_error)); + set_Dtc_state(env->diagnostic, env->dtc_state_error, env->GET_HVAC_VIN); //конец--------------------------------------------------ВЫХОД МОДЕЛИ ДЛЯ DTC------------------------------------------- env->isRunning = true; diff --git a/MODULES/HVAC_M7_MODEL/Model_Task.h b/MODULES/HVAC_M7_MODEL/Model_Task.h index d223cf8..1f7aba9 100644 --- a/MODULES/HVAC_M7_MODEL/Model_Task.h +++ b/MODULES/HVAC_M7_MODEL/Model_Task.h @@ -39,6 +39,9 @@ typedef struct { osMutexId_t access; + char GET_HVAC_VIN[17]; + + uint8_t dtc_state_error[127]; tLoggerInterface *logger; diff --git a/MODULES/HVAC_M7_StatusData/DiagnosticTask.c b/MODULES/HVAC_M7_StatusData/DiagnosticTask.c index c667285..73d915e 100644 --- a/MODULES/HVAC_M7_StatusData/DiagnosticTask.c +++ b/MODULES/HVAC_M7_StatusData/DiagnosticTask.c @@ -6,6 +6,7 @@ #include "StatusData.h" #include "StatusError.h" #include "HVAC_model.h" +#include "SystemDelayInterface.h" #define LOG_SIGN "DIAGNOSTIC" #define LOGGER env->logger @@ -16,6 +17,8 @@ void Diagnostic_Init(tDiagnostic *env, tLoggerInterface *logger) { env->access = osMutexNew(NULL); + env->timeout_VIN = SystemGetMs() + 45000; + // for (uint8_t i = 0; i < COUNT_DTC_CODE_ERROR; ++i) { // Тест DTC не был выполнен в текущем цикле работы @@ -147,9 +150,29 @@ void set_NoBitsDTC(tDiagnostic *env, bool noBitsDTC) { } } -void set_Dtc_state(tDiagnostic *env) { +void set_Dtc_state(tDiagnostic *env, uint8_t *dtc_state_error_model, char *VIN) { if (osMutexAcquire(env->access, 5000) == osOK) { - memcpy(&dtc_state_error, &rtY.dtc_state_error_model, sizeof(dtc_state_error)); + + bool errorVIN = false; + int result = memcmp(VIN, statusData.ecu.Vehicle_Identification, 17); + if (result != 0) { + errorVIN = true; + } else { + result = memcmp(VIN, "00000000000000000", 17); + + if (result == 0) { + errorVIN = true; + } else { + errorVIN = false; + } + + } + + if ((errorVIN) && (SystemGetMs() > env->timeout_VIN)) { + dtc_state_error_model[DTC_VIN_INVALID_CONFIG] = 1; + } + + memcpy(dtc_state_error, dtc_state_error_model, sizeof(dtc_state_error)); osMutexRelease(env->access); } else { LoggerErrorStatic(LOGGER, LOG_SIGN, "Access error set_Dtc_state_error"); diff --git a/MODULES/HVAC_M7_StatusData/DiagnosticTask.h b/MODULES/HVAC_M7_StatusData/DiagnosticTask.h index 1a2632f..ac8676f 100644 --- a/MODULES/HVAC_M7_StatusData/DiagnosticTask.h +++ b/MODULES/HVAC_M7_StatusData/DiagnosticTask.h @@ -20,12 +20,14 @@ typedef struct { bool isNoBitsDTC; + uint32_t timeout_VIN; + } tDiagnostic; void Diagnostic_Init(tDiagnostic *env, tLoggerInterface *logger); void set_NoBitsDTC(tDiagnostic *env, bool noBitsDTC); -void set_Dtc_state(tDiagnostic *env); +void set_Dtc_state(tDiagnostic *env, uint8_t *dtc_state_error_model, char *VIN); uint32_t diagnostic_ClearDiagnosticInformation_14(tDiagnostic *env); uint32_t diagnostic_UDS_ReadDTCInformation_19_count(tDiagnostic *env, tDiagnosticDTC *diagnosticDTC); diff --git a/MODULES/HVAC_M7_StatusData/StatusError.c b/MODULES/HVAC_M7_StatusData/StatusError.c index 4287756..74b083a 100644 --- a/MODULES/HVAC_M7_StatusData/StatusError.c +++ b/MODULES/HVAC_M7_StatusData/StatusError.c @@ -19,7 +19,6 @@ //uint8_t dtc_state_confirmed_error[COUNT_DTC_CODE_ERROR]; uint8_t dtc_state_error[COUNT_DTC_CODE_ERROR]; uint8_t dtc_state_FIX_error[COUNT_DTC_CODE_ERROR]; -uint8_t dtc_state_FIX_error[COUNT_DTC_CODE_ERROR]; // Структура DTC кодов const tDTC_Entry dtc_codes[COUNT_DTC_CODE_ERROR] = { @@ -150,4 +149,5 @@ const tDTC_Entry dtc_codes[COUNT_DTC_CODE_ERROR] = { {0xE2, 0x60, 0x87, "DRS for front zone (LIN4) - Missing Message"}, {0xE2, 0x61, 0x87, "DRS for rear zone (LIN4) - Missing Message"}, {0xF0, 0x02, 0x56, "Vehicle Identification Number - invalid / incompatible configuration"} -}; \ No newline at end of file +}; + diff --git a/MODULES/HVAC_M7_StatusData/StatusError.h b/MODULES/HVAC_M7_StatusData/StatusError.h index 165a468..69814a4 100644 --- a/MODULES/HVAC_M7_StatusData/StatusError.h +++ b/MODULES/HVAC_M7_StatusData/StatusError.h @@ -42,6 +42,136 @@ extern const tDTC_Entry dtc_codes[COUNT_DTC_CODE_ERROR]; extern uint8_t dtc_state_error[COUNT_DTC_CODE_ERROR]; extern uint8_t dtc_state_FIX_error[COUNT_DTC_CODE_ERROR]; +enum eDTC_Error_Code { + DTC_CCU_POWER_SUPPLY_VOLTAGE_OUT_OF_RANGE = 0, // 0xA0101C + DTC_IGNITION_VOLTAGE_OUT_OF_RANGE = 1, // 0xA0111C + DTC_REAR_HVAC_AROMA_CONFIG_INVALID = 2, // 0xA02056 + DTC_INCAR_TEMP_FRONT_LEFT_SHORT_BAT_OPEN = 3, // 0xA03015 + DTC_INCAR_TEMP_FRONT_LEFT_SHORT_GND = 4, // 0xA03011 + DTC_INCAR_TEMP_FRONT_RIGHT_SHORT_BAT_OPEN = 5, // 0xA03115 + DTC_INCAR_TEMP_FRONT_RIGHT_SHORT_GND = 6, // 0xA03111 + DTC_INCAR_TEMP_REAR_LEFT_SHORT_BAT_OPEN = 7, // 0xA05415 + DTC_INCAR_TEMP_REAR_LEFT_SHORT_GND = 8, // 0xA05411 + DTC_INCAR_TEMP_REAR_RIGHT_SHORT_BAT_OPEN = 9, // 0xA05515 + DTC_INCAR_TEMP_REAR_RIGHT_SHORT_GND = 10, // 0xA05511 + DTC_AMBIENT_TEMP_SHORT_BAT_OPEN = 11, // 0xA03215 + DTC_AMBIENT_TEMP_SHORT_GND = 12, // 0xA03211 + DTC_FRONT_EVAP_TEMP_SHORT_BAT_OPEN = 13, // 0xA03315 + DTC_FRONT_EVAP_TEMP_SHORT_GND = 14, // 0xA03311 + DTC_REAR_EVAP_TEMP_SHORT_BAT_OPEN = 15, // 0xA03415 + DTC_REAR_EVAP_TEMP_SHORT_GND = 16, // 0xA03411 + DTC_DUCT_VENT_FL_SHORT_BAT_OPEN = 17, // 0xA03515 + DTC_DUCT_VENT_FL_SHORT_GND = 18, // 0xA03511 + DTC_DUCT_VENT_FR_SHORT_BAT_OPEN = 19, // 0xA03615 + DTC_DUCT_VENT_FR_SHORT_GND = 20, // 0xA03611 + DTC_DUCT_FOOT_FL_SHORT_BAT_OPEN = 21, // 0xA03715 + DTC_DUCT_FOOT_FL_SHORT_GND = 22, // 0xA03711 + DTC_DUCT_FOOT_FR_SHORT_BAT_OPEN = 23, // 0xA03815 + DTC_DUCT_FOOT_FR_SHORT_GND = 24, // 0xA03811 + DTC_DUCT_VENT_SIDE_FL_SHORT_BAT_OPEN = 25, // 0xA04115 + DTC_DUCT_VENT_SIDE_FL_SHORT_GND = 26, // 0xA04111 + DTC_DUCT_VENT_SIDE_FR_SHORT_BAT_OPEN = 27, // 0xA04215 + DTC_DUCT_VENT_SIDE_FR_SHORT_GND = 28, // 0xA04211 + DTC_DUCT_VENT_RL_SHORT_BAT_OPEN = 29, // 0xA03915 + DTC_DUCT_VENT_RL_SHORT_GND = 30, // 0xA03911 + DTC_DUCT_VENT_RR_SHORT_BAT_OPEN = 31, // 0xA04015 + DTC_DUCT_VENT_RR_SHORT_GND = 32, // 0xA04011 + DTC_DUCT_FOOT_RL_SHORT_BAT_OPEN = 33, // 0xA04515 + DTC_DUCT_FOOT_RL_SHORT_GND = 34, // 0xA04511 + DTC_DUCT_FOOT_RR_SHORT_BAT_OPEN = 35, // 0xA04615 + DTC_DUCT_FOOT_RR_SHORT_GND = 36, // 0xA04611 + DTC_UV_LAMP_OPEN_SHORT_BAT = 37, // 0xA04713 + DTC_UV_LAMP_SHORT_GND = 38, // 0xA04711 + DTC_AROMATIZATION_OPEN = 39, // 0xA04813 + DTC_AROMATIZATION_SHORT_GND = 40, // 0xA04811 + DTC_AROMATIZATION_MALFUNCTION = 41, // 0xA04896 + DTC_IONIZER_OPEN = 42, // 0xA04913 + DTC_IONIZER_SHORT_GND = 43, // 0xA04911 + DTC_IONIZER_MALFUNCTION = 44, // 0xA04996 + DTC_DRS_FRONT_ZONE_MALFUNCTION = 45, // 0xA05096 + DTC_DRS_REAR_ZONE_MALFUNCTION = 46, // 0xA05196 + DTC_AIR_QUALITY_SENSOR_OPEN = 47, // 0xA04315 + DTC_AIR_QUALITY_SENSOR_SHORT_GND = 48, // 0xA04311 + DTC_AIR_QUALITY_SENSOR_MALFUNCTION = 49, // 0xA04396 + DTC_AC_PRESSURE_SHORT_BAT = 50, // 0xA04412 + DTC_AC_PRESSURE_SHORT_GND_OPEN = 51, // 0xA04414 + DTC_AC_PRESSURE_SIGNAL_BELOW_RANGE = 52, // 0xA04484 + DTC_FRONT_BLOWER_TXV_PERFORMANCE = 53, // 0xA05692 + DTC_REAR_BLOWER_TXV_PERFORMANCE = 54, // 0xA05892 + DTC_DEFROSTER_GATE_POSITION_NOT_REACHED = 55, // 0xA07004 + DTC_RECIRC_GATE_POSITION_NOT_REACHED = 56, // 0xA07104 + DTC_RECIRC_OSA_GATE_POSITION_NOT_REACHED = 57, // 0xA09304 + DTC_TEMP_UP_FL_GATE_POSITION_NOT_REACHED = 58, // 0xA07204 + DTC_VENT_CFL_GATE_POSITION_NOT_REACHED = 59, // 0xA07304 + DTC_VENT_SFL_GATE_POSITION_NOT_REACHED = 60, // 0xA07404 + DTC_TEMP_DN_FL_GATE_POSITION_NOT_REACHED = 61, // 0xA07504 + DTC_FOOT_FL_GATE_POSITION_NOT_REACHED = 62, // 0xA07604 + DTC_REAR_FOOT_FL_GATE_POSITION_NOT_REACHED = 63, // 0xA07704 + DTC_TEMP_UP_FR_GATE_POSITION_NOT_REACHED = 64, // 0xA07804 + DTC_VENT_CFR_GATE_POSITION_NOT_REACHED = 65, // 0xA07904 + DTC_VENT_SFR_GATE_POSITION_NOT_REACHED = 66, // 0xA08004 + DTC_TEMP_DN_FR_GATE_POSITION_NOT_REACHED = 67, // 0xA08104 + DTC_FOOT_FR_GATE_POSITION_NOT_REACHED = 68, // 0xA08204 + DTC_REAR_FOOT_FR_GATE_POSITION_NOT_REACHED = 69, // 0xA08304 + DTC_TEMP_RR_GATE_POSITION_NOT_REACHED = 70, // 0xA08404 + DTC_TEMP_RL_GATE_POSITION_NOT_REACHED = 71, // 0xA08504 + DTC_VENT_SRL_GATE_POSITION_NOT_REACHED = 72, // 0xA08604 + DTC_FOOT_RL_GATE_POSITION_NOT_REACHED = 73, // 0xA08704 + DTC_VENT_CRL_GATE_POSITION_NOT_REACHED = 74, // 0xA08804 + DTC_VENT_CRR_GATE_POSITION_NOT_REACHED = 75, // 0xA08904 + DTC_FOOT_RR_GATE_POSITION_NOT_REACHED = 76, // 0xA09004 + DTC_VENT_SRR_GATE_POSITION_NOT_REACHED = 77, // 0xA09104 + DTC_SEALING_VALVE_GATE_POSITION_NOT_REACHED = 78, // 0xA09204 + DTC_BODY_CAN_BUS_OFF = 79, // 0xC02888 + DTC_HVAC_CAN_BUS_OFF = 80, // 0xC03788 + DTC_LOST_COMM_ECM_PCM = 81, // 0xC10087 + DTC_LOST_COMM_ESP = 82, // 0xC12287 + DTC_LOST_COMM_BCM = 83, // 0xC14187 + DTC_LOST_COMM_AC_COMPRESSOR = 84, // 0xC16B87 + DTC_LOST_COMM_DOOR_MODULE_A_DMFL = 85, // 0xC19987 + DTC_LOST_COMM_DOOR_MODULE_B_DMFR = 86, // 0xC20087 + DTC_LOST_COMM_SEAT_MODULE_A_SMFL = 87, // 0xC20887 + DTC_LOST_COMM_SEAT_MODULE_B_SMFR = 88, // 0xC20987 + DTC_LOST_COMM_SEAT_MODULE_C_SMRL = 89, // 0xC21087 + DTC_LOST_COMM_SEAT_MODULE_D_SMRR = 90, // 0xC21187 + DTC_LOST_COMM_TRUNK_CCPF_CCPR = 91, // 0xE2A187 + DTC_LOST_COMM_CGW = 92, // 0xE2A287 + DTC_LOST_COMM_DEFROSTER_GATE = 93, // 0xE23087 + DTC_LOST_COMM_RECIRC_GATE = 94, // 0xE23187 + DTC_LOST_COMM_RECIRC_OSA_GATE = 95, // 0xE26287 + DTC_LOST_COMM_TEMP_UP_FL_GATE = 96, // 0xE23287 + DTC_LOST_COMM_VENT_CFL_GATE = 97, // 0xE23387 + DTC_LOST_COMM_FOOT_FR_GATE_LIN1 = 98, // 0xE23487 + DTC_LOST_COMM_TEMP_DN_FL_GATE = 99, // 0xE23587 + DTC_LOST_COMM_FOOT_FL_GATE = 100, // 0xE23687 + DTC_LOST_COMM_REAR_FOOT_FL_GATE = 101, // 0xE23787 + DTC_LOST_COMM_TEMP_UP_FR_GATE = 102, // 0xE23887 + DTC_LOST_COMM_VENT_CFR_GATE = 103, // 0xE23987 + DTC_LOST_COMM_VENT_SFR_GATE = 104, // 0xE24087 + DTC_LOST_COMM_TEMP_DN_FR_GATE = 105, // 0xE24187 + DTC_LOST_COMM_FOOT_FR_GATE = 106, // 0xE24287 + DTC_LOST_COMM_REAR_FOOT_FR_GATE = 107, // 0xE24387 + DTC_LOST_COMM_TEMP_RR_GATE = 108, // 0xE24487 + DTC_LOST_COMM_TEMP_RL_GATE = 109, // 0xE24587 + DTC_LOST_COMM_VENT_SRL_GATE = 110, // 0xE24687 + DTC_LOST_COMM_TEMP_RL_GATE2 = 111, // 0xE24787 + DTC_LOST_COMM_VENT_CRL_GATE = 112, // 0xE24887 + DTC_LOST_COMM_VENT_CRR_GATE = 113, // 0xE24987 + DTC_LOST_COMM_FOOT_RR_GATE = 114, // 0xE25087 + DTC_LOST_COMM_VENT_SRR_GATE = 115, // 0xE25187 + DTC_LOST_COMM_SEALING_VALVE_GATE = 116, // 0xE25287 + DTC_LOST_COMM_AIR_QUALITY_SENSOR = 117, // 0xE25387 + DTC_LOST_COMM_IONIZER = 118, // 0xE25487 + DTC_LOST_COMM_AROMATIZATION = 119, // 0xE25587 + DTC_LOST_COMM_FRONT_TXV = 120, // 0xE25687 + DTC_LOST_COMM_REAR_TXV = 121, // 0xE25787 + DTC_LOST_COMM_HV_BATTERY_CHILLER_TXV = 122, // 0xE25887 + DTC_LOST_COMM_HEAT_PUMP_CHILLER_TXV = 123, // 0xE25987 + DTC_LOST_COMM_DRS_FRONT = 124, // 0xE26087 + DTC_LOST_COMM_DRS_REAR = 125, // 0xE26187 + DTC_VIN_INVALID_CONFIG = 126 // 0xF00256 +}; + //# ErrorCode HexCode FTB SAE J2012 Symptom Description DTC description HW Comment Pre-Condtion Maturation Failure Threshold Maturation Time De-Maturation Failure Threshold De-Maturation Time Degrade mode / Fail-safe action Malfunction Indicator Remark Comment SW progress //1 B20101C A0101C 0x1C Voltage Out of Range CCU Power supply (BATTERY) - circuit voltage out of range Possible T30d_state = "1" and T15_state = "1" 6.0v > VIN or VIN > 18.0V t > 3sec 6.0v < VIN and VIN < 18.0V t > 1 sec Only DTC Set * If voltage of battery is under 7.0v/7.5v or over 17.5v/18.0v, 1) Actuator Stop 2) Blower Stop 3) Seat Module Stop Request None Condition * If voltage of battery is under 7.0v/7.5v or over 17.5v/18.0v, --> * If voltage of battery is under 7.5v/8.0v or over 17.0v/17.5v OK : DTC / Fail-Safe //2 B20111C A0111C 0x1C Voltage Out of Range Ignition(T30d) - circuit voltage out of range Possible T30d_state = "1" and T15_state = "1" 6.0v > VIN or VIN > 18.0V t > 3sec 6.0v < VIN and VIN < 18.0V t > 1 sec Only DTC Set None OK : DTC