forked from gary/BCU
2
0
Fork 0

添加电压和温度

This commit is contained in:
ahu_gq 2025-04-16 10:59:32 +08:00
parent 036f9505b8
commit e35d808b94
5 changed files with 1903 additions and 841 deletions

View File

@ -10,15 +10,15 @@
<TargetName>stm32f407</TargetName> <TargetName>stm32f407</TargetName>
<ToolsetNumber>0x4</ToolsetNumber> <ToolsetNumber>0x4</ToolsetNumber>
<ToolsetName>ARM-ADS</ToolsetName> <ToolsetName>ARM-ADS</ToolsetName>
<pArmCC>5050106::V5.05 update 1 (build 106)::ARMCC</pArmCC> <pArmCC>5060960::V5.06 update 7 (build 960)::.\ARMCC</pArmCC>
<pCCUsed>5050106::V5.05 update 1 (build 106)::ARMCC</pCCUsed> <pCCUsed>5060960::V5.06 update 7 (build 960)::.\ARMCC</pCCUsed>
<uAC6>0</uAC6> <uAC6>0</uAC6>
<TargetOption> <TargetOption>
<TargetCommonOption> <TargetCommonOption>
<Device>STM32F407ZGTx</Device> <Device>STM32F407ZGTx</Device>
<Vendor>STMicroelectronics</Vendor> <Vendor>STMicroelectronics</Vendor>
<PackID>Keil.STM32F4xx_DFP.2.16.0</PackID> <PackID>Keil.STM32F4xx_DFP.3.0.0</PackID>
<PackURL>http://www.keil.com/pack/</PackURL> <PackURL>https://www.keil.com/pack/</PackURL>
<Cpu>IRAM(0x20000000,0x00020000) IRAM2(0x10000000,0x00010000) IROM(0x08000000,0x00100000) CPUTYPE("Cortex-M4") FPU2 CLOCK(12000000) ELITTLE</Cpu> <Cpu>IRAM(0x20000000,0x00020000) IRAM2(0x10000000,0x00010000) IROM(0x08000000,0x00100000) CPUTYPE("Cortex-M4") FPU2 CLOCK(12000000) ELITTLE</Cpu>
<FlashUtilSpec></FlashUtilSpec> <FlashUtilSpec></FlashUtilSpec>
<StartupFile></StartupFile> <StartupFile></StartupFile>
@ -187,7 +187,6 @@
<RvdsVP>2</RvdsVP> <RvdsVP>2</RvdsVP>
<RvdsMve>0</RvdsMve> <RvdsMve>0</RvdsMve>
<RvdsCdeCp>0</RvdsCdeCp> <RvdsCdeCp>0</RvdsCdeCp>
<nBranchProt>0</nBranchProt>
<hadIRAM2>1</hadIRAM2> <hadIRAM2>1</hadIRAM2>
<hadIROM2>0</hadIROM2> <hadIROM2>0</hadIROM2>
<StupSel>8</StupSel> <StupSel>8</StupSel>
@ -1068,8 +1067,8 @@
<TargetCommonOption> <TargetCommonOption>
<Device>STM32F407VGTx</Device> <Device>STM32F407VGTx</Device>
<Vendor>STMicroelectronics</Vendor> <Vendor>STMicroelectronics</Vendor>
<PackID>Keil.STM32F4xx_DFP.2.16.0</PackID> <PackID>Keil.STM32F4xx_DFP.3.0.0</PackID>
<PackURL>http://www.keil.com/pack/</PackURL> <PackURL>https://www.keil.com/pack/</PackURL>
<Cpu>IRAM(0x20000000,0x00020000) IRAM2(0x10000000,0x00010000) IROM(0x08000000,0x00100000) CPUTYPE("Cortex-M4") FPU2 CLOCK(12000000) ELITTLE</Cpu> <Cpu>IRAM(0x20000000,0x00020000) IRAM2(0x10000000,0x00010000) IROM(0x08000000,0x00100000) CPUTYPE("Cortex-M4") FPU2 CLOCK(12000000) ELITTLE</Cpu>
<FlashUtilSpec></FlashUtilSpec> <FlashUtilSpec></FlashUtilSpec>
<StartupFile></StartupFile> <StartupFile></StartupFile>
@ -1238,7 +1237,6 @@
<RvdsVP>2</RvdsVP> <RvdsVP>2</RvdsVP>
<RvdsMve>0</RvdsMve> <RvdsMve>0</RvdsMve>
<RvdsCdeCp>0</RvdsCdeCp> <RvdsCdeCp>0</RvdsCdeCp>
<nBranchProt>0</nBranchProt>
<hadIRAM2>1</hadIRAM2> <hadIRAM2>1</hadIRAM2>
<hadIROM2>0</hadIROM2> <hadIROM2>0</hadIROM2>
<StupSel>8</StupSel> <StupSel>8</StupSel>

