|
@@ -46,16 +46,20 @@
|
|
|
|
|
|
#define AC_DEFAULT_VOL 220
|
|
|
|
|
|
+#define NO_DEFINE 255
|
|
|
+#define NDEFAULT_AC_INDEX 2
|
|
|
+
|
|
|
struct SysConfigAndInfo *ShmSysConfigAndInfo;
|
|
|
struct StatusCodeData *ShmStatusCodeData;
|
|
|
struct FanModuleData *ShmFanModuleData;
|
|
|
struct RelayModuleData *ShmRelayModuleData;
|
|
|
struct LedModuleData *ShmLedModuleData;
|
|
|
struct PsuData *ShmPsuData;
|
|
|
+struct OCPP16Data *ShmOCPP16Data;
|
|
|
|
|
|
#define VIN_MAX_VOLTAGE_IEC 285 // 大於該值 : OVP
|
|
|
#define VIN_MIN_VOLTAGE_IEC 160 // 小於該值 : UVP
|
|
|
-#define VIN_MAX_VOLTAGE_UL 315 // 大於該值 : OVP
|
|
|
+#define VIN_MAX_VOLTAGE_UL 315 // 大於該值 : OVP // 美規 (W)
|
|
|
#define VIN_MIN_VOLTAGE_UL 210 // 小於該值 : UVP
|
|
|
|
|
|
#define VIN_DROP_VOLTAGE 150 // 小於該值 : ac drop
|
|
@@ -64,7 +68,7 @@ struct PsuData *ShmPsuData;
|
|
|
#define VOUT_MIN_VOLTAGE 150
|
|
|
#define IOUT_MAX_CURRENT 50
|
|
|
|
|
|
-#define MAX_FAN_SPEED 13500
|
|
|
+#define MAX_FAN_SPEED 14000
|
|
|
#define MIN_FAN_SPEED 3000
|
|
|
#define NORMAL_FAN_SPEED 7000
|
|
|
|
|
@@ -74,6 +78,16 @@ struct PsuData *ShmPsuData;
|
|
|
#define GFD_PRECHARGE 2
|
|
|
#define GFD_CHARGING 3
|
|
|
|
|
|
+// LED Intensity (rate)
|
|
|
+#define LED_INTENSITY_DARKEST 0.2
|
|
|
+#define LED_INTENSITY_MEDIUM 0.6
|
|
|
+#define LED_INTENSITY_BRIGHTEST 1
|
|
|
+
|
|
|
+// EE Spec
|
|
|
+#define LED_BRIGHTNESS_LV_HIGH 1
|
|
|
+#define LED_BRIGHTNESS_LV_MID 0.5
|
|
|
+#define LED_BRIGHTNESS_LV_LOW 0.2
|
|
|
+
|
|
|
// 最小切換 Relay 電壓
|
|
|
#define SELF_TO_CHANGE_RELAY_STATUS 600
|
|
|
// 透過電壓確認 Relay 是否搭上的依據電壓
|
|
@@ -415,7 +429,7 @@ void GetPresentInputVol()
|
|
|
{
|
|
|
if (inputVoltage.L1N_L12 < VIN_MIN_VOLTAGE_IEC)
|
|
|
{
|
|
|
- PRINTF_FUNC("In Uvp L1N_L12 = %d \n", inputVoltage.L1N_L12);
|
|
|
+ PRINTF_FUNC("In Uvp L1N_L12 = %f \n", inputVoltage.L1N_L12);
|
|
|
ShmStatusCodeData->AlarmCode.AlarmEvents.bits.SystemL1InputUVP = YES;
|
|
|
}
|
|
|
else
|
|
@@ -423,7 +437,7 @@ void GetPresentInputVol()
|
|
|
|
|
|
if (inputVoltage.L2N_L23 < VIN_MIN_VOLTAGE_IEC)
|
|
|
{
|
|
|
- PRINTF_FUNC("In Uvp L2N_L23 = %d \n", inputVoltage.L2N_L23);
|
|
|
+ PRINTF_FUNC("In Uvp L2N_L23 = %f \n", inputVoltage.L2N_L23);
|
|
|
ShmStatusCodeData->AlarmCode.AlarmEvents.bits.SystemL2InputUVP = YES;
|
|
|
}
|
|
|
else
|
|
@@ -431,7 +445,7 @@ void GetPresentInputVol()
|
|
|
|
|
|
if (inputVoltage.L3N_L31 < VIN_MIN_VOLTAGE_IEC)
|
|
|
{
|
|
|
- PRINTF_FUNC("In Uvp L3N_L31 = %d \n", inputVoltage.L3N_L31);
|
|
|
+ PRINTF_FUNC("In Uvp L3N_L31 = %f \n", inputVoltage.L3N_L31);
|
|
|
ShmStatusCodeData->AlarmCode.AlarmEvents.bits.SystemL3InputUVP = YES;
|
|
|
}
|
|
|
else
|
|
@@ -441,7 +455,7 @@ void GetPresentInputVol()
|
|
|
{
|
|
|
if (inputVoltage.L1N_L12 < VIN_MIN_VOLTAGE_UL)
|
|
|
{
|
|
|
- PRINTF_FUNC("In Uvp L1N_L12 = %d \n", inputVoltage.L1N_L12);
|
|
|
+ PRINTF_FUNC("In Uvp L1N_L12 = %f \n", inputVoltage.L1N_L12);
|
|
|
ShmStatusCodeData->AlarmCode.AlarmEvents.bits.SystemL1InputUVP = YES;
|
|
|
}
|
|
|
else
|
|
@@ -449,7 +463,7 @@ void GetPresentInputVol()
|
|
|
|
|
|
if (inputVoltage.L2N_L23 < VIN_MIN_VOLTAGE_UL)
|
|
|
{
|
|
|
- PRINTF_FUNC("In Uvp L2N_L23 = %d \n", inputVoltage.L2N_L23);
|
|
|
+ PRINTF_FUNC("In Uvp L2N_L23 = %f \n", inputVoltage.L2N_L23);
|
|
|
ShmStatusCodeData->AlarmCode.AlarmEvents.bits.SystemL2InputUVP = YES;
|
|
|
}
|
|
|
else
|
|
@@ -457,7 +471,7 @@ void GetPresentInputVol()
|
|
|
|
|
|
if (inputVoltage.L3N_L31 < VIN_MIN_VOLTAGE_UL)
|
|
|
{
|
|
|
- PRINTF_FUNC("In Uvp L3N_L31 = %d \n", inputVoltage.L3N_L31);
|
|
|
+ PRINTF_FUNC("In Uvp L3N_L31 = %f \n", inputVoltage.L3N_L31);
|
|
|
ShmStatusCodeData->AlarmCode.AlarmEvents.bits.SystemL3InputUVP = YES;
|
|
|
}
|
|
|
else
|
|
@@ -469,7 +483,7 @@ void GetPresentInputVol()
|
|
|
{
|
|
|
if (inputVoltage.L1N_L12 > VIN_MAX_VOLTAGE_IEC)
|
|
|
{
|
|
|
- PRINTF_FUNC("In Ovp L1N_L12 = %d \n", inputVoltage.L1N_L12);
|
|
|
+ PRINTF_FUNC("In Ovp L1N_L12 = %f \n", inputVoltage.L1N_L12);
|
|
|
ShmStatusCodeData->AlarmCode.AlarmEvents.bits.SystemL1InputOVP = YES;
|
|
|
}
|
|
|
else
|
|
@@ -477,7 +491,7 @@ void GetPresentInputVol()
|
|
|
|
|
|
if (inputVoltage.L2N_L23 > VIN_MAX_VOLTAGE_IEC)
|
|
|
{
|
|
|
- PRINTF_FUNC("In Ovp L2N_L23 = %d \n", inputVoltage.L2N_L23);
|
|
|
+ PRINTF_FUNC("In Ovp L2N_L23 = %f \n", inputVoltage.L2N_L23);
|
|
|
ShmStatusCodeData->AlarmCode.AlarmEvents.bits.SystemL2InputOVP = YES;
|
|
|
}
|
|
|
else
|
|
@@ -485,7 +499,7 @@ void GetPresentInputVol()
|
|
|
|
|
|
if (inputVoltage.L3N_L31 > VIN_MAX_VOLTAGE_IEC)
|
|
|
{
|
|
|
- PRINTF_FUNC("In Ovp L3N_L31 = %d \n", inputVoltage.L3N_L31);
|
|
|
+ PRINTF_FUNC("In Ovp L3N_L31 = %f \n", inputVoltage.L3N_L31);
|
|
|
ShmStatusCodeData->AlarmCode.AlarmEvents.bits.SystemL3InputOVP = YES;
|
|
|
}
|
|
|
else
|
|
@@ -495,7 +509,7 @@ void GetPresentInputVol()
|
|
|
{
|
|
|
if (inputVoltage.L1N_L12 > VIN_MAX_VOLTAGE_UL)
|
|
|
{
|
|
|
- PRINTF_FUNC("In Ovp L1N_L12 = %d \n", inputVoltage.L1N_L12);
|
|
|
+ PRINTF_FUNC("In Ovp L1N_L12 = %f \n", inputVoltage.L1N_L12);
|
|
|
ShmStatusCodeData->AlarmCode.AlarmEvents.bits.SystemL1InputOVP = YES;
|
|
|
}
|
|
|
else
|
|
@@ -503,7 +517,7 @@ void GetPresentInputVol()
|
|
|
|
|
|
if (inputVoltage.L2N_L23 > VIN_MAX_VOLTAGE_UL)
|
|
|
{
|
|
|
- PRINTF_FUNC("In Ovp L2N_L23 = %d \n", inputVoltage.L2N_L23);
|
|
|
+ PRINTF_FUNC("In Ovp L2N_L23 = %f \n", inputVoltage.L2N_L23);
|
|
|
ShmStatusCodeData->AlarmCode.AlarmEvents.bits.SystemL2InputOVP = YES;
|
|
|
}
|
|
|
else
|
|
@@ -511,7 +525,7 @@ void GetPresentInputVol()
|
|
|
|
|
|
if (inputVoltage.L3N_L31 > VIN_MAX_VOLTAGE_UL)
|
|
|
{
|
|
|
- PRINTF_FUNC("In Ovp L3N_L31 = %d \n", inputVoltage.L3N_L31);
|
|
|
+ PRINTF_FUNC("In Ovp L3N_L31 = %f \n", inputVoltage.L3N_L31);
|
|
|
ShmStatusCodeData->AlarmCode.AlarmEvents.bits.SystemL3InputOVP = YES;
|
|
|
}
|
|
|
else
|
|
@@ -822,17 +836,14 @@ void GetAuxPower()
|
|
|
|
|
|
void SetFanModuleSpeed()
|
|
|
{
|
|
|
- // 調整風扇速度要漸進式 : 500 rpm/p
|
|
|
FanSpeed _fanSpeed;
|
|
|
|
|
|
_setFanSpeed += fanSpeedSmoothValue;
|
|
|
|
|
|
if (_setFanSpeed >= ShmFanModuleData->SetFan1Speed)
|
|
|
_setFanSpeed = ShmFanModuleData->SetFan1Speed;
|
|
|
- {
|
|
|
- _fanSpeed.speed[0] = _setFanSpeed;
|
|
|
- }
|
|
|
|
|
|
+ _fanSpeed.speed[0] = _setFanSpeed;
|
|
|
_fanSpeed.speed[1] = _setFanSpeed;
|
|
|
_fanSpeed.speed[2] = _setFanSpeed;
|
|
|
_fanSpeed.speed[3] = _setFanSpeed;
|
|
@@ -847,6 +858,15 @@ void SetFanModuleSpeed()
|
|
|
//==========================================
|
|
|
void SetK1K2RelayStatus(byte index)
|
|
|
{
|
|
|
+ if (ShmPsuData->Work_Step >= _TEST_MODE && ShmPsuData->Work_Step <= _TEST_MODE)
|
|
|
+ {
|
|
|
+ if(regRelay.relay_event.bits.Gun1_N == NO)
|
|
|
+ outputRelay.relay_event.bits.Gun1_N = YES;
|
|
|
+ else if (regRelay.relay_event.bits.Gun1_P == NO)
|
|
|
+ outputRelay.relay_event.bits.Gun1_P = YES;
|
|
|
+ return;
|
|
|
+ }
|
|
|
+
|
|
|
if (_chargingData[index]->SystemStatus < S_PREPARING_FOR_EVSE)
|
|
|
{
|
|
|
if (_chargingData[index]->Evboard_id == 0x01)
|
|
@@ -1135,15 +1155,22 @@ bool IsNoneMatchLedColor()
|
|
|
|
|
|
void SetLedColor(struct ChargingInfoData *chargingData_1, struct ChargingInfoData *chargingData_2)
|
|
|
{
|
|
|
- if (ShmSysConfigAndInfo->SysInfo.IsAlternatvieConf == YES)
|
|
|
+ byte _colorBuf = COLOR_MAX_LV * LED_INTENSITY_BRIGHTEST;
|
|
|
+
|
|
|
+ if (ShmSysConfigAndInfo->SysConfig.LedInfo.Intensity == _LED_INTENSITY_DARKEST)
|
|
|
+ _colorBuf = COLOR_MAX_LV * LED_INTENSITY_DARKEST;
|
|
|
+ else if (ShmSysConfigAndInfo->SysConfig.LedInfo.Intensity == _LED_INTENSITY_MEDIUM)
|
|
|
+ _colorBuf = COLOR_MAX_LV * LED_INTENSITY_MEDIUM;
|
|
|
+
|
|
|
+ if (ShmSysConfigAndInfo->SysInfo.IsAlternatvieConf)
|
|
|
{
|
|
|
if ((chargingData_1->SystemStatus == S_BOOTING || chargingData_1->SystemStatus == S_IDLE || chargingData_1->SystemStatus == S_RESERVATION) &&
|
|
|
(chargingData_2->SystemStatus == S_BOOTING || chargingData_2->SystemStatus == S_IDLE || chargingData_2->SystemStatus == S_RESERVATION))
|
|
|
{
|
|
|
- led_color.Connect_1_Green = COLOR_MAX_LV;
|
|
|
+ led_color.Connect_1_Green = _colorBuf;
|
|
|
led_color.Connect_1_Blue = COLOR_MIN_LV;
|
|
|
led_color.Connect_1_Red = COLOR_MIN_LV;
|
|
|
- led_color.Connect_2_Green = COLOR_MAX_LV;
|
|
|
+ led_color.Connect_2_Green = _colorBuf;
|
|
|
led_color.Connect_2_Blue = COLOR_MIN_LV;
|
|
|
led_color.Connect_2_Red = COLOR_MIN_LV;
|
|
|
}
|
|
@@ -1153,10 +1180,10 @@ void SetLedColor(struct ChargingInfoData *chargingData_1, struct ChargingInfoDat
|
|
|
(chargingData_2->SystemStatus >= S_CCS_PRECHARGE_ST0 && chargingData_2->SystemStatus <= S_CCS_PRECHARGE_ST1))
|
|
|
{
|
|
|
led_color.Connect_1_Green = COLOR_MIN_LV;
|
|
|
- led_color.Connect_1_Blue = COLOR_MAX_LV;
|
|
|
+ led_color.Connect_1_Blue = _colorBuf;
|
|
|
led_color.Connect_1_Red = COLOR_MIN_LV;
|
|
|
led_color.Connect_2_Green = COLOR_MIN_LV;
|
|
|
- led_color.Connect_2_Blue = COLOR_MAX_LV;
|
|
|
+ led_color.Connect_2_Blue = _colorBuf;
|
|
|
led_color.Connect_2_Red = COLOR_MIN_LV;
|
|
|
}
|
|
|
}
|
|
@@ -1164,7 +1191,7 @@ void SetLedColor(struct ChargingInfoData *chargingData_1, struct ChargingInfoDat
|
|
|
{
|
|
|
if (chargingData_1->SystemStatus == S_BOOTING || chargingData_1->SystemStatus == S_IDLE || chargingData_1->SystemStatus == S_RESERVATION)
|
|
|
{
|
|
|
- led_color.Connect_1_Green = COLOR_MAX_LV;
|
|
|
+ led_color.Connect_1_Green = _colorBuf;
|
|
|
led_color.Connect_1_Blue = COLOR_MIN_LV;
|
|
|
led_color.Connect_1_Red = COLOR_MIN_LV;
|
|
|
}
|
|
@@ -1172,14 +1199,14 @@ void SetLedColor(struct ChargingInfoData *chargingData_1, struct ChargingInfoDat
|
|
|
(chargingData_1->SystemStatus >= S_CCS_PRECHARGE_ST0 && chargingData_1->SystemStatus <= S_CCS_PRECHARGE_ST1))
|
|
|
{
|
|
|
led_color.Connect_1_Green = COLOR_MIN_LV;
|
|
|
- led_color.Connect_1_Blue = COLOR_MAX_LV;
|
|
|
+ led_color.Connect_1_Blue = _colorBuf;
|
|
|
led_color.Connect_1_Red = COLOR_MIN_LV;
|
|
|
}
|
|
|
|
|
|
// --------------------------------------------------------------------------
|
|
|
if (chargingData_2->SystemStatus == S_BOOTING || chargingData_2->SystemStatus == S_IDLE || chargingData_2->SystemStatus == S_RESERVATION)
|
|
|
{
|
|
|
- led_color.Connect_2_Green = COLOR_MAX_LV;
|
|
|
+ led_color.Connect_2_Green = _colorBuf;
|
|
|
led_color.Connect_2_Blue = COLOR_MIN_LV;
|
|
|
led_color.Connect_2_Red = COLOR_MIN_LV;
|
|
|
}
|
|
@@ -1187,7 +1214,7 @@ void SetLedColor(struct ChargingInfoData *chargingData_1, struct ChargingInfoDat
|
|
|
(chargingData_2->SystemStatus >= S_CCS_PRECHARGE_ST0 && chargingData_2->SystemStatus <= S_CCS_PRECHARGE_ST1))
|
|
|
{
|
|
|
led_color.Connect_2_Green = COLOR_MIN_LV;
|
|
|
- led_color.Connect_2_Blue = COLOR_MAX_LV;
|
|
|
+ led_color.Connect_2_Blue = _colorBuf;
|
|
|
led_color.Connect_2_Red = COLOR_MIN_LV;
|
|
|
}
|
|
|
}
|
|
@@ -1196,10 +1223,10 @@ void SetLedColor(struct ChargingInfoData *chargingData_1, struct ChargingInfoDat
|
|
|
{
|
|
|
led_color.Connect_1_Green = COLOR_MIN_LV;
|
|
|
led_color.Connect_1_Blue = COLOR_MIN_LV;
|
|
|
- led_color.Connect_1_Red = COLOR_MAX_LV;
|
|
|
+ led_color.Connect_1_Red = _colorBuf;
|
|
|
led_color.Connect_2_Green = COLOR_MIN_LV;
|
|
|
led_color.Connect_2_Blue = COLOR_MIN_LV;
|
|
|
- led_color.Connect_2_Red = COLOR_MAX_LV;
|
|
|
+ led_color.Connect_2_Red = _colorBuf;
|
|
|
}
|
|
|
|
|
|
if (_checkLedChanged > 0)
|
|
@@ -1227,7 +1254,6 @@ int InitShareMemory()
|
|
|
int result = PASS;
|
|
|
int MeterSMId;
|
|
|
|
|
|
- //creat ShmSysConfigAndInfo
|
|
|
if ((MeterSMId = shmget(ShmSysConfigAndInfoKey, sizeof(struct SysConfigAndInfo), 0777)) < 0)
|
|
|
{
|
|
|
#ifdef SystemLogMessage
|
|
@@ -1242,7 +1268,7 @@ int InitShareMemory()
|
|
|
#endif
|
|
|
result = FAIL;
|
|
|
}
|
|
|
- //creat ShmStatusCodeData
|
|
|
+
|
|
|
if ((MeterSMId = shmget(ShmStatusCodeKey, sizeof(struct StatusCodeData), 0777)) < 0)
|
|
|
{
|
|
|
#ifdef SystemLogMessage
|
|
@@ -1258,7 +1284,6 @@ int InitShareMemory()
|
|
|
result = FAIL;
|
|
|
}
|
|
|
|
|
|
- //creat ShmFanModuleData
|
|
|
if ((MeterSMId = shmget(ShmFanBdKey, sizeof(struct FanModuleData), 0777)) < 0)
|
|
|
{
|
|
|
#ifdef SystemLogMessage
|
|
@@ -1275,7 +1300,6 @@ int InitShareMemory()
|
|
|
}
|
|
|
memset(ShmFanModuleData,0,sizeof(struct FanModuleData));
|
|
|
|
|
|
- //creat ShmRelayModuleData
|
|
|
if ((MeterSMId = shmget(ShmRelayBdKey, sizeof(struct RelayModuleData), 0777)) < 0)
|
|
|
{
|
|
|
#ifdef SystemLogMessage
|
|
@@ -1292,7 +1316,6 @@ int InitShareMemory()
|
|
|
}
|
|
|
memset(ShmRelayModuleData,0,sizeof(struct RelayModuleData));
|
|
|
|
|
|
- //creat ShmLedModuleData
|
|
|
if ((MeterSMId = shmget(ShmLedBdKey, sizeof(struct LedModuleData), 0777)) < 0)
|
|
|
{
|
|
|
#ifdef SystemLogMessage
|
|
@@ -1309,7 +1332,6 @@ int InitShareMemory()
|
|
|
}
|
|
|
memset(ShmLedModuleData,0,sizeof(struct LedModuleData));
|
|
|
|
|
|
- //creat ShmPsuData
|
|
|
if ((MeterSMId = shmget(ShmPsuKey, sizeof(struct PsuData), 0777)) < 0)
|
|
|
{
|
|
|
#ifdef SystemLogMessage
|
|
@@ -1325,6 +1347,21 @@ int InitShareMemory()
|
|
|
result = FAIL;
|
|
|
}
|
|
|
|
|
|
+ if ((MeterSMId = shmget(ShmOcppModuleKey, sizeof(struct OCPP16Data), 0777)) < 0)
|
|
|
+ {
|
|
|
+ #ifdef SystemLogMessage
|
|
|
+ DEBUG_ERROR("shmat ShmOCPP16Data NG \n");
|
|
|
+ #endif
|
|
|
+ result = FAIL;
|
|
|
+ }
|
|
|
+ else if ((ShmOCPP16Data = shmat(MeterSMId, NULL, 0)) == (void *) -1)
|
|
|
+ {
|
|
|
+ #ifdef SystemLogMessage
|
|
|
+ DEBUG_ERROR("shmat ShmOCPP16Data NG \n");
|
|
|
+ #endif
|
|
|
+ result = FAIL;
|
|
|
+ }
|
|
|
+
|
|
|
return result;
|
|
|
}
|
|
|
|
|
@@ -1427,6 +1464,8 @@ void Initialization()
|
|
|
break;
|
|
|
}
|
|
|
}
|
|
|
+
|
|
|
+ sleep(1);
|
|
|
}
|
|
|
|
|
|
isPass = false;
|
|
@@ -1445,6 +1484,8 @@ void Initialization()
|
|
|
break;
|
|
|
}
|
|
|
}
|
|
|
+
|
|
|
+ sleep(1);
|
|
|
}
|
|
|
}
|
|
|
}
|
|
@@ -1546,7 +1587,7 @@ void CableCheckDetected(byte index)
|
|
|
if ((_chargingData[index]->Type >= _Type_Chademo && _chargingData[index]->Type <= _Type_GB) ||
|
|
|
(_chargingData[index]->Type == 0x09 && ShmSysConfigAndInfo->SysConfig.AlwaysGfdFlag))
|
|
|
{
|
|
|
- if ((_chargingData[index]->SystemStatus >= S_PREPARING_FOR_EVSE && _chargingData[index]->SystemStatus <= S_CHARGING) ||
|
|
|
+ if ((_chargingData[index]->SystemStatus >= S_PREPARING_FOR_EVSE && _chargingData[index]->SystemStatus <= S_TERMINATING) ||
|
|
|
(_chargingData[index]->SystemStatus >= S_CCS_PRECHARGE_ST0 && _chargingData[index]->SystemStatus <= S_CCS_PRECHARGE_ST1))
|
|
|
{
|
|
|
if (_chargingData[index]->SystemStatus == S_PREPARING_FOR_EVSE &&
|
|
@@ -1559,16 +1600,13 @@ void CableCheckDetected(byte index)
|
|
|
{
|
|
|
SetGfdConfig(index, GFD_PRECHARGE);
|
|
|
}
|
|
|
- else if (_chargingData[index]->SystemStatus <= S_CHARGING)
|
|
|
+ else if (_chargingData[index]->SystemStatus >= S_CHARGING &&
|
|
|
+ _chargingData[index]->SystemStatus <= S_TERMINATING)
|
|
|
{
|
|
|
- if (_chargingData[index]->Type == _Type_CCS_2)
|
|
|
- {
|
|
|
- SetGfdConfig(index, GFD_CHARGING);
|
|
|
- }
|
|
|
- else
|
|
|
- {
|
|
|
+ if (_chargingData[index]->Type == _Type_GB || _chargingData[index]->Type == _Type_Chademo)
|
|
|
SetGfdConfig(index, GFD_IDLE);
|
|
|
- }
|
|
|
+ else
|
|
|
+ SetGfdConfig(index, GFD_CHARGING);
|
|
|
}
|
|
|
}
|
|
|
else if(_chargingData[index]->SystemStatus == S_COMPLETE || _chargingData[index]->SystemStatus == S_PREPARNING
|
|
@@ -1668,6 +1706,7 @@ void CheckRelayWeldingStatus(byte index)
|
|
|
void GetPsuTempForFanSpeed()
|
|
|
{
|
|
|
char temp = 0;
|
|
|
+
|
|
|
for (byte index = 0; index < ShmPsuData->GroupCount; index++)
|
|
|
{
|
|
|
for (byte count = 0; count < ShmPsuData->PsuGroup[index].GroupPresentPsuQuantity; count++)
|
|
@@ -1677,6 +1716,8 @@ void GetPsuTempForFanSpeed()
|
|
|
}
|
|
|
}
|
|
|
|
|
|
+ ShmSysConfigAndInfo->SysInfo.SystemAmbientTemp = temp;
|
|
|
+
|
|
|
if (ShmSysConfigAndInfo->SysConfig.SwitchDebugFlag == NO)
|
|
|
{
|
|
|
if (ShmFanModuleData->TestFanSpeed == NORMAL_FAN_SPEED)
|
|
@@ -1694,6 +1735,65 @@ void GetPsuTempForFanSpeed()
|
|
|
}
|
|
|
}
|
|
|
|
|
|
+void GetFanSpeedByFunction()
|
|
|
+{
|
|
|
+ if (ShmSysConfigAndInfo->SysConfig.SwitchDebugFlag == YES)
|
|
|
+ return;
|
|
|
+
|
|
|
+ // 風控修改 :
|
|
|
+ // ******************************************************* //
|
|
|
+ //
|
|
|
+ // 當前PSU輸出總 KW PSU Temp
|
|
|
+ // 30 x -------------------- x ---------- + 14 x (PSU Temp - 45)
|
|
|
+ // 當前樁最大功率 KW 45
|
|
|
+ //
|
|
|
+ // ******************************************************* //
|
|
|
+
|
|
|
+ // 當前樁最大功率 KW : ShmPsuData->SystemAvailablePower
|
|
|
+ unsigned int _maxPower = ShmPsuData->SystemAvailablePower;
|
|
|
+ // 當前PSU輸出總 KW & PSU Temp :
|
|
|
+ unsigned char temp = 0;
|
|
|
+ float power = 0;
|
|
|
+
|
|
|
+ for (byte index = 0; index < ShmPsuData->GroupCount; index++)
|
|
|
+ {
|
|
|
+ for (byte count = 0; count < ShmPsuData->PsuGroup[index].GroupPresentPsuQuantity; count++)
|
|
|
+ {
|
|
|
+ if (temp < ShmPsuData->PsuGroup[index].PsuModule[count].ExletTemp)
|
|
|
+ temp = ShmPsuData->PsuGroup[index].PsuModule[count].ExletTemp;
|
|
|
+ }
|
|
|
+ power += (_chargingData[index]->PresentChargingPower * 10);
|
|
|
+ }
|
|
|
+
|
|
|
+ double _pw_rate = 0;
|
|
|
+ if (_maxPower > 0)
|
|
|
+ _pw_rate = power / (double)_maxPower;
|
|
|
+ double _temp_rate = 0;
|
|
|
+ if (temp > 0)
|
|
|
+ _temp_rate = (double)temp / 45;
|
|
|
+ unsigned char _temp_diff = 0;
|
|
|
+ if (temp > 45)
|
|
|
+ _temp_diff = temp - 45;
|
|
|
+
|
|
|
+ ShmFanModuleData->TestFanSpeed = ((30 * _pw_rate * _temp_rate + 14 * _temp_diff) / 100) * MAX_FAN_SPEED;
|
|
|
+
|
|
|
+ if (ShmFanModuleData->TestFanSpeed > MAX_FAN_SPEED)
|
|
|
+ ShmFanModuleData->TestFanSpeed = MAX_FAN_SPEED;
|
|
|
+
|
|
|
+ if (ShmFanModuleData->TestFanSpeed < 0)
|
|
|
+ ShmFanModuleData->TestFanSpeed = 0;
|
|
|
+//
|
|
|
+// printf("power = %f \n", power);
|
|
|
+// printf("_maxPower = %d \n", _maxPower);
|
|
|
+// printf("temp = %d \n", temp);
|
|
|
+//
|
|
|
+// printf("_pw_rate = %f \n", _pw_rate);
|
|
|
+// printf("_temp_rate = %f \n", _temp_rate);
|
|
|
+// printf("_temp_diff = %d \n", _temp_diff);
|
|
|
+// printf("fan rate = %f \n", (30 * _pw_rate * _temp_rate + 14 * _temp_diff));
|
|
|
+// printf("ShmFanModuleData->TestFanSpeed = %d \n", ShmFanModuleData->TestFanSpeed);
|
|
|
+}
|
|
|
+
|
|
|
void GetAcStatus()
|
|
|
{
|
|
|
if (Query_AC_Status(Uart5Fd, Addr.AcPlug, &acStatus) == PASS)
|
|
@@ -1789,10 +1889,61 @@ void ChangeStartOrStopDateTime(byte isStart)
|
|
|
strcpy((char *)ac_chargingInfo[0]->StopDateTime, cmdBuf);
|
|
|
}
|
|
|
|
|
|
+void OcppStartTransation(byte gunIndex)
|
|
|
+{
|
|
|
+ if(strcmp((char *)ac_chargingInfo[0]->StartUserId, "") == EQUAL)
|
|
|
+ strcpy((char *)ShmOCPP16Data->StartTransaction[gunIndex].IdTag, (char *)ShmOCPP16Data->StartTransaction[gunIndex].IdTag);
|
|
|
+ else
|
|
|
+ strcpy((char *)ShmOCPP16Data->StartTransaction[gunIndex].IdTag, (char *)ac_chargingInfo[0]->StartUserId);
|
|
|
+
|
|
|
+ PRINTF_FUNC("AC IdTag = %s \n", ShmOCPP16Data->StartTransaction[gunIndex].IdTag);
|
|
|
+ ShmOCPP16Data->CpMsg.bits[gunIndex].StartTransactionReq = YES;
|
|
|
+}
|
|
|
+
|
|
|
+void OcppStopTransation(byte gunIndex)
|
|
|
+{
|
|
|
+ if(strcmp((char *)ac_chargingInfo[0]->StartUserId, "") == EQUAL)
|
|
|
+ strcpy((char *)ShmOCPP16Data->StopTransaction[gunIndex].IdTag, (char *)ShmOCPP16Data->StopTransaction[gunIndex].IdTag);
|
|
|
+ else
|
|
|
+ strcpy((char *)ShmOCPP16Data->StopTransaction[gunIndex].IdTag, (char *)ac_chargingInfo[0]->StartUserId);
|
|
|
+
|
|
|
+ PRINTF_FUNC("AC IdTag = %s \n", ShmOCPP16Data->StopTransaction[gunIndex].IdTag);
|
|
|
+ ShmOCPP16Data->CpMsg.bits[gunIndex].StopTransactionReq = YES;
|
|
|
+}
|
|
|
+
|
|
|
+bool OcppRemoteStop(byte gunIndex)
|
|
|
+{
|
|
|
+ bool result = ShmOCPP16Data->CsMsg.bits[gunIndex].RemoteStopTransactionReq;
|
|
|
+
|
|
|
+ if (ShmOCPP16Data->CsMsg.bits[gunIndex].RemoteStopTransactionReq == YES)
|
|
|
+ {
|
|
|
+ strcpy((char *)ShmOCPP16Data->StopTransaction[gunIndex].StopReason, "Remote");
|
|
|
+ ShmOCPP16Data->CsMsg.bits[gunIndex].RemoteStopTransactionReq = NO;
|
|
|
+ }
|
|
|
+
|
|
|
+ return result;
|
|
|
+}
|
|
|
+
|
|
|
+unsigned char isModeChange()
|
|
|
+{
|
|
|
+ unsigned char result = NO;
|
|
|
+
|
|
|
+ if(ac_chargingInfo[0]->SystemStatus != ac_chargingInfo[0]->PreviousSystemStatus)
|
|
|
+ {
|
|
|
+ result = YES;
|
|
|
+ ac_chargingInfo[0]->PreviousSystemStatus = ac_chargingInfo[0]->SystemStatus;
|
|
|
+ }
|
|
|
+
|
|
|
+ return result;
|
|
|
+}
|
|
|
+
|
|
|
void AcChargeTypeProcess()
|
|
|
{
|
|
|
if (acgunCount > 0)
|
|
|
{
|
|
|
+ //ac_chargingInfo[0]->SelfTest_Comp = YES;
|
|
|
+ //ac_chargingInfo[0]->IsModeChagned = PASS;
|
|
|
+ //---------------------------------------------
|
|
|
if (ac_chargingInfo[0]->SelfTest_Comp == NO)
|
|
|
{
|
|
|
ac_chargingInfo[0]->IsModeChagned = NO;
|
|
@@ -1810,15 +1961,18 @@ void AcChargeTypeProcess()
|
|
|
GetAcAlarmCode();
|
|
|
|
|
|
byte _status = S_NONE;
|
|
|
- bool _isStatusChanged = false;
|
|
|
|
|
|
- if (acStatus.CpStatus == AC_SYS_A || ac_chargingInfo[0]->IsErrorOccur)
|
|
|
+ if (ac_chargingInfo[0]->SystemStatus == S_IDLE && ac_chargingInfo[0]->IsErrorOccur)
|
|
|
+ {
|
|
|
+ _status = S_ALARM;
|
|
|
+ }
|
|
|
+ else if (acStatus.CpStatus == AC_SYS_A || ac_chargingInfo[0]->IsErrorOccur)
|
|
|
{
|
|
|
if (ac_chargingInfo[0]->SystemStatus == S_CHARGING)
|
|
|
_status = S_TERMINATING;
|
|
|
else if (ac_chargingInfo[0]->SystemStatus >= S_TERMINATING)
|
|
|
{
|
|
|
- if (GetTimeoutValue(_ac_charging_comp) >= 10000000)
|
|
|
+ if (GetTimeoutValue(_ac_charging_comp) >= 10000000 && acStatus.CpStatus == AC_SYS_A)
|
|
|
_status = S_IDLE;
|
|
|
}
|
|
|
else
|
|
@@ -1832,21 +1986,21 @@ void AcChargeTypeProcess()
|
|
|
else if (GetTimeoutValue(_ac_preparing) >= 30000000)
|
|
|
_status = S_IDLE;
|
|
|
}
|
|
|
- else if (acStatus.CpStatus == AC_SYS_B &&
|
|
|
+ else if ((acStatus.CpStatus == AC_SYS_B || ac_chargingInfo[0]->ConnectorPlugIn == AC_SYS_B) &&
|
|
|
ac_chargingInfo[0]->IsAvailable &&
|
|
|
!ac_chargingInfo[0]->IsErrorOccur &&
|
|
|
(ShmSysConfigAndInfo->SysInfo.WaitForPlugit == YES ||
|
|
|
ShmSysConfigAndInfo->SysConfig.AuthorisationMode == AUTH_MODE_DISABLE))
|
|
|
{
|
|
|
- if (ShmSysConfigAndInfo->SysInfo.OrderCharging != FAIL &&
|
|
|
- ShmSysConfigAndInfo->SysInfo.OrderCharging == DEFAULT_AC_INDEX)
|
|
|
+ if (ac_chargingInfo[0]->RemoteStartFlag == YES)
|
|
|
{
|
|
|
PRINTF_FUNC("** AC Remote \n");
|
|
|
+ ac_chargingInfo[0]->RemoteStartFlag = NO;
|
|
|
strcpy((char *)ac_chargingInfo[0]->StartUserId, "");
|
|
|
ShmSysConfigAndInfo->SysInfo.WaitForPlugit = NO;
|
|
|
_status = S_PREPARNING;
|
|
|
}
|
|
|
- else
|
|
|
+ else if (ShmSysConfigAndInfo->SysInfo.OrderCharging == NO_DEFINE)
|
|
|
{
|
|
|
PRINTF_FUNC("** UserId = %s \n", ShmSysConfigAndInfo->SysConfig.UserId);
|
|
|
strcpy((char *)ac_chargingInfo[0]->StartUserId, (char *)ShmSysConfigAndInfo->SysConfig.UserId);
|
|
@@ -1856,12 +2010,16 @@ void AcChargeTypeProcess()
|
|
|
_status = S_PREPARNING;
|
|
|
}
|
|
|
}
|
|
|
+ else if (ac_chargingInfo[0]->SystemStatus == S_CHARGING)
|
|
|
+ {
|
|
|
+ if (OcppRemoteStop(1))
|
|
|
+ _status = S_TERMINATING;
|
|
|
+ }
|
|
|
|
|
|
//printf("_status = %d \n", _status);
|
|
|
|
|
|
if (_status != S_NONE && ac_chargingInfo[0]->SystemStatus != _status)
|
|
|
{
|
|
|
- _isStatusChanged = true;
|
|
|
ac_chargingInfo[0]->SystemStatus = _status;
|
|
|
}
|
|
|
|
|
@@ -1869,12 +2027,15 @@ void AcChargeTypeProcess()
|
|
|
switch(ac_chargingInfo[0]->SystemStatus)
|
|
|
{
|
|
|
case S_IDLE:
|
|
|
+ case S_ALARM:
|
|
|
{
|
|
|
- if (_isStatusChanged)
|
|
|
+ if (isModeChange())
|
|
|
{
|
|
|
ac_chargingInfo[0]->PresentChargedEnergy = 0.0;
|
|
|
ac_chargingInfo[0]->PresentChargingVoltage = 0;
|
|
|
ac_chargingInfo[0]->ChargingFee = 0.0;
|
|
|
+ strcpy((char *)ac_chargingInfo[0]->StartDateTime, "");
|
|
|
+ strcpy((char *)ac_chargingInfo[0]->StopDateTime, "");
|
|
|
_beforeChargingTotalEnergy = 0.0;
|
|
|
}
|
|
|
|
|
@@ -1883,16 +2044,18 @@ void AcChargeTypeProcess()
|
|
|
break;
|
|
|
case S_PREPARNING:
|
|
|
{
|
|
|
- if (_isStatusChanged)
|
|
|
+ if (isModeChange())
|
|
|
{
|
|
|
ShmSysConfigAndInfo->SysInfo.SystemPage = _LCM_NONE;
|
|
|
ShmSysConfigAndInfo->SysInfo.CurGunSelectedByAc = DEFAULT_AC_INDEX;
|
|
|
- ShmSysConfigAndInfo->SysInfo.OrderCharging = FAIL;
|
|
|
+ if (ShmSysConfigAndInfo->SysInfo.OrderCharging != NO_DEFINE)
|
|
|
+ ShmSysConfigAndInfo->SysInfo.OrderCharging = NO_DEFINE;
|
|
|
gettimeofday(&_ac_preparing, NULL);
|
|
|
}
|
|
|
|
|
|
if (GetChargingEnergy() == PASS)
|
|
|
{
|
|
|
+ //ac_chargingInfo[0]->PresentChargedEnergy = acChargingEnergy.Energy / 100;
|
|
|
_beforeChargingTotalEnergy = acChargingEnergy.Energy;
|
|
|
}
|
|
|
|
|
@@ -1902,9 +2065,10 @@ void AcChargeTypeProcess()
|
|
|
break;
|
|
|
case S_CHARGING:
|
|
|
{
|
|
|
- if (_isStatusChanged)
|
|
|
+ if (isModeChange())
|
|
|
{
|
|
|
ftime(&_ac_startChargingTime);
|
|
|
+ OcppStartTransation(1);
|
|
|
ChangeStartOrStopDateTime(YES);
|
|
|
ShmSysConfigAndInfo->SysInfo.CurGunSelectedByAc = DEFAULT_AC_INDEX;
|
|
|
}
|
|
@@ -1924,12 +2088,12 @@ void AcChargeTypeProcess()
|
|
|
}
|
|
|
|
|
|
if (GetChargingCurrent() == PASS)
|
|
|
- ac_chargingInfo[0]->PresentChargingPower = (AC_DEFAULT_VOL * (acChargingCurrent.OuputCurrentL1 / 10)) / 1000;
|
|
|
+ ac_chargingInfo[0]->PresentChargingPower = (((float)(AC_DEFAULT_VOL * acChargingCurrent.OuputCurrentL1) / 10) / 1000);
|
|
|
|
|
|
ftime(&_ac_endChargingTime);
|
|
|
ac_chargingInfo[0]->PresentChargedDuration = DiffTimeb(_ac_startChargingTime, _ac_endChargingTime);
|
|
|
ac_chargingInfo[0]->PresentChargingVoltage = AC_DEFAULT_VOL;
|
|
|
- ac_chargingInfo[0]->PresentChargingCurrent = acChargingCurrent.OuputCurrentL1 / 10;
|
|
|
+ ac_chargingInfo[0]->PresentChargingCurrent = ((float)acChargingCurrent.OuputCurrentL1 / 10);
|
|
|
|
|
|
// 用以判斷是否有在輸出
|
|
|
ac_chargingInfo[0]->IsCharging = acStatus.RelayStatus;
|
|
@@ -1940,7 +2104,7 @@ void AcChargeTypeProcess()
|
|
|
break;
|
|
|
case S_TERMINATING:
|
|
|
{
|
|
|
- if (_isStatusChanged)
|
|
|
+ if (isModeChange())
|
|
|
{
|
|
|
ChangeStartOrStopDateTime(NO);
|
|
|
gettimeofday(&_ac_charging_comp, NULL);
|
|
@@ -1953,10 +2117,16 @@ void AcChargeTypeProcess()
|
|
|
break;
|
|
|
case S_COMPLETE:
|
|
|
{
|
|
|
- if (_isStatusChanged)
|
|
|
+ if (isModeChange())
|
|
|
{
|
|
|
gettimeofday(&_ac_charging_comp, NULL);
|
|
|
ftime(&_ac_endChargingTime);
|
|
|
+ if (strcmp((char *)ac_chargingInfo[0]->StartDateTime, "") != EQUAL)
|
|
|
+ {
|
|
|
+ // AC 固定為第2把槍
|
|
|
+ OcppStopTransation(1);
|
|
|
+ }
|
|
|
+
|
|
|
ChangeStartOrStopDateTime(NO);
|
|
|
ac_chargingInfo[0]->PresentChargedDuration = DiffTimeb(_ac_startChargingTime, _ac_endChargingTime);
|
|
|
}
|
|
@@ -2124,7 +2294,9 @@ int main(void)
|
|
|
// 橋接 relay
|
|
|
SetParalleRelayStatus();
|
|
|
|
|
|
- if (isCharging)
|
|
|
+ // 搭上 AC Contactor
|
|
|
+ if (isCharging ||
|
|
|
+ (ShmPsuData->Work_Step >= _TEST_MODE && ShmPsuData->Work_Step <= _TEST_MODE))
|
|
|
{
|
|
|
isStopChargingCount = false;
|
|
|
outputRelay.relay_event.bits.AC_Contactor = YES;
|
|
@@ -2143,6 +2315,9 @@ int main(void)
|
|
|
}
|
|
|
}
|
|
|
|
|
|
+ if (ShmPsuData->Work_Step >= _TEST_MODE && ShmPsuData->Work_Step <= _TEST_MODE)
|
|
|
+ outputRelay.relay_event.bits.Gun1_N = outputRelay.relay_event.bits.Gun1_P = YES;
|
|
|
+
|
|
|
// 搭上/鬆開 Relay
|
|
|
if(IsNoneMatchRelayStatus())
|
|
|
{
|
|
@@ -2171,54 +2346,21 @@ int main(void)
|
|
|
|
|
|
if (ShmFanModuleData->SelfTest_Comp == YES)
|
|
|
{
|
|
|
- // 風控修改 :
|
|
|
- // ******************************************************* //
|
|
|
- //
|
|
|
- // 當前PSU輸出總 KW PSU Temp
|
|
|
- // 30 x -------------------- x ---------- + 14 x (PSU Temp - 45)
|
|
|
- // 當前樁最大功率 KW 45
|
|
|
- //
|
|
|
- // ******************************************************* //
|
|
|
if (GetTimeoutValue(_priority_time) / 1000 >= 1000)
|
|
|
{
|
|
|
- GetPsuTempForFanSpeed();
|
|
|
-
|
|
|
+ //GetPsuTempForFanSpeed();
|
|
|
+ GetFanSpeedByFunction();
|
|
|
GetFanSpeed();
|
|
|
ShmSysConfigAndInfo->SysInfo.SystemFanRotaSpeed = _setFanSpeed;
|
|
|
|
|
|
gettimeofday(&_priority_time, NULL);
|
|
|
- if (isCharging)
|
|
|
- {
|
|
|
- // 在還沒問到 PSU 溫度~ 還是要有個最小轉速
|
|
|
- ShmFanModuleData->SetFan1Speed = MIN_FAN_SPEED;
|
|
|
- ShmFanModuleData->SetFan2Speed = MIN_FAN_SPEED;
|
|
|
- ShmFanModuleData->SetFan3Speed = MIN_FAN_SPEED;
|
|
|
- ShmFanModuleData->SetFan4Speed = MIN_FAN_SPEED;
|
|
|
|
|
|
- if (ShmFanModuleData->TestFanSpeed > 0)
|
|
|
- {
|
|
|
- ShmFanModuleData->SetFan1Speed = ShmFanModuleData->TestFanSpeed;
|
|
|
- ShmFanModuleData->SetFan2Speed = ShmFanModuleData->TestFanSpeed;
|
|
|
- ShmFanModuleData->SetFan3Speed = ShmFanModuleData->TestFanSpeed;
|
|
|
- ShmFanModuleData->SetFan4Speed = ShmFanModuleData->TestFanSpeed;
|
|
|
- }
|
|
|
- }
|
|
|
- else
|
|
|
- {
|
|
|
- ShmFanModuleData->SetFan1Speed = MIN_FAN_SPEED;
|
|
|
- ShmFanModuleData->SetFan2Speed = MIN_FAN_SPEED;
|
|
|
- ShmFanModuleData->SetFan3Speed = MIN_FAN_SPEED;
|
|
|
- ShmFanModuleData->SetFan4Speed = MIN_FAN_SPEED;
|
|
|
+ ShmFanModuleData->SetFan1Speed = ShmFanModuleData->TestFanSpeed;
|
|
|
+ ShmFanModuleData->SetFan2Speed = ShmFanModuleData->TestFanSpeed;
|
|
|
+ ShmFanModuleData->SetFan3Speed = ShmFanModuleData->TestFanSpeed;
|
|
|
+ ShmFanModuleData->SetFan4Speed = ShmFanModuleData->TestFanSpeed;
|
|
|
+
|
|
|
|
|
|
- // 停止時,如溫度還是很高,則需要維持該轉速直到溫度降低
|
|
|
- if (ShmFanModuleData->TestFanSpeed >= MAX_FAN_SPEED)
|
|
|
- {
|
|
|
- ShmFanModuleData->SetFan1Speed = ShmFanModuleData->TestFanSpeed;
|
|
|
- ShmFanModuleData->SetFan2Speed = ShmFanModuleData->TestFanSpeed;
|
|
|
- ShmFanModuleData->SetFan3Speed = ShmFanModuleData->TestFanSpeed;
|
|
|
- ShmFanModuleData->SetFan4Speed = ShmFanModuleData->TestFanSpeed;
|
|
|
- }
|
|
|
- }
|
|
|
|
|
|
//PRINTF_FUNC("set fan = %d \n", ShmFanModuleData->SetFan1Speed);
|
|
|
SetFanModuleSpeed();
|