Kaynağa Gözat

fixup check power fault

Signed-off-by: FuangCao <cavan.cao@foxmail.com>
FuangCao 5 yıl önce
ebeveyn
işleme
5cd23d940f
7 değiştirilmiş dosya ile 113 ekleme ve 186 silme
  1. 1 98
      Project/PS100.uvoptx
  2. 1 1
      Project/version.txt
  3. 6 3
      Source/app.c
  4. 88 80
      Source/app_rs485_1.c
  5. 12 2
      Source/app_rs485_1.h
  6. 4 1
      Source/drv_can.c
  7. 1 1
      Source/sw_build_info.h

+ 1 - 98
Project/PS100.uvoptx

@@ -148,56 +148,7 @@
           <Name>UL2CM3(-S0 -C0 -P0 )  -FN1 -FC1000 -FD20000000 -FF0GD32F10x_MD -FL020000 -FS08000000 -FP0($$Device:GD32F103RB$Flash\GD32F10x_MD.FLM)</Name>
         </SetRegEntry>
       </TargetDriverDllRegistry>
-      <Breakpoint>
-        <Bp>
-          <Number>0</Number>
-          <Type>0</Type>
-          <LineNumber>746</LineNumber>
-          <EnabledFlag>1</EnabledFlag>
-          <Address>134265634</Address>
-          <ByteObject>0</ByteObject>
-          <HtxType>0</HtxType>
-          <ManyObjects>0</ManyObjects>
-          <SizeOfObject>0</SizeOfObject>
-          <BreakByAccess>0</BreakByAccess>
-          <BreakIfRCount>1</BreakIfRCount>
-          <Filename>..\Source\app_rs485_1.c</Filename>
-          <ExecCommand></ExecCommand>
-          <Expression>\\PS100\../Source/app_rs485_1.c\746</Expression>
-        </Bp>
-        <Bp>
-          <Number>1</Number>
-          <Type>0</Type>
-          <LineNumber>755</LineNumber>
-          <EnabledFlag>1</EnabledFlag>
-          <Address>134265674</Address>
-          <ByteObject>0</ByteObject>
-          <HtxType>0</HtxType>
-          <ManyObjects>0</ManyObjects>
-          <SizeOfObject>0</SizeOfObject>
-          <BreakByAccess>0</BreakByAccess>
-          <BreakIfRCount>1</BreakIfRCount>
-          <Filename>..\Source\app_rs485_1.c</Filename>
-          <ExecCommand></ExecCommand>
-          <Expression>\\PS100\../Source/app_rs485_1.c\755</Expression>
-        </Bp>
-        <Bp>
-          <Number>2</Number>
-          <Type>0</Type>
-          <LineNumber>765</LineNumber>
-          <EnabledFlag>1</EnabledFlag>
-          <Address>134265716</Address>
-          <ByteObject>0</ByteObject>
-          <HtxType>0</HtxType>
-          <ManyObjects>0</ManyObjects>
-          <SizeOfObject>0</SizeOfObject>
-          <BreakByAccess>0</BreakByAccess>
-          <BreakIfRCount>1</BreakIfRCount>
-          <Filename>..\Source\app_rs485_1.c</Filename>
-          <ExecCommand></ExecCommand>
-          <Expression>\\PS100\../Source/app_rs485_1.c\765</Expression>
-        </Bp>
-      </Breakpoint>
+      <Breakpoint/>
       <WatchWindow1>
         <Ww>
           <count>0</count>
@@ -568,54 +519,6 @@
           <ExecCommand></ExecCommand>
           <Expression></Expression>
         </Bp>
