Browse Source

【3.1.0.39】
1、新增BMS保护板控制状态解析,若保护板有保护状态,则数据模块不主动解开
2、新增模组温度高于45摄氏度会不休眠
3、新增其他温度高于50摄氏度会自动唤醒

CHENJIE-PC\QiXiang_CHENJIE 3 years ago
parent
commit
215786b604
10 changed files with 430 additions and 326 deletions
  1. 2 2
      inc/AppConfig.h
  2. 3 2
      inc/AppFunc.h
  3. 2 1
      inc/AppSignal.h
  4. 83 83
      inc/AppTaskUart.h
  5. 111 5
      src/AppFunc.c
  6. 2 2
      src/AppSignal.c
  7. 8 1
      src/AppTaskControl.c
  8. 3 3
      src/AppTaskMain.c
  9. 9 6
      src/AppTaskUart.c
  10. 207 221
      src/EmbeddedCoder_src/SFM.c

+ 2 - 2
inc/AppConfig.h

@@ -2,7 +2,7 @@
  * @Author       : ChenJie
  * @Date         : 2021-10-14 09:27:15
  * @LastEditors  : ChenJie
- * @LastEditTime : 2021-11-10 11:09:44
+ * @LastEditTime : 2021-11-12 16:05:14
  * @Description  : App Config H file 配置文件,可以针对不同参数进行更改
  * @FilePath     : \PLAT\project\ec616_0h00\apps\qx_app\inc\AppConfig.h
  */
@@ -14,7 +14,7 @@
 #define DATA_MODULE_TYPE (1)           //1表示NB模块,2表示4G cat1
 #define EOLSTATE (0)                   //1表示下线检测跳过,使用默认值,0表示使用下线检测
 #define DEFAULT_SN "RLTEST00000000001" //默认上传的SN编码
-#define APPSWVERSION 0x03010026        //数据模块软件版本号
+#define APPSWVERSION 0x03010027        //数据模块软件版本号
 #define RELAYCONFIG 1                  //继电器配置
 #define TCP_ADD "iotp.fast-fun.cn"     //数据上传的地址
 #define TCP_PORT 8712                  //数据上传的端口

+ 3 - 2
inc/AppFunc.h

@@ -3,7 +3,7 @@
  * @Date         : 2021-10-14 09:27:15
  * @Version      : V3.0
  * @LastEditors  : ChenJie
- * @LastEditTime : 2021-10-29 16:23:13
+ * @LastEditTime : 2021-11-12 15:03:02
  * @Description  : file content
  * @FilePath     : \PLAT\project\ec616_0h00\apps\qx_app\inc\AppFunc.h
  */
@@ -67,4 +67,5 @@ void relayControlFunc(UINT16 BuzzerPeriod, float DutyRatio);
 void SaveAppConfig(void);
 void SaveAppData(void);
 void SaveBcuData(void);
-void UDS_Service(CAN_Msg_Type *CanRxMsg);
+void UDS_Service(CAN_Msg_Type *CanRxMsg);
+void BmsProtectStateDecode(UINT8 *DischargeProtect, UINT8 *ChargeProtect);

+ 2 - 1
inc/AppSignal.h

@@ -2,7 +2,7 @@
  * @Author       : ChenJie
  * @Date         : 2021-10-14 09:27:15
  * @LastEditors  : ChenJie
- * @LastEditTime : 2021-10-26 16:07:37
+ * @LastEditTime : 2021-11-12 16:11:45
  * @Description  : Global variable definition H file
  * @FilePath     : \PLAT\project\ec616_0h00\apps\qx_app\inc\AppSignal.h
  */
@@ -86,6 +86,7 @@ extern UINT16 avrgCellVol;
 extern UINT16 ErrorNum[ErrorNumLength];
 extern UINT16 updateDifferDataPackageCounter;
 extern INT16 xyzData[3];
+extern UINT8 otherTempAvg;
 //declear the UINT32 vars
 extern UINT32 battBalanceoInfo;
 extern UINT32 battProtectState;

+ 83 - 83
inc/AppTaskUart.h

@@ -29,14 +29,14 @@
 #include "numeric.h"
 #include "AppSignal.h"
 #include "hal_uart.h"
