mirror of
https://github.com/Dev-KATECH/ADM.git
synced 2026-05-17 01:43:59 +09:00
ver 26.3.17.1
- Drive_Mode.c 수정 : RC - ACU handover 전환 로직 보완 : RC -> ACU / ACU -> RC 전환 시 5km/h 이하에서만 Permit 되도록 수정 : 5km/h 초과 시 Handover Phase가 In Progress가 되도록 수정 : handover 속도 조건에 차속 피드백 외 제어 명령 속도 조건 추가 : ACU -> RC 전환 시 RC 속도 명령 5km/h 이하 조건 추가 : RC -> ACU 전환 시 ACU 속도 명령 5km/h 이하 조건 추가 : handover 진행 중 요청/제어 주체 해제 시 비상정지 진입 조건 보완 : ACU -> RC 진행 중 ACU Drive Mode 해제 시 Emergency 진입 : RC -> ACU 진행 중 RC ACU 요청 해제 시 Emergency 진입 : 관련 Handover/Emergency 상태 변수 설정 보완 - Drive_Mode.c/ExecuteEmergencyMode 함수 수정 : Handover conflict 발생 후 RC manual 요청으로 복구 가능하도록 조건 보완
This commit is contained in:
parent
3dd57671c9
commit
99ad012576
Binary file not shown.
File diff suppressed because it is too large
Load Diff
18658
GW/Debug_FLASH/GW.srec
18658
GW/Debug_FLASH/GW.srec
File diff suppressed because it is too large
Load Diff
@ -7,16 +7,26 @@ static bool IsVehicleStopped(void)
|
||||
return (GV_VCU_Vx_Fbk < 1.0f);
|
||||
}
|
||||
|
||||
static bool IsVehicleBelowHandoverSpeed(void)
|
||||
{
|
||||
return (GV_VCU_Vx_Fbk <= 5.0f);
|
||||
}
|
||||
|
||||
static bool IsRcHandoverReady(void)
|
||||
{
|
||||
return IsVehicleBelowHandoverSpeed() && (GV_RC_Vx_Command <= 5U);
|
||||
}
|
||||
|
||||
static bool IsAcuHandoverReady(void)
|
||||
{
|
||||
return IsVehicleBelowHandoverSpeed() && (GV_ACU_Vx_Command <= 5U);
|
||||
}
|
||||
|
||||
static bool HasAcuRequest(void)
|
||||
{
|
||||
return (GV_ACU_Drive_mode == 1U);
|
||||
}
|
||||
|
||||
static bool IsParkGear(void)
|
||||
{
|
||||
return (GV_VCU_GearSelStat == 0U);
|
||||
}
|
||||
|
||||
static bool IsRcParkRequest(void)
|
||||
{
|
||||
return (GV_RC_GearSelStat == 0U);
|
||||
@ -26,6 +36,10 @@ static uint8_t s_prevRcManualOn = 0U;
|
||||
static uint8_t s_prevRcAutoOn = 0U;
|
||||
static RcModeReq_e s_lastRcModeReq = RC_REQ_DEFAULT;
|
||||
static RcModeReq_e s_rcModeReqRaw = RC_REQ_NONE;
|
||||
static bool s_acuToRcHandoverActive = false;
|
||||
static bool s_rcToAcuHandoverActive = false;
|
||||
static bool s_acuToRcSourceSeen = false;
|
||||
static bool s_rcToAcuSourceSeen = false;
|
||||
|
||||
static DriveMode_e curMode = DRIVE_MODE_DEFAULT;
|
||||
static DriveMode_e nextMode = DRIVE_MODE_DEFAULT;
|
||||
@ -182,6 +196,48 @@ void CheckDriveMode(void)
|
||||
{
|
||||
requestedRcMode = s_rcModeReqRaw;
|
||||
|
||||
if (s_acuToRcHandoverActive &&
|
||||
(curMode == DRIVE_MODE_ACU) &&
|
||||
!IsRcHandoverReady() &&
|
||||
!HasAcuRequest())
|
||||
{
|
||||
nextMode = DRIVE_MODE_EMERGENCY;
|
||||
nextPhase = HO_HOLD;
|
||||
GV_VCU_EmergencyCause = EMG_HO_CONFLICT;
|
||||
GV_RC_ModeReq = s_rcModeReqRaw;
|
||||
Time_SetAutoOnWait(false);
|
||||
s_acuToRcHandoverActive = false;
|
||||
s_acuToRcSourceSeen = false;
|
||||
return;
|
||||
}
|
||||
|
||||
if (s_rcToAcuHandoverActive &&
|
||||
(curMode == DRIVE_MODE_RC) &&
|
||||
!IsAcuHandoverReady() &&
|
||||
(GV_RC_ACU_Drive_Mode == 0U))
|
||||
{
|
||||
nextMode = DRIVE_MODE_EMERGENCY;
|
||||
nextPhase = HO_HOLD;
|
||||
GV_VCU_EmergencyCause = EMG_HO_CONFLICT;
|
||||
GV_RC_ModeReq = s_rcModeReqRaw;
|
||||
Time_SetAutoOnWait(false);
|
||||
s_rcToAcuHandoverActive = false;
|
||||
s_rcToAcuSourceSeen = false;
|
||||
return;
|
||||
}
|
||||
|
||||
if (requestedRcMode != RC_REQ_MANUAL)
|
||||
{
|
||||
s_acuToRcHandoverActive = false;
|
||||
s_acuToRcSourceSeen = false;
|
||||
}
|
||||
|
||||
if (requestedRcMode != RC_REQ_AUTO)
|
||||
{
|
||||
s_rcToAcuHandoverActive = false;
|
||||
s_rcToAcuSourceSeen = false;
|
||||
}
|
||||
|
||||
if ((curMode == DRIVE_MODE_EMERGENCY) &&
|
||||
(GV_VCU_EmergencyCause == EMG_HO_SPD_COND_FAIL) &&
|
||||
(requestedRcMode != RC_REQ_MANUAL))
|
||||
@ -195,7 +251,8 @@ void CheckDriveMode(void)
|
||||
|
||||
if ((curMode == DRIVE_MODE_EMERGENCY) &&
|
||||
(GV_VCU_EmergencyCause == EMG_HO_CONFLICT) &&
|
||||
(requestedRcMode != RC_REQ_DEFAULT))
|
||||
(requestedRcMode != RC_REQ_DEFAULT) &&
|
||||
(requestedRcMode != RC_REQ_MANUAL))
|
||||
{
|
||||
nextMode = DRIVE_MODE_EMERGENCY;
|
||||
nextPhase = HO_HOLD;
|
||||
@ -206,7 +263,9 @@ void CheckDriveMode(void)
|
||||
|
||||
if (!((curMode == DRIVE_MODE_EMERGENCY) &&
|
||||
(((GV_VCU_EmergencyCause == EMG_HO_SPD_COND_FAIL) && (requestedRcMode != RC_REQ_MANUAL)) ||
|
||||
((GV_VCU_EmergencyCause == EMG_HO_CONFLICT) && (requestedRcMode != RC_REQ_DEFAULT)))))
|
||||
((GV_VCU_EmergencyCause == EMG_HO_CONFLICT) &&
|
||||
(requestedRcMode != RC_REQ_DEFAULT) &&
|
||||
(requestedRcMode != RC_REQ_MANUAL)))))
|
||||
GV_VCU_EmergencyCause = EMG_NONE;
|
||||
|
||||
switch (requestedRcMode)
|
||||
@ -259,19 +318,23 @@ void CheckDriveMode(void)
|
||||
break;
|
||||
|
||||
case RC_REQ_MANUAL:
|
||||
if (curMode == DRIVE_MODE_ACU && !IsVehicleStopped())
|
||||
if (curMode == DRIVE_MODE_ACU && !IsRcHandoverReady())
|
||||
{
|
||||
nextPhase = HO_HOLD;
|
||||
nextMode = DRIVE_MODE_EMERGENCY;
|
||||
GV_VCU_EmergencyCause = EMG_HO_CONFLICT;
|
||||
s_acuToRcHandoverActive = true;
|
||||
if (HasAcuRequest())
|
||||
s_acuToRcSourceSeen = true;
|
||||
|
||||
nextPhase = HO_INPROG;
|
||||
}
|
||||
else if (curMode == DRIVE_MODE_ACU && nextPhase != HO_HOLD)
|
||||
else if (curMode == DRIVE_MODE_ACU)
|
||||
{
|
||||
nextPhase = HO_PERMIT;
|
||||
if (!HasAcuRequest())
|
||||
{
|
||||
nextMode = DRIVE_MODE_DEFAULT;
|
||||
nextMode = DRIVE_MODE_RC;
|
||||
nextPhase = HO_NONE;
|
||||
s_acuToRcHandoverActive = false;
|
||||
s_acuToRcSourceSeen = false;
|
||||
}
|
||||
}
|
||||
else if (curMode == DRIVE_MODE_DEFAULT && IsVehicleStopped())
|
||||
@ -297,6 +360,36 @@ void CheckDriveMode(void)
|
||||
nextMode = DRIVE_MODE_EMERGENCY;
|
||||
GV_VCU_EmergencyCause = EMG_HO_CONFLICT;
|
||||
}
|
||||
else if ((curMode == DRIVE_MODE_RC) &&
|
||||
(GV_RC_Drive_Mode == 0U) &&
|
||||
(GV_RC_ACU_Drive_Mode == 1U) &&
|
||||
!IsAcuHandoverReady())
|
||||
{
|
||||
s_rcToAcuHandoverActive = true;
|
||||
nextPhase = HO_INPROG;
|
||||
}
|
||||
else if ((curMode == DRIVE_MODE_RC) &&
|
||||
(GV_RC_Drive_Mode == 0U) &&
|
||||
(GV_RC_ACU_Drive_Mode == 1U))
|
||||
{
|
||||
s_rcToAcuHandoverActive = true;
|
||||
nextPhase = HO_PERMIT;
|
||||
if (HasAcuRequest())
|
||||
{
|
||||
nextMode = DRIVE_MODE_ACU;
|
||||
nextPhase = HO_NONE;
|
||||
s_rcToAcuHandoverActive = false;
|
||||
s_rcToAcuSourceSeen = false;
|
||||
}
|
||||
else
|
||||
{
|
||||
autoWaitOn = true;
|
||||
if (Time_GetAutoOnWaitSec() >= 30U)
|
||||
{
|
||||
nextPhase = HO_HOLD;
|
||||
}
|
||||
}
|
||||
}
|
||||
else if ((curMode == DRIVE_MODE_DEFAULT) && (GV_VCU_HandoverPhase == HO_HOLD))
|
||||
{
|
||||
nextMode = DRIVE_MODE_DEFAULT;
|
||||
@ -463,12 +556,12 @@ void ExecuteEmergencyMode()
|
||||
// Keep emergency latched for handover speed-fail until RC requests MANUAL.
|
||||
if (!isEmergency && GV_VCU_EmergencyCause == EMG_HO_SPD_COND_FAIL && s_rcModeReqRaw != RC_REQ_MANUAL)
|
||||
nextMode = DRIVE_MODE_EMERGENCY;
|
||||
else if (!isEmergency && GV_VCU_EmergencyCause == EMG_HO_CONFLICT && s_rcModeReqRaw != RC_REQ_DEFAULT)
|
||||
else if (!isEmergency && GV_VCU_EmergencyCause == EMG_HO_CONFLICT &&
|
||||
s_rcModeReqRaw != RC_REQ_DEFAULT && s_rcModeReqRaw != RC_REQ_MANUAL)
|
||||
nextMode = DRIVE_MODE_EMERGENCY;
|
||||
|
||||
// Exit emergency mode when no emergency source remains.
|
||||
else if(!isEmergency && !isEmergencyVcu &&
|
||||
GV_VCU_EmergencyCause != EMG_HO_CONFLICT &&
|
||||
s_rcModeReqRaw == RC_REQ_MANUAL &&
|
||||
IsRcParkRequest())
|
||||
nextMode = DRIVE_MODE_RC;
|
||||
|
||||
@ -7,7 +7,7 @@ void SET_SW_VER(void)
|
||||
{
|
||||
GV_YEAR = 26;
|
||||
GV_Month = 3;
|
||||
GV_Day = 13;
|
||||
GV_Day = 17;
|
||||
GV_Ver = 1;
|
||||
GV_CAR_NUM = 240623;
|
||||
}
|
||||
|
||||
Loading…
Reference in New Issue
Block a user