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

监测老化放电的温感差值

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

+ 6 - 5
Application/app/bms_message.c

@@ -158,12 +158,13 @@ void process_bms_message(can_frame_t *frame, int 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));
+			u8 temps[2 * PACK_TEMPS_NUM * sizeof(int) + 2];
+			temps[0] = bms_state_get()->agint_cost_time/60; //·ÖÖÓ
+			temps[1] = PACK_TEMPS_NUM * 2;
+			memcpy(temps+2, bms_state_get()->aging_start_temp, PACK_TEMPS_NUM * sizeof(int));
+			memcpy(temps+PACK_TEMPS_NUM * sizeof(int)+2, bms_state_get()->aging_max_temp, PACK_TEMPS_NUM * sizeof(int));
 			data = temps;
-			data_len = 2 * PACK_TEMPS_NUM * sizeof(int) + 1;
+			data_len = 2 * PACK_TEMPS_NUM * sizeof(int) + 2;
 			protocol_send_bms_info(frame->head.can_addr, frame->key, data, data_len);
 			break;
 		}

+ 1 - 0
Application/app/protocol_old.c

@@ -114,6 +114,7 @@ static int get_response_data(uint8_t *data, uint8_t operate, uint8_t result){
 		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;
+		data[head->size ++] = bms_state_get()->agint_cost_time/60; //·ÖÖÓ
 		for (int i = 0; i < PACK_TEMPS_NUM; i++){
 			idata[head->size ++] = (int8_t)(bms_state_get()->aging_start_temp[i]);
 		}

+ 3 - 3
Application/app/protocol_old.h

@@ -62,7 +62,9 @@ enum
 	OP_ALARM_TIMES,
 	OP_CELL_VOL,//0x07
 	OP_TEMP_OTHER,//0x08
-	
+
+	OP_AGING_TEMPS = 0x0A,
+
 	OP_OPEN_FET = 0x0B,
 
 	OP_CLEAR_PAIR = OP_TEMP_OTHER + 1,
@@ -70,8 +72,6 @@ enum
 	OP_UPDATE_SOFTWARE_REQ = 0x0E,
 	OP_UPDATE_SOFTWARE = 0x0F,
 
-	OP_AGING_TEMPS = 0x10,
-	
 	OP_MAX
 };
 

+ 13 - 4
Application/app/sox/state.c

@@ -114,6 +114,8 @@ int bms_work_mode_set(int mode, int 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.aging_real_start = 0;
+			_bms_state.agint_cost_time = 0;
 		}
 		_bms_state.work_mode = mode;
 	}else {
@@ -715,11 +717,18 @@ 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];
+	if (bms_work_is_aging_test()) {
+		if ((measure_value()->load_current <= -2000)) {
+			if (_bms_state.aging_real_start == 0) {
+				_bms_state.aging_real_start = shark_get_seconds();
 			}
+			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];
+				}
+			}
+		}else if((_bms_state.agint_cost_time == 0) && (_bms_state.aging_real_start > 0)){
+			_bms_state.agint_cost_time = shark_get_seconds() - _bms_state.aging_real_start;
 		}
 	}
 }

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

@@ -38,6 +38,8 @@ typedef struct{
 	uint8_t  bms_addr;
 	int      aging_start_temp[PACK_TEMPS_NUM];
 	int      aging_max_temp[PACK_TEMPS_NUM];
+	uint32_t aging_real_start;
+	uint32_t agint_cost_time;
 }bms_state_t;
 
 #define WORK_MODE_NORMAL 0      //Õý³£Ä£Ê½