فهرست منبع

add discharger mos on/off record

Signed-off-by: huhui <huhui@sharkgulf.com>
huhui 3 سال پیش
والد
کامیت
2be05d4b25
3فایلهای تغییر یافته به همراه27 افزوده شده و 1 حذف شده
  1. 13 0
      Application/app/event_record.c
  2. 4 1
      Application/app/event_record.h
  3. 10 0
      Application/app/sox/state.c

+ 13 - 0
Application/app/event_record.c

@@ -28,6 +28,19 @@ void push_event(event_id_t id, s32 data) {
 	pevent->data = data;
 }
 
+void push_event_persit(event_id_t id, s32 data) {
+	if (id == Discharger_Operate_Off || id == Discharger_Operate_On) {
+		for (int i = 0; i < MAX_EVENT_SIZE; i++) {
+			if (_event[i].id == id) {
+				_event[i].timestamp = shark_get_seconds();
+				_event[i].data = data;
+				return;
+			}
+		}
+	}
+	push_event(id, data);
+}
+
 static int _event_size(void) {
 	if (_event_full) {
 		return MAX_EVENT_SIZE;

+ 4 - 1
Application/app/event_record.h

@@ -27,7 +27,9 @@ typedef enum {
 	Min_Cap_For_DisCharger2,
 	Charger_no_full_capaticy,
 	Charger_no_full_ceof,
-	Cell_balance
+	Cell_balance,
+	Discharger_Operate_Off,
+	Discharger_Operate_On,
 }event_id_t;
 
 typedef struct {
@@ -38,6 +40,7 @@ typedef struct {
 
 void push_event(event_id_t id, s32 data);
 int get_event(int num, int offset, u8 *recoder);
+void push_event_persit(event_id_t id, s32 data);
 
 #endif /* _Event_Recorde_H__ */
 

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

@@ -237,6 +237,7 @@ static s32 _process_unheath(void){
 	u32 unhealth = Health_Success;
 	if (bms_health()->load_current_short) {//短路检测后,关闭充放电mos
 		discharger_open(0);
+		push_event_persit(Discharger_Operate_Off, 5);
 		charger_open(0); //disable charger mosfet
 		start_aux_power(0);
 		_bms_state.charging = 0;
@@ -260,6 +261,7 @@ static s32 _process_unheath(void){
 			unhealth |= Health_aux_Fault;
 		}
 		discharger_open(0); //disable charger mosfet
+		push_event_persit(Discharger_Operate_Off, 4);
 		close_dfet_reson = (bms_health()->discharger_over_temp == 1)?3:4;
 		unhealth |= Health_Discharger_Failt;
 	}
@@ -272,6 +274,7 @@ static s32 _process_unheath(void){
 			start_aux_power(0);
 			if (ml5238_is_discharging()) {
 				close_dfet_reson = (bms_health()->sigle_cell_lower_voltage == 1) ?5:6;
+				push_event_persit(Discharger_Operate_Off, 3);
 				discharger_open(0);
 			}
 		}
@@ -280,6 +283,7 @@ static s32 _process_unheath(void){
 	if (bms_health()->over_temp_deny_discharger|| bms_health()->lower_temp_deny_discharger) {
 		if (!_bms_state.charging) {
 			close_dfet_reson = (bms_health()->over_temp_deny_discharger == 1)?7:8;
+			push_event_persit(Discharger_Operate_Off, 2);
 			discharger_open(0); //disable discharger mosfet
 		}
 		unhealth |= (Health_Discharger_Failt | Health_Fault_Can_Sleep);		
@@ -308,6 +312,7 @@ static void _process_user_request(s32 health){
 		}
 		if (_bms_state.user_request & USER_REQUEST_DISCHARGER_OFF){
 			discharger_open(0);
+			push_event_persit(Discharger_Operate_Off, 1);
 			close_dfet_reson |= (3 << 24);
 		}
 		if (_bms_state.user_request & USER_REQUEST_CHARGER_OFF){
@@ -331,10 +336,14 @@ static void _process_user_request(s32 health){
 			open_dfet ++;
 			if (!(health & Health_Discharger_Failt)){
 				if ((io_state()->hall_detect || _bms_state.charging) || !_can_close_mos_no_hall()){
+					push_event_persit(Discharger_Operate_On, 10);
 					discharger_open(1);
 					mos_drv = true;
+				}else {
+					push_event_persit(Discharger_Operate_On, 20);
 				}
 			}else {
+				push_event_persit(Discharger_Operate_On, 30);
 				open_dfet_failt ++;
 			}
 		}
@@ -450,6 +459,7 @@ static void _process_iostate_changed(s32 unhealth){
 		}
 		if (_can_close_mos_no_hall()) {
 			if (ml5238_is_discharging() && (!_bms_state.charging)){
+				push_event_persit(Discharger_Operate_Off, 256);
 				discharger_open(0);
 				put_no_hall_time();
 				close_dfet_no_hall ++;