添加电压和温度
This commit is contained in:
parent
036f9505b8
commit
e35d808b94
|
@ -10,15 +10,15 @@
|
|||
<TargetName>stm32f407</TargetName>
|
||||
<ToolsetNumber>0x4</ToolsetNumber>
|
||||
<ToolsetName>ARM-ADS</ToolsetName>
|
||||
<pArmCC>5050106::V5.05 update 1 (build 106)::ARMCC</pArmCC>
|
||||
<pCCUsed>5050106::V5.05 update 1 (build 106)::ARMCC</pCCUsed>
|
||||
<pArmCC>5060960::V5.06 update 7 (build 960)::.\ARMCC</pArmCC>
|
||||
<pCCUsed>5060960::V5.06 update 7 (build 960)::.\ARMCC</pCCUsed>
|
||||
<uAC6>0</uAC6>
|
||||
<TargetOption>
|
||||
<TargetCommonOption>
|
||||
<Device>STM32F407ZGTx</Device>
|
||||
<Vendor>STMicroelectronics</Vendor>
|
||||
<PackID>Keil.STM32F4xx_DFP.2.16.0</PackID>
|
||||
<PackURL>http://www.keil.com/pack/</PackURL>
|
||||
<PackID>Keil.STM32F4xx_DFP.3.0.0</PackID>
|
||||
<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>
|
||||
<FlashUtilSpec></FlashUtilSpec>
|
||||
<StartupFile></StartupFile>
|
||||
|
@ -187,7 +187,6 @@
|
|||
<RvdsVP>2</RvdsVP>
|
||||
<RvdsMve>0</RvdsMve>
|
||||
<RvdsCdeCp>0</RvdsCdeCp>
|
||||
<nBranchProt>0</nBranchProt>
|
||||
<hadIRAM2>1</hadIRAM2>
|
||||
<hadIROM2>0</hadIROM2>
|
||||
<StupSel>8</StupSel>
|
||||
|
@ -1068,8 +1067,8 @@
|
|||
<TargetCommonOption>
|
||||
<Device>STM32F407VGTx</Device>
|
||||
<Vendor>STMicroelectronics</Vendor>
|
||||
<PackID>Keil.STM32F4xx_DFP.2.16.0</PackID>
|
||||
<PackURL>http://www.keil.com/pack/</PackURL>
|
||||
<PackID>Keil.STM32F4xx_DFP.3.0.0</PackID>
|
||||
<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>
|
||||
<FlashUtilSpec></FlashUtilSpec>
|
||||
<StartupFile></StartupFile>
|
||||
|
@ -1238,7 +1237,6 @@
|
|||
<RvdsVP>2</RvdsVP>
|
||||
<RvdsMve>0</RvdsMve>
|
||||
<RvdsCdeCp>0</RvdsCdeCp>
|
||||
<nBranchProt>0</nBranchProt>
|
||||
<hadIRAM2>1</hadIRAM2>
|
||||
<hadIROM2>0</hadIROM2>
|
||||
<StupSel>8</StupSel>
|
||||
|
|
|
@ -819,6 +819,41 @@ const devPointMap bms_points[] = {
|
|||
|
||||
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)
|
||||
{
|
||||
int val = 0;
|
||||
|
@ -872,10 +907,115 @@ void protocol_build_json(uint16_t groupId)
|
|||
}
|
||||
|
||||
|
||||
void publish_all_bms_groups(void) {
|
||||
uint8_t max_group = 0;
|
||||
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();
|
||||
|
||||
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)
|
||||
{
|
||||
|
@ -887,13 +1027,23 @@ void publish_all_bms_groups(void) {
|
|||
{
|
||||
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;
|
||||
uint16_t i = 0;
|
||||
|
||||
mqtt_cycle_tick += basetime;
|
||||
|
||||
|
|
File diff suppressed because it is too large
Load Diff
|
@ -26,8 +26,17 @@ typedef struct {
|
|||
uint32_t (*get_val)(uint16_t); // 对应值的获取函数
|
||||
} 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 devCellPointMap bms_volt_points[];
|
||||
extern const devCellPointMap bms_temp_points[];
|
||||
|
||||
void mqtt_publish_bms_data(uint32_t basetime);
|
||||
|
||||
|
|
|
@ -21,6 +21,8 @@ extern "C" {
|
|||
|
||||
typedef struct {
|
||||
const char* key; // JSON 中的键,比如 "BCU_2"
|
||||
uint8_t groupId; // mqtt因为json长度限制,这里面用于分组传输,从0开始,
|
||||
uint16_t input; // get_val的入参,用于获取key对应的数据
|
||||
uint32_t (*get_val)(uint16_t); // 对应值的获取函数
|
||||
} devPointMap;
|
||||
|
||||
|
|
Loading…
Reference in New Issue