-#define  PROC_UART_TASK_STACK_SIZE (2048)
+#define PROC_UART_TASK_STACK_SIZE (2048)
 
-#define BMS_ADDRESS_CODE    0x01
-#define UART_READ_CODE      0x03
-#define UART_WRITE_CODE     0x10
-#define UART_ENCRYPT_CODE   0x05
-#define UART_WRITE_FLAG     0x01
-#define UART_READ_FLAG      0x00
+#define BMS_ADDRESS_CODE 0x01
+#define UART_READ_CODE 0x03
+#define UART_WRITE_CODE 0x10
+#define UART_ENCRYPT_CODE 0x05
+#define UART_WRITE_FLAG 0x01
+#define UART_READ_FLAG 0x00
 typedef enum
 {
     PROCESS_UART_STATE_INTI = 0,
@@ -46,104 +46,104 @@ typedef enum
     PROCESS_UART_STATE_WRITE,
     PROCESS_UART_STATE_UPDATE,
     PROCESS_UART_STATE_SLEEP
-}process_Uart;
+} process_Uart;
 typedef struct _UartQueryType
 {
-    UINT8 Bms_Address; 
-    UINT8 Bms_Funcode; 
-    UINT8 Reg_Begin_H; 
-    UINT8 Reg_Begin_L; 
-    UINT8 Reg_Num_H; 
-    UINT8 Reg_Num_L; 
+    UINT8 Bms_Address;
+    UINT8 Bms_Funcode;
+    UINT8 Reg_Begin_H;
+    UINT8 Reg_Begin_L;
+    UINT8 Reg_Num_H;
+    UINT8 Reg_Num_L;
     UINT8 CRC_L;
     UINT8 CRC_H;
-}UartQueryType;
+} UartQueryType;
 typedef struct _UartWriteMsgType
 {
-    UINT8 Bms_Address; 
-    UINT8 Bms_Funcode; 
-    UINT8 Reg_Begin_H; 
-    UINT8 Reg_Begin_L; 
-    UINT8 Reg_Num_H; 
-    UINT8 Reg_Num_L; 
+    UINT8 Bms_Address;
+    UINT8 Bms_Funcode;
+    UINT8 Reg_Begin_H;
+    UINT8 Reg_Begin_L;
+    UINT8 Reg_Num_H;
+    UINT8 Reg_Num_L;
     UINT8 Data_Count;
     UINT8 Data[2];
     UINT8 CRC_L;
     UINT8 CRC_H;
-}UartWriteMsgType;
+} UartWriteMsgType;
 typedef struct _UartWriteDataType
 {
-    volatile UINT8 WriteCmd; 
+    volatile UINT8 WriteCmd;
     UINT8 Data[2];
-}UartWriteData_S;
+} UartWriteData_S;
 typedef enum
 {
-        UPDATE_STEP_CHECK_VERSION=0,
-        UPDATE_STEP_REQUEST_UPDATE,
-        UPDATE_STEP_START_UPDATE, 
-        UPDATE_STEP_CHECK_VERSION_AGAIN,       
-        UPDATE_STEP_SET_BAUD_RATE,
-        UPDATE_STEP_PREPARE_SEND_DATA_LEN,
-        UPDATE_STEP_SEND_DATA_LEN,
-        UPDATE_STEP_PREPARE_SEND_UPDATE_DATA,
-        UPDATE_STEP_SEND_UPDATE_DATA,
-        UPDATE_STEP_SEND_DATA_END,
-        UPDATE_STEP_START_INSTALL,
-        UPDATE_STEP_END,
-        UPDATE_STEP_RESET, //exit download, and go to before UPDATE_STEP_PREPARE_SEND_UPDATE_DATA
-        UPDATE_STEP_DOWNLOAD_BREAK_OFF,  //exite download, and return boot mode(not app mode)
-        UPDATE_STEP_ERROR
-}UpdateStep;
+    UPDATE_STEP_CHECK_VERSION = 0,
+    UPDATE_STEP_REQUEST_UPDATE,
+    UPDATE_STEP_START_UPDATE,
+    UPDATE_STEP_CHECK_VERSION_AGAIN,
+    UPDATE_STEP_SET_BAUD_RATE,
+    UPDATE_STEP_PREPARE_SEND_DATA_LEN,
+    UPDATE_STEP_SEND_DATA_LEN,
+    UPDATE_STEP_PREPARE_SEND_UPDATE_DATA,
+    UPDATE_STEP_SEND_UPDATE_DATA,
+    UPDATE_STEP_SEND_DATA_END,
+    UPDATE_STEP_START_INSTALL,
+    UPDATE_STEP_END,
+    UPDATE_STEP_RESET,              //exit download, and go to before UPDATE_STEP_PREPARE_SEND_UPDATE_DATA
+    UPDATE_STEP_DOWNLOAD_BREAK_OFF, //exite download, and return boot mode(not app mode)
+    UPDATE_STEP_ERROR
+} UpdateStep;
 typedef enum
