提交 07212137 作者: wysheng

完善智能分配

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