-        <Bp>
-          <Number>3</Number>
-          <Type>0</Type>
-          <LineNumber>746</LineNumber>
-          <EnabledFlag>1</EnabledFlag>
-          <Address>0</Address>
-          <ByteObject>0</ByteObject>
-          <HtxType>0</HtxType>
-          <ManyObjects>0</ManyObjects>
-          <SizeOfObject>0</SizeOfObject>
-          <BreakByAccess>0</BreakByAccess>
-          <BreakIfRCount>0</BreakIfRCount>
-          <Filename>..\Source\app_rs485_1.c</Filename>
-          <ExecCommand></ExecCommand>
-          <Expression></Expression>
-        </Bp>
-        <Bp>
-          <Number>4</Number>
-          <Type>0</Type>
-          <LineNumber>755</LineNumber>
-          <EnabledFlag>1</EnabledFlag>
-          <Address>0</Address>
-          <ByteObject>0</ByteObject>
-          <HtxType>0</HtxType>
-          <ManyObjects>0</ManyObjects>
-          <SizeOfObject>0</SizeOfObject>
-          <BreakByAccess>0</BreakByAccess>
-          <BreakIfRCount>0</BreakIfRCount>
-          <Filename>..\Source\app_rs485_1.c</Filename>
-          <ExecCommand></ExecCommand>
-          <Expression></Expression>
-        </Bp>
-        <Bp>
-          <Number>5</Number>
-          <Type>0</Type>
-          <LineNumber>765</LineNumber>
-          <EnabledFlag>1</EnabledFlag>
-          <Address>0</Address>
-          <ByteObject>0</ByteObject>
-          <HtxType>0</HtxType>
-          <ManyObjects>0</ManyObjects>
-          <SizeOfObject>0</SizeOfObject>
-          <BreakByAccess>0</BreakByAccess>
-          <BreakIfRCount>0</BreakIfRCount>
-          <Filename>..\Source\app_rs485_1.c</Filename>
-          <ExecCommand></ExecCommand>
-          <Expression></Expression>
-        </Bp>
       </Breakpoint>
       <WatchWindow1>
         <Ww>

+ 1 - 1
Project/version.txt

@@ -1 +1 @@
-PS100XX_V01_11061736
+PS100XX_V01_11061952

+ 6 - 3
Source/app.c

@@ -252,15 +252,18 @@ static u8 shark_battery_switch_auto(shark_bool series)
 		return CB_BAT_NO;
 	}
 
+	mask = shark_battery_detect();
+	if (mask == 0) {
+		return CB_BAT_NO;
+	}
+
 	if (cb_operate_state == CB_BAT_NO) {
-		mask = shark_battery_set_power(SHARK_BATT_POWER_SMALL, SHARK_BATT_POWER_SMALL, 3);
+		mask = shark_battery_set_power(SHARK_BATT_POWER_SMALL, SHARK_BATT_POWER_SMALL, mask);
 		if (mask == 0) {
 			return CB_BAT_NO;
 		}
 
 		delay_1ms(200);
-	} else {
-		mask = 3;
 	}
 
 	mask = shark_battery_set_power(SHARK_BATT_POWER_FULL, SHARK_BATT_POWER_FULL, mask);

+ 88 - 80
Source/app_rs485_1.c

@@ -517,19 +517,10 @@ shark_battery_exit_t shark_battery_is_normal(SUB_BMS_INFO *info)
 	return info->exit_code;
 }
 
