提交 22d26c45 作者: wysheng

打开门禁;修复启动完成时电池单体电压

上级 7e1355f5
...@@ -1100,10 +1100,12 @@ void startCompSend_A(void) ...@@ -1100,10 +1100,12 @@ void startCompSend_A(void)
Data[len++] = reason; Data[len++] = reason;
//充电桩与BMS通信协议版本号
Data[len++] = 0x01; Data[len++] = 0x01;
Data[len++] = 0x01; Data[len++] = 0x01;
Data[len++] = 0x00; //2015 Data[len++] = 0x00; //2015
//BMS与充电桩通信协议版本号
if (ChgVer == eChgVer_2011) if (ChgVer == eChgVer_2011)
{ {
Data[len++] = 0x01; Data[len++] = 0x01;
...@@ -1117,43 +1119,53 @@ void startCompSend_A(void) ...@@ -1117,43 +1119,53 @@ void startCompSend_A(void)
Data[len++] = 0x00; Data[len++] = 0x00;
} }
//充电桩与BMS 握手结果
if (ChgVer == eChgVer_2011) if (ChgVer == eChgVer_2011)
Data[len++] = 0x01; Data[len++] = 0x01;
else else
Data[len++] = 0x00; Data[len++] = 0x00;
//电池类型
Data[len++] = BrmMsg.BatType; Data[len++] = BrmMsg.BatType;
//最高允许温度
Data[len++] = BcpMsg.MaxTemp; Data[len++] = BcpMsg.MaxTemp;
//BMS 最高允许充电电压
Data[len++] = (u8) (BcpMsg.ChgMaxVolt >> 0); //最高允许充电电压 BIN码 2 Data[len++] = (u8) (BcpMsg.ChgMaxVolt >> 0); //最高允许充电电压 BIN码 2
Data[len++] = (u8) (BcpMsg.ChgMaxVolt >> 8); Data[len++] = (u8) (BcpMsg.ChgMaxVolt >> 8);
//单体最高允许充电电压
Data[len++] = (u8) (BcpMsg.PerBatMaxVolt >> 0);
Data[len++] = (u8) (BcpMsg.PerBatMaxVolt >> 8);
//最高允许充电电流
Data[len++] = (u8) (BcpMsg.ChgMaxCurrt >> 0); //最高允许充电电流 BIN码 2 Data[len++] = (u8) (BcpMsg.ChgMaxCurrt >> 0); //最高允许充电电流 BIN码 2
Data[len++] = (u8) (BcpMsg.ChgMaxCurrt >> 8); Data[len++] = (u8) (BcpMsg.ChgMaxCurrt >> 8);
//整车动力蓄电池额定总电压
Data[len++] = (u8) (BrmMsg.BatRateVolt >> 0); // BIN码 2 Data[len++] = (u8) (BrmMsg.BatRateVolt >> 0); // BIN码 2
Data[len++] = (u8) (BrmMsg.BatRateVolt >> 8); //整车动力蓄电池额定总电压 Data[len++] = (u8) (BrmMsg.BatRateVolt >> 8); //整车动力蓄电池额定总电压
//整车动力蓄电池当前电压
Data[len++] = (u8) (BcpMsg.StartVolt >> 0); // BIN码 2 Data[len++] = (u8) (BcpMsg.StartVolt >> 0); // BIN码 2
Data[len++] = (u8) (BcpMsg.StartVolt >> 8); //整车动力蓄电池当前电压 Data[len++] = (u8) (BcpMsg.StartVolt >> 8); //整车动力蓄电池当前电压
//整车动力蓄电池额定容量
Data[len++] = (u8) (BrmMsg.BatRateCap >> 0); // BIN码 2 Data[len++] = (u8) (BrmMsg.BatRateCap >> 0); // BIN码 2
Data[len++] = (u8) (BrmMsg.BatRateCap >> 8); //整车动力蓄电池额定容量 Data[len++] = (u8) (BrmMsg.BatRateCap >> 8); //整车动力蓄电池额定容量
//整车动力蓄电池标称能量
Data[len++] = (u8) (BcpMsg.BatEnergy >> 0); // BIN码 2 Data[len++] = (u8) (BcpMsg.BatEnergy >> 0); // BIN码 2
Data[len++] = (u8) (BcpMsg.BatEnergy >> 8); //整车动力蓄电池标称能量 Data[len++] = (u8) (BcpMsg.BatEnergy >> 8); //整车动力蓄电池标称能量
//整车动力蓄电池荷电状态
Data[len++] = (u8) (BcpMsg.StartSoc >> 0); // BIN码 2 Data[len++] = (u8) (BcpMsg.StartSoc >> 0); // BIN码 2
Data[len++] = (u8) (BcpMsg.StartSoc >> 8); //当前荷电状态 Data[len++] = (u8) (BcpMsg.StartSoc >> 8); //当前荷电状态
//充电机最高输出电压
Data[len++] = 0x4C; // BIN码 2 Data[len++] = 0x4C; // BIN码 2
Data[len++] = 0x1D; //最高输出电压 750 Data[len++] = 0x1D; //最高输出电压 750
//充电机最低输出电压
Data[len++] = 0xB8; // BIN码 2 Data[len++] = 0xB8; // BIN码 2
Data[len++] = 0x0B; //最低输出电压300 Data[len++] = 0x0B; //最低输出电压300
//充电机最大输出电流
Data[len++] = 0xDC; // BIN码 2 Data[len++] = 0xDC; // BIN码 2
Data[len++] = 0x05; // 最大输出电流 Data[len++] = 0x05; // 最大输出电流
//充电机最小输出电流
Data[len++] = 0xa0; // BIN码 2 Data[len++] = 0xa0; // BIN码 2
Data[len++] = 0x0F; //最小输出电流0A Data[len++] = 0x0F; //最小输出电流0A
//车辆识别码
memcpy(&Data[len], BrmMsg.Vin, 17); //车辆识别码 BIN码 17 memcpy(&Data[len], BrmMsg.Vin, 17); //车辆识别码 BIN码 17
len += 17; len += 17;
...@@ -1204,7 +1216,9 @@ void startCompSend_B(void) ...@@ -1204,7 +1216,9 @@ void startCompSend_B(void)
Data[len++] = BcpMsg_B.MaxTemp; Data[len++] = BcpMsg_B.MaxTemp;
Data[len++] = (u8) (BcpMsg.ChgMaxVolt >> 0); //最高允许充电电压 BIN码 2 Data[len++] = (u8) (BcpMsg.ChgMaxVolt >> 0); //最高允许充电电压 BIN码 2
Data[len++] = (u8) (BcpMsg.ChgMaxVolt >> 8); Data[len++] = (u8) (BcpMsg.ChgMaxVolt >> 8);
//单体最高允许充电电压
Data[len++] = (u8) (BcpMsg_B.PerBatMaxVolt >> 0);
Data[len++] = (u8) (BcpMsg_B.PerBatMaxVolt >> 8);
Data[len++] = (u8) (BcpMsg_B.ChgMaxCurrt >> 0); //最高允许充电电流 BIN码 2 Data[len++] = (u8) (BcpMsg_B.ChgMaxCurrt >> 0); //最高允许充电电流 BIN码 2
Data[len++] = (u8) (BcpMsg_B.ChgMaxCurrt >> 8); Data[len++] = (u8) (BcpMsg_B.ChgMaxCurrt >> 8);
...@@ -2187,7 +2201,7 @@ void InformationReporting_22_A(void) ...@@ -2187,7 +2201,7 @@ void InformationReporting_22_A(void)
InformainReport_A.InfRe.workStau = 0x03; InformainReport_A.InfRe.workStau = 0x03;
} }
InformainReport_A.InfRe.Emergency = PillarError.Value.Emergency == 1; InformainReport_A.InfRe.Emergency = PillarError.Value.Emergency;
InformainReport_A.InfRe.smoke = 0x00; InformainReport_A.InfRe.smoke = 0x00;
InformainReport_A.InfRe.AccContac = 0x00; InformainReport_A.InfRe.AccContac = 0x00;
InformainReport_A.InfRe.DCOutConOff = PillarError.Value.Contactor; InformainReport_A.InfRe.DCOutConOff = PillarError.Value.Contactor;
...@@ -2317,7 +2331,7 @@ void InformationReporting_22_B(void) ...@@ -2317,7 +2331,7 @@ void InformationReporting_22_B(void)
InformainReport_B.InfRe.workStau = 0x03; InformainReport_B.InfRe.workStau = 0x03;
} }
InformainReport_B.InfRe.Emergency = PillarError_B.Value.Emergency == 1; InformainReport_B.InfRe.Emergency = PillarError_B.Value.Emergency;
InformainReport_B.InfRe.smoke = 0x00; InformainReport_B.InfRe.smoke = 0x00;
InformainReport_B.InfRe.AccContac = 0x00; InformainReport_B.InfRe.AccContac = 0x00;
InformainReport_B.InfRe.DCOutConOff = PillarError_B.Value.Contactor; InformainReport_B.InfRe.DCOutConOff = PillarError_B.Value.Contactor;
......
...@@ -13,6 +13,7 @@ ...@@ -13,6 +13,7 @@
#include "Drv_SmartAllocation.h" #include "Drv_SmartAllocation.h"
#include "Drv_BoardIo.h" #include "Drv_BoardIo.h"
void DcModleVoltDetect(u16 Voltage);
StructDcModuleAbility DcModuleAbility = StructDcModuleAbility DcModuleAbility =
{ {
...@@ -300,7 +301,9 @@ void DcModule(void const * parameter) ...@@ -300,7 +301,9 @@ void DcModule(void const * parameter)
osDelay(6000); osDelay(6000);
DcModeleRelayInit(); DcModeleRelayInit();
DcModuleCanInit(); DcModuleCanInit();
//ACContactorSet(eSwSta_On); //ACContactorSet(eSwSta_On);
DcModuleAbility.MaxVolt = UserParam.DcMaxVolt; DcModuleAbility.MaxVolt = UserParam.DcMaxVolt;
DcModuleAbility.MinVolt = UserParam.DcMinVolt; DcModuleAbility.MinVolt = UserParam.DcMinVolt;
DcModuleAbility.MaxCurrt = UserParam.DcMaxCurrt; DcModuleAbility.MaxCurrt = UserParam.DcMaxCurrt;
...@@ -562,7 +565,7 @@ void GetNXRAcVoltMsg(u32 addr) ...@@ -562,7 +565,7 @@ void GetNXRAcVoltMsg(u32 addr)
{ {
StructDcModuleSend DataSend = {0}; StructDcModuleSend DataSend = {0};
u16 reg = 0; u16 reg = 0;
DataSend.Id = 0x680780 + (addr<<11); DataSend.Id = (0x00000060<<20) |(1<<19)| (addr<<11) |(0x000000f0 <<3);//0x6080780 + (addr<<11);//0x06080f80
DataSend.Len = 8; DataSend.Len = 8;
DataSend.Data[0] = 0x10; DataSend.Data[0] = 0x10;
DataSend.Data[1] = 0x00; DataSend.Data[1] = 0x00;
...@@ -580,7 +583,7 @@ void GetNXRAcVoltMsg(u32 addr) ...@@ -580,7 +583,7 @@ void GetNXRAcVoltMsg(u32 addr)
{ {
//osDelay(10); //osDelay(10);
} }
/*
reg = 0x000D; //B相 reg = 0x000D; //B相
DataSend.Data[2] = reg>>8; DataSend.Data[2] = reg>>8;
DataSend.Data[3] = reg; DataSend.Data[3] = reg;
...@@ -595,27 +598,70 @@ void GetNXRAcVoltMsg(u32 addr) ...@@ -595,27 +598,70 @@ void GetNXRAcVoltMsg(u32 addr)
if (pdTRUE != xQueueSend(DcModeMsg, &DataSend, 0)) if (pdTRUE != xQueueSend(DcModeMsg, &DataSend, 0))
{ {
//osDelay(10); //osDelay(10);
} }*/
} }
#include<math.h>
u16 DcVoltIn = 0;
void GetNXRAcVolt(CanRxMsg* RxMsg) void GetNXRAcVolt(CanRxMsg* RxMsg)
{ {
if ((0x6f8000 == (RxMsg->ExtId & 0x1FFFF807)) \ if ((0x060f8000 == (RxMsg->ExtId & 0xFFFF8000)) \
/*&& (0x41 == RxMsg->Data[0] || 0x42 == RxMsg->Data[0]) \*/ /*&& (0x41 == RxMsg->Data[0] || 0x42 == RxMsg->Data[0]) \*/
&& (0xf0 == RxMsg->Data[1])) && (0xf0 == RxMsg->Data[1]))
{ {
if(0x0C == RxMsg->Data[3]) if(0x0C == RxMsg->Data[3])
{ {
//A //A
u32 val = RxMsg->Data[4];
val = val << 8;
val |= RxMsg->Data[5];
val = val << 8;
val |= RxMsg->Data[6];
val = val << 8;
val |= RxMsg->Data[7];
u8 S = (u8)(val>>31) & 0x01;
u32 M = val&0x007fffff;
u16 E = (u8)(val>>23);
float f = (1+ M * pow(2,-23)) * pow(2, (E-127));
DcVoltIn = (u16)(f*10);
DcModleVoltDetect((u16)(f*10));
} }
else if(0x0D == RxMsg->Data[3]) else if(0x0D == RxMsg->Data[3])
{ {
//B //B
u32 val = RxMsg->Data[4];
val = val << 8;
val |= RxMsg->Data[5];
val = val << 8;
val |= RxMsg->Data[6];
val = val << 8;
val |= RxMsg->Data[7];
u8 S = (u8)(val>>31) & 0x01;
u32 M = val&0x007fffff;
u16 E = (u8)(val>>23);
float f = (1+ M * pow(2,-23)) * pow(2, (E-127));
DcModleVoltDetect((u16)(f*10));
} }
else if(0x0E == RxMsg->Data[3]) else if(0x0E == RxMsg->Data[3])
{ {
//C //C
u32 val = RxMsg->Data[4];
val = val << 8;
val |= RxMsg->Data[5];
val = val << 8;
val |= RxMsg->Data[6];
val = val << 8;
val |= RxMsg->Data[7];
u8 S = (u8)(val>>31) & 0x01;
u32 M = val&0x007fffff;
u16 E = (u8)(val>>23);
float f = (1+ M * pow(2,-23)) * pow(2, (E-127));
DcModleVoltDetect((u16)(f*10));
} }
} }
} }
......
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论