View File

@ -219,7 +219,7 @@ uint32_t bms_get_fault_level_1(uint16_t input)
switch(input) switch(input)
{ {
case 1: case 1:
if (KIT_GET_BIT_32(bms_get_fault_single_bit(0 , kFaultLevel_First), 2)) //一级单体过压 if (KIT_GET_BIT_32(bms_get_fault_single_bit(0, kFaultLevel_First), 2)) //一级单体过压
{ {
tmp = 1; tmp = 1;
} }
@ -229,7 +229,7 @@ uint32_t bms_get_fault_level_1(uint16_t input)
} }
return tmp; return tmp;
case 2: case 2:
if (KIT_GET_BIT_32(bms_get_fault_single_bit(0 , kFaultLevel_First), 3)) //一级单体欠压 if (KIT_GET_BIT_32(bms_get_fault_single_bit(0, kFaultLevel_First), 3)) //一级单体欠压
{ {
tmp = 1; tmp = 1;
} }
@ -239,7 +239,7 @@ uint32_t bms_get_fault_level_1(uint16_t input)
} }
return tmp; return tmp;
case 3: case 3:
if (KIT_GET_BIT_32(bms_get_fault_single_bit(0 , kFaultLevel_First), 4)) //一级单体过温 if (KIT_GET_BIT_32(bms_get_fault_single_bit(0, kFaultLevel_First), 4)) //一级单体过温
{ {
tmp = 1; tmp = 1;
} }
@ -249,7 +249,7 @@ uint32_t bms_get_fault_level_1(uint16_t input)
} }
return tmp; return tmp;
case 4: case 4:
if (KIT_GET_BIT_32(bms_get_fault_single_bit(0 , kFaultLevel_First), 5)) //一级单体低温 if (KIT_GET_BIT_32(bms_get_fault_single_bit(0, kFaultLevel_First), 5)) //一级单体低温
{ {
tmp = 1; tmp = 1;
} }
@ -259,7 +259,7 @@ uint32_t bms_get_fault_level_1(uint16_t input)
} }
return tmp; return tmp;
case 5: case 5:
if (KIT_GET_BIT_32(bms_get_fault_single_bit(0 , kFaultLevel_First), 6)) //一级单体压差 if (KIT_GET_BIT_32(bms_get_fault_single_bit(0, kFaultLevel_First), 6)) //一级单体压差
{ {
tmp = 1; tmp = 1;
} }
@ -271,7 +271,7 @@ uint32_t bms_get_fault_level_1(uint16_t input)
case 6: case 6:
if (bms_get_run_status() == kRunStatus_Chg) if (bms_get_run_status() == kRunStatus_Chg)
{ {
if (KIT_GET_BIT_32(bms_get_fault_single_bit(0 , kFaultLevel_First), 8)) //一级充电电流过大 if (KIT_GET_BIT_32(bms_get_fault_single_bit(0, kFaultLevel_First), 8)) //一级充电电流过大
{ {
tmp = 1; tmp = 1;
} }
@ -284,7 +284,7 @@ uint32_t bms_get_fault_level_1(uint16_t input)
case 7: case 7:
if (bms_get_run_status() == kRunStatus_Dis) if (bms_get_run_status() == kRunStatus_Dis)
{ {
if (KIT_GET_BIT_32(bms_get_fault_single_bit(0 , kFaultLevel_First), 8)) //一级放电电流过大 if (KIT_GET_BIT_32(bms_get_fault_single_bit(0, kFaultLevel_First), 8)) //一级放电电流过大
{ {
tmp = 1; tmp = 1;
} }
@ -295,7 +295,7 @@ uint32_t bms_get_fault_level_1(uint16_t input)
} }
return tmp; return tmp;
case 8: case 8:
if (KIT_GET_BIT_32(bms_get_fault_single_bit(0 , kFaultLevel_First), 14)) //一级SOC过低 if (KIT_GET_BIT_32(bms_get_fault_single_bit(0, kFaultLevel_First), 14)) //一级SOC过低
{ {
tmp = 1; tmp = 1;
} }
@ -308,7 +308,7 @@ uint32_t bms_get_fault_level_1(uint16_t input)
tmp = 0; //一级SOC差异过大 tmp = 0; //一级SOC差异过大
return tmp; return tmp;
case 10: case 10:
if (KIT_GET_BIT_32(bms_get_fault_single_bit(0 , kFaultLevel_First), 15)) //一级绝缘过低 if (KIT_GET_BIT_32(bms_get_fault_single_bit(0, kFaultLevel_First), 15)) //一级绝缘过低
{ {
tmp = 1; tmp = 1;
} }
@ -318,7 +318,7 @@ uint32_t bms_get_fault_level_1(uint16_t input)
} }
return tmp; return tmp;
case 11: case 11:
if (KIT_GET_BIT_32(bms_get_fault_single_bit(0 , kFaultLevel_First), 0)) //一级总压过压--组端过压 if (KIT_GET_BIT_32(bms_get_fault_single_bit(0, kFaultLevel_First), 0)) //一级总压过压--组端过压
{ {
tmp = 1; tmp = 1;
} }
@ -328,7 +328,7 @@ uint32_t bms_get_fault_level_1(uint16_t input)
} }
return tmp; return tmp;
case 12: case 12:
if (KIT_GET_BIT_32(bms_get_fault_single_bit(0 , kFaultLevel_First), 1)) //一级总压欠压--组端欠压 if (KIT_GET_BIT_32(bms_get_fault_single_bit(0, kFaultLevel_First), 1)) //一级总压欠压--组端欠压
{ {
tmp = 1; tmp = 1;
} }
@ -337,7 +337,7 @@ uint32_t bms_get_fault_level_1(uint16_t input)
tmp = 0; tmp = 0;
} }
case 13: case 13:
if (KIT_GET_BIT_32(bms_get_fault_single_bit(1 , kFaultLevel_First), 12)) //1级极柱过温 if (KIT_GET_BIT_32(bms_get_fault_single_bit(1, kFaultLevel_First), 12)) //1级极柱过温
{ {
tmp = 1; tmp = 1;
} }
@ -347,7 +347,7 @@ uint32_t bms_get_fault_level_1(uint16_t input)
} }
return tmp; return tmp;
case 14: case 14:
if (KIT_GET_BIT_32(bms_get_fault_single_bit(0 , kFaultLevel_First), 9)) //高压异常 if (KIT_GET_BIT_32(bms_get_fault_single_bit(0, kFaultLevel_First), 9)) //高压异常
{ {
tmp = 1; tmp = 1;
} }
@ -374,7 +374,7 @@ uint32_t bms_get_fault_level_2(uint16_t input)
switch(input) switch(input)
{ {
case 1: case 1:
if (KIT_GET_BIT_32(bms_get_fault_single_bit(0 , kFaultLevel_Second), 2)) //2级单体过压 if (KIT_GET_BIT_32(bms_get_fault_single_bit(0, kFaultLevel_Second), 2)) //2级单体过压
{ {
tmp = 1; tmp = 1;
} }
@ -384,7 +384,7 @@ uint32_t bms_get_fault_level_2(uint16_t input)
} }
return tmp; return tmp;
case 2: case 2:
if (KIT_GET_BIT_32(bms_get_fault_single_bit(0 , kFaultLevel_Second), 3)) //2级单体欠压 if (KIT_GET_BIT_32(bms_get_fault_single_bit(0, kFaultLevel_Second), 3)) //2级单体欠压
{ {
tmp = 1; tmp = 1;
} }
@ -394,7 +394,7 @@ uint32_t bms_get_fault_level_2(uint16_t input)
} }
return tmp; return tmp;
case 3: case 3:
if (KIT_GET_BIT_32(bms_get_fault_single_bit(0 , kFaultLevel_Second), 4)) //2级单体过温 if (KIT_GET_BIT_32(bms_get_fault_single_bit(0, kFaultLevel_Second), 4)) //2级单体过温
{ {
tmp = 1; tmp = 1;
} }
@ -404,7 +404,7 @@ uint32_t bms_get_fault_level_2(uint16_t input)
} }
return tmp; return tmp;
case 4: case 4:
if (KIT_GET_BIT_32(bms_get_fault_single_bit(0 , kFaultLevel_Second), 5)) //2级单体低温 if (KIT_GET_BIT_32(bms_get_fault_single_bit(0, kFaultLevel_Second), 5)) //2级单体低温
{ {
tmp = 1; tmp = 1;
} }
@ -414,7 +414,7 @@ uint32_t bms_get_fault_level_2(uint16_t input)
} }
return tmp; return tmp;
case 5: case 5:
if (KIT_GET_BIT_32(bms_get_fault_single_bit(0 , kFaultLevel_Second), 6)) //2级单体压差 if (KIT_GET_BIT_32(bms_get_fault_single_bit(0, kFaultLevel_Second), 6)) //2级单体压差
{ {
tmp = 1; tmp = 1;
} }
@ -426,7 +426,7 @@ uint32_t bms_get_fault_level_2(uint16_t input)
case 6: case 6:
if (bms_get_run_status() == kRunStatus_Chg) if (bms_get_run_status() == kRunStatus_Chg)
{ {
if (KIT_GET_BIT_32(bms_get_fault_single_bit(0 , kFaultLevel_Second), 8)) //2级充电电流过大 if (KIT_GET_BIT_32(bms_get_fault_single_bit(0, kFaultLevel_Second), 8)) //2级充电电流过大
{ {
tmp = 1; tmp = 1;
} }
@ -439,7 +439,7 @@ uint32_t bms_get_fault_level_2(uint16_t input)
case 7: case 7:
if (bms_get_run_status() == kRunStatus_Dis) if (bms_get_run_status() == kRunStatus_Dis)
{ {
if (KIT_GET_BIT_32(bms_get_fault_single_bit(0 , kFaultLevel_Second), 8)) //2级放电电流过大 if (KIT_GET_BIT_32(bms_get_fault_single_bit(0, kFaultLevel_Second), 8)) //2级放电电流过大
{ {
tmp = 1; tmp = 1;
} }
@ -450,7 +450,7 @@ uint32_t bms_get_fault_level_2(uint16_t input)
} }
return tmp; return tmp;
case 8: case 8:
if (KIT_GET_BIT_32(bms_get_fault_single_bit(0 , kFaultLevel_Second), 14)) //2级SOC过低 if (KIT_GET_BIT_32(bms_get_fault_single_bit(0, kFaultLevel_Second), 14)) //2级SOC过低
{ {
tmp = 1; tmp = 1;
} }
@ -463,7 +463,7 @@ uint32_t bms_get_fault_level_2(uint16_t input)
tmp = 0; //一级SOC差异过大 tmp = 0; //一级SOC差异过大
return tmp; return tmp;
case 10: case 10:
if (KIT_GET_BIT_32(bms_get_fault_single_bit(0 , kFaultLevel_Second), 15)) //2级绝缘过低 if (KIT_GET_BIT_32(bms_get_fault_single_bit(0, kFaultLevel_Second), 15)) //2级绝缘过低
{ {
tmp = 1; tmp = 1;
} }
@ -473,7 +473,7 @@ uint32_t bms_get_fault_level_2(uint16_t input)
} }
return tmp; return tmp;
case 11: case 11:
if (KIT_GET_BIT_32(bms_get_fault_single_bit(0 , kFaultLevel_Second), 0)) //2级总压过压--组端过压 if (KIT_GET_BIT_32(bms_get_fault_single_bit(0, kFaultLevel_Second), 0)) //2级总压过压--组端过压
{ {
tmp = 1; tmp = 1;
} }
@ -483,7 +483,7 @@ uint32_t bms_get_fault_level_2(uint16_t input)
} }
return tmp; return tmp;
case 12: case 12:
if (KIT_GET_BIT_32(bms_get_fault_single_bit(0 , kFaultLevel_Second), 1)) //2级总压欠压--组端欠压 if (KIT_GET_BIT_32(bms_get_fault_single_bit(0, kFaultLevel_Second), 1)) //2级总压欠压--组端欠压
{ {
tmp = 1; tmp = 1;
} }
@ -492,7 +492,7 @@ uint32_t bms_get_fault_level_2(uint16_t input)
tmp = 0; tmp = 0;
} }
case 13: case 13:
if (KIT_GET_BIT_32(bms_get_fault_single_bit(1 , kFaultLevel_Second), 12)) //2级极柱过温 if (KIT_GET_BIT_32(bms_get_fault_single_bit(1, kFaultLevel_Second), 12)) //2级极柱过温
{ {
tmp = 1; tmp = 1;
} }
@ -522,7 +522,7 @@ uint32_t bms_get_fault_level_3(uint16_t input)
switch(input) switch(input)
{ {
case 1: case 1:
if (KIT_GET_BIT_32(bms_get_fault_single_bit(0 , kFaultLevel_Third), 2)) //3级单体过压 if (KIT_GET_BIT_32(bms_get_fault_single_bit(0, kFaultLevel_Third), 2)) //3级单体过压
{ {
tmp = 1; tmp = 1;
} }
@ -532,7 +532,7 @@ uint32_t bms_get_fault_level_3(uint16_t input)
} }
return tmp; return tmp;
case 2: case 2:
if (KIT_GET_BIT_32(bms_get_fault_single_bit(0 , kFaultLevel_Third), 3)) //3级单体欠压 if (KIT_GET_BIT_32(bms_get_fault_single_bit(0, kFaultLevel_Third), 3)) //3级单体欠压
{ {
tmp = 1; tmp = 1;
} }
@ -542,7 +542,7 @@ uint32_t bms_get_fault_level_3(uint16_t input)
} }
return tmp; return tmp;
case 3: case 3:
if (KIT_GET_BIT_32(bms_get_fault_single_bit(0 , kFaultLevel_Third), 4)) //3级单体过温 if (KIT_GET_BIT_32(bms_get_fault_single_bit(0, kFaultLevel_Third), 4)) //3级单体过温
{ {
tmp = 1; tmp = 1;
} }
@ -552,7 +552,7 @@ uint32_t bms_get_fault_level_3(uint16_t input)
} }
return tmp; return tmp;
case 4: case 4:
if (KIT_GET_BIT_32(bms_get_fault_single_bit(0 , kFaultLevel_Third), 5)) //3级单体低温 if (KIT_GET_BIT_32(bms_get_fault_single_bit(0, kFaultLevel_Third), 5)) //3级单体低温
{ {
tmp = 1; tmp = 1;
} }
@ -562,7 +562,7 @@ uint32_t bms_get_fault_level_3(uint16_t input)
} }
return tmp; return tmp;
case 5: case 5:
if (KIT_GET_BIT_32(bms_get_fault_single_bit(0 , kFaultLevel_Third), 6)) //3级单体压差 if (KIT_GET_BIT_32(bms_get_fault_single_bit(0, kFaultLevel_Third), 6)) //3级单体压差
{ {
tmp = 1; tmp = 1;
} }
@ -574,7 +574,7 @@ uint32_t bms_get_fault_level_3(uint16_t input)
case 6: case 6:
if (bms_get_run_status() == kRunStatus_Chg) if (bms_get_run_status() == kRunStatus_Chg)
{ {
if (KIT_GET_BIT_32(bms_get_fault_single_bit(0 , kFaultLevel_Third), 8)) //3级充电电流过大 if (KIT_GET_BIT_32(bms_get_fault_single_bit(0, kFaultLevel_Third), 8)) //3级充电电流过大
{ {
tmp = 1; tmp = 1;
} }
@ -587,7 +587,7 @@ uint32_t bms_get_fault_level_3(uint16_t input)
case 7: case 7:
if (bms_get_run_status() == kRunStatus_Dis) if (bms_get_run_status() == kRunStatus_Dis)
{ {
if (KIT_GET_BIT_32(bms_get_fault_single_bit(0 , kFaultLevel_Third), 8)) //3级放电电流过大 if (KIT_GET_BIT_32(bms_get_fault_single_bit(0, kFaultLevel_Third), 8)) //3级放电电流过大
{ {
tmp = 1; tmp = 1;
} }
@ -598,7 +598,7 @@ uint32_t bms_get_fault_level_3(uint16_t input)
} }
return tmp; return tmp;
case 8: case 8:
if (KIT_GET_BIT_32(bms_get_fault_single_bit(0 , kFaultLevel_Third), 14)) //3级SOC过低 if (KIT_GET_BIT_32(bms_get_fault_single_bit(0, kFaultLevel_Third), 14)) //3级SOC过低
{ {
tmp = 1; tmp = 1;
} }
@ -611,7 +611,7 @@ uint32_t bms_get_fault_level_3(uint16_t input)
tmp = 0; //一级SOC差异过大 tmp = 0; //一级SOC差异过大
return tmp; return tmp;
case 10: case 10:
if (KIT_GET_BIT_32(bms_get_fault_single_bit(0 , kFaultLevel_Third), 15)) //3级绝缘过低 if (KIT_GET_BIT_32(bms_get_fault_single_bit(0, kFaultLevel_Third), 15)) //3级绝缘过低
{ {
tmp = 1; tmp = 1;
} }
@ -621,7 +621,7 @@ uint32_t bms_get_fault_level_3(uint16_t input)
} }
return tmp; return tmp;
case 11: case 11:
if (KIT_GET_BIT_32(bms_get_fault_single_bit(0 , kFaultLevel_Third), 0)) //3级总压过压--组端过压 if (KIT_GET_BIT_32(bms_get_fault_single_bit(0, kFaultLevel_Third), 0)) //3级总压过压--组端过压
{ {
tmp = 1; tmp = 1;
} }
@ -631,7 +631,7 @@ uint32_t bms_get_fault_level_3(uint16_t input)
} }
return tmp; return tmp;
case 12: case 12:
if (KIT_GET_BIT_32(bms_get_fault_single_bit(0 , kFaultLevel_Third), 1)) //3级总压欠压--组端欠压 if (KIT_GET_BIT_32(bms_get_fault_single_bit(0, kFaultLevel_Third), 1)) //3级总压欠压--组端欠压
{ {
tmp = 1; tmp = 1;
} }
@ -640,7 +640,7 @@ uint32_t bms_get_fault_level_3(uint16_t input)
tmp = 0; tmp = 0;
} }
case 13: case 13:
if (KIT_GET_BIT_32(bms_get_fault_single_bit(1 , kFaultLevel_Third), 12)) //3级极柱过温 if (KIT_GET_BIT_32(bms_get_fault_single_bit(1, kFaultLevel_Third), 12)) //3级极柱过温
{ {
tmp = 1; tmp = 1;
} }
@ -650,7 +650,7 @@ uint32_t bms_get_fault_level_3(uint16_t input)
} }
return tmp; return tmp;
case 14: case 14:
if (KIT_GET_BIT_32(bms_get_fault_single_bit(1 , kFaultLevel_Third), 0)) //继电器粘连 if (KIT_GET_BIT_32(bms_get_fault_single_bit(1, kFaultLevel_Third), 0)) //继电器粘连
{ {
tmp = 1; tmp = 1;
} }
@ -659,7 +659,7 @@ uint32_t bms_get_fault_level_3(uint16_t input)
tmp = 0; tmp = 0;
} }
case 15: case 15:
if (KIT_GET_BIT_32(bms_get_fault_single_bit(2 , kFaultLevel_Third), 9)) //极限故障 if (KIT_GET_BIT_32(bms_get_fault_single_bit(2, kFaultLevel_Third), 9)) //极限故障
{ {
tmp = 1; tmp = 1;
} }
@ -668,7 +668,7 @@ uint32_t bms_get_fault_level_3(uint16_t input)
tmp = 0; tmp = 0;
} }
case 16: case 16:
if (KIT_GET_BIT_32(bms_get_fault_single_bit(1 , kFaultLevel_Third), 1)) //预充故障 if (KIT_GET_BIT_32(bms_get_fault_single_bit(1, kFaultLevel_Third), 1)) //预充故障
{ {
tmp = 1; tmp = 1;
} }
@ -677,7 +677,7 @@ uint32_t bms_get_fault_level_3(uint16_t input)
tmp = 0; tmp = 0;
} }
case 17: case 17:
if (KIT_GET_BIT_32(bms_get_fault_single_bit(2 , kFaultLevel_Third), 10)) //开路故障 if (KIT_GET_BIT_32(bms_get_fault_single_bit(2, kFaultLevel_Third), 10)) //开路故障
{ {
tmp = 1; tmp = 1;
} }
@ -819,6 +819,41 @@ const devPointMap bms_points[] = {
const int bms_point_count = sizeof(bms_points) / sizeof(bms_points[0]); const int bms_point_count = sizeof(bms_points) / sizeof(bms_points[0]);
/*
const char* key; // JSON 中的键,比如 "BCU_"后面不带数字数据后面通过BCU_pointId组合
uint16_t pointId; // 用于记录开始的测点号见bcu模型
uint16_t startCellIndex; // 开始的电压序号(入参)
uint16_t endCellIndex; // 结束的电压序号(入参)
uint32_t (*get_val)(uint16_t); // 对应值的获取函数
*/
const devCellPointMap bms_volt_points[] =
{
{"BCU_", 191, 0, 39,bms_get_baseInfo}, // 1号~40号电池电压
{"BCU_", 191, 40, 79,bms_get_baseInfo}, // 41号~80号电池电压
{"BCU_", 191, 80, 119,bms_get_baseInfo}, // 81号~120号电池电压
{"BCU_", 191, 120, 159,bms_get_baseInfo}, // 121号~160号电池电压
{"BCU_", 191, 160, 199,bms_get_baseInfo}, // 161号~200号电池电压
{"BCU_", 191, 200, 239,bms_get_baseInfo}, // 201号~240号电池电压
{"BCU_", 191, 240, 279,bms_get_baseInfo}, // 241号~280号电池电压
{"BCU_", 191, 280, 319,bms_get_baseInfo}, // 281号~320号电池电压
{"BCU_", 191, 320, 359,bms_get_baseInfo}, // 321号~360号电池电压
{"BCU_", 191, 360, 399,bms_get_baseInfo}, // 361号~400号电池电压
};
const devCellPointMap bms_temp_points[] =
{
{"BCU_", 611, 0, 39,bms_get_baseInfo}, // 1号~40号电池温度
{"BCU_", 611, 40, 79,bms_get_baseInfo}, // 41号~80号电池温度
{"BCU_", 611, 80, 119,bms_get_baseInfo}, // 81号~120号电池温度
{"BCU_", 611, 120, 159,bms_get_baseInfo}, // 121号~160号电池温度
{"BCU_", 611, 160, 199,bms_get_baseInfo}, // 161号~200号电池温度
};
const int bms_volt_count = sizeof(bms_volt_points) / sizeof(devCellPointMap);
const int bms_temp_count = sizeof(bms_temp_points) / sizeof(devCellPointMap);
void protocol_build_json(uint16_t groupId) void protocol_build_json(uint16_t groupId)
{ {
int val = 0; int val = 0;
@ -872,10 +907,115 @@ void protocol_build_json(uint16_t groupId)
} }
void publish_all_bms_groups(void) { void protocol_build_volt_json(uint8_t i)
uint8_t max_group = 0; {
const devCellPointMap* item = &bms_volt_points[i];
int val = 0;
char key[10] = {0};
cJSON* root = cJSON_CreateObject();
for (size_t i = 0; i < bms_point_count; i++) cJSON_AddNumberToObject(root, "timeStamp", drv_rtc_get_tick());
// devData 数组
cJSON* devDataArr = cJSON_CreateArray();
cJSON_AddItemToObject(root, "devData", devDataArr);
// 构建每一个设备项
cJSON* deviceObj = cJSON_CreateObject();
cJSON_AddItemToArray(devDataArr, deviceObj);
cJSON_AddStringToObject(deviceObj, "devType", "4");
cJSON_AddStringToObject(deviceObj, "devName", "BCU");
cJSON_AddStringToObject(deviceObj, "devId", "001");
cJSON_AddStringToObject(deviceObj, "sn", "SN123456");
// 构建 data 对象
cJSON* dataObj = cJSON_CreateObject();
cJSON_AddItemToObject(deviceObj, "data", dataObj);
for (int i = item->startCellIndex; i <= item->endCellIndex; ++i)
{
sprintf(key,"%s%d",item->key,item->pointId + i);
if (item->get_val != NULL)
{
val = item->get_val(i);
}
else
{
val = 0; // 默认值
}
cJSON_AddNumberToObject(dataObj, key, val);
}
// 转为 JSON 字符串
char* json_str = cJSON_PrintUnformatted(root);
if (json_str)
{
drv_mqtt_publish(json_str, strlen(json_str));
cJSON_free(json_str);
}
cJSON_Delete(root);
}
void protocol_build_temp_json(uint8_t i)
{
const devCellPointMap* item = &bms_temp_points[i];
int val = 0;
char key[10] = {0};
cJSON* root = cJSON_CreateObject();
cJSON_AddNumberToObject(root, "timeStamp", drv_rtc_get_tick());
// devData 数组
cJSON* devDataArr = cJSON_CreateArray();
cJSON_AddItemToObject(root, "devData", devDataArr);
// 构建每一个设备项
cJSON* deviceObj = cJSON_CreateObject();
cJSON_AddItemToArray(devDataArr, deviceObj);
cJSON_AddStringToObject(deviceObj, "devType", "4");
cJSON_AddStringToObject(deviceObj, "devName", "BCU");
cJSON_AddStringToObject(deviceObj, "devId", "001");
cJSON_AddStringToObject(deviceObj, "sn", "SN123456");
// 构建 data 对象
cJSON* dataObj = cJSON_CreateObject();
cJSON_AddItemToObject(deviceObj, "data", dataObj);
for (int i = item->startCellIndex; i <= item->endCellIndex; ++i)
{
sprintf(key,"%s%d",item->key,item->pointId + i);
if (item->get_val != NULL)
{
val = item->get_val(i);
}
else
{
val = 0; // 默认值
}
cJSON_AddNumberToObject(dataObj, key, val);
}
// 转为 JSON 字符串
char* json_str = cJSON_PrintUnformatted(root);
if (json_str)
{
drv_mqtt_publish(json_str, strlen(json_str));
cJSON_free(json_str);
}
cJSON_Delete(root);
}
void publish_all_bms_groups(void)
{
uint8_t max_group = 0;
uint8_t i = 0;
for (i = 0; i < bms_point_count; i++)
{ {
if (bms_points[i].groupId > max_group) if (bms_points[i].groupId > max_group)
{ {
@ -887,13 +1027,23 @@ void publish_all_bms_groups(void) {
{ {
protocol_build_json(g); protocol_build_json(g);
} }
for (i = 0; i < bms_volt_count; i++)
{
protocol_build_volt_json(i);
}
for (i = 0; i < bms_temp_count; i++)
{
protocol_build_temp_json(i);
}
} }
void mqtt_publish_bms_data(uint32_t basetime) void mqtt_publish_bms_data(uint32_t basetime)
{ {
static uint32_t mqtt_cycle_tick = 0; static uint32_t mqtt_cycle_tick = 0;
static uint8_t groupMax = 0; static uint8_t groupMax = 0;
uint16_t i = 0;
mqtt_cycle_tick += basetime; mqtt_cycle_tick += basetime;

File diff suppressed because it is too large Load Diff

View File

@ -26,8 +26,17 @@ typedef struct {
uint32_t (*get_val)(uint16_t); // 对应值的获取函数 uint32_t (*get_val)(uint16_t); // 对应值的获取函数
} devPointMap; } devPointMap;
typedef struct {
const char* key; // JSON 中的键,比如 "BCU_"后面不带数字数据后面通过BCU_pointId组合
uint16_t pointId; // 用于记录开始的测点号见bcu模型
uint16_t startCellIndex; // 开始的电压序号(入参)
uint16_t endCellIndex; // 结束的电压序号(入参)
uint32_t (*get_val)(uint16_t); // 对应值的获取函数
} devCellPointMap;
extern const devPointMap bms_points[]; extern const devPointMap bms_points[];
extern const devCellPointMap bms_volt_points[];
extern const devCellPointMap bms_temp_points[];
void mqtt_publish_bms_data(uint32_t basetime); void mqtt_publish_bms_data(uint32_t basetime);

View File

@ -21,6 +21,8 @@ extern "C" {
typedef struct { typedef struct {
const char* key; // JSON 中的键,比如 "BCU_2" const char* key; // JSON 中的键,比如 "BCU_2"
uint8_t groupId; // mqtt因为json长度限制这里面用于分组传输,从0开始
uint16_t input; // get_val的入参用于获取key对应的数据
uint32_t (*get_val)(uint16_t); // 对应值的获取函数 uint32_t (*get_val)(uint16_t); // 对应值的获取函数
} devPointMap; } devPointMap;