|
@@ -60,6 +60,13 @@ struct LedModuleData *ShmLedModuleData;
|
|
|
struct PsuData *ShmPsuData;
|
|
|
struct OCPP16Data *ShmOCPP16Data;
|
|
|
ChargerInfoData *ShmChargerInfo;
|
|
|
+PsuGroupingInfoData *ShmPsuGrouping;
|
|
|
+PsuGroupOutputRelay *ShmOutputRelayConfig[MAX_GROUP_QUANTITY];
|
|
|
+PsuGroupOutputRelay *ShmOutputRelayConfirmed[MAX_GROUP_QUANTITY];
|
|
|
+PsuGroupParallelRelay *ShmParallelRelayConfig;
|
|
|
+PsuGroupParallelRelay *ShmParallelRelayConfirmed;
|
|
|
+RBRelayControl *LocationRelayCtrl[MAX_GROUP_QUANTITY];
|
|
|
+RBRelayControl *LocationRelayResponse[MAX_GROUP_QUANTITY];
|
|
|
|
|
|
#define VIN_MAX_VOLTAGE_IEC 285 // 大於該值 : OVP
|
|
|
#define VIN_MAX_REV_VOLTAGE_IEC 275 // 小於賦歸 OVP
|
|
@@ -110,7 +117,7 @@ ChargerInfoData *ShmChargerInfo;
|
|
|
byte gunCount;
|
|
|
byte acgunCount;
|
|
|
// 槍資訊
|
|
|
-struct ChargingInfoData *_chargingData[CHAdeMO_QUANTITY + CCS_QUANTITY + GB_QUANTITY + GENERAL_GUN_QUANTITY];
|
|
|
+struct ChargingInfoData *_chargingData[CONNECTOR_QUANTITY];
|
|
|
struct ChargingInfoData *ac_chargingInfo[AC_QUANTITY];
|
|
|
|
|
|
bool _isOutputNoneMatch[CHAdeMO_QUANTITY + CCS_QUANTITY + GB_QUANTITY];
|
|
@@ -745,6 +752,8 @@ void GetPersentOutputVol()
|
|
|
|
|
|
_chargingData[0]->FuseChargingVoltage = ShmRelayModuleData[0]->Gun1FuseOutputVolt;
|
|
|
_chargingData[0]->FireChargingVoltage = ShmRelayModuleData[0]->Gun1RelayOutputVolt;
|
|
|
+ _chargingData[3]->FuseChargingVoltage = ShmRelayModuleData[0]->Gun2FuseOutputVolt;
|
|
|
+ _chargingData[3]->FireChargingVoltage = ShmRelayModuleData[0]->Gun2RelayOutputVolt;
|
|
|
}
|
|
|
|
|
|
// DO360 RC2
|
|
@@ -757,6 +766,8 @@ void GetPersentOutputVol()
|
|
|
|
|
|
_chargingData[1]->FuseChargingVoltage = ShmRelayModuleData[1]->Gun2FuseOutputVolt;
|
|
|
_chargingData[1]->FireChargingVoltage = ShmRelayModuleData[1]->Gun2RelayOutputVolt;
|
|
|
+ _chargingData[2]->FuseChargingVoltage = ShmRelayModuleData[1]->Gun1FuseOutputVolt;
|
|
|
+ _chargingData[2]->FireChargingVoltage = ShmRelayModuleData[1]->Gun1RelayOutputVolt;
|
|
|
}
|
|
|
}
|
|
|
else
|
|
@@ -799,15 +810,94 @@ void GetFanSpeed()
|
|
|
// 讀取 Relay 狀態
|
|
|
void GetRelayOutputStatus()
|
|
|
{
|
|
|
-// if (Query_Relay_Output(Uart5Fd, Addr.Relay, ®Relay) == PASS)
|
|
|
-// {
|
|
|
-// regRelay.relay_event.bits.AC_Contactor = ShmSysConfigAndInfo->SysInfo.AcContactorStatus;
|
|
|
-// }
|
|
|
+ unsigned char location = 0;
|
|
|
+
|
|
|
+ if(Query_Relay_Output(Uart5Fd, Addr.DO360_RC1, ®Relay[0]) == PASS)
|
|
|
+ {
|
|
|
+ regRelay[0].relay_event.bits.AC_Contactor = outputRelay[0].relay_event.bits.AC_Contactor;
|
|
|
+ }
|
|
|
+ if(ShmChargerInfo->Control.SysCtrl.bits.SecondRelayBoardEnable)
|
|
|
+ {
|
|
|
+ if(Query_Relay_Output(Uart5Fd, Addr.DO360_RC2, ®Relay[1]) == PASS)
|
|
|
+ {
|
|
|
+ regRelay[1].relay_event.bits.AC_Contactor = outputRelay[1].relay_event.bits.AC_Contactor;
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ // update output relay feedback status
|
|
|
+ for(int i = 0; i < ShmChargerInfo->Control.MaxConnector; i++)
|
|
|
+ {
|
|
|
+ location = ShmPsuGrouping->GroupCollection[i].Location;
|
|
|
+
|
|
|
+ if(ShmOutputRelayConfirmed[i]->bits.Output_N != LocationRelayResponse[location]->bits.Gun_N)
|
|
|
+ {
|
|
|
+ PRINTF_FUNC("Gun %d Get K1K2 N %s at Location %d",
|
|
|
+ i + 1, LocationRelayResponse[location]->bits.Gun_N ? "On" : "Off", location + 1);
|
|
|
+ }
|
|
|
+ ShmOutputRelayConfirmed[i]->bits.Output_N = LocationRelayResponse[location]->bits.Gun_N;
|
|
|
+
|
|
|
+ if(ShmOutputRelayConfirmed[i]->bits.Output_P != LocationRelayResponse[location]->bits.Gun_P)
|
|
|
+ {
|
|
|
+ PRINTF_FUNC("Gun %d Get K1K2 P %s at Location %d",
|
|
|
+ i + 1, LocationRelayResponse[location]->bits.Gun_P ? "On" : "Off", location + 1);
|
|
|
+ }
|
|
|
+ ShmOutputRelayConfirmed[i]->bits.Output_P = LocationRelayResponse[location]->bits.Gun_P;
|
|
|
+ }
|
|
|
+
|
|
|
+ // update parallel relay feedback status
|
|
|
+ for(int i = 0; i < ShmChargerInfo->Control.MaxConnector - 1; i++)
|
|
|
+ {
|
|
|
+ bool relayOnOff = 0;
|
|
|
+
|
|
|
+ if(ShmChargerInfo->Control.SysCtrl.bits.SecondRelayBoardEnable)
|
|
|
+ {
|
|
|
+ relayOnOff = LocationRelayResponse[i]->bits.Gun_Parallel_N_P;
|
|
|
+ }
|
|
|
+ else
|
|
|
+ {
|
|
|
+ bool original = ShmParallelRelayConfig->CtrlValue & (1 << i) ? false : true;
|
|
|
+
|
|
|
+ relayOnOff = LocationRelayResponse[i]->bits.Gun_Parallel_N_P == LocationRelayResponse[i + 1]->bits.Gun_Parallel_N_P ?
|
|
|
+ LocationRelayResponse[i]->bits.Gun_Parallel_N_P : original;
|
|
|
+#if 0
|
|
|
+ if(LocationRelayResponse[i]->bits.Gun_Parallel_N_P != LocationRelayResponse[i + 1]->bits.Gun_Parallel_N_P)
|
|
|
+ {
|
|
|
+ PRINTF_FUNC("Parallel Relay N & P at Location %d is Not Match: %d, %d",
|
|
|
+ i + 1, LocationRelayResponse[i]->bits.Gun_Parallel_N_P, LocationRelayResponse[i + 1]->bits.Gun_Parallel_N_P);
|
|
|
+ }
|
|
|
+#endif
|
|
|
+ }
|
|
|
+
|
|
|
+ if((ShmParallelRelayConfirmed->CtrlValue & (1 << i)) != (relayOnOff << i))
|
|
|
+ {
|
|
|
+ PRINTF_FUNC("Get Parallel Relay N & P %s at Location %d", relayOnOff ? "On" : "Off", i + 1);
|
|
|
+ }
|
|
|
+
|
|
|
+ if(relayOnOff)
|
|
|
+ {
|
|
|
+ ShmParallelRelayConfirmed->CtrlValue |= 1 << i;
|
|
|
+ }
|
|
|
+ else
|
|
|
+ {
|
|
|
+ ShmParallelRelayConfirmed->CtrlValue &= ~(1 << i);
|
|
|
+ }
|
|
|
+ }
|
|
|
}
|
|
|
|
|
|
// 確認 K1 K2 relay 的狀態
|
|
|
void CheckK1K2RelayOutput(byte index)
|
|
|
{
|
|
|
+ unsigned char location = 0;
|
|
|
+ if(index < MAX_GROUP_QUANTITY && index < ShmChargerInfo->Control.MaxConnector)
|
|
|
+ {
|
|
|
+ location = ShmPsuGrouping->GroupCollection[index].Location;
|
|
|
+
|
|
|
+ if(LocationRelayCtrl[location]->bits.Gun_N == LocationRelayCtrl[location]->bits.Gun_P)
|
|
|
+ {
|
|
|
+ _chargingData[index]->RelayK1K2Status = LocationRelayCtrl[location]->bits.Gun_N ? YES : NO;
|
|
|
+ }
|
|
|
+ }
|
|
|
+#if 0
|
|
|
if(ShmChargerInfo->Control.SysCtrl.bits.SecondRelayBoardEnable)
|
|
|
{
|
|
|
// two relay board
|
|
@@ -858,6 +948,7 @@ void CheckK1K2RelayOutput(byte index)
|
|
|
}
|
|
|
// PRINTF_FUNC("Check Relay Output. index = %d, RelayKPK2Status = %d, BridgeRelayStatus = %d \n",
|
|
|
// index, _chargingData[index]->RelayKPK2Status, ShmSysConfigAndInfo->SysInfo.BridgeRelayStatus);
|
|
|
+#endif
|
|
|
}
|
|
|
|
|
|
void GetGfdAdc()
|
|
@@ -1046,356 +1137,91 @@ void SetFanModuleSpeed()
|
|
|
//==========================================
|
|
|
void SetK1K2RelayStatus(byte index)
|
|
|
{
|
|
|
- if (_chargingData[index]->SystemStatus < S_PREPARING_FOR_EVSE)
|
|
|
- {
|
|
|
- if(ShmChargerInfo->Control.SysCtrl.bits.SecondRelayBoardEnable)
|
|
|
+ unsigned char location = 0;
|
|
|
+
|
|
|
+ if(index < MAX_GROUP_QUANTITY && index < ShmChargerInfo->Control.MaxConnector)
|
|
|
+ {
|
|
|
+ if ((_chargingData[index]->SystemStatus >= S_PREPARING_FOR_EVSE &&
|
|
|
+ _chargingData[index]->SystemStatus <= S_CHARGING))
|
|
|
{
|
|
|
- // two relay board
|
|
|
- if(index == 0)
|
|
|
- {
|
|
|
- if(regRelay[0].relay_event.bits.Gun1_P == YES)
|
|
|
- outputRelay[0].relay_event.bits.Gun1_P = NO;
|
|
|
- if (regRelay[0].relay_event.bits.Gun1_N == YES)
|
|
|
- outputRelay[0].relay_event.bits.Gun1_N = NO;
|
|
|
- }
|
|
|
- if(index == 1)
|
|
|
+ if(!ShmOutputRelayConfig[index]->bits.Output_N || !ShmOutputRelayConfig[index]->bits.Output_P)
|
|
|
{
|
|
|
- if(regRelay[1].relay_event.bits.Gun2_P == YES)
|
|
|
- outputRelay[1].relay_event.bits.Gun2_P = NO;
|
|
|
- if (regRelay[1].relay_event.bits.Gun2_N == YES)
|
|
|
- outputRelay[1].relay_event.bits.Gun2_N = NO;
|
|
|
+ PRINTF_FUNC("Gun %d Set K1K2 Close And Prepare To Charging", index + 1);
|
|
|
}
|
|
|
+ ShmOutputRelayConfig[index]->bits.Output_N = true;
|
|
|
+ ShmOutputRelayConfig[index]->bits.Output_P = true;
|
|
|
}
|
|
|
- else
|
|
|
+ else if ((_chargingData[index]->SystemStatus >= S_TERMINATING &&
|
|
|
+ _chargingData[index]->SystemStatus <= S_COMPLETE) ||
|
|
|
+ _chargingData[index]->SystemStatus == S_ALARM)
|
|
|
{
|
|
|
- // only one relay board
|
|
|
- if(index == 0)
|
|
|
- {
|
|
|
- if(regRelay[0].relay_event.bits.Gun1_P == YES)
|
|
|
- outputRelay[0].relay_event.bits.Gun1_P = NO;
|
|
|
- if (regRelay[0].relay_event.bits.Gun1_N == YES)
|
|
|
- outputRelay[0].relay_event.bits.Gun1_N = NO;
|
|
|
- }
|
|
|
- if(index == 1)
|
|
|
- {
|
|
|
- if(regRelay[0].relay_event.bits.Gun2_P == YES)
|
|
|
- outputRelay[0].relay_event.bits.Gun2_P = NO;
|
|
|
- if (regRelay[0].relay_event.bits.Gun2_N == YES)
|
|
|
- outputRelay[0].relay_event.bits.Gun2_N = NO;
|
|
|
- }
|
|
|
- }
|
|
|
- }
|
|
|
- else if ((_chargingData[index]->SystemStatus >= S_PREPARING_FOR_EVSE &&
|
|
|
- _chargingData[index]->SystemStatus <= S_CHARGING))
|
|
|
- {
|
|
|
- if (_chargingData[index]->RelayWeldingCheck == YES)
|
|
|
- {
|
|
|
- if(ShmChargerInfo->Control.SysCtrl.bits.SecondRelayBoardEnable)
|
|
|
- {
|
|
|
- // two relay board
|
|
|
- if(index == 0)
|
|
|
- {
|
|
|
- if(regRelay[0].relay_event.bits.Gun1_N == NO)
|
|
|
- outputRelay[0].relay_event.bits.Gun1_N = YES;
|
|
|
- if (regRelay[0].relay_event.bits.Gun1_P == NO)
|
|
|
- outputRelay[0].relay_event.bits.Gun1_P = YES;
|
|
|
- }
|
|
|
- if(index == 1)
|
|
|
- {
|
|
|
- if(regRelay[1].relay_event.bits.Gun2_N == NO)
|
|
|
- outputRelay[1].relay_event.bits.Gun2_N = YES;
|
|
|
- if (regRelay[1].relay_event.bits.Gun2_P == NO)
|
|
|
- outputRelay[1].relay_event.bits.Gun2_P = YES;
|
|
|
- }
|
|
|
- }
|
|
|
- else
|
|
|
+ if ((_chargingData[index]->PresentChargingCurrent * 10) <= SEFETY_SWITCH_RELAY_CUR)
|
|
|
{
|
|
|
- // only one relay board
|
|
|
- if(index == 0)
|
|
|
- {
|
|
|
- if(regRelay[0].relay_event.bits.Gun1_N == NO)
|
|
|
- outputRelay[0].relay_event.bits.Gun1_N = YES;
|
|
|
- if (regRelay[0].relay_event.bits.Gun1_P == NO)
|
|
|
- outputRelay[0].relay_event.bits.Gun1_P = YES;
|
|
|
- }
|
|
|
- if(index == 1)
|
|
|
- {
|
|
|
- if(regRelay[0].relay_event.bits.Gun2_N == NO)
|
|
|
- outputRelay[0].relay_event.bits.Gun2_N = YES;
|
|
|
- if (regRelay[0].relay_event.bits.Gun2_P == NO)
|
|
|
- outputRelay[0].relay_event.bits.Gun2_P = YES;
|
|
|
- }
|
|
|
- }
|
|
|
- }
|
|
|
- }
|
|
|
- else if ((_chargingData[index]->SystemStatus >= S_TERMINATING &&
|
|
|
- _chargingData[index]->SystemStatus <= S_COMPLETE) ||
|
|
|
- _chargingData[index]->SystemStatus == S_ALARM)
|
|
|
- {
|
|
|
- if ((_chargingData[index]->PresentChargingCurrent * 10) <= SEFETY_SWITCH_RELAY_CUR)
|
|
|
- {
|
|
|
- if(ShmChargerInfo->Control.SysCtrl.bits.SecondRelayBoardEnable)
|
|
|
- {
|
|
|
- // two relay board
|
|
|
- if(index == 0)
|
|
|
- {
|
|
|
- if(regRelay[0].relay_event.bits.Gun1_P == YES)
|
|
|
- outputRelay[0].relay_event.bits.Gun1_P = NO;
|
|
|
- if (regRelay[0].relay_event.bits.Gun1_N == YES)
|
|
|
- outputRelay[0].relay_event.bits.Gun1_N = NO;
|
|
|
- }
|
|
|
- if(index == 1)
|
|
|
+ if(ShmOutputRelayConfig[index]->bits.Output_N || ShmOutputRelayConfig[index]->bits.Output_P)
|
|
|
{
|
|
|
- if(regRelay[1].relay_event.bits.Gun2_P == YES)
|
|
|
- outputRelay[1].relay_event.bits.Gun2_P = NO;
|
|
|
- if (regRelay[1].relay_event.bits.Gun2_N == YES)
|
|
|
- outputRelay[1].relay_event.bits.Gun2_N = NO;
|
|
|
+ PRINTF_FUNC("Gun %d Set K1K2 Open And Charging Stop", index + 1);
|
|
|
}
|
|
|
+ ShmOutputRelayConfig[index]->bits.Output_N = false;
|
|
|
+ ShmOutputRelayConfig[index]->bits.Output_P = false;
|
|
|
}
|
|
|
- else
|
|
|
+ }
|
|
|
+ else
|
|
|
+ {
|
|
|
+ if(ShmOutputRelayConfig[index]->bits.Output_N || ShmOutputRelayConfig[index]->bits.Output_P)
|
|
|
{
|
|
|
- // only one relay board
|
|
|
- if(index == 0)
|
|
|
- {
|
|
|
- if(regRelay[0].relay_event.bits.Gun1_P == YES)
|
|
|
- outputRelay[0].relay_event.bits.Gun1_P = NO;
|
|
|
- if (regRelay[0].relay_event.bits.Gun1_N == YES)
|
|
|
- outputRelay[0].relay_event.bits.Gun1_N = NO;
|
|
|
- }
|
|
|
- if(index == 1)
|
|
|
- {
|
|
|
- if(regRelay[0].relay_event.bits.Gun2_P == YES)
|
|
|
- outputRelay[0].relay_event.bits.Gun2_P = NO;
|
|
|
- if (regRelay[0].relay_event.bits.Gun2_N == YES)
|
|
|
- outputRelay[0].relay_event.bits.Gun2_N = NO;
|
|
|
- }
|
|
|
+ PRINTF_FUNC("Gun %d Set K1K2 Open At Idle Mode", index + 1);
|
|
|
}
|
|
|
- }
|
|
|
- }
|
|
|
- else if (_chargingData[index]->SystemStatus == S_CCS_PRECHARGE_ST0)
|
|
|
- {
|
|
|
+ ShmOutputRelayConfig[index]->bits.Output_N = false;
|
|
|
+ ShmOutputRelayConfig[index]->bits.Output_P = false;
|
|
|
+ }
|
|
|
|
|
|
- }
|
|
|
- else if (_chargingData[index]->SystemStatus == S_CCS_PRECHARGE_ST1)
|
|
|
- {
|
|
|
+ location = ShmPsuGrouping->GroupCollection[index].Location;
|
|
|
|
|
|
- }
|
|
|
+ if(ShmOutputRelayConfig[index]->bits.Output_N != LocationRelayCtrl[location]->bits.Gun_N)
|
|
|
+ {
|
|
|
+#if 0
|
|
|
+ PRINTF_FUNC("Connector %d Set K1K2 N %s at Location %d",
|
|
|
+ index + 1, ShmOutputRelayConfig[index]->bits.Output_N ? "On" : "Off", location + 1);
|
|
|
+#endif
|
|
|
+ }
|
|
|
+ LocationRelayCtrl[location]->bits.Gun_N = ShmOutputRelayConfig[index]->bits.Output_N;
|
|
|
+
|
|
|
+ if(ShmOutputRelayConfig[index]->bits.Output_P != LocationRelayCtrl[location]->bits.Gun_P)
|
|
|
+ {
|
|
|
+#if 0
|
|
|
+ PRINTF_FUNC("Connector %d Set K1K2 P %s at Location %d",
|
|
|
+ index + 1, ShmOutputRelayConfig[index]->bits.Output_P ? "On" : "Off", location + 1);
|
|
|
+#endif
|
|
|
+ }
|
|
|
+ LocationRelayCtrl[location]->bits.Gun_P = ShmOutputRelayConfig[index]->bits.Output_P;
|
|
|
+ }
|
|
|
}
|
|
|
|
|
|
void SetParalleRelayStatus()
|
|
|
{
|
|
|
- // 之後雙槍單模機種,橋接都會上
|
|
|
- if (gunCount >= 2)
|
|
|
- {
|
|
|
- if (_chargingData[0]->SystemStatus == S_BOOTING || _chargingData[1]->SystemStatus == S_BOOTING ||
|
|
|
- ((_chargingData[0]->SystemStatus == S_IDLE || _chargingData[0]->SystemStatus == S_MAINTAIN || _chargingData[0]->SystemStatus == S_FAULT) &&
|
|
|
- (_chargingData[1]->SystemStatus == S_IDLE || _chargingData[1]->SystemStatus == S_MAINTAIN || _chargingData[1]->SystemStatus == S_FAULT)))
|
|
|
- {
|
|
|
- if(ShmChargerInfo->Control.SysCtrl.bits.SecondRelayBoardEnable)
|
|
|
- {
|
|
|
- // two relay board
|
|
|
- // 初始化~ 不搭橋接
|
|
|
+ for(int i = 0; i < ShmChargerInfo->Control.MaxConnector - 1; i++)
|
|
|
+ {
|
|
|
+ if((ShmParallelRelayConfig->CtrlValue & (1 << i)) != (LocationRelayCtrl[i]->bits.Gun_Parallel_N_P << i))
|
|
|
+ {
|
|
|
#if 0
|
|
|
- if (regRelay[0].relay_event.bits.Gun1_Parallel_P == YES)
|
|
|
- outputRelay[0].relay_event.bits.Gun1_Parallel_P = NO;
|
|
|
- if (regRelay[0].relay_event.bits.Gun1_Parallel_N == YES)
|
|
|
- outputRelay[0].relay_event.bits.Gun1_Parallel_N = NO;
|
|
|
- if (regRelay[0].relay_event.bits.Gun2_Parallel_P == YES)
|
|
|
- outputRelay[0].relay_event.bits.Gun2_Parallel_P = NO;
|
|
|
- if (regRelay[0].relay_event.bits.Gun2_Parallel_N == YES)
|
|
|
- outputRelay[0].relay_event.bits.Gun2_Parallel_N = NO;
|
|
|
- if (regRelay[1].relay_event.bits.Gun1_Parallel_P == YES)
|
|
|
- outputRelay[1].relay_event.bits.Gun1_Parallel_P = NO;
|
|
|
- if (regRelay[1].relay_event.bits.Gun1_Parallel_N == YES)
|
|
|
- outputRelay[1].relay_event.bits.Gun1_Parallel_N = NO;
|
|
|
+ PRINTF_FUNC("Set Parallel Relay N & P %s at Location %d",
|
|
|
+ (ShmParallelRelayConfig->CtrlValue & (1 << i)) ? "On" : "Off", i + 1);
|
|
|
#endif
|
|
|
- // gun 1 & gun 3 parallel relay enable
|
|
|
- if (regRelay[0].relay_event.bits.Gun1_Parallel_P == NO)
|
|
|
- outputRelay[0].relay_event.bits.Gun1_Parallel_P = YES;
|
|
|
- if (regRelay[0].relay_event.bits.Gun1_Parallel_N == NO)
|
|
|
- outputRelay[0].relay_event.bits.Gun1_Parallel_N = YES;
|
|
|
-
|
|
|
- // gun 3 & gun 4 parallel relay disable
|
|
|
- if (regRelay[0].relay_event.bits.Gun2_Parallel_P == YES)
|
|
|
- outputRelay[0].relay_event.bits.Gun2_Parallel_P = NO;
|
|
|
- if (regRelay[0].relay_event.bits.Gun2_Parallel_N == YES)
|
|
|
- outputRelay[0].relay_event.bits.Gun2_Parallel_N = NO;
|
|
|
-
|
|
|
- // gun 4 & gun 2 parallel relay enable
|
|
|
- if (regRelay[1].relay_event.bits.Gun1_Parallel_P == NO)
|
|
|
- outputRelay[1].relay_event.bits.Gun1_Parallel_P = YES;
|
|
|
- if (regRelay[1].relay_event.bits.Gun1_Parallel_N == NO)
|
|
|
- outputRelay[1].relay_event.bits.Gun1_Parallel_N = YES;
|
|
|
- }
|
|
|
- else
|
|
|
+ }
|
|
|
+ LocationRelayCtrl[i]->bits.Gun_Parallel_N_P = (ShmParallelRelayConfig->CtrlValue & (1 << i)) ? YES : NO;
|
|
|
+
|
|
|
+ if(!ShmChargerInfo->Control.SysCtrl.bits.SecondRelayBoardEnable)
|
|
|
+ {
|
|
|
+ if((ShmParallelRelayConfig->CtrlValue & (1 << i)) != (LocationRelayCtrl[i]->bits.Gun_Parallel_P << i))
|
|
|
{
|
|
|
- // only one relay board
|
|
|
- // 初始化~ 不搭橋接
|
|
|
- if (regRelay[0].relay_event.bits.Gun1_Parallel_N == YES)
|
|
|
- outputRelay[0].relay_event.bits.Gun1_Parallel_N = NO;
|
|
|
- if (regRelay[0].relay_event.bits.Gun2_Parallel_N == YES)
|
|
|
- outputRelay[0].relay_event.bits.Gun2_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(ShmChargerInfo->Control.SysCtrl.bits.SecondRelayBoardEnable)
|
|
|
- {
|
|
|
- // two relay board
|
|
|
- // 最大充 - 搭上橋接
|
|
|
-#if 0
|
|
|
- if (regRelay[0].relay_event.bits.Gun1_Parallel_N == NO)
|
|
|
- outputRelay[0].relay_event.bits.Gun1_Parallel_N = YES;
|
|
|
- if (regRelay[0].relay_event.bits.Gun1_Parallel_P == NO)
|
|
|
- outputRelay[0].relay_event.bits.Gun1_Parallel_P = YES;
|
|
|
- if (regRelay[0].relay_event.bits.Gun2_Parallel_N == NO)
|
|
|
- outputRelay[0].relay_event.bits.Gun2_Parallel_N = YES;
|
|
|
- if (regRelay[0].relay_event.bits.Gun2_Parallel_P == NO)
|
|
|
- outputRelay[0].relay_event.bits.Gun2_Parallel_P = YES;
|
|
|
- if (regRelay[1].relay_event.bits.Gun1_Parallel_N == NO)
|
|
|
- outputRelay[1].relay_event.bits.Gun1_Parallel_N = YES;
|
|
|
- if (regRelay[1].relay_event.bits.Gun1_Parallel_P == NO)
|
|
|
- outputRelay[1].relay_event.bits.Gun1_Parallel_P = YES;
|
|
|
-#endif
|
|
|
- // gun 3 & gun 4 parallel relay enable
|
|
|
- if (regRelay[0].relay_event.bits.Gun2_Parallel_N == NO)
|
|
|
- outputRelay[0].relay_event.bits.Gun2_Parallel_N = YES;
|
|
|
- if (regRelay[0].relay_event.bits.Gun2_Parallel_P == NO)
|
|
|
- outputRelay[0].relay_event.bits.Gun2_Parallel_P = YES;
|
|
|
- }
|
|
|
- else
|
|
|
- {
|
|
|
- // only one relay board
|
|
|
- // 最大充 - 搭上橋接
|
|
|
- if (regRelay[0].relay_event.bits.Gun1_Parallel_N == NO)
|
|
|
- outputRelay[0].relay_event.bits.Gun1_Parallel_N = YES;
|
|
|
- if (regRelay[0].relay_event.bits.Gun2_Parallel_N == NO)
|
|
|
- outputRelay[0].relay_event.bits.Gun2_Parallel_N = YES;
|
|
|
- }
|
|
|
- }
|
|
|
- else
|
|
|
- {
|
|
|
- if(ShmChargerInfo->Control.SysCtrl.bits.SecondRelayBoardEnable)
|
|
|
- {
|
|
|
- // two relay board
|
|
|
- // 平均充 - 不搭
|
|
|
-#if 0
|
|
|
- if (regRelay[0].relay_event.bits.Gun1_Parallel_P == YES)
|
|
|
- outputRelay[0].relay_event.bits.Gun1_Parallel_P = NO;
|
|
|
- if (regRelay[0].relay_event.bits.Gun1_Parallel_N == YES)
|
|
|
- outputRelay[0].relay_event.bits.Gun1_Parallel_N = NO;
|
|
|
- if (regRelay[0].relay_event.bits.Gun2_Parallel_P == YES)
|
|
|
- outputRelay[0].relay_event.bits.Gun2_Parallel_P = NO;
|
|
|
- if (regRelay[0].relay_event.bits.Gun2_Parallel_N == YES)
|
|
|
- outputRelay[0].relay_event.bits.Gun2_Parallel_N = NO;
|
|
|
- if (regRelay[1].relay_event.bits.Gun1_Parallel_P == YES)
|
|
|
- outputRelay[1].relay_event.bits.Gun1_Parallel_P = NO;
|
|
|
- if (regRelay[1].relay_event.bits.Gun1_Parallel_N == YES)
|
|
|
- outputRelay[1].relay_event.bits.Gun1_Parallel_N = NO;
|
|
|
-#endif
|
|
|
- // gun 3 & gun 4 parallel relay disable
|
|
|
- if (regRelay[0].relay_event.bits.Gun2_Parallel_P == YES)
|
|
|
- outputRelay[0].relay_event.bits.Gun2_Parallel_P = NO;
|
|
|
- if (regRelay[0].relay_event.bits.Gun2_Parallel_N == YES)
|
|
|
- outputRelay[0].relay_event.bits.Gun2_Parallel_N = NO;
|
|
|
- }
|
|
|
- else
|
|
|
- {
|
|
|
- // only one relay board
|
|
|
- // 平均充 - 不搭
|
|
|
- if (regRelay[0].relay_event.bits.Gun1_Parallel_N == YES)
|
|
|
- outputRelay[0].relay_event.bits.Gun1_Parallel_N = NO;
|
|
|
- if (regRelay[0].relay_event.bits.Gun2_Parallel_N == YES)
|
|
|
- outputRelay[0].relay_event.bits.Gun2_Parallel_N = NO;
|
|
|
- }
|
|
|
- }
|
|
|
- }
|
|
|
- else if (ShmSysConfigAndInfo->SysInfo.MainChargingMode == _MAIN_CHARGING_MODE_AVER)
|
|
|
- {
|
|
|
- if (ShmSysConfigAndInfo->SysInfo.ReAssignedFlag < _REASSIGNED_RELAY_A_TO_M)
|
|
|
- {
|
|
|
- if(ShmChargerInfo->Control.SysCtrl.bits.SecondRelayBoardEnable)
|
|
|
- {
|
|
|
- // two relay board
|
|
|
- // 平均充 - 不搭
|
|
|
-#if 0
|
|
|
- if (regRelay[0].relay_event.bits.Gun1_Parallel_P == YES)
|
|
|
- outputRelay[0].relay_event.bits.Gun1_Parallel_P = NO;
|
|
|
- if (regRelay[0].relay_event.bits.Gun1_Parallel_N == YES)
|
|
|
- outputRelay[0].relay_event.bits.Gun1_Parallel_N = NO;
|
|
|
- if (regRelay[0].relay_event.bits.Gun2_Parallel_P == YES)
|
|
|
- outputRelay[0].relay_event.bits.Gun2_Parallel_P = NO;
|
|
|
- if (regRelay[0].relay_event.bits.Gun2_Parallel_N == YES)
|
|
|
- outputRelay[0].relay_event.bits.Gun2_Parallel_N = NO;
|
|
|
- if (regRelay[1].relay_event.bits.Gun1_Parallel_P == YES)
|
|
|
- outputRelay[1].relay_event.bits.Gun1_Parallel_P = NO;
|
|
|
- if (regRelay[1].relay_event.bits.Gun1_Parallel_N == YES)
|
|
|
- outputRelay[1].relay_event.bits.Gun1_Parallel_N = NO;
|
|
|
-#endif
|
|
|
- // gun 3 & gun 4 parallel relay disable
|
|
|
- if (regRelay[0].relay_event.bits.Gun2_Parallel_P == YES)
|
|
|
- outputRelay[0].relay_event.bits.Gun2_Parallel_P = NO;
|
|
|
- if (regRelay[0].relay_event.bits.Gun2_Parallel_N == YES)
|
|
|
- outputRelay[0].relay_event.bits.Gun2_Parallel_N = NO;
|
|
|
- }
|
|
|
- else
|
|
|
- {
|
|
|
- // only one relay board
|
|
|
- // 平均充 - 不搭
|
|
|
- if (regRelay[0].relay_event.bits.Gun1_Parallel_N == YES)
|
|
|
- outputRelay[0].relay_event.bits.Gun1_Parallel_N = NO;
|
|
|
- if (regRelay[0].relay_event.bits.Gun2_Parallel_N == YES)
|
|
|
- outputRelay[0].relay_event.bits.Gun2_Parallel_N = NO;
|
|
|
- }
|
|
|
- }
|
|
|
- else
|
|
|
- {
|
|
|
- if(ShmChargerInfo->Control.SysCtrl.bits.SecondRelayBoardEnable)
|
|
|
- {
|
|
|
- // two relay board
|
|
|
- // 最大充 - 搭上橋接
|
|
|
#if 0
|
|
|
- if (regRelay[0].relay_event.bits.Gun1_Parallel_N == NO)
|
|
|
- outputRelay[0].relay_event.bits.Gun1_Parallel_N = YES;
|
|
|
- if (regRelay[0].relay_event.bits.Gun1_Parallel_P == NO)
|
|
|
- outputRelay[0].relay_event.bits.Gun1_Parallel_P = YES;
|
|
|
- if (regRelay[0].relay_event.bits.Gun2_Parallel_N == NO)
|
|
|
- outputRelay[0].relay_event.bits.Gun2_Parallel_N = YES;
|
|
|
- if (regRelay[0].relay_event.bits.Gun2_Parallel_P == NO)
|
|
|
- outputRelay[0].relay_event.bits.Gun2_Parallel_P = YES;
|
|
|
- if (regRelay[1].relay_event.bits.Gun1_Parallel_N == NO)
|
|
|
- outputRelay[1].relay_event.bits.Gun1_Parallel_N = YES;
|
|
|
- if (regRelay[1].relay_event.bits.Gun1_Parallel_P == NO)
|
|
|
- outputRelay[1].relay_event.bits.Gun1_Parallel_P = YES;
|
|
|
+ PRINTF_FUNC("Set Parallel Relay P %s at Location %d",
|
|
|
+ (ShmParallelRelayConfig->CtrlValue & (1 << i)) ? "On" : "Off", i + 1);
|
|
|
#endif
|
|
|
- // gun 3 & gun 4 parallel relay enable
|
|
|
- if (regRelay[0].relay_event.bits.Gun2_Parallel_N == NO)
|
|
|
- outputRelay[0].relay_event.bits.Gun2_Parallel_N = YES;
|
|
|
- if (regRelay[0].relay_event.bits.Gun2_Parallel_P == NO)
|
|
|
- outputRelay[0].relay_event.bits.Gun2_Parallel_P = YES;
|
|
|
- }
|
|
|
- else
|
|
|
- {
|
|
|
- // only one relay board
|
|
|
- // 最大充 - 搭上橋接
|
|
|
- if (regRelay[0].relay_event.bits.Gun1_Parallel_N == NO)
|
|
|
- outputRelay[0].relay_event.bits.Gun1_Parallel_N = YES;
|
|
|
- if (regRelay[0].relay_event.bits.Gun2_Parallel_N == NO)
|
|
|
- outputRelay[0].relay_event.bits.Gun2_Parallel_N = YES;
|
|
|
- }
|
|
|
- }
|
|
|
- }
|
|
|
- }
|
|
|
- }
|
|
|
- }
|
|
|
+ }
|
|
|
+ LocationRelayCtrl[i + 1]->bits.Gun_Parallel_N_P = (ShmParallelRelayConfig->CtrlValue & (1 << i)) ? YES : NO;
|
|
|
+ }
|
|
|
+ }
|
|
|
}
|
|
|
|
|
|
void SetAcContactorStatus(void)
|
|
@@ -1745,6 +1571,33 @@ int InitShareMemory()
|
|
|
#endif
|
|
|
result = FAIL;
|
|
|
}
|
|
|
+ if(result == PASS)
|
|
|
+ {
|
|
|
+ ShmPsuGrouping = &ShmChargerInfo->PsuGrouping;
|
|
|
+ for(int i = 0; i < MAX_GROUP_QUANTITY; i++)
|
|
|
+ {
|
|
|
+ ShmOutputRelayConfig[i] = &ShmChargerInfo->PsuGrouping.OutputRelayConfig[i];
|
|
|
+ ShmOutputRelayConfirmed[i] = &ShmChargerInfo->PsuGrouping.OutputRelayConfirmed[i];
|
|
|
+ }
|
|
|
+ ShmParallelRelayConfig = &ShmChargerInfo->PsuGrouping.ParallelRelayConfig;
|
|
|
+ ShmParallelRelayConfirmed = &ShmChargerInfo->PsuGrouping.ParallelRelayConfirmed;
|
|
|
+
|
|
|
+ if(ShmChargerInfo->Control.SysCtrl.bits.RelayBoardDisable == false)
|
|
|
+ {
|
|
|
+ LocationRelayCtrl[0] = (RBRelayControl *)&outputRelay[0].relay_event.relay_status[1];
|
|
|
+ LocationRelayCtrl[1] = (RBRelayControl *)&outputRelay[0].relay_event.relay_status[2];
|
|
|
+ LocationRelayResponse[0] = (RBRelayControl *)®Relay[0].relay_event.relay_status[1];
|
|
|
+ LocationRelayResponse[1] = (RBRelayControl *)®Relay[0].relay_event.relay_status[2];
|
|
|
+
|
|
|
+ if(ShmChargerInfo->Control.SysCtrl.bits.SecondRelayBoardEnable)
|
|
|
+ {
|
|
|
+ LocationRelayCtrl[2] = (RBRelayControl *)&outputRelay[1].relay_event.relay_status[1];
|
|
|
+ LocationRelayCtrl[3] = (RBRelayControl *)&outputRelay[1].relay_event.relay_status[2];
|
|
|
+ LocationRelayResponse[2] = (RBRelayControl *)®Relay[1].relay_event.relay_status[1];
|
|
|
+ LocationRelayResponse[3] = (RBRelayControl *)®Relay[1].relay_event.relay_status[2];
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
|
|
|
return result;
|
|
|
}
|
|
@@ -1885,109 +1738,84 @@ void Initialization()
|
|
|
|
|
|
bool IsNoneMatchRelayStatus(byte index)
|
|
|
{
|
|
|
- bool result = false;
|
|
|
+ bool result = false;
|
|
|
|
|
|
- if ((regRelay[index].relay_event.bits.AC_Contactor != outputRelay[index].relay_event.bits.AC_Contactor) ||
|
|
|
- (regRelay[index].relay_event.bits.CCS_Precharge != outputRelay[index].relay_event.bits.CCS_Precharge) ||
|
|
|
- (regRelay[index].relay_event.bits.Gun1_P != outputRelay[index].relay_event.bits.Gun1_P) ||
|
|
|
- (regRelay[index].relay_event.bits.Gun1_N != outputRelay[index].relay_event.bits.Gun1_N) ||
|
|
|
- (regRelay[index].relay_event.bits.Gun2_P != outputRelay[index].relay_event.bits.Gun2_P) ||
|
|
|
- (regRelay[index].relay_event.bits.Gun2_N != outputRelay[index].relay_event.bits.Gun2_N) ||
|
|
|
- (regRelay[index].relay_event.bits.Gun1_Parallel_P != outputRelay[index].relay_event.bits.Gun1_Parallel_P) ||
|
|
|
- (regRelay[index].relay_event.bits.Gun1_Parallel_N != outputRelay[index].relay_event.bits.Gun1_Parallel_N) ||
|
|
|
- (regRelay[index].relay_event.bits.Gun2_Parallel_P != outputRelay[index].relay_event.bits.Gun2_Parallel_P) ||
|
|
|
- (regRelay[index].relay_event.bits.Gun2_Parallel_N != outputRelay[index].relay_event.bits.Gun2_Parallel_N))
|
|
|
- {
|
|
|
- if (regRelay[index].relay_event.bits.AC_Contactor != outputRelay[index].relay_event.bits.AC_Contactor)
|
|
|
- {
|
|
|
- if(TempRegRelay[index].relay_event.bits.AC_Contactor != outputRelay[index].relay_event.bits.AC_Contactor)
|
|
|
- {
|
|
|
- PRINTF_FUNC("[%d]AC Contact Relay none match, need to %s", index,
|
|
|
- outputRelay[index].relay_event.bits.AC_Contactor == YES ? "On" : "Off");
|
|
|
- TempRegRelay[index].relay_event.bits.AC_Contactor = outputRelay[index].relay_event.bits.AC_Contactor;
|
|
|
- }
|
|
|
- }
|
|
|
- if (regRelay[index].relay_event.bits.CCS_Precharge != outputRelay[index].relay_event.bits.CCS_Precharge)
|
|
|
- {
|
|
|
- if(TempRegRelay[index].relay_event.bits.CCS_Precharge != outputRelay[index].relay_event.bits.CCS_Precharge)
|
|
|
- {
|
|
|
- PRINTF_FUNC("[%d]CCS Precharge Relay none match, need to %s", index,
|
|
|
- outputRelay[index].relay_event.bits.CCS_Precharge == YES ? "On" : "Off");
|
|
|
- TempRegRelay[index].relay_event.bits.CCS_Precharge = outputRelay[index].relay_event.bits.CCS_Precharge;
|
|
|
- }
|
|
|
- }
|
|
|
- if (regRelay[index].relay_event.bits.Gun1_P != outputRelay[index].relay_event.bits.Gun1_P)
|
|
|
- {
|
|
|
- if(TempRegRelay[index].relay_event.bits.Gun1_P != outputRelay[index].relay_event.bits.Gun1_P)
|
|
|
- {
|
|
|
- PRINTF_FUNC("[%d]SMR1:D+ Relay none match, need to %s", index,
|
|
|
- outputRelay[index].relay_event.bits.Gun1_P == YES ? "On" : "Off");
|
|
|
- TempRegRelay[index].relay_event.bits.Gun1_P = outputRelay[index].relay_event.bits.Gun1_P;
|
|
|
- }
|
|
|
- }
|
|
|
- if (regRelay[index].relay_event.bits.Gun1_N != outputRelay[index].relay_event.bits.Gun1_N)
|
|
|
- {
|
|
|
- if(TempRegRelay[index].relay_event.bits.Gun1_N != outputRelay[index].relay_event.bits.Gun1_N)
|
|
|
- {
|
|
|
- PRINTF_FUNC("[%d]SMR1:D- Relay none match, need to %s", index,
|
|
|
- outputRelay[index].relay_event.bits.Gun1_N == YES ? "On" : "Off");
|
|
|
- TempRegRelay[index].relay_event.bits.Gun1_N = outputRelay[index].relay_event.bits.Gun1_N;
|
|
|
- }
|
|
|
- }
|
|
|
- if (regRelay[index].relay_event.bits.Gun2_P != outputRelay[index].relay_event.bits.Gun2_P)
|
|
|
- {
|
|
|
- if(TempRegRelay[index].relay_event.bits.Gun2_P != outputRelay[index].relay_event.bits.Gun2_P)
|
|
|
- {
|
|
|
- PRINTF_FUNC("[%d]SMR2:D+ Relay none match, need to %s", index,
|
|
|
- outputRelay[index].relay_event.bits.Gun2_P == YES ? "On" : "Off");
|
|
|
- TempRegRelay[index].relay_event.bits.Gun2_P = outputRelay[index].relay_event.bits.Gun2_P;
|
|
|
- }
|
|
|
- }
|
|
|
- if (regRelay[index].relay_event.bits.Gun2_N != outputRelay[index].relay_event.bits.Gun2_N)
|
|
|
- {
|
|
|
- if(TempRegRelay[index].relay_event.bits.Gun2_N != outputRelay[index].relay_event.bits.Gun2_N)
|
|
|
- {
|
|
|
- PRINTF_FUNC("[%d]SMR2:D- Relay none match, need to %s", index,
|
|
|
- outputRelay[index].relay_event.bits.Gun2_N == YES ? "On" : "Off");
|
|
|
- TempRegRelay[index].relay_event.bits.Gun2_N = outputRelay[index].relay_event.bits.Gun2_N;
|
|
|
- }
|
|
|
- }
|
|
|
- if (regRelay[index].relay_event.bits.Gun1_Parallel_P != outputRelay[index].relay_event.bits.Gun1_Parallel_P)
|
|
|
- {
|
|
|
- if(TempRegRelay[index].relay_event.bits.Gun1_Parallel_P != outputRelay[index].relay_event.bits.Gun1_Parallel_P)
|
|
|
- {
|
|
|
- PRINTF_FUNC("[%d]Parallel:D+ Relay none match, need to %s", index,
|
|
|
- outputRelay[index].relay_event.bits.Gun1_Parallel_P == YES ? "On" : "Off");
|
|
|
- TempRegRelay[index].relay_event.bits.Gun1_Parallel_P = outputRelay[index].relay_event.bits.Gun1_Parallel_P;
|
|
|
- }
|
|
|
- }
|
|
|
- if (regRelay[index].relay_event.bits.Gun1_Parallel_N != outputRelay[index].relay_event.bits.Gun1_Parallel_N)
|
|
|
- {
|
|
|
- if(TempRegRelay[index].relay_event.bits.Gun1_Parallel_N != outputRelay[index].relay_event.bits.Gun1_Parallel_N)
|
|
|
- {
|
|
|
- PRINTF_FUNC("[%d]Parallel:D- Relay none match, need to %s", index,
|
|
|
- outputRelay[index].relay_event.bits.Gun1_Parallel_N == YES ? "On" : "Off");
|
|
|
- TempRegRelay[index].relay_event.bits.Gun1_Parallel_N = outputRelay[index].relay_event.bits.Gun1_Parallel_N;
|
|
|
- }
|
|
|
- }
|
|
|
- if (regRelay[index].relay_event.bits.Gun2_Parallel_P != outputRelay[index].relay_event.bits.Gun2_Parallel_P)
|
|
|
- {
|
|
|
- if(TempRegRelay[index].relay_event.bits.Gun2_Parallel_P != outputRelay[index].relay_event.bits.Gun2_Parallel_P)
|
|
|
- {
|
|
|
- PRINTF_FUNC("[%d]Parallel2:D+ Relay none match, need to %s", index,
|
|
|
- outputRelay[index].relay_event.bits.Gun2_Parallel_P == YES ? "On" : "Off");
|
|
|
- TempRegRelay[index].relay_event.bits.Gun2_Parallel_P = outputRelay[index].relay_event.bits.Gun2_Parallel_P;
|
|
|
- }
|
|
|
- }
|
|
|
- if (regRelay[index].relay_event.bits.Gun2_Parallel_N != outputRelay[index].relay_event.bits.Gun2_Parallel_N)
|
|
|
- {
|
|
|
- if(TempRegRelay[index].relay_event.bits.Gun2_Parallel_N != outputRelay[index].relay_event.bits.Gun2_Parallel_N)
|
|
|
- {
|
|
|
- PRINTF_FUNC("[%d]Parallel2:D- Relay none match, need to %s", index,
|
|
|
- outputRelay[index].relay_event.bits.Gun2_Parallel_N == YES ? "On" : "Off");
|
|
|
- TempRegRelay[index].relay_event.bits.Gun2_Parallel_N = outputRelay[index].relay_event.bits.Gun2_Parallel_N;
|
|
|
- }
|
|
|
- }
|
|
|
+ if(regRelay[index].relay_event.relay_status[0] != outputRelay[index].relay_event.relay_status[0] ||
|
|
|
+ regRelay[index].relay_event.relay_status[1] != outputRelay[index].relay_event.relay_status[1] ||
|
|
|
+ regRelay[index].relay_event.relay_status[2] != outputRelay[index].relay_event.relay_status[2])
|
|
|
+ {
|
|
|
+ if(TempRegRelay[index].relay_event.bits.AC_Contactor != outputRelay[index].relay_event.bits.AC_Contactor)
|
|
|
+ {
|
|
|
+ PRINTF_FUNC("[%d]AC Contact Relay none match, need to %s", index,
|
|
|
+ outputRelay[index].relay_event.bits.AC_Contactor == YES ? "On" : "Off");
|
|
|
+ }
|
|
|
+ if(TempRegRelay[index].relay_event.bits.CCS_Precharge != outputRelay[index].relay_event.bits.CCS_Precharge)
|
|
|
+ {
|
|
|
+#if 0
|
|
|
+ PRINTF_FUNC("[%d]CCS Precharge Relay none match, need to %s", index,
|
|
|
+ outputRelay[index].relay_event.bits.CCS_Precharge == YES ? "On" : "Off");
|
|
|
+#endif
|
|
|
+ }
|
|
|
+ if(TempRegRelay[index].relay_event.bits.Gun1_P != outputRelay[index].relay_event.bits.Gun1_P)
|
|
|
+ {
|
|
|
+#if 0
|
|
|
+ PRINTF_FUNC("[%d]SMR1:D+ Relay none match, need to %s", index,
|
|
|
+ outputRelay[index].relay_event.bits.Gun1_P == YES ? "On" : "Off");
|
|
|
+#endif
|
|
|
+ }
|
|
|
+ if(TempRegRelay[index].relay_event.bits.Gun1_N != outputRelay[index].relay_event.bits.Gun1_N)
|
|
|
+ {
|
|
|
+#if 0
|
|
|
+ PRINTF_FUNC("[%d]SMR1:D- Relay none match, need to %s", index,
|
|
|
+ outputRelay[index].relay_event.bits.Gun1_N == YES ? "On" : "Off");
|
|
|
+#endif
|
|
|
+ }
|
|
|
+ if(TempRegRelay[index].relay_event.bits.Gun2_P != outputRelay[index].relay_event.bits.Gun2_P)
|
|
|
+ {
|
|
|
+#if 0
|
|
|
+ PRINTF_FUNC("[%d]SMR2:D+ Relay none match, need to %s", index,
|
|
|
+ outputRelay[index].relay_event.bits.Gun2_P == YES ? "On" : "Off");
|
|
|
+#endif
|
|
|
+ }
|
|
|
+ if(TempRegRelay[index].relay_event.bits.Gun2_N != outputRelay[index].relay_event.bits.Gun2_N)
|
|
|
+ {
|
|
|
+#if 0
|
|
|
+ PRINTF_FUNC("[%d]SMR2:D- Relay none match, need to %s", index,
|
|
|
+ outputRelay[index].relay_event.bits.Gun2_N == YES ? "On" : "Off");
|
|
|
+#endif
|
|
|
+ }
|
|
|
+ if(TempRegRelay[index].relay_event.bits.Gun1_Parallel_P != outputRelay[index].relay_event.bits.Gun1_Parallel_P)
|
|
|
+ {
|
|
|
+#if 0
|
|
|
+ PRINTF_FUNC("[%d]Parallel:D+ Relay none match, need to %s", index,
|
|
|
+ outputRelay[index].relay_event.bits.Gun1_Parallel_P == YES ? "On" : "Off");
|
|
|
+#endif
|
|
|
+ }
|
|
|
+ if(TempRegRelay[index].relay_event.bits.Gun1_Parallel_N != outputRelay[index].relay_event.bits.Gun1_Parallel_N)
|
|
|
+ {
|
|
|
+#if 0
|
|
|
+ PRINTF_FUNC("[%d]Parallel:D- Relay none match, need to %s", index,
|
|
|
+ outputRelay[index].relay_event.bits.Gun1_Parallel_N == YES ? "On" : "Off");
|
|
|
+#endif
|
|
|
+ }
|
|
|
+ if(TempRegRelay[index].relay_event.bits.Gun2_Parallel_P != outputRelay[index].relay_event.bits.Gun2_Parallel_P)
|
|
|
+ {
|
|
|
+#if 0
|
|
|
+ PRINTF_FUNC("[%d]Parallel2:D+ Relay none match, need to %s", index,
|
|
|
+ outputRelay[index].relay_event.bits.Gun2_Parallel_P == YES ? "On" : "Off");
|
|
|
+#endif
|
|
|
+ }
|
|
|
+ if(TempRegRelay[index].relay_event.bits.Gun2_Parallel_N != outputRelay[index].relay_event.bits.Gun2_Parallel_N)
|
|
|
+ {
|
|
|
+#if 0
|
|
|
+ PRINTF_FUNC("[%d]Parallel2:D- Relay none match, need to %s", index,
|
|
|
+ outputRelay[index].relay_event.bits.Gun2_Parallel_N == YES ? "On" : "Off");
|
|
|
+#endif
|
|
|
+ }
|
|
|
+
|
|
|
+ TempRegRelay[index].relay_event.relay_status[0] = outputRelay[index].relay_event.relay_status[0];
|
|
|
+ TempRegRelay[index].relay_event.relay_status[1] = outputRelay[index].relay_event.relay_status[1];
|
|
|
+ TempRegRelay[index].relay_event.relay_status[2] = outputRelay[index].relay_event.relay_status[2];
|
|
|
|
|
|
result = true;
|
|
|
}
|
|
@@ -1995,20 +1823,6 @@ bool IsNoneMatchRelayStatus(byte index)
|
|
|
return result;
|
|
|
}
|
|
|
|
|
|
-void MatchRelayStatus()
|
|
|
-{
|
|
|
- // 因為 AC Contactor 沒有 Feedback,所以暫時先這樣處理
|
|
|
- //regRelay.relay_event.bits.AC_Contactor = outputRelay.relay_event.bits.AC_Contactor;
|
|
|
-// ShmSysConfigAndInfo->SysInfo.AcContactorStatus = 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;
|
|
|
-// 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;
|
|
|
-}
|
|
|
-
|
|
|
void CheckRelayStatusByADC()
|
|
|
{
|
|
|
if (ShmRelayModuleData[0]->Gun1FuseOutputVolt > 0 && ShmRelayModuleData[0]->Gun1RelayOutputVolt > 0 &&
|
|
@@ -2624,7 +2438,7 @@ int main(void)
|
|
|
return 0;
|
|
|
}
|
|
|
|
|
|
- gunCount = ShmSysConfigAndInfo->SysConfig.TotalConnectorCount;
|
|
|
+ gunCount = ShmChargerInfo->Control.MaxConnector;
|
|
|
acgunCount = ShmSysConfigAndInfo->SysConfig.AcConnectorCount;
|
|
|
// Open Uart5 for RB
|
|
|
Uart5Fd = InitComPort();
|
|
@@ -2668,7 +2482,7 @@ int main(void)
|
|
|
// 程序開始之前~ 必須先確定 FW 版本與硬體版本,確認後!!~ 該模組才算是真正的 Initial Comp.
|
|
|
if(ShmChargerInfo->Control.SysCtrl.bits.RelayBoardDisable == false)
|
|
|
{
|
|
|
- if (ShmRelayModuleData[0]->SelfTest_Comp == NO)
|
|
|
+ if (ShmRelayModuleData[0]->SelfTest_Comp == NO && !ShmChargerInfo->Control.TestCtrl.bits.ChargingSimulation)
|
|
|
{
|
|
|
// clena fw version
|
|
|
memset(ShmSysConfigAndInfo->SysInfo.RelayModuleFwRev, 0x00, 32);
|
|
@@ -2690,7 +2504,7 @@ int main(void)
|
|
|
|
|
|
// DO360 RC2
|
|
|
if (ShmChargerInfo->Control.SysCtrl.bits.SecondRelayBoardEnable == true &&
|
|
|
- ShmRelayModuleData[1]->SelfTest_Comp == NO)
|
|
|
+ ShmRelayModuleData[1]->SelfTest_Comp == NO && !ShmChargerInfo->Control.TestCtrl.bits.ChargingSimulation)
|
|
|
{
|
|
|
// clena fw version
|
|
|
memset(ShmSysConfigAndInfo->SysInfo.Relay2ModuleFwRev, 0x00, 32);
|
|
@@ -2713,7 +2527,7 @@ int main(void)
|
|
|
|
|
|
if(ShmChargerInfo->Control.SysCtrl.bits.FanBoardDisable == false)
|
|
|
{
|
|
|
- if (ShmFanModuleData->SelfTest_Comp == NO)
|
|
|
+ if (ShmFanModuleData->SelfTest_Comp == NO && !ShmChargerInfo->Control.TestCtrl.bits.ChargingSimulation)
|
|
|
{
|
|
|
// clena fw version
|
|
|
memset(ShmSysConfigAndInfo->SysInfo.FanModuleFwRev, 0x00, 32);
|
|
@@ -2731,7 +2545,8 @@ int main(void)
|
|
|
}
|
|
|
}
|
|
|
|
|
|
- if(_RelaySelfTestOK == YES)
|
|
|
+
|
|
|
+ if(_RelaySelfTestOK == YES || ShmChargerInfo->Control.TestCtrl.bits.ChargingSimulation)
|
|
|
{
|
|
|
// ==============優先權最高 10 ms ==============
|
|
|
// 輸出電壓
|
|
@@ -2740,9 +2555,9 @@ int main(void)
|
|
|
// 三相輸入電壓
|
|
|
GetPresentInputVol();
|
|
|
|
|
|
- //GetRelayOutputStatus();
|
|
|
+ GetRelayOutputStatus();
|
|
|
|
|
|
- for (int i = 0; i < gunCount; i++)
|
|
|
+ for(int i = 0; i < ShmChargerInfo->Control.MaxConnector; i++)
|
|
|
{
|
|
|
// check k1 k2 relay 狀態
|
|
|
CheckK1K2RelayOutput(i);
|
|
@@ -2797,16 +2612,15 @@ int main(void)
|
|
|
{
|
|
|
if (Config_Relay_Output(Uart5Fd, Addr.DO360_RC1, &outputRelay[0]))
|
|
|
{
|
|
|
- regRelay[0].relay_event.bits.AC_Contactor = outputRelay[0].relay_event.bits.AC_Contactor;
|
|
|
- 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;
|
|
|
+ //regRelay[0].relay_event.relay_status[0] = outputRelay[0].relay_event.relay_status[0];
|
|
|
+ //regRelay[0].relay_event.relay_status[1] = outputRelay[0].relay_event.relay_status[1];
|
|
|
+ //regRelay[0].relay_event.relay_status[2] = outputRelay[0].relay_event.relay_status[2];
|
|
|
+ }
|
|
|
+ if(ShmChargerInfo->Control.TestCtrl.bits.ChargingSimulation)
|
|
|
+ {
|
|
|
+ regRelay[0].relay_event.relay_status[0] = outputRelay[0].relay_event.relay_status[0];
|
|
|
+ regRelay[0].relay_event.relay_status[1] = outputRelay[0].relay_event.relay_status[1];
|
|
|
+ regRelay[0].relay_event.relay_status[2] = outputRelay[0].relay_event.relay_status[2];
|
|
|
}
|
|
|
}
|
|
|
|
|
@@ -2817,21 +2631,21 @@ int main(void)
|
|
|
{
|
|
|
if (Config_Relay_Output(Uart5Fd, Addr.DO360_RC2, &outputRelay[1]))
|
|
|
{
|
|
|
- regRelay[1].relay_event.bits.AC_Contactor = outputRelay[1].relay_event.bits.AC_Contactor;
|
|
|
- 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;
|
|
|
+ //regRelay[1].relay_event.relay_status[0] = outputRelay[1].relay_event.relay_status[0];
|
|
|
+ //regRelay[1].relay_event.relay_status[1] = outputRelay[1].relay_event.relay_status[1];
|
|
|
+ //regRelay[1].relay_event.relay_status[2] = outputRelay[1].relay_event.relay_status[2];
|
|
|
}
|
|
|
}
|
|
|
+ if(ShmChargerInfo->Control.TestCtrl.bits.ChargingSimulation)
|
|
|
+ {
|
|
|
+ regRelay[1].relay_event.relay_status[0] = outputRelay[1].relay_event.relay_status[0];
|
|
|
+ regRelay[1].relay_event.relay_status[1] = outputRelay[1].relay_event.relay_status[1];
|
|
|
+ regRelay[1].relay_event.relay_status[2] = outputRelay[1].relay_event.relay_status[2];
|
|
|
+ }
|
|
|
}
|
|
|
}
|
|
|
|
|
|
+
|
|
|
if (ShmFanModuleData->SelfTest_Comp == YES ||
|
|
|
strlen((char *)ShmSysConfigAndInfo->SysInfo.FanModuleFwRev) != 0 ||
|
|
|
ShmSysConfigAndInfo->SysInfo.FanModuleFwRev[0] != '\0')
|