|
@@ -55,9 +55,15 @@ float _cur_1 = 0;
|
|
|
float _pow_2 = 0;
|
|
|
float _cur_2 = 0;
|
|
|
|
|
|
+float _outVol_1 = 0;
|
|
|
+float _outCur_1 = 0;
|
|
|
+float _outVol_2 = 0;
|
|
|
+float _outCur_2 = 0;
|
|
|
+
|
|
|
// 限制最大充電電壓,因應不同 type 槍線來限制
|
|
|
-// Chademo : 500V, GB : 750, CCS : 950V
|
|
|
-//TODO: change maximum charging voltage by connector type
|
|
|
+// Chademo : 500V, 125A,
|
|
|
+// GB : 750, 120A
|
|
|
+// CCS : 950V, 120A
|
|
|
float maxChargingVol[2] = { 9500, 9500 }; // 限制最大充電電壓,如依照模塊則填上 0
|
|
|
// 限制最大充電電流與能量透過 Web
|
|
|
float maxChargingCur[2] = { 600, 600 }; // 限制最大充電電流,如依照模塊則填上 0
|
|
@@ -94,7 +100,7 @@ unsigned char mask_table[] = { 0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x80 };
|
|
|
void PRINTF_FUNC(char *string, ...);
|
|
|
|
|
|
void GetMaxVolAndCurMethod(byte index, float *vol, float *cur);
|
|
|
-void GetMaxPowerMethod(float *pow);
|
|
|
+void GetMaxPowerMethod(byte index, float *pow);
|
|
|
unsigned long GetTimeoutValue(struct timeval _sour_time);
|
|
|
|
|
|
#define DEBUG_INFO(format, args...) StoreLogMsg("[%s:%d][%s][Info] "format, __FILE__, __LINE__, __FUNCTION__, ##args)
|
|
@@ -126,11 +132,20 @@ int StoreLogMsg(const char *fmt, ...)
|
|
|
SeqEndTime.time = time(NULL);
|
|
|
tm=localtime(&SeqEndTime.time);
|
|
|
|
|
|
- sprintf(Buf,"echo \"%04d-%02d-%02d %02d:%02d:%02d.%03d - %s\" >> /Storage/SystemLog/[%04d.%02d]SystemLog",
|
|
|
- tm->tm_year+1900,tm->tm_mon+1,tm->tm_mday,tm->tm_hour,tm->tm_min,tm->tm_sec,SeqEndTime.millitm,
|
|
|
- buffer,
|
|
|
- tm->tm_year+1900,tm->tm_mon+1);
|
|
|
- system(Buf);
|
|
|
+ if (ShmSysConfigAndInfo->SysConfig.SwitchDebugFlag == YES)
|
|
|
+ {
|
|
|
+ sprintf(Buf,"%02d:%02d:%02d.%03d - %s",
|
|
|
+ tm->tm_hour,tm->tm_min,tm->tm_sec,SeqEndTime.millitm, buffer);
|
|
|
+ printf("%s \n", Buf);
|
|
|
+ }
|
|
|
+ else
|
|
|
+ {
|
|
|
+ sprintf(Buf,"echo \"%04d-%02d-%02d %02d:%02d:%02d.%03d - %s\" >> /Storage/SystemLog/[%04d.%02d]SystemLog",
|
|
|
+ tm->tm_year+1900,tm->tm_mon+1,tm->tm_mday,tm->tm_hour,tm->tm_min,tm->tm_sec,SeqEndTime.millitm,
|
|
|
+ buffer,
|
|
|
+ tm->tm_year+1900,tm->tm_mon+1);
|
|
|
+ system(Buf);
|
|
|
+ }
|
|
|
|
|
|
return rc;
|
|
|
}
|
|
@@ -153,10 +168,7 @@ void PRINTF_FUNC(char *string, ...)
|
|
|
vsnprintf(buffer, sizeof(buffer), string, args);
|
|
|
va_end(args);
|
|
|
|
|
|
- if (ShmSysConfigAndInfo->SysConfig.SwitchDebugFlag == YES)
|
|
|
- printf("%s \n", buffer);
|
|
|
- else
|
|
|
- DEBUG_INFO("%s \n", buffer);
|
|
|
+ DEBUG_INFO("%s \n", buffer);
|
|
|
}
|
|
|
|
|
|
//=================================
|
|
@@ -1927,6 +1939,13 @@ void ClearAbnormalStatus_CCS(byte gun_index)
|
|
|
memcpy(_chargingData[gun_index]->EvConnAlarmCode, "", 6);
|
|
|
isCleanCheck = true;
|
|
|
}
|
|
|
+ else if (strncmp((char *)_chargingData[gun_index]->EvConnAlarmCode, "023850", 6) == EQUAL &&
|
|
|
+ ShmStatusCodeData->InfoCode.InfoEvents.bits.CcsSeccTimeoutV2GPreChargePerformaceTime == YES)
|
|
|
+ {
|
|
|
+ memcpy(code, "023850", 6);
|
|
|
+ memcpy(_chargingData[gun_index]->EvConnAlarmCode, "", 6);
|
|
|
+ isCleanCheck = true;
|
|
|
+ }
|
|
|
else if (strncmp((char *)_chargingData[gun_index]->EvConnAlarmCode, "023855", 6) == EQUAL &&
|
|
|
ShmStatusCodeData->InfoCode.InfoEvents.bits.CcsTP_GET_EV_TARGET_INFO == YES)
|
|
|
{
|
|
@@ -2179,6 +2198,20 @@ void ClearAbnormalStatus_CCS(byte gun_index)
|
|
|
memcpy(_chargingData[gun_index]->EvConnAlarmCode, "", 6);
|
|
|
isCleanCheck = true;
|
|
|
}
|
|
|
+ else if (strncmp((char *)_chargingData[gun_index]->EvConnAlarmCode, "023891", 6) == EQUAL &&
|
|
|
+ ShmStatusCodeData->InfoCode.InfoEvents.bits.CcsSeccNotReadyForCharging == YES)
|
|
|
+ {
|
|
|
+ memcpy(code, "023891", 6);
|
|
|
+ memcpy(_chargingData[gun_index]->EvConnAlarmCode, "", 6);
|
|
|
+ isCleanCheck = true;
|
|
|
+ }
|
|
|
+ else if (strncmp((char *)_chargingData[gun_index]->EvConnAlarmCode, "023892", 6) == EQUAL &&
|
|
|
+ ShmStatusCodeData->InfoCode.InfoEvents.bits.CcsSeccTimeoutQCA7000Comm == YES)
|
|
|
+ {
|
|
|
+ memcpy(code, "023892", 6);
|
|
|
+ memcpy(_chargingData[gun_index]->EvConnAlarmCode, "", 6);
|
|
|
+ isCleanCheck = true;
|
|
|
+ }
|
|
|
|
|
|
if (isCleanCheck)
|
|
|
{
|
|
@@ -2288,6 +2321,7 @@ void ClearAbnormalStatus_CCS(byte gun_index)
|
|
|
if (strncmp(code, "023847", 6) == EQUAL) ShmStatusCodeData->InfoCode.InfoEvents.bits.CcsCableCheck_Performance_Time = NO;
|
|
|
if (strncmp(code, "023848", 6) == EQUAL) ShmStatusCodeData->InfoCode.InfoEvents.bits.CcsCPState_Detection_Time = NO;
|
|
|
if (strncmp(code, "023849", 6) == EQUAL) ShmStatusCodeData->InfoCode.InfoEvents.bits.CcsCPOscillator_Retain_Time = NO;
|
|
|
+ if (strncmp(code, "023850", 6) == EQUAL) ShmStatusCodeData->InfoCode.InfoEvents.bits.CcsSeccTimeoutV2GPreChargePerformaceTime = NO;
|
|
|
if (strncmp(code, "023855", 6) == EQUAL) ShmStatusCodeData->InfoCode.InfoEvents.bits.CcsTP_GET_EV_TARGET_INFO = NO;
|
|
|
if (strncmp(code, "023856", 6) == EQUAL) ShmStatusCodeData->InfoCode.InfoEvents.bits.CcsTT_GET_EV_TARGET_INFO = NO;
|
|
|
if (strncmp(code, "023857", 6) == EQUAL) ShmStatusCodeData->InfoCode.InfoEvents.bits.CcsTP_GET_EV_BATTERY_INFO = NO;
|
|
@@ -2324,6 +2358,8 @@ void ClearAbnormalStatus_CCS(byte gun_index)
|
|
|
if (strncmp(code, "023888", 6) == EQUAL) ShmStatusCodeData->InfoCode.InfoEvents.bits.CcsISO2_Msg_Encode_Error = NO;
|
|
|
if (strncmp(code, "023889", 6) == EQUAL) ShmStatusCodeData->InfoCode.InfoEvents.bits.CcsCpStatus_Error = NO;
|
|
|
if (strncmp(code, "023890", 6) == EQUAL) ShmStatusCodeData->InfoCode.InfoEvents.bits.CcsUnexpectVolBeforeCharing_Error = NO;
|
|
|
+ if (strncmp(code, "023891", 6) == EQUAL) ShmStatusCodeData->InfoCode.InfoEvents.bits.CcsSeccNotReadyForCharging = NO;
|
|
|
+ if (strncmp(code, "023892", 6) == EQUAL) ShmStatusCodeData->InfoCode.InfoEvents.bits.CcsSeccTimeoutQCA7000Comm = NO;
|
|
|
}
|
|
|
}
|
|
|
}
|
|
@@ -2336,7 +2372,7 @@ void AbnormalStopAnalysis(byte gun_index, byte *errCode)
|
|
|
sprintf(string, "%d%d%d%d%d%d", *(errCode + 0), *(errCode + 1), *(errCode + 2), *(errCode + 3), *(errCode + 4), *(errCode + 5));
|
|
|
|
|
|
PRINTF_FUNC("NOTIFICATION_EV_STOP : Err Code = %s \n", string);
|
|
|
- if (strncmp((char *)_chargingData[gun_index]->EvConnAlarmCode, "000000", 6) == EQUAL ||
|
|
|
+ if (strncmp(string, "000000", 6) == EQUAL ||
|
|
|
strncmp((char *)_chargingData[gun_index]->EvConnAlarmCode, "", 6) != EQUAL)
|
|
|
return;
|
|
|
|
|
@@ -2477,6 +2513,7 @@ void AbnormalStopAnalysis(byte gun_index, byte *errCode)
|
|
|
if (strcmp(string, "023847") == EQUAL) ShmStatusCodeData->InfoCode.InfoEvents.bits.CcsCableCheck_Performance_Time = YES;
|
|
|
if (strcmp(string, "023848") == EQUAL) ShmStatusCodeData->InfoCode.InfoEvents.bits.CcsCPState_Detection_Time = YES;
|
|
|
if (strcmp(string, "023849") == EQUAL) ShmStatusCodeData->InfoCode.InfoEvents.bits.CcsCPOscillator_Retain_Time = YES;
|
|
|
+ if (strcmp(string, "023850") == EQUAL) ShmStatusCodeData->InfoCode.InfoEvents.bits.CcsSeccTimeoutV2GPreChargePerformaceTime = YES;
|
|
|
if (strcmp(string, "023855") == EQUAL) ShmStatusCodeData->InfoCode.InfoEvents.bits.CcsTP_GET_EV_TARGET_INFO = YES;
|
|
|
if (strcmp(string, "023856") == EQUAL) ShmStatusCodeData->InfoCode.InfoEvents.bits.CcsTT_GET_EV_TARGET_INFO = YES;
|
|
|
if (strcmp(string, "023857") == EQUAL) ShmStatusCodeData->InfoCode.InfoEvents.bits.CcsTP_GET_EV_BATTERY_INFO = YES;
|
|
@@ -2513,6 +2550,8 @@ void AbnormalStopAnalysis(byte gun_index, byte *errCode)
|
|
|
if (strcmp(string, "023888") == EQUAL) ShmStatusCodeData->InfoCode.InfoEvents.bits.CcsISO2_Msg_Encode_Error = YES;
|
|
|
if (strcmp(string, "023889") == EQUAL) ShmStatusCodeData->InfoCode.InfoEvents.bits.CcsCpStatus_Error = YES;
|
|
|
if (strcmp(string, "023890") == EQUAL) ShmStatusCodeData->InfoCode.InfoEvents.bits.CcsUnexpectVolBeforeCharing_Error = YES;
|
|
|
+ if (strcmp(string, "023891") == EQUAL) ShmStatusCodeData->InfoCode.InfoEvents.bits.CcsSeccNotReadyForCharging = YES;
|
|
|
+ if (strcmp(string, "023892") == EQUAL) ShmStatusCodeData->InfoCode.InfoEvents.bits.CcsSeccTimeoutQCA7000Comm = YES;
|
|
|
|
|
|
if (strcmp(string, "023702") == EQUAL) ShmStatusCodeData->InfoCode.InfoEvents.bits.GbEvCommFail = YES;
|
|
|
if (strcmp(string, "023900") == EQUAL) ShmStatusCodeData->InfoCode.InfoEvents.bits.ERROR_CODE_GBT_LOS_CC1 = YES;
|
|
@@ -2679,15 +2718,20 @@ void CANReceiver()
|
|
|
break;
|
|
|
case ACK_EV_FW_VERSION:
|
|
|
{
|
|
|
+ byte ver[16];
|
|
|
+
|
|
|
+ memset(ver, 0, sizeof(ver));
|
|
|
if (_chargingData[targetGun]->Type == _Type_Chademo)
|
|
|
{
|
|
|
- memcpy(ShmCHAdeMOData->evse[_chargingData[targetGun]->type_index].version, frame.data, frame.can_dlc);
|
|
|
+ memcpy(ver, frame.data, frame.can_dlc);
|
|
|
+ memcpy(ShmCHAdeMOData->evse[_chargingData[targetGun]->type_index].version, ver, ARRAY_SIZE(ver));
|
|
|
ShmCHAdeMOData->evse[_chargingData[targetGun]->type_index].SelfTest_Comp = PASS;
|
|
|
PRINTF_FUNC("chademo ver. : %s\n", ShmCHAdeMOData->evse[_chargingData[targetGun]->type_index].version);
|
|
|
}
|
|
|
else if (_chargingData[targetGun]->Type == _Type_GB)
|
|
|
{
|
|
|
- memcpy(ShmGBTData->evse[_chargingData[targetGun]->type_index].version, frame.data, ARRAY_SIZE(frame.data));
|
|
|
+ memcpy(ver, frame.data, frame.can_dlc);
|
|
|
+ memcpy(ShmGBTData->evse[_chargingData[targetGun]->type_index].version, ver, ARRAY_SIZE(ver));
|
|
|
ShmGBTData->evse[_chargingData[targetGun]->type_index].SelfTest_Comp = PASS;
|
|
|
PRINTF_FUNC("gbt ver. : %s\n", ShmGBTData->evse[_chargingData[targetGun]->type_index].version);
|
|
|
}
|
|
@@ -2695,7 +2739,18 @@ void CANReceiver()
|
|
|
{
|
|
|
if (ShmCcsData->CommProtocol == 0x01)
|
|
|
{
|
|
|
- memcpy(&ShmCcsData->V2GMessage_DIN70121[_chargingData[targetGun]->type_index].version, frame.data, frame.can_dlc);
|
|
|
+ for (byte _vCount = 0, _vPoint = 0; _vCount < frame.can_dlc; _vCount++)
|
|
|
+ {
|
|
|
+ if (_vCount % 2 == 0 && _vCount != 0)
|
|
|
+ {
|
|
|
+ ver[_vCount + _vPoint] = 0x2E;
|
|
|
+ _vPoint++;
|
|
|
+ }
|
|
|
+
|
|
|
+ ver[_vCount + _vPoint] = frame.data[_vCount];
|
|
|
+ }
|
|
|
+
|
|
|
+ memcpy(&ShmCcsData->V2GMessage_DIN70121[_chargingData[targetGun]->type_index].version, ver, ARRAY_SIZE(ver));
|
|
|
ShmCcsData->V2GMessage_DIN70121[_chargingData[targetGun]->type_index].SelfTest_Comp = PASS;
|
|
|
PRINTF_FUNC("CCS FW = %s \n", ShmCcsData->V2GMessage_DIN70121[_chargingData[targetGun]->type_index].version);
|
|
|
}
|
|
@@ -2704,12 +2759,12 @@ void CANReceiver()
|
|
|
if (targetGun == 0)
|
|
|
{
|
|
|
memset(ShmSysConfigAndInfo->SysInfo.Connector1FwRev, 0, sizeof(ShmSysConfigAndInfo->SysInfo.Connector1FwRev));
|
|
|
- memcpy(ShmSysConfigAndInfo->SysInfo.Connector1FwRev, frame.data, frame.can_dlc);
|
|
|
+ memcpy(ShmSysConfigAndInfo->SysInfo.Connector1FwRev, ver, ARRAY_SIZE(ver));
|
|
|
}
|
|
|
else
|
|
|
{
|
|
|
memset(ShmSysConfigAndInfo->SysInfo.Connector2FwRev, 0, sizeof(ShmSysConfigAndInfo->SysInfo.Connector2FwRev));
|
|
|
- memcpy(ShmSysConfigAndInfo->SysInfo.Connector2FwRev, frame.data, frame.can_dlc);
|
|
|
+ memcpy(ShmSysConfigAndInfo->SysInfo.Connector2FwRev, ver, ARRAY_SIZE(ver));
|
|
|
}
|
|
|
}
|
|
|
break;
|
|
@@ -2721,33 +2776,25 @@ void CANReceiver()
|
|
|
case ACK_GET_OUTPUT_REQ:
|
|
|
{
|
|
|
_chargingData[targetGun]->EvBatterySoc = frame.data[1];
|
|
|
- _chargingData[targetGun]->EvBatterytargetVoltage = ((short) frame.data[3] << 8) + (short) frame.data[2];
|
|
|
- _chargingData[targetGun]->EvBatterytargetCurrent = ((short) frame.data[5] << 8) + (short) frame.data[4];
|
|
|
- _chargingData[targetGun]->PresentChargedDuration = ((short) frame.data[7] << 8) + (short) frame.data[6];
|
|
|
+ _chargingData[targetGun]->EvBatterytargetVoltage = (((short) frame.data[3] << 8) + (short) frame.data[2]) / 10;
|
|
|
+ _chargingData[targetGun]->EvBatterytargetCurrent = (((short) frame.data[5] << 8) + (short) frame.data[4]) / 10;
|
|
|
+ _chargingData[targetGun]->RemainChargingDuration = ((short) frame.data[7] << 8) + (short) frame.data[6];
|
|
|
|
|
|
if (_chargingData[targetGun]->Type == _Type_Chademo)
|
|
|
{
|
|
|
- if (ShmCHAdeMOData->ev[_chargingData[targetGun]->type_index].EvDetection != frame.data[0])
|
|
|
- {
|
|
|
- ShmCHAdeMOData->ev[_chargingData[targetGun]->type_index].PresentMsgFlowStatus = frame.data[0];
|
|
|
- }
|
|
|
-
|
|
|
+ ShmCHAdeMOData->ev[_chargingData[targetGun]->type_index].PresentMsgFlowStatus = frame.data[0];
|
|
|
ShmCHAdeMOData->ev[_chargingData[targetGun]->type_index].EvDetection = frame.data[0];
|
|
|
ShmCHAdeMOData->ev[_chargingData[targetGun]->type_index].SOC = _chargingData[targetGun]->EvBatterySoc;
|
|
|
- ShmCHAdeMOData->ev[_chargingData[targetGun]->type_index].TargetBatteryVoltage = _chargingData[targetGun]->EvBatterytargetVoltage;
|
|
|
- ShmCHAdeMOData->ev[_chargingData[targetGun]->type_index].ChargingCurrentRequest = _chargingData[targetGun]->EvBatterytargetCurrent;
|
|
|
+ ShmCHAdeMOData->ev[_chargingData[targetGun]->type_index].TargetBatteryVoltage = (_chargingData[targetGun]->EvBatterytargetVoltage * 10);
|
|
|
+ ShmCHAdeMOData->ev[_chargingData[targetGun]->type_index].ChargingCurrentRequest = (_chargingData[targetGun]->EvBatterytargetCurrent * 10);
|
|
|
}
|
|
|
else if (_chargingData[targetGun]->Type == _Type_GB)
|
|
|
{
|
|
|
- if (ShmGBTData->ev[_chargingData[targetGun]->type_index].EvDetection != frame.data[0])
|
|
|
- {
|
|
|
- ShmGBTData->ev[_chargingData[targetGun]->type_index].PresentMsgFlowStatus = frame.data[0];
|
|
|
- }
|
|
|
-
|
|
|
+ ShmGBTData->ev[_chargingData[targetGun]->type_index].PresentMsgFlowStatus = frame.data[0];
|
|
|
ShmGBTData->ev[_chargingData[targetGun]->type_index].EvDetection = frame.data[0];
|
|
|
ShmGBTData->ev[_chargingData[targetGun]->type_index].SOC = _chargingData[targetGun]->EvBatterySoc;
|
|
|
- ShmGBTData->ev[_chargingData[targetGun]->type_index].TargetBatteryVoltage = _chargingData[targetGun]->EvBatterytargetVoltage;
|
|
|
- ShmGBTData->ev[_chargingData[targetGun]->type_index].ChargingCurrentRequest = _chargingData[targetGun]->EvBatterytargetCurrent;
|
|
|
+ ShmGBTData->ev[_chargingData[targetGun]->type_index].TargetBatteryVoltage = (_chargingData[targetGun]->EvBatterytargetVoltage * 10);
|
|
|
+ ShmGBTData->ev[_chargingData[targetGun]->type_index].ChargingCurrentRequest = (_chargingData[targetGun]->EvBatterytargetCurrent * 10);
|
|
|
}
|
|
|
else if (_chargingData[targetGun]->Type == _Type_CCS_2)
|
|
|
{
|
|
@@ -2767,7 +2814,7 @@ void CANReceiver()
|
|
|
{
|
|
|
//_chargingData[target].EvACorDCcharging = frame.data[0];
|
|
|
//_chargingData[target]->TotalBatteryCap = ((float) frame.data[4] << 8) + (short) frame.data[3];
|
|
|
- _chargingData[targetGun]->EvBatteryMaxVoltage = ((short) frame.data[4] << 8) + (short) frame.data[3];
|
|
|
+ _chargingData[targetGun]->EvBatteryMaxVoltage = (((short) frame.data[4] << 8) + (short) frame.data[3]) / 10;
|
|
|
//_chargingData[target]->EvBatteryMaxCurrent = ((float) frame.data[4] << 8) + (short) frame.data[3];
|
|
|
//_chargingData[target].MaxiBatteryCurrent = ((short) frame.data[6] << 8) + (short) frame.data[5];
|
|
|
if (_chargingData[targetGun]->Type == _Type_Chademo)
|
|
@@ -2792,30 +2839,27 @@ void CANReceiver()
|
|
|
break;
|
|
|
case ACK_GET_MISCELLANEOUS_INFO:
|
|
|
{
|
|
|
+ _chargingData[targetGun]->GunLocked = frame.data[0];
|
|
|
+ _chargingData[targetGun]->PilotVoltage = (float)(-120 + frame.data[3]) / 10;
|
|
|
+
|
|
|
if (_chargingData[targetGun]->Type == _Type_Chademo)
|
|
|
{
|
|
|
- _chargingData[targetGun]->GunLocked = frame.data[0];
|
|
|
ShmCHAdeMOData->evse[_chargingData[targetGun]->type_index].ConnectorTemperatureP = frame.data[1];
|
|
|
ShmCHAdeMOData->evse[_chargingData[targetGun]->type_index].ConnectorTemperatureN = frame.data[2];
|
|
|
- _chargingData[targetGun]->PilotVoltage = (float)(-120 + frame.data[3]) / 10;
|
|
|
ShmCHAdeMOData->evse[_chargingData[targetGun]->type_index].EvboardStatus = frame.data[7];
|
|
|
}
|
|
|
else if (_chargingData[targetGun]->Type == _Type_GB)
|
|
|
{
|
|
|
- _chargingData[targetGun]->GunLocked = frame.data[0];
|
|
|
ShmGBTData->evse[_chargingData[targetGun]->type_index].ConnectorTemperatureP = frame.data[1];
|
|
|
ShmGBTData->evse[_chargingData[targetGun]->type_index].ConnectorTemperatureN = frame.data[2];
|
|
|
- _chargingData[targetGun]->PilotVoltage = (float)(-120 + frame.data[3]) / 10;
|
|
|
ShmGBTData->evse[_chargingData[targetGun]->type_index].EvboardStatus = frame.data[7];
|
|
|
}
|
|
|
else if (_chargingData[targetGun]->Type == _Type_CCS_2)
|
|
|
{
|
|
|
if (ShmCcsData->CommProtocol == 0x01)
|
|
|
{
|
|
|
- _chargingData[targetGun]->GunLocked = frame.data[0];
|
|
|
//ShmCcsData->V2GMessage_DIN70121[_chargingData[targetGun]->type_index]. .ConnectorTemperatureP = frame.data[1];
|
|
|
//ShmCcsData->V2GMessage_DIN70121[_chargingData[targetGun]->type_index]. .ConnectorTemperatureN = frame.data[2];
|
|
|
- _chargingData[targetGun]->PilotVoltage = (float)(-120 + frame.data[3]) / 10;
|
|
|
}
|
|
|
}
|
|
|
|
|
@@ -2874,17 +2918,23 @@ void SetPresentChargingOutputPower(struct ChargingInfoData *chargingData_1, stru
|
|
|
float vol1 = 0, cur1 = 0;
|
|
|
float vol2 = 0, cur2 = 0;
|
|
|
|
|
|
- //PRINTF_FUNC("f vol - 0 = %f \n", chargingData_1->FireChargingVoltage);
|
|
|
- //PRINTF_FUNC("f cur - 0 = %f \n", chargingData_1->PresentChargingCurrent);
|
|
|
- //PRINTF_FUNC("***********************f vol - 1 = %f \n", chargingData_2->FireChargingVoltage);
|
|
|
- //PRINTF_FUNC("***********************f cur - 1 = %f \n", chargingData_2->PresentChargingCurrent);
|
|
|
-
|
|
|
vol1 = chargingData_1->FireChargingVoltage;
|
|
|
cur1 = (chargingData_1->PresentChargingCurrent * 10);
|
|
|
|
|
|
vol2 = chargingData_2->FireChargingVoltage;
|
|
|
cur2 = (chargingData_2->PresentChargingCurrent * 10);
|
|
|
|
|
|
+ if (_outVol_1 != vol1 ||
|
|
|
+ _outCur_1 != cur1 ||
|
|
|
+ _outVol_2 != vol2 ||
|
|
|
+ _outCur_2 != cur2)
|
|
|
+ {
|
|
|
+ PRINTF_FUNC("G1 -> Output Vol = %f, Output Cur = %f -- G2 -> Output Vol = %f, Output Cur = %f \n",
|
|
|
+ vol1, cur1, vol2, cur2);
|
|
|
+
|
|
|
+ _outVol_1 = vol1; _outCur_1 = cur1; _outVol_2 = vol2; _outCur_2 = cur2;
|
|
|
+ }
|
|
|
+
|
|
|
SetPresentOutputPower(vol1, cur1, vol2, cur2);
|
|
|
}
|
|
|
|
|
@@ -2899,14 +2949,14 @@ void SetPresentChargingOutputCap(struct ChargingInfoData *chargingData_1, struct
|
|
|
|
|
|
vol = chargingData_1->MaximumChargingVoltage;
|
|
|
GetMaxVolAndCurMethod(chargingData_1->Index, &vol, &cur1);
|
|
|
- GetMaxPowerMethod(&pow1);
|
|
|
+ GetMaxPowerMethod(chargingData_1->Index, &pow1);
|
|
|
|
|
|
pow2 = chargingData_2->AvailableChargingPower;
|
|
|
cur2 = chargingData_2->AvailableChargingCurrent;
|
|
|
vol = chargingData_2->MaximumChargingVoltage;
|
|
|
|
|
|
GetMaxVolAndCurMethod(chargingData_2->Index, &vol, &cur2);
|
|
|
- GetMaxPowerMethod(&pow2);
|
|
|
+ GetMaxPowerMethod(chargingData_2->Index, &pow2);
|
|
|
|
|
|
if (_pow_1 != pow1 ||
|
|
|
_cur_1 != cur1 ||
|
|
@@ -2954,12 +3004,26 @@ void GetMaxVolAndCurMethod(byte index, float *vol, float *cur)
|
|
|
|
|
|
if (maxChargingCur[index] != 0 && maxChargingCur[index] <= *cur)
|
|
|
*cur = maxChargingCur[index];
|
|
|
+
|
|
|
+ if (_chargingData[index]->SystemStatus == S_CHARGING &&
|
|
|
+ _chargingData[index]->ChargingProfileCurrent >= 0 &&
|
|
|
+ _chargingData[index]->ChargingProfileCurrent <= *cur)
|
|
|
+ {
|
|
|
+ *cur = _chargingData[index]->ChargingProfileCurrent;
|
|
|
+ }
|
|
|
}
|
|
|
|
|
|
-void GetMaxPowerMethod(float *pow)
|
|
|
+void GetMaxPowerMethod(byte index, float *pow)
|
|
|
{
|
|
|
if (maxChargingPow != 0 && maxChargingPow <= *pow)
|
|
|
*pow = maxChargingPow;
|
|
|
+
|
|
|
+ if (_chargingData[index]->SystemStatus == S_CHARGING &&
|
|
|
+ _chargingData[index]->ChargingProfilePower >= 0 &&
|
|
|
+ _chargingData[index]->ChargingProfilePower <= *pow)
|
|
|
+ {
|
|
|
+ *pow = _chargingData[index]->ChargingProfilePower;
|
|
|
+ }
|
|
|
}
|
|
|
|
|
|
time_t GetRtcInfoForEpoch()
|
|
@@ -3165,13 +3229,6 @@ int main(int argc, char *argv[])
|
|
|
{
|
|
|
case S_IDLE:
|
|
|
case S_RESERVATION:
|
|
|
- _chargingData[_index]->PresentChargedEnergy = 0;
|
|
|
- _chargingData[_index]->PresentChargingPower = 0;
|
|
|
- _chargingData[_index]->GroundFaultStatus = GFD_WAIT;
|
|
|
- _chargingData[_index]->StopChargeFlag = NO;
|
|
|
- _chargingData[_index]->ChargingFee = 0.0;
|
|
|
- chargingTime[_index] = 0;
|
|
|
-
|
|
|
if (_chargingData[_index]->Type == _Type_Chademo)
|
|
|
{
|
|
|
ClearAbnormalStatus_Chademo(_index);
|
|
@@ -3187,6 +3244,19 @@ int main(int argc, char *argv[])
|
|
|
|
|
|
if (priorityLow == 1)
|
|
|
{
|
|
|
+ _chargingData[_index]->PresentChargedEnergy = 0;
|
|
|
+ _chargingData[_index]->PresentChargingPower = 0;
|
|
|
+ _chargingData[_index]->GroundFaultStatus = GFD_WAIT;
|
|
|
+ _chargingData[_index]->RealRatingPower = 0;
|
|
|
+ _chargingData[_index]->StopChargeFlag = NO;
|
|
|
+ _chargingData[_index]->ChargingFee = 0.0;
|
|
|
+ _chargingData[_index]->EvBatterySoc = 0;
|
|
|
+ _chargingData[_index]->PresentChargingVoltage = 0;
|
|
|
+ _chargingData[_index]->PresentChargingCurrent = 0;
|
|
|
+ _chargingData[_index]->EvBatteryMaxVoltage = 0;
|
|
|
+
|
|
|
+ chargingTime[_index] = 0;
|
|
|
+
|
|
|
maxChargingPow = (ShmSysConfigAndInfo->SysConfig.MaxChargingPower * 10);
|
|
|
}
|
|
|
break;
|
|
@@ -3270,28 +3340,28 @@ int main(int argc, char *argv[])
|
|
|
// _chargingData[_index]->GroundFaultStatus = GFD_PASS;
|
|
|
|
|
|
//PRINTF_FUNC("To EV_%d GFD = %d \n", _index, _chargingData[_index]->GroundFaultStatus);
|
|
|
- if(_chargingData[_index]->GroundFaultStatus != GFD_WAIT)
|
|
|
- {
|
|
|
- unsigned char _result = _chargingData[_index]->GroundFaultStatus;
|
|
|
|
|
|
- if(_chargingData[_index]->Type == _Type_Chademo || _chargingData[_index]->Type == _Type_GB)
|
|
|
- {
|
|
|
- if (_result == GFD_WARNING)
|
|
|
- {
|
|
|
- _result = GFD_PASS;
|
|
|
- }
|
|
|
- SetIsolationStatus(_index, _result, _chargingData[_index]->Evboard_id);
|
|
|
- }
|
|
|
- else if(_chargingData[_index]->Type == _Type_CCS_2)
|
|
|
- {
|
|
|
- SetIsolationStatus(_index, _result, _chargingData[_index]->Evboard_id);
|
|
|
- }
|
|
|
- else
|
|
|
+ unsigned char _result = GFD_WAIT;
|
|
|
+ _result = _chargingData[_index]->GroundFaultStatus;
|
|
|
+
|
|
|
+ if(_chargingData[_index]->Type == _Type_Chademo ||
|
|
|
+ _chargingData[_index]->Type == _Type_GB)
|
|
|
+ {
|
|
|
+ if (_result == GFD_WARNING)
|
|
|
{
|
|
|
- //NULL
|
|
|
+ _result = GFD_PASS;
|
|
|
}
|
|
|
}
|
|
|
|
|
|
+ if(_result < GFD_WAIT &&
|
|
|
+ _result > GFD_WARNING)
|
|
|
+ {
|
|
|
+ PRINTF_FUNC("Unexpected GFD status : %d \n", _result);
|
|
|
+ _result = GFD_WAIT;
|
|
|
+ }
|
|
|
+
|
|
|
+ SetIsolationStatus(_index, _result, _chargingData[_index]->Evboard_id);
|
|
|
+
|
|
|
if(_chargingData[_index]->SystemStatus == S_CCS_PRECHARGE_ST0 &&
|
|
|
_chargingData[_index]->PrechargeStatus == PRECHARGE_READY)
|
|
|
{
|
|
@@ -3307,11 +3377,11 @@ int main(int argc, char *argv[])
|
|
|
|
|
|
if (chargingTime[_index] == 0)
|
|
|
{
|
|
|
- chargingTime[_index] = _chargingData[_index]->RemainChargingDuration;
|
|
|
+ chargingTime[_index] = _chargingData[_index]->PresentChargedDuration;
|
|
|
}
|
|
|
else
|
|
|
{
|
|
|
- int passTime = _chargingData[_index]->RemainChargingDuration - chargingTime[_index];
|
|
|
+ int passTime = _chargingData[_index]->PresentChargedDuration - chargingTime[_index];
|
|
|
|
|
|
if (passTime > 0)
|
|
|
{
|
|
@@ -3322,7 +3392,7 @@ int main(int argc, char *argv[])
|
|
|
}
|
|
|
|
|
|
_chargingData[_index]->PresentChargedEnergy += changingPow;
|
|
|
- chargingTime[_index] = _chargingData[_index]->RemainChargingDuration;
|
|
|
+ chargingTime[_index] = _chargingData[_index]->PresentChargedDuration;
|
|
|
}
|
|
|
}
|
|
|
|