|
@@ -2423,387 +2423,245 @@ int main(void)
|
|
|
//bool printRelayStatus = true;
|
|
|
for(;;)
|
|
|
{
|
|
|
- bool isCharging = false;
|
|
|
- // 程序開始之前~ 必須先確定 FW 版本與硬體版本,確認後!!~ 該模組才算是真正的 Initial Comp.
|
|
|
- if (ShmRelayModuleData[0]->SelfTest_Comp == NO)
|
|
|
- {
|
|
|
- // clena fw version
|
|
|
- memset(ShmSysConfigAndInfo->SysInfo.RelayModuleFwRev, 0x00, 32);
|
|
|
-
|
|
|
- GetFwAndHwVersion_Relay();
|
|
|
- SetRtcData_Relay(0);
|
|
|
- sleep(1);
|
|
|
-
|
|
|
- if(strlen((char *)ShmSysConfigAndInfo->SysInfo.RelayModuleFwRev))
|
|
|
+ if(!ShmSysConfigAndInfo->SysInfo.FirmwareUpdate)
|
|
|
+ {
|
|
|
+ bool isCharging = false;
|
|
|
+ // 程序開始之前~ 必須先確定 FW 版本與硬體版本,確認後!!~ 該模組才算是真正的 Initial Comp.
|
|
|
+ if (ShmRelayModuleData[0]->SelfTest_Comp == NO)
|
|
|
{
|
|
|
- ShmRelayModuleData[0]->SelfTest_Comp = YES;
|
|
|
- }
|
|
|
- }
|
|
|
-
|
|
|
- // DO360 RC2
|
|
|
- if (ShmRelayModuleData[1]->SelfTest_Comp == NO)
|
|
|
- {
|
|
|
- // clena fw version
|
|
|
- memset(ShmSysConfigAndInfo->SysInfo.Relay2ModuleFwRev, 0x00, 32);
|
|
|
+ // clena fw version
|
|
|
+ memset(ShmSysConfigAndInfo->SysInfo.RelayModuleFwRev, 0x00, 32);
|
|
|
|
|
|
- GetFwAndHwVersion_Relay2();
|
|
|
- SetRtcData_Relay(1);
|
|
|
- sleep(1);
|
|
|
+ GetFwAndHwVersion_Relay();
|
|
|
+ SetRtcData_Relay(0);
|
|
|
+ sleep(1);
|
|
|
|
|
|
- if (strlen((char *)ShmSysConfigAndInfo->SysInfo.Relay2ModuleFwRev) != 0)
|
|
|
- {
|
|
|
- ShmRelayModuleData[1]->SelfTest_Comp = YES;
|
|
|
+ if(strlen((char *)ShmSysConfigAndInfo->SysInfo.RelayModuleFwRev))
|
|
|
+ {
|
|
|
+ ShmRelayModuleData[0]->SelfTest_Comp = YES;
|
|
|
+ }
|
|
|
}
|
|
|
- }
|
|
|
|
|
|
- if (ShmFanModuleData->SelfTest_Comp == NO)
|
|
|
- {
|
|
|
- // clena fw version
|
|
|
- memset(ShmSysConfigAndInfo->SysInfo.FanModuleFwRev, 0x00, 32);
|
|
|
-
|
|
|
- GetFwAndHwVersion_Fan();
|
|
|
- SetModelName_Fan();
|
|
|
- SetRtcData_Fan();
|
|
|
- sleep(1);
|
|
|
- gettimeofday(&_priority_time, NULL);
|
|
|
-
|
|
|
- if(strlen((char *)ShmSysConfigAndInfo->SysInfo.FanModuleFwRev) != 0)
|
|
|
+ // DO360 RC2
|
|
|
+ if (ShmRelayModuleData[1]->SelfTest_Comp == NO)
|
|
|
{
|
|
|
- ShmFanModuleData->SelfTest_Comp = YES;
|
|
|
- }
|
|
|
- }
|
|
|
-
|
|
|
- // 自檢階段處理,自檢階段如果讀不到版號則代表該系統沒有掛燈板
|
|
|
-// if (ShmLedModuleData->SelfTest_Comp == NO)
|
|
|
-// {
|
|
|
- // 自檢階段
|
|
|
-// if (ShmSysConfigAndInfo->SysInfo.SelfTestSeq <= _STEST_PSU_CAP)
|
|
|
-// {
|
|
|
-// GetFwAndHwVersion_Led();
|
|
|
-// sleep(1);
|
|
|
-// gettimeofday(&_led_priority_time, NULL);
|
|
|
-// }
|
|
|
-// else
|
|
|
-// {
|
|
|
- // 自檢階段沒有問到版號
|
|
|
-// if (ShmStatusCodeData->AlarmCode.AlarmEvents.bits.LedboardStestFail == NO)
|
|
|
-// ShmStatusCodeData->AlarmCode.AlarmEvents.bits.LedboardStestFail = YES;
|
|
|
-// }
|
|
|
-// }
|
|
|
-
|
|
|
- //AcChargeTypeProcess();
|
|
|
-
|
|
|
- if (ShmRelayModuleData[0]->SelfTest_Comp == YES && ShmRelayModuleData[1]->SelfTest_Comp == YES)
|
|
|
- {
|
|
|
- // ==============優先權最高 10 ms ==============
|
|
|
- // 輸出電壓
|
|
|
- GetPersentOutputVol();
|
|
|
-
|
|
|
- // 三相輸入電壓
|
|
|
- GetPresentInputVol();
|
|
|
-
|
|
|
- // 讀取當前 AC relay 狀態
|
|
|
- regRelay[0].relay_event.bits.AC_Contactor = ShmSysConfigAndInfo->SysInfo.AcContactorStatus;
|
|
|
- regRelay[1].relay_event.bits.AC_Contactor = ShmSysConfigAndInfo->SysInfo.AcContactorStatus;
|
|
|
- //GetRelayOutputStatus();
|
|
|
-
|
|
|
- for (int i = 0; i < gunCount; i++)
|
|
|
- {
|
|
|
- // Cable check (Set)
|
|
|
- //CableCheckDetected(i);
|
|
|
-
|
|
|
- // check k1 k2 relay 狀態
|
|
|
- CheckK1K2RelayOutput(i);
|
|
|
-
|
|
|
- // 依據當前各槍的狀態選擇 搭上/放開 Relay
|
|
|
- SetK1K2RelayStatus(i);
|
|
|
+ // clena fw version
|
|
|
+ memset(ShmSysConfigAndInfo->SysInfo.Relay2ModuleFwRev, 0x00, 32);
|
|
|
|
|
|
- if (ShmSysConfigAndInfo->SysConfig.PhaseLossPolicy == YES)
|
|
|
- CheckPhaseLossStatus(i);
|
|
|
+ GetFwAndHwVersion_Relay2();
|
|
|
+ SetRtcData_Relay(1);
|
|
|
+ sleep(1);
|
|
|
|
|
|
- CheckAcInputOvpStatus(i);
|
|
|
-
|
|
|
- if (_chargingData[i]->SystemStatus == S_IDLE)
|
|
|
- {
|
|
|
- _chargingData[i]->RelayWeldingCheck = NO;
|
|
|
- _isRelayWelding[i] = NO;
|
|
|
- }
|
|
|
-
|
|
|
- if (_chargingData[i]->SystemStatus == S_BOOTING ||
|
|
|
- (_chargingData[i]->SystemStatus >= S_REASSIGN_CHECK && _chargingData[i]->SystemStatus <= S_COMPLETE) ||
|
|
|
- (_chargingData[i]->SystemStatus >= S_CCS_PRECHARGE_ST0 && _chargingData[i]->SystemStatus <= S_CCS_PRECHARGE_ST1) ||
|
|
|
- ShmSysConfigAndInfo->SysInfo.WaitForPlugit == YES ||
|
|
|
- (ShmSysConfigAndInfo->SysInfo.PageIndex >= _LCM_AUTHORIZING && ShmSysConfigAndInfo->SysInfo.PageIndex <= _LCM_WAIT_FOR_PLUG))
|
|
|
- {
|
|
|
- _chargingData[i]->IsReadyToCharging = YES;
|
|
|
- isCharging = true;
|
|
|
-
|
|
|
- // 限定只有在槍類別為 GBT 的時候才做 relay welding 的判斷
|
|
|
- if (_chargingData[i]->Type == _Type_GB)
|
|
|
- {
|
|
|
- if (_chargingData[i]->SystemStatus >= S_PREPARING_FOR_EVSE &&
|
|
|
- _chargingData[i]->RelayWeldingCheck == NO)
|
|
|
- CheckRelayWeldingStatus(i);
|
|
|
- }
|
|
|
- else
|
|
|
- _chargingData[i]->RelayWeldingCheck = YES;
|
|
|
-
|
|
|
- if (_chargingData[i]->SystemStatus == S_CHARGING)
|
|
|
- {
|
|
|
- // DO360 do not check under voltage output & any voltage difference
|
|
|
- //CheckOutputPowerOverCarReq(i);
|
|
|
- //CheckOutputVolNoneMatchFire(i);
|
|
|
- }
|
|
|
- else
|
|
|
- _isOutputNoneMatch[i] = NO;
|
|
|
- }
|
|
|
- else
|
|
|
- _chargingData[i]->IsReadyToCharging = NO;
|
|
|
- }
|
|
|
-
|
|
|
- // Cable check (Get)
|
|
|
- //GetGfdAdc();
|
|
|
-
|
|
|
- // 橋接 relay
|
|
|
- SetParalleRelayStatus();
|
|
|
+ if (strlen((char *)ShmSysConfigAndInfo->SysInfo.Relay2ModuleFwRev) != 0)
|
|
|
+ {
|
|
|
+ ShmRelayModuleData[1]->SelfTest_Comp = YES;
|
|
|
+ }
|
|
|
+ }
|
|
|
|
|
|
- // 搭上 AC Contactor
|
|
|
-// if (isCharging)
|
|
|
-// outputRelay.relay_event.bits.AC_Contactor = YES;
|
|
|
-// else
|
|
|
-// outputRelay.relay_event.bits.AC_Contactor = NO;
|
|
|
+ if (ShmFanModuleData->SelfTest_Comp == NO)
|
|
|
+ {
|
|
|
+ // clena fw version
|
|
|
+ memset(ShmSysConfigAndInfo->SysInfo.FanModuleFwRev, 0x00, 32);
|
|
|
|
|
|
- if (isCharging ||
|
|
|
- (ShmPsuData->Work_Step >= _TEST_MODE && ShmPsuData->Work_Step <= _TEST_MODE))
|
|
|
- {
|
|
|
- isStopChargingCount = false;
|
|
|
- outputRelay[0].relay_event.bits.AC_Contactor = YES;
|
|
|
- outputRelay[1].relay_event.bits.AC_Contactor = YES;
|
|
|
- }
|
|
|
- else
|
|
|
- {
|
|
|
- if (!isStopChargingCount)
|
|
|
- {
|
|
|
- gettimeofday(&_close_ac_contactor, NULL);
|
|
|
- isStopChargingCount = true;
|
|
|
- }
|
|
|
- else
|
|
|
- {
|
|
|
- if (((outputRelay[0].relay_event.bits.AC_Contactor == YES || outputRelay[1].relay_event.bits.AC_Contactor == YES)&&
|
|
|
- GetTimeoutValue(_close_ac_contactor) / 1000 >= (TEN_MINUTES * 1000)))
|
|
|
- {
|
|
|
- outputRelay[0].relay_event.bits.AC_Contactor = NO;
|
|
|
- outputRelay[1].relay_event.bits.AC_Contactor = NO;
|
|
|
- }
|
|
|
- }
|
|
|
- }
|
|
|
+ GetFwAndHwVersion_Fan();
|
|
|
+ SetModelName_Fan();
|
|
|
+ SetRtcData_Fan();
|
|
|
+ sleep(1);
|
|
|
+ gettimeofday(&_priority_time, NULL);
|
|
|
|
|
|
- if (ShmPsuData->Work_Step >= _TEST_MODE && ShmPsuData->Work_Step <= _TEST_MODE)
|
|
|
- {
|
|
|
- outputRelay[0].relay_event.bits.Gun1_N = outputRelay[0].relay_event.bits.Gun1_P = YES;
|
|
|
- }
|
|
|
+ if(strlen((char *)ShmSysConfigAndInfo->SysInfo.FanModuleFwRev) != 0)
|
|
|
+ {
|
|
|
+ ShmFanModuleData->SelfTest_Comp = YES;
|
|
|
+ }
|
|
|
+ }
|
|
|
|
|
|
- // 搭上/鬆開 Relay
|
|
|
- if(IsNoneMatchRelayStatus(0))
|
|
|
- {
|
|
|
- if (Config_Relay_Output(Uart5Fd, Addr.DO360_RC1, &outputRelay[0]))
|
|
|
- {
|
|
|
- //regRelay.relay_event.bits.AC_Contactor = ShmSysConfigAndInfo->SysInfo.AcContactorStatus;
|
|
|
- regRelay[0].relay_event.bits.CCS_Precharge = outputRelay[0].relay_event.bits.CCS_Precharge;
|
|
|
- regRelay[0].relay_event.bits.Gun1_P = outputRelay[0].relay_event.bits.Gun1_P;
|
|
|
- regRelay[0].relay_event.bits.Gun1_N = outputRelay[0].relay_event.bits.Gun1_N;
|
|
|
- regRelay[0].relay_event.bits.Gun2_P = outputRelay[0].relay_event.bits.Gun2_P;
|
|
|
- regRelay[0].relay_event.bits.Gun2_N = outputRelay[0].relay_event.bits.Gun2_N;
|
|
|
- regRelay[0].relay_event.bits.Gun1_Parallel_P = outputRelay[0].relay_event.bits.Gun1_Parallel_P;
|
|
|
- regRelay[0].relay_event.bits.Gun1_Parallel_N = outputRelay[0].relay_event.bits.Gun1_Parallel_N;
|
|
|
- regRelay[0].relay_event.bits.Gun2_Parallel_P = outputRelay[0].relay_event.bits.Gun2_Parallel_P;
|
|
|
- regRelay[0].relay_event.bits.Gun2_Parallel_N = outputRelay[0].relay_event.bits.Gun2_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, bri2_p = %x, bri2_n = %x \n",
|
|
|
- regRelay[0].relay_event.bits.AC_Contactor,
|
|
|
- regRelay[0].relay_event.bits.Gun1_P,
|
|
|
- regRelay[0].relay_event.bits.Gun1_N,
|
|
|
- regRelay[0].relay_event.bits.Gun2_P,
|
|
|
- regRelay[0].relay_event.bits.Gun2_N,
|
|
|
- regRelay[0].relay_event.bits.CCS_Precharge,
|
|
|
- regRelay[0].relay_event.bits.Gun1_Parallel_P,
|
|
|
- regRelay[0].relay_event.bits.Gun1_Parallel_N,
|
|
|
- regRelay[0].relay_event.bits.Gun2_Parallel_P,
|
|
|
- regRelay[0].relay_event.bits.Gun2_Parallel_N);
|
|
|
- }
|
|
|
- }
|
|
|
+ if (ShmRelayModuleData[0]->SelfTest_Comp == YES && ShmRelayModuleData[1]->SelfTest_Comp == YES)
|
|
|
+ {
|
|
|
+ // ==============優先權最高 10 ms ==============
|
|
|
+ // 輸出電壓
|
|
|
+ GetPersentOutputVol();
|
|
|
|
|
|
- // 搭上/鬆開 Relay
|
|
|
- if(IsNoneMatchRelayStatus(1))
|
|
|
- {
|
|
|
- if (Config_Relay_Output(Uart5Fd, Addr.DO360_RC2, &outputRelay[1]))
|
|
|
- {
|
|
|
- //regRelay.relay_event.bits.AC_Contactor = ShmSysConfigAndInfo->SysInfo.AcContactorStatus;
|
|
|
- regRelay[1].relay_event.bits.CCS_Precharge = outputRelay[1].relay_event.bits.CCS_Precharge;
|
|
|
- regRelay[1].relay_event.bits.Gun1_P = outputRelay[1].relay_event.bits.Gun1_P;
|
|
|
- regRelay[1].relay_event.bits.Gun1_N = outputRelay[1].relay_event.bits.Gun1_N;
|
|
|
- regRelay[1].relay_event.bits.Gun2_P = outputRelay[1].relay_event.bits.Gun2_P;
|
|
|
- regRelay[1].relay_event.bits.Gun2_N = outputRelay[1].relay_event.bits.Gun2_N;
|
|
|
- regRelay[1].relay_event.bits.Gun1_Parallel_P = outputRelay[1].relay_event.bits.Gun1_Parallel_P;
|
|
|
- regRelay[1].relay_event.bits.Gun1_Parallel_N = outputRelay[1].relay_event.bits.Gun1_Parallel_N;
|
|
|
- regRelay[1].relay_event.bits.Gun2_Parallel_P = outputRelay[1].relay_event.bits.Gun2_Parallel_P;
|
|
|
- regRelay[1].relay_event.bits.Gun2_Parallel_N = outputRelay[1].relay_event.bits.Gun2_Parallel_N;
|
|
|
-
|
|
|
- PRINTF_FUNC("Match Relay2, AC = %x, g1_p = %x, g1_n = %x, g2_p = %x, g2_n = %x, pre = %x, bri_p = %x, bri_n = %x, bri2_p = %x, bri2_n = %x \n",
|
|
|
- regRelay[1].relay_event.bits.AC_Contactor,
|
|
|
- regRelay[1].relay_event.bits.Gun1_P,
|
|
|
- regRelay[1].relay_event.bits.Gun1_N,
|
|
|
- regRelay[1].relay_event.bits.Gun2_P,
|
|
|
- regRelay[1].relay_event.bits.Gun2_N,
|
|
|
- regRelay[1].relay_event.bits.CCS_Precharge,
|
|
|
- regRelay[1].relay_event.bits.Gun1_Parallel_P,
|
|
|
- regRelay[1].relay_event.bits.Gun1_Parallel_N,
|
|
|
- regRelay[1].relay_event.bits.Gun2_Parallel_P,
|
|
|
- regRelay[1].relay_event.bits.Gun2_Parallel_N);
|
|
|
- }
|
|
|
- }
|
|
|
+ // 三相輸入電壓
|
|
|
+ GetPresentInputVol();
|
|
|
|
|
|
+ // 讀取當前 AC relay 狀態
|
|
|
+ regRelay[0].relay_event.bits.AC_Contactor = ShmSysConfigAndInfo->SysInfo.AcContactorStatus;
|
|
|
+ regRelay[1].relay_event.bits.AC_Contactor = ShmSysConfigAndInfo->SysInfo.AcContactorStatus;
|
|
|
+ //GetRelayOutputStatus();
|
|
|
|
|
|
-// 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))
|
|
|
-// {
|
|
|
-// 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);
|
|
|
-// }
|
|
|
-// }
|
|
|
-// else
|
|
|
-// {
|
|
|
-// if (!printRelayStatus)
|
|
|
-// {
|
|
|
-// 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,
|
|
|
-// 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);
|
|
|
-// }
|
|
|
-// printRelayStatus = true;
|
|
|
-// }
|
|
|
- }
|
|
|
-
|
|
|
- if (ShmFanModuleData->SelfTest_Comp == YES ||
|
|
|
- strlen((char *)ShmSysConfigAndInfo->SysInfo.FanModuleFwRev) != 0 ||
|
|
|
- ShmSysConfigAndInfo->SysInfo.FanModuleFwRev[0] != '\0')
|
|
|
- {
|
|
|
- if (GetTimeoutValue(_priority_time) / 1000 >= 1000)
|
|
|
- {
|
|
|
- //GetPsuTempForFanSpeed();
|
|
|
- GetFanSpeedByFunction();
|
|
|
- GetFanSpeed();
|
|
|
- ShmSysConfigAndInfo->SysInfo.SystemFanRotaSpeed = _setFanSpeed;
|
|
|
- gettimeofday(&_priority_time, NULL);
|
|
|
+ for (int i = 0; i < gunCount; i++)
|
|
|
+ {
|
|
|
+ // check k1 k2 relay 狀態
|
|
|
+ CheckK1K2RelayOutput(i);
|
|
|
+
|
|
|
+ // 依據當前各槍的狀態選擇 搭上/放開 Relay
|
|
|
+ SetK1K2RelayStatus(i);
|
|
|
+
|
|
|
+ if (ShmSysConfigAndInfo->SysConfig.PhaseLossPolicy == YES)
|
|
|
+ CheckPhaseLossStatus(i);
|
|
|
+
|
|
|
+ CheckAcInputOvpStatus(i);
|
|
|
+
|
|
|
+ if (_chargingData[i]->SystemStatus == S_IDLE)
|
|
|
+ {
|
|
|
+ _chargingData[i]->RelayWeldingCheck = NO;
|
|
|
+ _isRelayWelding[i] = NO;
|
|
|
+ }
|
|
|
+
|
|
|
+ if (_chargingData[i]->SystemStatus == S_BOOTING ||
|
|
|
+ (_chargingData[i]->SystemStatus >= S_REASSIGN_CHECK && _chargingData[i]->SystemStatus <= S_COMPLETE) ||
|
|
|
+ (_chargingData[i]->SystemStatus >= S_CCS_PRECHARGE_ST0 && _chargingData[i]->SystemStatus <= S_CCS_PRECHARGE_ST1) ||
|
|
|
+ ShmSysConfigAndInfo->SysInfo.WaitForPlugit == YES ||
|
|
|
+ (ShmSysConfigAndInfo->SysInfo.PageIndex >= _LCM_AUTHORIZING && ShmSysConfigAndInfo->SysInfo.PageIndex <= _LCM_WAIT_FOR_PLUG))
|
|
|
+ {
|
|
|
+ _chargingData[i]->IsReadyToCharging = YES;
|
|
|
+ isCharging = true;
|
|
|
+
|
|
|
+ // 限定只有在槍類別為 GBT 的時候才做 relay welding 的判斷
|
|
|
+ if (_chargingData[i]->Type == _Type_GB)
|
|
|
+ {
|
|
|
+ if (_chargingData[i]->SystemStatus >= S_PREPARING_FOR_EVSE &&
|
|
|
+ _chargingData[i]->RelayWeldingCheck == NO)
|
|
|
+ CheckRelayWeldingStatus(i);
|
|
|
+ }
|
|
|
+ else
|
|
|
+ _chargingData[i]->RelayWeldingCheck = YES;
|
|
|
+
|
|
|
+ if (_chargingData[i]->SystemStatus == S_CHARGING)
|
|
|
+ {
|
|
|
+ // DO360 do not check under voltage output & any voltage difference
|
|
|
+ //CheckOutputPowerOverCarReq(i);
|
|
|
+ //CheckOutputVolNoneMatchFire(i);
|
|
|
+ }
|
|
|
+ else
|
|
|
+ _isOutputNoneMatch[i] = NO;
|
|
|
+ }
|
|
|
+ else
|
|
|
+ _chargingData[i]->IsReadyToCharging = NO;
|
|
|
+ }
|
|
|
|
|
|
- unsigned short TargetSpeed = ShmFanModuleData->TestFanSpeed;
|
|
|
+ // 橋接 relay
|
|
|
+ SetParalleRelayStatus();
|
|
|
|
|
|
- if(TargetSpeed != 0 && TargetSpeed < MIN_FAN_SPEED)
|
|
|
- {
|
|
|
- TargetSpeed = MIN_FAN_SPEED;
|
|
|
- }
|
|
|
- ShmFanModuleData->SetFan1Speed = TargetSpeed;
|
|
|
- ShmFanModuleData->SetFan2Speed = TargetSpeed;
|
|
|
- ShmFanModuleData->SetFan3Speed = TargetSpeed;
|
|
|
- ShmFanModuleData->SetFan4Speed = TargetSpeed;
|
|
|
+ if (isCharging ||
|
|
|
+ (ShmPsuData->Work_Step >= _TEST_MODE && ShmPsuData->Work_Step <= _TEST_MODE))
|
|
|
+ {
|
|
|
+ isStopChargingCount = false;
|
|
|
+ outputRelay[0].relay_event.bits.AC_Contactor = YES;
|
|
|
+ outputRelay[1].relay_event.bits.AC_Contactor = YES;
|
|
|
+ }
|
|
|
+ else
|
|
|
+ {
|
|
|
+ if (!isStopChargingCount)
|
|
|
+ {
|
|
|
+ gettimeofday(&_close_ac_contactor, NULL);
|
|
|
+ isStopChargingCount = true;
|
|
|
+ }
|
|
|
+ else
|
|
|
+ {
|
|
|
+ if (((outputRelay[0].relay_event.bits.AC_Contactor == YES || outputRelay[1].relay_event.bits.AC_Contactor == YES)&&
|
|
|
+ GetTimeoutValue(_close_ac_contactor) / 1000 >= (TEN_MINUTES * 1000)))
|
|
|
+ {
|
|
|
+ outputRelay[0].relay_event.bits.AC_Contactor = NO;
|
|
|
+ outputRelay[1].relay_event.bits.AC_Contactor = NO;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
|
|
|
-// if (isCharging)
|
|
|
-// {
|
|
|
-//// if (ShmFanModuleData->PresentFan1Speed < MAX_FAN_SPEED ||
|
|
|
-//// ShmFanModuleData->PresentFan2Speed < MAX_FAN_SPEED ||
|
|
|
-//// ShmFanModuleData->PresentFan3Speed < MAX_FAN_SPEED ||
|
|
|
-//// ShmFanModuleData->PresentFan4Speed < MAX_FAN_SPEED)
|
|
|
-//// {
|
|
|
-//// ShmFanModuleData->SetFan1Speed = MAX_FAN_SPEED;
|
|
|
-//// ShmFanModuleData->SetFan2Speed = MAX_FAN_SPEED;
|
|
|
-//// ShmFanModuleData->SetFan3Speed = MAX_FAN_SPEED;
|
|
|
-//// ShmFanModuleData->SetFan4Speed = MAX_FAN_SPEED;
|
|
|
-//// }
|
|
|
-//
|
|
|
-// // 在還沒問到 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
|
|
|
-// {
|
|
|
-//// if (ShmFanModuleData->PresentFan1Speed > MIN_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;
|
|
|
-// }
|
|
|
-// }
|
|
|
+ if (ShmPsuData->Work_Step >= _TEST_MODE && ShmPsuData->Work_Step <= _TEST_MODE)
|
|
|
+ {
|
|
|
+ outputRelay[0].relay_event.bits.Gun1_N = outputRelay[0].relay_event.bits.Gun1_P = YES;
|
|
|
+ }
|
|
|
|
|
|
- //PRINTF_FUNC("set fan = %d \n", ShmFanModuleData->SetFan1Speed);
|
|
|
- SetFanModuleSpeed();
|
|
|
- }
|
|
|
- }
|
|
|
+ // 搭上/鬆開 Relay
|
|
|
+ if(IsNoneMatchRelayStatus(0))
|
|
|
+ {
|
|
|
+ if (Config_Relay_Output(Uart5Fd, Addr.DO360_RC1, &outputRelay[0]))
|
|
|
+ {
|
|
|
+ //regRelay.relay_event.bits.AC_Contactor = ShmSysConfigAndInfo->SysInfo.AcContactorStatus;
|
|
|
+ regRelay[0].relay_event.bits.CCS_Precharge = outputRelay[0].relay_event.bits.CCS_Precharge;
|
|
|
+ regRelay[0].relay_event.bits.Gun1_P = outputRelay[0].relay_event.bits.Gun1_P;
|
|
|
+ regRelay[0].relay_event.bits.Gun1_N = outputRelay[0].relay_event.bits.Gun1_N;
|
|
|
+ regRelay[0].relay_event.bits.Gun2_P = outputRelay[0].relay_event.bits.Gun2_P;
|
|
|
+ regRelay[0].relay_event.bits.Gun2_N = outputRelay[0].relay_event.bits.Gun2_N;
|
|
|
+ regRelay[0].relay_event.bits.Gun1_Parallel_P = outputRelay[0].relay_event.bits.Gun1_Parallel_P;
|
|
|
+ regRelay[0].relay_event.bits.Gun1_Parallel_N = outputRelay[0].relay_event.bits.Gun1_Parallel_N;
|
|
|
+ regRelay[0].relay_event.bits.Gun2_Parallel_P = outputRelay[0].relay_event.bits.Gun2_Parallel_P;
|
|
|
+ regRelay[0].relay_event.bits.Gun2_Parallel_N = outputRelay[0].relay_event.bits.Gun2_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, bri2_p = %x, bri2_n = %x \n",
|
|
|
+ regRelay[0].relay_event.bits.AC_Contactor,
|
|
|
+ regRelay[0].relay_event.bits.Gun1_P,
|
|
|
+ regRelay[0].relay_event.bits.Gun1_N,
|
|
|
+ regRelay[0].relay_event.bits.Gun2_P,
|
|
|
+ regRelay[0].relay_event.bits.Gun2_N,
|
|
|
+ regRelay[0].relay_event.bits.CCS_Precharge,
|
|
|
+ regRelay[0].relay_event.bits.Gun1_Parallel_P,
|
|
|
+ regRelay[0].relay_event.bits.Gun1_Parallel_N,
|
|
|
+ regRelay[0].relay_event.bits.Gun2_Parallel_P,
|
|
|
+ regRelay[0].relay_event.bits.Gun2_Parallel_N);
|
|
|
+ }
|
|
|
+ }
|
|
|
|
|
|
-// if (ShmLedModuleData->SelfTest_Comp == YES)
|
|
|
-// {
|
|
|
-// if (GetTimeoutValue(_led_priority_time) / 1000 >= 1000)
|
|
|
-// {
|
|
|
-// if(gunCount == 1)
|
|
|
-// {
|
|
|
-// SetLedColor(_chargingData[0], _chargingData[0]);
|
|
|
-// }
|
|
|
-// else if (gunCount == 2)
|
|
|
-// {
|
|
|
-// SetLedColor(_chargingData[0], _chargingData[1]);
|
|
|
-// }
|
|
|
+ // 搭上/鬆開 Relay
|
|
|
+ if(IsNoneMatchRelayStatus(1))
|
|
|
+ {
|
|
|
+ if (Config_Relay_Output(Uart5Fd, Addr.DO360_RC2, &outputRelay[1]))
|
|
|
+ {
|
|
|
+ //regRelay.relay_event.bits.AC_Contactor = ShmSysConfigAndInfo->SysInfo.AcContactorStatus;
|
|
|
+ regRelay[1].relay_event.bits.CCS_Precharge = outputRelay[1].relay_event.bits.CCS_Precharge;
|
|
|
+ regRelay[1].relay_event.bits.Gun1_P = outputRelay[1].relay_event.bits.Gun1_P;
|
|
|
+ regRelay[1].relay_event.bits.Gun1_N = outputRelay[1].relay_event.bits.Gun1_N;
|
|
|
+ regRelay[1].relay_event.bits.Gun2_P = outputRelay[1].relay_event.bits.Gun2_P;
|
|
|
+ regRelay[1].relay_event.bits.Gun2_N = outputRelay[1].relay_event.bits.Gun2_N;
|
|
|
+ regRelay[1].relay_event.bits.Gun1_Parallel_P = outputRelay[1].relay_event.bits.Gun1_Parallel_P;
|
|
|
+ regRelay[1].relay_event.bits.Gun1_Parallel_N = outputRelay[1].relay_event.bits.Gun1_Parallel_N;
|
|
|
+ regRelay[1].relay_event.bits.Gun2_Parallel_P = outputRelay[1].relay_event.bits.Gun2_Parallel_P;
|
|
|
+ regRelay[1].relay_event.bits.Gun2_Parallel_N = outputRelay[1].relay_event.bits.Gun2_Parallel_N;
|
|
|
+
|
|
|
+ PRINTF_FUNC("Match Relay2, AC = %x, g1_p = %x, g1_n = %x, g2_p = %x, g2_n = %x, pre = %x, bri_p = %x, bri_n = %x, bri2_p = %x, bri2_n = %x \n",
|
|
|
+ regRelay[1].relay_event.bits.AC_Contactor,
|
|
|
+ regRelay[1].relay_event.bits.Gun1_P,
|
|
|
+ regRelay[1].relay_event.bits.Gun1_N,
|
|
|
+ regRelay[1].relay_event.bits.Gun2_P,
|
|
|
+ regRelay[1].relay_event.bits.Gun2_N,
|
|
|
+ regRelay[1].relay_event.bits.CCS_Precharge,
|
|
|
+ regRelay[1].relay_event.bits.Gun1_Parallel_P,
|
|
|
+ regRelay[1].relay_event.bits.Gun1_Parallel_N,
|
|
|
+ regRelay[1].relay_event.bits.Gun2_Parallel_P,
|
|
|
+ regRelay[1].relay_event.bits.Gun2_Parallel_N);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
|
|
|
-// gettimeofday(&_led_priority_time, NULL);
|
|
|
-// }
|
|
|
-// }
|
|
|
+ if (ShmFanModuleData->SelfTest_Comp == YES ||
|
|
|
+ strlen((char *)ShmSysConfigAndInfo->SysInfo.FanModuleFwRev) != 0 ||
|
|
|
+ ShmSysConfigAndInfo->SysInfo.FanModuleFwRev[0] != '\0')
|
|
|
+ {
|
|
|
+ if (GetTimeoutValue(_priority_time) / 1000 >= 1000)
|
|
|
+ {
|
|
|
+ //GetPsuTempForFanSpeed();
|
|
|
+ GetFanSpeedByFunction();
|
|
|
+ GetFanSpeed();
|
|
|
+ ShmSysConfigAndInfo->SysInfo.SystemFanRotaSpeed = _setFanSpeed;
|
|
|
+ gettimeofday(&_priority_time, NULL);
|
|
|
+
|
|
|
+ unsigned short TargetSpeed = ShmFanModuleData->TestFanSpeed;
|
|
|
+
|
|
|
+ if(TargetSpeed != 0 && TargetSpeed < MIN_FAN_SPEED)
|
|
|
+ {
|
|
|
+ TargetSpeed = MIN_FAN_SPEED;
|
|
|
+ }
|
|
|
+ ShmFanModuleData->SetFan1Speed = TargetSpeed;
|
|
|
+ ShmFanModuleData->SetFan2Speed = TargetSpeed;
|
|
|
+ ShmFanModuleData->SetFan3Speed = TargetSpeed;
|
|
|
+ ShmFanModuleData->SetFan4Speed = TargetSpeed;
|
|
|
+
|
|
|
+ //PRINTF_FUNC("set fan = %d \n", ShmFanModuleData->SetFan1Speed);
|
|
|
+ SetFanModuleSpeed();
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
|
|
|
usleep(10000);
|
|
|
}
|