-{        
-        MS_UPDATE_STEP_SEND_FIRMWARE_UPDATE_REQUEST_AND_JUMP_TO_BOOTLOADER = 1,
-        MS_UPDATE_STEP_FIRMWARE_UPDATE_REQUEST_ANSWER, 
-        MS_UPDATE_STEP_SEND_FIRMWARE_INFO,       
-        MS_UPDATE_STEP_FIRMWARE_INFO_CHECK_AND_UPDATE_REQEST_ANSWER,
-        MS_UPDATE_STEP_EREASE_APP_FLASH_REQUEST,
-        MS_UPDATE_STEP_EREASE_FLASH_ANSWER,        
-        MS_UPDATE_STEP_SEND_UPDATE_DATA,
-        MS_UPDATE_STEP_UPDATE_DATA_WRITE_ANSWER,
-        MS_UPDATE_STEP_SEND_UPDATE_DATA_END_AND_JUMP_TO_APP,
-        MS_UPDATE_STEP_JUMP_TO_APP_ANSWER,
-        MS_UPDATE_STEP_READ_CURRENT_RUNNING_MODE,
-        MS_UPDATE_STEP_CURRENT_RUNNING_MODE_ANSWER,
-        MS_UPDATE_STEP_END,
-        MS_UPDATE_STEP_ERROR
-}UpdateStep_MS_BMS;
+{
+    MS_UPDATE_STEP_SEND_FIRMWARE_UPDATE_REQUEST_AND_JUMP_TO_BOOTLOADER = 1,
+    MS_UPDATE_STEP_FIRMWARE_UPDATE_REQUEST_ANSWER,
+    MS_UPDATE_STEP_SEND_FIRMWARE_INFO,
+    MS_UPDATE_STEP_FIRMWARE_INFO_CHECK_AND_UPDATE_REQEST_ANSWER,
+    MS_UPDATE_STEP_EREASE_APP_FLASH_REQUEST,
+    MS_UPDATE_STEP_EREASE_FLASH_ANSWER,
+    MS_UPDATE_STEP_SEND_UPDATE_DATA,
+    MS_UPDATE_STEP_UPDATE_DATA_WRITE_ANSWER,
+    MS_UPDATE_STEP_SEND_UPDATE_DATA_END_AND_JUMP_TO_APP,
+    MS_UPDATE_STEP_JUMP_TO_APP_ANSWER,
+    MS_UPDATE_STEP_READ_CURRENT_RUNNING_MODE,
+    MS_UPDATE_STEP_CURRENT_RUNNING_MODE_ANSWER,
+    MS_UPDATE_STEP_END,
+    MS_UPDATE_STEP_ERROR
+} UpdateStep_MS_BMS;
 typedef struct BMS_Update_Recv_Msg_Type
 {
-        UINT8 startFlag;
-        UINT8 addrFlag;
-        UINT8 cmdRW;
-        UINT8 dataLen;
-        UINT8 cmd;
-        UINT8 data;
-        UINT8 checkSum;
-        UINT8 endFlag;
-}BMS_Update_Recv_Msg_Type;
+    UINT8 startFlag;
+    UINT8 addrFlag;
+    UINT8 cmdRW;
+    UINT8 dataLen;
+    UINT8 cmd;
+    UINT8 data;
+    UINT8 checkSum;
+    UINT8 endFlag;
+} BMS_Update_Recv_Msg_Type;
 typedef enum
 {
-	updateOK                 	= 0,         ///< update successfully.
-	updateErrorTimeout			= 1,         ///< update failed after try 3 times, so time out
-	updateErrorBMSPowerLow        	= 2,         ///update failed, because of bmp power low
-	updateErrorBMSWarningProtect           	= 3,         ///update failed, because there are some warning in bms which not allowed to update
-	updateErrorBMSNotSurport          	= 4,         ///update failed, because of bms not surpport
-	updateErrorBMSWorkState           	= 5,         ///update failed, because bms is charging or discharging
-	updateErrorFirmwareInfoError                	= 6, //update failed, the firmware info error
-	updateErrorFirmwareSizeError          	= 7,  ///update failed, the firmware size in firmware info is to large
-	updateErrorAppErease = 8,			///update failed, erease app flash failed
-	updateErrorPackageCRC = 9,			///the crc of some package is wrong
-	updateErrorPackageWrite = 10,		///package write in failed
-	updateErrorPackageNo = 11,			///package number is not right or not continues
-	updateErrorCheckSumError ,			// checksum != checksumcal
-	updateFailed = 0xFF					///					
-}updateBMSStatus;
+    updateOK = 0,                     ///< update successfully.
+    updateErrorTimeout = 1,           ///< update failed after try 3 times, so time out
+    updateErrorBMSPowerLow = 2,       ///update failed, because of bmp power low
+    updateErrorBMSWarningProtect = 3, ///update failed, because there are some warning in bms which not allowed to update
+    updateErrorBMSNotSurport = 4,     ///update failed, because of bms not surpport
+    updateErrorBMSWorkState = 5,      ///update failed, because bms is charging or discharging
+    updateErrorFirmwareInfoError = 6, //update failed, the firmware info error
+    updateErrorFirmwareSizeError = 7, ///update failed, the firmware size in firmware info is to large
+    updateErrorAppErease = 8,         ///update failed, erease app flash failed
+    updateErrorPackageCRC = 9,        ///the crc of some package is wrong
+    updateErrorPackageWrite = 10,     ///package write in failed
+    updateErrorPackageNo = 11,        ///package number is not right or not continues
+    updateErrorCheckSumError,         // checksum != checksumcal
+    updateFailed = 0xFF               ///
+} updateBMSStatus;
 void AppTaskUartInit(void *arg);
 void AppTaskUartDeInit(void *arg);
 //BMS升级函数声明
