Просмотр исходного кода

老化模式加入温度采集保存,给测试工具读取

Signed-off-by: huhui <huhui@sharkgulf.com>
huhui 4 лет назад
Родитель
Сommit
125285ceae

+ 11 - 1
Application/app/bms_message.c

@@ -156,7 +156,17 @@ void process_bms_message(can_frame_t *frame, int len){
 			data_len = PACK_TEMPS_NUM * sizeof(int) + 1;
 			protocol_send_bms_info(frame->head.can_addr, frame->key, data, data_len);
 			break;
-		}	
+		}
+		case CAN_KEY_AGING_TEMPS:{
+			u8 temps[2 * PACK_TEMPS_NUM * sizeof(int) + 1];
+			temps[0] = PACK_TEMPS_NUM * 2;
+			memcpy(temps+1, bms_state_get()->aging_start_temp, PACK_TEMPS_NUM * sizeof(int));
+			memcpy(temps+PACK_TEMPS_NUM * sizeof(int)+1, bms_state_get()->aging_max_temp, PACK_TEMPS_NUM * sizeof(int));
+			data = temps;
+			data_len = 2 * PACK_TEMPS_NUM * sizeof(int) + 1;
+			protocol_send_bms_info(frame->head.can_addr, frame->key, data, data_len);
+			break;
+		}
 		case CAN_KEY_BMS_GET_CELLS: {
 			cell_cmd_resp_t cells;
 			cells.cell_num = CELLS_NUM;

+ 2 - 0
Application/app/protocol.h

@@ -93,6 +93,8 @@ typedef struct {
 #define CAN_KEY_BMS_TEMPS 0x11 //return int[4]
 
 
+#define CAN_KEY_AGING_TEMPS 0x12
+
 #define CAN_KEY_BMS_GET_STAT 0xa0 //bms_stat_t
 #pragma  pack (push,1)
 typedef struct {

+ 8 - 0
Application/app/protocol_old.c

@@ -112,6 +112,14 @@ static int get_response_data(uint8_t *data, uint8_t operate, uint8_t result){
 	}else if (operate == OP_READ_DETECT){
 		data[head->size++] = IS_HALL1_DETECTED() | IS_HALL2_DETECTED() << 1 | IS_CHARGER_IN() << 2;
 		data[head->size++] = IS_DCDC_POWER_GOOD() | AUX_VOL_IS_OPEN() << 1 | IS_AUX_VOL_LOCKED() << 2;
+	}else if (operate == OP_AGING_TEMPS) {
+		int8_t *idata = (int8_t *)data;
+		for (int i = 0; i < PACK_TEMPS_NUM; i++){
+			idata[head->size ++] = (int8_t)(bms_state_get()->aging_start_temp[i]);
+		}
+		for (int i = 0; i < PACK_TEMPS_NUM; i++){
+			idata[head->size ++] = (int8_t)(bms_state_get()->aging_max_temp[i]);
+		}
 	}
 
 	head->checksum = _checksum(data, head->size);

+ 2 - 0
Application/app/protocol_old.h

@@ -69,6 +69,8 @@ enum
 	OP_READ_DETECT = 0x0D,
 	OP_UPDATE_SOFTWARE_REQ = 0x0E,
 	OP_UPDATE_SOFTWARE = 0x0F,
+
+	OP_AGING_TEMPS = 0x10,
 	
 	OP_MAX
 };

+ 12 - 0
Application/app/sox/state.c

@@ -1,3 +1,4 @@
+#include <string.h>
 #include "bsp/gpio.h"
 #include "bsp/ml5238.h"
 #include "bsp/cs1180.h"
@@ -110,6 +111,10 @@ int bms_work_mode_set(int mode, int start){
 		return 1;
 	}
 	if (start){
+		if ((_bms_state.work_mode != WORK_MODE_AGING_TEST) && (mode == WORK_MODE_AGING_TEST)) {
+			memcpy(_bms_state.aging_start_temp, measure_value()->pack_temp, PACK_TEMPS_NUM * sizeof(int));
+			memcpy(_bms_state.aging_max_temp, measure_value()->pack_temp, PACK_TEMPS_NUM * sizeof(int));
+		}
 		_bms_state.work_mode = mode;
 	}else {
 		_bms_state.work_mode = WORK_MODE_NORMAL;
@@ -710,5 +715,12 @@ static void _temperature_notify(void){
 		pcb_temp_count = 0;
 	}
 	check_temp_state(); //check health of cell/pcb temperature
+	if (bms_work_is_aging_test()&& (measure_value()->load_current <= -2000)) {
+		for (int i = 0; i < PACK_TEMPS_NUM; i++) {
+			if (_bms_state.aging_max_temp[i] < measure_value()->pack_temp[i]) {
+				_bms_state.aging_max_temp[i] = measure_value()->pack_temp[i];
+			}
+		}
+	}
 }
 

+ 2 - 0
Application/app/sox/state.h

@@ -36,6 +36,8 @@ typedef struct{
 	uint32_t user_request;
 	uint32_t work_mode;//正常模式,老化测试模式,pcba测试模测试,整机测试模式
 	uint8_t  bms_addr;
+	int      aging_start_temp[PACK_TEMPS_NUM];
+	int      aging_max_temp[PACK_TEMPS_NUM];
 }bms_state_t;
 
 #define WORK_MODE_NORMAL 0      //正常模式