提交 07212137 作者: wysheng

完善智能分配

上级 257ed546
...@@ -57,6 +57,9 @@ extern void DcModuleCanInit(void); ...@@ -57,6 +57,9 @@ extern void DcModuleCanInit(void);
extern osMessageQId DcModeMsg; extern osMessageQId DcModeMsg;
void SendCmdToDcModule(u8 addr, u8 cmd);
void SendDataToDcModule(u8 addr, u8 cmd, u32 volt,u32 current);
void DcModuleManageProcess_SmartAllocation(void) void DcModuleManageProcess_SmartAllocation(void)
{ {
...@@ -286,15 +289,15 @@ void DcModuleCtrlProcess_SmartAllocation(void) ...@@ -286,15 +289,15 @@ void DcModuleCtrlProcess_SmartAllocation(void)
Invalid, Invalid, Invalid, Invalid Invalid, Invalid, Invalid, Invalid
}; };
StructDcModuleSend DataSend; //StructDcModuleSend DataSend;
u32 Temp; u32 Temp;
u8 addr; u8 addr;
u32 Volt = 0; u32 Volt = 0;
u8 Cmd = 0; u8 Cmd = 0;
u32 Value = 0; //u32 Value = 0;
Temp = 0; Temp = 0;
//释放继电器
for (u8 i = 0; i < DcModuleGroupSize; i++) for (u8 i = 0; i < DcModuleGroupSize; i++)
{ {
if (status[i] != DcModuleGroup[i].status) if (status[i] != DcModuleGroup[i].status)
...@@ -302,7 +305,7 @@ void DcModuleCtrlProcess_SmartAllocation(void) ...@@ -302,7 +305,7 @@ void DcModuleCtrlProcess_SmartAllocation(void)
Temp = 1; Temp = 1;
Volt = DcModuleAbility.MinVolt * 100; Volt = DcModuleAbility.MinVolt * 100;
if (DcModuleGroup[i].status == Valid) if (DcModuleGroup[i].status == Valid) //释放模块和继电器
{ {
//关机 //关机
if (status[i] == Hold_A) if (status[i] == Hold_A)
...@@ -352,16 +355,33 @@ void DcModuleCtrlProcess_SmartAllocation(void) ...@@ -352,16 +355,33 @@ void DcModuleCtrlProcess_SmartAllocation(void)
Cmd = 0xAA; //关机 Cmd = 0xAA; //关机
DcModuleGroup[i].flag = 0; DcModuleGroup[i].flag = 0;
} }
else if (DcModuleGroup[i].status == Hold_A) else if (DcModuleGroup[i].status == Hold_A) //分配到A枪的模块
{ {
if (i != 0) //升压 if (i != 0) //升压
{ {
Volt = DcModuleManage.SetVolt; Volt = DcModuleManage.SetVolt;
} }
else if (status[i] == Hold_B)
/*if (status[i] == Hold_B) //释放连到B枪的继电器
{ {
GPIO_ResetBits(RELAY_K5K6_Port, RELAY_K5K6_Pin); if (i == 0)
} {
GPIO_ResetBits(RELAY_K5K6_Port, RELAY_K5K6_Pin);
}
else if (i == 1)
{
GPIO_ResetBits(RELAY_K7K8_Port, RELAY_K7K8_Pin);//不会走到这里
}
else if (i == 2)
{
//不会走到这里
}
else if (i == 3)
{
GPIO_ResetBits(RELAY_K9K10_Port, RELAY_K9K10_Pin);//不会走到这里
}
}*/
Cmd = 0x55; //开机 Cmd = 0x55; //开机
} }
...@@ -371,10 +391,27 @@ void DcModuleCtrlProcess_SmartAllocation(void) ...@@ -371,10 +391,27 @@ void DcModuleCtrlProcess_SmartAllocation(void)
{ {
Volt = DcModuleManage_B.SetVolt; Volt = DcModuleManage_B.SetVolt;
} }
else if (status[i] == Hold_A)
/*if (status[i] == Hold_A) //释放连到A枪的继电器
{ {
GPIO_ResetBits(RELAY_K5K6_Port, RELAY_K5K6_Pin); if (i == 0)
} {
//不会走到这里
}
else if (i == 1)
{
GPIO_ResetBits(RELAY_K1K2_Port, RELAY_K1K2_Pin); //不会走到这里
}
else if (i == 2)
{
GPIO_ResetBits(RELAY_K5K6_Port, RELAY_K5K6_Pin);
}
else if (i == 3)
{
GPIO_ResetBits(RELAY_K3K4_Port, RELAY_K3K4_Pin); //不会走到这里
}
}*/
Cmd = 0x55; //开机 Cmd = 0x55; //开机
} }
...@@ -387,7 +424,7 @@ void DcModuleCtrlProcess_SmartAllocation(void) ...@@ -387,7 +424,7 @@ void DcModuleCtrlProcess_SmartAllocation(void)
{ {
addr = DcModuleGroup[i].modules[j].addr; addr = DcModuleGroup[i].modules[j].addr;
DataSend.Id = 0x1307C080 + addr; /*DataSend.Id = 0x1307C080 + addr;
DataSend.Len = 8; DataSend.Len = 8;
DataSend.Data[0] = 0x00; DataSend.Data[0] = 0x00;
DataSend.Data[1] = 0x00; DataSend.Data[1] = 0x00;
...@@ -421,7 +458,9 @@ void DcModuleCtrlProcess_SmartAllocation(void) ...@@ -421,7 +458,9 @@ void DcModuleCtrlProcess_SmartAllocation(void)
if (pdTRUE != xQueueSend(DcModeMsg, &DataSend, 0)) if (pdTRUE != xQueueSend(DcModeMsg, &DataSend, 0))
{ {
//osDelay(10); //osDelay(10);
} }*/
SendDataToDcModule(addr,Cmd,Volt,DcModuleAbility.MinCurrt * 100);
} }
status[i] = DcModuleGroup[i].status; status[i] = DcModuleGroup[i].status;
...@@ -438,14 +477,14 @@ void DcModuleCtrlProcess_SmartAllocation(void) ...@@ -438,14 +477,14 @@ void DcModuleCtrlProcess_SmartAllocation(void)
{ {
if (DcModuleGroup[i].status == Hold_A && i != 0) if (DcModuleGroup[i].status == Hold_A && i != 0)
{ {
if(abs((s32)(DcModuleGroup[i].Voltage*100) - (s32)DcModuleManage.SetVolt) >10000) if(abs((s32)(DcModuleGroup[i].Voltage*100) - (s32)DcModuleManage.SetVolt) >10000) //差距在10V以内,升压完成
{ {
Temp++; 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;
DataSend.Id = 0x1307C080 + addr; /*DataSend.Id = 0x1307C080 + addr;
DataSend.Len = 8; DataSend.Len = 8;
DataSend.Data[0] = 0x00; DataSend.Data[0] = 0x00;
DataSend.Data[1] = 0x00; DataSend.Data[1] = 0x00;
...@@ -481,7 +520,9 @@ void DcModuleCtrlProcess_SmartAllocation(void) ...@@ -481,7 +520,9 @@ void DcModuleCtrlProcess_SmartAllocation(void)
if (pdTRUE != xQueueSend(DcModeMsg, &DataSend, 0)) if (pdTRUE != xQueueSend(DcModeMsg, &DataSend, 0))
{ {
//osDelay(10); //osDelay(10);
} }*/
DcModuleManage.Cmd = 0x55; //开机
SendDataToDcModule(addr,DcModuleManage.Cmd,DcModuleManage.SetVolt,DcModuleAbility.MinCurrt * 100);
} }
} }
else else
...@@ -491,14 +532,14 @@ void DcModuleCtrlProcess_SmartAllocation(void) ...@@ -491,14 +532,14 @@ 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*100) - (s32)DcModuleManage_B.SetVolt) >10000) if(abs((s32)(DcModuleGroup[i].Voltage*100) - (s32)DcModuleManage_B.SetVolt) >10000)//差距在10V以内,升压完成
{ {
Temp++; 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;
DataSend.Id = 0x1307C080 + addr; /*DataSend.Id = 0x1307C080 + addr;
DataSend.Len = 8; DataSend.Len = 8;
DataSend.Data[0] = 0x00; DataSend.Data[0] = 0x00;
DataSend.Data[1] = 0x00; DataSend.Data[1] = 0x00;
...@@ -534,7 +575,11 @@ void DcModuleCtrlProcess_SmartAllocation(void) ...@@ -534,7 +575,11 @@ void DcModuleCtrlProcess_SmartAllocation(void)
if (pdTRUE != xQueueSend(DcModeMsg, &DataSend, 0)) if (pdTRUE != xQueueSend(DcModeMsg, &DataSend, 0))
{ {
//osDelay(10); //osDelay(10);
} }*/
DcModuleManage_B.Cmd = 0x55; //开机
SendDataToDcModule(addr,DcModuleManage_B.Cmd,DcModuleManage_B.SetVolt,DcModuleAbility.MinCurrt * 100);
} }
} }
else else
...@@ -611,7 +656,7 @@ void DcModuleCtrlProcess_SmartAllocation(void) ...@@ -611,7 +656,7 @@ void DcModuleCtrlProcess_SmartAllocation(void)
} }
else else
{ {
//切换继电器
} }
...@@ -692,7 +737,7 @@ void DcModuleCtrlProcess_SmartAllocation(void) ...@@ -692,7 +737,7 @@ void DcModuleCtrlProcess_SmartAllocation(void)
{ {
addr = DcModuleGroup[i].modules[j].addr; addr = DcModuleGroup[i].modules[j].addr;
DataSend.Id = 0x1307C080 + addr; /*DataSend.Id = 0x1307C080 + addr;
DataSend.Len = 8; DataSend.Len = 8;
DataSend.Data[0] = 0x00; DataSend.Data[0] = 0x00;
DataSend.Data[1] = 0x00; DataSend.Data[1] = 0x00;
...@@ -728,7 +773,9 @@ void DcModuleCtrlProcess_SmartAllocation(void) ...@@ -728,7 +773,9 @@ void DcModuleCtrlProcess_SmartAllocation(void)
if (pdTRUE != xQueueSend(DcModeMsg, &DataSend, 0)) if (pdTRUE != xQueueSend(DcModeMsg, &DataSend, 0))
{ {
//osDelay(10); //osDelay(10);
} }*/
DcModuleManage.Cmd = 0x55;//开机
SendDataToDcModule(addr,DcModuleManage.Cmd,DcModuleManage.SetVolt,DcModuleManage.SetCurrt);
} }
} }
} }
...@@ -785,7 +832,7 @@ void DcModuleCtrlProcess_SmartAllocation(void) ...@@ -785,7 +832,7 @@ void DcModuleCtrlProcess_SmartAllocation(void)
{ {
addr = DcModuleGroup[i].modules[j].addr; addr = DcModuleGroup[i].modules[j].addr;
DataSend.Id = 0x1307C080 + addr; /*DataSend.Id = 0x1307C080 + addr;
DataSend.Len = 8; DataSend.Len = 8;
DataSend.Data[0] = 0x00; DataSend.Data[0] = 0x00;
DataSend.Data[1] = 0x00; DataSend.Data[1] = 0x00;
...@@ -821,7 +868,9 @@ void DcModuleCtrlProcess_SmartAllocation(void) ...@@ -821,7 +868,9 @@ void DcModuleCtrlProcess_SmartAllocation(void)
if (pdTRUE != xQueueSend(DcModeMsg, &DataSend, 0)) if (pdTRUE != xQueueSend(DcModeMsg, &DataSend, 0))
{ {
//osDelay(10); //osDelay(10);
} }*/
DcModuleManage_B.Cmd = 0x55;//开机
SendDataToDcModule(addr,DcModuleManage_B.Cmd,DcModuleManage_B.SetVolt,DcModuleManage_B.SetCurrt);
} }
} }
...@@ -858,3 +907,47 @@ void release_DcModule(u8 flag) ...@@ -858,3 +907,47 @@ void release_DcModule(u8 flag)
} }
} }
void SendDataToDcModule(u8 addr, u8 cmd, u32 volt,u32 current)
{
StructDcModuleSend DataSend;
u32 Temp;
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;
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] = cmd;
//放入队列
if (pdTRUE != xQueueSend(DcModeMsg, &DataSend, 0))
{
//osDelay(10);
}
}
...@@ -247,11 +247,12 @@ void DcModuleSet(EnumSwitchStatus Set, u16 Volt, u16 Currt) ...@@ -247,11 +247,12 @@ void DcModuleSet(EnumSwitchStatus Set, u16 Volt, u16 Currt)
DcModuleCtrl.NeedVolt = Volt; DcModuleCtrl.NeedVolt = Volt;
DcModuleCtrl.NeedCurrt = Currt; DcModuleCtrl.NeedCurrt = Currt;
if(DcModuleGroup[0].status == Hold_A) /*if(DcModuleGroup[0].status == Hold_A)
{ {
DcModuleGroup[0].status = Valid; DcModuleGroup[0].status = Valid;
DcModuleManage.ValidNum -= DcModuleGroup[0].ValidNum; DcModuleManage.ValidNum -= DcModuleGroup[0].ValidNum;
} }*/
release_DcModule(1);
} }
else else
{ {
...@@ -264,6 +265,7 @@ void DcModuleSet(EnumSwitchStatus Set, u16 Volt, u16 Currt) ...@@ -264,6 +265,7 @@ void DcModuleSet(EnumSwitchStatus Set, u16 Volt, u16 Currt)
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)
{ {
...@@ -367,11 +369,12 @@ void DcModuleSet_B(EnumSwitchStatus Set, u16 Volt, u16 Currt) ...@@ -367,11 +369,12 @@ 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;
if(DcModuleGroup[2].status == Hold_B) /*if(DcModuleGroup[2].status == Hold_B)
{ {
DcModuleGroup[2].status = Valid; DcModuleGroup[2].status = Valid;
DcModuleManage_B.ValidNum -= DcModuleGroup[2].ValidNum; DcModuleManage_B.ValidNum -= DcModuleGroup[2].ValidNum;
} }*/
release_DcModule(2);
} }
else else
{ {
...@@ -383,6 +386,7 @@ void DcModuleSet_B(EnumSwitchStatus Set, u16 Volt, u16 Currt) ...@@ -383,6 +386,7 @@ void DcModuleSet_B(EnumSwitchStatus Set, u16 Volt, u16 Currt)
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)
{ {
......
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论