Files

248 lines
9.8 KiB
C
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
#ifndef BMS_TASK_H
#define BMS_TASK_H
#ifdef __cplusplus /*C++¼C*/
extern "C" {
#endif
/*------ Exported includes(ͷļ) ----------------------*/
#include "main.h"
#include "bms/bms_interface.h"
#include "bms/sae1939.h"
/*------ Exported macro() -------------------------*/
// BMS֡
#define GB_BMS_ADDR 0xF4
#define GB_CHARGER_ADDR 0x56
#define GB_BMS_PGN_CHM 0x002600
#define GB_BMS_PGN_BHM 0x002700
#define GB_BMS_PGN_CRM 0x000100
#define GB_BMS_PGN_BRM 0x000200
#define GB_BMS_PGN_BCP 0x000600
#define GB_BMS_PGN_CTS 0x000700
#define GB_BMS_PGN_CML 0x000800
#define GB_BMS_PGN_BRO 0x000900
#define GB_BMS_PGN_CRO 0x000A00
#define GB_BMS_PGN_BCL 0x001000
#define GB_BMS_PGN_BCS 0x001100
#define GB_BMS_PGN_CCS 0x001200
#define GB_BMS_PGN_BSM 0x001300
#define GB_BMS_PGN_BMV 0x001500
#define GB_BMS_PGN_BMT 0x001600
#define GB_BMS_PGN_BSP 0x001700
#define GB_BMS_PGN_BST 0x001900
#define GB_BMS_PGN_CST 0x001A00
#define GB_BMS_PGN_BSD 0x001C00
#define GB_BMS_PGN_CSD 0x001D00
#define GB_BMS_PGN_BEM 0x001E00
#define GB_BMS_PGN_CEM 0x001F00
#define GB_BRM_TIMEOUT_FLAG 0x01 //bit0:BRMijʱ
#define GB_BCP_TIMEOUT_FLAG 0x02 //bit1:BCPijʱ
#define GB_BRO_TIMEOUT_FLAG 0x04 //bit2:BROijʱ
#define GB_BCS_TIMEOUT_FLAG 0x08 //bit3:BCSijʱ
#define GB_BCL_TIMEOUT_FLAG 0x10 //bit4:BCLijʱ
#define GB_BST_TIMEOUT_FLAG 0x20 //bit5:BSTijʱ
#define GB_BSD_TIMEOUT_FLAG 0x40 //bit6:BSDijʱ
//ʱʱ -- ʱʹã
#define BMS_TIM_10MS (1*1)
#define BMS_TIM_50MS (5*1+1)
#define BMS_TIM_250MS (29*1)
#define BMS_TIM_500MS (50*1)
#define BMS_TIM_1S ((100+11+29)*1) //͵һcem Ҫ250ms
#define BMS_TIM_5S ((500+22+135)*1)
#define BMS_TIM_10S ((1000+12+250)*1)
#define BMS_TIM_60S ((6000+12+1498)*1)
/*------ Exported struct() --------------------*/
//BMSڶʱ־
typedef struct
{
U8_T cnt50ms; //50ms
U8_T cnt250ms; //250ms
U8_T cnt500ms; //500ms
U16_T u16_global_timerCnt; //ʱʱ,ʱ,ʱ£յĿ0
U16_T u16_bcl_timerCnt; //׶ͬʱж֡Ľӳʱʱbsmʹglobal
U16_T u16_bro_timerCnt; //׶Σglobal¼bro_aa60sʱøñ¼bro5볬ʱ
}T_BMS_TIM;
typedef enum
{
cnt50ms = 0,
cnt250ms,
cnt500ms,
cnt_global,
cnt_bcl, //BSD״̬
cnt_bro_aa,
}E_BMS_TIM;
typedef enum
{
GB_BMS_STOP=0, //ֹͣ
GB_BMS_HANDSHAKE_TX_CHM, //׶ΣͳCHMȴճBHM
//GB_BMS_HANDSHAKE_RX_BHM_OK, //׶ΣͳCHMѽճֳɹBHMϵͳԵȴʼֱʶCRM
GB_BMS_HANDSHAKE_TX_CRM_00, //ֱʶ׶ΣCRM_00ȴBMSͳʶBRM
GB_BMS_HANDSHAKE_TX_CRM_AA, //ֱʶ׶ΣյBMSͳʶBRMCRM_AAȴյسBCP
GB_BMS_CFG_TX_CTS_CML, //ý׶ΣյسBCPCTSCMLȴBMSɳ׼BRO
GB_BMS_CFG_RX_BRO_AA, //ý׶ΣյسBRO_00CTSCMLȴBMSɳ׼BRO_AA
GB_BMS_CFG_TX_CRO_00, //ý׶ΣBMSɳ׼BRO_AAͳ׼ɱCRO_00ȴCRO-AA
GB_BMS_CFG_TX_CRO_AA, //ý׶ΣBMSɳ׼BROͳ׼ɱCRO_AAȴյܳ״̬BCS/سBCL
//GB_BMS_CHARGE_RX_BCL, //׶Σյܳ״̬BCSȴյسBCL
GB_BMS_CHARGE_STAGE, //׶ΣCCSѽձBCSBCLBST/BSM(Ƿ쳣)/BMV/BMT/BSP(ѡ)
GB_BMS_CHARGE_TX_CST, //׶ΣͳֹCSTȴBMSֹBSTBMSͳƱBSD
GB_BMS_FINISH_RX_BSD, //׶ΣյBSDͳֹCSD
//GB_BMS_FINISH_RX_BSD_OK, //׶ΣյBSD
//GB_BMS_FINISH_TX_CSD, //׶ΣͳͳƱCSD
GB_BMS_TX_CEM, //ʹ
}GB_BMS_STATE_E;
/* BMS״̬ */
typedef enum
{
BMS_STATE_NONE=0, //ͨţBMSͳƱݲ
BMS_STATE_HANDSHAKE_START_OK, //
BMS_STATE_HANDSHAKE_FAIL, //ʧ
BMS_STATE_PRECHARGE, //Ԥ
BMS_STATE_CHARGING, //
BMS_STATE_BSM_FORBID, //УBSMʾֹ
BMS_STATE_STOP, //ֹͣУCST
BMS_STATE_TIMEOUT, //ijʱ(CEM/BEM)
BMS_STATE_ERR, //ݴ
}BMS_STATE_E;
typedef enum
{
E_BMS_STOP_NULL =0,
E_BMS_STOP_1000 = 1000,
E_BMS_STOP_1001 = 1001,
E_BMS_STOP_1011 = 1011,
E_BMS_STOP_15000 = 15000,
E_BMS_STOP_15001,
E_BMS_STOP_15002,
E_BMS_STOP_15003,
E_BMS_STOP_15004,
E_BMS_STOP_15005,
E_BMS_STOP_15006,
E_BMS_STOP_15007,
E_BMS_STOP_15008,
E_BMS_STOP_15009,
E_BMS_STOP_15010,
E_BMS_STOP_15011,
E_BMS_STOP_15012,
E_BMS_STOP_15013,
E_BMS_STOP_15014,
E_BMS_STOP_15015,
E_BMS_STOP_15016,
E_BMS_STOP_15017,
E_BMS_STOP_15018,
E_BMS_STOP_15019,
E_BMS_STOP_15020,
E_BMS_STOP_15021,
E_BMS_STOP_15022,
E_BMS_STOP_15023,
E_BMS_STOP_15024,
E_BMS_STOP_15025,
E_BMS_STOP_15026,
E_BMS_STOP_15027,
E_BMS_STOP_15028,
E_BMS_STOP_15029,
E_BMS_STOP_15030,
E_BMS_STOP_15031,
}E_BMS_STOP_INFO;
//BMSЭ
typedef enum
{
BMS_2011=0, //2011BMSЭ
BMS_2015, //2015BMSЭ
BMS_2023, //2023BMSЭ
BMS_PLC, //CANתPLC
}BMS_STANDARD_E;
/* BMSʵʱ */
typedef struct
{
GB_BMS_STATE_E e_state; //BMS״̬
BMS_STATE_E e_real_state; // bmsʵʱ״̬ //BMS״̬
E_BMS_STOP_INFO e_stop_info; //bmsֹͣԭ
BMS_STANDARD_E e_bms_standard; //BMS汾Э 2011 2015
U8_T u8_reconn_flag; //ǣϣ1ʼ
U8_T u8_cst_send_cnt; //cstʹ
U8_T u8_csd_send_cnt; //csdʹ
U8_T u8_cem_send_cnt; //cemʹ
U8_T u8_bms_rx_flag[BMS_RECV_TYPE_NUM]; //bmsѽձʶ01 //0bhm 1brm 2bcp 3bro 4bcs 5bcl 6bsm 7bmv 8bmt 9bst 10bsd 11bem
U16_T u16_timeout_flag; //ձijʱ CEM
U16_T u16_stoptimeflag ; //SC1ֹͣͱ־
//=============================BMSʵ==============================
BMS_BHM_DATA_T t_bhm_data;
BMS_BRM_DATA_T t_brm_data;
BMS_BCP_DATA_T t_bcp_data;
BMS_BSD_DATA_T t_bsd_data;
BMS_BCL_DATA_T t_bcl_data;
BMS_BCS_DATA_T t_bcs_data;
BMS_BSM_DATA_T t_bsm_data;
BMS_BMV_DATA_T t_bmv_data; //δʹ
BMS_BMT_DATA_T t_bmt_data; //δʹ
BMS_BEM_DATA_U t_bem_data;
BMS_CEM_DATA_U t_cem_data;
BMS_BST_DATA_U t_bst_data;
BMS_CST_DATA_U t_cst_data;
}S_BMS_RT_DATA;
typedef struct
{
CAN_DATA_T pt_msg; //ձĴ洢
DLL_DATA_T pt_dll; //SAE̿
}S_GB_BMS_CAN;
typedef struct
{
U8_T u8_gunCnt; //ǹ
U8_T u8_gb_enable; //ʹ
U8_T u8_gun_type[GUN_MAX_CNT]; //ǹ 1
#if CAN_PLC_FLAG //ŷ CANתPLCʹ
U8_T u8_gun_linkState[GUN_MAX_CNT]; //ӱ־ 0δǹ 1Ѳǹ
#endif
T_BMS_TIM t_bms_tim[GUN_MAX_CNT]; //bmsڶʱ־
S_GB_BMS_CAN s_gb_bms_can[GUN_MAX_CNT]; //BMS CANͽսӿ
S_BMS_RT_DATA s_bms_rt_data[GUN_MAX_CNT]; //BMSʵʱ
}S_BMS_DATA;
/*------ Exported variables() -------------------*/
/*------ Exported function prototypes -------*/
void v_bms_task(void *arg);
#ifdef __cplusplus
}
#endif
#endif /* BMS_TASK_H */