|
@@ -141,6 +141,7 @@ struct timeb _ac_endChargingTime;
|
|
|
unsigned short _setFanSpeed = 0;
|
|
|
float _beforeChargingTotalEnergy = 0.0;
|
|
|
byte _checkLedChanged = 3;
|
|
|
+byte _RelaySelfTestOK;
|
|
|
|
|
|
Ver ver;
|
|
|
PresentInputVoltage inputVoltage;
|
|
@@ -280,14 +281,14 @@ void GetFwAndHwVersion_Fan()
|
|
|
strcpy((char *) ShmFanModuleData->version, ver.Version_FW);
|
|
|
// SystemInfo
|
|
|
strcpy((char *) ShmSysConfigAndInfo->SysInfo.FanModuleFwRev, ver.Version_FW);
|
|
|
- PRINTF_FUNC("GetFwAndHwVersion_Fan s1 = %s \n", ver.Version_FW);
|
|
|
+ PRINTF_FUNC("GetFwAndHwVersion_Fan s1 = %s", ver.Version_FW);
|
|
|
}
|
|
|
|
|
|
if (Query_HW_Ver(Uart5Fd, Addr.Fan, &ver) == PASS)
|
|
|
{
|
|
|
// SystemInfo
|
|
|
strcpy((char *) ShmSysConfigAndInfo->SysInfo.FanModuleHwRev, ver.Version_FW);
|
|
|
- PRINTF_FUNC("GetFwAndHwVersion_Fan s2 = %s \n", ver.Version_HW);
|
|
|
+ PRINTF_FUNC("GetFwAndHwVersion_Fan s2 = %s", ver.Version_HW);
|
|
|
}
|
|
|
}
|
|
|
|
|
@@ -299,14 +300,14 @@ void GetFwAndHwVersion_Relay()
|
|
|
strcpy((char *) ShmRelayModuleData[0]->version, ver.Version_FW);
|
|
|
// SystemInfo
|
|
|
strcpy((char *) ShmSysConfigAndInfo->SysInfo.RelayModuleFwRev, ver.Version_FW);
|
|
|
- PRINTF_FUNC("GetFwAndHwVersion_RC1 s1 = %s \n", ver.Version_FW);
|
|
|
+ PRINTF_FUNC("GetFwAndHwVersion_RC1 s1 = %s", ver.Version_FW);
|
|
|
}
|
|
|
|
|
|
if (Query_HW_Ver(Uart5Fd, Addr.DO360_RC1, &ver) == PASS)
|
|
|
{
|
|
|
// SystemInfo
|
|
|
strcpy((char *) ShmSysConfigAndInfo->SysInfo.RelayModuleHwRev, ver.Version_FW);
|
|
|
- PRINTF_FUNC("GetFwAndHwVersion_RC1 s2 = %s \n", ver.Version_HW);
|
|
|
+ PRINTF_FUNC("GetFwAndHwVersion_RC1 s2 = %s", ver.Version_HW);
|
|
|
}
|
|
|
}
|
|
|
|
|
@@ -319,14 +320,14 @@ void GetFwAndHwVersion_Relay2()
|
|
|
strcpy((char *) ShmRelayModuleData[1]->version, ver.Version_FW);
|
|
|
// SystemInfo
|
|
|
strcpy((char *) ShmSysConfigAndInfo->SysInfo.Relay2ModuleFwRev, ver.Version_FW);
|
|
|
- PRINTF_FUNC("GetFwAndHwVersion_RC2 s1 = %s \n", ver.Version_FW);
|
|
|
+ PRINTF_FUNC("GetFwAndHwVersion_RC2 s1 = %s", ver.Version_FW);
|
|
|
}
|
|
|
|
|
|
if (Query_HW_Ver(Uart5Fd, Addr.DO360_RC2, &ver) == PASS)
|
|
|
{
|
|
|
// SystemInfo
|
|
|
strcpy((char *) ShmSysConfigAndInfo->SysInfo.Relay2ModuleHwRev, ver.Version_FW);
|
|
|
- PRINTF_FUNC("GetFwAndHwVersion_RC2 s2 = %s \n", ver.Version_HW);
|
|
|
+ PRINTF_FUNC("GetFwAndHwVersion_RC2 s2 = %s", ver.Version_HW);
|
|
|
}
|
|
|
}
|
|
|
|
|
@@ -460,7 +461,7 @@ void SetModelName_Fan()
|
|
|
{
|
|
|
if (Config_Model_Name(Uart5Fd, Addr.Fan, ShmSysConfigAndInfo->SysConfig.ModelName) == PASS)
|
|
|
{
|
|
|
- PRINTF_FUNC("Set Model name PASS = %s \n", ShmSysConfigAndInfo->SysConfig.ModelName);
|
|
|
+ PRINTF_FUNC("Set Model name PASS = %s", ShmSysConfigAndInfo->SysConfig.ModelName);
|
|
|
}
|
|
|
}
|
|
|
|
|
@@ -732,80 +733,48 @@ void GetPresentInputVol()
|
|
|
// 左右槍的 Relay 前後的輸出電壓
|
|
|
void GetPersentOutputVol()
|
|
|
{
|
|
|
- if (Query_Present_OutputVoltage(Uart5Fd, Addr.DO360_RC1, &outputVoltage) == PASS)
|
|
|
- {
|
|
|
-// PRINTF_FUNC("Conn1 fuse 1 = %f \n", outputVoltage.behindFuse_Voltage_C1);
|
|
|
-// PRINTF_FUNC("Conn1 relay 1 = %f \n", outputVoltage.behindRelay_Voltage_C1);
|
|
|
-// PRINTF_FUNC("Conn2 fuse 2 = %f \n", outputVoltage.behindFuse_Voltage_C2);
|
|
|
-// PRINTF_FUNC("Conn2 relay 2 = %f \n", outputVoltage.behindRelay_Voltage_C2);
|
|
|
-
|
|
|
- //PRINTF_FUNC("outputVoltage.behindFuse_Voltage_C1 = %f \n", outputVoltage.behindFuse_Voltage_C1);
|
|
|
- //PRINTF_FUNC("outputVoltage.behindFuse_Voltage_C2 = %f \n", outputVoltage.behindFuse_Voltage_C2);
|
|
|
-
|
|
|
- ShmRelayModuleData[0]->Gun1FuseOutputVolt = outputVoltage.behindFuse_Voltage_C1;
|
|
|
- ShmRelayModuleData[0]->Gun1RelayOutputVolt = outputVoltage.behindRelay_Voltage_C1;
|
|
|
- ShmRelayModuleData[0]->Gun2FuseOutputVolt = outputVoltage.behindFuse_Voltage_C2;
|
|
|
- ShmRelayModuleData[0]->Gun2RelayOutputVolt = outputVoltage.behindRelay_Voltage_C2;
|
|
|
-
|
|
|
- _chargingData[0]->FuseChargingVoltage = ShmRelayModuleData[0]->Gun1FuseOutputVolt;
|
|
|
- _chargingData[0]->FireChargingVoltage = ShmRelayModuleData[0]->Gun1RelayOutputVolt;
|
|
|
- }
|
|
|
-
|
|
|
- // DO360 RC2
|
|
|
- if (Query_Present_OutputVoltage(Uart5Fd, Addr.DO360_RC2, &outputVoltage) == PASS)
|
|
|
- {
|
|
|
-// PRINTF_FUNC("Conn1 fuse 1 = %f \n", outputVoltage.behindFuse_Voltage_C1);
|
|
|
-// PRINTF_FUNC("Conn1 relay 1 = %f \n", outputVoltage.behindRelay_Voltage_C1);
|
|
|
-// PRINTF_FUNC("Conn2 fuse 2 = %f \n", outputVoltage.behindFuse_Voltage_C2);
|
|
|
-// PRINTF_FUNC("Conn2 relay 2 = %f \n", outputVoltage.behindRelay_Voltage_C2);
|
|
|
-
|
|
|
- //PRINTF_FUNC("outputVoltage.behindFuse_Voltage_C1 = %f \n", outputVoltage.behindFuse_Voltage_C1);
|
|
|
- //PRINTF_FUNC("outputVoltage.behindFuse_Voltage_C2 = %f \n", outputVoltage.behindFuse_Voltage_C2);
|
|
|
-
|
|
|
- ShmRelayModuleData[1]->Gun1FuseOutputVolt = outputVoltage.behindFuse_Voltage_C1;
|
|
|
- ShmRelayModuleData[1]->Gun1RelayOutputVolt = outputVoltage.behindRelay_Voltage_C1;
|
|
|
- ShmRelayModuleData[1]->Gun2FuseOutputVolt = outputVoltage.behindFuse_Voltage_C2;
|
|
|
- ShmRelayModuleData[1]->Gun2RelayOutputVolt = outputVoltage.behindRelay_Voltage_C2;
|
|
|
-
|
|
|
- _chargingData[1]->FuseChargingVoltage = ShmRelayModuleData[1]->Gun2FuseOutputVolt;
|
|
|
- _chargingData[1]->FireChargingVoltage = ShmRelayModuleData[1]->Gun2RelayOutputVolt;
|
|
|
- }
|
|
|
-
|
|
|
-// for (int index = 0; index < gunCount; index++)
|
|
|
-// {
|
|
|
-// if (index == 0)
|
|
|
-// {
|
|
|
-// if (_chargingData[index]->Evboard_id == 0x01)
|
|
|
-// {
|
|
|
-// _chargingData[index]->FuseChargingVoltage = ShmRelayModuleData->Gun1FuseOutputVolt;
|
|
|
-// _chargingData[index]->FireChargingVoltage = ShmRelayModuleData->Gun1RelayOutputVolt;
|
|
|
-// }
|
|
|
-// else if (_chargingData[index]->Evboard_id == 0x02)
|
|
|
-// {
|
|
|
-// _chargingData[index]->FuseChargingVoltage = ShmRelayModuleData->Gun2FuseOutputVolt;
|
|
|
-// _chargingData[index]->FireChargingVoltage = ShmRelayModuleData->Gun2RelayOutputVolt;
|
|
|
-// }
|
|
|
-// }
|
|
|
-// else if (index == 1)
|
|
|
-// {
|
|
|
-// _chargingData[index]->FuseChargingVoltage = ShmRelayModuleData->Gun2FuseOutputVolt;
|
|
|
-// _chargingData[index]->FireChargingVoltage = ShmRelayModuleData->Gun2RelayOutputVolt;
|
|
|
-// }
|
|
|
-
|
|
|
- //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);
|
|
|
-// }
|
|
|
-// else if (_chargingData[index]->Type == _Type_CCS_2)
|
|
|
-// {
|
|
|
-
|
|
|
-// }
|
|
|
-// }
|
|
|
+ if(ShmChargerInfo->Control.SysCtrl.bits.SecondRelayBoardEnable)
|
|
|
+ {
|
|
|
+ // two relay board
|
|
|
+ if (Query_Present_OutputVoltage(Uart5Fd, Addr.DO360_RC1, &outputVoltage) == PASS)
|
|
|
+ {
|
|
|
+ ShmRelayModuleData[0]->Gun1FuseOutputVolt = outputVoltage.behindFuse_Voltage_C1;
|
|
|
+ ShmRelayModuleData[0]->Gun1RelayOutputVolt = outputVoltage.behindRelay_Voltage_C1;
|
|
|
+ ShmRelayModuleData[0]->Gun2FuseOutputVolt = outputVoltage.behindFuse_Voltage_C2;
|
|
|
+ ShmRelayModuleData[0]->Gun2RelayOutputVolt = outputVoltage.behindRelay_Voltage_C2;
|
|
|
+
|
|
|
+ _chargingData[0]->FuseChargingVoltage = ShmRelayModuleData[0]->Gun1FuseOutputVolt;
|
|
|
+ _chargingData[0]->FireChargingVoltage = ShmRelayModuleData[0]->Gun1RelayOutputVolt;
|
|
|
+ }
|
|
|
+
|
|
|
+ // DO360 RC2
|
|
|
+ if (Query_Present_OutputVoltage(Uart5Fd, Addr.DO360_RC2, &outputVoltage) == PASS)
|
|
|
+ {
|
|
|
+ ShmRelayModuleData[1]->Gun1FuseOutputVolt = outputVoltage.behindFuse_Voltage_C1;
|
|
|
+ ShmRelayModuleData[1]->Gun1RelayOutputVolt = outputVoltage.behindRelay_Voltage_C1;
|
|
|
+ ShmRelayModuleData[1]->Gun2FuseOutputVolt = outputVoltage.behindFuse_Voltage_C2;
|
|
|
+ ShmRelayModuleData[1]->Gun2RelayOutputVolt = outputVoltage.behindRelay_Voltage_C2;
|
|
|
+
|
|
|
+ _chargingData[1]->FuseChargingVoltage = ShmRelayModuleData[1]->Gun2FuseOutputVolt;
|
|
|
+ _chargingData[1]->FireChargingVoltage = ShmRelayModuleData[1]->Gun2RelayOutputVolt;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ else
|
|
|
+ {
|
|
|
+ // only one relay board
|
|
|
+ if (Query_Present_OutputVoltage(Uart5Fd, Addr.DO360_RC1, &outputVoltage) == PASS)
|
|
|
+ {
|
|
|
+ ShmRelayModuleData[0]->Gun1FuseOutputVolt = outputVoltage.behindFuse_Voltage_C1;
|
|
|
+ ShmRelayModuleData[0]->Gun1RelayOutputVolt = outputVoltage.behindRelay_Voltage_C1;
|
|
|
+ ShmRelayModuleData[0]->Gun2FuseOutputVolt = outputVoltage.behindFuse_Voltage_C2;
|
|
|
+ ShmRelayModuleData[0]->Gun2RelayOutputVolt = outputVoltage.behindRelay_Voltage_C2;
|
|
|
+
|
|
|
+ _chargingData[0]->FuseChargingVoltage = ShmRelayModuleData[0]->Gun1FuseOutputVolt;
|
|
|
+ _chargingData[0]->FireChargingVoltage = ShmRelayModuleData[0]->Gun1RelayOutputVolt;
|
|
|
+ _chargingData[1]->FuseChargingVoltage = ShmRelayModuleData[0]->Gun2FuseOutputVolt;
|
|
|
+ _chargingData[1]->FireChargingVoltage = ShmRelayModuleData[0]->Gun2RelayOutputVolt;
|
|
|
+ }
|
|
|
+ }
|
|
|
}
|
|
|
|
|
|
// 風扇速度
|
|
@@ -839,28 +808,54 @@ void GetRelayOutputStatus()
|
|
|
// 確認 K1 K2 relay 的狀態
|
|
|
void CheckK1K2RelayOutput(byte index)
|
|
|
{
|
|
|
- if (index == 0)
|
|
|
- {
|
|
|
- if (regRelay[0].relay_event.bits.Gun1_N == YES && regRelay[0].relay_event.bits.Gun1_P == YES)
|
|
|
- _chargingData[index]->RelayK1K2Status = YES;
|
|
|
- else
|
|
|
- _chargingData[index]->RelayK1K2Status = NO;
|
|
|
- }
|
|
|
- else if (index == 1)
|
|
|
- {
|
|
|
- if (regRelay[1].relay_event.bits.Gun2_N == YES && regRelay[1].relay_event.bits.Gun2_P == YES)
|
|
|
- _chargingData[index]->RelayK1K2Status = YES;
|
|
|
- else
|
|
|
- _chargingData[index]->RelayK1K2Status = NO;
|
|
|
- }
|
|
|
-
|
|
|
- if (regRelay[0].relay_event.bits.Gun1_Parallel_N == YES && regRelay[0].relay_event.bits.Gun1_Parallel_P == YES &&
|
|
|
- regRelay[0].relay_event.bits.Gun2_Parallel_N == YES && regRelay[0].relay_event.bits.Gun2_Parallel_P == YES &&
|
|
|
- regRelay[1].relay_event.bits.Gun1_Parallel_N == YES && regRelay[1].relay_event.bits.Gun1_Parallel_P == YES)
|
|
|
- ShmSysConfigAndInfo->SysInfo.BridgeRelayStatus = YES;
|
|
|
- else
|
|
|
- ShmSysConfigAndInfo->SysInfo.BridgeRelayStatus = NO;
|
|
|
-
|
|
|
+ if(ShmChargerInfo->Control.SysCtrl.bits.SecondRelayBoardEnable)
|
|
|
+ {
|
|
|
+ // two relay board
|
|
|
+ if (index == 0)
|
|
|
+ {
|
|
|
+ if (regRelay[0].relay_event.bits.Gun1_N == YES && regRelay[0].relay_event.bits.Gun1_P == YES)
|
|
|
+ _chargingData[index]->RelayK1K2Status = YES;
|
|
|
+ else
|
|
|
+ _chargingData[index]->RelayK1K2Status = NO;
|
|
|
+ }
|
|
|
+ else if (index == 1)
|
|
|
+ {
|
|
|
+ if (regRelay[1].relay_event.bits.Gun2_N == YES && regRelay[1].relay_event.bits.Gun2_P == YES)
|
|
|
+ _chargingData[index]->RelayK1K2Status = YES;
|
|
|
+ else
|
|
|
+ _chargingData[index]->RelayK1K2Status = NO;
|
|
|
+ }
|
|
|
+
|
|
|
+ if (regRelay[0].relay_event.bits.Gun1_Parallel_N == YES && regRelay[0].relay_event.bits.Gun1_Parallel_P == YES &&
|
|
|
+ regRelay[0].relay_event.bits.Gun2_Parallel_N == YES && regRelay[0].relay_event.bits.Gun2_Parallel_P == YES &&
|
|
|
+ regRelay[1].relay_event.bits.Gun1_Parallel_N == YES && regRelay[1].relay_event.bits.Gun1_Parallel_P == YES)
|
|
|
+ ShmSysConfigAndInfo->SysInfo.BridgeRelayStatus = YES;
|
|
|
+ else
|
|
|
+ ShmSysConfigAndInfo->SysInfo.BridgeRelayStatus = NO;
|
|
|
+ }
|
|
|
+ else
|
|
|
+ {
|
|
|
+ // only one relay board
|
|
|
+ if (index == 0)
|
|
|
+ {
|
|
|
+ if (regRelay[0].relay_event.bits.Gun1_N == YES && regRelay[0].relay_event.bits.Gun1_P == YES)
|
|
|
+ _chargingData[index]->RelayK1K2Status = YES;
|
|
|
+ else
|
|
|
+ _chargingData[index]->RelayK1K2Status = NO;
|
|
|
+ }
|
|
|
+ else if (index == 1)
|
|
|
+ {
|
|
|
+ if (regRelay[0].relay_event.bits.Gun2_N == YES && regRelay[0].relay_event.bits.Gun2_P == YES)
|
|
|
+ _chargingData[index]->RelayK1K2Status = YES;
|
|
|
+ else
|
|
|
+ _chargingData[index]->RelayK1K2Status = NO;
|
|
|
+ }
|
|
|
+
|
|
|
+ if (regRelay[0].relay_event.bits.Gun1_Parallel_N == YES && regRelay[0].relay_event.bits.Gun1_Parallel_P == YES)
|
|
|
+ ShmSysConfigAndInfo->SysInfo.BridgeRelayStatus = YES;
|
|
|
+ else
|
|
|
+ ShmSysConfigAndInfo->SysInfo.BridgeRelayStatus = NO;
|
|
|
+ }
|
|
|
// PRINTF_FUNC("Check Relay Output. index = %d, RelayKPK2Status = %d, BridgeRelayStatus = %d \n",
|
|
|
// index, _chargingData[index]->RelayKPK2Status, ShmSysConfigAndInfo->SysInfo.BridgeRelayStatus);
|
|
|
}
|
|
@@ -1051,51 +1046,86 @@ void SetFanModuleSpeed()
|
|
|
//==========================================
|
|
|
void SetK1K2RelayStatus(byte index)
|
|
|
{
|
|
|
- if (ShmPsuData->Work_Step >= _TEST_MODE && ShmPsuData->Work_Step <= _TEST_MODE)
|
|
|
- {
|
|
|
- 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;
|
|
|
- return;
|
|
|
- }
|
|
|
-
|
|
|
if (_chargingData[index]->SystemStatus < S_PREPARING_FOR_EVSE)
|
|
|
{
|
|
|
- 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[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;
|
|
|
- }
|
|
|
+ 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(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;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ else
|
|
|
+ {
|
|
|
+ // 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(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;
|
|
|
- }
|
|
|
+ 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
|
|
|
+ {
|
|
|
+ // 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 &&
|
|
@@ -1104,20 +1134,42 @@ void SetK1K2RelayStatus(byte index)
|
|
|
{
|
|
|
if ((_chargingData[index]->PresentChargingCurrent * 10) <= SEFETY_SWITCH_RELAY_CUR)
|
|
|
{
|
|
|
- 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[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;
|
|
|
- }
|
|
|
+ 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(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;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ else
|
|
|
+ {
|
|
|
+ // 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_CCS_PRECHARGE_ST0)
|
|
@@ -1139,19 +1191,32 @@ void SetParalleRelayStatus()
|
|
|
((_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[0]->SystemStatus == S_FAULT)))
|
|
|
{
|
|
|
- // 初始化~ 不搭橋接
|
|
|
- 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;
|
|
|
+ if(ShmChargerInfo->Control.SysCtrl.bits.SecondRelayBoardEnable)
|
|
|
+ {
|
|
|
+ // two relay board
|
|
|
+ // 初始化~ 不搭橋接
|
|
|
+ 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;
|
|
|
+ }
|
|
|
+ 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
|
|
|
{
|
|
@@ -1163,70 +1228,122 @@ void SetParalleRelayStatus()
|
|
|
{
|
|
|
if (ShmSysConfigAndInfo->SysInfo.ReAssignedFlag < _REASSIGNED_RELAY_M_TO_A)
|
|
|
{
|
|
|
- // 最大充 - 搭上橋接
|
|
|
- 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;
|
|
|
+ if(ShmChargerInfo->Control.SysCtrl.bits.SecondRelayBoardEnable)
|
|
|
+ {
|
|
|
+ // two 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.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;
|
|
|
+ }
|
|
|
+ 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 (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;
|
|
|
+ if(ShmChargerInfo->Control.SysCtrl.bits.SecondRelayBoardEnable)
|
|
|
+ {
|
|
|
+ // two relay board
|
|
|
+ // 平均充 - 不搭
|
|
|
+ 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;
|
|
|
+ }
|
|
|
+ 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 (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;
|
|
|
+ if(ShmChargerInfo->Control.SysCtrl.bits.SecondRelayBoardEnable)
|
|
|
+ {
|
|
|
+ // two relay board
|
|
|
+ // 平均充 - 不搭
|
|
|
+ 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;
|
|
|
+ }
|
|
|
+ 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 (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;
|
|
|
+ if(ShmChargerInfo->Control.SysCtrl.bits.SecondRelayBoardEnable)
|
|
|
+ {
|
|
|
+ // two 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.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;
|
|
|
+ }
|
|
|
+ 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;
|
|
|
+ }
|
|
|
}
|
|
|
}
|
|
|
}
|
|
@@ -1234,6 +1351,32 @@ void SetParalleRelayStatus()
|
|
|
}
|
|
|
}
|
|
|
|
|
|
+void SetAcContactorStatus(void)
|
|
|
+{
|
|
|
+ if(ShmChargerInfo->Control.RelayCtrl.bits.AcContactor == YES &&
|
|
|
+ ShmChargerInfo->Control.RelayCtrl.bits.AcContactorForceOff == NO)
|
|
|
+ {
|
|
|
+ outputRelay[0].relay_event.bits.AC_Contactor = YES;
|
|
|
+ }
|
|
|
+ else
|
|
|
+ {
|
|
|
+ outputRelay[0].relay_event.bits.AC_Contactor = NO;
|
|
|
+ }
|
|
|
+
|
|
|
+ if(ShmChargerInfo->Control.SysCtrl.bits.SecondRelayBoardEnable)
|
|
|
+ {
|
|
|
+ if(ShmChargerInfo->Control.RelayCtrl.bits.AcContactor == YES &&
|
|
|
+ ShmChargerInfo->Control.RelayCtrl.bits.AcContactorForceOff == NO)
|
|
|
+ {
|
|
|
+ outputRelay[1].relay_event.bits.AC_Contactor = YES;
|
|
|
+ }
|
|
|
+ else
|
|
|
+ {
|
|
|
+ outputRelay[1].relay_event.bits.AC_Contactor = NO;
|
|
|
+ }
|
|
|
+ }
|
|
|
+}
|
|
|
+
|
|
|
void CheckAlarmOccur()
|
|
|
{
|
|
|
bool isErr = false;
|
|
@@ -2448,11 +2591,19 @@ int main(void)
|
|
|
memset(&outputRelay[0], 0x00, sizeof(Relay));
|
|
|
memset(&outputRelay[1], 0x00, sizeof(Relay));
|
|
|
|
|
|
- if(Config_Relay_Output(Uart5Fd, Addr.DO360_RC1, &outputRelay[0]) != PASS)
|
|
|
- PRINTF_FUNC("Config_Relay1_Output fail");
|
|
|
- if(Config_Relay_Output(Uart5Fd, Addr.DO360_RC2, &outputRelay[1]) != PASS)
|
|
|
- PRINTF_FUNC("Config_Relay2_Output fail");
|
|
|
+ if(ShmChargerInfo->Control.SysCtrl.bits.RelayBoardDisable == false)
|
|
|
+ {
|
|
|
+ if(Config_Relay_Output(Uart5Fd, Addr.DO360_RC1, &outputRelay[0]) != PASS)
|
|
|
+ PRINTF_FUNC("Config_Relay1_Output fail");
|
|
|
+
|
|
|
+ if(ShmChargerInfo->Control.SysCtrl.bits.SecondRelayBoardEnable)
|
|
|
+ {
|
|
|
+ if(Config_Relay_Output(Uart5Fd, Addr.DO360_RC2, &outputRelay[1]) != PASS)
|
|
|
+ PRINTF_FUNC("Config_Relay2_Output fail");
|
|
|
+ }
|
|
|
+ }
|
|
|
|
|
|
+ _RelaySelfTestOK = NO;
|
|
|
cur_led_color.Connect_1_Red = COLOR_MIN_LV;
|
|
|
cur_led_color.Connect_1_Green = COLOR_MIN_LV;
|
|
|
cur_led_color.Connect_1_Blue = COLOR_MIN_LV;
|
|
@@ -2466,55 +2617,72 @@ int main(void)
|
|
|
if(!ShmSysConfigAndInfo->SysInfo.FirmwareUpdate)
|
|
|
{
|
|
|
// 程序開始之前~ 必須先確定 FW 版本與硬體版本,確認後!!~ 該模組才算是真正的 Initial Comp.
|
|
|
- if (ShmRelayModuleData[0]->SelfTest_Comp == NO)
|
|
|
+ if(ShmChargerInfo->Control.SysCtrl.bits.RelayBoardDisable == false)
|
|
|
{
|
|
|
- // clena fw version
|
|
|
- memset(ShmSysConfigAndInfo->SysInfo.RelayModuleFwRev, 0x00, 32);
|
|
|
+ if (ShmRelayModuleData[0]->SelfTest_Comp == NO)
|
|
|
+ {
|
|
|
+ // clena fw version
|
|
|
+ memset(ShmSysConfigAndInfo->SysInfo.RelayModuleFwRev, 0x00, 32);
|
|
|
|
|
|
- GetFwAndHwVersion_Relay();
|
|
|
- SetRtcData_Relay(0);
|
|
|
- sleep(1);
|
|
|
+ GetFwAndHwVersion_Relay();
|
|
|
+ SetRtcData_Relay(0);
|
|
|
+ sleep(1);
|
|
|
|
|
|
- if(strlen((char *)ShmSysConfigAndInfo->SysInfo.RelayModuleFwRev))
|
|
|
- {
|
|
|
- ShmRelayModuleData[0]->SelfTest_Comp = YES;
|
|
|
+ if(strlen((char *)ShmSysConfigAndInfo->SysInfo.RelayModuleFwRev))
|
|
|
+ {
|
|
|
+ ShmRelayModuleData[0]->SelfTest_Comp = YES;
|
|
|
+
|
|
|
+ if(ShmChargerInfo->Control.SysCtrl.bits.SecondRelayBoardEnable == false)
|
|
|
+ {
|
|
|
+ _RelaySelfTestOK = YES;
|
|
|
+ }
|
|
|
+ }
|
|
|
}
|
|
|
- }
|
|
|
|
|
|
- // DO360 RC2
|
|
|
- if (ShmRelayModuleData[1]->SelfTest_Comp == NO)
|
|
|
- {
|
|
|
- // clena fw version
|
|
|
- memset(ShmSysConfigAndInfo->SysInfo.Relay2ModuleFwRev, 0x00, 32);
|
|
|
+ // DO360 RC2
|
|
|
+ if (ShmChargerInfo->Control.SysCtrl.bits.SecondRelayBoardEnable == true &&
|
|
|
+ ShmRelayModuleData[1]->SelfTest_Comp == NO)
|
|
|
+ {
|
|
|
+ // clena fw version
|
|
|
+ memset(ShmSysConfigAndInfo->SysInfo.Relay2ModuleFwRev, 0x00, 32);
|
|
|
|
|
|
- GetFwAndHwVersion_Relay2();
|
|
|
- SetRtcData_Relay(1);
|
|
|
- sleep(1);
|
|
|
+ GetFwAndHwVersion_Relay2();
|
|
|
+ SetRtcData_Relay(1);
|
|
|
+ sleep(1);
|
|
|
|
|
|
- if (strlen((char *)ShmSysConfigAndInfo->SysInfo.Relay2ModuleFwRev) != 0)
|
|
|
- {
|
|
|
- ShmRelayModuleData[1]->SelfTest_Comp = YES;
|
|
|
+ if (strlen((char *)ShmSysConfigAndInfo->SysInfo.Relay2ModuleFwRev) != 0)
|
|
|
+ {
|
|
|
+ ShmRelayModuleData[1]->SelfTest_Comp = YES;
|
|
|
+
|
|
|
+ if(ShmRelayModuleData[0]->SelfTest_Comp == YES)
|
|
|
+ {
|
|
|
+ _RelaySelfTestOK = YES;
|
|
|
+ }
|
|
|
+ }
|
|
|
}
|
|
|
}
|
|
|
|
|
|
- if (ShmFanModuleData->SelfTest_Comp == NO)
|
|
|
+ if(ShmChargerInfo->Control.SysCtrl.bits.FanBoardDisable == false)
|
|
|
{
|
|
|
- // clena fw version
|
|
|
- memset(ShmSysConfigAndInfo->SysInfo.FanModuleFwRev, 0x00, 32);
|
|
|
+ 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);
|
|
|
+ GetFwAndHwVersion_Fan();
|
|
|
+ SetModelName_Fan();
|
|
|
+ SetRtcData_Fan();
|
|
|
+ sleep(1);
|
|
|
+ gettimeofday(&_priority_time, NULL);
|
|
|
|
|
|
- if(strlen((char *)ShmSysConfigAndInfo->SysInfo.FanModuleFwRev) != 0)
|
|
|
- {
|
|
|
- ShmFanModuleData->SelfTest_Comp = YES;
|
|
|
+ if(strlen((char *)ShmSysConfigAndInfo->SysInfo.FanModuleFwRev) != 0)
|
|
|
+ {
|
|
|
+ ShmFanModuleData->SelfTest_Comp = YES;
|
|
|
+ }
|
|
|
}
|
|
|
}
|
|
|
|
|
|
- if (ShmRelayModuleData[0]->SelfTest_Comp == YES && ShmRelayModuleData[1]->SelfTest_Comp == YES)
|
|
|
+ if(_RelaySelfTestOK == YES)
|
|
|
{
|
|
|
// ==============優先權最高 10 ms ==============
|
|
|
// 輸出電壓
|
|
@@ -2523,20 +2691,6 @@ int main(void)
|
|
|
// 三相輸入電壓
|
|
|
GetPresentInputVol();
|
|
|
|
|
|
- // 讀取當前 AC relay 狀態
|
|
|
- if(regRelay[0].relay_event.bits.AC_Contactor != ShmSysConfigAndInfo->SysInfo.AcContactorStatus)
|
|
|
- {
|
|
|
- PRINTF_FUNC("[%d]AC Contact Relay already %s", 0,
|
|
|
- ShmSysConfigAndInfo->SysInfo.AcContactorStatus == YES ? "On" : "Off");
|
|
|
- }
|
|
|
- if(regRelay[1].relay_event.bits.AC_Contactor != ShmSysConfigAndInfo->SysInfo.AcContactorStatus)
|
|
|
- {
|
|
|
- PRINTF_FUNC("[%d]AC Contact Relay already %s", 1,
|
|
|
- ShmSysConfigAndInfo->SysInfo.AcContactorStatus == YES ? "On" : "Off");
|
|
|
- }
|
|
|
- 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++)
|
|
@@ -2587,29 +2741,14 @@ int main(void)
|
|
|
// 橋接 relay
|
|
|
SetParalleRelayStatus();
|
|
|
|
|
|
- if(ShmChargerInfo->Control.RelayCtrl.bits.AcContactor == YES &&
|
|
|
- ShmChargerInfo->Control.RelayCtrl.bits.AcContactorForceOff == NO)
|
|
|
- {
|
|
|
- outputRelay[0].relay_event.bits.AC_Contactor = YES;
|
|
|
- outputRelay[1].relay_event.bits.AC_Contactor = YES;
|
|
|
- }
|
|
|
- else
|
|
|
- {
|
|
|
- outputRelay[0].relay_event.bits.AC_Contactor = NO;
|
|
|
- outputRelay[1].relay_event.bits.AC_Contactor = NO;
|
|
|
- }
|
|
|
-
|
|
|
- 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;
|
|
|
- }
|
|
|
+ SetAcContactorStatus();
|
|
|
|
|
|
// 搭上/鬆開 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.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;
|
|
@@ -2619,48 +2758,27 @@ int main(void)
|
|
|
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);
|
|
|
}
|
|
|
}
|
|
|
|
|
|
- // 搭上/鬆開 Relay
|
|
|
- if(IsNoneMatchRelayStatus(1))
|
|
|
+ if(ShmChargerInfo->Control.SysCtrl.bits.SecondRelayBoardEnable)
|
|
|
{
|
|
|
- if (Config_Relay_Output(Uart5Fd, Addr.DO360_RC2, &outputRelay[1]))
|
|
|
+ // 搭上/鬆開 Relay
|
|
|
+ if(IsNoneMatchRelayStatus(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);
|
|
|
+ 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;
|
|
|
+ }
|
|
|
}
|
|
|
}
|
|
|
}
|