-shark_bool shark_battery_is_power_on(SUB_BMS_INFO *info)
-{
-	if ((info->packet_common.bms_status & BMS_POWER_FULL) != BMS_POWER_FULL) {
-		return shark_false;
-	}
-
-	return shark_true;
-}
-
 shark_bool shark_battery_is_normal_power_on(SUB_BMS_INFO *info)
 {
 	if (shark_battery_is_normal(info) == SHARK_BATT_EXIT_SUCCESS) {
-		if (shark_battery_is_power_on(info)) {
+		if (shark_battery_is_power_full(info)) {
 			return shark_true;
 		}
 
@@ -601,57 +592,6 @@ int8_t Operate_Sub_BMS_1_CD(uint8_t on)
 	
 }
 
-int8_t Operate_Sub_BMS_PING(uint32_t delay)
-{
-	uint64_t time = shark_get_time() + delay;
-	uint8_t mask = 0;
-
-	while (sub_bms_info_1.conn_state == SUB_BMS_CONT_HV485 && RS485_busy_1) {
-		if (time < shark_get_time_safe()) {
-			println("bat1 busy");
-			return 0;
-		}
-	}
-
-	while (sub_bms_info_2.conn_state == SUB_BMS_CONT_HV485 && RS485_busy_2) {
-		if (time < shark_get_time_safe()) {
-			println("bat2 busy");
-			return 0;
-		}
-	}
-
-	sub_bms_info_1.conn_state = SUB_BMS_DISC_HV485;
-	sub_bms_info_1.sub_bms_cmd.operate = OP_READ_INFO;
-	g_event &= ~RS485_RECEIVE_END_EVENT;
-
-	sub_bms_info_2.conn_state = SUB_BMS_DISC_HV485;
-	sub_bms_info_2.sub_bms_cmd.operate = OP_READ_INFO;
-	g_event &= ~RS485_RECEIVE_END_EVENT;
-
-	Send_Sub_BMS_CMD_1();
-	Send_Sub_BMS_CMD_2();
-
-	while (time > shark_get_time_safe() && mask != 3) {
-		if(g_event & RS485_RECEIVE_END_EVENT) {
-			g_event &= ~RS485_RECEIVE_END_EVENT;
-			Handle_RS485_1_Data();
-			mask |= 1;
-			println("mask1: %d", mask);
-		}
-
-		if (g_event & RS485_2_RECEIVE_END_EVENT) {
-			g_event &= ~RS485_2_RECEIVE_END_EVENT;
-			Handle_RS485_2_Data();
-			mask |= 2;
-			println("mask2: %d", mask);
-		}
-	}
-
-	println("mask: %d", mask);
-
-	return 1;
-}
-
 static u8 shark_battery_get_power_param(shark_battery_power_t power)
 {
 	switch (power) {
@@ -672,36 +612,42 @@ static void shark_battery_set_power_param(SUB_BMS_INFO *info, shark_battery_powe
 	info->sub_bms_cmd.param = shark_battery_get_power_param(power);
 }
 
-static shark_bool shark_battery_check_power(SUB_BMS_INFO *info, shark_battery_power_t power)
+shark_battery_power_t shark_battery_get_power(SUB_BMS_INFO *info)
 {
 	if (info->conn_state != SUB_BMS_CONT_HV485) {
-		return shark_false;
+		return SHARK_BATT_POWER_FAULT;
 	}
 
+	if ((info->packet_common.bms_status & BMS_POWER_ALL) == BMS_POWER_ALL) {
+		return SHARK_BATT_POWER_ALL;
+	}
+
+	if ((info->packet_common.bms_status & BMS_POWER_FULL) == BMS_POWER_FULL) {
+		return SHARK_BATT_POWER_FULL;
+	}
+
+	if ((info->packet_common.bms_status & BMS_POWER_SMALL) == BMS_POWER_SMALL) {
+		return SHARK_BATT_POWER_SMALL;
+	}
+
+	return SHARK_BATT_POWER_OFF;
+}
+
+shark_bool shark_battery_check_power(SUB_BMS_INFO *info, shark_battery_power_t power)
+{
 	switch (power) {
 	case SHARK_BATT_POWER_SMALL:
-		if ((info->packet_common.bms_status & BMS_POWER_ALL) != BMS_POWER_SMALL) {
-			return shark_false;
-		} else {
-			break;
-		}
+		return SHARK_BOOL((info->packet_common.bms_status & BMS_POWER_SMALL) == BMS_POWER_SMALL);
 
 	case SHARK_BATT_POWER_FULL:
-		if ((info->packet_common.bms_status & BMS_POWER_ALL) != BMS_POWER_FULL) {
-			return shark_false;
-		} else {
-			break;
-		}
+		return SHARK_BOOL((info->packet_common.bms_status & BMS_POWER_FULL) == BMS_POWER_FULL);
+
+	case SHARK_BATT_POWER_ALL:
+		return SHARK_BOOL((info->packet_common.bms_status & BMS_POWER_ALL) == BMS_POWER_ALL);
 
 	default:
-		if ((info->packet_common.bms_status & BMS_POWER_ALL) != 0) {
-			return shark_false;
-		} else {
-			break;
-		}
+		return SHARK_BOOL((info->packet_common.bms_status & BMS_POWER_ALL) == 0);
 	}
-
-	return shark_true;
 }
 
 u8 shark_battery_set_power(shark_battery_power_t power1, shark_battery_power_t power2, u8 mask)
@@ -765,6 +711,67 @@ u8 shark_battery_set_power(shark_battery_power_t power1, shark_battery_power_t p
 	return success;
 }
 
+u8 shark_battery_detect(void)
+{
+	u64 time = shark_get_time() + 200;
+	u8 success = 0;
+	u8 times;
+
+	while (sub_bms_info_1.conn_state == SUB_BMS_CONT_HV485 && RS485_busy_1) {
+		if (time < shark_get_time_safe()) {
+			break;
+		}
+	}
+
+	while (sub_bms_info_2.conn_state == SUB_BMS_CONT_HV485 && RS485_busy_2) {
+		if (time < shark_get_time_safe()) {
+			break;
+		}
+	}
+
+	sub_bms_info_1.conn_state = SUB_BMS_DISC_HV485;
+	sub_bms_info_2.conn_state = SUB_BMS_DISC_HV485;
+
+	for (times = 0; times < 3; times++) {
+		sub_bms_info_1.sub_bms_cmd.operate = OP_READ_INFO;
+		g_event &= ~RS485_RECEIVE_END_EVENT;
+
+		sub_bms_info_2.sub_bms_cmd.operate = OP_READ_INFO;
+		g_event &= ~RS485_2_RECEIVE_END_EVENT;
+
+		Send_Sub_BMS_CMD_1();
+		Send_Sub_BMS_CMD_2();
+
+		time = shark_get_time() + 200;
+
+		while (time > shark_get_time_safe()) {
+			if(g_event & RS485_RECEIVE_END_EVENT) {
+				g_event &= ~RS485_RECEIVE_END_EVENT;
+				Handle_RS485_1_Data();
+
+				if (sub_bms_info_1.conn_state == SUB_BMS_CONT_HV485) {
+					success |= 1;
+				}
+			}
+
+			if (g_event & RS485_2_RECEIVE_END_EVENT) {
+				g_event &= ~RS485_2_RECEIVE_END_EVENT;
+				Handle_RS485_2_Data();
+
+				if (sub_bms_info_2.conn_state == SUB_BMS_CONT_HV485) {
+					success |= 2;
+				}
+			}
+
+			if (success == 3) {
+				return 3;
+			}
+		}
+	}
+
+	return success;
+}
+
 int8_t Update_Sub_BMS_1_Software(uint8_t step)
 {
 	uint8_t rtn;
@@ -921,6 +928,7 @@ void shark_bms_set_vgs(shark_bms_vgs_t mask, uint8_t enable)
 
 		if (shark_bms_vgs_mask == 0) {
 			gpio_bit_set(GPIO_PORT_FL, GPIO_PIN_FL);
+			println("fl disabled");
 		}
 	}
 }

+ 12 - 2
Source/app_rs485_1.h

@@ -96,9 +96,11 @@ typedef enum {
 } shark_battery_state_t;
 
 typedef enum {
+	SHARK_BATT_POWER_FAULT,
 	SHARK_BATT_POWER_OFF,
-	SHARK_BATT_POWER_FULL,
 	SHARK_BATT_POWER_SMALL,
+	SHARK_BATT_POWER_FULL,
+	SHARK_BATT_POWER_ALL,
 } shark_battery_power_t;
 
 typedef enum {
@@ -386,7 +388,9 @@ shark_battery_exit_t shark_battery_is_normal(SUB_BMS_INFO *info);
 void shark_bms_set_vgs(shark_bms_vgs_t vgs, shark_bool enable);
 void shark_bms_set_mos(shark_bool ss, shark_bool s11, shark_bool s21);
 u8 shark_battery_set_power(shark_battery_power_t power1, shark_battery_power_t power2, u8 mask);
-shark_bool shark_battery_is_power_on(SUB_BMS_INFO *info);
+shark_battery_power_t shark_battery_get_power(SUB_BMS_INFO *info);
+shark_bool shark_battery_check_power(SUB_BMS_INFO *info, shark_battery_power_t power);
+u8 shark_battery_detect(void);
 shark_bool shark_battery_is_normal_power_on(SUB_BMS_INFO *info);
 
 static inline void shark_bms_set_mos_close(void)
@@ -414,5 +418,11 @@ static inline void shark_bms_set_mos_parrallel(void)
 	shark_bms_set_mos(shark_false, shark_true, shark_true);
 }
 
+static inline shark_bool shark_battery_is_power_full(SUB_BMS_INFO *info)
+{
+	return SHARK_BOOL((info->packet_common.bms_status & BMS_POWER_FULL) == BMS_POWER_FULL);
+
+}
+
 #endif
 

+ 4 - 1
Source/drv_can.c

@@ -452,11 +452,14 @@ static can_trasnmit_message_struct shark_can_log_message;
 
 static void shark_can_log_flush(uint8_t dest)
 {
+	u64 time = shark_get_time() + 200;
+
 	shark_can_log_message.tx_efid = 3 << 24 | 1 << 19 | 1 << 14 | SELF_ID << 7 | dest;
 	shark_can_log_message.tx_ff = CAN_FF_EXTENDED;
 	shark_can_log_message.tx_ft = CAN_FT_DATA;
 
-	can_message_transmit(CAN0, &shark_can_log_message);
+	while (can_message_transmit(CAN0, &shark_can_log_message) == CAN_NOMAILBOX && time > shark_get_time());
+
 	shark_can_log_message.tx_dlen = 0;
 }
 

+ 1 - 1
Source/sw_build_info.h

@@ -1,3 +1,3 @@
 #pragma once
 
-#define CONFIG_VERSION "PS100XX_V01_11061736"
+#define CONFIG_VERSION "PS100XX_V01_11061952"