提交 184cd9d2 作者: wysheng

优化智能分配

上级 2d35a47b
...@@ -4,8 +4,7 @@ ...@@ -4,8 +4,7 @@
#include "Global.h" #include "Global.h"
#define DcModule_ZhongXing 1 #define DcModule_ZhongXing 0
#define DcModule_BaudRate (250) #define DcModule_BaudRate (250)
...@@ -78,8 +77,6 @@ typedef struct ...@@ -78,8 +77,6 @@ typedef struct
#define DcModuleMaxCurrt (100) //10A #define DcModuleMaxCurrt (100) //10A
#define DcModuleMinCurrt (5) //1A #define DcModuleMinCurrt (5) //1A
#define DcModuleSinMaxCurrt (2000) #define DcModuleSinMaxCurrt (2000)
#else #else
#define DcModuleMaxVolt (5000)//750V #define DcModuleMaxVolt (5000)//750V
...@@ -93,15 +90,61 @@ typedef enum ...@@ -93,15 +90,61 @@ typedef enum
eSwSta_High, eSwSta_High,
}EnumModuStatus; }EnumModuStatus;
#if DcModule_ZhongXing
typedef union
{
u16 Mult;
struct
{
u16 Reserve1 : 3; //Bit2-Bit0: 预留
u16 GroupType : 1; //Bit3: 分组模式 0x00 --- 固定分组 0x01 --- 动态分组
u16 Fault : 1; //Bit4: 0x01 --- 故障状态, 0x00 --- 正常
u16 Alarm :1; //Bit5: 0x01 --- 告警状态, 0x00 --- 正常
u16 OnOff :2; //Bit7 ~ Bit6: 工作状态 0x01 --- 待机状态 0x02 --- 工作状态
u16 Reserve : 1; //Bit0: 预留
u16 other: 1; //Bit1: 其他故障 0x00 -- 正常 0x01 --- 故障
u16 fan : 1; //Bit2: 风扇故障 0x00 -- 正常 0x01 --- 故障
u16 outShort : 1;//Bit3: 直流输出短路 0x00 -- 正常 0x01 --- 故障
u16 tempOver : 1;//Bit4: 过温 0x00 -- 正常 0x01 --- 故障
u16 outLow : 1; //Bit5: 直流输出欠压 0x00 -- 正常 0x01 --- 故障
u16 outHigh : 1; //Bit6: 直流输出过压故障 0x00 -- 正常 0x01 --- 故障
u16 accIn : 1; //Bit7: 交流输入故障 0x00 -- 正常 0x01 --- 故障
}Value;
}UnionDcModuleStatus;
#else
typedef union
{
u16 Mult;
struct
{
u16 OnOff :1; //0x01 --- 关机状态 0x00 --- 工作状态
u16 Fault : 1; // 0x01 --- 故障状态, 0x00 --- 正常
u16 Alarm : 1; //0x01 --- 模块限流, 0x00 --- 模块恒压
u16 fan : 1; //风扇故障 0x00 -- 正常 0x01 --- 故障
u16 accInHigh : 1; //交流输入过压故障 0x00 -- 正常 0x01 --- 故障
u16 accInLow : 1; //交流输入欠压故障 0x00 -- 正常 0x01 --- 故障
u16 outHigh : 1; //直流输出过压故障 0x00 -- 正常 0x01 --- 故障
u16 outLow : 1; //直流输出欠压 0x00 -- 正常 0x01 --- 故障
u16 outCurrentOver : 1; // 0x00 -- 正常 0x01 --- 过流保护
u16 tempOver : 1; //过温 0x00 -- 正常 0x01 --- 故障
u16 SetOnOff :1; //0x00 -- 设置开机 0x01 --- 设置关机
u16 Reserve1 : 5; //
}Value;
}UnionDcModuleStatus;
#endif
typedef struct typedef struct
{ {
u8 Id; u8 Id;
u8 Temp; u8 Temp;
u16 Volt;//0.1V/Bit; u16 Volt;//0.1V/Bit;
u16 Currt;//0.1A/Bit; u16 Currt;//0.1A/Bit;
u16 State; UnionDcModuleStatus State;
u32 RecvTime; u32 RecvTime;
u16 ModStatus;
}StructDcModuleStatus; }StructDcModuleStatus;
extern StructDcModuleAbility DcModuleAbility; extern StructDcModuleAbility DcModuleAbility;
......
...@@ -463,7 +463,7 @@ StructTCUCControl TCUControlInfo = ...@@ -463,7 +463,7 @@ StructTCUCControl TCUControlInfo =
},//硬件版本 },//硬件版本
.SoftwareVersion = .SoftwareVersion =
{ {
(u8)(__SoftVer__>>8), (u8)(__SoftVer__), 0x00 (u8)(__SoftVer__>>16), (u8)(__SoftVer__>>8), (u8)(__SoftVer__)
},//软件版本 },//软件版本
.SoftwareData = .SoftwareData =
{ {
...@@ -2526,12 +2526,21 @@ void InformationReporting_22_A(void) ...@@ -2526,12 +2526,21 @@ void InformationReporting_22_A(void)
InformainReport_A.InfRe.DcModErr = PillarError.Value.DCmodError; InformainReport_A.InfRe.DcModErr = PillarError.Value.DCmodError;
#if DcModule_ZhongXing
InformainReport_A.InfRe.DCModIn = DcModuleStatus_A.Value.accIn; InformainReport_A.InfRe.DCModIn = DcModuleStatus_A.Value.accIn;
InformainReport_A.InfRe.DCModInHi = 0; //InformainReport_A.InfRe.DCModInHi = 0;
InformainReport_A.InfRe.DCModInLo = 0; //InformainReport_A.InfRe.DCModInLo = 0;
//InformainReport_A.InfRe.DCModPhas = 0; //InformainReport_A.InfRe.DCModPhas = 0;
InformainReport_A.InfRe.DcOutShor = DcModuleStatus_A.Value.outShort; InformainReport_A.InfRe.DcOutShor = DcModuleStatus_A.Value.outShort;
//InformainReport_A.InfRe.DCModOutCuHi = 0; //InformainReport_A.InfRe.DCModOutCuHi = 0;
#else
//InformainReport_A.InfRe.DCModIn = DcModuleStatus_A.Value.accIn;
InformainReport_A.InfRe.DCModInHi = DcModuleStatus_A.Value.accInHigh;
InformainReport_A.InfRe.DCModInLo = DcModuleStatus_A.Value.accInLow;
//InformainReport_A.InfRe.DCModPhas = 0;
//InformainReport_A.InfRe.DcOutShor = DcModuleStatus_A.Value.outShort;
InformainReport_A.InfRe.DCModOutCuHi = DcModuleStatus_A.Value.outCurrentOver;
#endif
InformainReport_A.InfRe.DCModOutVoHi = DcModuleStatus_A.Value.outHigh; InformainReport_A.InfRe.DCModOutVoHi = DcModuleStatus_A.Value.outHigh;
InformainReport_A.InfRe.DCModOutVoLo = DcModuleStatus_A.Value.outLow; InformainReport_A.InfRe.DCModOutVoLo = DcModuleStatus_A.Value.outLow;
...@@ -2659,12 +2668,21 @@ void InformationReporting_22_B(void) ...@@ -2659,12 +2668,21 @@ void InformationReporting_22_B(void)
InformainReport_B.InfRe.DcModErr = PillarError_B.Value.DCmodError; InformainReport_B.InfRe.DcModErr = PillarError_B.Value.DCmodError;
#if DcModule_ZhongXing
InformainReport_B.InfRe.DCModIn = DcModuleStatus_B.Value.accIn; InformainReport_B.InfRe.DCModIn = DcModuleStatus_B.Value.accIn;
//InformainReport_B.InfRe.DCModInHi = 0; //InformainReport_B.InfRe.DCModInHi = 0;
//InformainReport_B.InfRe.DCModInLo = 0; //InformainReport_B.InfRe.DCModInLo = 0;
//InformainReport_B.InfRe.DCModPhas = 0; //InformainReport_B.InfRe.DCModPhas = 0;
InformainReport_B.InfRe.DcOutShor = DcModuleStatus_B.Value.outShort; InformainReport_B.InfRe.DcOutShor = DcModuleStatus_B.Value.outShort;
//InformainReport_B.InfRe.DCModOutCuHi = 0; //InformainReport_B.InfRe.DCModOutCuHi = 0;
#else
//InformainReport_B.InfRe.DCModIn = DcModuleStatus_B.Value.accIn;
InformainReport_B.InfRe.DCModInHi = DcModuleStatus_B.Value.accInHigh;
InformainReport_B.InfRe.DCModInLo = DcModuleStatus_B.Value.accInLow;
//InformainReport_B.InfRe.DCModPhas = 0;
//InformainReport_B.InfRe.DcOutShor = DcModuleStatus_B.Value.outShort;
InformainReport_B.InfRe.DCModOutCuHi = DcModuleStatus_B.Value.outCurrentOver;
#endif
InformainReport_B.InfRe.DCModOutVoHi = DcModuleStatus_B.Value.outHigh; InformainReport_B.InfRe.DCModOutVoHi = DcModuleStatus_B.Value.outHigh;
InformainReport_B.InfRe.DCModOutVoLo = DcModuleStatus_B.Value.outLow; InformainReport_B.InfRe.DCModOutVoLo = DcModuleStatus_B.Value.outLow;
......
...@@ -425,7 +425,7 @@ extern u8 HexToBcd(u8 Hex); ...@@ -425,7 +425,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__ (0x0110) //BCD码 如:V1.02 SoftVer = 0x0102 #define __SoftVer__ (0x010102) //BCD码 如:V1.02 SoftVer = 0x0102
#endif #endif
...@@ -153,26 +153,26 @@ void ChgProChgRun(StructChargeCtrl * pChargeCtrl) ...@@ -153,26 +153,26 @@ void ChgProChgRun(StructChargeCtrl * pChargeCtrl)
if (DcModuleGroup[1].status == Valid) if (DcModuleGroup[1].status == Valid)
{ {
DcModuleGroup[1].status = Hold_A; DcModuleGroup[1].status = Hold_A;
DcModuleManage.ValidNum += DcModuleGroup[1].ValidNum; //DcModuleManage.ValidNum += DcModuleGroup[1].ValidNum;
DcModuleGroup[1].flag = 1; DcModuleGroup[1].flag = 1;
} }
else if (DcModuleGroup[3].status == Valid) else if (DcModuleGroup[3].status == Valid)
{ {
DcModuleGroup[3].status = Hold_A; DcModuleGroup[3].status = Hold_A;
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) && 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;
DcModuleGroup[2].flag = 1; DcModuleGroup[2].flag = 1;
#if (DcModule_ZhongXing == 0) #if (DcModule_ZhongXing == 0)
if (DcModuleGroup[3].status == Hold_A) if (DcModuleGroup[3].status == Hold_A)
{ {
DcModuleGroup[3].status = Valid; DcModuleGroup[3].status = Valid;
DcModuleManage.ValidNum -= DcModuleGroup[3].ValidNum; //DcModuleManage.ValidNum -= DcModuleGroup[3].ValidNum;
} }
#endif #endif
} }
...@@ -182,17 +182,17 @@ void ChgProChgRun(StructChargeCtrl * pChargeCtrl) ...@@ -182,17 +182,17 @@ void ChgProChgRun(StructChargeCtrl * pChargeCtrl)
if (DcModuleGroup[2].status == Hold_A) if (DcModuleGroup[2].status == Hold_A)
{ {
DcModuleGroup[2].status = Valid; DcModuleGroup[2].status = Valid;
DcModuleManage.ValidNum -= DcModuleGroup[2].ValidNum; //DcModuleManage.ValidNum -= DcModuleGroup[2].ValidNum;
} }
else if (DcModuleGroup[3].status == Hold_A) else if (DcModuleGroup[3].status == Hold_A)
{ {
DcModuleGroup[3].status = Valid; DcModuleGroup[3].status = Valid;
DcModuleManage.ValidNum -= DcModuleGroup[3].ValidNum; //DcModuleManage.ValidNum -= DcModuleGroup[3].ValidNum;
} }
else if (DcModuleGroup[1].status == Hold_A) else if (DcModuleGroup[1].status == Hold_A)
{ {
DcModuleGroup[1].status = Valid; DcModuleGroup[1].status = Valid;
DcModuleManage.ValidNum -= DcModuleGroup[1].ValidNum; //DcModuleManage.ValidNum -= DcModuleGroup[1].ValidNum;
} }
} }
......
...@@ -29,7 +29,7 @@ StructDcModuleManage DcModuleManage; ...@@ -29,7 +29,7 @@ StructDcModuleManage DcModuleManage;
StructDcModuleManage DcModuleManage_B; StructDcModuleManage DcModuleManage_B;
StructDcModuleManage DcModuleManage_All; StructDcModuleManage DcModuleManage_All;
StructDcModuleStatus DcModuleStatus_ALL[64]; StructDcModuleStatus DcModuleStatus_ALL[16];
StructDcModuleCtrl DcModuleCtrl; StructDcModuleCtrl DcModuleCtrl;
StructDcModuleCtrl DcModuleCtrl_B; StructDcModuleCtrl DcModuleCtrl_B;
...@@ -320,7 +320,7 @@ void DcModule(void const * parameter) ...@@ -320,7 +320,7 @@ void DcModule(void const * parameter)
{ {
DcModeleRelayInit(); DcModeleRelayInit();
DCModuleRelayOutChkInit(); DCModuleRelayOutChkInit();
osDelay(6000); //osDelay(6000);
DcModuleCanInit(); DcModuleCanInit();
//ACContactorSet(eSwSta_On); //ACContactorSet(eSwSta_On);
...@@ -348,7 +348,7 @@ void DcModule(void const * parameter) ...@@ -348,7 +348,7 @@ void DcModule(void const * parameter)
} }
} }
RelayStatusCheck(); //RelayStatusCheck();
DcModuleManageProcess_SmartAllocation(); DcModuleManageProcess_SmartAllocation();
...@@ -735,7 +735,7 @@ void DcModuleMsgReceive_ZhongXing(CanRxMsg* RxMsg) ...@@ -735,7 +735,7 @@ void DcModuleMsgReceive_ZhongXing(CanRxMsg* RxMsg)
DcModuleManage_All.OnlineFlag |= ((long long) 1 << (addr&0x0f)); DcModuleManage_All.OnlineFlag |= ((long long) 1 << (addr&0x0f));
Data.Currt = (((u16) RxMsg->Data[4] << 8) +RxMsg->Data[5])/10; Data.Currt = (((u16) RxMsg->Data[4] << 8) +RxMsg->Data[5])/10;
Data.Volt = ((u16) RxMsg->Data[2] << 8) +RxMsg->Data[3]; Data.Volt = ((u16) RxMsg->Data[2] << 8) +RxMsg->Data[3];
Data.State = ((u16) RxMsg->Data[1] << 8) +RxMsg->Data[0]; Data.State.Mult = ((u16) RxMsg->Data[1] << 8) +RxMsg->Data[0];
Data.RecvTime = GetSystemTick(); Data.RecvTime = GetSystemTick();
Data.Temp = RxMsg->Data[6]; //当前组号 Data.Temp = RxMsg->Data[6]; //当前组号
DcModuleStatus_ALL[Data.Id] = Data; DcModuleStatus_ALL[Data.Id] = Data;
...@@ -751,12 +751,12 @@ void DcModuleMsgReceive_Incre(CanRxMsg* RxMsg) ...@@ -751,12 +751,12 @@ void DcModuleMsgReceive_Incre(CanRxMsg* RxMsg)
DcModuleManage_All.OnlineFlag |= ((long long) 1 << Data.Id); DcModuleManage_All.OnlineFlag |= ((long long) 1 << Data.Id);
Data.Currt = ((u32) RxMsg->Data[2] << 8) +RxMsg->Data[3]; Data.Currt = ((u32) RxMsg->Data[2] << 8) +RxMsg->Data[3];
Data.Volt = ((u32) RxMsg->Data[4] << 8) +RxMsg->Data[5]; Data.Volt = ((u32) RxMsg->Data[4] << 8) +RxMsg->Data[5];
Data.State = ((u32) RxMsg->Data[6] << 8) +RxMsg->Data[7]; Data.State.Mult = ((u32) RxMsg->Data[6] << 8) +RxMsg->Data[7];
Data.RecvTime = GetSystemTick(); Data.RecvTime = GetSystemTick();
DcModuleStatus_ALL[Data.Id] = Data; DcModuleStatus_ALL[Data.Id] = Data;
} }
GetNXRAcVolt(RxMsg); //GetNXRAcVolt(RxMsg);
} }
void DcModuleMsgReceive(CanRxMsg* RxMsg) void DcModuleMsgReceive(CanRxMsg* RxMsg)
......
...@@ -64,7 +64,6 @@ void SendCmdToDcModule(u8 addr, u8 cmd); ...@@ -64,7 +64,6 @@ void SendCmdToDcModule(u8 addr, u8 cmd);
void SendDataToDcModule(u8 addr, u8 cmd, u32 volt, u32 current); void SendDataToDcModule(u8 addr, u8 cmd, u32 volt, u32 current);
void SendCheckToDcModule(void); void SendCheckToDcModule(void);
void DcModuleGroupDateInit(void); void DcModuleGroupDateInit(void);
u8 DcModuleGetStatus(u8 addr);
void DcModuleSetGroupNum(void); void DcModuleSetGroupNum(void);
extern void GetNXRAcVoltMsg(u32 addr); extern void GetNXRAcVoltMsg(u32 addr);
...@@ -111,7 +110,7 @@ void DcModuleManageProcess_SmartAllocation(void) ...@@ -111,7 +110,7 @@ void DcModuleManageProcess_SmartAllocation(void)
} }
else else
{ {
if (DcModuleGetStatus(i)/*0x0002 != (DcModuleStatus_ALL[i].State & 0x0002)*/) if (DcModuleStatus_ALL[i].State.Value.Fault != 0x01)
{ {
DcModuleManage_All.ValidFlag |= Flag; DcModuleManage_All.ValidFlag |= Flag;
Count++; Count++;
...@@ -129,7 +128,7 @@ void DcModuleManageProcess_SmartAllocation(void) ...@@ -129,7 +128,7 @@ void DcModuleManageProcess_SmartAllocation(void)
if(GetSystemTick() - GetAcVoltTick > 1000) if(GetSystemTick() - GetAcVoltTick > 1000)
{ {
GetAcVoltTick = GetSystemTick(); GetAcVoltTick = GetSystemTick();
GetNXRAcVoltMsg(1); //GetNXRAcVoltMsg(1);
} }
} }
...@@ -147,7 +146,7 @@ void DcModuleManageProcess_SmartAllocation(void) ...@@ -147,7 +146,7 @@ void DcModuleManageProcess_SmartAllocation(void)
addr = DcModuleGroup[i].modules[j].addr; addr = DcModuleGroup[i].modules[j].addr;
Flag = 1 << addr; Flag = 1 << addr;
DcModuleGroup[i].modules[j].status = DcModuleStatus_ALL[addr].State; DcModuleGroup[i].modules[j].status.Mult = DcModuleStatus_ALL[addr].State.Mult;
if (Flag & DcModuleManage_All.ValidFlag) if (Flag & DcModuleManage_All.ValidFlag)
{ {
...@@ -259,16 +258,12 @@ void DcModuleManageProcess_SmartAllocation(void) ...@@ -259,16 +258,12 @@ void DcModuleManageProcess_SmartAllocation(void)
} }
//u32 look_temp = 0;
//u32 maxSetCurr = 0;
//u32 maxSetCurr_B = 0;
void DcModuleCtrlProcess_SmartAllocation(void) void DcModuleCtrlProcess_SmartAllocation(void)
{ {
static u32 CtrlTick = 0; static u32 CtrlTick = 0;
static u8 LastFlag_A = 0; static u8 LastFlag_A = 0;
static u8 LastFlag_B = 0; static u8 LastFlag_B = 0;
u32 Temp = 0;
static u32 Tick = 0; // static u32 Tick = 0; //
if ((GetSystemTick() -Tick) < 100) if ((GetSystemTick() -Tick) < 100)
...@@ -277,7 +272,7 @@ void DcModuleCtrlProcess_SmartAllocation(void) ...@@ -277,7 +272,7 @@ void DcModuleCtrlProcess_SmartAllocation(void)
} }
Tick = GetSystemTick(); Tick = GetSystemTick();
static StructDcModuleUsedStatus status[4] = /*static StructDcModuleUsedStatus status[4] =
{ {
Invalid, Invalid, Invalid, Invalid Invalid, Invalid, Invalid, Invalid
}; };
...@@ -286,13 +281,10 @@ void DcModuleCtrlProcess_SmartAllocation(void) ...@@ -286,13 +281,10 @@ void DcModuleCtrlProcess_SmartAllocation(void)
Invalid, Invalid, Invalid, Invalid Invalid, Invalid, Invalid, Invalid
}; };
u32 Temp;
u8 addr; u8 addr;
u32 Volt = 0; u32 Volt = 0;
u8 Cmd = 0; u8 Cmd = 0;
u32 Current = 0; u32 Current = 0;
Temp = 0;
for (u8 i = 0; i < DcModuleGroupSize; i++) for (u8 i = 0; i < DcModuleGroupSize; i++)
...@@ -390,13 +382,7 @@ void DcModuleCtrlProcess_SmartAllocation(void) ...@@ -390,13 +382,7 @@ void DcModuleCtrlProcess_SmartAllocation(void)
continue; continue;
} }
//for (u8 j = 0; j < DcModuleGroup[i].num; j++)
{
//addr = DcModuleGroup[i].modules[j].addr;
//DcModuleGroup[i].modules[j].cmd = Cmd;
SendDataToDcModule(i, Cmd, Volt, Current); SendDataToDcModule(i, Cmd, Volt, Current);
}
status[i] = DcModuleGroup[i].status; status[i] = DcModuleGroup[i].status;
} }
...@@ -404,7 +390,7 @@ void DcModuleCtrlProcess_SmartAllocation(void) ...@@ -404,7 +390,7 @@ void DcModuleCtrlProcess_SmartAllocation(void)
if (Temp) if (Temp)
return; return;
Temp = 0; Temp = 0;*/
//检测升压 或者 降流 //检测升压 或者 降流
for (u8 i = 0; i < DcModuleGroupSize; i++) for (u8 i = 0; i < DcModuleGroupSize; i++)
...@@ -414,17 +400,10 @@ void DcModuleCtrlProcess_SmartAllocation(void) ...@@ -414,17 +400,10 @@ void DcModuleCtrlProcess_SmartAllocation(void)
if (abs((s16) (DcModuleGroup[i].Voltage) - (s16) (DcModuleManage.SetVolt / 100)) > 100) //差距在10V以内,升压完成 if (abs((s16) (DcModuleGroup[i].Voltage) - (s16) (DcModuleManage.SetVolt / 100)) > 100) //差距在10V以内,升压完成
{ {
Temp++; Temp++;
//for (u8 j = 0; j < DcModuleGroup[i].num; j++)
{
//addr = DcModuleGroup[i].modules[j].addr;
DcModuleManage.Cmd = 0x55; //开机 DcModuleManage.Cmd = 0x55; //开机
//DcModuleGroup[i].modules[j].cmd = 0x55;
SendDataToDcModule(i, DcModuleManage.Cmd, DcModuleManage.SetVolt, SendDataToDcModule(i, DcModuleManage.Cmd, DcModuleManage.SetVolt,
DcModuleAbility.MinCurrt * 100); DcModuleAbility.MinCurrt * 100);
} }
}
else else
{ {
...@@ -439,15 +418,11 @@ void DcModuleCtrlProcess_SmartAllocation(void) ...@@ -439,15 +418,11 @@ void DcModuleCtrlProcess_SmartAllocation(void)
{ {
Temp++; Temp++;
//for (u8 j = 0; j < DcModuleGroup[i].num; j++)
{
//addr = DcModuleGroup[i].modules[j].addr;
DcModuleManage_B.Cmd = 0x55; //开机 DcModuleManage_B.Cmd = 0x55; //开机
//DcModuleGroup[i].modules[j].cmd = 0x55;
SendDataToDcModule(i, DcModuleManage_B.Cmd, DcModuleManage_B.SetVolt, SendDataToDcModule(i, DcModuleManage_B.Cmd, DcModuleManage_B.SetVolt,
DcModuleAbility.MinCurrt * 100); DcModuleAbility.MinCurrt * 100);
}
} }
else else
{ {
...@@ -458,15 +433,14 @@ void DcModuleCtrlProcess_SmartAllocation(void) ...@@ -458,15 +433,14 @@ void DcModuleCtrlProcess_SmartAllocation(void)
{ {
if (DcModuleGroup[i].Current > 50) //电流小于5A,将降流完成, 可以释放继电器 if (DcModuleGroup[i].Current > 50) //电流小于5A,将降流完成, 可以释放继电器
{ {
//if(i != 2 && i != 0)
Temp++; Temp++;
//for (u8 j = 0; j < DcModuleGroup[i].num; j++) //SendCmdToDcModule(i, 0xAA); //关机
{ //SendDataToDcModule(i, 0xAA, DcModuleAbility.MinVolt * 100, DcModuleAbility.MinCurrt * 100);
//addr = DcModuleGroup[i].modules[j].addr;
//DcModuleGroup[i].modules[j].cmd = 0xAA;
SendCmdToDcModule(i, 0xAA); //关机
}
} }
if(DcModuleGroup[i].modules[0].status.Value.OnOff == DCModuleStatusOn)
SendDataToDcModule(i, 0xAA, DcModuleAbility.MinVolt * 100, DcModuleAbility.MinCurrt * 100);
//DcModuleGroup[i].flag = 0;
} }
} }
...@@ -724,18 +698,16 @@ void DcModuleCtrlProcess_SmartAllocation(void) ...@@ -724,18 +698,16 @@ void DcModuleCtrlProcess_SmartAllocation(void)
if (DcModuleGroup[i].status != Hold_A) if (DcModuleGroup[i].status != Hold_A)
continue; continue;
//for (u8 j = 0; j < DcModuleGroup[i].num; j++)
{
//addr = DcModuleGroup[i].modules[j].addr;
DcModuleManage.Cmd = 0x55; //开机 DcModuleManage.Cmd = 0x55; //开机
//DcModuleGroup[i].modules[j].cmd = 0x55;
SendDataToDcModule(i, DcModuleManage.Cmd, DcModuleManage.SetVolt, DcModuleManage.SetCurrt); SendDataToDcModule(i, DcModuleManage.Cmd, DcModuleManage.SetVolt, DcModuleManage.SetCurrt);
} }
} }
}
else else
{ {
DcModuleManage.Cmd = 0xAA;
DcModuleManage.SetCurrt = (DcModuleAbility.MinCurrt * 100);
DcModuleManage.SetVolt = (DcModuleAbility.MinVolt * 100);
} }
if (DcModuleCtrl_B.CtrlFlag) if (DcModuleCtrl_B.CtrlFlag)
...@@ -788,21 +760,18 @@ void DcModuleCtrlProcess_SmartAllocation(void) ...@@ -788,21 +760,18 @@ void DcModuleCtrlProcess_SmartAllocation(void)
if (DcModuleGroup[i].status != Hold_B) if (DcModuleGroup[i].status != Hold_B)
continue; continue;
//for (u8 j = 0; j < DcModuleGroup[i].num; j++)
{
//addr = DcModuleGroup[i].modules[j].addr;
DcModuleManage_B.Cmd = 0x55; //开机 DcModuleManage_B.Cmd = 0x55; //开机
//DcModuleGroup[i].modules[j].cmd = 0x55;
SendDataToDcModule(i, DcModuleManage_B.Cmd, DcModuleManage_B.SetVolt, SendDataToDcModule(i, DcModuleManage_B.Cmd, DcModuleManage_B.SetVolt,
DcModuleManage_B.SetCurrt); DcModuleManage_B.SetCurrt);
} }
}
} }
else else
{ {
DcModuleManage_B.Cmd = 0xAA;
DcModuleManage_B.SetCurrt = (DcModuleAbility.MinCurrt * 100);
DcModuleManage_B.SetVolt = (DcModuleAbility.MinVolt * 100);
} }
...@@ -835,11 +804,9 @@ void release_DcModule(u8 flag) ...@@ -835,11 +804,9 @@ void release_DcModule(u8 flag)
} }
void SendDataToDcModule_Incre(u8 group_index, u8 cmd, u32 volt, u32 current) /*void SendCmdToDcModule_Incre(u8 group_index, u8 cmd)
{ {
StructDcModuleSend DataSend; StructDcModuleSend DataSend;
u32 Temp = 0;
u8 addr = 0; u8 addr = 0;
if(group_index > 3) if(group_index > 3)
...@@ -849,50 +816,97 @@ void SendDataToDcModule_Incre(u8 group_index, u8 cmd, u32 volt, u32 current) ...@@ -849,50 +816,97 @@ void SendDataToDcModule_Incre(u8 group_index, u8 cmd, u32 volt, u32 current)
{ {
addr = DcModuleGroup[group_index].modules[j].addr; addr = DcModuleGroup[group_index].modules[j].addr;
DcModuleGroup[group_index].modules[j].cmd = cmd; DcModuleGroup[group_index].modules[j].cmd = cmd;
DcModuleGroup[group_index].modules[j].VoltageSet = volt;
DcModuleGroup[group_index].modules[j].CurrentSet = current;
DataSend.Id = 0x1307C080 + addr; DataSend.Id = 0x1307C080 + addr;
DataSend.Len = 8; DataSend.Len = 8;
DataSend.Data[0] = 0x00; DataSend.Data[0] = 0x02;
DataSend.Data[1] = 0x00; DataSend.Data[1] = 0x00;
//if(current != 0) DataSend.Data[2] = 0x00;
DataSend.Data[3] = 0x00;
DataSend.Data[4] = 0x00;
DataSend.Data[5] = 0x00;
DataSend.Data[6] = 0x00;
DataSend.Data[7] = cmd;
//放入队列
if (pdTRUE != xQueueSend(DcModeMsg, &DataSend, 0))
{ {
Temp = current; //osDelay(10);
DataSend.Data[2] = (u8) (Temp >> 8); }
DataSend.Data[3] = (u8) (Temp >> 0); }
Temp = volt;
DataSend.Data[4] = (u8) (Temp >> 24); }
DataSend.Data[5] = (u8) (Temp >> 16);
DataSend.Data[6] = (u8) (Temp >> 8); void SendCmdToDcModule_ZhongXing(u8 group_index, u8 cmd)
DataSend.Data[7] = (u8) (Temp >> 0); {
}
void SendCmdToDcModule(u8 addr, u8 cmd)
{
#if DcModule_ZhongXing
//SendCmdToDcModule_ZhongXing(addr,cmd);
SendDataToDcModule_ZhongXing(addr,cmd,0,0);
#else
SendCmdToDcModule_Incre(addr,cmd);
#endif
}*/
#if DcModule_ZhongXing
void DcModuleSetGroupNum(void) //中兴模块分组设置
{
StructDcModuleSend DataSend;
u16 addr = 0;
for(u8 i=0;i<DcModuleGroupSize;i++)
{
for(u8 j=0;j<DcModuleGroup[i].num;j++)
{
addr = DcModuleGroup[i].modules[j].addr;
DataSend.Id = 0x180460A0 | (addr<<8);
DataSend.Len = 8;
DataSend.Data[0] = 0x28;
DataSend.Data[1] = i + 1;
DataSend.Data[2] = 0x02;
DataSend.Data[3] = 0x60 | DcModuleGroup[i].modules[0].addr;
DataSend.Data[4] = 0x60 | DcModuleGroup[i].modules[1].addr;
DataSend.Data[5] = 0x00;
DataSend.Data[6] = 0x00;
DataSend.Data[7] = 0x00;
//DcModuleSendMsg(&DataSend);
//放入队列 //放入队列
if (pdTRUE != xQueueSend(DcModeMsg, &DataSend, 0)) if (pdTRUE != xQueueSend(DcModeMsg, &DataSend, 0))
{ {
//osDelay(10); //osDelay(10);
} }
} }
}
}
DataSend.Id = 0x1307C080 + addr; void DcModuleCancelGroupNum(u16 addr)
{
//改为动态分组
StructDcModuleSend DataSend;
DataSend.Id = 0x180260A0 | (addr<<8);
DataSend.Len = 8; DataSend.Len = 8;
DataSend.Data[0] = 0x02; DataSend.Data[0] = 0x00;
DataSend.Data[1] = 0x00; DataSend.Data[1] = 0x0E;
DataSend.Data[2] = 0x00; DataSend.Data[2] = 0x03;
DataSend.Data[3] = 0x00; DataSend.Data[3] = 0x00;
DataSend.Data[4] = 0x00; DataSend.Data[4] = 0x00;
DataSend.Data[5] = 0x00; DataSend.Data[5] = 0x00;
DataSend.Data[6] = 0x00; DataSend.Data[6] = 0x00;
DataSend.Data[7] = cmd; DataSend.Data[7] = 0x02;
//DcModuleSendMsg(&DataSend);
//放入队列 //放入队列
if (pdTRUE != xQueueSend(DcModeMsg, &DataSend, 0)) if (pdTRUE != xQueueSend(DcModeMsg, &DataSend, 0))
{ {
//osDelay(10); //osDelay(10);
} }
}
} }
void SendDataToDcModule_ZhongXing(u8 group_index, u8 cmd, u32 volt, u32 current) void SendDataToDcModule_ZhongXing(u8 group_index, u8 cmd, u32 volt, u32 current)
{ {
...@@ -974,39 +988,47 @@ void SendDataToDcModule_ZhongXing(u8 group_index, u8 cmd, u32 volt, u32 current) ...@@ -974,39 +988,47 @@ void SendDataToDcModule_ZhongXing(u8 group_index, u8 cmd, u32 volt, u32 current)
} }
void SendDataToDcModule(u8 addr, u8 cmd, u32 volt, u32 current) void SendCheckToDcModule_ZhongXing(void)
{ {
#if DcModule_ZhongXing //心跳帧
SendDataToDcModule_ZhongXing(addr,cmd,volt,current); StructDcModuleSend DataSend;
#else u16 addr = 0;
SendDataToDcModule_Incre(addr,cmd,volt,current); static u32 StaticTick = 0;
#endif
}
if ((GetSystemTick() -StaticTick) > 2000)
{
StaticTick = GetSystemTick();
void SendCmdToDcModule_Incre(u8 group_index, u8 cmd) for (u8 i = 0; i < DcModuleGroupSize; i++)
{ {
StructDcModuleSend DataSend;
u8 addr = 0;
if(group_index > 3) for (u8 j = 0; j < DcModuleGroup[i].num; j++)
return; {
addr = DcModuleGroup[i].modules[j].addr;
for (u8 j = 0; j < DcModuleGroup[group_index].num; j++) if(DcModuleStatus_ALL[addr].State.Value.GroupType == 0x00)
{ {
addr = DcModuleGroup[group_index].modules[j].addr; DcModuleCancelGroupNum(addr);
DcModuleGroup[group_index].modules[j].cmd = cmd; }
DataSend.Id = 0x1307C080 + addr;
if(DcModuleStatus_ALL[addr].Temp == 0)//未分组
{
DcModuleSetGroupNum();
//return;//continue;
}
DataSend.Id = 0x180160A0 | (addr<<8);
DataSend.Len = 8; DataSend.Len = 8;
DataSend.Data[0] = 0x02; DataSend.Data[0] = 0x00;
DataSend.Data[1] = 0x00; DataSend.Data[1] = 0x00;
DataSend.Data[2] = 0x00; DataSend.Data[2] = 0x00;
DataSend.Data[3] = 0x00; DataSend.Data[3] = 0x00;
DataSend.Data[4] = 0x00; DataSend.Data[4] = 0x00;
DataSend.Data[5] = 0x00; DataSend.Data[5] = 0x00;
DataSend.Data[6] = 0x00; DataSend.Data[6] = 0x00;
DataSend.Data[7] = cmd; DataSend.Data[7] = 0x00;
//DcModuleSendMsg(&DataSend);
//放入队列 //放入队列
if (pdTRUE != xQueueSend(DcModeMsg, &DataSend, 0)) if (pdTRUE != xQueueSend(DcModeMsg, &DataSend, 0))
{ {
...@@ -1014,96 +1036,111 @@ void SendCmdToDcModule_Incre(u8 group_index, u8 cmd) ...@@ -1014,96 +1036,111 @@ void SendCmdToDcModule_Incre(u8 group_index, u8 cmd)
} }
} }
}
}
} }
void SendCmdToDcModule_ZhongXing(u8 group_index, u8 cmd)
void DcModuleGroupDateInit_ZhongXing(void)
{ {
memset(&DcModuleGroup,0,sizeof(DcModuleGroup));
DcModuleGroup[0].num = 2;
DcModuleGroup[1].num = 2;
DcModuleGroup[2].num = 2;
DcModuleGroup[3].num = 2;
} DcModuleGroup[0].modules[0].addr = 0x00;
DcModuleGroup[0].modules[1].addr = 0x01;
void SendCmdToDcModule(u8 addr, u8 cmd) DcModuleGroup[1].modules[0].addr = 0x02;
{ DcModuleGroup[1].modules[1].addr = 0x03;
#if DcModule_ZhongXing
//SendCmdToDcModule_ZhongXing(addr,cmd);
SendDataToDcModule_ZhongXing(addr,cmd,0,0);
#else
SendCmdToDcModule_Incre(addr,cmd);
#endif
}
DcModuleGroup[2].modules[0].addr = 0x04;
DcModuleGroup[2].modules[1].addr = 0x05;
void SendCheckToDcModule_Incre(void) DcModuleGroup[3].modules[0].addr = 0x06;
DcModuleGroup[3].modules[1].addr = 0x07;
}
#else
void SendDataToDcModule_Incre(u8 group_index, u8 cmd, u32 volt, u32 current)
{ {
StructDcModuleSend DataSend; StructDcModuleSend DataSend;
u32 Temp = 0;
u8 addr = 0; u8 addr = 0;
static u32 StaticTick = 0;
if ((GetSystemTick() -StaticTick) > 1000) if(group_index > 3)
return;
for (u8 j = 0; j < DcModuleGroup[group_index].num; j++)
{ {
StaticTick = GetSystemTick(); addr = DcModuleGroup[group_index].modules[j].addr;
DcModuleGroup[group_index].modules[j].cmd = cmd;
DcModuleGroup[group_index].modules[j].VoltageSet = volt;
DcModuleGroup[group_index].modules[j].CurrentSet = current;
for (u8 i = 0; i < DcModuleGroupSize; i++) //if(cmd != 0xAA)
{ {
for (u8 j = 0; j < DcModuleGroup[i].num; j++) DataSend.Id = 0x1307C080 + addr;
DataSend.Len = 8;
DataSend.Data[0] = 0x00;
DataSend.Data[1] = 0x00;
Temp = current;
DataSend.Data[2] = (u8) (Temp >> 8);
DataSend.Data[3] = (u8) (Temp >> 0);
Temp = volt;
DataSend.Data[4] = (u8) (Temp >> 24);
DataSend.Data[5] = (u8) (Temp >> 16);
DataSend.Data[6] = (u8) (Temp >> 8);
DataSend.Data[7] = (u8) (Temp >> 0);
//放入队列
if (pdTRUE != xQueueSend(DcModeMsg, &DataSend, 0))
{ {
addr = DcModuleGroup[i].modules[j].addr; //osDelay(10);
}
}
DataSend.Id = 0x1307C080 + addr; DataSend.Id = 0x1307C080 + addr;
DataSend.Len = 8; DataSend.Len = 8;
DataSend.Data[0] = 0x01; DataSend.Data[0] = 0x02;
DataSend.Data[1] = 0x00; DataSend.Data[1] = 0x00;
DataSend.Data[2] = 0x00; DataSend.Data[2] = 0x00;
DataSend.Data[3] = 0x00; DataSend.Data[3] = 0x00;
DataSend.Data[4] = 0x00; DataSend.Data[4] = 0x00;
DataSend.Data[5] = 0x00; DataSend.Data[5] = 0x00;
DataSend.Data[6] = 0x00; DataSend.Data[6] = 0x00;
DataSend.Data[7] = 0x00; DataSend.Data[7] = cmd;
//DcModuleSendMsg(&DataSend);
//放入队列 //放入队列
if (pdTRUE != xQueueSend(DcModeMsg, &DataSend, 0)) if (pdTRUE != xQueueSend(DcModeMsg, &DataSend, 0))
{ {
osDelay(10); //osDelay(10);
}
}
} }
} }
} }
void SendCheckToDcModule_ZhongXing(void) void SendCheckToDcModule_Incre(void)
{ {
//心跳帧
StructDcModuleSend DataSend; StructDcModuleSend DataSend;
u16 addr = 0; u8 addr = 0;
static u32 StaticTick = 0; static u32 StaticTick = 0;
if ((GetSystemTick() -StaticTick) > 2000) if ((GetSystemTick() -StaticTick) > 1000)
{ {
StaticTick = GetSystemTick(); StaticTick = GetSystemTick();
for (u8 i = 0; i < DcModuleGroupSize; i++) for (u8 i = 0; i < DcModuleGroupSize; i++)
{ {
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;
if(DcModuleStatus_ALL[addr].State&0x0080 == 0x0000) DataSend.Id = 0x1307C080 + addr;
{
DcModuleCancelGroupNum(addr);
}
if(DcModuleStatus_ALL[addr].Temp == 0)//未分组
{
DcModuleSetGroupNum();
//return;//continue;
}
DataSend.Id = 0x180160A0 | (addr<<8);
DataSend.Len = 8; DataSend.Len = 8;
DataSend.Data[0] = 0x00; DataSend.Data[0] = 0x01;
DataSend.Data[1] = 0x00; DataSend.Data[1] = 0x00;
DataSend.Data[2] = 0x00; DataSend.Data[2] = 0x00;
DataSend.Data[3] = 0x00; DataSend.Data[3] = 0x00;
...@@ -1122,17 +1159,10 @@ void SendCheckToDcModule_ZhongXing(void) ...@@ -1122,17 +1159,10 @@ void SendCheckToDcModule_ZhongXing(void)
} }
} }
}
void SendCheckToDcModule(void)
{
#if DcModule_ZhongXing
SendCheckToDcModule_ZhongXing();
#else
SendCheckToDcModule_Incre();
#endif
} }
void DcModuleGroupDateInit_Incre(void) void DcModuleGroupDateInit_Incre(void)
{ {
memset(&DcModuleGroup,0,sizeof(DcModuleGroup)); memset(&DcModuleGroup,0,sizeof(DcModuleGroup));
...@@ -1152,25 +1182,15 @@ void DcModuleGroupDateInit_Incre(void) ...@@ -1152,25 +1182,15 @@ void DcModuleGroupDateInit_Incre(void)
DcModuleGroup[3].modules[0].addr = 0x06; DcModuleGroup[3].modules[0].addr = 0x06;
} }
void DcModuleGroupDateInit_ZhongXing(void) #endif
{
memset(&DcModuleGroup,0,sizeof(DcModuleGroup));
DcModuleGroup[0].num = 2;
DcModuleGroup[1].num = 2;
DcModuleGroup[2].num = 2;
DcModuleGroup[3].num = 2;
DcModuleGroup[0].modules[0].addr = 0x00;
DcModuleGroup[0].modules[1].addr = 0x01;
DcModuleGroup[1].modules[0].addr = 0x02;
DcModuleGroup[1].modules[1].addr = 0x03;
DcModuleGroup[2].modules[0].addr = 0x04;
DcModuleGroup[2].modules[1].addr = 0x05;
DcModuleGroup[3].modules[0].addr = 0x06; void SendCheckToDcModule(void)
DcModuleGroup[3].modules[1].addr = 0x07; {
#if DcModule_ZhongXing
SendCheckToDcModule_ZhongXing();
#else
SendCheckToDcModule_Incre();
#endif
} }
...@@ -1183,95 +1203,16 @@ void DcModuleGroupDateInit(void) ...@@ -1183,95 +1203,16 @@ void DcModuleGroupDateInit(void)
#endif #endif
} }
u8 DcModuleGetStatus_Incre(u8 addr) void SendDataToDcModule(u8 addr, u8 cmd, u32 volt, u32 current)
{
if(0x0002 != (DcModuleStatus_ALL[addr].State & 0x0002))
{
return TRUE;
}
else
{
return FALSE;
}
}
u8 DcModuleGetStatus_ZhongXing(u8 addr)
{
if(0x0010 != (DcModuleStatus_ALL[addr].State & 0x0010))
{
return TRUE;
}
else
{
return FALSE;
}
}
u8 DcModuleGetStatus(u8 addr)
{ {
#if DcModule_ZhongXing #if DcModule_ZhongXing
return DcModuleGetStatus_ZhongXing(addr); SendDataToDcModule_ZhongXing(addr,cmd,volt,current);
#else #else
return DcModuleGetStatus_Incre(addr); SendDataToDcModule_Incre(addr,cmd,volt,current);
#endif #endif
} }
void DcModuleSetGroupNum(void) //中兴模块分组设置
{
StructDcModuleSend DataSend;
u16 addr = 0;
for(u8 i=0;i<DcModuleGroupSize;i++)
{
for(u8 j=0;j<DcModuleGroup[i].num;j++)
{
addr = DcModuleGroup[i].modules[j].addr;
DataSend.Id = 0x180460A0 | (addr<<8);
DataSend.Len = 8;
DataSend.Data[0] = 0x28;
DataSend.Data[1] = i + 1;
DataSend.Data[2] = 0x02;
DataSend.Data[3] = 0x60 | DcModuleGroup[i].modules[0].addr;
DataSend.Data[4] = 0x60 | DcModuleGroup[i].modules[1].addr;
DataSend.Data[5] = 0x00;
DataSend.Data[6] = 0x00;
DataSend.Data[7] = 0x00;
//DcModuleSendMsg(&DataSend);
//放入队列
if (pdTRUE != xQueueSend(DcModeMsg, &DataSend, 0))
{
//osDelay(10);
}
}
}
}
void DcModuleCancelGroupNum(u16 addr)
{
//改为动态分组
StructDcModuleSend DataSend;
DataSend.Id = 0x180260A0 | (addr<<8);
DataSend.Len = 8;
DataSend.Data[0] = 0x00;
DataSend.Data[1] = 0x0E;
DataSend.Data[2] = 0x03;
DataSend.Data[3] = 0x00;
DataSend.Data[4] = 0x00;
DataSend.Data[5] = 0x00;
DataSend.Data[6] = 0x00;
DataSend.Data[7] = 0x02;
//DcModuleSendMsg(&DataSend);
//放入队列
if (pdTRUE != xQueueSend(DcModeMsg, &DataSend, 0))
{
//osDelay(10);
}
}
void SendDataToDcModule_A(EnumSwitchStatus Set, u16 Volt, u16 Currt) void SendDataToDcModule_A(EnumSwitchStatus Set, u16 Volt, u16 Currt)
{ {
u8 cmd = 0; u8 cmd = 0;
...@@ -1285,7 +1226,6 @@ void SendDataToDcModule_A(EnumSwitchStatus Set, u16 Volt, u16 Currt) ...@@ -1285,7 +1226,6 @@ void SendDataToDcModule_A(EnumSwitchStatus Set, u16 Volt, u16 Currt)
} }
DcModuleSet(Set,Volt,Currt); DcModuleSet(Set,Volt,Currt);
Currt = 2;
SendDataToDcModule(0,cmd,Volt*100,Currt*100); SendDataToDcModule(0,cmd,Volt*100,Currt*100);
} }
...@@ -1353,7 +1293,7 @@ void RelayStatusCheck(void) ...@@ -1353,7 +1293,7 @@ void RelayStatusCheck(void)
} }
void DcModuleStatusCheck_ZhongXing(void) void DcModuleStatusCheck(void)
{ {
u16 status = 0; u16 status = 0;
u16 status_A = 0; u16 status_A = 0;
...@@ -1367,7 +1307,7 @@ void DcModuleStatusCheck_ZhongXing(void) ...@@ -1367,7 +1307,7 @@ void DcModuleStatusCheck_ZhongXing(void)
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;
status_A |= DcModuleStatus_ALL[addr].State; status_A |= DcModuleStatus_ALL[addr].State.Mult;
} }
} }
else if(DcModuleGroup[i].status == Hold_B) else if(DcModuleGroup[i].status == Hold_B)
...@@ -1375,7 +1315,7 @@ void DcModuleStatusCheck_ZhongXing(void) ...@@ -1375,7 +1315,7 @@ void DcModuleStatusCheck_ZhongXing(void)
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;
status_B |= DcModuleStatus_ALL[addr].State; status_B |= DcModuleStatus_ALL[addr].State.Mult;
} }
} }
else if(DcModuleGroup[i].status == Valid) else if(DcModuleGroup[i].status == Valid)
...@@ -1383,7 +1323,7 @@ void DcModuleStatusCheck_ZhongXing(void) ...@@ -1383,7 +1323,7 @@ void DcModuleStatusCheck_ZhongXing(void)
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;
status |= DcModuleStatus_ALL[addr].State; status |= DcModuleStatus_ALL[addr].State.Mult;
} }
} }
} }
...@@ -1405,12 +1345,4 @@ void DcModuleStatusCheck_ZhongXing(void) ...@@ -1405,12 +1345,4 @@ void DcModuleStatusCheck_ZhongXing(void)
DcModuleStatus_B.Mult = (u8)(status_B>>8); DcModuleStatus_B.Mult = (u8)(status_B>>8);
} }
void DcModuleStatusCheck(void)
{
#if DcModule_ZhongXing
DcModuleStatusCheck_ZhongXing();
#else
#endif
}
...@@ -2,6 +2,14 @@ ...@@ -2,6 +2,14 @@
#define __DRV_SMARTALLOCATION_H__ #define __DRV_SMARTALLOCATION_H__
#include "Global.h" #include "Global.h"
#include "Drv_DcModule.h"
#if DcModule_ZhongXing
#define DCModuleStatusOn 0x02
#else
#define DCModuleStatusOn 0x00
#endif
typedef enum typedef enum
{ {
...@@ -15,7 +23,7 @@ typedef struct ...@@ -15,7 +23,7 @@ typedef struct
{ {
u8 addr; u8 addr;
u8 online; u8 online;
u16 status; UnionDcModuleStatus status;
u8 cmd; u8 cmd;
u32 Voltage; u32 Voltage;
u32 Current; u32 Current;
...@@ -44,21 +52,6 @@ typedef struct ...@@ -44,21 +52,6 @@ typedef struct
u16 ActualCurrt;//0.1A/Bit; u16 ActualCurrt;//0.1A/Bit;
}StructDcModuleGroupCtrl; }StructDcModuleGroupCtrl;
typedef union
{
u8 Mult;
struct
{
u8 Reserve : 1; //Bit0: 预留
u8 other: 1; //Bit1: 其他故障 0x00 -- 正常 0x01 --- 故障
u8 fan : 1; //Bit2: 风扇故障 0x00 -- 正常 0x01 --- 故障
u8 outShort : 1;//Bit3: 直流输出短路 0x00 -- 正常 0x01 --- 故障
u8 tempOver : 1;//Bit4: 过温 0x00 -- 正常 0x01 --- 故障
u8 outLow : 1; //Bit5: 直流输出欠压 0x00 -- 正常 0x01 --- 故障
u8 outHigh : 1; //Bit6: 直流输出过压故障 0x00 -- 正常 0x01 --- 故障
u8 accIn : 1; //Bit7: 交流输入故障 0x00 -- 正常 0x01 --- 故障
}Value;
}UnionDcModuleStatus;
extern UnionDcModuleStatus DcModuleStatus; extern UnionDcModuleStatus DcModuleStatus;
extern UnionDcModuleStatus DcModuleStatus_A; extern UnionDcModuleStatus DcModuleStatus_A;
......
...@@ -46,6 +46,8 @@ void ChgProChgIdle(StructChargeCtrl *pChargeCtrl) ...@@ -46,6 +46,8 @@ void ChgProChgIdle(StructChargeCtrl *pChargeCtrl)
memset(&BmvMsg, 0xFF, sizeof(BmvMsg)); memset(&BmvMsg, 0xFF, sizeof(BmvMsg));
memset(&BmtMsg, 0xFF, sizeof(BmtMsg)); memset(&BmtMsg, 0xFF, sizeof(BmtMsg));
u32 OneSecondTick = GetSystemTick();
u32 LockCount = 0;
while(1) while(1)
{ {
memset(&BemMsg, 0, sizeof(BemMsg)); memset(&BemMsg, 0, sizeof(BemMsg));
...@@ -96,6 +98,31 @@ void ChgProChgIdle(StructChargeCtrl *pChargeCtrl) ...@@ -96,6 +98,31 @@ void ChgProChgIdle(StructChargeCtrl *pChargeCtrl)
} }
ACContactorSet(eSwSta_On); ACContactorSet(eSwSta_On);
} }
if((GetSystemTick() - OneSecondTick) >= 1000)
{
if(LockGet()==eSwSta_On && ChargeStopType != eChgStop_None)
{
LockCount++;
if(LockCount>=10)
{
LockCount = 10;
}
else if(LockCount >= 3)
{
LockCount = 10;
LockSet(eSwSta_Off);
}
else if(LockCount >= 2)
{
LockSet(eSwSta_On);
}
}
}
if( if(
(0 != PillarError.Value.Emergency) (0 != PillarError.Value.Emergency)
|| (0 != PillarError.Value.NoDcmod) || (0 != PillarError.Value.NoDcmod)
......
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论