提交 39e8b28b 作者: wysheng

添加中兴模块协议

上级 24b380b5
...@@ -4,6 +4,9 @@ ...@@ -4,6 +4,9 @@
#include "Global.h" #include "Global.h"
#define DcModule_ZhongXing 1
#define DcModule_BaudRate (250) #define DcModule_BaudRate (250)
#define DcModule_Can eCan_1 #define DcModule_Can eCan_1
......
...@@ -5,6 +5,9 @@ ...@@ -5,6 +5,9 @@
#include "Drv_SmartAllocation.h" #include "Drv_SmartAllocation.h"
#include "Global.h" #include "Global.h"
#include "Drv_BoardIo.h" #include "Drv_BoardIo.h"
#include "Thd_Charge.h"
#include "Thd_Charge_B.h"
StructDcModuleGroup DcModuleGroup[] = StructDcModuleGroup DcModuleGroup[] =
{ {
...@@ -59,6 +62,10 @@ extern osMessageQId DcModeMsg; ...@@ -59,6 +62,10 @@ extern osMessageQId DcModeMsg;
void SendCmdToDcModule(u8 addr, u8 cmd); 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 SendCheckToDcModule(void);
void DcModuleGroupDateInit(void);
u8 DcModuleGetStatus(u8 addr);
void DcModuleSetGroupNum(void);
extern void GetNXRAcVoltMsg(u32 addr); extern void GetNXRAcVoltMsg(u32 addr);
...@@ -75,47 +82,7 @@ void DcModuleManageProcess_SmartAllocation(void) ...@@ -75,47 +82,7 @@ void DcModuleManageProcess_SmartAllocation(void)
u8 status; u8 status;
StructDcModuleSend DataSend; SendCheckToDcModule();
static u32 StaticTick = 0;
if (StaticTick == 0)
StaticTick = GetSystemTick();
if ((GetSystemTick() -StaticTick) > 1000)
{
StaticTick = GetSystemTick();
for (i = 0; i < DcModuleGroupSize; i++)
{
for (j = 0; j < DcModuleGroup[i].num; j++)
{
addr = DcModuleGroup[i].modules[j].addr;
DataSend.Id = 0x1307C080 + addr;
DataSend.Len = 8;
DataSend.Data[0] = 0x01;
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);
}
}
}
}
if (CheckTick == 0)
CheckTick = GetSystemTick();
if ((GetSystemTick() -CheckTick) < 100) if ((GetSystemTick() -CheckTick) < 100)
return; return;
...@@ -136,7 +103,7 @@ void DcModuleManageProcess_SmartAllocation(void) ...@@ -136,7 +103,7 @@ void DcModuleManageProcess_SmartAllocation(void)
} }
else else
{ {
if (0x0002 != (DcModuleStatus_ALL[i].State & 0x0002)) if (DcModuleGetStatus(i)/*0x0002 != (DcModuleStatus_ALL[i].State & 0x0002)*/)
{ {
DcModuleManage_All.ValidFlag |= Flag; DcModuleManage_All.ValidFlag |= Flag;
Count++; Count++;
...@@ -393,11 +360,11 @@ void DcModuleCtrlProcess_SmartAllocation(void) ...@@ -393,11 +360,11 @@ void DcModuleCtrlProcess_SmartAllocation(void)
continue; 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; //DcModuleGroup[i].modules[j].cmd = Cmd;
SendDataToDcModule(addr, Cmd, Volt, Current); SendDataToDcModule(i, Cmd, Volt, Current);
} }
status[i] = DcModuleGroup[i].status; status[i] = DcModuleGroup[i].status;
...@@ -418,13 +385,13 @@ void DcModuleCtrlProcess_SmartAllocation(void) ...@@ -418,13 +385,13 @@ void DcModuleCtrlProcess_SmartAllocation(void)
{ {
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;
DcModuleManage.Cmd = 0x55; //开机 DcModuleManage.Cmd = 0x55; //开机
DcModuleGroup[i].modules[j].cmd = 0x55; //DcModuleGroup[i].modules[j].cmd = 0x55;
SendDataToDcModule(addr, DcModuleManage.Cmd, DcModuleManage.SetVolt, SendDataToDcModule(i, DcModuleManage.Cmd, DcModuleManage.SetVolt,
DcModuleAbility.MinCurrt * 100); DcModuleAbility.MinCurrt * 100);
} }
} }
...@@ -442,13 +409,13 @@ void DcModuleCtrlProcess_SmartAllocation(void) ...@@ -442,13 +409,13 @@ void DcModuleCtrlProcess_SmartAllocation(void)
{ {
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;
DcModuleManage_B.Cmd = 0x55; //开机 DcModuleManage_B.Cmd = 0x55; //开机
DcModuleGroup[i].modules[j].cmd = 0x55; //DcModuleGroup[i].modules[j].cmd = 0x55;
SendDataToDcModule(addr, DcModuleManage_B.Cmd, DcModuleManage_B.SetVolt, SendDataToDcModule(i, DcModuleManage_B.Cmd, DcModuleManage_B.SetVolt,
DcModuleAbility.MinCurrt * 100); DcModuleAbility.MinCurrt * 100);
} }
} }
...@@ -462,10 +429,10 @@ void DcModuleCtrlProcess_SmartAllocation(void) ...@@ -462,10 +429,10 @@ void DcModuleCtrlProcess_SmartAllocation(void)
if (DcModuleGroup[i].Current > 50) //电流小于5A,将降流完成, 可以释放继电器 if (DcModuleGroup[i].Current > 50) //电流小于5A,将降流完成, 可以释放继电器
{ {
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;
DcModuleGroup[i].modules[j].cmd = 0xAA; //DcModuleGroup[i].modules[j].cmd = 0xAA;
SendCmdToDcModule(addr, 0xAA); //关机 SendCmdToDcModule(addr, 0xAA); //关机
} }
} }
...@@ -644,12 +611,12 @@ void DcModuleCtrlProcess_SmartAllocation(void) ...@@ -644,12 +611,12 @@ void DcModuleCtrlProcess_SmartAllocation(void)
if (DcModuleGroup[i].status != Hold_A) if (DcModuleGroup[i].status != Hold_A)
continue; 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;
DcModuleManage.Cmd = 0x55; //开机 DcModuleManage.Cmd = 0x55; //开机
DcModuleGroup[i].modules[j].cmd = 0x55; //DcModuleGroup[i].modules[j].cmd = 0x55;
SendDataToDcModule(addr, DcModuleManage.Cmd, DcModuleManage.SetVolt, DcModuleManage.SetCurrt); SendDataToDcModule(i, DcModuleManage.Cmd, DcModuleManage.SetVolt, DcModuleManage.SetCurrt);
} }
} }
} }
...@@ -749,11 +716,20 @@ void release_DcModule(u8 flag) ...@@ -749,11 +716,20 @@ void release_DcModule(u8 flag)
} }
void SendDataToDcModule(u8 addr, u8 cmd, u32 volt, u32 current) void SendDataToDcModule_Incre(u8 group_index, u8 cmd, u32 volt, u32 current)
{ {
StructDcModuleSend DataSend; StructDcModuleSend DataSend;
u32 Temp; 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;
DcModuleGroup[group_index].modules[j].cmd = cmd;
DataSend.Id = 0x1307C080 + addr; DataSend.Id = 0x1307C080 + addr;
DataSend.Len = 8; DataSend.Len = 8;
...@@ -793,14 +769,100 @@ void SendDataToDcModule(u8 addr, u8 cmd, u32 volt, u32 current) ...@@ -793,14 +769,100 @@ void SendDataToDcModule(u8 addr, u8 cmd, u32 volt, u32 current)
{ {
//osDelay(10); //osDelay(10);
} }
}
} }
void SendDataToDcModule_ZhongXing(u8 group_index, u8 cmd, u32 volt, u32 current)
{
void SendCmdToDcModule(u8 addr, u8 cmd) StructDcModuleSend DataSend;
u32 Temp = 0;
u8 addr = 0;
u8 sendCmd = 0;
if(group_index > 3)
return;
if(cmd == 0xAA)//关机
{
sendCmd = 0x02;
}
else if(cmd == 0x55)//开机
{
/*
0x01 --- 快速开机( 绝缘检测阶段使用)
0x02 --- 停止充电
0x03 --- 软起开机( 预启动阶段使用)
0x04 --- 预留
0x05 --- 参数修改
0x06 --- 停止充电, 自动清除分组组号
*/
sendCmd = 0x01;
if(ChargeCtrl.CurProcess == eChgPro_ChgRun
&& DcModuleGroup[group_index].status == Hold_A)
{
sendCmd = 0x05;
}
else if(ChargeCtrl_B.CurProcess == eChgPro_ChgRun
&& DcModuleGroup[group_index].status == Hold_B)
{
sendCmd = 0x05;
}
}
for (u8 j = 0; j < DcModuleGroup[group_index].num; j++)
{
addr = DcModuleGroup[group_index].modules[j].addr;
DcModuleGroup[group_index].modules[j].cmd = cmd;
DataSend.Id = 0x18059FA0;
DataSend.Len = 8;
DataSend.Data[0] = 0x10 | sendCmd;
DataSend.Data[1] = group_index + 1;
//if(current != 0)
{
Temp = current/10;
DataSend.Data[4] = (u8) (Temp >> 8);
DataSend.Data[5] = (u8) (Temp >> 0);
Temp = volt/100;
DataSend.Data[2] = (u8) (Temp >> 8);
DataSend.Data[3] = (u8) (Temp >> 0);
DataSend.Data[6] = (u8) (Temp >> 8);
DataSend.Data[7] = (u8) (Temp >> 0);
//放入队列
if (pdTRUE != xQueueSend(DcModeMsg, &DataSend, 0))
{
//osDelay(10);
}
}
}
}
void SendDataToDcModule(u8 addr, u8 cmd, u32 volt, u32 current)
{ {
#if DcModule_ZhongXing
SendDataToDcModule_ZhongXing(addr,cmd,volt,current);
#else
SendDataToDcModule_Incre(addr,cmd,volt,current);
#endif
}
void SendCmdToDcModule_Incre(u8 group_index, u8 cmd)
{
StructDcModuleSend DataSend; StructDcModuleSend DataSend;
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;
DcModuleGroup[group_index].modules[j].cmd = cmd;
DataSend.Id = 0x1307C080 + addr; DataSend.Id = 0x1307C080 + addr;
DataSend.Len = 8; DataSend.Len = 8;
DataSend.Data[0] = 0x02; DataSend.Data[0] = 0x02;
...@@ -817,6 +879,231 @@ void SendCmdToDcModule(u8 addr, u8 cmd) ...@@ -817,6 +879,231 @@ void SendCmdToDcModule(u8 addr, u8 cmd)
{ {
//osDelay(10); //osDelay(10);
} }
}
}
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;
u8 addr = 0;
static u32 StaticTick = 0;
if ((GetSystemTick() -StaticTick) > 1000)
{
StaticTick = GetSystemTick();
for (u8 i = 0; i < DcModuleGroupSize; i++)
{
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] = 0x01;
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_ZhongXing(void)
{
//心跳帧
StructDcModuleSend DataSend;
u16 addr = 0;
static u32 StaticTick = 0;
if ((GetSystemTick() -StaticTick) > 1000)
{
StaticTick = GetSystemTick();
for (u8 i = 0; i < DcModuleGroupSize; i++)
{
if(DcModuleStatus_ALL[i].Temp == 0)//未分组
{
DcModuleSetGroupNum();
continue;
}
for (u8 j = 0; j < DcModuleGroup[i].num; j++)
{
addr = DcModuleGroup[i].modules[j].addr;
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));
DcModuleGroup[0].num = 2;
DcModuleGroup[1].num = 1;
DcModuleGroup[2].num = 2;
DcModuleGroup[3].num = 1;
DcModuleGroup[0].modules[0].addr = 0x01;
DcModuleGroup[0].modules[1].addr = 0x02;
DcModuleGroup[1].modules[0].addr = 0x03;
DcModuleGroup[2].modules[0].addr = 0x04;
DcModuleGroup[2].modules[1].addr = 0x05;
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;
DcModuleGroup[3].modules[0].addr = 0x06;
DcModuleGroup[3].modules[1].addr = 0x07;
}
void DcModuleGroupDateInit(void)
{
#if DcModule_ZhongXing
DcModuleGroupDateInit_ZhongXing();
#else
DcModuleGroupDateInit_Incre();
#endif
} }
u8 DcModuleGetStatus_Incre(u8 addr)
{
if(0x0002 != (DcModuleStatus_ALL[addr].State & 0x0002))
{
return TRUE;
}
else
{
return FALSE;
}
}
u8 DcModuleGetStatus_ZhongXing(u8 addr)
{
if(0x0000 != (DcModuleStatus_ALL[addr].State & 0xFE10))
{
return TRUE;
}
else
{
return FALSE;
}
}
u8 DcModuleGetStatus(u8 addr)
{
#if DcModule_ZhongXing
return DcModuleGetStatus_Incre(addr);
#else
return DcModuleGetStatus_ZhongXing(addr);
#endif
}
void DcModuleSetGroupNum(void) //中兴模块分组设置
{
StructDcModuleSend DataSend;
u16 addr = 0;
for(u8 i=0;i<DcModuleGroupSize;i++)
{
addr = DcModuleGroup[i].modules[0].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);
}
}
}
...@@ -44,4 +44,8 @@ typedef struct ...@@ -44,4 +44,8 @@ typedef struct
extern StructDcModuleGroup DcModuleGroup[]; extern StructDcModuleGroup DcModuleGroup[];
extern void DcModuleGroupDateInit(void);
#endif /*__DRV_SMARTALLOCATION_H__*/ #endif /*__DRV_SMARTALLOCATION_H__*/
...@@ -39,6 +39,9 @@ void DcModeleRelayInit(void); ...@@ -39,6 +39,9 @@ void DcModeleRelayInit(void);
extern void GetNXRAcVolt(CanRxMsg * RxMsg); extern void GetNXRAcVolt(CanRxMsg * RxMsg);
extern void GetNXRAcVoltMsg(u32 addr); extern void GetNXRAcVoltMsg(u32 addr);
void DcModuleMsgReceive(CanRxMsg* RxMsg);
static s8 DcModleVoltChkCnt = 0; static s8 DcModleVoltChkCnt = 0;
...@@ -62,7 +65,7 @@ void DcModuleRxIrqHandle(void) ...@@ -62,7 +65,7 @@ void DcModuleRxIrqHandle(void)
if ((CAN_ID_EXT == RxMsg.IDE) && (CAN_RTR_DATA == RxMsg.RTR)) if ((CAN_ID_EXT == RxMsg.IDE) && (CAN_RTR_DATA == RxMsg.RTR))
{ {
if ((0x1207C080 == (RxMsg.ExtId & 0xFFFFFFC0)) && (0x01 == RxMsg.Data[0])) //模块状态回复 /*if ((0x1207C080 == (RxMsg.ExtId & 0xFFFFFFC0)) && (0x01 == RxMsg.Data[0])) //模块状态回复
{ {
Data.Id = RxMsg.ExtId & 0x0000003F; Data.Id = RxMsg.ExtId & 0x0000003F;
DcModuleManage_All.OnlineFlag |= ((long long) 1 << Data.Id); DcModuleManage_All.OnlineFlag |= ((long long) 1 << Data.Id);
...@@ -73,7 +76,8 @@ void DcModuleRxIrqHandle(void) ...@@ -73,7 +76,8 @@ void DcModuleRxIrqHandle(void)
DcModuleStatus_ALL[Data.Id] = Data; DcModuleStatus_ALL[Data.Id] = Data;
} }
GetNXRAcVolt(&RxMsg); GetNXRAcVolt(&RxMsg);*/
DcModuleMsgReceive(&RxMsg);
} }
} }
} }
...@@ -87,7 +91,7 @@ void DcModuleRxIrqHandle(void) ...@@ -87,7 +91,7 @@ void DcModuleRxIrqHandle(void)
if ((CAN_ID_EXT == RxMsg.IDE) && (CAN_RTR_DATA == RxMsg.RTR)) if ((CAN_ID_EXT == RxMsg.IDE) && (CAN_RTR_DATA == RxMsg.RTR))
{ {
if ((0x1207C080 == (RxMsg.ExtId & 0xFFFFFFC0)) && (0x01 == RxMsg.Data[0])) //模块状态回复 /*if ((0x1207C080 == (RxMsg.ExtId & 0xFFFFFFC0)) && (0x01 == RxMsg.Data[0])) //模块状态回复
{ {
Data.Id = RxMsg.ExtId & 0x0000003F; Data.Id = RxMsg.ExtId & 0x0000003F;
DcModuleManage_All.OnlineFlag |= ((long long) 1 << Data.Id); DcModuleManage_All.OnlineFlag |= ((long long) 1 << Data.Id);
...@@ -98,7 +102,8 @@ void DcModuleRxIrqHandle(void) ...@@ -98,7 +102,8 @@ void DcModuleRxIrqHandle(void)
DcModuleStatus_ALL[Data.Id] = Data; DcModuleStatus_ALL[Data.Id] = Data;
} }
GetNXRAcVolt(&RxMsg); GetNXRAcVolt(&RxMsg);*/
DcModuleMsgReceive(&RxMsg);
} }
} }
} }
...@@ -722,32 +727,67 @@ void setDcMoudleVoltChkCnt(s8 val) ...@@ -722,32 +727,67 @@ void setDcMoudleVoltChkCnt(s8 val)
DcModleVoltChkCnt = 0; DcModleVoltChkCnt = 0;
} }
void DcModuleMsgReceive_ZhongXing(CanRxMsg* RxMsg)
void DcModule_ZhongXing(void)
{ {
u32 addr_src = 0x6f; u8 addr = 0;
u32 addr_dst = 0xa0; if ((0x1801A060 == (RxMsg->ExtId & 0xFFFFA060))) //心跳应答
u32 cmd = 0;
StructDcModuleSend DataSend =
{ {
0 addr = (u8)(RxMsg->ExtId&0x000000FF);
}; DcModuleManage_All.OnlineFlag |= ((long long) 1 << (addr&0x0f));
}
DataSend.Id = (6 << 26) | (cmd << 16) | (addr_dst << 8) | (addr_src); else if ((0x1804A060 == (RxMsg->ExtId & 0xFFFFA060))) //分组应答
DataSend.Len = 8; {
DataSend.Data[0] = 0x10; addr = (u8)(RxMsg->ExtId&0x000000FF);
DataSend.Data[1] = 0x00; if(RxMsg->Data[0] == 0xA8 && RxMsg->Data[1] == 0x00)
DataSend.Data[2] = 0x00; {
DataSend.Data[3] = 0x00; //分组成功
DataSend.Data[4] = 0x00; }
DataSend.Data[5] = 0x00; }
DataSend.Data[6] = 0x00; else if ((0x1810A060 == (RxMsg->ExtId & 0xFFFFA060))) //遥信帧
DataSend.Data[7] = 0x00; {
addr = (u8)(RxMsg->ExtId&0x000000FF);
//RxMsg->Data[0]; //状态
//RxMsg->Data[1]; //告警故障
//RxMsg->Data[2]; //输出电压H 分辨率: 0.1V/位
//RxMsg->Data[3]; //输出电压L
//RxMsg->Data[4]; //输出电流H 分辨率: 0.01A/位
//RxMsg->Data[5]; //输出电流L
//RxMsg->Data[6]; //当前组号
StructDcModuleStatus Data;
Data.Id = addr & 0x0F;
DcModuleManage_All.OnlineFlag |= ((long long) 1 << (addr&0x0f));
Data.Currt = ((u16) RxMsg->Data[4] << 8) +RxMsg->Data[5];
Data.Volt = ((u16) RxMsg->Data[2] << 8) +RxMsg->Data[3];
Data.State = ((u16) RxMsg->Data[1] << 8) +RxMsg->Data[0];
Data.RecvTime = GetSystemTick();
Data.Temp = RxMsg->Data[6]; //当前组号
DcModuleStatus_ALL[Data.Id] = Data;
}
}
if (pdTRUE != xQueueSend(DcModeMsg, &DataSend, 0)) void DcModuleMsgReceive_Incre(CanRxMsg* RxMsg)
{
StructDcModuleStatus Data;
if ((0x1207C080 == (RxMsg->ExtId & 0xFFFFFFC0)) && (0x01 == RxMsg->Data[0])) //模块状态回复
{ {
//osDelay(10); Data.Id = RxMsg->ExtId & 0x0000003F;
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.RecvTime = GetSystemTick();
DcModuleStatus_ALL[Data.Id] = Data;
} }
GetNXRAcVolt(RxMsg);
}
void DcModuleMsgReceive(CanRxMsg* RxMsg)
{
#if DcModule_ZhongXing
DcModuleMsgReceive_ZhongXing(RxMsg);
#else
DcModuleMsgReceive_Incre(RxMsg);
#endif
} }
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论