提交 b398fc44 作者: wysheng

完善智能分配

上级 e74c2db3
......@@ -58,7 +58,7 @@ extern void DcModuleCanInit(void);
extern osMessageQId DcModeMsg;
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 DcModuleManageProcess_SmartAllocation(void)
......@@ -113,8 +113,9 @@ void DcModuleManageProcess_SmartAllocation(void)
}
}
if(CheckTick == 0) CheckTick = GetSystemTick();
if (CheckTick == 0)
CheckTick = GetSystemTick();
if ((GetSystemTick() -CheckTick) < 100)
return;
......@@ -215,7 +216,9 @@ void DcModuleManageProcess_SmartAllocation(void)
}
else if (DcModuleGroup[i].status == Hold_A)
{
if(DcModuleGroup[i].flag) continue;
if (DcModuleGroup[i].flag)
continue;
Volt_A += DcModuleGroup[i].Voltage;
Currt_A += DcModuleGroup[i].Current;
Count_A += DcModuleGroup[i].ValidNum;
......@@ -223,7 +226,9 @@ void DcModuleManageProcess_SmartAllocation(void)
}
else if (DcModuleGroup[i].status == Hold_B)
{
if(DcModuleGroup[i].flag) continue;
if (DcModuleGroup[i].flag)
continue;
Volt_B += DcModuleGroup[i].Voltage;
Currt_B += DcModuleGroup[i].Current;
Count_B += DcModuleGroup[i].ValidNum;
......@@ -271,15 +276,19 @@ void DcModuleCtrlProcess_SmartAllocation(void)
static u8 LastFlag_A = 0;
static u8 LastFlag_B = 0;
static u32 Tick = 0;//
if(Tick==0) Tick=GetSystemTick();
static u32 Tick = 0; //
if (Tick == 0)
Tick = GetSystemTick();
if ((GetSystemTick() -Tick) < 100)
{
return;
}
Tick = GetSystemTick();
{
return;
}
Tick = GetSystemTick();
static StructDcModuleUsedStatus status[4] =
{
Invalid, Invalid, Invalid, Invalid
......@@ -294,10 +303,11 @@ void DcModuleCtrlProcess_SmartAllocation(void)
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)
......@@ -305,9 +315,9 @@ 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)
{
if (i == 0)
......@@ -316,18 +326,6 @@ void DcModuleCtrlProcess_SmartAllocation(void)
DcModuleManage.SetCurrt = DcModuleAbility.MinCurrt * 100;
DcModuleManage.Cmd = 0xAA; //关机
}
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);
}
}
else if (status[i] == Hold_B)
{
......@@ -337,81 +335,38 @@ void DcModuleCtrlProcess_SmartAllocation(void)
DcModuleManage_B.SetCurrt = DcModuleAbility.MinCurrt * 100;
DcModuleManage_B.Cmd = 0xAA; //关机
}
else 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 == 3)
{
GPIO_ResetBits(RELAY_K9K10_Port, RELAY_K9K10_Pin);
}
}
//Volt = DcModuleAbility.MinVolt * 100;
Cmd = 0xAA; //关机
DcModuleGroup[i].flag = 0;
}
else if (DcModuleGroup[i].status == Hold_A) //分配到A枪的模块
{
// 开机, 升压, 切换继电器
if (i != 0) //升压
{
Volt = DcModuleManage.SetVolt;
}
/*if (status[i] == Hold_B) //释放连到B枪的继电器
else if (status[i] == Hold_B)
{
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);//不会走到这里
}
}*/
//处理模块0组被B枪占用
//GPIO_ResetBits(RELAY_K5K6_Port, RELAY_K5K6_Pin);
}
Cmd = 0x55; //开机
}
else if (DcModuleGroup[i].status == Hold_B)
{
// 开机, 升压, 切换继电器
if (i != 2) //升压
{
Volt = DcModuleManage_B.SetVolt;
}
/*if (status[i] == Hold_A) //释放连到A枪的继电器
else if (status[i] == Hold_A)
{
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); //不会走到这里
}
}*/
//处理模块组 2 被A枪占用
//GPIO_ResetBits(RELAY_K5K6_Port, RELAY_K5K6_Pin);
}
Cmd = 0x55; //开机
}
......@@ -424,43 +379,7 @@ void DcModuleCtrlProcess_SmartAllocation(void)
{
addr = DcModuleGroup[i].modules[j].addr;
/*DataSend.Id = 0x1307C080 + addr;
DataSend.Len = 8;
DataSend.Data[0] = 0x00;
DataSend.Data[1] = 0x00;
Value = DcModuleAbility.MinCurrt * 100;
DataSend.Data[2] = (u8) (Value >> 8);
DataSend.Data[3] = (u8) (Value >> 0);
Value = Volt; //DcModuleAbility.MinVolt * 100;
DataSend.Data[4] = (u8) (Value >> 24);
DataSend.Data[5] = (u8) (Value >> 16);
DataSend.Data[6] = (u8) (Value >> 8);
DataSend.Data[7] = (u8) (Value >> 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);
}*/
SendDataToDcModule(addr,Cmd,Volt,DcModuleAbility.MinCurrt * 100);
SendCmdToDcModule(addr, Cmd);
}
status[i] = DcModuleGroup[i].status;
......@@ -470,127 +389,68 @@ void DcModuleCtrlProcess_SmartAllocation(void)
if (Temp)
return;
Temp = 0;
//检测升压完成
//检测升压 或者 降流
for (u8 i = 0; i < DcModuleGroupSize; i++)
{
if (DcModuleGroup[i].status == Hold_A && i != 0)
{
if(abs((s32)(DcModuleGroup[i].Voltage*100) - (s32)DcModuleManage.SetVolt) >10000) //差距在10V以内,升压完成
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;
/*DataSend.Id = 0x1307C080 + addr;
DataSend.Len = 8;
DataSend.Data[0] = 0x00;
DataSend.Data[1] = 0x00;
Value = DcModuleAbility.MinCurrt * 100;
DataSend.Data[2] = (u8) (Value >> 8);
DataSend.Data[3] = (u8) (Value >> 0);
Value = DcModuleManage.SetVolt;
DataSend.Data[4] = (u8) (Value >> 24);
DataSend.Data[5] = (u8) (Value >> 16);
DataSend.Data[6] = (u8) (Value >> 8);
DataSend.Data[7] = (u8) (Value >> 0);
//放入队列
if (pdTRUE != xQueueSend(DcModeMsg, &DataSend, 0))
{
//osDelay(10);
}
DcModuleManage.Cmd = 0x55; //开机
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] = DcModuleManage.Cmd;
//放入队列
if (pdTRUE != xQueueSend(DcModeMsg, &DataSend, 0))
{
//osDelay(10);
}*/
DcModuleManage.Cmd = 0x55; //开机
SendDataToDcModule(addr,DcModuleManage.Cmd,DcModuleManage.SetVolt,DcModuleAbility.MinCurrt * 100);
DcModuleManage.Cmd = 0x55; //开机
SendDataToDcModule(addr, DcModuleManage.Cmd, DcModuleManage.SetVolt,
DcModuleAbility.MinCurrt * 100);
}
}
else
else
{
DcModuleGroup[i].flag = 0;
}
}
else if (DcModuleGroup[i].status == Hold_B && i != 2)
{
if(abs((s32)(DcModuleGroup[i].Voltage*100) - (s32)DcModuleManage_B.SetVolt) >10000)//差距在10V以内,升压完成
if (abs((s32) (DcModuleGroup[i].Voltage) - (s32) (DcModuleManage_B.SetVolt / 100)) > 100) //差距在10V以内,升压完成
{
Temp++;
for (u8 j = 0; j < DcModuleGroup[i].num; j++)
{
addr = DcModuleGroup[i].modules[j].addr;
/*DataSend.Id = 0x1307C080 + addr;
DataSend.Len = 8;
DataSend.Data[0] = 0x00;
DataSend.Data[1] = 0x00;
Value = DcModuleAbility.MinCurrt * 100;
DataSend.Data[2] = (u8) (Value >> 8);
DataSend.Data[3] = (u8) (Value >> 0);
Value = DcModuleManage_B.SetVolt;
DataSend.Data[4] = (u8) (Value >> 24);
DataSend.Data[5] = (u8) (Value >> 16);
DataSend.Data[6] = (u8) (Value >> 8);
DataSend.Data[7] = (u8) (Value >> 0);
//放入队列
if (pdTRUE != xQueueSend(DcModeMsg, &DataSend, 0))
{
//osDelay(10);
}
DcModuleManage_B.Cmd = 0x55; //开机
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] = DcModuleManage_B.Cmd;
//放入队列
if (pdTRUE != xQueueSend(DcModeMsg, &DataSend, 0))
{
//osDelay(10);
}*/
DcModuleManage_B.Cmd = 0x55; //开机
SendDataToDcModule(addr,DcModuleManage_B.Cmd,DcModuleManage_B.SetVolt,DcModuleAbility.MinCurrt * 100);
DcModuleManage_B.Cmd = 0x55; //开机
SendDataToDcModule(addr, DcModuleManage_B.Cmd, DcModuleManage_B.SetVolt,
DcModuleAbility.MinCurrt * 100);
}
}
else
else
{
DcModuleGroup[i].flag = 0;
}
}
else if (DcModuleGroup[i].status == Valid && i != 2 && i != 0)
{
if (DcModuleGroup[i].Current > 50) //大于5A
{
Temp++;
}
}
}
if (Temp)
return;
Temp = 0;
//切换继电器输出
......@@ -603,16 +463,44 @@ void DcModuleCtrlProcess_SmartAllocation(void)
if (DcModuleGroup[i].status == Valid)
{
//切换继电器
if (status[i] == Hold_A)
if (status1[i] == Hold_A)
{
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);
}
}
else if (status[i] == Hold_B)
else if (status1[i] == Hold_B)
{
if (i == 2)
{
}
else 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 == 3)
{
GPIO_ResetBits(RELAY_K9K10_Port, RELAY_K9K10_Pin);
}
}
}
else if (DcModuleGroup[i].status == Hold_A)
{
......@@ -656,18 +544,19 @@ void DcModuleCtrlProcess_SmartAllocation(void)
}
else
{
}
}
status1[i] = DcModuleGroup[i].status;
}
status1[i] = DcModuleGroup[i].status;
}
if (Temp)
return;
if (LastFlag_A != DcModuleCtrl.CtrlFlag)
{
LastFlag_A = DcModuleCtrl.CtrlFlag;
......@@ -736,46 +625,8 @@ void DcModuleCtrlProcess_SmartAllocation(void)
for (u8 j = 0; j < DcModuleGroup[i].num; j++)
{
addr = DcModuleGroup[i].modules[j].addr;
/*DataSend.Id = 0x1307C080 + addr;
DataSend.Len = 8;
DataSend.Data[0] = 0x00;
DataSend.Data[1] = 0x00;
Temp = DcModuleManage.SetCurrt;
DataSend.Data[2] = (u8) (Temp >> 8);
DataSend.Data[3] = (u8) (Temp >> 0);
Temp = DcModuleManage.SetVolt;
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);
}
DcModuleManage.Cmd = 0x55; //开机
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] = DcModuleManage.Cmd;
//放入队列
if (pdTRUE != xQueueSend(DcModeMsg, &DataSend, 0))
{
//osDelay(10);
}*/
DcModuleManage.Cmd = 0x55;//开机
SendDataToDcModule(addr,DcModuleManage.Cmd,DcModuleManage.SetVolt,DcModuleManage.SetCurrt);
SendDataToDcModule(addr, DcModuleManage.Cmd, DcModuleManage.SetVolt, DcModuleManage.SetCurrt);
}
}
}
......@@ -832,45 +683,9 @@ void DcModuleCtrlProcess_SmartAllocation(void)
{
addr = DcModuleGroup[i].modules[j].addr;
/*DataSend.Id = 0x1307C080 + addr;
DataSend.Len = 8;
DataSend.Data[0] = 0x00;
DataSend.Data[1] = 0x00;
Temp = DcModuleManage_B.SetCurrt;
DataSend.Data[2] = (u8) (Temp >> 8);
DataSend.Data[3] = (u8) (Temp >> 0);
Temp = DcModuleManage_B.SetVolt;
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);
}
DcModuleManage_B.Cmd = 0x55; //开机
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] = DcModuleManage_B.Cmd;
//放入队列
if (pdTRUE != xQueueSend(DcModeMsg, &DataSend, 0))
{
//osDelay(10);
}*/
DcModuleManage_B.Cmd = 0x55;//开机
SendDataToDcModule(addr,DcModuleManage_B.Cmd,DcModuleManage_B.SetVolt,DcModuleManage_B.SetCurrt);
SendDataToDcModule(addr, DcModuleManage_B.Cmd, DcModuleManage_B.SetVolt,
DcModuleManage_B.SetCurrt);
}
}
......@@ -880,24 +695,26 @@ void DcModuleCtrlProcess_SmartAllocation(void)
}
}
void release_DcModule(u8 flag)
{
for (u8 i = 0; i < 4; i++)
{
if(flag == 1)
if (flag == 1)
{
if(DcModuleGroup[i].status == Hold_A)
if (DcModuleGroup[i].status == Hold_A)
{
DcModuleGroup[i].status = Valid;
DcModuleManage_B.ValidNum -= DcModuleGroup[i].ValidNum;
DcModuleGroup[i].flag = 0;
}
}
else if(flag == 2)
else if (flag == 2)
{
if(DcModuleGroup[i].status == Hold_B)
if (DcModuleGroup[i].status == Hold_B)
{
DcModuleGroup[i].status = Valid;
DcModuleManage_B.ValidNum -= DcModuleGroup[i].ValidNum;
......@@ -907,11 +724,13 @@ void release_DcModule(u8 flag)
}
}
void SendDataToDcModule(u8 addr, u8 cmd, u32 volt,u32 current)
void SendDataToDcModule(u8 addr, u8 cmd, u32 volt, u32 current)
{
StructDcModuleSend DataSend;
u32 Temp;
u32 Temp;
DataSend.Id = 0x1307C080 + addr;
DataSend.Len = 8;
DataSend.Data[0] = 0x00;
......@@ -929,7 +748,7 @@ void SendDataToDcModule(u8 addr, u8 cmd, u32 volt,u32 current)
//放入队列
if (pdTRUE != xQueueSend(DcModeMsg, &DataSend, 0))
{
//osDelay(10);
//osDelay(10);
}
DataSend.Id = 0x1307C080 + addr;
......@@ -946,7 +765,31 @@ void SendDataToDcModule(u8 addr, u8 cmd, u32 volt,u32 current)
//放入队列
if (pdTRUE != xQueueSend(DcModeMsg, &DataSend, 0))
{
//osDelay(10);
//osDelay(10);
}
}
void SendCmdToDcModule(u8 addr, u8 cmd)
{
StructDcModuleSend DataSend;
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);
}
}
......
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论