1056 lines
30 KiB
C
1056 lines
30 KiB
C
/******************************************************************************
|
||
* @file protocol_mqtt_bcu.c
|
||
* @brief protocol_mqtt_bcu
|
||
* @version V1.0
|
||
* @author Gary
|
||
* @copyright
|
||
******************************************************************************/
|
||
|
||
#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)) //һ<><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ѹ
|
||
{
|
||
tmp = 1;
|
||
}
|
||
else
|
||
{
|
||
tmp = 0;
|
||
}
|
||
return tmp;
|
||
case 2:
|
||
if (KIT_GET_BIT_32(bms_get_fault_single_bit(0, kFaultLevel_First), 3)) //һ<><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ƿѹ
|
||
{
|
||
tmp = 1;
|
||
}
|
||
else
|
||
{
|
||
tmp = 0;
|
||
}
|
||
return tmp;
|
||
case 3:
|
||
if (KIT_GET_BIT_32(bms_get_fault_single_bit(0, kFaultLevel_First), 4)) //һ<><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||
{
|
||
tmp = 1;
|
||
}
|
||
else
|
||
{
|
||
tmp = 0;
|
||
}
|
||
return tmp;
|
||
case 4:
|
||
if (KIT_GET_BIT_32(bms_get_fault_single_bit(0, kFaultLevel_First), 5)) //һ<><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||
{
|
||
tmp = 1;
|
||
}
|
||
else
|
||
{
|
||
tmp = 0;
|
||
}
|
||
return tmp;
|
||
case 5:
|
||
if (KIT_GET_BIT_32(bms_get_fault_single_bit(0, kFaultLevel_First), 6)) //һ<><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ѹ<EFBFBD><D1B9>
|
||
{
|
||
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)) //һ<><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||
{
|
||
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)) //һ<><D2BB><EFBFBD>ŵ<EFBFBD><C5B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||
{
|
||
tmp = 1;
|
||
}
|
||
else
|
||
{
|
||
tmp = 0;
|
||
}
|
||
}
|
||
return tmp;
|
||
case 8:
|
||
if (KIT_GET_BIT_32(bms_get_fault_single_bit(0, kFaultLevel_First), 14)) //һ<><D2BB>SOC<4F><43><EFBFBD><EFBFBD>
|
||
{
|
||
tmp = 1;
|
||
}
|
||
else
|
||
{
|
||
tmp = 0;
|
||
}
|
||
return tmp;
|
||
case 9:
|
||
tmp = 0; //һ<><D2BB>SOC<4F><43><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||
return tmp;
|
||
case 10:
|
||
if (KIT_GET_BIT_32(bms_get_fault_single_bit(0, kFaultLevel_First), 15)) //һ<><D2BB><EFBFBD><EFBFBD>Ե<EFBFBD><D4B5><EFBFBD><EFBFBD>
|
||
{
|
||
tmp = 1;
|
||
}
|
||
else
|
||
{
|
||
tmp = 0;
|
||
}
|
||
return tmp;
|
||
case 11:
|
||
if (KIT_GET_BIT_32(bms_get_fault_single_bit(0, kFaultLevel_First), 0)) //һ<><D2BB><EFBFBD><EFBFBD>ѹ<EFBFBD><D1B9>ѹ--<2D><><EFBFBD>˹<EFBFBD>ѹ
|
||
{
|
||
tmp = 1;
|
||
}
|
||
else
|
||
{
|
||
tmp = 0;
|
||
}
|
||
return tmp;
|
||
case 12:
|
||
if (KIT_GET_BIT_32(bms_get_fault_single_bit(0, kFaultLevel_First), 1)) //һ<><D2BB><EFBFBD><EFBFBD>ѹǷѹ--<2D><><EFBFBD><EFBFBD>Ƿѹ
|
||
{
|
||
tmp = 1;
|
||
}
|
||
else
|
||
{
|
||
tmp = 0;
|
||
}
|
||
case 13:
|
||
if (KIT_GET_BIT_32(bms_get_fault_single_bit(1, kFaultLevel_First), 12)) //1<><31><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||
{
|
||
tmp = 1;
|
||
}
|
||
else
|
||
{
|
||
tmp = 0;
|
||
}
|
||
return tmp;
|
||
case 14:
|
||
if (KIT_GET_BIT_32(bms_get_fault_single_bit(0, kFaultLevel_First), 9)) //<2F><>ѹ<EFBFBD>쳣
|
||
{
|
||
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<><32><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ѹ
|
||
{
|
||
tmp = 1;
|
||
}
|
||
else
|
||
{
|
||
tmp = 0;
|
||
}
|
||
return tmp;
|
||
case 2:
|
||
if (KIT_GET_BIT_32(bms_get_fault_single_bit(0, kFaultLevel_Second), 3)) //2<><32><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ƿѹ
|
||
{
|
||
tmp = 1;
|
||
}
|
||
else
|
||
{
|
||
tmp = 0;
|
||
}
|
||
return tmp;
|
||
case 3:
|
||
if (KIT_GET_BIT_32(bms_get_fault_single_bit(0, kFaultLevel_Second), 4)) //2<><32><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||
{
|
||
tmp = 1;
|
||
}
|
||
else
|
||
{
|
||
tmp = 0;
|
||
}
|
||
return tmp;
|
||
case 4:
|
||
if (KIT_GET_BIT_32(bms_get_fault_single_bit(0, kFaultLevel_Second), 5)) //2<><32><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||
{
|
||
tmp = 1;
|
||
}
|
||
else
|
||
{
|
||
tmp = 0;
|
||
}
|
||
return tmp;
|
||
case 5:
|
||
if (KIT_GET_BIT_32(bms_get_fault_single_bit(0, kFaultLevel_Second), 6)) //2<><32><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ѹ<EFBFBD><D1B9>
|
||
{
|
||
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<><32><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||
{
|
||
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<><32><EFBFBD>ŵ<EFBFBD><C5B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||
{
|
||
tmp = 1;
|
||
}
|
||
else
|
||
{
|
||
tmp = 0;
|
||
}
|
||
}
|
||
return tmp;
|
||
case 8:
|
||
if (KIT_GET_BIT_32(bms_get_fault_single_bit(0, kFaultLevel_Second), 14)) //2<><32>SOC<4F><43><EFBFBD><EFBFBD>
|
||
{
|
||
tmp = 1;
|
||
}
|
||
else
|
||
{
|
||
tmp = 0;
|
||
}
|
||
return tmp;
|
||
case 9:
|
||
tmp = 0; //һ<><D2BB>SOC<4F><43><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||
return tmp;
|
||
case 10:
|
||
if (KIT_GET_BIT_32(bms_get_fault_single_bit(0, kFaultLevel_Second), 15)) //2<><32><EFBFBD><EFBFBD>Ե<EFBFBD><D4B5><EFBFBD><EFBFBD>
|
||
{
|
||
tmp = 1;
|
||
}
|
||
else
|
||
{
|
||
tmp = 0;
|
||
}
|
||
return tmp;
|
||
case 11:
|
||
if (KIT_GET_BIT_32(bms_get_fault_single_bit(0, kFaultLevel_Second), 0)) //2<><32><EFBFBD><EFBFBD>ѹ<EFBFBD><D1B9>ѹ--<2D><><EFBFBD>˹<EFBFBD>ѹ
|
||
{
|
||
tmp = 1;
|
||
}
|
||
else
|
||
{
|
||
tmp = 0;
|
||
}
|
||
return tmp;
|
||
case 12:
|
||
if (KIT_GET_BIT_32(bms_get_fault_single_bit(0, kFaultLevel_Second), 1)) //2<><32><EFBFBD><EFBFBD>ѹǷѹ--<2D><><EFBFBD><EFBFBD>Ƿѹ
|
||
{
|
||
tmp = 1;
|
||
}
|
||
else
|
||
{
|
||
tmp = 0;
|
||
}
|
||
case 13:
|
||
if (KIT_GET_BIT_32(bms_get_fault_single_bit(1, kFaultLevel_Second), 12)) //2<><32><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||
{
|
||
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<><33><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ѹ
|
||
{
|
||
tmp = 1;
|
||
}
|
||
else
|
||
{
|
||
tmp = 0;
|
||
}
|
||
return tmp;
|
||
case 2:
|
||
if (KIT_GET_BIT_32(bms_get_fault_single_bit(0, kFaultLevel_Third), 3)) //3<><33><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ƿѹ
|
||
{
|
||
tmp = 1;
|
||
}
|
||
else
|
||
{
|
||
tmp = 0;
|
||
}
|
||
return tmp;
|
||
case 3:
|
||
if (KIT_GET_BIT_32(bms_get_fault_single_bit(0, kFaultLevel_Third), 4)) //3<><33><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||
{
|
||
tmp = 1;
|
||
}
|
||
else
|
||
{
|
||
tmp = 0;
|
||
}
|
||
return tmp;
|
||
case 4:
|
||
if (KIT_GET_BIT_32(bms_get_fault_single_bit(0, kFaultLevel_Third), 5)) //3<><33><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||
{
|
||
tmp = 1;
|
||
}
|
||
else
|
||
{
|
||
tmp = 0;
|
||
}
|
||
return tmp;
|
||
case 5:
|
||
if (KIT_GET_BIT_32(bms_get_fault_single_bit(0, kFaultLevel_Third), 6)) //3<><33><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ѹ<EFBFBD><D1B9>
|
||
{
|
||
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<><33><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||
{
|
||
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<><33><EFBFBD>ŵ<EFBFBD><C5B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||
{
|
||
tmp = 1;
|
||
}
|
||
else
|
||
{
|
||
tmp = 0;
|
||
}
|
||
}
|
||
return tmp;
|
||
case 8:
|
||
if (KIT_GET_BIT_32(bms_get_fault_single_bit(0, kFaultLevel_Third), 14)) //3<><33>SOC<4F><43><EFBFBD><EFBFBD>
|
||
{
|
||
tmp = 1;
|
||
}
|
||
else
|
||
{
|
||
tmp = 0;
|
||
}
|
||
return tmp;
|
||
case 9:
|
||
tmp = 0; //һ<><D2BB>SOC<4F><43><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||
return tmp;
|
||
case 10:
|
||
if (KIT_GET_BIT_32(bms_get_fault_single_bit(0, kFaultLevel_Third), 15)) //3<><33><EFBFBD><EFBFBD>Ե<EFBFBD><D4B5><EFBFBD><EFBFBD>
|
||
{
|
||
tmp = 1;
|
||
}
|
||
else
|
||
{
|
||
tmp = 0;
|
||
}
|
||
return tmp;
|
||
case 11:
|
||
if (KIT_GET_BIT_32(bms_get_fault_single_bit(0, kFaultLevel_Third), 0)) //3<><33><EFBFBD><EFBFBD>ѹ<EFBFBD><D1B9>ѹ--<2D><><EFBFBD>˹<EFBFBD>ѹ
|
||
{
|
||
tmp = 1;
|
||
}
|
||
else
|
||
{
|
||
tmp = 0;
|
||
}
|
||
return tmp;
|
||
case 12:
|
||
if (KIT_GET_BIT_32(bms_get_fault_single_bit(0, kFaultLevel_Third), 1)) //3<><33><EFBFBD><EFBFBD>ѹǷѹ--<2D><><EFBFBD><EFBFBD>Ƿѹ
|
||
{
|
||
tmp = 1;
|
||
}
|
||
else
|
||
{
|
||
tmp = 0;
|
||
}
|
||
case 13:
|
||
if (KIT_GET_BIT_32(bms_get_fault_single_bit(1, kFaultLevel_Third), 12)) //3<><33><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||
{
|
||
tmp = 1;
|
||
}
|
||
else
|
||
{
|
||
tmp = 0;
|
||
}
|
||
return tmp;
|
||
case 14:
|
||
if (KIT_GET_BIT_32(bms_get_fault_single_bit(1, kFaultLevel_Third), 0)) //<2F>̵<EFBFBD><CCB5><EFBFBD>ճ<EFBFBD><D5B3>
|
||
{
|
||
tmp = 1;
|
||
}
|
||
else
|
||
{
|
||
tmp = 0;
|
||
}
|
||
case 15:
|
||
if (KIT_GET_BIT_32(bms_get_fault_single_bit(2, kFaultLevel_Third), 9)) //<2F><><EFBFBD><EFBFBD><DEB9><EFBFBD>
|
||
{
|
||
tmp = 1;
|
||
}
|
||
else
|
||
{
|
||
tmp = 0;
|
||
}
|
||
case 16:
|
||
if (KIT_GET_BIT_32(bms_get_fault_single_bit(1, kFaultLevel_Third), 1)) //Ԥ<><D4A4><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||
{
|
||
tmp = 1;
|
||
}
|
||
else
|
||
{
|
||
tmp = 0;
|
||
}
|
||
case 17:
|
||
if (KIT_GET_BIT_32(bms_get_fault_single_bit(2, kFaultLevel_Third), 10)) //<2F><>·<EFBFBD><C2B7><EFBFBD><EFBFBD>
|
||
{
|
||
tmp = 1;
|
||
}
|
||
else
|
||
{
|
||
tmp = 0;
|
||
}
|
||
default:
|
||
return 0;
|
||
}
|
||
}
|
||
|
||
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>밴<EFBFBD><EBB0B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ģ<EFBFBD><C4A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||
const devPointMap bms_points[] = {
|
||
{"BCU_2", 0, 0, bms_get_total_alarm}, // <20>ܸ澯
|
||
{"BCU_3", 0, 0, bms_get_total_fault}, // <20>ܹ<EFBFBD><DCB9><EFBFBD>
|
||
{"BCU_4", 0, 1, bms_get_fault_level_1}, // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ѹ<EFBFBD>澯һ<E6BEAF><D2BB>
|
||
{"BCU_5", 0, 2, bms_get_fault_level_1}, // <20><><EFBFBD><EFBFBD>Ƿѹ<C7B7>澯һ<E6BEAF><D2BB>
|
||
{"BCU_6", 0, 3, bms_get_fault_level_1}, // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>¸澯һ<E6BEAF><D2BB>
|
||
{"BCU_7", 0, 4, bms_get_fault_level_1}, // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>¸澯һ<E6BEAF><D2BB>
|
||
{"BCU_8", 0, 5, bms_get_fault_level_1}, // <20><><EFBFBD><EFBFBD>ѹ<EFBFBD><D1B9><EFBFBD>澯һ<E6BEAF><D2BB>
|
||
{"BCU_9", 0, 6, bms_get_fault_level_1}, // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>澯һ<E6BEAF><D2BB>
|
||
{"BCU_10", 0, 7, bms_get_fault_level_1}, // <20>ŵ<EFBFBD><C5B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD>澯һ<E6BEAF><D2BB>
|
||
{"BCU_11", 0, 8, bms_get_fault_level_1}, // SOC<4F><43><EFBFBD>澯һ<E6BEAF><D2BB>
|
||
{"BCU_12", 0, 9, bms_get_fault_level_1}, // SOC<4F><43><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>澯һ<E6BEAF><D2BB>
|
||
{"BCU_13", 0, 10, bms_get_fault_level_1}, // <20><>Ե<EFBFBD><D4B5><EFBFBD>澯һ<E6BEAF><D2BB>
|
||
|
||
{"BCU_14", 0, 1, bms_get_fault_level_2}, // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ѹ<EFBFBD>澯<EFBFBD><E6BEAF><EFBFBD><EFBFBD>
|
||
{"BCU_15", 0, 2, bms_get_fault_level_2}, // <20><><EFBFBD><EFBFBD>Ƿѹ<C7B7>澯<EFBFBD><E6BEAF><EFBFBD><EFBFBD>
|
||
{"BCU_16", 0, 3, bms_get_fault_level_2}, // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>¸澯<C2B8><E6BEAF><EFBFBD><EFBFBD>
|
||
{"BCU_17", 0, 4, bms_get_fault_level_2}, // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>¸澯<C2B8><E6BEAF><EFBFBD><EFBFBD>
|
||
{"BCU_18", 0, 5, bms_get_fault_level_2}, // <20><><EFBFBD><EFBFBD>ѹ<EFBFBD><D1B9><EFBFBD>澯<EFBFBD><E6BEAF><EFBFBD><EFBFBD>
|
||
{"BCU_19", 0, 6, bms_get_fault_level_2}, // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>澯<EFBFBD><E6BEAF><EFBFBD><EFBFBD>
|
||
{"BCU_20", 0, 7, bms_get_fault_level_2}, // <20>ŵ<EFBFBD><C5B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD>澯<EFBFBD><E6BEAF><EFBFBD><EFBFBD>
|
||
{"BCU_21", 0, 8, bms_get_fault_level_2}, // SOC<4F><43><EFBFBD>澯<CDB8><E6BEAF><EFBFBD><EFBFBD>
|
||
{"BCU_22", 0, 9, bms_get_fault_level_2}, // SOC<4F><43><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>澯<EFBFBD><E6BEAF><EFBFBD><EFBFBD>
|
||
{"BCU_23", 0, 10, bms_get_fault_level_2}, // <20><>Ե<EFBFBD><D4B5><EFBFBD>澯<CDB8><E6BEAF><EFBFBD><EFBFBD>
|
||
|
||
{"BCU_24", 0, 1, bms_get_fault_level_3}, // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ѹ<EFBFBD>澯<EFBFBD><E6BEAF><EFBFBD><EFBFBD>
|
||
{"BCU_25", 0, 2, bms_get_fault_level_3}, // <20><><EFBFBD><EFBFBD>Ƿѹ<C7B7>澯<EFBFBD><E6BEAF><EFBFBD><EFBFBD>
|
||
{"BCU_26", 0, 3, bms_get_fault_level_3}, // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>¸澯<C2B8><E6BEAF><EFBFBD><EFBFBD>
|
||
{"BCU_27", 0, 4, bms_get_fault_level_3}, // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>¸澯<C2B8><E6BEAF><EFBFBD><EFBFBD>
|
||
{"BCU_28", 0, 5, bms_get_fault_level_3}, // <20><><EFBFBD><EFBFBD>ѹ<EFBFBD><D1B9><EFBFBD>澯<EFBFBD><E6BEAF><EFBFBD><EFBFBD>
|
||
{"BCU_29", 0, 6, bms_get_fault_level_3}, // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>澯<EFBFBD><E6BEAF><EFBFBD><EFBFBD>
|
||
{"BCU_30", 0, 7, bms_get_fault_level_3}, // <20>ŵ<EFBFBD><C5B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD>澯<EFBFBD><E6BEAF><EFBFBD><EFBFBD>
|
||
{"BCU_31", 0, 8, bms_get_fault_level_3}, // SOC<4F><43><EFBFBD>澯<CDB8><E6BEAF><EFBFBD><EFBFBD>
|
||
{"BCU_32", 0, 9, bms_get_fault_level_3}, // SOC<4F><43><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>澯<EFBFBD><E6BEAF><EFBFBD><EFBFBD>
|
||
{"BCU_33", 0, 10, bms_get_fault_level_3}, // <20><>Ե<EFBFBD><D4B5><EFBFBD>澯<CDB8><E6BEAF><EFBFBD><EFBFBD>
|
||
|
||
{"BCU_34", 0, 0, NULL}, // <20><>о<EFBFBD>¶ȼ<C2B6><C8BC>澯
|
||
{"BCU_35", 0, 0, NULL}, // <20><>о<EFBFBD><D0BE>ѹ<EFBFBD><D1B9><EFBFBD>澯
|
||
{"BCU_36", 0, 0, NULL}, // <20>ؼ价<D8BC><E4BBB7>1<EFBFBD><31><EFBFBD>澯
|
||
{"BCU_37", 0, 0, NULL}, // <20>ؼ价<D8BC><E4BBB7>2<EFBFBD><32><EFBFBD>澯
|
||
{"BCU_38", 0, 0, NULL}, // <20>ؼ价<D8BC><E4BBB7>3<EFBFBD><33><EFBFBD>澯
|
||
{"BCU_39", 0, 0, NULL}, // <20>ؼ<EFBFBD><D8BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>1<EFBFBD><31><EFBFBD>澯
|
||
{"BCU_40", 0, 0, NULL}, // <20>ؼ<EFBFBD><D8BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>2<EFBFBD><32><EFBFBD>澯
|
||
{"BCU_41", 0, 0, NULL}, // <20>ؼ<EFBFBD><D8BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>3<EFBFBD><33><EFBFBD>澯
|
||
|
||
{"BCU_42", 1, 11, bms_get_fault_level_1}, // <20><><EFBFBD>˹<EFBFBD>ѹ1<D1B9><31><EFBFBD>澯
|
||
{"BCU_43", 1, 11, bms_get_fault_level_2}, // <20><><EFBFBD>˹<EFBFBD>ѹ2<D1B9><32><EFBFBD>澯
|
||
{"BCU_44", 1, 11, bms_get_fault_level_3}, // <20><><EFBFBD>˹<EFBFBD>ѹ3<D1B9><33><EFBFBD>澯
|
||
{"BCU_45", 1, 12, bms_get_fault_level_1}, // <20><><EFBFBD><EFBFBD>Ƿѹ1<D1B9><31><EFBFBD>澯
|
||
{"BCU_46", 1, 12, bms_get_fault_level_2}, // <20><><EFBFBD><EFBFBD>Ƿѹ2<D1B9><32><EFBFBD>澯
|
||
{"BCU_47", 1, 12, bms_get_fault_level_3}, // <20><><EFBFBD><EFBFBD>Ƿѹ3<D1B9><33><EFBFBD>澯
|
||
{"BCU_48", 1, 13, bms_get_fault_level_1}, // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>1<EFBFBD><31><EFBFBD>澯
|
||
{"BCU_49", 1, 13, bms_get_fault_level_2}, // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>2<EFBFBD><32><EFBFBD>澯
|
||
{"BCU_50", 1, 13, bms_get_fault_level_3}, // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>3<EFBFBD><33><EFBFBD>澯
|
||
|
||
{"BCU_51", 1, 0, NULL}, // AFE<46>¸<EFBFBD><C2B8><EFBFBD><EFBFBD><EFBFBD><EFBFBD>쳣
|
||
{"BCU_52", 1, 0, NULL}, // AFE<46><45>ѹ<EFBFBD><D1B9><EFBFBD><EFBFBD><EFBFBD>쳣
|
||
{"BCU_53", 1, 0, NULL}, // <20><><EFBFBD><EFBFBD><EFBFBD>ش<EFBFBD>ͨ<EFBFBD>Ÿ澯
|
||
{"BCU_54", 1, 0, NULL}, // <20><><EFBFBD><EFBFBD>ͨѶ<CDA8>澯
|
||
{"BCU_55", 1, 14, bms_get_fault_level_3}, // <20>̵<EFBFBD><CCB5><EFBFBD>ճ<EFBFBD><D5B3><EFBFBD>澯
|
||
{"BCU_56", 1, 15, bms_get_fault_level_3}, // <20><><EFBFBD>ؼ<EFBFBD><D8BC><EFBFBD><DEB9><EFBFBD>
|
||
{"BCU_57", 1, 0, NULL}, // <20><>˿<EFBFBD><CBBF><EFBFBD><EFBFBD>
|
||
{"BCU_58", 1, 0, NULL}, // <20><>·<EFBFBD><C2B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||
{"BCU_59", 1, 0, NULL}, // <20>յ<EFBFBD><D5B5><EFBFBD><EFBFBD><EFBFBD>
|
||
{"BCU_60", 1, 0, NULL}, // <20><><EFBFBD><EFBFBD><EFBFBD>豸<EFBFBD><E8B1B8><EFBFBD><EFBFBD>
|
||
{"BCU_61", 1, 0, NULL}, // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||
{"BCU_62", 1, 0, NULL}, // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||
{"BCU_63", 1, 0, NULL}, // AFE<46><45><EFBFBD><EFBFBD>
|
||
{"BCU_64", 1, 14, bms_get_fault_level_1}, // <20><>ѹ<EFBFBD>쳣
|
||
{"BCU_65", 1, 16, bms_get_fault_level_3}, // Ԥ<><D4A4><EFBFBD>澯
|
||
{"BCU_66", 1, 17, bms_get_fault_level_3}, // <20><>·<EFBFBD><C2B7><EFBFBD><EFBFBD>
|
||
|
||
{"BCU_67", 1, 1, bms_get_baseInfo}, // <20><>ѹ
|
||
{"BCU_68", 1, 2, bms_get_baseInfo}, // <20>ܵ<EFBFBD><DCB5><EFBFBD>
|
||
{"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}, // <20><EFBFBD><EEB6A8>ѹ
|
||
{"BCU_73", 1, 7, bms_get_baseInfo}, // <20><EFBFBD><EEB6A8><EFBFBD><EFBFBD>
|
||
{"BCU_74", 1, 8, bms_get_baseInfo}, // ʣ<><CAA3><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||
{"BCU_75", 1, 9, bms_get_baseInfo}, // <20><EFBFBD><EEB6A8><EFBFBD><EFBFBD>
|
||
{"BCU_76", 1, 10, bms_get_baseInfo}, // ʣ<><CAA3><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||
{"BCU_77", 1, 11, bms_get_baseInfo}, // <20>ӻ<EFBFBD><D3BB><EFBFBD><EFBFBD><EFBFBD>(BMU)
|
||
{"BCU_78", 1, 12, bms_get_baseInfo}, // <20><><EFBFBD>ߴӻ<DFB4><D3BB><EFBFBD><EFBFBD><EFBFBD>(BMU)
|
||
{"BCU_79", 1, 13, bms_get_baseInfo}, // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||
{"BCU_80", 1, 14, bms_get_baseInfo}, // <20><><EFBFBD>ߵ<EFBFBD><DFB5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||
{"BCU_81", 1, 15, bms_get_baseInfo}, // <20>¸<EFBFBD><C2B8><EFBFBD><EFBFBD><EFBFBD>
|
||
|
||
{"BCU_82", 2, 16, bms_get_baseInfo}, // <20><><EFBFBD><EFBFBD><EFBFBD>¸<EFBFBD><C2B8><EFBFBD><EFBFBD><EFBFBD>
|
||
{"BCU_83", 2, 17, bms_get_baseInfo}, // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ŵ<EFBFBD><C5B5><EFBFBD><EFBFBD><EFBFBD>
|
||
{"BCU_84", 2, 18, bms_get_baseInfo}, // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ŵ繦<C5B5><E7B9A6>
|
||
{"BCU_85", 2, 19, bms_get_baseInfo}, // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||
{"BCU_86", 2, 20, bms_get_baseInfo}, // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>繦<EFBFBD><E7B9A6>
|
||
{"BCU_87", 2, 21, bms_get_baseInfo}, // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ե<EFBFBD><D4B5>ֵ
|
||
{"BCU_88", 2, 22, bms_get_baseInfo}, // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ե<EFBFBD><D4B5>ֵ
|
||
{"BCU_89", 2, 23, bms_get_baseInfo}, // <20><><EFBFBD><EFBFBD>ƽ<EFBFBD><C6BD><EFBFBD><EFBFBD>ѹ
|
||
{"BCU_90", 2, 24, bms_get_baseInfo}, // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ѹ<EFBFBD><D1B9>
|
||
{"BCU_91", 2, 25, bms_get_baseInfo}, // <20><><EFBFBD>ߵ<EFBFBD><DFB5><EFBFBD><EFBFBD><EFBFBD>ѹ
|
||
{"BCU_92", 2, 26, bms_get_baseInfo}, // <20><><EFBFBD>ߵ<EFBFBD><DFB5><EFBFBD><EFBFBD><EFBFBD>ѹ<EFBFBD>ӻ<EFBFBD><D3BB><EFBFBD>
|
||
{"BCU_93", 2, 27, bms_get_baseInfo}, // <20><><EFBFBD>ߵ<EFBFBD><DFB5><EFBFBD><EFBFBD><EFBFBD>ѹ<EFBFBD><D1B9><EFBFBD><EFBFBD>
|
||
{"BCU_94", 2, 28, bms_get_baseInfo}, // <20><><EFBFBD>͵<EFBFBD><CDB5><EFBFBD><EFBFBD><EFBFBD>ѹ
|
||
{"BCU_95", 2, 29, bms_get_baseInfo}, // <20><><EFBFBD>͵<EFBFBD><CDB5><EFBFBD><EFBFBD><EFBFBD>ѹ<EFBFBD>ӻ<EFBFBD><D3BB><EFBFBD>
|
||
{"BCU_96", 2, 30, bms_get_baseInfo}, // <20><><EFBFBD>͵<EFBFBD><CDB5><EFBFBD><EFBFBD><EFBFBD>ѹ<EFBFBD><D1B9><EFBFBD><EFBFBD>
|
||
{"BCU_97", 2, 31, bms_get_baseInfo}, // <20><><EFBFBD><EFBFBD>ƽ<EFBFBD><C6BD><EFBFBD>¶<EFBFBD>
|
||
{"BCU_98", 2, 32, bms_get_baseInfo}, // <20><><EFBFBD><EFBFBD><EFBFBD>²<EFBFBD>
|
||
{"BCU_99", 2, 33, bms_get_baseInfo}, // <20><><EFBFBD>ߵ<EFBFBD><DFB5><EFBFBD><EFBFBD>¶<EFBFBD>
|
||
{"BCU_100", 2, 34, bms_get_baseInfo}, // <20><><EFBFBD>ߵ<EFBFBD><DFB5><EFBFBD><EFBFBD>¶ȴӻ<C8B4><D3BB><EFBFBD>
|
||
{"BCU_101", 2, 35, bms_get_baseInfo}, // <20><><EFBFBD>ߵ<EFBFBD><DFB5><EFBFBD><EFBFBD>¶ȱ<C2B6><C8B1><EFBFBD>
|
||
{"BCU_102", 2, 36, bms_get_baseInfo}, // <20><><EFBFBD>͵<EFBFBD><CDB5><EFBFBD><EFBFBD>¶<EFBFBD>
|
||
{"BCU_103", 2, 37, bms_get_baseInfo}, // <20><><EFBFBD>͵<EFBFBD><CDB5><EFBFBD><EFBFBD>¶ȴӻ<C8B4><D3BB><EFBFBD>
|
||
{"BCU_104", 2, 38, bms_get_baseInfo}, // <20><><EFBFBD>͵<EFBFBD><CDB5><EFBFBD><EFBFBD>¶ȱ<C2B6><C8B1><EFBFBD>
|
||
{"BCU_105", 2, 39, bms_get_baseInfo}, // <20>ճ<EFBFBD><D5B3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||
{"BCU_106", 2, 40, bms_get_baseInfo}, // <20>ճ<EFBFBD><D5B3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||
{"BCU_107", 2, 41, bms_get_baseInfo}, // <20>շŵ<D5B7><C5B5><EFBFBD><EFBFBD><EFBFBD>
|
||
{"BCU_108", 2, 42, bms_get_baseInfo}, // <20>շŵ<D5B7><C5B5><EFBFBD><EFBFBD><EFBFBD>
|
||
{"BCU_109", 2, 43, bms_get_baseInfo}, // <20>ճ<EFBFBD><D5B3><EFBFBD>ʱ<EFBFBD><CAB1>
|
||
{"BCU_110", 2, 44, bms_get_baseInfo}, // <20>շŵ<D5B7>ʱ<EFBFBD><CAB1>
|
||
{"BCU_111", 2, 45, bms_get_baseInfo}, // <20>ۼƳ<DBBC><C6B3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||
{"BCU_112", 2, 46, bms_get_baseInfo}, // <20>ۼƳ<DBBC><C6B3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||
{"BCU_113", 2, 47, bms_get_baseInfo}, // <20>ۼƷŵ<C6B7><C5B5><EFBFBD><EFBFBD><EFBFBD>
|
||
{"BCU_114", 2, 48, bms_get_baseInfo}, // <20>ۼƷŵ<C6B7><C5B5><EFBFBD><EFBFBD><EFBFBD>
|
||
{"BCU_115", 2, 49, bms_get_baseInfo}, // <20>ۼƳ<DBBC><C6B3><EFBFBD>ʱ<EFBFBD><CAB1>
|
||
{"BCU_116", 2, 50, bms_get_baseInfo}, // <20>ۼƷŵ<C6B7>ʱ<EFBFBD><CAB1>
|
||
{"BCU_117", 2, 51, bms_get_baseInfo}, // BCU<43><55><EFBFBD><EFBFBD>״̬
|
||
};
|
||
|
||
const int bms_point_count = sizeof(bms_points) / sizeof(bms_points[0]);
|
||
|
||
/*
|
||
const char* key; // JSON <20>еļ<D0B5><C4BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> "BCU_"<22><><EFBFBD>治<EFBFBD><E6B2BB><EFBFBD><EFBFBD><EFBFBD>֣<EFBFBD><D6A3><EFBFBD><EFBFBD>ݺ<EFBFBD><DDBA><EFBFBD>ͨ<EFBFBD><CDA8>BCU_pointId<49><64><EFBFBD><EFBFBD>
|
||
uint16_t pointId; // <20><><EFBFBD>ڼ<EFBFBD>¼<EFBFBD><C2BC>ʼ<EFBFBD>IJ<EFBFBD><C4B2><EFBFBD><EFBFBD>ţ<EFBFBD><C5A3><EFBFBD>bcuģ<75><C4A3>
|
||
uint16_t startCellIndex; // <20><>ʼ<EFBFBD>ĵ<EFBFBD>ѹ<EFBFBD><D1B9><EFBFBD>ţ<EFBFBD><C5A3><EFBFBD><EFBFBD>Σ<EFBFBD>
|
||
uint16_t endCellIndex; // <20><><EFBFBD><EFBFBD><EFBFBD>ĵ<EFBFBD>ѹ<EFBFBD><D1B9><EFBFBD>ţ<EFBFBD><C5A3><EFBFBD><EFBFBD>Σ<EFBFBD>
|
||
uint32_t (*get_val)(uint16_t); // <20><>Ӧֵ<D3A6>Ļ<EFBFBD>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD>
|
||
*/
|
||
const devCellPointMap bms_volt_points[] =
|
||
{
|
||
{"BCU_", 191, 0, 39, bms_get_cell_volt}, // 1<><31>~40<34>ŵ<EFBFBD><C5B5>ص<EFBFBD>ѹ
|
||
{"BCU_", 191, 40, 79, bms_get_cell_volt}, // 41<34><31>~80<38>ŵ<EFBFBD><C5B5>ص<EFBFBD>ѹ
|
||
{"BCU_", 191, 80, 119, bms_get_cell_volt}, // 81<38><31>~120<32>ŵ<EFBFBD><C5B5>ص<EFBFBD>ѹ
|
||
{"BCU_", 191, 120, 159, bms_get_cell_volt}, // 121<32><31>~160<36>ŵ<EFBFBD><C5B5>ص<EFBFBD>ѹ
|
||
{"BCU_", 191, 160, 199, bms_get_cell_volt}, // 161<36><31>~200<30>ŵ<EFBFBD><C5B5>ص<EFBFBD>ѹ
|
||
{"BCU_", 191, 200, 239, bms_get_cell_volt}, // 201<30><31>~240<34>ŵ<EFBFBD><C5B5>ص<EFBFBD>ѹ
|
||
{"BCU_", 191, 240, 279, bms_get_cell_volt}, // 241<34><31>~280<38>ŵ<EFBFBD><C5B5>ص<EFBFBD>ѹ
|
||
{"BCU_", 191, 280, 319, bms_get_cell_volt}, // 281<38><31>~320<32>ŵ<EFBFBD><C5B5>ص<EFBFBD>ѹ
|
||
{"BCU_", 191, 320, 359, bms_get_cell_volt}, // 321<32><31>~360<36>ŵ<EFBFBD><C5B5>ص<EFBFBD>ѹ
|
||
{"BCU_", 191, 360, 399, bms_get_cell_volt}, // 361<36><31>~400<30>ŵ<EFBFBD><C5B5>ص<EFBFBD>ѹ
|
||
};
|
||
|
||
const devCellPointMap bms_temp_points[] =
|
||
{
|
||
{"BCU_", 611, 0, 39, bms_get_cell_temp}, // 1<><31>~40<34>ŵ<EFBFBD><C5B5><EFBFBD><EFBFBD>¶<EFBFBD>
|
||
{"BCU_", 611, 40, 79, bms_get_cell_temp}, // 41<34><31>~80<38>ŵ<EFBFBD><C5B5><EFBFBD><EFBFBD>¶<EFBFBD>
|
||
{"BCU_", 611, 80, 99, bms_get_cell_temp}, // 81<38><31>~100<30>ŵ<EFBFBD><C5B5><EFBFBD><EFBFBD>¶<EFBFBD>
|
||
};
|
||
|
||
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)
|
||
{
|
||
int val = 0;
|
||
cJSON* root = cJSON_CreateObject();
|
||
|
||
cJSON_AddNumberToObject(root, "timeStamp", drv_rtc_get_tick());
|
||
|
||
// devData <20><><EFBFBD><EFBFBD>
|
||
cJSON* devDataArr = cJSON_CreateArray();
|
||
cJSON_AddItemToObject(root, "devData", devDataArr);
|
||
|
||
// <20><><EFBFBD><EFBFBD>ÿһ<C3BF><D2BB><EFBFBD>豸<EFBFBD><E8B1B8>
|
||
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");
|
||
|
||
// <20><><EFBFBD><EFBFBD> data <20><><EFBFBD><EFBFBD>
|
||
cJSON* dataObj = cJSON_CreateObject();
|
||
cJSON_AddItemToObject(deviceObj, "data", dataObj);
|
||
|
||
for (int i = 0; i < bms_point_count; ++i)
|
||
{
|
||
const devPointMap* point = &bms_points[i];
|
||
if(point->groupId == groupId)
|
||
{
|
||
if (bms_points[i].get_val != NULL)
|
||
{
|
||
val = point->get_val(point->input);
|
||
}
|
||
else
|
||
{
|
||
val = 0; // Ĭ<><C4AC>ֵ
|
||
}
|
||
}
|
||
cJSON_AddNumberToObject(dataObj, point->key, val);
|
||
}
|
||
|
||
// תΪ JSON <20>ַ<EFBFBD><D6B7><EFBFBD>
|
||
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_volt_json(uint8_t i)
|
||
{
|
||
const devCellPointMap* item = &bms_volt_points[i];
|
||
int val = 0;
|
||
char key[10] = {0};
|
||
cJSON* root = cJSON_CreateObject();
|
||
|
||
cJSON_AddNumberToObject(root, "timeStamp", drv_rtc_get_tick());
|
||
|
||
// devData <20><><EFBFBD><EFBFBD>
|
||
cJSON* devDataArr = cJSON_CreateArray();
|
||
cJSON_AddItemToObject(root, "devData", devDataArr);
|
||
|
||
// <20><><EFBFBD><EFBFBD>ÿһ<C3BF><D2BB><EFBFBD>豸<EFBFBD><E8B1B8>
|
||
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");
|
||
|
||
// <20><><EFBFBD><EFBFBD> data <20><><EFBFBD><EFBFBD>
|
||
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; // Ĭ<><C4AC>ֵ
|
||
}
|
||
cJSON_AddNumberToObject(dataObj, key, val);
|
||
}
|
||
|
||
// תΪ JSON <20>ַ<EFBFBD><D6B7><EFBFBD>
|
||
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 <20><><EFBFBD><EFBFBD>
|
||
cJSON* devDataArr = cJSON_CreateArray();
|
||
cJSON_AddItemToObject(root, "devData", devDataArr);
|
||
|
||
// <20><><EFBFBD><EFBFBD>ÿһ<C3BF><D2BB><EFBFBD>豸<EFBFBD><E8B1B8>
|
||
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");
|
||
|
||
// <20><><EFBFBD><EFBFBD> data <20><><EFBFBD><EFBFBD>
|
||
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; // Ĭ<><C4AC>ֵ
|
||
}
|
||
cJSON_AddNumberToObject(dataObj, key, val);
|
||
}
|
||
|
||
// תΪ JSON <20>ַ<EFBFBD><D6B7><EFBFBD>
|
||
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)
|
||
{
|
||
max_group = bms_points[i].groupId;
|
||
}
|
||
}
|
||
|
||
for (uint8_t g = 0; g <= max_group; 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)
|
||
{
|
||
static uint32_t mqtt_cycle_tick = 0;
|
||
static uint8_t groupMax = 0;
|
||
|
||
mqtt_cycle_tick += basetime;
|
||
|
||
if(mqtt_cycle_tick > 60000)
|
||
{
|
||
mqtt_cycle_tick = 0;
|
||
publish_all_bms_groups();
|
||
}
|
||
|
||
}
|
||
|