|
@@ -76,16 +76,16 @@ struct PsuData *ShmPsuData;
|
|
|
// 確認 Relay Welding 電壓
|
|
|
#define RELAY_WELDING_DET 300
|
|
|
|
|
|
-#define GUN_COUNT CHAdeMO_QUANTITY + CCS_QUANTITY + GB_QUANTITY
|
|
|
-
|
|
|
byte gunCount;
|
|
|
// 槍資訊
|
|
|
struct ChargingInfoData *_chargingData[CHAdeMO_QUANTITY + CCS_QUANTITY + GB_QUANTITY];
|
|
|
-byte gfdChkFailCount[CHAdeMO_QUANTITY + CCS_QUANTITY + GB_QUANTITY];
|
|
|
|
|
|
bool _isOutputNoneMatch[CHAdeMO_QUANTITY + CCS_QUANTITY + GB_QUANTITY];
|
|
|
struct timeval _checkOutputNoneMatchTimer[CHAdeMO_QUANTITY + CCS_QUANTITY + GB_QUANTITY];
|
|
|
|
|
|
+bool _isRelayWelding[CHAdeMO_QUANTITY + CCS_QUANTITY + GB_QUANTITY];
|
|
|
+struct timeval _checkRelayWeldingTimer[CHAdeMO_QUANTITY + CCS_QUANTITY + GB_QUANTITY];
|
|
|
+
|
|
|
bool FindChargingInfoData(byte target, struct ChargingInfoData **chargingData);
|
|
|
|
|
|
int Uart5Fd;
|
|
@@ -176,7 +176,7 @@ void PRINTF_FUNC(char *string, ...)
|
|
|
vsnprintf(buffer, sizeof(buffer), string, args);
|
|
|
va_end(args);
|
|
|
|
|
|
- if (DEBUG)
|
|
|
+ if (ShmSysConfigAndInfo->SysConfig.SwitchDebugFlag == YES)
|
|
|
printf("%s \n", buffer);
|
|
|
else
|
|
|
DEBUG_INFO("%s \n", buffer);
|
|
@@ -423,22 +423,14 @@ void GetPersentOutputVol()
|
|
|
_chargingData[index]->FireChargingVoltage = ShmRelayModuleData->Gun2RelayOutputVolt;
|
|
|
}
|
|
|
|
|
|
- unsigned short Ovp = 0;
|
|
|
- unsigned short Ocp = 0;
|
|
|
+ //unsigned short Ovp = 0;
|
|
|
+ //unsigned short Ocp = 0;
|
|
|
//Ovp = MIN [VOUT_MAX_VOLTAGE, EV_BATTERY_VOLTAGE] // 最大輸出電壓與電池電壓最大值
|
|
|
//Ocp = MIN [IOUT_MAX_CURRENT, EV_CURRENT_REQ] // 最大輸出電流與需求電流最小值
|
|
|
if (_chargingData[index]->Type == _Type_Chademo)
|
|
|
{
|
|
|
- Ovp = MaxValue(_chargingData[index]->MaximumChargingVoltage, _chargingData[index]->EvBatteryMaxVoltage);
|
|
|
- Ocp = MaxValue(_chargingData[index]->PresentChargingCurrent, ShmCHAdeMOData->ev[_chargingData[index]->type_index].ChargingCurrentRequest);
|
|
|
- if (_chargingData[index]->PresentChargingVoltage >= Ovp)
|
|
|
- {
|
|
|
- //ShmStatusCodeData->AlarmCode.AlarmEvents.bits.SystemChademoOutputOVP = 0x01;
|
|
|
- }
|
|
|
- if (_chargingData[index]->PresentChargingCurrent >= Ocp)
|
|
|
- {
|
|
|
- //ShmStatusCodeData->AlarmCode.AlarmEvents.bits.SystemChademoOutputOCP = 0x01;
|
|
|
- }
|
|
|
+ //Ovp = MaxValue(_chargingData[index]->MaximumChargingVoltage, _chargingData[index]->EvBatteryMaxVoltage);
|
|
|
+ //Ocp = MaxValue(_chargingData[index]->PresentChargingCurrent, ShmCHAdeMOData->ev[_chargingData[index]->type_index].ChargingCurrentRequest);
|
|
|
}
|
|
|
else if (_chargingData[index]->Type == _Type_CCS_2)
|
|
|
{
|
|
@@ -548,10 +540,8 @@ void GetGfdAdc()
|
|
|
{
|
|
|
if (_chargingData[i]->Type == 9)
|
|
|
{
|
|
|
- if (_chargingData[i]->PresentChargingVoltage >= 1500)
|
|
|
- {
|
|
|
+ if (_chargingData[i]->PresentChargingVoltage >= VOUT_MIN_VOLTAGE)
|
|
|
_chargingData[i]->GroundFaultStatus = GFD_PASS;
|
|
|
- }
|
|
|
continue;
|
|
|
}
|
|
|
|
|
@@ -560,16 +550,14 @@ void GetGfdAdc()
|
|
|
_chargingData[i]->GroundFaultStatus = gfd_adc.result_conn1;
|
|
|
if (_chargingData[i]->GroundFaultStatus == GFD_FAIL)
|
|
|
{
|
|
|
- DEBUG_ERROR("GFD Fail. index = %d, R = %d, Vol = %d \n",
|
|
|
- i, gfd_adc.Resister_conn1, gfd_adc.voltage_conn1);
|
|
|
- PRINTF_FUNC("GFD Fail. index = %d, R = %d, Vol = %d \n",
|
|
|
- i, gfd_adc.Resister_conn1, gfd_adc.voltage_conn1);
|
|
|
+ PRINTF_FUNC("GFD Fail. index = %d, Step = %d, R = %d, Vol = %d \n",
|
|
|
+ i, gfd_adc.rb_step_1, gfd_adc.Resister_conn1, gfd_adc.voltage_conn1);
|
|
|
}
|
|
|
else if (_chargingData[i]->GroundFaultStatus == GFD_PASS ||
|
|
|
_chargingData[i]->GroundFaultStatus == GFD_WARNING)
|
|
|
{
|
|
|
- PRINTF_FUNC("GFD Result. index = %d, Result = %d, R= %d, Vol = %d \n",
|
|
|
- i, _chargingData[i]->GroundFaultStatus, gfd_adc.Resister_conn1, gfd_adc.voltage_conn1);
|
|
|
+// PRINTF_FUNC("GFD Result. index = %d, Result = %d, R = %d, Vol = %d \n",
|
|
|
+// i, _chargingData[i]->GroundFaultStatus, gfd_adc.Resister_conn1, gfd_adc.voltage_conn1);
|
|
|
}
|
|
|
}
|
|
|
else if (i == 1)
|
|
@@ -577,28 +565,16 @@ void GetGfdAdc()
|
|
|
_chargingData[i]->GroundFaultStatus = gfd_adc.result_conn2;
|
|
|
if (_chargingData[i]->GroundFaultStatus == GFD_FAIL)
|
|
|
{
|
|
|
- DEBUG_ERROR("GFD Fail. index = %d, R = %d, Vol = %d \n",
|
|
|
- i, gfd_adc.Resister_conn2, gfd_adc.voltage_conn2);
|
|
|
- PRINTF_FUNC("GFD Fail. index = %d, R = %d, Vol = %d \n",
|
|
|
- i, gfd_adc.Resister_conn2, gfd_adc.voltage_conn2);
|
|
|
+ PRINTF_FUNC("GFD Fail. index = %d, Step = %d, R = %d, Vol = %d \n",
|
|
|
+ i, gfd_adc.rb_step_2, gfd_adc.Resister_conn2, gfd_adc.voltage_conn2);
|
|
|
}
|
|
|
else if (_chargingData[i]->GroundFaultStatus == GFD_PASS ||
|
|
|
_chargingData[i]->GroundFaultStatus == GFD_WARNING)
|
|
|
{
|
|
|
- PRINTF_FUNC("GFD Result. index = %d, Result = %d, R= %d, Vol = %d \n",
|
|
|
- i, _chargingData[i]->GroundFaultStatus, gfd_adc.Resister_conn2, gfd_adc.voltage_conn2);
|
|
|
+// PRINTF_FUNC("GFD Result. index = %d, Result = %d, R = %d, Vol = %d \n",
|
|
|
+// i, _chargingData[i]->GroundFaultStatus, gfd_adc.Resister_conn2, gfd_adc.voltage_conn2);
|
|
|
}
|
|
|
-
|
|
|
- }
|
|
|
}
|
|
|
-
|
|
|
- //if (gfd_adc.result_conn1 != 0)
|
|
|
- {
|
|
|
-// PRINTF_FUNC("******************Resister_conn1 = %d, voltage_conn1 = %d, result_conn1 = %d, step = %d \n",
|
|
|
-// gfd_adc.Resister_conn1,
|
|
|
-// gfd_adc.voltage_conn1,
|
|
|
-// gfd_adc.result_conn1,
|
|
|
-// gfd_adc.rb_step_1);
|
|
|
}
|
|
|
}
|
|
|
}
|
|
@@ -708,6 +684,8 @@ void SetFanModuleSpeed()
|
|
|
ShmFanModuleData->PresentFan3Speed != ShmFanModuleData->SetFan3Speed ||
|
|
|
ShmFanModuleData->PresentFan4Speed != ShmFanModuleData->SetFan4Speed)
|
|
|
{
|
|
|
+ //printf("ShmFanModuleData->SetFan1Speed = %d \n", ShmFanModuleData->SetFan1Speed);
|
|
|
+
|
|
|
FanSpeed _fanSpeed;
|
|
|
|
|
|
unsigned short speed = ShmFanModuleData->PresentFan1Speed + fanSpeedSmoothValue;
|
|
@@ -810,7 +788,10 @@ void SetK1K2RelayStatus(byte index)
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
- else if ((_chargingData[index]->SystemStatus >= S_PREPARING_FOR_EVSE && _chargingData[index]->SystemStatus <= S_CHARGING))
|
|
|
+ else if ((_chargingData[index]->SystemStatus >= S_PREPARING_FOR_EVSE &&
|
|
|
+ _chargingData[index]->SystemStatus <= S_CHARGING))
|
|
|
+ {
|
|
|
+ if (_chargingData[index]->RelayWeldingCheck == YES)
|
|
|
{
|
|
|
if (_chargingData[index]->Evboard_id == 0x01)
|
|
|
{
|
|
@@ -827,7 +808,8 @@ void SetK1K2RelayStatus(byte index)
|
|
|
outputRelay.relay_event.bits.Gun2_P = YES;
|
|
|
}
|
|
|
}
|
|
|
- else if (_chargingData[index]->SystemStatus == S_COMPLETE)
|
|
|
+ }
|
|
|
+ else if ((_chargingData[index]->SystemStatus >= S_TERMINATING && _chargingData[index]->SystemStatus <= S_COMPLETE))
|
|
|
{
|
|
|
if (_chargingData[index]->PresentChargingCurrent <= SEFETY_SWITCH_RELAY_CUR)
|
|
|
{
|
|
@@ -905,6 +887,68 @@ void CheckPhaseLossStatus(byte index)
|
|
|
}
|
|
|
}
|
|
|
|
|
|
+void SetParalleRelayStatus()
|
|
|
+{
|
|
|
+ if (gunCount >= 2 && ShmSysConfigAndInfo->SysInfo.IsAlternatvieConf == NO)
|
|
|
+ {
|
|
|
+ if (_chargingData[0]->SystemStatus == S_BOOTING || _chargingData[1]->SystemStatus == S_BOOTING ||
|
|
|
+ (_chargingData[0]->SystemStatus == S_IDLE && _chargingData[1]->SystemStatus == S_IDLE))
|
|
|
+ {
|
|
|
+ // 初始化~ 不搭橋接
|
|
|
+ if (regRelay.relay_event.bits.Gun1_Parallel_P == YES)
|
|
|
+ outputRelay.relay_event.bits.Gun1_Parallel_P = NO;
|
|
|
+ else if (regRelay.relay_event.bits.Gun1_Parallel_N == YES)
|
|
|
+ outputRelay.relay_event.bits.Gun1_Parallel_N = NO;
|
|
|
+ }
|
|
|
+ else
|
|
|
+ {
|
|
|
+ if (_chargingData[0]->IsReadyToCharging == YES ||
|
|
|
+ _chargingData[1]->IsReadyToCharging == YES)
|
|
|
+ {
|
|
|
+ // ************需考慮在切換中 - 切開 relay 與搭回 relay 的時機點************
|
|
|
+ if (ShmSysConfigAndInfo->SysInfo.MainChargingMode == _MAIN_CHARGING_MODE_MAX)
|
|
|
+ {
|
|
|
+ if (ShmSysConfigAndInfo->SysInfo.ReAssignedFlag < _REASSIGNED_RELAY_M_TO_A)
|
|
|
+ {
|
|
|
+ // 最大充 - 搭上橋接
|
|
|
+ if (regRelay.relay_event.bits.Gun1_Parallel_N == NO)
|
|
|
+ outputRelay.relay_event.bits.Gun1_Parallel_N = YES;
|
|
|
+ else if (regRelay.relay_event.bits.Gun1_Parallel_P == NO)
|
|
|
+ outputRelay.relay_event.bits.Gun1_Parallel_P = YES;
|
|
|
+ }
|
|
|
+ else
|
|
|
+ {
|
|
|
+ // 平均充 - 不搭
|
|
|
+ if (regRelay.relay_event.bits.Gun1_Parallel_P == YES)
|
|
|
+ outputRelay.relay_event.bits.Gun1_Parallel_P = NO;
|
|
|
+ else if (regRelay.relay_event.bits.Gun1_Parallel_N == YES)
|
|
|
+ outputRelay.relay_event.bits.Gun1_Parallel_N = NO;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ else if (ShmSysConfigAndInfo->SysInfo.MainChargingMode == _MAIN_CHARGING_MODE_AVER)
|
|
|
+ {
|
|
|
+ if (ShmSysConfigAndInfo->SysInfo.ReAssignedFlag < _REASSIGNED_RELAY_A_TO_M)
|
|
|
+ {
|
|
|
+ // 平均充 - 不搭
|
|
|
+ if (regRelay.relay_event.bits.Gun1_Parallel_P == YES)
|
|
|
+ outputRelay.relay_event.bits.Gun1_Parallel_P = NO;
|
|
|
+ else if (regRelay.relay_event.bits.Gun1_Parallel_N == YES)
|
|
|
+ outputRelay.relay_event.bits.Gun1_Parallel_N = NO;
|
|
|
+ }
|
|
|
+ else
|
|
|
+ {
|
|
|
+ // 最大充 - 搭上橋接
|
|
|
+ if (regRelay.relay_event.bits.Gun1_Parallel_N == NO)
|
|
|
+ outputRelay.relay_event.bits.Gun1_Parallel_N = YES;
|
|
|
+ else if (regRelay.relay_event.bits.Gun1_Parallel_P == NO)
|
|
|
+ outputRelay.relay_event.bits.Gun1_Parallel_P = YES;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+}
|
|
|
+
|
|
|
//==========================================
|
|
|
// Init all share memory
|
|
|
//==========================================
|
|
@@ -1127,16 +1171,6 @@ bool IsNoneMatchRelayStatus()
|
|
|
{
|
|
|
bool result = false;
|
|
|
|
|
|
-// PRINTF_FUNC("Real Relay, AC = %x, g1_p = %x, g1_n = %x, g2_p = %x, g2_n = %x, pre = %x, bri_p = %x, bri_n = %x \n",
|
|
|
-// regRelay.relay_event.bits.AC_Contactor,
|
|
|
-// regRelay.relay_event.bits.Gun1_P,
|
|
|
-// regRelay.relay_event.bits.Gun1_N,
|
|
|
-// regRelay.relay_event.bits.Gun2_P,
|
|
|
-// regRelay.relay_event.bits.Gun2_N,
|
|
|
-// regRelay.relay_event.bits.CCS_Precharge,
|
|
|
-// regRelay.relay_event.bits.Gun1_Parallel_P,
|
|
|
-// regRelay.relay_event.bits.Gun1_Parallel_N);
|
|
|
-
|
|
|
if ((regRelay.relay_event.bits.AC_Contactor != outputRelay.relay_event.bits.AC_Contactor) ||
|
|
|
(regRelay.relay_event.bits.CCS_Precharge != outputRelay.relay_event.bits.CCS_Precharge) ||
|
|
|
(regRelay.relay_event.bits.Gun1_P != outputRelay.relay_event.bits.Gun1_P) ||
|
|
@@ -1146,6 +1180,23 @@ bool IsNoneMatchRelayStatus()
|
|
|
(regRelay.relay_event.bits.Gun1_Parallel_P != outputRelay.relay_event.bits.Gun1_Parallel_P) ||
|
|
|
(regRelay.relay_event.bits.Gun1_Parallel_N != outputRelay.relay_event.bits.Gun1_Parallel_N))
|
|
|
{
|
|
|
+ if (regRelay.relay_event.bits.AC_Contactor != outputRelay.relay_event.bits.AC_Contactor)
|
|
|
+ PRINTF_FUNC("AC Contact Relay none match. \n");
|
|
|
+ if (regRelay.relay_event.bits.CCS_Precharge != outputRelay.relay_event.bits.CCS_Precharge)
|
|
|
+ PRINTF_FUNC("CCS Precharge Relay none match. \n");
|
|
|
+ if (regRelay.relay_event.bits.Gun1_P != outputRelay.relay_event.bits.Gun1_P)
|
|
|
+ PRINTF_FUNC("SMR1:D+ Relay none match. \n");
|
|
|
+ if (regRelay.relay_event.bits.Gun1_N != outputRelay.relay_event.bits.Gun1_N)
|
|
|
+ PRINTF_FUNC("SMR1:D- Relay none match. \n");
|
|
|
+ if (regRelay.relay_event.bits.Gun2_P != outputRelay.relay_event.bits.Gun2_P)
|
|
|
+ PRINTF_FUNC("SMR2:D+ Relay none match. \n");
|
|
|
+ if (regRelay.relay_event.bits.Gun2_N != outputRelay.relay_event.bits.Gun2_N)
|
|
|
+ PRINTF_FUNC("SMR2:D- Relay none match. \n");
|
|
|
+ if (regRelay.relay_event.bits.Gun1_Parallel_P != outputRelay.relay_event.bits.Gun1_Parallel_P)
|
|
|
+ PRINTF_FUNC("Parallel:D+ Relay none match. \n");
|
|
|
+ if (regRelay.relay_event.bits.Gun1_Parallel_N != outputRelay.relay_event.bits.Gun1_Parallel_N)
|
|
|
+ PRINTF_FUNC("Parallel:D- Relay none match. \n");
|
|
|
+
|
|
|
result = true;
|
|
|
}
|
|
|
|
|
@@ -1215,7 +1266,8 @@ void CableCheckDetected(byte index)
|
|
|
if ((_chargingData[index]->SystemStatus >= S_PREPARING_FOR_EVSE && _chargingData[index]->SystemStatus <= S_CHARGING) ||
|
|
|
(_chargingData[index]->SystemStatus >= S_CCS_PRECHARGE_ST0 && _chargingData[index]->SystemStatus <= S_CCS_PRECHARGE_ST1))
|
|
|
{
|
|
|
- if (_chargingData[index]->SystemStatus == S_PREPARING_FOR_EVSE && _chargingData[index]->RelayWeldingCheck == YES)
|
|
|
+ if (_chargingData[index]->SystemStatus == S_PREPARING_FOR_EVSE &&
|
|
|
+ _chargingData[index]->RelayWeldingCheck == YES)
|
|
|
{
|
|
|
SetGfdConfig(index, GFD_CABLECHK);
|
|
|
}
|
|
@@ -1226,6 +1278,9 @@ void CableCheckDetected(byte index)
|
|
|
}
|
|
|
else if (_chargingData[index]->SystemStatus <= S_CHARGING)
|
|
|
{
|
|
|
+ if (_chargingData[index]->Type == _Type_GB)
|
|
|
+ SetGfdConfig(index, GFD_IDLE);
|
|
|
+ else
|
|
|
SetGfdConfig(index, GFD_CHARGING);
|
|
|
}
|
|
|
}
|
|
@@ -1265,8 +1320,8 @@ void CheckOutputVolNoneMatchFire(byte index)
|
|
|
_chargingData[index]->Type == _Type_CCS_2 ||
|
|
|
_chargingData[index]->Type == _Type_GB))
|
|
|
{
|
|
|
- if ((_chargingData[index]->PresentChargingVoltage < _chargingData[index]->FireChargingVoltage - 300) ||
|
|
|
- (_chargingData[index]->PresentChargingVoltage > _chargingData[index]->FireChargingVoltage + 300))
|
|
|
+ if (((_chargingData[index]->PresentChargingVoltage * 10) < _chargingData[index]->FireChargingVoltage - 300) ||
|
|
|
+ ((_chargingData[index]->PresentChargingVoltage * 10) > _chargingData[index]->FireChargingVoltage + 300))
|
|
|
{
|
|
|
if (!_isOutputNoneMatch[index])
|
|
|
{
|
|
@@ -1290,6 +1345,39 @@ void CheckOutputVolNoneMatchFire(byte index)
|
|
|
}
|
|
|
}
|
|
|
|
|
|
+void CheckRelayWeldingStatus(byte index)
|
|
|
+{
|
|
|
+ if (!_isRelayWelding[index])
|
|
|
+ {
|
|
|
+ if (_chargingData[index]->PresentChargingVoltage >= VOUT_MIN_VOLTAGE)
|
|
|
+ {
|
|
|
+ gettimeofday(&_checkRelayWeldingTimer[index], NULL);
|
|
|
+ _isRelayWelding[index] = YES;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ else
|
|
|
+ {
|
|
|
+ if ((GetTimeoutValue(_checkRelayWeldingTimer[index]) / 1000) >= 1000)
|
|
|
+ {
|
|
|
+ _chargingData[index]->RelayWeldingCheck = YES;
|
|
|
+ return;
|
|
|
+ }
|
|
|
+
|
|
|
+ if (_chargingData[index]->FireChargingVoltage >= VOUT_MIN_VOLTAGE)
|
|
|
+ {
|
|
|
+ if (_chargingData[index]->Type == _Type_Chademo)
|
|
|
+ ShmStatusCodeData->FaultCode.FaultEvents.bits.ChademoOutputRelayWelding = YES;
|
|
|
+ else if (_chargingData[index]->Type == _Type_GB)
|
|
|
+ ShmStatusCodeData->FaultCode.FaultEvents.bits.GbOutputRelayWelding = YES;
|
|
|
+ else if (_chargingData[index]->Type == _Type_CCS_2)
|
|
|
+ ShmStatusCodeData->FaultCode.FaultEvents.bits.CcsOutputRelayWelding = YES;
|
|
|
+
|
|
|
+ PRINTF_FUNC("CheckRelayWeldingStatus : fail \n");
|
|
|
+ _chargingData[index]->StopChargeFlag = YES;
|
|
|
+ }
|
|
|
+ }
|
|
|
+}
|
|
|
+
|
|
|
void GetPsuTempForFanSpeed()
|
|
|
{
|
|
|
char temp = 0;
|
|
@@ -1302,6 +1390,8 @@ void GetPsuTempForFanSpeed()
|
|
|
}
|
|
|
}
|
|
|
|
|
|
+ if (ShmSysConfigAndInfo->SysConfig.SwitchDebugFlag == NO)
|
|
|
+ {
|
|
|
if (ShmFanModuleData->TestFanSpeed == NORMAL_FAN_SPEED)
|
|
|
{
|
|
|
if (temp >= ENV_TEMP_MAX)
|
|
@@ -1314,6 +1404,7 @@ void GetPsuTempForFanSpeed()
|
|
|
}
|
|
|
else
|
|
|
ShmFanModuleData->TestFanSpeed = NORMAL_FAN_SPEED;
|
|
|
+ }
|
|
|
}
|
|
|
|
|
|
int main(void)
|
|
@@ -1331,7 +1422,7 @@ int main(void)
|
|
|
return 0;
|
|
|
}
|
|
|
|
|
|
- gunCount = GUN_COUNT;
|
|
|
+ gunCount = ShmSysConfigAndInfo->SysConfig.TotalConnectorCount;
|
|
|
// Open Uart5 for RB
|
|
|
Uart5Fd = InitComPort();
|
|
|
Initialization();
|
|
@@ -1344,18 +1435,17 @@ int main(void)
|
|
|
}
|
|
|
|
|
|
outputRelay.relay_event.bits.AC_Contactor = 0x00;
|
|
|
- //outputRelay.relay_event.bits.CCS_Precharge = 0x00;
|
|
|
- //outputRelay.relay_event.bits.Gun1_Parallel_P = 0x01;
|
|
|
- //outputRelay.relay_event.bits.Gun1_Parallel_N = 0x01;
|
|
|
- //outputRelay.relay_event.bits.Gun1_P = 0x01;
|
|
|
- //outputRelay.relay_event.bits.Gun1_N = 0x01;
|
|
|
- //outputRelay.relay_event.bits.Gun2_N = 0x01;
|
|
|
- //outputRelay.relay_event.bits.Gun2_P = 0x01;
|
|
|
+ outputRelay.relay_event.bits.CCS_Precharge = 0x00;
|
|
|
+ outputRelay.relay_event.bits.Gun1_Parallel_P = 0x00;
|
|
|
+ outputRelay.relay_event.bits.Gun1_Parallel_N = 0x00;
|
|
|
+ outputRelay.relay_event.bits.Gun1_P = 0x00;
|
|
|
+ outputRelay.relay_event.bits.Gun1_N = 0x00;
|
|
|
+ outputRelay.relay_event.bits.Gun2_N = 0x00;
|
|
|
+ outputRelay.relay_event.bits.Gun2_P = 0x00;
|
|
|
if(Config_Relay_Output(Uart5Fd, Addr.Relay, &outputRelay) != PASS)
|
|
|
PRINTF_FUNC("Config_Relay_Output fail \n");
|
|
|
|
|
|
- bool printRelayStatus = false;
|
|
|
- //return 0;
|
|
|
+ bool printRelayStatus = true;
|
|
|
for(;;)
|
|
|
{
|
|
|
bool isCharging = false;
|
|
@@ -1386,7 +1476,7 @@ int main(void)
|
|
|
GetPresentInputVol();
|
|
|
|
|
|
// 讀取當前 relay 狀態
|
|
|
- GetRelayOutputStatus();
|
|
|
+ //GetRelayOutputStatus();
|
|
|
|
|
|
for (int i = 0; i < gunCount; i++)
|
|
|
{
|
|
@@ -1403,7 +1493,10 @@ int main(void)
|
|
|
CheckPhaseLossStatus(i);
|
|
|
|
|
|
if (_chargingData[i]->SystemStatus == S_IDLE)
|
|
|
- gfdChkFailCount[i] = 0;
|
|
|
+ {
|
|
|
+ _chargingData[i]->RelayWeldingCheck = NO;
|
|
|
+ _isRelayWelding[i] = NO;
|
|
|
+ }
|
|
|
|
|
|
if (_chargingData[i]->SystemStatus == S_BOOTING ||
|
|
|
(_chargingData[i]->SystemStatus >= S_PREPARNING && _chargingData[i]->SystemStatus <= S_COMPLETE) ||
|
|
@@ -1413,22 +1506,27 @@ int main(void)
|
|
|
_chargingData[i]->IsReadyToCharging = YES;
|
|
|
isCharging = true;
|
|
|
|
|
|
+ if (_chargingData[i]->SystemStatus >= S_PREPARING_FOR_EVSE &&
|
|
|
+ _chargingData[i]->RelayWeldingCheck == NO)
|
|
|
+ CheckRelayWeldingStatus(i);
|
|
|
+
|
|
|
if (_chargingData[i]->SystemStatus == S_CHARGING)
|
|
|
{
|
|
|
CheckOutputPowerOverCarReq(i);
|
|
|
CheckOutputVolNoneMatchFire(i);
|
|
|
}
|
|
|
else
|
|
|
- {
|
|
|
_isOutputNoneMatch[i] = NO;
|
|
|
}
|
|
|
- }
|
|
|
else
|
|
|
_chargingData[i]->IsReadyToCharging = NO;
|
|
|
}
|
|
|
// Cable check (Get)
|
|
|
GetGfdAdc();
|
|
|
|
|
|
+ // 橋接 relay
|
|
|
+ SetParalleRelayStatus();
|
|
|
+
|
|
|
// 搭上 AC Contactor
|
|
|
if (isCharging)
|
|
|
outputRelay.relay_event.bits.AC_Contactor = YES;
|
|
@@ -1456,29 +1554,19 @@ int main(void)
|
|
|
}
|
|
|
|
|
|
// 搭上/鬆開 Relay
|
|
|
- // 放開 Relay 之前要先確認輸出的電壓電流是否已經降到某個值
|
|
|
if(IsNoneMatchRelayStatus())
|
|
|
{
|
|
|
- if (!printRelayStatus)
|
|
|
- {
|
|
|
- PRINTF_FUNC("Match Relay Target, AC = %x, g1_p = %x, g1_n = %x, g2_p = %x, g2_n = %x, pre = %x, bri_p = %x, bri_n = %x \n",
|
|
|
- outputRelay.relay_event.bits.AC_Contactor,
|
|
|
- outputRelay.relay_event.bits.Gun1_P,
|
|
|
- outputRelay.relay_event.bits.Gun1_N,
|
|
|
- outputRelay.relay_event.bits.Gun2_P,
|
|
|
- outputRelay.relay_event.bits.Gun2_N,
|
|
|
- outputRelay.relay_event.bits.CCS_Precharge,
|
|
|
- outputRelay.relay_event.bits.Gun1_Parallel_P,
|
|
|
- outputRelay.relay_event.bits.Gun1_Parallel_N);
|
|
|
- }
|
|
|
- printRelayStatus = false;
|
|
|
if (Config_Relay_Output(Uart5Fd, Addr.Relay, &outputRelay))
|
|
|
- {}
|
|
|
- }
|
|
|
- else
|
|
|
{
|
|
|
- if (!printRelayStatus)
|
|
|
- {
|
|
|
+ regRelay.relay_event.bits.AC_Contactor = ShmSysConfigAndInfo->SysInfo.AcContactorStatus;
|
|
|
+ regRelay.relay_event.bits.CCS_Precharge = outputRelay.relay_event.bits.CCS_Precharge;
|
|
|
+ regRelay.relay_event.bits.Gun1_P = outputRelay.relay_event.bits.Gun1_P;
|
|
|
+ regRelay.relay_event.bits.Gun1_N = outputRelay.relay_event.bits.Gun1_N;
|
|
|
+ regRelay.relay_event.bits.Gun2_P = outputRelay.relay_event.bits.Gun2_P;
|
|
|
+ regRelay.relay_event.bits.Gun2_N = outputRelay.relay_event.bits.Gun2_N;
|
|
|
+ regRelay.relay_event.bits.Gun1_Parallel_P = outputRelay.relay_event.bits.Gun1_Parallel_P;
|
|
|
+ regRelay.relay_event.bits.Gun1_Parallel_N = outputRelay.relay_event.bits.Gun1_Parallel_N;
|
|
|
+
|
|
|
PRINTF_FUNC("Match Relay, AC = %x, g1_p = %x, g1_n = %x, g2_p = %x, g2_n = %x, pre = %x, bri_p = %x, bri_n = %x \n",
|
|
|
regRelay.relay_event.bits.AC_Contactor,
|
|
|
regRelay.relay_event.bits.Gun1_P,
|
|
@@ -1500,10 +1588,6 @@ int main(void)
|
|
|
GetPsuTempForFanSpeed();
|
|
|
|
|
|
GetFanSpeed();
|
|
|
- // printf("ShmFanModuleData->PresentFan1Speed = %d \n", ShmFanModuleData->PresentFan1Speed);
|
|
|
- // printf("ShmFanModuleData->PresentFan2Speed = %d \n", ShmFanModuleData->PresentFan2Speed);
|
|
|
- // printf("ShmFanModuleData->PresentFan3Speed = %d \n", ShmFanModuleData->PresentFan3Speed);
|
|
|
- // printf("ShmFanModuleData->PresentFan4Speed = %d \n", ShmFanModuleData->PresentFan4Speed);
|
|
|
gettimeofday(&_priority_time, NULL);
|
|
|
if (isCharging)
|
|
|
{
|
|
@@ -1529,15 +1613,24 @@ int main(void)
|
|
|
else
|
|
|
{
|
|
|
if (ShmFanModuleData->PresentFan1Speed > MIN_FAN_SPEED ||
|
|
|
- ShmFanModuleData->PresentFan2Speed < MAX_FAN_SPEED ||
|
|
|
- ShmFanModuleData->PresentFan3Speed < MAX_FAN_SPEED ||
|
|
|
- ShmFanModuleData->PresentFan4Speed < MAX_FAN_SPEED)
|
|
|
+ ShmFanModuleData->PresentFan2Speed > MIN_FAN_SPEED ||
|
|
|
+ ShmFanModuleData->PresentFan3Speed > MIN_FAN_SPEED ||
|
|
|
+ ShmFanModuleData->PresentFan4Speed > MIN_FAN_SPEED)
|
|
|
{
|
|
|
ShmFanModuleData->SetFan1Speed = MIN_FAN_SPEED;
|
|
|
ShmFanModuleData->SetFan2Speed = MIN_FAN_SPEED;
|
|
|
ShmFanModuleData->SetFan3Speed = MIN_FAN_SPEED;
|
|
|
ShmFanModuleData->SetFan4Speed = MIN_FAN_SPEED;
|
|
|
}
|
|
|
+
|
|
|
+ // 停止時,如溫度還是很高,則需要維持該轉速直到溫度降低
|
|
|
+ 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);
|