提交 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
......
...@@ -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 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论