215 lines
5.0 KiB
Plaintext
215 lines
5.0 KiB
Plaintext
#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;
|
|
}
|
|
}
|
|
}
|