提交 7618bb67 作者: wysheng

重新梳理继电器控制

上级 c360bacd
...@@ -467,13 +467,13 @@ StructTCUCControl TCUControlInfo = ...@@ -467,13 +467,13 @@ StructTCUCControl TCUControlInfo =
//硬件版本 //硬件版本
.SoftwareVersion = .SoftwareVersion =
{ {
0xFF, 0xff, (u8)(__SoftVer__>>8), (u8)(__SoftVer__),
}, },
//软件版本 //软件版本
.SoftwareData = .SoftwareData =
{ {
0xFF, 0xff, 0xFF, 0xFF 0x20, 0x20, 0x06, 0x08
}, },
//软件日期 //软件日期
......
...@@ -406,7 +406,7 @@ extern u8 HexToBcd(u8 Hex); ...@@ -406,7 +406,7 @@ extern u8 HexToBcd(u8 Hex);
extern int CopyCode(u32 Des, u32 Scr, u32 Len); extern int CopyCode(u32 Des, u32 Scr, u32 Len);
extern int UpdateFlagSet(u32 Status); extern int UpdateFlagSet(u32 Status);
#define __SoftVer__ (0x0320) //BCD码 如:V1.02 SoftVer = 0x0102 #define __SoftVer__ (0x0110) //BCD码 如:V1.02 SoftVer = 0x0102
#endif #endif
...@@ -12,12 +12,13 @@ ...@@ -12,12 +12,13 @@
s32 GetChgVoltChgRun_B(void) s32 GetChgVoltChgRun_B(void)
{ {
if(BcsMsg_B.Valid)
return BcsMsg_B.ChgVolt;
if(ImdValue_B.Vaild) if(ImdValue_B.Vaild)
return ImdValue_B.PnVolt; return ImdValue_B.PnVolt;
//if(eMeterSta_Unavail != MeterComm.Status_B) //if(eMeterSta_Unavail != MeterComm.Status_B)
// return MeterValue_B.Voltage; // return MeterValue_B.Voltage;
if(BcsMsg_B.Valid)
return BcsMsg_B.ChgVolt;
return -1; return -1;
} }
...@@ -152,7 +153,8 @@ void ChgProChgRun_B(StructChargeCtrl_B *pChargeCtrl) ...@@ -152,7 +153,8 @@ void ChgProChgRun_B(StructChargeCtrl_B *pChargeCtrl)
DcModuleManage_B.ValidNum += DcModuleGroup[1].ValidNum; DcModuleManage_B.ValidNum += DcModuleGroup[1].ValidNum;
DcModuleGroup[1].flag = 1; DcModuleGroup[1].flag = 1;
} }
else if(DcModuleGroup[0].status == Valid) else if(DcModuleGroup[0].status == Valid
&& ChargeCtrl.CurProcess == eChgPro_ChgIdle)
{ {
DcModuleGroup[0].status = Hold_B; DcModuleGroup[0].status = Hold_B;
DcModuleManage_B.ValidNum += DcModuleGroup[0].ValidNum; DcModuleManage_B.ValidNum += DcModuleGroup[0].ValidNum;
......
...@@ -15,13 +15,13 @@ ...@@ -15,13 +15,13 @@
s32 GetChgVoltChgRun(void) s32 GetChgVoltChgRun(void)
{ {
if (BcsMsg.Valid)
return BcsMsg.ChgVolt;
if (ImdValue.Vaild) if (ImdValue.Vaild)
return ImdValue.PnVolt; return ImdValue.PnVolt;
//if(eMeterSta_Unavail != MeterComm.Status) //if(eMeterSta_Unavail != MeterComm.Status)
// return MeterValue.Voltage; // return MeterValue.Voltage;
if (BcsMsg.Valid)
return BcsMsg.ChgVolt;
return - 1; return - 1;
} }
...@@ -160,7 +160,8 @@ void ChgProChgRun(StructChargeCtrl * pChargeCtrl) ...@@ -160,7 +160,8 @@ void ChgProChgRun(StructChargeCtrl * pChargeCtrl)
DcModuleManage.ValidNum += DcModuleGroup[3].ValidNum; DcModuleManage.ValidNum += DcModuleGroup[3].ValidNum;
DcModuleGroup[3].flag = 1; DcModuleGroup[3].flag = 1;
} }
else if (DcModuleGroup[2].status == Valid) else if (DcModuleGroup[2].status == Valid
&& ChargeCtrl_B.CurProcess == eChgPro_ChgIdle)
{ {
DcModuleGroup[2].status = Hold_A; DcModuleGroup[2].status = Hold_A;
DcModuleManage.ValidNum += DcModuleGroup[2].ValidNum; DcModuleManage.ValidNum += DcModuleGroup[2].ValidNum;
......
...@@ -265,12 +265,13 @@ void DcModuleSet(EnumSwitchStatus Set, u16 Volt, u16 Currt) ...@@ -265,12 +265,13 @@ void DcModuleSet(EnumSwitchStatus Set, u16 Volt, u16 Currt)
DcModuleCtrl.NeedVolt = Volt; DcModuleCtrl.NeedVolt = Volt;
DcModuleCtrl.NeedCurrt = Currt; DcModuleCtrl.NeedCurrt = Currt;
GPIO_ResetBits(RELAY_K5K6_Port, RELAY_K5K6_Pin);
if (DcModuleGroup[0].status == Hold_B) if (DcModuleGroup[0].status == Hold_B)
{ {
DcModuleGroup[0].status = Hold_A; DcModuleGroup[0].status = Hold_A;
DcModuleManage_B.ValidNum -= DcModuleGroup[0].ValidNum; DcModuleManage_B.ValidNum -= DcModuleGroup[0].ValidNum;
DcModuleManage.ValidNum += DcModuleGroup[0].ValidNum; DcModuleManage.ValidNum += DcModuleGroup[0].ValidNum;
GPIO_ResetBits(RELAY_K5K6_Port, RELAY_K5K6_Pin);
} }
else if (DcModuleGroup[0].status == Valid) else if (DcModuleGroup[0].status == Valid)
{ {
...@@ -386,12 +387,13 @@ void DcModuleSet_B(EnumSwitchStatus Set, u16 Volt, u16 Currt) ...@@ -386,12 +387,13 @@ void DcModuleSet_B(EnumSwitchStatus Set, u16 Volt, u16 Currt)
DcModuleCtrl_B.NeedVolt = Volt; DcModuleCtrl_B.NeedVolt = Volt;
DcModuleCtrl_B.NeedCurrt = Currt; DcModuleCtrl_B.NeedCurrt = Currt;
GPIO_ResetBits(RELAY_K5K6_Port, RELAY_K5K6_Pin);
if (DcModuleGroup[2].status == Hold_A) if (DcModuleGroup[2].status == Hold_A)
{ {
DcModuleGroup[2].status = Hold_B; DcModuleGroup[2].status = Hold_B;
DcModuleManage.ValidNum -= DcModuleGroup[2].ValidNum; DcModuleManage.ValidNum -= DcModuleGroup[2].ValidNum;
DcModuleManage_B.ValidNum += DcModuleGroup[2].ValidNum; DcModuleManage_B.ValidNum += DcModuleGroup[2].ValidNum;
GPIO_ResetBits(RELAY_K5K6_Port, RELAY_K5K6_Pin);
} }
else if (DcModuleGroup[2].status == Valid) else if (DcModuleGroup[2].status == Valid)
{ {
......
...@@ -446,16 +446,17 @@ void DcModuleCtrlProcess_SmartAllocation(void) ...@@ -446,16 +446,17 @@ void DcModuleCtrlProcess_SmartAllocation(void)
DcModuleGroup[i].flag = 0; DcModuleGroup[i].flag = 0;
} }
} }
else if (DcModuleGroup[i].status == Valid && i != 2 && i != 0) else if (DcModuleGroup[i].status == Valid )
{ {
if (DcModuleGroup[i].Current > 50) //电流小于5A,将降流完成, 可以释放继电器 if (DcModuleGroup[i].Current > 50) //电流小于5A,将降流完成, 可以释放继电器
{ {
Temp++; //if(i != 2 && i != 0)
Temp++;
//for (u8 j = 0; j < DcModuleGroup[i].num; j++) //for (u8 j = 0; j < DcModuleGroup[i].num; j++)
{ {
//addr = DcModuleGroup[i].modules[j].addr; //addr = DcModuleGroup[i].modules[j].addr;
//DcModuleGroup[i].modules[j].cmd = 0xAA; //DcModuleGroup[i].modules[j].cmd = 0xAA;
SendCmdToDcModule(addr, 0xAA); //关机 SendCmdToDcModule(i, 0xAA); //关机
} }
} }
} }
...@@ -466,15 +467,80 @@ void DcModuleCtrlProcess_SmartAllocation(void) ...@@ -466,15 +467,80 @@ void DcModuleCtrlProcess_SmartAllocation(void)
Temp = 0; Temp = 0;
//切换继电器 //切换继电器
for (u8 i = 0; i < DcModuleGroupSize; i++) if(DcModuleGroup[0].status == Hold_A)
{
if(DcModuleGroup[2].status == Hold_A)
GPIO_SetBits(RELAY_K5K6_Port, RELAY_K5K6_Pin);
else
GPIO_ResetBits(RELAY_K5K6_Port, RELAY_K5K6_Pin);
}
else if(DcModuleGroup[0].status == Hold_B)
{
GPIO_SetBits(RELAY_K5K6_Port, RELAY_K5K6_Pin);
}
else
{
GPIO_ResetBits(RELAY_K5K6_Port, RELAY_K5K6_Pin);
}
if(DcModuleGroup[1].status == Hold_A)
{
GPIO_ResetBits(RELAY_K7K8_Port, RELAY_K7K8_Pin);
GPIO_SetBits(RELAY_K1K2_Port, RELAY_K1K2_Pin);
}
else if(DcModuleGroup[1].status == Hold_B)
{
GPIO_ResetBits(RELAY_K1K2_Port, RELAY_K1K2_Pin);
GPIO_SetBits(RELAY_K7K8_Port, RELAY_K7K8_Pin);
}
else
{
GPIO_ResetBits(RELAY_K1K2_Port, RELAY_K1K2_Pin);
GPIO_ResetBits(RELAY_K7K8_Port, RELAY_K7K8_Pin);
}
if(DcModuleGroup[2].status == Hold_A)
{ {
if (status1[i] != DcModuleGroup[i].status) GPIO_SetBits(RELAY_K5K6_Port, RELAY_K5K6_Pin);
}
else if(DcModuleGroup[2].status == Hold_B)
{
if(DcModuleGroup[0].status == Hold_B)
GPIO_SetBits(RELAY_K5K6_Port, RELAY_K5K6_Pin);
else
GPIO_ResetBits(RELAY_K5K6_Port, RELAY_K5K6_Pin);
}
else
{
GPIO_ResetBits(RELAY_K5K6_Port, RELAY_K5K6_Pin);
}
if(DcModuleGroup[3].status == Hold_A)
{
GPIO_ResetBits(RELAY_K9K10_Port, RELAY_K9K10_Pin);
GPIO_SetBits(RELAY_K3K4_Port, RELAY_K3K4_Pin);
}
else if(DcModuleGroup[3].status == Hold_B)
{
GPIO_ResetBits(RELAY_K3K4_Port, RELAY_K3K4_Pin);
GPIO_SetBits(RELAY_K9K10_Port, RELAY_K9K10_Pin);
}
else
{
GPIO_ResetBits(RELAY_K3K4_Port, RELAY_K3K4_Pin);
GPIO_ResetBits(RELAY_K9K10_Port, RELAY_K9K10_Pin);
}
/*for (u8 i = 0; i < DcModuleGroupSize; i++)
{
//if (status1[i] != DcModuleGroup[i].status)
{ {
if (DcModuleGroup[i].status == Valid) if (DcModuleGroup[i].status == Valid)
{ {
//切换继电器 //切换继电器
if (status1[i] == Hold_A) //if (status1[i] == Hold_A)
{ {
if (i == 0) if (i == 0)
{ {
...@@ -493,7 +559,7 @@ void DcModuleCtrlProcess_SmartAllocation(void) ...@@ -493,7 +559,7 @@ void DcModuleCtrlProcess_SmartAllocation(void)
GPIO_ResetBits(RELAY_K3K4_Port, RELAY_K3K4_Pin); GPIO_ResetBits(RELAY_K3K4_Port, RELAY_K3K4_Pin);
} }
} }
else if (status1[i] == Hold_B) //else if (status1[i] == Hold_B)
{ {
if (i == 2) if (i == 2)
{ {
...@@ -560,8 +626,8 @@ void DcModuleCtrlProcess_SmartAllocation(void) ...@@ -560,8 +626,8 @@ void DcModuleCtrlProcess_SmartAllocation(void)
} }
status1[i] = DcModuleGroup[i].status; //status1[i] = DcModuleGroup[i].status;
} }*/
/*if (LastFlag_A != DcModuleCtrl.CtrlFlag) /*if (LastFlag_A != DcModuleCtrl.CtrlFlag)
......
...@@ -6,7 +6,7 @@ ...@@ -6,7 +6,7 @@
#include "Drv_DcModule.h" #include "Drv_DcModule.h"
#include "Drv_BmsComm.h" #include "Drv_BmsComm.h"
#include "Drv_Meter.h" #include "Drv_Meter.h"
#include "Drv_SmartAllocation.h"
void ChgProChgIdle(StructChargeCtrl *pChargeCtrl) void ChgProChgIdle(StructChargeCtrl *pChargeCtrl)
{ {
...@@ -72,6 +72,12 @@ void ChgProChgIdle(StructChargeCtrl *pChargeCtrl) ...@@ -72,6 +72,12 @@ void ChgProChgIdle(StructChargeCtrl *pChargeCtrl)
CcStatusChkTick = 0; CcStatusChkTick = 0;
if(0 != TCUCurChgRecd.TCUChargeEnable) if(0 != TCUCurChgRecd.TCUChargeEnable)
{ {
if(DcModuleGroup[0].status == Hold_B)
{
DcModuleGroup[0].status = Valid;
DcModuleGroup[0].flag = 1;
SendDataToDcModule_A(eSwSta_Off, DcModuleAbility.MinVolt, DcModuleAbility.MinCurrt*DcModuleManage.ValidNum);
}
pChargeCtrl->CurProcess = eChgPro_ShakeHand; pChargeCtrl->CurProcess = eChgPro_ShakeHand;
pChargeCtrl->Param = 0; pChargeCtrl->Param = 0;
} }
......
...@@ -6,6 +6,7 @@ ...@@ -6,6 +6,7 @@
#include "Drv_DcModule.h" #include "Drv_DcModule.h"
#include "Drv_BmsComm.h" #include "Drv_BmsComm.h"
#include "Memory.h" #include "Memory.h"
#include "Drv_SmartAllocation.h"
void ChgProChgIdle_B(StructChargeCtrl_B *pChargeCtrl) void ChgProChgIdle_B(StructChargeCtrl_B *pChargeCtrl)
{ {
...@@ -73,6 +74,12 @@ void ChgProChgIdle_B(StructChargeCtrl_B *pChargeCtrl) ...@@ -73,6 +74,12 @@ void ChgProChgIdle_B(StructChargeCtrl_B *pChargeCtrl)
CcStatusChkTick = 0; CcStatusChkTick = 0;
if(0 != TCUCurChgRecd_B.TCUChargeEnable) if(0 != TCUCurChgRecd_B.TCUChargeEnable)
{ {
if(DcModuleGroup[2].status == Hold_A)
{
DcModuleGroup[2].status = Valid;
DcModuleGroup[2].flag = 1;
SendDataToDcModule_B(eSwSta_Off, DcModuleAbility.MinVolt, DcModuleAbility.MinCurrt*DcModuleManage.ValidNum);
}
pChargeCtrl->CurProcess = eChgPro_B_ShakeHand; pChargeCtrl->CurProcess = eChgPro_B_ShakeHand;
pChargeCtrl->Param = 0; pChargeCtrl->Param = 0;
} }
......
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论