-UINT8 SP_BMS_Update_CheckSUM(UINT8* pSendData,UINT8 len);
+UINT8 SP_BMS_Update_CheckSUM(UINT8 *pSendData, UINT8 len);
 void SP_BMS_Update_Service();
 updateBMSStatus MS_BMS_Update_Service();
-UINT16 MS_BMS_Update_CRC16(UINT8* pSendData,UINT16 len);
-UINT8 UartAppTrasmit(UINT8* pSend,UINT32 sendLen, UINT8* pRead, UINT32 readLen, UINT32 timeout);
+UINT16 MS_BMS_Update_CRC16(UINT8 *pSendData, UINT16 len);
+UINT8 UartAppTrasmit(UINT8 *pSend, UINT32 sendLen, UINT8 *pRead, UINT32 readLen, UINT32 timeout);

+ 111 - 5
src/AppFunc.c

@@ -1,16 +1,122 @@
 /*
  * @Author       : ChenJie
- * @Date         : 2021-10-14 09:27:15
+ * @Date         : 2021-11-09 12:08:17
  * @Version      : V3.0
  * @LastEditors  : ChenJie
- * @LastEditTime : 2021-11-03 11:59:55
- * @Description  : 应用层函数定义区,UTF-8
+ * @LastEditTime : 2021-11-12 15:41:17
+ * @Description  : file content
  * @FilePath     : \PLAT\project\ec616_0h00\apps\qx_app\src\AppFunc.c
  */
-
 #include "AppFunc.h"
 #include "numeric.h"
 #include "hal_module_adapter.h"
