提交 7c6a81bb 作者: wysheng

准备完善充电模块监测

上级 869ca7fe
...@@ -11,28 +11,28 @@ StructDcModuleGroup DcModuleGroup[] = ...@@ -11,28 +11,28 @@ StructDcModuleGroup DcModuleGroup[] =
{ {
2, 0, 2, 0,
{ {
1, 0, 0, 0, 2, 0, 0, 0 1, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0
}, },
Invalid, 0, 0, 0 Invalid, 0, 0, 0
}, },
{ {
1, 0, 1, 0,
{ {
3, 0, 0, 0, 0, 0, 0, 0 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
}, },
Invalid, 0, 0, 0 Invalid, 0, 0, 0
}, },
{ {
2, 0, 2, 0,
{ {
4, 0, 0, 0, 5, 0, 0, 0 4, 0, 0, 0, 0, 0, 5, 0, 0, 0, 0, 0
}, },
Invalid, 0, 0, 0 Invalid, 0, 0, 0
}, },
{ {
1, 0, 1, 0,
{ {
6, 0, 0, 0, 0, 0, 0, 0 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
}, },
Invalid, 0, 0, 0 Invalid, 0, 0, 0
}, },
...@@ -152,30 +152,32 @@ void DcModuleManageProcess_SmartAllocation(void) ...@@ -152,30 +152,32 @@ void DcModuleManageProcess_SmartAllocation(void)
Currt = 0; Currt = 0;
Volt = 0; Volt = 0;
Count = 0; Count = 0;
status = DcModuleGroup[i].modules[0].status; status = DcModuleGroup[i].modules[0].online;
for (j = 0; j < DcModuleGroup[i].num; j++) for (j = 0; j < DcModuleGroup[i].num; j++)
{ {
addr = DcModuleGroup[i].modules[j].addr; addr = DcModuleGroup[i].modules[j].addr;
Flag = addr << 1; Flag = addr << 1;
DcModuleGroup[i].modules[j].status = DcModuleStatus_ALL[addr].State;
if (Flag & DcModuleManage_All.ValidFlag) if (Flag & DcModuleManage_All.ValidFlag)
{ {
Currt += DcModuleStatus_ALL[addr].Currt; Currt += DcModuleStatus_ALL[addr].Currt;
Volt += DcModuleStatus_ALL[addr].Volt; Volt += DcModuleStatus_ALL[addr].Volt;
Count++; Count++;
DcModuleGroup[i].modules[j].status = Valid; DcModuleGroup[i].modules[j].online = Valid;
DcModuleGroup[i].modules[j].Voltage = DcModuleStatus_ALL[addr].Volt; DcModuleGroup[i].modules[j].Voltage = DcModuleStatus_ALL[addr].Volt;
DcModuleGroup[i].modules[j].Current = DcModuleStatus_ALL[addr].Currt; DcModuleGroup[i].modules[j].Current = DcModuleStatus_ALL[addr].Currt;
} }
else else
{ {
DcModuleGroup[i].modules[j].status = Invalid; DcModuleGroup[i].modules[j].online = Invalid;
} }
status = status | DcModuleGroup[i].modules[j].status; status = status | DcModuleGroup[i].modules[j].online;
} }
DcModuleGroup[i].ValidNum = Count; DcModuleGroup[i].ValidNum = Count;
...@@ -304,7 +306,7 @@ void DcModuleCtrlProcess_SmartAllocation(void) ...@@ -304,7 +306,7 @@ void DcModuleCtrlProcess_SmartAllocation(void)
u32 Volt = 0; u32 Volt = 0;
u8 Cmd = 0; u8 Cmd = 0;
//u32 Value = 0; u32 Current = 0;
Temp = 0; Temp = 0;
...@@ -314,7 +316,7 @@ void DcModuleCtrlProcess_SmartAllocation(void) ...@@ -314,7 +316,7 @@ void DcModuleCtrlProcess_SmartAllocation(void)
{ {
Temp = 1; Temp = 1;
Volt = DcModuleAbility.MinVolt * 100; Volt = DcModuleAbility.MinVolt * 100;
Current = DcModuleAbility.MinCurrt * 100;
if (DcModuleGroup[i].status == Valid) //释放模块,模块关机 if (DcModuleGroup[i].status == Valid) //释放模块,模块关机
{ {
//关机, 检测电流, 释放继电器 //关机, 检测电流, 释放继电器
...@@ -326,6 +328,11 @@ void DcModuleCtrlProcess_SmartAllocation(void) ...@@ -326,6 +328,11 @@ void DcModuleCtrlProcess_SmartAllocation(void)
DcModuleManage.SetCurrt = DcModuleAbility.MinCurrt * 100; DcModuleManage.SetCurrt = DcModuleAbility.MinCurrt * 100;
DcModuleManage.Cmd = 0xAA; //关机 DcModuleManage.Cmd = 0xAA; //关机
} }
else
{
//关机降流
Current = 0;
}
} }
else if (status[i] == Hold_B) else if (status[i] == Hold_B)
{ {
...@@ -335,6 +342,11 @@ void DcModuleCtrlProcess_SmartAllocation(void) ...@@ -335,6 +342,11 @@ void DcModuleCtrlProcess_SmartAllocation(void)
DcModuleManage_B.SetCurrt = DcModuleAbility.MinCurrt * 100; DcModuleManage_B.SetCurrt = DcModuleAbility.MinCurrt * 100;
DcModuleManage_B.Cmd = 0xAA; //关机 DcModuleManage_B.Cmd = 0xAA; //关机
} }
else
{
//关机降流
Current = 0;
}
} }
Cmd = 0xAA; //关机 Cmd = 0xAA; //关机
...@@ -372,14 +384,15 @@ void DcModuleCtrlProcess_SmartAllocation(void) ...@@ -372,14 +384,15 @@ void DcModuleCtrlProcess_SmartAllocation(void)
} }
else else
{ {
status[i] = DcModuleGroup[i].status;
continue;
} }
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 = Cmd;
SendCmdToDcModule(addr, Cmd); SendDataToDcModule(addr, Cmd, Volt, Current);
} }
status[i] = DcModuleGroup[i].status; status[i] = DcModuleGroup[i].status;
...@@ -389,7 +402,6 @@ void DcModuleCtrlProcess_SmartAllocation(void) ...@@ -389,7 +402,6 @@ void DcModuleCtrlProcess_SmartAllocation(void)
if (Temp) if (Temp)
return; return;
Temp = 0; Temp = 0;
//检测升压 或者 降流 //检测升压 或者 降流
...@@ -407,6 +419,7 @@ void DcModuleCtrlProcess_SmartAllocation(void) ...@@ -407,6 +419,7 @@ void DcModuleCtrlProcess_SmartAllocation(void)
addr = DcModuleGroup[i].modules[j].addr; addr = DcModuleGroup[i].modules[j].addr;
DcModuleManage.Cmd = 0x55; //开机 DcModuleManage.Cmd = 0x55; //开机
DcModuleGroup[i].modules[j].cmd = 0x55;
SendDataToDcModule(addr, DcModuleManage.Cmd, DcModuleManage.SetVolt, SendDataToDcModule(addr, DcModuleManage.Cmd, DcModuleManage.SetVolt,
DcModuleAbility.MinCurrt * 100); DcModuleAbility.MinCurrt * 100);
} }
...@@ -421,7 +434,7 @@ void DcModuleCtrlProcess_SmartAllocation(void) ...@@ -421,7 +434,7 @@ void DcModuleCtrlProcess_SmartAllocation(void)
} }
else if (DcModuleGroup[i].status == Hold_B && i != 2) else if (DcModuleGroup[i].status == Hold_B && i != 2)
{ {
if (abs((s32) (DcModuleGroup[i].Voltage) - (s32) (DcModuleManage_B.SetVolt / 100)) > 100) //差距在10V以内,升压完成 if (abs((s32) (DcModuleGroup[i].Voltage) - (s32) (DcModuleManage_B.SetVolt / 100)) > 100) //差距在10V以内,升压完成,可以切换继电器
{ {
Temp++; Temp++;
...@@ -430,6 +443,7 @@ void DcModuleCtrlProcess_SmartAllocation(void) ...@@ -430,6 +443,7 @@ void DcModuleCtrlProcess_SmartAllocation(void)
addr = DcModuleGroup[i].modules[j].addr; addr = DcModuleGroup[i].modules[j].addr;
DcModuleManage_B.Cmd = 0x55; //开机 DcModuleManage_B.Cmd = 0x55; //开机
DcModuleGroup[i].modules[j].cmd = 0x55;
SendDataToDcModule(addr, DcModuleManage_B.Cmd, DcModuleManage_B.SetVolt, SendDataToDcModule(addr, DcModuleManage_B.Cmd, DcModuleManage_B.SetVolt,
DcModuleAbility.MinCurrt * 100); DcModuleAbility.MinCurrt * 100);
} }
...@@ -441,19 +455,24 @@ void DcModuleCtrlProcess_SmartAllocation(void) ...@@ -441,19 +455,24 @@ void DcModuleCtrlProcess_SmartAllocation(void)
} }
else if (DcModuleGroup[i].status == Valid && i != 2 && i != 0) else if (DcModuleGroup[i].status == Valid && i != 2 && i != 0)
{ {
if (DcModuleGroup[i].Current > 50) //大于5A if (DcModuleGroup[i].Current > 50) //电流小于5A,将降流完成, 可以释放继电器
{ {
Temp++; 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); //关机
}
} }
} }
} }
if (Temp) if (Temp)
return; return;
Temp = 0; Temp = 0;
//切换继电器输出 //切换继电器
for (u8 i = 0; i < DcModuleGroupSize; i++) for (u8 i = 0; i < DcModuleGroupSize; i++)
{ {
if (status1[i] != DcModuleGroup[i].status) if (status1[i] != DcModuleGroup[i].status)
...@@ -626,6 +645,7 @@ void DcModuleCtrlProcess_SmartAllocation(void) ...@@ -626,6 +645,7 @@ void DcModuleCtrlProcess_SmartAllocation(void)
{ {
addr = DcModuleGroup[i].modules[j].addr; addr = DcModuleGroup[i].modules[j].addr;
DcModuleManage.Cmd = 0x55; //开机 DcModuleManage.Cmd = 0x55; //开机
DcModuleGroup[i].modules[j].cmd = 0x55;
SendDataToDcModule(addr, DcModuleManage.Cmd, DcModuleManage.SetVolt, DcModuleManage.SetCurrt); SendDataToDcModule(addr, DcModuleManage.Cmd, DcModuleManage.SetVolt, DcModuleManage.SetCurrt);
} }
} }
...@@ -684,6 +704,7 @@ void DcModuleCtrlProcess_SmartAllocation(void) ...@@ -684,6 +704,7 @@ void DcModuleCtrlProcess_SmartAllocation(void)
addr = DcModuleGroup[i].modules[j].addr; addr = DcModuleGroup[i].modules[j].addr;
DcModuleManage_B.Cmd = 0x55; //开机 DcModuleManage_B.Cmd = 0x55; //开机
DcModuleGroup[i].modules[j].cmd = 0x55;
SendDataToDcModule(addr, DcModuleManage_B.Cmd, DcModuleManage_B.SetVolt, SendDataToDcModule(addr, DcModuleManage_B.Cmd, DcModuleManage_B.SetVolt,
DcModuleManage_B.SetCurrt); DcModuleManage_B.SetCurrt);
} }
...@@ -735,7 +756,8 @@ void SendDataToDcModule(u8 addr, u8 cmd, u32 volt, u32 current) ...@@ -735,7 +756,8 @@ void SendDataToDcModule(u8 addr, u8 cmd, u32 volt, u32 current)
DataSend.Len = 8; DataSend.Len = 8;
DataSend.Data[0] = 0x00; DataSend.Data[0] = 0x00;
DataSend.Data[1] = 0x00; DataSend.Data[1] = 0x00;
if(current != 0)
{
Temp = current; Temp = current;
DataSend.Data[2] = (u8) (Temp >> 8); DataSend.Data[2] = (u8) (Temp >> 8);
DataSend.Data[3] = (u8) (Temp >> 0); DataSend.Data[3] = (u8) (Temp >> 0);
...@@ -750,6 +772,7 @@ void SendDataToDcModule(u8 addr, u8 cmd, u32 volt, u32 current) ...@@ -750,6 +772,7 @@ void SendDataToDcModule(u8 addr, u8 cmd, u32 volt, u32 current)
{ {
//osDelay(10); //osDelay(10);
} }
}
DataSend.Id = 0x1307C080 + addr; DataSend.Id = 0x1307C080 + addr;
DataSend.Len = 8; DataSend.Len = 8;
......
...@@ -14,7 +14,9 @@ typedef enum ...@@ -14,7 +14,9 @@ typedef enum
typedef struct typedef struct
{ {
u8 addr; u8 addr;
u8 online;
u8 status; u8 status;
u8 cmd;
u32 Voltage; u32 Voltage;
u32 Current; u32 Current;
}StructDcModule; }StructDcModule;
......
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论