first commit
This commit is contained in:
@@ -0,0 +1,214 @@
|
||||
#include "main.h"
|
||||
|
||||
void CApuStartReady(void);
|
||||
void CApuStopProcedure(Uint16 Level);
|
||||
void CSetEngineActualRpm(Uint16 Rpm);
|
||||
static void CSetGcuCommand(Uint16 Command);
|
||||
void CSetEcuCommand(Uint16 Command);
|
||||
Uint16 CStartSwitchCheck(void);
|
||||
|
||||
|
||||
void CApuOperProcedure(void)
|
||||
{
|
||||
if (CApuSystemAlarmCheck() > 0U || KeyOperValue.KeyList.bit.Emergency == 1U)
|
||||
{
|
||||
// 알람으로 인한 정지 상태(비상정지에 준함, 즉시정지)
|
||||
CSetApuOperIndex(APU_OPER_IDX_EMERGENCY);
|
||||
|
||||
CActiveChipSelect(0U);
|
||||
}
|
||||
else
|
||||
{
|
||||
CSetApuOperIndex(APU_OPER_IDX_STANDBY);
|
||||
|
||||
switch (CGetApuOperIndex())
|
||||
{
|
||||
case APU_OPER_IDX_STANDBY:
|
||||
{
|
||||
if (KeyOperValue.KeyList.bit.EngineStartStop == 1U)
|
||||
{
|
||||
CSetApuOperIndex(APU_OPER_IDX_START_CHECK);
|
||||
|
||||
CActiveChipSelect(1U); // 시동키가 입력되면 CS ON
|
||||
|
||||
if (CGetEngCoolantTemperature() < -10) // 냉각수 온도 체크
|
||||
{
|
||||
CSetApuOperIndex(APU_OPER_IDX_ENGINE_PREHEAT);
|
||||
}
|
||||
else
|
||||
{
|
||||
CSetApuOperIndex(APU_OPER_IDX_CRANKING);
|
||||
}
|
||||
}
|
||||
break;
|
||||
}
|
||||
case APU_OPER_IDX_ENGINE_PREHEAT:
|
||||
{
|
||||
break;
|
||||
}
|
||||
case APU_OPER_IDX_CRANKING:
|
||||
{
|
||||
CSetGcuCommand(GCU_OPER_CMD_CRANKING);
|
||||
|
||||
if (CGetGeneratorRpm() > 800)
|
||||
{
|
||||
CSetGcuCommand(GCU_OPER_CMD_STOP_CRANKING);
|
||||
CSetApuOperIndex(APU_OPER_IDX_CHECK_OPERATION);
|
||||
}
|
||||
break;
|
||||
}
|
||||
case APU_OPER_IDX_CHECK_OPERATION:
|
||||
{
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
void CSetApuOperIndex(eApuOperIdx idx)
|
||||
{
|
||||
GeneralOperValue.uiApuState = (Uint16) idx;
|
||||
}
|
||||
|
||||
eApuOperIdx CGetApuOperIndex(void)
|
||||
{
|
||||
return (eApuOperIdx)GeneralOperValue.uiApuState;
|
||||
}
|
||||
|
||||
Uint16 CStartSwitchCheck(void)
|
||||
{
|
||||
return KeyOperValue.KeyList.bit.EngineStartStop;
|
||||
}
|
||||
|
||||
|
||||
Uint16 CApuSystemAlarmCheck(void)
|
||||
{
|
||||
return ((FaultBitValue.ulTotal | Rx210.GcuFault.uiTotal | Rx310.EcuFault.uiTotal) > 0) ? 1U : 0U;
|
||||
}
|
||||
|
||||
void CSetEngineActualRpm(Uint16 Rpm)
|
||||
{
|
||||
float32 fTemp = (float32) Rpm / 0.125f; // 0.125 mean : J1939 Scaling Factor.
|
||||
|
||||
Tx103.EcuCommand.RpmSetpoint = (Uint16) fTemp;
|
||||
}
|
||||
|
||||
Uint16 CGetEngineActualRpm(void)
|
||||
{
|
||||
float32 fTemp = (float32) Rx320.EcuData.ActualRpm * 0.125f;
|
||||
|
||||
return (Uint16) fTemp;
|
||||
}
|
||||
|
||||
Uint16 CGetGeneratorRpm(void)
|
||||
{
|
||||
return Rx220.GcuData.Rpm;
|
||||
}
|
||||
|
||||
static void CSetGcuCommand(Uint16 Command)
|
||||
{
|
||||
GeneralOperValue.GcuCommand.PlayCmd = Command;
|
||||
}
|
||||
|
||||
void CSetEcuCommand(Uint16 Command)
|
||||
{
|
||||
if (Command == ECU_OPER_CMD_STOP)
|
||||
{
|
||||
GeneralOperValue.EcuCommand.EngineStart = 0U;
|
||||
GeneralOperValue.EcuCommand.EngineStop = 1U;
|
||||
CSetEngineActualRpm(2400U);
|
||||
}
|
||||
else if (Command == ECU_OPER_CMD_START)
|
||||
{
|
||||
GeneralOperValue.EcuCommand.EngineStart = 1U;
|
||||
GeneralOperValue.EcuCommand.EngineStop = 0U;
|
||||
CSetEngineActualRpm(2400U);
|
||||
}
|
||||
else
|
||||
{
|
||||
// Emergency
|
||||
GeneralOperValue.EcuCommand.EngineStart = 0U;
|
||||
GeneralOperValue.EcuCommand.EngineStop = 1U;
|
||||
CSetEngineActualRpm(0U);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
int16 CGetEngCoolantTemperature(void)
|
||||
{
|
||||
return (int16) Rx321.EcuData.CoolantTemperature - 40; // 온도 오프셋 -40도
|
||||
}
|
||||
|
||||
void CDebugModeProcedure(void)
|
||||
{
|
||||
if (GeneralOperValue.Maintenence.ManualCranking == 1U)
|
||||
{
|
||||
if (CApuSystemAlarmCheck() == 0U)
|
||||
{
|
||||
; // 알람이 없을 경우만 동작 하도록 함.
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
;
|
||||
}
|
||||
|
||||
if (GeneralOperValue.Maintenence.LampTest == 1U)
|
||||
{
|
||||
GPIO_CPU_LED_OPERATION(1U);
|
||||
GPIO_CPU_LED_FAULT(1U);
|
||||
GPIO_CPU_LED_STOP(1U);
|
||||
}
|
||||
else
|
||||
{
|
||||
GPIO_CPU_LED_OPERATION(0U);
|
||||
GPIO_CPU_LED_FAULT(0U);
|
||||
GPIO_CPU_LED_STOP(0U);
|
||||
}
|
||||
|
||||
if (GeneralOperValue.Maintenence.KeyTest == 1U)
|
||||
{
|
||||
if ((GPIO_KEY_UP() == 1U) && (GPIO_KEY_DOWN() == 1U))
|
||||
{
|
||||
GeneralOperValue.Maintenence.KeyTest = 0U;
|
||||
OledOperValue.uiPageNum = OLED_PAGE_MAINTENENCE;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void CLedControlProcedure(void)
|
||||
{
|
||||
switch (CGetApuOperIndex())
|
||||
{
|
||||
case APU_OPER_IDX_EMERGENCY:
|
||||
{
|
||||
GPIO_CPU_LED_FAULT(1U);
|
||||
GPIO_CPU_LED_STOP(1U);
|
||||
|
||||
GPIO_CPU_LED_OPERATION(0U);
|
||||
break;
|
||||
}
|
||||
case APU_OPER_IDX_STANDBY:
|
||||
{
|
||||
GPIO_CPU_LED_STOP(1U);
|
||||
|
||||
GPIO_CPU_LED_FAULT(0U);
|
||||
GPIO_CPU_LED_OPERATION(0U);
|
||||
break;
|
||||
}
|
||||
case APU_OPER_IDX_ENGINE_STABLED:
|
||||
{
|
||||
GPIO_CPU_LED_OPERATION(1U);
|
||||
|
||||
GPIO_CPU_LED_FAULT(0U);
|
||||
GPIO_CPU_LED_STOP(0U);
|
||||
break;
|
||||
}
|
||||
default:
|
||||
{
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user