+/**
+ * @brief : 保护板保护状态解码
+ * @param {*}
+ * @return {*}
+ */
+void BmsProtectStateDecode(UINT8 *DischargeProtect, UINT8 *ChargeProtect)
+{
+	UINT8 ret = 0;
+	//battProtectState = (dataPtr[(0x03 + BATT_CELL_VOL_NUM) * 2 + 0] << 24) | (dataPtr[(0x04 + BATT_CELL_VOL_NUM) * 2 + 0] << 16) | (dataPtr[(0x04 + BATT_CELL_VOL_NUM) * 2 + 1] << 8) | (dataPtr[(0x05 + BATT_CELL_VOL_NUM) * 2 + 1]);
+	if (battProtectState == 0x00)
+	{
+		*DischargeProtect = 0;
+		*ChargeProtect = 0;
+		return;
+	}
+
+	ret = getbit(battProtectState, 0);
+	if (ret) //放电短路保护--0
+	{
+		*DischargeProtect = (*DischargeProtect) + 1;
+		//printf("protect[%d]\n", __LINE__);
+	}
+	ret = getbit(battProtectState, 1);
+	if (ret) //放电过流保护--1
+	{
+		*DischargeProtect = (*DischargeProtect) + 1;
+		//printf("protect[%d]\n", __LINE__);
+	}
+
+	ret = getbit(battProtectState, 2);
+	if (ret) //充电过流保护--2
+	{
+		*ChargeProtect = (*ChargeProtect) + 1;
+		//printf("protect[%d]\n", __LINE__);
+	}
+
+	ret = getbit(battProtectState, 8);
+	if (ret) //电芯欠压--8
+	{
+		*DischargeProtect = (*DischargeProtect) + 1;
+		//printf("protect[%d]\n", __LINE__);
+	}
+
+	ret = getbit(battProtectState, 9);
+	if (ret) //总压欠压--9
+	{
+		*DischargeProtect = (*DischargeProtect) + 1;
+		//printf("protect[%d]\n", __LINE__);
+	}
+
+	ret = getbit(battProtectState, 16);
+	if (ret) //充电高温--16
+	{
+		*ChargeProtect = (*ChargeProtect) + 1;
+		//printf("protect[%d]\n", __LINE__);
+	}
+
+	ret = getbit(battProtectState, 17);
+	if (ret) //充电低温--17
+	{
+		*ChargeProtect = (*ChargeProtect) + 1;
+		//printf("protect[%d]\n", __LINE__);
+	}
+
+	ret = getbit(battProtectState, 18);
+	if (ret) //mos高温--18
+	{
+		*ChargeProtect = (*ChargeProtect) + 1;
+		*DischargeProtect = (*DischargeProtect) + 1;
+		//printf("protect[%d]\n", __LINE__);
+	}
+
+	ret = getbit(battProtectState, 20);
+	if (ret) //放电高温--20
+	{
+		*DischargeProtect = (*DischargeProtect) + 1;
+		//printf("protect[%d]\n", __LINE__);
+	}
+
+	ret = getbit(battProtectState, 21);
+	if (ret) //放电低温--21
+	{
+		*DischargeProtect = (*DischargeProtect) + 1;
+		//printf("protect[%d]\n", __LINE__);
+	}
+
+	ret = getbit(battProtectState, 24);
+	if (ret) //电芯过压--24
+	{
+		*ChargeProtect = (*ChargeProtect) + 1;
+		//printf("protect[%d]\n", __LINE__);
+	}
+
+	ret = getbit(battProtectState, 25);
+	if (ret) //总压过压--25
+	{
+		*ChargeProtect = (*ChargeProtect) + 1;
+		//printf("protect[%d]\n", __LINE__);
+	}
+
+	ret = getbit(battProtectState, 28);
+	if (ret) //充满保护--28
+	{
+		*ChargeProtect = (*ChargeProtect) + 1;
+		//printf("protect[%d]\n", __LINE__);
+	}
+}
 /**
  * @brief : 故障代码处理函数,将故障代码进行排序并输出
  * @param {*}
@@ -135,7 +241,7 @@ INT8 rentalEndDetectFunc(void)
 	UTCToBeijing((UTC8TimeType *)&UTC8Time, year, month, day, hour, minute, sec);
 	if (UTC8Time.year > 2000)
 	{
-#ifdef USING_PRINTF
+#ifdef USING_PRINTF1
 		printf("retal Jug:%d %d %d %d,%d %d %d %d\n", UTC8Time.year, UTC8Time.month, UTC8Time.day, UTC8Time.hour, AppDataInfo.ExpiryTimeArray[0], AppDataInfo.ExpiryTimeArray[1], AppDataInfo.ExpiryTimeArray[2], AppDataInfo.ExpiryTimeArray[3]);
 #endif
 		if (((UTC8Time.year - 0x07D0) & 0xFF) == AppDataInfo.ExpiryTimeArray[0]) //年份相等判定月份

+ 2 - 2
src/AppSignal.c

@@ -3,7 +3,7 @@
  * @Date         : 2021-10-14 09:27:15
  * @Version      : V3.0
  * @LastEditors  : ChenJie
- * @LastEditTime : 2021-11-04 14:13:04
+ * @LastEditTime : 2021-11-12 16:11:30
  * @Description  : Global variable definition c file,此文件存放App使用到的全局变量
  * @FilePath     : \PLAT\project\ec616_0h00\apps\qx_app\src\AppSignal.c
  */
