From 85cd7c626cc957a99411e881c87e2680a8ed8735 Mon Sep 17 00:00:00 2001 From: hosu Date: Wed, 15 Apr 2026 09:29:31 +0900 Subject: [PATCH] =?UTF-8?q?=EC=B4=88=EA=B8=B0=20rpm=20ramp=EA=B0=92=20idle?= =?UTF-8?q?=20speed=20=EC=BA=A1=EC=B3=90=20=EA=B8=B0=EB=8A=A5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Oper.c | 16 ++++++++++------ main.c | 2 +- main.h | 1 + 3 files changed, 12 insertions(+), 7 deletions(-) diff --git a/Oper.c b/Oper.c index dd67862..f3864d0 100644 --- a/Oper.c +++ b/Oper.c @@ -157,6 +157,7 @@ static void CProcessApuStateGenerating(void) CSetEngineActualRpm(GeneralOperValue.uiDynamicRPM); // RPM 가변 제어 시작 #else Uint32 ulElapsed; + Uint16 uiRampRange; Uint16 uiRampRpm; CSetGcuCommand((Uint16)IDX_GCU_CMD_GENERATING); @@ -170,22 +171,25 @@ static void CProcessApuStateGenerating(void) { if (GeneralOperValue.ulRampStartClock == 0UL) { + Uint16 uiActual = CGetEngineActualRpm(); + GeneralOperValue.uiRampStartRpm = (uiActual < RPM_RAMP_END) ? uiActual : RPM_RAMP_END; GeneralOperValue.ulRampStartClock = CGetSoftClock(); - CSetEngineActualRpm(RPM_RAMP_START); + CSetEngineActualRpm(GeneralOperValue.uiRampStartRpm); } else { - ulElapsed = (CGetSoftClock() + SYSTEM_10MIN_TIME - GeneralOperValue.ulRampStartClock) % SYSTEM_10MIN_TIME; + ulElapsed = (CGetSoftClock() + SYSTEM_10MIN_TIME - GeneralOperValue.ulRampStartClock) % SYSTEM_10MIN_TIME; + uiRampRange = RPM_RAMP_END - GeneralOperValue.uiRampStartRpm; // 동적 범위 if (ulElapsed < TIME_RAMP_UP) { - uiRampRpm = (Uint16)(RPM_RAMP_START + (Uint16)(((Uint32)RPM_RAMP_RANGE * ulElapsed) / TIME_RAMP_UP)); + uiRampRpm = (Uint16)(GeneralOperValue.uiRampStartRpm + (Uint16)(((Uint32)uiRampRange * ulElapsed) / TIME_RAMP_UP)); CSetEngineActualRpm(uiRampRpm); } else { - GeneralOperValue.uiRampComplete = 1U; - GeneralOperValue.uiDynamicRPM = CDynamicRpmControl(); + GeneralOperValue.uiRampComplete = 1U; + GeneralOperValue.uiDynamicRPM = CDynamicRpmControl(); CSetEngineActualRpm(GeneralOperValue.uiDynamicRPM); } } @@ -472,7 +476,7 @@ void CSetEcuCommand(Uint16 Command) CSetEngineActualRpm(Rx400.SetRPM.PCAN_RPM); #else //CSetEngineActualRpm(2400U); - CSetEngineActualRpm(1500U); // Target Idle + CSetEngineActualRpm(1200U); // IDLE_SEQ_MOD (Idle speed 1200[최저] ~ 2000[최고]) #endif } } diff --git a/main.c b/main.c index 80e80f2..ce06c5c 100644 --- a/main.c +++ b/main.c @@ -147,7 +147,7 @@ static void CSoftTimerWorkProcess(void) if (GeneralOperValue.uiApuState > (Uint16)IDX_APU_OPER_POST) // ADC 오프셋 보정 완료 후 감지 { - CAlarmProcedure(); + //CAlarmProcedure(); CDisplayAlarmPopup(); } diff --git a/main.h b/main.h index 4e4edfd..e0d9a43 100644 --- a/main.h +++ b/main.h @@ -213,6 +213,7 @@ typedef struct ClassGeneralOperValue Uint32 ulTotalOperationHour; Uint32 ulRampStartClock; // IDLE_SEQ_MOD Uint16 uiRampComplete; // IDLE_SEQ_MOD + Uint16 uiRampStartRpm; // IDLE_SEQ_MOD struct { Uint16 PlayCmd;