提交 184cd9d2 作者: wysheng

优化智能分配

上级 2d35a47b
......@@ -4,8 +4,7 @@
#include "Global.h"
#define DcModule_ZhongXing 1
#define DcModule_ZhongXing 0
#define DcModule_BaudRate (250)
......@@ -78,8 +77,6 @@ typedef struct
#define DcModuleMaxCurrt (100) //10A
#define DcModuleMinCurrt (5) //1A
#define DcModuleSinMaxCurrt (2000)
#else
#define DcModuleMaxVolt (5000)//750V
......@@ -93,15 +90,61 @@ typedef enum
eSwSta_High,
}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
{
u8 Id;
u8 Temp;
u16 Volt;//0.1V/Bit;
u16 Currt;//0.1A/Bit;
u16 State;
UnionDcModuleStatus State;
u32 RecvTime;
u16 ModStatus;
}StructDcModuleStatus;
extern StructDcModuleAbility DcModuleAbility;
......
......@@ -463,7 +463,7 @@ StructTCUCControl TCUControlInfo =
},//硬件版本
.SoftwareVersion =
{
(u8)(__SoftVer__>>8), (u8)(__SoftVer__), 0x00
(u8)(__SoftVer__>>16), (u8)(__SoftVer__>>8), (u8)(__SoftVer__)
},//软件版本
.SoftwareData =
{
......@@ -2526,12 +2526,21 @@ void InformationReporting_22_A(void)
InformainReport_A.InfRe.DcModErr = PillarError.Value.DCmodError;
#if DcModule_ZhongXing
InformainReport_A.InfRe.DCModIn = DcModuleStatus_A.Value.accIn;
InformainReport_A.InfRe.DCModInHi = 0;
InformainReport_A.InfRe.DCModInLo = 0;
//InformainReport_A.InfRe.DCModInHi = 0;
//InformainReport_A.InfRe.DCModInLo = 0;
//InformainReport_A.InfRe.DCModPhas = 0;
InformainReport_A.InfRe.DcOutShor = DcModuleStatus_A.Value.outShort;
//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.DCModOutVoLo = DcModuleStatus_A.Value.outLow;
......@@ -2659,12 +2668,21 @@ void InformationReporting_22_B(void)
InformainReport_B.InfRe.DcModErr = PillarError_B.Value.DCmodError;
#if DcModule_ZhongXing
InformainReport_B.InfRe.DCModIn = DcModuleStatus_B.Value.accIn;
//InformainReport_B.InfRe.DCModInHi = 0;
//InformainReport_B.InfRe.DCModInLo = 0;
//InformainReport_B.InfRe.DCModPhas = 0;
InformainReport_B.InfRe.DcOutShor = DcModuleStatus_B.Value.outShort;
//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.DCModOutVoLo = DcModuleStatus_B.Value.outLow;
......
......@@ -425,7 +425,7 @@ extern u8 HexToBcd(u8 Hex);
extern int CopyCode(u32 Des, u32 Scr, u32 Len);
extern int UpdateFlagSet(u32 Status);
#define __SoftVer__ (0x0110) //BCD码 如:V1.02 SoftVer = 0x0102
#define __SoftVer__ (0x010102) //BCD码 如:V1.02 SoftVer = 0x0102
#endif
......@@ -153,26 +153,26 @@ void ChgProChgRun(StructChargeCtrl * pChargeCtrl)
if (DcModuleGroup[1].status == Valid)
{
DcModuleGroup[1].status = Hold_A;
DcModuleManage.ValidNum += DcModuleGroup[1].ValidNum;
//DcModuleManage.ValidNum += DcModuleGroup[1].ValidNum;
DcModuleGroup[1].flag = 1;
}
else if (DcModuleGroup[3].status == Valid)
{
DcModuleGroup[3].status = Hold_A;
DcModuleManage.ValidNum += DcModuleGroup[3].ValidNum;
//DcModuleManage.ValidNum += DcModuleGroup[3].ValidNum;
DcModuleGroup[3].flag = 1;
}
else if (DcModuleGroup[2].status == Valid
&& ChargeCtrl_B.CurProcess == eChgPro_ChgIdle)
{
DcModuleGroup[2].status = Hold_A;
DcModuleManage.ValidNum += DcModuleGroup[2].ValidNum;
//DcModuleManage.ValidNum += DcModuleGroup[2].ValidNum;
DcModuleGroup[2].flag = 1;
#if (DcModule_ZhongXing == 0)
if (DcModuleGroup[3].status == Hold_A)
{
DcModuleGroup[3].status = Valid;
DcModuleManage.ValidNum -= DcModuleGroup[3].ValidNum;
//DcModuleManage.ValidNum -= DcModuleGroup[3].ValidNum;
}
#endif
}
......@@ -182,17 +182,17 @@ void ChgProChgRun(StructChargeCtrl * pChargeCtrl)
if (DcModuleGroup[2].status == Hold_A)
{
DcModuleGroup[2].status = Valid;
DcModuleManage.ValidNum -= DcModuleGroup[2].ValidNum;
//DcModuleManage.ValidNum -= DcModuleGroup[2].ValidNum;
}
else if (DcModuleGroup[3].status == Hold_A)
{
DcModuleGroup[3].status = Valid;
DcModuleManage.ValidNum -= DcModuleGroup[3].ValidNum;
//DcModuleManage.ValidNum -= DcModuleGroup[3].ValidNum;
}
else if (DcModuleGroup[1].status == Hold_A)
{
DcModuleGroup[1].status = Valid;
DcModuleManage.ValidNum -= DcModuleGroup[1].ValidNum;
//DcModuleManage.ValidNum -= DcModuleGroup[1].ValidNum;
}
}
......
......@@ -29,7 +29,7 @@ StructDcModuleManage DcModuleManage;
StructDcModuleManage DcModuleManage_B;
StructDcModuleManage DcModuleManage_All;
StructDcModuleStatus DcModuleStatus_ALL[64];
StructDcModuleStatus DcModuleStatus_ALL[16];
StructDcModuleCtrl DcModuleCtrl;
StructDcModuleCtrl DcModuleCtrl_B;
......@@ -320,7 +320,7 @@ void DcModule(void const * parameter)
{
DcModeleRelayInit();
DCModuleRelayOutChkInit();
osDelay(6000);
//osDelay(6000);
DcModuleCanInit();
//ACContactorSet(eSwSta_On);
......@@ -348,7 +348,7 @@ void DcModule(void const * parameter)
}
}
RelayStatusCheck();
//RelayStatusCheck();
DcModuleManageProcess_SmartAllocation();
......@@ -735,7 +735,7 @@ void DcModuleMsgReceive_ZhongXing(CanRxMsg* RxMsg)
DcModuleManage_All.OnlineFlag |= ((long long) 1 << (addr&0x0f));
Data.Currt = (((u16) RxMsg->Data[4] << 8) +RxMsg->Data[5])/10;
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.Temp = RxMsg->Data[6]; //当前组号
DcModuleStatus_ALL[Data.Id] = Data;
......@@ -751,12 +751,12 @@ void DcModuleMsgReceive_Incre(CanRxMsg* RxMsg)
DcModuleManage_All.OnlineFlag |= ((long long) 1 << Data.Id);
Data.Currt = ((u32) RxMsg->Data[2] << 8) +RxMsg->Data[3];
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();
DcModuleStatus_ALL[Data.Id] = Data;
}
GetNXRAcVolt(RxMsg);
//GetNXRAcVolt(RxMsg);
}
void DcModuleMsgReceive(CanRxMsg* RxMsg)
......
......@@ -64,7 +64,6 @@ void SendCmdToDcModule(u8 addr, u8 cmd);
void SendDataToDcModule(u8 addr, u8 cmd, u32 volt, u32 current);
void SendCheckToDcModule(void);
void DcModuleGroupDateInit(void);
u8 DcModuleGetStatus(u8 addr);
void DcModuleSetGroupNum(void);
extern void GetNXRAcVoltMsg(u32 addr);
......@@ -111,7 +110,7 @@ void DcModuleManageProcess_SmartAllocation(void)
}
else
{
if (DcModuleGetStatus(i)/*0x0002 != (DcModuleStatus_ALL[i].State & 0x0002)*/)
if (DcModuleStatus_ALL[i].State.Value.Fault != 0x01)
{
DcModuleManage_All.ValidFlag |= Flag;
Count++;
......@@ -129,7 +128,7 @@ void DcModuleManageProcess_SmartAllocation(void)
if(GetSystemTick() - GetAcVoltTick > 1000)
{
GetAcVoltTick = GetSystemTick();
GetNXRAcVoltMsg(1);
//GetNXRAcVoltMsg(1);
}
}
......@@ -147,7 +146,7 @@ void DcModuleManageProcess_SmartAllocation(void)
addr = DcModuleGroup[i].modules[j].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)
{
......@@ -259,16 +258,12 @@ void DcModuleManageProcess_SmartAllocation(void)
}
//u32 look_temp = 0;
//u32 maxSetCurr = 0;
//u32 maxSetCurr_B = 0;
void DcModuleCtrlProcess_SmartAllocation(void)
{
static u32 CtrlTick = 0;
static u8 LastFlag_A = 0;
static u8 LastFlag_B = 0;
u32 Temp = 0;
static u32 Tick = 0; //
if ((GetSystemTick() -Tick) < 100)
......@@ -277,7 +272,7 @@ void DcModuleCtrlProcess_SmartAllocation(void)
}
Tick = GetSystemTick();
static StructDcModuleUsedStatus status[4] =
/*static StructDcModuleUsedStatus status[4] =
{
Invalid, Invalid, Invalid, Invalid
};
......@@ -286,13 +281,10 @@ void DcModuleCtrlProcess_SmartAllocation(void)
Invalid, Invalid, Invalid, Invalid
};
u32 Temp;
u8 addr;
u32 Volt = 0;
u8 Cmd = 0;
u32 Current = 0;
Temp = 0;
for (u8 i = 0; i < DcModuleGroupSize; i++)
......@@ -389,14 +381,8 @@ void DcModuleCtrlProcess_SmartAllocation(void)
status[i] = DcModuleGroup[i].status;
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;
}
......@@ -404,7 +390,7 @@ void DcModuleCtrlProcess_SmartAllocation(void)
if (Temp)
return;
Temp = 0;
Temp = 0;*/
//检测升压 或者 降流
for (u8 i = 0; i < DcModuleGroupSize; i++)
......@@ -414,16 +400,9 @@ void DcModuleCtrlProcess_SmartAllocation(void)
if (abs((s16) (DcModuleGroup[i].Voltage) - (s16) (DcModuleManage.SetVolt / 100)) > 100) //差距在10V以内,升压完成
{
Temp++;
//for (u8 j = 0; j < DcModuleGroup[i].num; j++)
{
//addr = DcModuleGroup[i].modules[j].addr;
DcModuleManage.Cmd = 0x55; //开机
//DcModuleGroup[i].modules[j].cmd = 0x55;
SendDataToDcModule(i, DcModuleManage.Cmd, DcModuleManage.SetVolt,
DcModuleAbility.MinCurrt * 100);
}
DcModuleManage.Cmd = 0x55; //开机
SendDataToDcModule(i, DcModuleManage.Cmd, DcModuleManage.SetVolt,
DcModuleAbility.MinCurrt * 100);
}
else
{
......@@ -439,15 +418,11 @@ void DcModuleCtrlProcess_SmartAllocation(void)
{
Temp++;
//for (u8 j = 0; j < DcModuleGroup[i].num; j++)
{
//addr = DcModuleGroup[i].modules[j].addr;
DcModuleManage_B.Cmd = 0x55; //开机
//DcModuleGroup[i].modules[j].cmd = 0x55;
SendDataToDcModule(i, DcModuleManage_B.Cmd, DcModuleManage_B.SetVolt,
DcModuleAbility.MinCurrt * 100);
}
DcModuleManage_B.Cmd = 0x55; //开机
SendDataToDcModule(i, DcModuleManage_B.Cmd, DcModuleManage_B.SetVolt,
DcModuleAbility.MinCurrt * 100);
}
else
{
......@@ -458,15 +433,14 @@ void DcModuleCtrlProcess_SmartAllocation(void)
{
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(i, 0xAA); //关机
}
Temp++;
//SendCmdToDcModule(i, 0xAA); //关机
//SendDataToDcModule(i, 0xAA, DcModuleAbility.MinVolt * 100, DcModuleAbility.MinCurrt * 100);
}
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)
if (DcModuleGroup[i].status != Hold_A)
continue;
//for (u8 j = 0; j < DcModuleGroup[i].num; j++)
{
//addr = DcModuleGroup[i].modules[j].addr;
DcModuleManage.Cmd = 0x55; //开机
//DcModuleGroup[i].modules[j].cmd = 0x55;
SendDataToDcModule(i, DcModuleManage.Cmd, DcModuleManage.SetVolt, DcModuleManage.SetCurrt);
}
DcModuleManage.Cmd = 0x55; //开机
SendDataToDcModule(i, DcModuleManage.Cmd, DcModuleManage.SetVolt, DcModuleManage.SetCurrt);
}
}
else
{
DcModuleManage.Cmd = 0xAA;
DcModuleManage.SetCurrt = (DcModuleAbility.MinCurrt * 100);
DcModuleManage.SetVolt = (DcModuleAbility.MinVolt * 100);
}
if (DcModuleCtrl_B.CtrlFlag)
......@@ -788,21 +760,18 @@ void DcModuleCtrlProcess_SmartAllocation(void)
if (DcModuleGroup[i].status != Hold_B)
continue;
//for (u8 j = 0; j < DcModuleGroup[i].num; j++)
{
//addr = DcModuleGroup[i].modules[j].addr;
DcModuleManage_B.Cmd = 0x55; //开机
//DcModuleGroup[i].modules[j].cmd = 0x55;
SendDataToDcModule(i, DcModuleManage_B.Cmd, DcModuleManage_B.SetVolt,
DcModuleManage_B.SetCurrt);
}
DcModuleManage_B.Cmd = 0x55; //开机
SendDataToDcModule(i, DcModuleManage_B.Cmd, DcModuleManage_B.SetVolt,
DcModuleManage_B.SetCurrt);
}
}
else
{
DcModuleManage_B.Cmd = 0xAA;
DcModuleManage_B.SetCurrt = (DcModuleAbility.MinCurrt * 100);
DcModuleManage_B.SetVolt = (DcModuleAbility.MinVolt * 100);
}
......@@ -835,44 +804,18 @@ 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;
u32 Temp = 0;
u8 addr = 0;
if(group_index > 3)
return;
for (u8 j = 0; j < DcModuleGroup[group_index].num; j++)
{
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].VoltageSet = volt;
DcModuleGroup[group_index].modules[j].CurrentSet = current;
DataSend.Id = 0x1307C080 + addr;
DataSend.Len = 8;
DataSend.Data[0] = 0x00;
DataSend.Data[1] = 0x00;
//if(current != 0)
{
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))
{
//osDelay(10);
}
}
DataSend.Id = 0x1307C080 + addr;
DataSend.Len = 8;
DataSend.Data[0] = 0x02;
......@@ -893,6 +836,77 @@ void SendDataToDcModule_Incre(u8 group_index, u8 cmd, u32 volt, u32 current)
}
void SendCmdToDcModule_ZhongXing(u8 group_index, u8 cmd)
{
}
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))
{
//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_ZhongXing(u8 group_index, u8 cmd, u32 volt, u32 current)
{
......@@ -974,28 +988,120 @@ 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);
#else
SendDataToDcModule_Incre(addr,cmd,volt,current);
#endif
//心跳帧
StructDcModuleSend DataSend;
u16 addr = 0;
static u32 StaticTick = 0;
if ((GetSystemTick() -StaticTick) > 2000)
{
StaticTick = GetSystemTick();
for (u8 i = 0; i < DcModuleGroupSize; i++)
{
for (u8 j = 0; j < DcModuleGroup[i].num; j++)
{
addr = DcModuleGroup[i].modules[j].addr;
if(DcModuleStatus_ALL[addr].State.Value.GroupType == 0x00)
{
DcModuleCancelGroupNum(addr);
}
if(DcModuleStatus_ALL[addr].Temp == 0)//未分组
{
DcModuleSetGroupNum();
//return;//continue;
}
DataSend.Id = 0x180160A0 | (addr<<8);
DataSend.Len = 8;
DataSend.Data[0] = 0x00;
DataSend.Data[1] = 0x00;
DataSend.Data[2] = 0x00;
DataSend.Data[3] = 0x00;
DataSend.Data[4] = 0x00;
DataSend.Data[5] = 0x00;
DataSend.Data[6] = 0x00;
DataSend.Data[7] = 0x00;
//DcModuleSendMsg(&DataSend);
//放入队列
if (pdTRUE != xQueueSend(DcModeMsg, &DataSend, 0))
{
//osDelay(10);
}
}
}
}
}
void SendCmdToDcModule_Incre(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;
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;
DcModuleGroup[3].modules[1].addr = 0x07;
}
#else
void SendDataToDcModule_Incre(u8 group_index, u8 cmd, u32 volt, u32 current)
{
StructDcModuleSend DataSend;
u32 Temp = 0;
u8 addr = 0;
if(group_index > 3)
return;
for (u8 j = 0; j < DcModuleGroup[group_index].num; j++)
{
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].VoltageSet = volt;
DcModuleGroup[group_index].modules[j].CurrentSet = current;
//if(cmd != 0xAA)
{
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))
{
//osDelay(10);
}
}
DataSend.Id = 0x1307C080 + addr;
DataSend.Len = 8;
DataSend.Data[0] = 0x02;
......@@ -1016,22 +1122,6 @@ void SendCmdToDcModule_Incre(u8 group_index, u8 cmd)
}
void SendCmdToDcModule_ZhongXing(u8 group_index, u8 cmd)
{
}
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
}
void SendCheckToDcModule_Incre(void)
{
StructDcModuleSend DataSend;
......@@ -1063,76 +1153,16 @@ void SendCheckToDcModule_Incre(void)
//放入队列
if (pdTRUE != xQueueSend(DcModeMsg, &DataSend, 0))
{
osDelay(10);
}
}
}
}
}
void SendCheckToDcModule_ZhongXing(void)
{
//心跳帧
StructDcModuleSend DataSend;
u16 addr = 0;
static u32 StaticTick = 0;
if ((GetSystemTick() -StaticTick) > 2000)
{
StaticTick = GetSystemTick();
for (u8 i = 0; i < DcModuleGroupSize; i++)
{
for (u8 j = 0; j < DcModuleGroup[i].num; j++)
{
addr = DcModuleGroup[i].modules[j].addr;
if(DcModuleStatus_ALL[addr].State&0x0080 == 0x0000)
{
DcModuleCancelGroupNum(addr);
}
if(DcModuleStatus_ALL[addr].Temp == 0)//未分组
{
DcModuleSetGroupNum();
//return;//continue;
}
DataSend.Id = 0x180160A0 | (addr<<8);
DataSend.Len = 8;
DataSend.Data[0] = 0x00;
DataSend.Data[1] = 0x00;
DataSend.Data[2] = 0x00;
DataSend.Data[3] = 0x00;
DataSend.Data[4] = 0x00;
DataSend.Data[5] = 0x00;
DataSend.Data[6] = 0x00;
DataSend.Data[7] = 0x00;
//DcModuleSendMsg(&DataSend);
//放入队列
if (pdTRUE != xQueueSend(DcModeMsg, &DataSend, 0))
{
//osDelay(10);
}
}
}
}
}
void SendCheckToDcModule(void)
{
#if DcModule_ZhongXing
SendCheckToDcModule_ZhongXing();
#else
SendCheckToDcModule_Incre();
#endif
}
void DcModuleGroupDateInit_Incre(void)
{
memset(&DcModuleGroup,0,sizeof(DcModuleGroup));
......@@ -1152,25 +1182,15 @@ void DcModuleGroupDateInit_Incre(void)
DcModuleGroup[3].modules[0].addr = 0x06;
}
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;
DcModuleGroup[1].modules[0].addr = 0x02;
DcModuleGroup[1].modules[1].addr = 0x03;
DcModuleGroup[2].modules[0].addr = 0x04;
DcModuleGroup[2].modules[1].addr = 0x05;
#endif
DcModuleGroup[3].modules[0].addr = 0x06;
DcModuleGroup[3].modules[1].addr = 0x07;
void SendCheckToDcModule(void)
{
#if DcModule_ZhongXing
SendCheckToDcModule_ZhongXing();
#else
SendCheckToDcModule_Incre();
#endif
}
......@@ -1183,95 +1203,16 @@ void DcModuleGroupDateInit(void)
#endif
}
u8 DcModuleGetStatus_Incre(u8 addr)
{
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)
void SendDataToDcModule(u8 addr, u8 cmd, u32 volt, u32 current)
{
#if DcModule_ZhongXing
return DcModuleGetStatus_ZhongXing(addr);
SendDataToDcModule_ZhongXing(addr,cmd,volt,current);
#else
return DcModuleGetStatus_Incre(addr);
SendDataToDcModule_Incre(addr,cmd,volt,current);
#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)
{
u8 cmd = 0;
......@@ -1285,7 +1226,6 @@ void SendDataToDcModule_A(EnumSwitchStatus Set, u16 Volt, u16 Currt)
}
DcModuleSet(Set,Volt,Currt);
Currt = 2;
SendDataToDcModule(0,cmd,Volt*100,Currt*100);
}
......@@ -1353,7 +1293,7 @@ void RelayStatusCheck(void)
}
void DcModuleStatusCheck_ZhongXing(void)
void DcModuleStatusCheck(void)
{
u16 status = 0;
u16 status_A = 0;
......@@ -1367,7 +1307,7 @@ void DcModuleStatusCheck_ZhongXing(void)
for(u8 j=0;j<DcModuleGroup[i].num;j++)
{
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)
......@@ -1375,7 +1315,7 @@ void DcModuleStatusCheck_ZhongXing(void)
for(u8 j=0;j<DcModuleGroup[i].num;j++)
{
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)
......@@ -1383,7 +1323,7 @@ void DcModuleStatusCheck_ZhongXing(void)
for(u8 j=0;j<DcModuleGroup[i].num;j++)
{
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)
DcModuleStatus_B.Mult = (u8)(status_B>>8);
}
void DcModuleStatusCheck(void)
{
#if DcModule_ZhongXing
DcModuleStatusCheck_ZhongXing();
#else
#endif
}
......@@ -2,6 +2,14 @@
#define __DRV_SMARTALLOCATION_H__
#include "Global.h"
#include "Drv_DcModule.h"
#if DcModule_ZhongXing
#define DCModuleStatusOn 0x02
#else
#define DCModuleStatusOn 0x00
#endif
typedef enum
{
......@@ -15,7 +23,7 @@ typedef struct
{
u8 addr;
u8 online;
u16 status;
UnionDcModuleStatus status;
u8 cmd;
u32 Voltage;
u32 Current;
......@@ -44,21 +52,6 @@ typedef struct
u16 ActualCurrt;//0.1A/Bit;
}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_A;
......
......@@ -45,7 +45,9 @@ void ChgProChgIdle(StructChargeCtrl *pChargeCtrl)
memset(&BmvMsg, 0xFF, sizeof(BmvMsg));
memset(&BmtMsg, 0xFF, sizeof(BmtMsg));
u32 OneSecondTick = GetSystemTick();
u32 LockCount = 0;
while(1)
{
memset(&BemMsg, 0, sizeof(BemMsg));
......@@ -96,6 +98,31 @@ void ChgProChgIdle(StructChargeCtrl *pChargeCtrl)
}
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(
(0 != PillarError.Value.Emergency)
|| (0 != PillarError.Value.NoDcmod)
......
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论