@@ -82,7 +82,7 @@ UINT16 minCellVol = 0;                     //最小单体电压
 UINT16 nbHwVersion = 0;                    //数据模块硬件状态
 UINT16 updateDifferDataPackageCounter = 0; //差分包升级计数器
 INT16 xyzData[3] = {0};                    //xyz三轴数据
-
+UINT8 otherTempAvg = 0;
 /**declear the uint32 vars**/
 UINT32 battBalanceoInfo = 0; //电池均衡状态
 UINT32 Battdesigncap = 0;    //battery design cap 电池包设计容量

+ 8 - 1
src/AppTaskControl.c

@@ -101,7 +101,14 @@ static void ControlTask(void *arg)
             osDelay(100);
             if (TimeCounter % (10 * 600) == 0)
             {
-                GetAdcValue(1);
+                AdcIndex = 0;
+                while (AdcIndex < 5)
+                {
+                    GetAdcValue(AdcIndex + 1);
+                    AdcIndex++;
+                    osDelay(200);
+                }
+                otherTempAvg = (heatTemp1 + heatTemp2 + fastChargeTemp + normalChargeTemp) / 4;
             }
             if (gProcess_app == WORK)
             {

+ 3 - 3
src/AppTaskMain.c

@@ -3,7 +3,7 @@
  * @Date         : 2021-10-14 09:27:15
  * @Version      : V3.0
  * @LastEditors  : ChenJie
- * @LastEditTime : 2021-11-05 14:54:08
+ * @LastEditTime : 2021-11-12 16:03:37
  * @Description  : 主要负责:1.工作模式转换2.定时器定时3.定时保存运行数据4.异常状态重启
  * @FilePath     : \PLAT\project\ec616_0h00\apps\qx_app\src\AppTaskMain.c
  */
@@ -104,7 +104,7 @@ static void MainTask(void *arg)
                 PROC_MAIN_STATE_SWITCH(PROCESS_STATE_LISTEN);
                 break;
             }
