add bms_points except cells info
This commit is contained in:
parent
6f3d0a9cd8
commit
036f9505b8
|
@ -180,7 +180,19 @@ FaultLevel bms_get_min_fault_level(void)
|
|||
return level1;
|
||||
}
|
||||
|
||||
uint32_t bms_get_total_alarm(uint16_t input)
|
||||
{
|
||||
FaultLevel level;
|
||||
level = bms_get_max_fault_level() == kFaultLevel_First || bms_get_max_fault_level() == kFaultLevel_Second;
|
||||
return level;
|
||||
}
|
||||
|
||||
uint32_t bms_get_total_fault(uint16_t input)
|
||||
{
|
||||
FaultLevel level;
|
||||
level = bms_get_max_fault_level() == kFaultLevel_Third;
|
||||
return level;
|
||||
}
|
||||
|
||||
uint8_t bms_get_fault_cur_rate(RunStatus status)
|
||||
{
|
||||
|
|
|
@ -253,6 +253,10 @@ void bms_analyse_pwr_on_fault(RunStatus status, FaultArray *fault_array, uint32_
|
|||
void bms_clear_fault_relay_off_bit(FaultCode idx);
|
||||
void bms_clear_fault_relay_off_bit_by_status(RunStatus status, FaultCode idx);
|
||||
|
||||
//总故障,总告警
|
||||
uint32_t bms_get_total_alarm(uint16_t input);
|
||||
uint32_t bms_get_total_fault(uint16_t input);
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
|
|
@ -10,15 +10,15 @@
|
|||
<TargetName>stm32f407</TargetName>
|
||||
<ToolsetNumber>0x4</ToolsetNumber>
|
||||
<ToolsetName>ARM-ADS</ToolsetName>
|
||||
<pArmCC>5060960::V5.06 update 7 (build 960)::.\ARMCC</pArmCC>
|
||||
<pCCUsed>5060960::V5.06 update 7 (build 960)::.\ARMCC</pCCUsed>
|
||||
<pArmCC>5050106::V5.05 update 1 (build 106)::ARMCC</pArmCC>
|
||||
<pCCUsed>5050106::V5.05 update 1 (build 106)::ARMCC</pCCUsed>
|
||||
<uAC6>0</uAC6>
|
||||
<TargetOption>
|
||||
<TargetCommonOption>
|
||||
<Device>STM32F407ZGTx</Device>
|
||||
<Vendor>STMicroelectronics</Vendor>
|
||||
<PackID>Keil.STM32F4xx_DFP.3.0.0</PackID>
|
||||
<PackURL>https://www.keil.com/pack/</PackURL>
|
||||
<PackID>Keil.STM32F4xx_DFP.2.16.0</PackID>
|
||||
<PackURL>http://www.keil.com/pack/</PackURL>
|
||||
<Cpu>IRAM(0x20000000,0x00020000) IRAM2(0x10000000,0x00010000) IROM(0x08000000,0x00100000) CPUTYPE("Cortex-M4") FPU2 CLOCK(12000000) ELITTLE</Cpu>
|
||||
<FlashUtilSpec></FlashUtilSpec>
|
||||
<StartupFile></StartupFile>
|
||||
|
@ -187,6 +187,7 @@
|
|||
<RvdsVP>2</RvdsVP>
|
||||
<RvdsMve>0</RvdsMve>
|
||||
<RvdsCdeCp>0</RvdsCdeCp>
|
||||
<nBranchProt>0</nBranchProt>
|
||||
<hadIRAM2>1</hadIRAM2>
|
||||
<hadIROM2>0</hadIROM2>
|
||||
<StupSel>8</StupSel>
|
||||
|
@ -1067,8 +1068,8 @@
|
|||
<TargetCommonOption>
|
||||
<Device>STM32F407VGTx</Device>
|
||||
<Vendor>STMicroelectronics</Vendor>
|
||||
<PackID>Keil.STM32F4xx_DFP.3.0.0</PackID>
|
||||
<PackURL>https://www.keil.com/pack/</PackURL>
|
||||
<PackID>Keil.STM32F4xx_DFP.2.16.0</PackID>
|
||||
<PackURL>http://www.keil.com/pack/</PackURL>
|
||||
<Cpu>IRAM(0x20000000,0x00020000) IRAM2(0x10000000,0x00010000) IROM(0x08000000,0x00100000) CPUTYPE("Cortex-M4") FPU2 CLOCK(12000000) ELITTLE</Cpu>
|
||||
<FlashUtilSpec></FlashUtilSpec>
|
||||
<StartupFile></StartupFile>
|
||||
|
@ -1237,6 +1238,7 @@
|
|||
<RvdsVP>2</RvdsVP>
|
||||
<RvdsMve>0</RvdsMve>
|
||||
<RvdsCdeCp>0</RvdsCdeCp>
|
||||
<nBranchProt>0</nBranchProt>
|
||||
<hadIRAM2>1</hadIRAM2>
|
||||
<hadIROM2>0</hadIROM2>
|
||||
<StupSel>8</StupSel>
|
||||
|
|
File diff suppressed because it is too large
Load Diff
|
@ -1,39 +1,45 @@
|
|||
[BREAKPOINTS]
|
||||
ForceImpTypeAny = 0
|
||||
FForceImpTypeAny = 0
|
||||
ShowInfoWin = 1
|
||||
EnableFlashBP = 2
|
||||
BPDuringExecution = 0
|
||||
orceImpTypeAny = 0
|
||||
[CFI]
|
||||
CFISize = 0x00
|
||||
CCFISize = 0x00
|
||||
CFIAddr = 0x00
|
||||
FISize = 0x00
|
||||
[CPU]
|
||||
MonModeVTableAddr = 0xFFFFFFFF
|
||||
MOverrideMemMap = 0
|
||||
AllowSimulation = 1
|
||||
ScriptFile=""
|
||||
onModeVTableAddr = 0xFFFFFFFF
|
||||
MonModeDebug = 0
|
||||
MaxNumAPs = 0
|
||||
LowPowerHandlingMode = 0
|
||||
OverrideMemMap = 0
|
||||
AllowSimulation = 1
|
||||
ScriptFile=""
|
||||
[FLASH]
|
||||
CacheExcludeSize = 0x00
|
||||
CCacheExcludeSize = 0x00
|
||||
CacheExcludeAddr = 0x00
|
||||
MinNumBytesFlashDL = 0
|
||||
SkipProgOnCRCMatch = 1
|
||||
VerifyDownload = 1
|
||||
AllowCaching = 1
|
||||
EnableFlashDL = 2
|
||||
Override = 0
|
||||
Device="ARM7"
|
||||
Override = 1
|
||||
Device="Unspecified"
|
||||
acheExcludeSize = 0x00
|
||||
[GENERAL]
|
||||
WorkRAMSize = 0x00
|
||||
WWorkRAMSize = 0x00
|
||||
WorkRAMAddr = 0x00
|
||||
RAMUsageLimit = 0x00
|
||||
orkRAMSize = 0x00
|
||||
[SWO]
|
||||
SWOLogFile=""
|
||||
SSWOLogFile=""
|
||||
WOLogFile=""
|
||||
[MEM]
|
||||
RdOverrideOrMask = 0x00
|
||||
RRdOverrideOrMask = 0x00
|
||||
RdOverrideAndMask = 0xFFFFFFFF
|
||||
RdOverrideAddr = 0xFFFFFFFF
|
||||
WrOverrideOrMask = 0x00
|
||||
WrOverrideAndMask = 0xFFFFFFFF
|
||||
WrOverrideAddr = 0xFFFFFFFF
|
||||
dOverrideOrMask = 0x00
|
||||
|
|
|
@ -7,17 +7,814 @@
|
|||
******************************************************************************/
|
||||
|
||||
#include "protocol_mqtt_bcu.h"
|
||||
#include "iso_check.h"
|
||||
#include "soc_calculate.h"
|
||||
#include "sop_calculate.h"
|
||||
#include "version_manager.h"
|
||||
#include "dido_manager.h"
|
||||
#include "fault_manager.h"
|
||||
#include "flash_manager.h"
|
||||
#include "comm_manager.h"
|
||||
#include "hv_adc_manager.h"
|
||||
#include "eeprom_manager.h"
|
||||
#include "signal_manager.h"
|
||||
#include "statistic_manager.h"
|
||||
#include "bmu_manager.h"
|
||||
#include "protocol_comm.h"
|
||||
|
||||
uint32_t bms_get_baseInfo(uint16_t input)
|
||||
{
|
||||
uint32_t tmp;
|
||||
uint16_t bms_stu = 0;
|
||||
|
||||
if(bms_get_run_status() == kRunStatus_Init)
|
||||
{
|
||||
bms_stu = 0;
|
||||
}
|
||||
else if(bms_get_run_status() == kRunStatus_Standby)
|
||||
{
|
||||
bms_stu |= 0x1;
|
||||
}
|
||||
else if(bms_get_run_status() == kRunStatus_Chg)
|
||||
{
|
||||
bms_stu |= 0x2;
|
||||
}
|
||||
else if(bms_get_run_status() == kRunStatus_Dis)
|
||||
{
|
||||
bms_stu |= 0x3;
|
||||
}
|
||||
if(bms_get_signal(kSignalIdx_ForbidChg) == kSignalStatus_High)
|
||||
{
|
||||
bms_stu |= 0x10;
|
||||
}
|
||||
if(bms_get_signal(kSignalIdx_ForbidDis) == kSignalStatus_High)
|
||||
{
|
||||
bms_stu |= 0x20;
|
||||
}
|
||||
|
||||
switch(input)
|
||||
{
|
||||
case 1:
|
||||
tmp = bms_get_statistic_data(kStatisticData_TotalVolt);
|
||||
return tmp;
|
||||
case 2:
|
||||
tmp = bms_get_show_current();
|
||||
return tmp;
|
||||
case 3:
|
||||
tmp = bms_get_soc() / 100;
|
||||
return tmp;
|
||||
case 4:
|
||||
tmp = bms_get_soh() / 100;
|
||||
return tmp;
|
||||
case 5:
|
||||
tmp = bms_get_soc() / 100;
|
||||
return tmp;
|
||||
case 6:
|
||||
tmp = get_eeprom_data(kEep_RatedTotalVolt,kEepromDataType_Full);
|
||||
return tmp;
|
||||
case 7:
|
||||
tmp = get_eeprom_data(kEep_RatedCapacity,kEepromDataType_Full);
|
||||
return tmp;
|
||||
case 8:
|
||||
tmp = (uint32_t)bms_get_soc()*get_eeprom_data(kEep_RatedCapacity, kEepromDataType_Full)/10000;
|
||||
return tmp;
|
||||
case 9:
|
||||
tmp = get_eeprom_data(kEep_RatedCapacity, kEepromDataType_Full)*get_eeprom_data(kEep_RatedTotalVolt, kEepromDataType_Full)/10000;
|
||||
return tmp;
|
||||
case 10:
|
||||
tmp = (uint32_t)bms_get_soc() * get_eeprom_data(kEep_RatedCapacity, kEepromDataType_Full)/10000*get_eeprom_data(kEep_RatedTotalVolt, kEepromDataType_Full)/10000;
|
||||
return tmp;
|
||||
case 11:
|
||||
tmp = bms_get_bmu_num();
|
||||
return tmp;
|
||||
case 12:
|
||||
tmp = bms_get_bmu_online_num();
|
||||
return tmp;
|
||||
case 13:
|
||||
tmp = get_eeprom_data(kEep_CellNum, kEepromDataType_Full);
|
||||
return tmp;
|
||||
case 14:
|
||||
tmp = bms_get_statistic_data(kStatisticData_OnlineCellNum);
|
||||
return tmp;
|
||||
case 15:
|
||||
tmp = get_eeprom_data(kEep_TempNum, kEepromDataType_Full);
|
||||
return tmp;
|
||||
case 16:
|
||||
tmp = bms_get_statistic_data(kStatisticData_OnlineTempNum);
|
||||
return tmp;
|
||||
case 17:
|
||||
tmp = bms_get_sop_data(kSopData_DisCur);
|
||||
return tmp;
|
||||
case 18:
|
||||
tmp = (uint32_t)bms_get_sop_data(kSopData_DisCur)*get_eeprom_data(kEep_RatedTotalVolt, kEepromDataType_Full)/10000;
|
||||
return tmp;
|
||||
case 19:
|
||||
tmp = bms_get_sop_data(kSopData_ChgCur);
|
||||
return tmp;
|
||||
case 20:
|
||||
tmp = (uint32_t)bms_get_sop_data(kSopData_ChgCur)*get_eeprom_data(kEep_RatedTotalVolt, kEepromDataType_Full)/10000;
|
||||
return tmp;
|
||||
case 21:
|
||||
tmp = bms_get_iso_data(kIsoData_PosRes);
|
||||
return tmp;
|
||||
case 22:
|
||||
tmp = bms_get_iso_data(kIsoData_NegRes);
|
||||
return tmp;
|
||||
case 23:
|
||||
tmp = bms_get_statistic_data(kStatisticData_AvgVolt);
|
||||
return tmp;
|
||||
case 24:
|
||||
tmp = bms_get_statistic_data(kStatisticData_VoltDiff);
|
||||
return tmp;
|
||||
case 25:
|
||||
tmp = bms_get_statistic_data(kStatisticData_MaxVolt);
|
||||
return tmp;
|
||||
case 26:
|
||||
tmp = bms_get_statistic_data(kStatisticData_MaxVoltBmuIdx) + 1;
|
||||
return tmp;
|
||||
case 27:
|
||||
tmp = bms_get_statistic_data(kStatisticData_MaxVoltIdx) + 1;
|
||||
return tmp;
|
||||
case 28:
|
||||
tmp = bms_get_statistic_data(kStatisticData_MinVolt);
|
||||
return tmp;
|
||||
case 29:
|
||||
tmp = bms_get_statistic_data(kStatisticData_MinVoltBmuIdx) + 1;
|
||||
return tmp;
|
||||
case 30:
|
||||
tmp = bms_get_statistic_data(kStatisticData_MinVoltIdx) + 1;
|
||||
return tmp;
|
||||
case 31:
|
||||
tmp = bms_get_statistic_data(kStatisticData_AvgTemp);
|
||||
return tmp;
|
||||
case 32:
|
||||
tmp = bms_get_statistic_data(kStatisticData_TempDiff);
|
||||
return tmp;
|
||||
case 33:
|
||||
tmp = bms_get_statistic_data(kStatisticData_MaxTemp);
|
||||
return tmp;
|
||||
case 34:
|
||||
tmp = bms_get_statistic_data(kStatisticData_MaxTempBmuIdx) + 1;
|
||||
return tmp;
|
||||
case 35:
|
||||
tmp = bms_get_statistic_data(kStatisticData_MaxTempIdx) + 1;
|
||||
return tmp;
|
||||
case 36:
|
||||
tmp = bms_get_statistic_data(kStatisticData_MinTemp);
|
||||
return tmp;
|
||||
case 37:
|
||||
tmp = bms_get_statistic_data(kStatisticData_MinTempBmuIdx) + 1;
|
||||
return tmp;
|
||||
case 38:
|
||||
tmp = bms_get_statistic_data(kStatisticData_MinTempIdx) + 1;
|
||||
return tmp;
|
||||
case 39:
|
||||
tmp = (uint16_t)bms_get_cumulate_data(kCumulateData_DayChgCap);
|
||||
return tmp;
|
||||
case 40:
|
||||
tmp = (uint16_t)bms_get_cumulate_data(kCumulateData_DayChgEnergy);
|
||||
return tmp;
|
||||
case 41:
|
||||
tmp = (uint16_t)bms_get_cumulate_data(kCumulateData_DayDisCap);
|
||||
return tmp;
|
||||
case 42:
|
||||
tmp = (uint16_t)bms_get_cumulate_data(kCumulateData_DayDisEnergy);
|
||||
return tmp;
|
||||
case 43:
|
||||
tmp = (uint16_t)bms_get_cumulate_data(kCumulateData_DayChgTime);
|
||||
return tmp;
|
||||
case 44:
|
||||
tmp = (uint16_t)bms_get_cumulate_data(kCumulateData_DayDisTime);
|
||||
return tmp;
|
||||
case 45:
|
||||
tmp = bms_get_cumulate_data(kCumulateData_AccChgCap);
|
||||
return tmp;
|
||||
case 46:
|
||||
tmp = bms_get_cumulate_data(kCumulateData_AccChgEnergy);
|
||||
return tmp;
|
||||
case 47:
|
||||
tmp = bms_get_cumulate_data(kCumulateData_AccDisCap);
|
||||
return tmp;
|
||||
case 48:
|
||||
tmp = bms_get_cumulate_data(kCumulateData_AccDisEnergy);
|
||||
return tmp;
|
||||
case 49:
|
||||
tmp = bms_get_cumulate_data(kCumulateData_AccChgTime);
|
||||
return tmp;
|
||||
case 50:
|
||||
tmp = bms_get_cumulate_data(kCumulateData_AccDisTime);
|
||||
return tmp;
|
||||
case 51:
|
||||
tmp = bms_stu;
|
||||
return tmp;
|
||||
default:
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
|
||||
uint32_t bms_get_fault_level_1(uint16_t input)
|
||||
{
|
||||
uint32_t tmp = 0;
|
||||
|
||||
switch(input)
|
||||
{
|
||||
case 1:
|
||||
if (KIT_GET_BIT_32(bms_get_fault_single_bit(0 , kFaultLevel_First), 2)) //一级单体过压
|
||||
{
|
||||
tmp = 1;
|
||||
}
|
||||
else
|
||||
{
|
||||
tmp = 0;
|
||||
}
|
||||
return tmp;
|
||||
case 2:
|
||||
if (KIT_GET_BIT_32(bms_get_fault_single_bit(0 , kFaultLevel_First), 3)) //一级单体欠压
|
||||
{
|
||||
tmp = 1;
|
||||
}
|
||||
else
|
||||
{
|
||||
tmp = 0;
|
||||
}
|
||||
return tmp;
|
||||
case 3:
|
||||
if (KIT_GET_BIT_32(bms_get_fault_single_bit(0 , kFaultLevel_First), 4)) //一级单体过温
|
||||
{
|
||||
tmp = 1;
|
||||
}
|
||||
else
|
||||
{
|
||||
tmp = 0;
|
||||
}
|
||||
return tmp;
|
||||
case 4:
|
||||
if (KIT_GET_BIT_32(bms_get_fault_single_bit(0 , kFaultLevel_First), 5)) //一级单体低温
|
||||
{
|
||||
tmp = 1;
|
||||
}
|
||||
else
|
||||
{
|
||||
tmp = 0;
|
||||
}
|
||||
return tmp;
|
||||
case 5:
|
||||
if (KIT_GET_BIT_32(bms_get_fault_single_bit(0 , kFaultLevel_First), 6)) //一级单体压差
|
||||
{
|
||||
tmp = 1;
|
||||
}
|
||||
else
|
||||
{
|
||||
tmp = 0;
|
||||
}
|
||||
return tmp;
|
||||
case 6:
|
||||
if (bms_get_run_status() == kRunStatus_Chg)
|
||||
{
|
||||
if (KIT_GET_BIT_32(bms_get_fault_single_bit(0 , kFaultLevel_First), 8)) //一级充电电流过大
|
||||
{
|
||||
tmp = 1;
|
||||
}
|
||||
else
|
||||
{
|
||||
tmp = 0;
|
||||
}
|
||||
}
|
||||
return tmp;
|
||||
case 7:
|
||||
if (bms_get_run_status() == kRunStatus_Dis)
|
||||
{
|
||||
if (KIT_GET_BIT_32(bms_get_fault_single_bit(0 , kFaultLevel_First), 8)) //一级放电电流过大
|
||||
{
|
||||
tmp = 1;
|
||||
}
|
||||
else
|
||||
{
|
||||
tmp = 0;
|
||||
}
|
||||
}
|
||||
return tmp;
|
||||
case 8:
|
||||
if (KIT_GET_BIT_32(bms_get_fault_single_bit(0 , kFaultLevel_First), 14)) //一级SOC过低
|
||||
{
|
||||
tmp = 1;
|
||||
}
|
||||
else
|
||||
{
|
||||
tmp = 0;
|
||||
}
|
||||
return tmp;
|
||||
case 9:
|
||||
tmp = 0; //一级SOC差异过大
|
||||
return tmp;
|
||||
case 10:
|
||||
if (KIT_GET_BIT_32(bms_get_fault_single_bit(0 , kFaultLevel_First), 15)) //一级绝缘过低
|
||||
{
|
||||
tmp = 1;
|
||||
}
|
||||
else
|
||||
{
|
||||
tmp = 0;
|
||||
}
|
||||
return tmp;
|
||||
case 11:
|
||||
if (KIT_GET_BIT_32(bms_get_fault_single_bit(0 , kFaultLevel_First), 0)) //一级总压过压--组端过压
|
||||
{
|
||||
tmp = 1;
|
||||
}
|
||||
else
|
||||
{
|
||||
tmp = 0;
|
||||
}
|
||||
return tmp;
|
||||
case 12:
|
||||
if (KIT_GET_BIT_32(bms_get_fault_single_bit(0 , kFaultLevel_First), 1)) //一级总压欠压--组端欠压
|
||||
{
|
||||
tmp = 1;
|
||||
}
|
||||
else
|
||||
{
|
||||
tmp = 0;
|
||||
}
|
||||
case 13:
|
||||
if (KIT_GET_BIT_32(bms_get_fault_single_bit(1 , kFaultLevel_First), 12)) //1级极柱过温
|
||||
{
|
||||
tmp = 1;
|
||||
}
|
||||
else
|
||||
{
|
||||
tmp = 0;
|
||||
}
|
||||
return tmp;
|
||||
case 14:
|
||||
if (KIT_GET_BIT_32(bms_get_fault_single_bit(0 , kFaultLevel_First), 9)) //高压异常
|
||||
{
|
||||
tmp = 1;
|
||||
}
|
||||
else
|
||||
{
|
||||
tmp = 0;
|
||||
}
|
||||
return tmp;
|
||||
case 15:
|
||||
tmp = get_eeprom_data(kEep_TempNum, kEepromDataType_Full);
|
||||
return tmp;
|
||||
case 16:
|
||||
tmp = bms_get_statistic_data(kStatisticData_OnlineTempNum);
|
||||
break;
|
||||
default:
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
|
||||
uint32_t bms_get_fault_level_2(uint16_t input)
|
||||
{
|
||||
uint32_t tmp = 0;
|
||||
|
||||
switch(input)
|
||||
{
|
||||
case 1:
|
||||
if (KIT_GET_BIT_32(bms_get_fault_single_bit(0 , kFaultLevel_Second), 2)) //2级单体过压
|
||||
{
|
||||
tmp = 1;
|
||||
}
|
||||
else
|
||||
{
|
||||
tmp = 0;
|
||||
}
|
||||
return tmp;
|
||||
case 2:
|
||||
if (KIT_GET_BIT_32(bms_get_fault_single_bit(0 , kFaultLevel_Second), 3)) //2级单体欠压
|
||||
{
|
||||
tmp = 1;
|
||||
}
|
||||
else
|
||||
{
|
||||
tmp = 0;
|
||||
}
|
||||
return tmp;
|
||||
case 3:
|
||||
if (KIT_GET_BIT_32(bms_get_fault_single_bit(0 , kFaultLevel_Second), 4)) //2级单体过温
|
||||
{
|
||||
tmp = 1;
|
||||
}
|
||||
else
|
||||
{
|
||||
tmp = 0;
|
||||
}
|
||||
return tmp;
|
||||
case 4:
|
||||
if (KIT_GET_BIT_32(bms_get_fault_single_bit(0 , kFaultLevel_Second), 5)) //2级单体低温
|
||||
{
|
||||
tmp = 1;
|
||||
}
|
||||
else
|
||||
{
|
||||
tmp = 0;
|
||||
}
|
||||
return tmp;
|
||||
case 5:
|
||||
if (KIT_GET_BIT_32(bms_get_fault_single_bit(0 , kFaultLevel_Second), 6)) //2级单体压差
|
||||
{
|
||||
tmp = 1;
|
||||
}
|
||||
else
|
||||
{
|
||||
tmp = 0;
|
||||
}
|
||||
return tmp;
|
||||
case 6:
|
||||
if (bms_get_run_status() == kRunStatus_Chg)
|
||||
{
|
||||
if (KIT_GET_BIT_32(bms_get_fault_single_bit(0 , kFaultLevel_Second), 8)) //2级充电电流过大
|
||||
{
|
||||
tmp = 1;
|
||||
}
|
||||
else
|
||||
{
|
||||
tmp = 0;
|
||||
}
|
||||
}
|
||||
return tmp;
|
||||
case 7:
|
||||
if (bms_get_run_status() == kRunStatus_Dis)
|
||||
{
|
||||
if (KIT_GET_BIT_32(bms_get_fault_single_bit(0 , kFaultLevel_Second), 8)) //2级放电电流过大
|
||||
{
|
||||
tmp = 1;
|
||||
}
|
||||
else
|
||||
{
|
||||
tmp = 0;
|
||||
}
|
||||
}
|
||||
return tmp;
|
||||
case 8:
|
||||
if (KIT_GET_BIT_32(bms_get_fault_single_bit(0 , kFaultLevel_Second), 14)) //2级SOC过低
|
||||
{
|
||||
tmp = 1;
|
||||
}
|
||||
else
|
||||
{
|
||||
tmp = 0;
|
||||
}
|
||||
return tmp;
|
||||
case 9:
|
||||
tmp = 0; //一级SOC差异过大
|
||||
return tmp;
|
||||
case 10:
|
||||
if (KIT_GET_BIT_32(bms_get_fault_single_bit(0 , kFaultLevel_Second), 15)) //2级绝缘过低
|
||||
{
|
||||
tmp = 1;
|
||||
}
|
||||
else
|
||||
{
|
||||
tmp = 0;
|
||||
}
|
||||
return tmp;
|
||||
case 11:
|
||||
if (KIT_GET_BIT_32(bms_get_fault_single_bit(0 , kFaultLevel_Second), 0)) //2级总压过压--组端过压
|
||||
{
|
||||
tmp = 1;
|
||||
}
|
||||
else
|
||||
{
|
||||
tmp = 0;
|
||||
}
|
||||
return tmp;
|
||||
case 12:
|
||||
if (KIT_GET_BIT_32(bms_get_fault_single_bit(0 , kFaultLevel_Second), 1)) //2级总压欠压--组端欠压
|
||||
{
|
||||
tmp = 1;
|
||||
}
|
||||
else
|
||||
{
|
||||
tmp = 0;
|
||||
}
|
||||
case 13:
|
||||
if (KIT_GET_BIT_32(bms_get_fault_single_bit(1 , kFaultLevel_Second), 12)) //2级极柱过温
|
||||
{
|
||||
tmp = 1;
|
||||
}
|
||||
else
|
||||
{
|
||||
tmp = 0;
|
||||
}
|
||||
return tmp;
|
||||
case 14:
|
||||
tmp = bms_get_statistic_data(kStatisticData_OnlineCellNum);
|
||||
return tmp;
|
||||
case 15:
|
||||
tmp = get_eeprom_data(kEep_TempNum, kEepromDataType_Full);
|
||||
return tmp;
|
||||
case 16:
|
||||
tmp = bms_get_statistic_data(kStatisticData_OnlineTempNum);
|
||||
break;
|
||||
default:
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
|
||||
uint32_t bms_get_fault_level_3(uint16_t input)
|
||||
{
|
||||
uint32_t tmp = 0;
|
||||
|
||||
switch(input)
|
||||
{
|
||||
case 1:
|
||||
if (KIT_GET_BIT_32(bms_get_fault_single_bit(0 , kFaultLevel_Third), 2)) //3级单体过压
|
||||
{
|
||||
tmp = 1;
|
||||
}
|
||||
else
|
||||
{
|
||||
tmp = 0;
|
||||
}
|
||||
return tmp;
|
||||
case 2:
|
||||
if (KIT_GET_BIT_32(bms_get_fault_single_bit(0 , kFaultLevel_Third), 3)) //3级单体欠压
|
||||
{
|
||||
tmp = 1;
|
||||
}
|
||||
else
|
||||
{
|
||||
tmp = 0;
|
||||
}
|
||||
return tmp;
|
||||
case 3:
|
||||
if (KIT_GET_BIT_32(bms_get_fault_single_bit(0 , kFaultLevel_Third), 4)) //3级单体过温
|
||||
{
|
||||
tmp = 1;
|
||||
}
|
||||
else
|
||||
{
|
||||
tmp = 0;
|
||||
}
|
||||
return tmp;
|
||||
case 4:
|
||||
if (KIT_GET_BIT_32(bms_get_fault_single_bit(0 , kFaultLevel_Third), 5)) //3级单体低温
|
||||
{
|
||||
tmp = 1;
|
||||
}
|
||||
else
|
||||
{
|
||||
tmp = 0;
|
||||
}
|
||||
return tmp;
|
||||
case 5:
|
||||
if (KIT_GET_BIT_32(bms_get_fault_single_bit(0 , kFaultLevel_Third), 6)) //3级单体压差
|
||||
{
|
||||
tmp = 1;
|
||||
}
|
||||
else
|
||||
{
|
||||
tmp = 0;
|
||||
}
|
||||
return tmp;
|
||||
case 6:
|
||||
if (bms_get_run_status() == kRunStatus_Chg)
|
||||
{
|
||||
if (KIT_GET_BIT_32(bms_get_fault_single_bit(0 , kFaultLevel_Third), 8)) //3级充电电流过大
|
||||
{
|
||||
tmp = 1;
|
||||
}
|
||||
else
|
||||
{
|
||||
tmp = 0;
|
||||
}
|
||||
}
|
||||
return tmp;
|
||||
case 7:
|
||||
if (bms_get_run_status() == kRunStatus_Dis)
|
||||
{
|
||||
if (KIT_GET_BIT_32(bms_get_fault_single_bit(0 , kFaultLevel_Third), 8)) //3级放电电流过大
|
||||
{
|
||||
tmp = 1;
|
||||
}
|
||||
else
|
||||
{
|
||||
tmp = 0;
|
||||
}
|
||||
}
|
||||
return tmp;
|
||||
case 8:
|
||||
if (KIT_GET_BIT_32(bms_get_fault_single_bit(0 , kFaultLevel_Third), 14)) //3级SOC过低
|
||||
{
|
||||
tmp = 1;
|
||||
}
|
||||
else
|
||||
{
|
||||
tmp = 0;
|
||||
}
|
||||
return tmp;
|
||||
case 9:
|
||||
tmp = 0; //一级SOC差异过大
|
||||
return tmp;
|
||||
case 10:
|
||||
if (KIT_GET_BIT_32(bms_get_fault_single_bit(0 , kFaultLevel_Third), 15)) //3级绝缘过低
|
||||
{
|
||||
tmp = 1;
|
||||
}
|
||||
else
|
||||
{
|
||||
tmp = 0;
|
||||
}
|
||||
return tmp;
|
||||
case 11:
|
||||
if (KIT_GET_BIT_32(bms_get_fault_single_bit(0 , kFaultLevel_Third), 0)) //3级总压过压--组端过压
|
||||
{
|
||||
tmp = 1;
|
||||
}
|
||||
else
|
||||
{
|
||||
tmp = 0;
|
||||
}
|
||||
return tmp;
|
||||
case 12:
|
||||
if (KIT_GET_BIT_32(bms_get_fault_single_bit(0 , kFaultLevel_Third), 1)) //3级总压欠压--组端欠压
|
||||
{
|
||||
tmp = 1;
|
||||
}
|
||||
else
|
||||
{
|
||||
tmp = 0;
|
||||
}
|
||||
case 13:
|
||||
if (KIT_GET_BIT_32(bms_get_fault_single_bit(1 , kFaultLevel_Third), 12)) //3级极柱过温
|
||||
{
|
||||
tmp = 1;
|
||||
}
|
||||
else
|
||||
{
|
||||
tmp = 0;
|
||||
}
|
||||
return tmp;
|
||||
case 14:
|
||||
if (KIT_GET_BIT_32(bms_get_fault_single_bit(1 , kFaultLevel_Third), 0)) //继电器粘连
|
||||
{
|
||||
tmp = 1;
|
||||
}
|
||||
else
|
||||
{
|
||||
tmp = 0;
|
||||
}
|
||||
case 15:
|
||||
if (KIT_GET_BIT_32(bms_get_fault_single_bit(2 , kFaultLevel_Third), 9)) //极限故障
|
||||
{
|
||||
tmp = 1;
|
||||
}
|
||||
else
|
||||
{
|
||||
tmp = 0;
|
||||
}
|
||||
case 16:
|
||||
if (KIT_GET_BIT_32(bms_get_fault_single_bit(1 , kFaultLevel_Third), 1)) //预充故障
|
||||
{
|
||||
tmp = 1;
|
||||
}
|
||||
else
|
||||
{
|
||||
tmp = 0;
|
||||
}
|
||||
case 17:
|
||||
if (KIT_GET_BIT_32(bms_get_fault_single_bit(2 , kFaultLevel_Third), 10)) //开路故障
|
||||
{
|
||||
tmp = 1;
|
||||
}
|
||||
else
|
||||
{
|
||||
tmp = 0;
|
||||
}
|
||||
default:
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
|
||||
//把这个请按照数据模型填充完毕
|
||||
const devPointMap bms_points[] = {
|
||||
{"BCU_2", 0, 0, NULL}, // 总告警
|
||||
{"BCU_3", 0, 0, NULL}, // 总故障
|
||||
{"BCU_4", 0, 0, NULL}, // 单体过压告警一级
|
||||
{"BCU_5", 0, 0, NULL}, // 单体欠压告警一级
|
||||
{"BCU_6", 0, 0, NULL}, // 单体过温告警一级
|
||||
{"BCU_7", 0, 0, NULL}, // 单体低温告警一级
|
||||
{"BCU_8", 0, 0, NULL}, // 单体压差告警一级
|
||||
{"BCU_9", 0, 0, NULL}, // 充电过流告警一级
|
||||
{"BCU_2", 0, 0, bms_get_total_alarm}, // 总告警
|
||||
{"BCU_3", 0, 0, bms_get_total_fault}, // 总故障
|
||||
{"BCU_4", 0, 1, bms_get_fault_level_1}, // 单体过压告警一级
|
||||
{"BCU_5", 0, 2, bms_get_fault_level_1}, // 单体欠压告警一级
|
||||
{"BCU_6", 0, 3, bms_get_fault_level_1}, // 单体过温告警一级
|
||||
{"BCU_7", 0, 4, bms_get_fault_level_1}, // 单体低温告警一级
|
||||
{"BCU_8", 0, 5, bms_get_fault_level_1}, // 单体压差告警一级
|
||||
{"BCU_9", 0, 6, bms_get_fault_level_1}, // 充电过流告警一级
|
||||
{"BCU_10", 0, 7, bms_get_fault_level_1}, // 放电过流告警一级
|
||||
{"BCU_11", 0, 8, bms_get_fault_level_1}, // SOC过低告警一级
|
||||
{"BCU_12", 0, 9, bms_get_fault_level_1}, // SOC差异过大告警一级
|
||||
{"BCU_13", 0, 10, bms_get_fault_level_1}, // 绝缘过低告警一级
|
||||
|
||||
{"BCU_14", 0, 1, bms_get_fault_level_2}, // 单体过压告警二级
|
||||
{"BCU_15", 0, 2, bms_get_fault_level_2}, // 单体欠压告警二级
|
||||
{"BCU_16", 0, 3, bms_get_fault_level_2}, // 单体过温告警二级
|
||||
{"BCU_17", 0, 4, bms_get_fault_level_2}, // 单体低温告警二级
|
||||
{"BCU_18", 0, 5, bms_get_fault_level_2}, // 单体压差告警二级
|
||||
{"BCU_19", 0, 6, bms_get_fault_level_2}, // 充电过流告警二级
|
||||
{"BCU_20", 0, 7, bms_get_fault_level_2}, // 放电过流告警二级
|
||||
{"BCU_21", 0, 8, bms_get_fault_level_2}, // SOC过低告警二级
|
||||
{"BCU_22", 0, 9, bms_get_fault_level_2}, // SOC差异过大告警二级
|
||||
{"BCU_23", 0, 10, bms_get_fault_level_2}, // 绝缘过低告警二级
|
||||
|
||||
{"BCU_24", 0, 1, bms_get_fault_level_3}, // 单体过压告警三级
|
||||
{"BCU_25", 0, 2, bms_get_fault_level_3}, // 单体欠压告警三级
|
||||
{"BCU_26", 0, 3, bms_get_fault_level_3}, // 单体过温告警三级
|
||||
{"BCU_27", 0, 4, bms_get_fault_level_3}, // 单体低温告警三级
|
||||
{"BCU_28", 0, 5, bms_get_fault_level_3}, // 单体压差告警三级
|
||||
{"BCU_29", 0, 6, bms_get_fault_level_3}, // 充电过流告警三级
|
||||
{"BCU_30", 0, 7, bms_get_fault_level_3}, // 放电过流告警三级
|
||||
{"BCU_31", 0, 8, bms_get_fault_level_3}, // SOC过低告警三级
|
||||
{"BCU_32", 0, 9, bms_get_fault_level_3}, // SOC差异过大告警三级
|
||||
{"BCU_33", 0, 10, bms_get_fault_level_3}, // 绝缘过低告警三级
|
||||
|
||||
{"BCU_34", 0, 0, NULL}, // 电芯温度极限告警
|
||||
{"BCU_35", 0, 0, NULL}, // 电芯电压极限告警
|
||||
{"BCU_36", 0, 0, NULL}, // 簇间环流1级告警
|
||||
{"BCU_37", 0, 0, NULL}, // 簇间环流2级告警
|
||||
{"BCU_38", 0, 0, NULL}, // 簇间环流3级告警
|
||||
{"BCU_39", 0, 0, NULL}, // 簇间电流差1级告警
|
||||
{"BCU_40", 0, 0, NULL}, // 簇间电流差2级告警
|
||||
{"BCU_41", 0, 0, NULL}, // 簇间电流差3级告警
|
||||
|
||||
{"BCU_42", 1, 11, bms_get_fault_level_1}, // 组端过压1级告警
|
||||
{"BCU_43", 1, 11, bms_get_fault_level_2}, // 组端过压2级告警
|
||||
{"BCU_44", 1, 11, bms_get_fault_level_3}, // 组端过压3级告警
|
||||
{"BCU_45", 1, 12, bms_get_fault_level_1}, // 组端欠压1级告警
|
||||
{"BCU_46", 1, 12, bms_get_fault_level_2}, // 组端欠压2级告警
|
||||
{"BCU_47", 1, 12, bms_get_fault_level_3}, // 组端欠压3级告警
|
||||
{"BCU_48", 1, 13, bms_get_fault_level_1}, // 极柱过温1级告警
|
||||
{"BCU_49", 1, 13, bms_get_fault_level_2}, // 极柱过温2级告警
|
||||
{"BCU_50", 1, 13, bms_get_fault_level_3}, // 极柱过温3级告警
|
||||
|
||||
{"BCU_51", 1, 0, NULL}, // AFE温感排线异常
|
||||
{"BCU_52", 1, 0, NULL}, // AFE电压排线异常
|
||||
{"BCU_53", 1, 0, NULL}, // 与电池簇通信告警
|
||||
{"BCU_54", 1, 0, NULL}, // 主从通讯告警
|
||||
{"BCU_55", 1, 14, bms_get_fault_level_3}, // 继电器粘连告警
|
||||
{"BCU_56", 1, 15, bms_get_fault_level_3}, // 电池极限故障
|
||||
{"BCU_57", 1, 0, NULL}, // 熔丝故障
|
||||
{"BCU_58", 1, 0, NULL}, // 断路器故障
|
||||
{"BCU_59", 1, 0, NULL}, // 空调故障
|
||||
{"BCU_60", 1, 0, NULL}, // 消防设备故障
|
||||
{"BCU_61", 1, 0, NULL}, // 消防火警
|
||||
{"BCU_62", 1, 0, NULL}, // 消防喷洒
|
||||
{"BCU_63", 1, 0, NULL}, // AFE故障
|
||||
{"BCU_64", 1, 14, bms_get_fault_level_1}, // 高压异常
|
||||
{"BCU_65", 1, 16, bms_get_fault_level_3}, // 预充告警
|
||||
{"BCU_66", 1, 17, bms_get_fault_level_3}, // 开路故障
|
||||
|
||||
{"BCU_67", 1, 1, bms_get_baseInfo}, // 总压
|
||||
{"BCU_68", 1, 2, bms_get_baseInfo}, // 总电流
|
||||
{"BCU_69", 1, 3, bms_get_baseInfo}, // SOC
|
||||
{"BCU_70", 1, 4, bms_get_baseInfo}, // SOH
|
||||
{"BCU_71", 1, 5, bms_get_baseInfo}, // SOE
|
||||
{"BCU_72", 1, 6, bms_get_baseInfo}, // 额定总压
|
||||
{"BCU_73", 1, 7, bms_get_baseInfo}, // 额定容量
|
||||
{"BCU_74", 1, 8, bms_get_baseInfo}, // 剩余容量
|
||||
{"BCU_75", 1, 9, bms_get_baseInfo}, // 额定电量
|
||||
{"BCU_76", 1, 10, bms_get_baseInfo}, // 剩余电量
|
||||
{"BCU_77", 1, 11, bms_get_baseInfo}, // 从机总数(BMU)
|
||||
{"BCU_78", 1, 12, bms_get_baseInfo}, // 在线从机总数(BMU)
|
||||
{"BCU_79", 1, 13, bms_get_baseInfo}, // 电池总数
|
||||
{"BCU_80", 1, 14, bms_get_baseInfo}, // 在线电池总数
|
||||
{"BCU_81", 1, 15, bms_get_baseInfo}, // 温感总数
|
||||
|
||||
{"BCU_82", 2, 16, bms_get_baseInfo}, // 在线温感总数
|
||||
{"BCU_83", 2, 17, bms_get_baseInfo}, // 最大允许放电电流
|
||||
{"BCU_84", 2, 18, bms_get_baseInfo}, // 最大允许放电功率
|
||||
{"BCU_85", 2, 19, bms_get_baseInfo}, // 最大允许充电电流
|
||||
{"BCU_86", 2, 20, bms_get_baseInfo}, // 最大允许充电功率
|
||||
{"BCU_87", 2, 21, bms_get_baseInfo}, // 正极绝缘阻值
|
||||
{"BCU_88", 2, 22, bms_get_baseInfo}, // 负极绝缘阻值
|
||||
{"BCU_89", 2, 23, bms_get_baseInfo}, // 单体平均电压
|
||||
{"BCU_90", 2, 24, bms_get_baseInfo}, // 单体最大压差
|
||||
{"BCU_91", 2, 25, bms_get_baseInfo}, // 最高单体电压
|
||||
{"BCU_92", 2, 26, bms_get_baseInfo}, // 最高单体电压从机号
|
||||
{"BCU_93", 2, 27, bms_get_baseInfo}, // 最高单体电压编号
|
||||
{"BCU_94", 2, 28, bms_get_baseInfo}, // 最低单体电压
|
||||
{"BCU_95", 2, 29, bms_get_baseInfo}, // 最低单体电压从机号
|
||||
{"BCU_96", 2, 30, bms_get_baseInfo}, // 最低单体电压编号
|
||||
{"BCU_97", 2, 31, bms_get_baseInfo}, // 单体平均温度
|
||||
{"BCU_98", 2, 32, bms_get_baseInfo}, // 最大温差
|
||||
{"BCU_99", 2, 33, bms_get_baseInfo}, // 最高单体温度
|
||||
{"BCU_100", 2, 34, bms_get_baseInfo}, // 最高单体温度从机号
|
||||
{"BCU_101", 2, 35, bms_get_baseInfo}, // 最高单体温度编号
|
||||
{"BCU_102", 2, 36, bms_get_baseInfo}, // 最低单体温度
|
||||
{"BCU_103", 2, 37, bms_get_baseInfo}, // 最低单体温度从机号
|
||||
{"BCU_104", 2, 38, bms_get_baseInfo}, // 最低单体温度编号
|
||||
{"BCU_105", 2, 39, bms_get_baseInfo}, // 日充电容量
|
||||
{"BCU_106", 2, 40, bms_get_baseInfo}, // 日充电电量
|
||||
{"BCU_107", 2, 41, bms_get_baseInfo}, // 日放电容量
|
||||
{"BCU_108", 2, 42, bms_get_baseInfo}, // 日放电电量
|
||||
{"BCU_109", 2, 43, bms_get_baseInfo}, // 日充电时间
|
||||
{"BCU_110", 2, 44, bms_get_baseInfo}, // 日放电时间
|
||||
{"BCU_111", 2, 45, bms_get_baseInfo}, // 累计充电容量
|
||||
{"BCU_112", 2, 46, bms_get_baseInfo}, // 累计充电电量
|
||||
{"BCU_113", 2, 47, bms_get_baseInfo}, // 累计放电容量
|
||||
{"BCU_114", 2, 48, bms_get_baseInfo}, // 累计放电电量
|
||||
{"BCU_115", 2, 49, bms_get_baseInfo}, // 累计充电时间
|
||||
{"BCU_116", 2, 50, bms_get_baseInfo}, // 累计放电时间
|
||||
{"BCU_117", 2, 51, bms_get_baseInfo}, // BCU工作状态
|
||||
};
|
||||
|
||||
const int bms_point_count = sizeof(bms_points) / sizeof(bms_points[0]);
|
||||
|
@ -78,13 +875,16 @@ void protocol_build_json(uint16_t groupId)
|
|||
void publish_all_bms_groups(void) {
|
||||
uint8_t max_group = 0;
|
||||
|
||||
for (size_t i = 0; i < bms_point_count; i++) {
|
||||
if (bms_points[i].groupId > max_group) {
|
||||
for (size_t i = 0; i < bms_point_count; i++)
|
||||
{
|
||||
if (bms_points[i].groupId > max_group)
|
||||
{
|
||||
max_group = bms_points[i].groupId;
|
||||
}
|
||||
}
|
||||
|
||||
for (uint8_t g = 0; g <= max_group; g++) {
|
||||
for (uint8_t g = 0; g <= max_group; g++)
|
||||
{
|
||||
protocol_build_json(g);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -10,7 +10,7 @@
|
|||
|
||||
uint8_t rev_buff[QFC41D_MAX_RECV_SIZE] = {0};
|
||||
uint8_t send_buff[QFC41D_MAX_SEND_SIZE] = {0};
|
||||
uint8_t wifiName[40] = {0}, wifiPassWord[40] = {0}, bleName[40] = {0};
|
||||
char wifiName[40] = "bluesun-ess-XJ-5G", wifiPassWord[40] = "bluesun007", bleName[40] = "bsm1";
|
||||
|
||||
char cmd[100] = {0}; //降低栈空间使用
|
||||
//定义
|
||||
|
@ -209,12 +209,12 @@ uint8_t drv_qfc41d_init(void)
|
|||
return 0;
|
||||
}
|
||||
|
||||
#define MQTT_BROKER "mqtt.example.com" // 你的 MQTT 服务器地址
|
||||
#define MQTT_PORT 1883 // MQTT 端口
|
||||
#define MQTT_BROKER "mqtt.47.120.14.45" // 你的 MQTT 服务器地址
|
||||
#define MQTT_PORT 3011 // MQTT 端口
|
||||
#define MQTT_CLIENT_ID "fc41d_client" // 客户端 ID
|
||||
#define MQTT_USER "user" // MQTT 用户名
|
||||
#define MQTT_PASSWORD "password" // MQTT 密码
|
||||
#define MQTT_TOPIC "fc41d/topic" // 订阅/发布的主题
|
||||
#define MQTT_TOPIC "aa" // 订阅/发布的主题
|
||||
#define MQTT_MESSAGE "Hello from FC41D!" // 发送的消息
|
||||
|
||||
// 连接 MQTT 服务器
|
||||
|
@ -299,15 +299,3 @@ uint8_t drv_mqtt_init()
|
|||
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
|
Loading…
Reference in New Issue