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

fixup read info fault

Signed-off-by: FuangCao <cavan.cao@foxmail.com>
FuangCao 5 лет назад
Родитель
Сommit
fb3a71a2bd
10 измененных файлов с 60 добавлено и 38 удалено
  1. 1 1
      Project/version.txt
  2. 5 5
      Source/app.c
  3. 0 1
      Source/app.h
  4. 4 5
      Source/app_bms_1.c
  5. 4 5
      Source/app_bms_2.c
  6. 28 18
      Source/app_rs485_1.c
  7. 10 1
      Source/app_rs485_1.h
  8. 6 0
      Source/drv_usart.c
  9. 1 1
      Source/shark_charge.c
  10. 1 1
      Source/sw_build_info.h

+ 1 - 1
Project/version.txt

@@ -1 +1 @@
-PS100XX_V11_11181825
+PS100XX_V11_11182018

+ 5 - 5
Source/app.c

@@ -67,7 +67,7 @@ uint8_t Check_Battery_1_On(void)
 {
 	uint32_t vol = 0;
 	
-	if(IS_CHARGER_ON())
+	if(shark_charger_enabled)
 		return 0;
 	
 	if((sub_bms_info_2.packet_common.bms_status & BMS_STA_S_OPEN) == 0)
@@ -84,7 +84,7 @@ uint8_t Check_Battery_2_On(void)
 {
 	uint32_t vol = 0;
 
-	if(IS_CHARGER_ON())
+	if(shark_charger_enabled)
 		return 0;
 	
 	if((sub_bms_info_1.packet_common.bms_status & BMS_STA_S_OPEN) == 0)
@@ -117,7 +117,7 @@ shark_bool battery_wait_voltage_parallel(void)
 
 	voltage_min = voltage_max - SHARK_BATT_VOLTAGE_FUZZ;
 
-	if (IS_CHARGER_ON()) {
+	if (shark_charger_enabled) {
 		voltage_max = SHARK_CHARGER_VOLTAGE_MAX;
 	} else {
 		voltage_max += SHARK_BATT_VOLTAGE_FUZZ;
@@ -1518,7 +1518,7 @@ void Intelligent_Management_Battery(void)
 		switch(cb_operate_state)
 		{
 			case CB_BAT1:
-				if(IS_CHARGER_ON())
+				if (shark_charger_enabled)
 				{
 					if (shark_battery_charge_complete1() || shark_battery_get_voltage2() < shark_battery_get_voltage1())
 					{
@@ -1531,7 +1531,7 @@ void Intelligent_Management_Battery(void)
 				}
 				break;
 			case CB_BAT2:
-				if(IS_CHARGER_ON())
+				if (shark_charger_enabled)
 				{
 					if (shark_battery_charge_complete2() || shark_battery_get_voltage1() < shark_battery_get_voltage2())
 					{

+ 0 - 1
Source/app.h

@@ -1,7 +1,6 @@
 #ifndef APP_H
 #define APP_H
 
-#define IS_CHARGER_ON() 		gpio_output_bit_get(GPIOB,GPIO_PIN_12)
 #define CHARG_PROTECT_OPEN(x)   gpio_bit_write(GPIOB,GPIO_PIN_12,(bit_status)(x))
 #define BAT1_IS_OPEN()          (!gpio_input_bit_get(GPIOC,GPIO_PIN_2))
 #define BAT2_IS_OPEN()          (!gpio_input_bit_get(GPIOC,GPIO_PIN_1))

+ 4 - 5
Source/app_bms_1.c

@@ -113,22 +113,21 @@ int8_t Handle_Can_Bms_1_CMD(CAN_FRAME*can_bms_1_frame)
 		case KEY_BMS_1_COMMON:
 			break;
 		case KEY_BMS_1_READ_INFO:
-			break;
 		case KEY_BMS_1_READ_VER:
+			sub_bms_info_1.update_mask |= SHARK_BATT_INFO_VERTION;
 			break;
 		case KEY_BMS_1_ALARM_TIMES:
-			break;
 		case KEY_BMS_1_ALARM_TIMES_1:
-			break;
 		case KEY_BMS_1_ALARM_TIMES_2:
+			sub_bms_info_1.update_mask |= SHARK_BATT_INFO_TIMES;
 			break;
 		case KEY_BMS_1_CELL_VOL:
-			break;
 		case KEY_BMS_1_CELL_VOL_1:
-			break;
 		case KEY_BMS_1_CELL_VOL_2:
+			sub_bms_info_1.update_mask |= SHARK_BATT_INFO_CELL_VOL;
 			break;
 		case KEY_BMS_1_TEMP_OTHER:
+			sub_bms_info_1.update_mask |= SHARK_BATT_INFO_TEMP;
 			break;
 		case KEY_BMS_1_SELF_UP:
 			bms_1_self_stimeout.set = 0;

+ 4 - 5
Source/app_bms_2.c

@@ -112,22 +112,21 @@ int8_t Handle_Can_Bms_2_CMD(CAN_FRAME*can_bms_2_frame)
 		case KEY_BMS_2_COMMON:
 			break;
 		case KEY_BMS_2_READ_INFO:
-			break;
 		case KEY_BMS_2_READ_VER:
+			sub_bms_info_2.update_mask |= SHARK_BATT_INFO_VERTION;
 			break;
 		case KEY_BMS_2_ALARM_TIMES:
-			break;
 		case KEY_BMS_2_ALARM_TIMES_1:
-			break;
 		case KEY_BMS_2_ALARM_TIMES_2:
+			sub_bms_info_2.update_mask |= SHARK_BATT_INFO_TIMES;
 			break;
 		case KEY_BMS_2_CELL_VOL:
-			break;
 		case KEY_BMS_2_CELL_VOL_1:
-			break;
 		case KEY_BMS_2_CELL_VOL_2:
+			sub_bms_info_2.update_mask |= SHARK_BATT_INFO_CELL_VOL;
 			break;
 		case KEY_BMS_2_TEMP_OTHER:
+			sub_bms_info_2.update_mask |= SHARK_BATT_INFO_TEMP;
 			break;
 		case KEY_BMS_2_SELF_UP:
 			bms_2_self_stimeout.set = 0;

+ 28 - 18
Source/app_rs485_1.c

@@ -49,6 +49,9 @@ static int8_t Get_Check_Sum_1(uint16_t*value, const uint8_t*data,uint16_t size)
 
 void shark_battery_clear(SUB_BMS_INFO *info)
 {
+	info->update_mask = 0xFF;
+	info->sub_bms_cmd.operate = OP_READ_INFO;
+
 	memset(&info->packet_common, 0x00, sizeof(info->packet_common));
 	memset(&info->bat_dev_info, 0x00, sizeof(info->bat_dev_info));
 	memset(&info->bat_times, 0x00, sizeof(info->bat_times));
@@ -118,18 +121,22 @@ static int8_t Handle_Sub_BMS_CMD_1(SUB_BMS_INFO *info, const u8 *buff, u8 length
 			case OP_READ_INFO:
 				memcpy(&info->bat_dev_info, buff + count,sizeof(info->bat_dev_info));
 				count += sizeof(info->bat_dev_info);
+				info->update_mask &= ~SHARK_BATT_INFO_VERTION;
 				break;
 			case OP_ALARM_TIMES:
 				memcpy(&info->bat_times, buff + count, sizeof(info->bat_times));
 				count += sizeof(info->bat_times);
+				info->update_mask &= ~SHARK_BATT_INFO_TIMES;
 				break;	
 			case OP_CELL_VOL:
 				memcpy(&info->cell_vol, buff + count, sizeof(info->cell_vol));
 				count += sizeof(info->cell_vol);
+				info->update_mask &= ~SHARK_BATT_INFO_CELL_VOL;
 				break;
 			case OP_TEMP_OTHER:
 				memcpy(&info->temp_other, buff + count, sizeof(info->temp_other));
 				count += sizeof(info->temp_other);
+				info->update_mask &= ~SHARK_BATT_INFO_TEMP;
 				break;
 
 				
@@ -150,26 +157,29 @@ static int8_t Handle_Sub_BMS_CMD_1(SUB_BMS_INFO *info, const u8 *buff, u8 length
 		if(((info->packet_common.operate_result&0xF0)>>4) == info->sub_bms_cmd.operate)
 		{
 			memset(&info->sub_bms_cmd,0x00,sizeof(info->sub_bms_cmd));
-			info->send_times++;
 
-			if(info->send_times > 90)
-			{
-				info->sub_bms_cmd.operate = OP_ALARM_TIMES;
-				info->send_times = 0;
-			}
-			else if(info->send_times > 60)
-			{
-				info->sub_bms_cmd.operate = OP_CELL_VOL;
-				
-			}
-			else if(info->send_times > 30)
-			{
-				info->sub_bms_cmd.operate = OP_TEMP_OTHER;
-				
-			}
-			else
+			println("pending: %x", info->update_mask);
+
+			if (info->update_mask != 0) {
+				if ((info->update_mask & SHARK_BATT_INFO_VERTION) != 0) {
+					info->sub_bms_cmd.operate = OP_READ_INFO;
+				} else if ((info->update_mask & SHARK_BATT_INFO_TIMES) != 0) {
+					info->sub_bms_cmd.operate = OP_ALARM_TIMES;
+				} else if ((info->update_mask & SHARK_BATT_INFO_CELL_VOL) != 0) {
+					info->sub_bms_cmd.operate = OP_CELL_VOL;
+				} else if ((info->update_mask & SHARK_BATT_INFO_TEMP) != 0) {
+					info->sub_bms_cmd.operate = OP_TEMP_OTHER;
+				} else {
+					info->sub_bms_cmd.operate = OP_NONE;
+					info->update_mask = 0;
+				}
+
+				info->tx_pending = shark_true;
+			} else {
 				info->sub_bms_cmd.operate = OP_NONE;
+			}
 		}
+
 		return 1;
 		
 	}while(0);
@@ -353,7 +363,7 @@ static shark_battery_exit_t shark_battery_is_normal_raw(SUB_BMS_INFO *info, shar
 	work_status = info->packet_common.work_status;
 	work_status &= ~(ST_CHRG_CUR | ST_DISCHRG_CUR | ST_OVRDISCHRG_CUR | ST_SMALL_CURRENT_OVER);
 
-	if (IS_CHARGER_ON()) {
+	if (shark_charger_enabled) {
 		work_status &= ~(ST_OVRDISCHRG_VOL | ST_PDOWN | ST_UDR_TEMPE_DISCHRG | ST_OVR_TEMPE_DISCHRG);
 	} else {
 		work_status &= ~(ST_OVRCHRG_VOL | ST_OVR_TEMPE_CHRG | ST_UDR_TEMPE_CHRG);

+ 10 - 1
Source/app_rs485_1.h

@@ -122,6 +122,13 @@ typedef enum {
 	SHARK_BATT_MASK_BOTH = SHARK_BATT_MASK_BAT1 | SHARK_BATT_MASK_BAT2
 } shark_battery_mask_t;
 
+typedef enum {
+	SHARK_BATT_INFO_VERTION = 1 << 0,
+	SHARK_BATT_INFO_TIMES = 1 << 1,
+	SHARK_BATT_INFO_CELL_VOL = 1 << 2,
+	SHARK_BATT_INFO_TEMP = 1 << 3,
+} shark_battery_info_t;
+
 #pragma  pack (push,1)  
 typedef struct
 {
@@ -206,6 +213,9 @@ typedef struct
 	shark_send_state_t send_state;
 	shark_battery_exit_t exit_code;
 
+	u8 update_mask;
+	u16 update_ticks;
+
 	u8 rx_buff[CONFIG_RX_BUFF_SIZE];
 	u8 tx_buff[CONFIG_TX_BUFF_SIZE];
 
@@ -220,7 +230,6 @@ typedef struct
 
 	u8 define_error;
 	u8 test_error;
-	u8 send_times;
 }SUB_BMS_INFO;
 
 extern SUB_BMS_INFO sub_bms_info_1;

+ 6 - 0
Source/drv_usart.c

@@ -155,6 +155,12 @@ static void shark_uart_tick_raw(SUB_BMS_INFO *info)
 			}
 		}
 	}
+
+	if (info->update_ticks == 0 && info->connected) {
+		info->update_mask = 0xFF;
+	}
+
+	info->update_ticks++;
 }
 
 void shark_uart_tick(void)

+ 1 - 1
Source/shark_charge.c

@@ -93,7 +93,7 @@ void shark_charge_poll(void)
 				break;
 
 			case CB_BAT1_BAT2_PARRALLEL:
-				if (sub_bms_info_1.packet_common.charge_flag == 0 && sub_bms_info_2.packet_common.charge_flag == 0) {
+				if (sub_bms_info_1.packet_common.charge_flag == 0 || sub_bms_info_2.packet_common.charge_flag == 0) {
 					shark_charger_disable();
 				}
 				break;

+ 1 - 1
Source/sw_build_info.h

@@ -1,3 +1,3 @@
 #pragma once
 
-#define CONFIG_VERSION "PS100XX_V11_11181825"
+#define CONFIG_VERSION "PS100XX_V11_11182018"