提交 7618bb67 作者: wysheng

重新梳理继电器控制

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