-            if ((BMS_Fota_update_flag != FALSE) || (TCPWorkState != 0x00) || (BattWorkStateDelay != BATT_IDLE_SYM) || (battWorkState != BATT_IDLE_SYM) || (PadInterrupt != 0x00))
+            if ((BMS_Fota_update_flag != FALSE) || (TCPWorkState != 0x00) || (BattWorkStateDelay != BATT_IDLE_SYM) || (battWorkState != BATT_IDLE_SYM) || (PadInterrupt != 0x00) || (AvgBattTemp >= (45 + 40)))
             {
                 xTimerReset(work_timer, 0);
                 PadInterrupt = 0x00;
@@ -169,7 +169,7 @@ static void MainTask(void *arg)
             {
                 SaveBcuData();
             }
-            if ((SleepTimerEnd) || (TCPWorkState == 1) || (PadInterrupt_clrCounter >= 1)) //从监听转换为工作的条件
+            if ((SleepTimerEnd) || (TCPWorkState == 1) || (PadInterrupt_clrCounter >= 1) || (otherTempAvg > (50 + 40))) //从监听转换为工作的条件
             {
 #ifdef USING_PRINTF1
                 printf("WORK:%d,%d,%d\n", PadInterrupt_clrCounter, PadInterrupt, UartInterruptcount);

+ 9 - 6
src/AppTaskUart.c

@@ -2,12 +2,12 @@
  * @Author       : ChenJie
  * @Date         : 2021-10-14 09:27:15
  * @LastEditors  : ChenJie
- * @LastEditTime : 2021-10-29 10:25:03
+ * @LastEditTime : 2021-11-12 15:51:39
  * @Description  : file content
- * @FilePath     : \undefinedc:\Work_Files\Files\4830\SDK\PLAT\project\ec616_0h00\apps\qx_app\src\AppTaskUart.c
+ * @FilePath     : \PLAT\project\ec616_0h00\apps\qx_app\src\AppTaskUart.c
  */
-
 #include "AppTaskUart.h"
+// #include "AppFunc.h"
 extern QueueHandle_t uartDataHandle;
 static StaticTask_t gProcess_Uart_Task_t;
 static UINT8 gProcess_Uart_TaskStack[PROC_UART_TASK_STACK_SIZE];
@@ -146,7 +146,7 @@ static void UartTask(void *arg)
 #endif
 			if (Uart_Recv_LEN > 5)
 			{
-			    uartBattInfoDecode(UartAnswerData.data);
+				uartBattInfoDecode(UartAnswerData.data);
 				UartErrorFlag = 0;
 				UartRecvFlagCounter = 0;
 				UartRecvFlag = 1;
@@ -287,6 +287,9 @@ void Uart_Cmd_Control(QueueHandle_t UartWriteCmdHandle, UartBuffer UartAnswerDat
 	UINT8 ChargePermitState = 1;
 	UINT8 DischargePermitState = 1;
 	UINT8 RelayControlState = 0;
+	UINT8 DischargeProtectState = 0;
+	UINT8 ChargeProtectState = 0;
+	BmsProtectStateDecode(&DischargeProtectState, &ChargeProtectState);
 	ChargePermitState = getbit((UartAnswerData.data[(0x1B + AppDataInfo.BattCellCount + AppDataInfo.BattTempCount + BMS_OTHER_TEMP) * 2 + 1]), 1);	  //充电允许状态,1-允许,0禁止
 	DischargePermitState = getbit((UartAnswerData.data[(0x1B + AppDataInfo.BattCellCount + AppDataInfo.BattTempCount + BMS_OTHER_TEMP) * 2 + 1]), 0); //放电允许状态,1-允许,0禁止
 	RelayControlState = getbit((UartAnswerData.data[(0x09 + AppDataInfo.BattCellCount + AppDataInfo.BattTempCount + BMS_OTHER_TEMP) * 2 + 1]), 0);	  //继电器状态,1-继电器断开,0-继电器吸合
@@ -374,7 +377,7 @@ void Uart_Cmd_Control(QueueHandle_t UartWriteCmdHandle, UartBuffer UartAnswerDat
 		UartWriteData.Data[1] = 0x00 | DischargePermitState;
 		osMessageQueuePut(UartWriteCmdHandle, &UartWriteData, 0, 10);
 	}
-	else if ((ChargeForbiddenControl == 0x00) && (ChargePermitState != 0x01)) //try to unlock lock the charge
+	else if ((ChargeForbiddenControl == 0x00) && (ChargePermitState != 0x01) && (ChargeProtectState == 0)) //try to unlock lock the charge,
 	{
 #ifdef USING_PRINTF1
 		printf("[%d]try to unlock charge \n", __LINE__);
@@ -391,7 +394,7 @@ void Uart_Cmd_Control(QueueHandle_t UartWriteCmdHandle, UartBuffer UartAnswerDat
 		UartWriteData.Data[1] = (ChargePermitState << 1) | 0x00;
 		osMessageQueuePut(UartWriteCmdHandle, &UartWriteData, 0, 10);
 	}
-	else if ((DisChargeForbiddenControl == 0) && (DischargePermitState) != 0x01) // try to unlock
+	else if ((DisChargeForbiddenControl == 0) && (DischargePermitState) != 0x01 && (DischargeProtectState == 0)) // try to unlock
 	{
 		UartWriteData.WriteCmd = 0x01;
 		UartWriteData.Data[0] = (RelayControlState << 7) | 0x00;

File diff suppressed because it is too large
+ 207 - 221
src/EmbeddedCoder_src/SFM.c


Some files were not shown because too many files changed in this diff