9ceb218f80
Co-authored-by: Cursor <cursoragent@cursor.com>
369 lines
16 KiB
C
369 lines
16 KiB
C
|
|
#ifndef BMS_INTERFACE_H
|
|
#define BMS_INTERFACE_H
|
|
|
|
#ifdef __cplusplus /*C++编译环境下兼容C语言*/
|
|
extern "C" {
|
|
#endif
|
|
|
|
/*------ Exported includes(头文件) ----------------------*/
|
|
#include "main.h"
|
|
|
|
/*------ Exported macro(宏定义) -------------------------*/
|
|
|
|
/*------ Exported struct(结构体定义) --------------------*/
|
|
//BMS接收数据类型 0bhm 1brm 2bcp 3bro 4bcs 5bcl 6bsm 7bmv 8bmt 9bst 10bsd 11bem
|
|
typedef enum
|
|
{
|
|
E_BMS_TYPE_BHM = 0,
|
|
E_BMS_TYPE_BRM,
|
|
E_BMS_TYPE_BCP,
|
|
E_BMS_TYPE_BRO,
|
|
E_BMS_TYPE_BCS,
|
|
E_BMS_TYPE_BCL,
|
|
E_BMS_TYPE_BSM,
|
|
E_BMS_TYPE_BMV,
|
|
E_BMS_TYPE_BMT,
|
|
E_BMS_TYPE_BST,
|
|
E_BMS_TYPE_BSD,
|
|
E_BMS_TYPE_BEM,
|
|
BMS_RECV_TYPE_NUM,//BMS接收数据类型数量
|
|
}E_BSM_CAR_DATA_TYPE;
|
|
|
|
//BMS_BHM报文数据结构体
|
|
typedef struct
|
|
{
|
|
F32_T f32_max_charge_volt; //最高允许充电总电压
|
|
|
|
#if CAN_PLC_FLAG //欧标 CAN转PLC使能
|
|
U8_T u8_CR_Plc_Aagvalue; // 信号衰减值
|
|
U8_T u8_CR_Plc_CpStatus; // CP状态 0:12v未插枪;1:9v已插枪;2:9v占空比状态;3:6v占空比准备充电状态
|
|
U8_T u8_CR_Plc_CommStart; // 通信启动 0:通信未启动;1:启动PLC通信
|
|
U8_T u8_SECC_ver[10]; //SECC固件版本编译日期-年月日
|
|
#endif
|
|
}BMS_BHM_DATA_T;
|
|
//BMS_BRM报文数据结构体
|
|
typedef struct
|
|
{
|
|
//握手辨识BRM
|
|
U32_T u32_bms_version; //BMS通信协议版本,例如版本V1.0,表示为0x000100
|
|
U8_T u8_batt_type; //电池类型,01H,铅酸电池;02H:镍氢电池;03H:磷酸铁锂电池;04H:锰酸锂电池;05H:钴酸锂电池;
|
|
//06H:三元材料电池;07H:聚合物锂离子电池;08H;钛酸锂电池;FFH:其他电池
|
|
F32_T f32_batt_rated_c10; //整车动力蓄电池系统额定容量,数据范围0~1000A.h,精度0.1
|
|
F32_T f32_batt_rated_volt; //整车动力蓄电池系统额定总电压,数据范围0~750V,精度0.1
|
|
U8_T u8_batt_vender[4]; //电池生产厂商,标准ASCII
|
|
U32_T u32_batt_serial; //电池组序号
|
|
U8_T u8_batt_make[4]; //电池生产年月日
|
|
U32_T u32_batt_charge_times; //BMS电池组充电次数
|
|
U8_T u8_batt_belong; //电池产权标识
|
|
U8_T u8_Bms_edition; //充电机通信协议版本号 5A 2015+团标协议 FF 国标协议
|
|
|
|
U8_T u8_car_vin[18]; //车辆识别码VIN
|
|
U8_T u8_bms_soft_version[8]; //BMS软件版本号
|
|
|
|
}BMS_BRM_DATA_T;
|
|
|
|
//BMS_BCP报文数据结构体
|
|
typedef struct
|
|
{
|
|
F32_T f32_cell_charge_max_volt; //单体动力蓄电池最高允许充电电压,数据范围0~24V,精度0.01
|
|
F32_T f32_batt_charge_max_curr; //最高允许充电电流,数据范围0~400A,精度0.1
|
|
F32_T f32_batt_rated_enery; //动力蓄电池标称总能量,数据范围0~1000kW.h,精度0.1
|
|
F32_T f32_batt_charge_max_volt; //最高允许充电总电压,数据范围0~750V,精度0.1,此变量用于判断电压超出最高允许充电电压
|
|
S16_T s16_batt_allow_max_temp; //最高允许动力蓄电池温度,数据范围-50度~200度
|
|
F32_T f32_batt_start_soc; //整车动力蓄电池荷电状态(SOC),数据范围0~100%,精度0.1,这个SOC是充电开始时的SOC
|
|
F32_T f32_batt_volt; //整车动力蓄当前电池总电压,数据范围0~750V,精度0.1
|
|
|
|
#if CAN_PLC_FLAG //欧标 CAN转PLC使能
|
|
U8_T u8_CR_Plc_EvTransferType; //电动车传输协议能量类型 默认0x03,支持的能量传输类型
|
|
#endif
|
|
}BMS_BCP_DATA_T;
|
|
|
|
//BMS_BSD报文数据结构体
|
|
typedef struct
|
|
{
|
|
U8_T u8_batt_end_soc; //BMS终止荷电状态SOC
|
|
F32_T f32_cell_batt_min_volt; //BMS动力蓄电池单体最低电压
|
|
F32_T f32_cell_batt_max_volt; //BMS动力蓄电池单体最高电压
|
|
U8_T u8_batt_min_temp; //BMS动力蓄电池最低温度
|
|
U8_T u8_batt_max_temp; //BMS动力蓄电池最高温度
|
|
|
|
#if CAN_PLC_FLAG //欧标 CAN转PLC使能
|
|
U8_T u8_CF_Plc_WeldDetectionReq; //粘连检测要求 0:无焊接检测1:焊接检测请求(发送CSD当前充电枪电压)
|
|
#endif
|
|
}BMS_BSD_DATA_T;
|
|
|
|
//BMS_BCL报文数据结构体
|
|
typedef struct
|
|
{
|
|
F32_T f32_batt_need_volt; //电压需求,数据范围0~750V,精度0.1
|
|
F32_T f32_batt_need_curr; //电流需求,数据范围0~400V,精度0.1
|
|
U8_T u8_charge_mode; //充电模式,0x01:恒压充电;0x02:恒流充电
|
|
#if CAN_PLC_FLAG //欧标 CAN转PLC使能
|
|
F32_T f32_batt_charge_max_volt; //欧标车辆充电中最高允许电压在BCL中
|
|
U8_T u8_preCharge; //预充电状态 1:预充电状态: 0:无预充电状态
|
|
#endif
|
|
}BMS_BCL_DATA_T;
|
|
|
|
//BMS_BCS报文数据结构体
|
|
typedef struct
|
|
{
|
|
F32_T f32_charge_volt; //充电电压测量值,数据范围0~750V,精度0.1
|
|
F32_T f32_charge_curr; //充电电流测量值,数据范围0~400A,精度0.1
|
|
F32_T f32_cell_max_volt; //最高单体动力蓄电池电压,数据范围0~24V,精度0.01
|
|
U8_T u8_cell_max_volt[2];
|
|
U8_T u8_cell_max_volt_group_num; //最高单体动力蓄电池电压所在组号,范围1~16
|
|
U8_T u8_batt_soc; //当前荷电状态,数据范围0~100%
|
|
U16_T u16_remain_charge_time; //估算剩余充电时间,数据范围0~600min
|
|
}BMS_BCS_DATA_T;
|
|
|
|
//BMS_BMV报文数据结构体
|
|
typedef struct
|
|
{
|
|
// 1-12位:单体动力蓄电池电压,数据分辨率:0.01 V/位,0 V偏移量;数据范围:0~24 V;
|
|
// 13-16位:电池分组号,数据分辨率:1/位,0偏移量;数据范围:0~15。
|
|
union
|
|
{
|
|
U16_T u16_data;
|
|
struct
|
|
{
|
|
U16_T bit_cell_volt:12; //单体电压
|
|
U16_T bit_cell_group_numt:4; //单体电池组号
|
|
}s_bit;
|
|
}u_data[NUM_256];
|
|
}BMS_BMV_DATA_T;
|
|
|
|
//BMS_BMT报文数据结构体
|
|
typedef struct
|
|
{
|
|
U8_T u8_batt_temp[NUM_128]; //动力蓄电池温度,数据范围-50度~200度 原始数据存储
|
|
}BMS_BMT_DATA_T;
|
|
//BMS_BSM报文数据结构体
|
|
typedef struct
|
|
{
|
|
U8_T u8_cell_max_volt_id; //最高单体动力蓄电池电压所在编号,数据范围1~256
|
|
S16_T s16_batt_max_temp; //最高动力蓄电池温度,数据范围-50度~200度
|
|
U8_T u8_max_temp_id; //最高温度检测点编号,数据范围1~128
|
|
S16_T s16_batt_min_temp; //最低动力蓄电池温度,数据范围-50度~200度
|
|
U8_T u8_min_temp_id; //最低温度检测点编号,数据范围1~128
|
|
U16_T u16_batt_state; //电池状态
|
|
//bit0:单体动力蓄电池电压过高
|
|
//bit1:单体动力蓄电池电压过低
|
|
//bit2:整车动力蓄电池荷电状态SOC过高
|
|
//bit3:整车动力蓄电池荷电状态SOC过低
|
|
//bit4:动力蓄电池充电过流
|
|
//bit5:动力蓄电池温度过高
|
|
//bit6:动力蓄电池绝缘状态不正常
|
|
//bit7:动力蓄电池组输出连接器连接状态不正常
|
|
//bit8:充电允许,0:禁止,1:允许
|
|
}BMS_BSM_DATA_T;
|
|
|
|
//BMS_BEM报文数据联合体
|
|
typedef union
|
|
{
|
|
#if CAN_PLC_FLAG //欧标 CAN转PLC使能
|
|
U8_T u8_bem_data[8];
|
|
struct
|
|
{
|
|
U8_T RECV_CRM_00_TMO:2; //接收CRM=00超时
|
|
U8_T RECV_CRM_AA_TMO:2; //接收CRM=AA超时
|
|
U8_T reserve1:4; //保留1
|
|
U8_T RECV_CML_TMO:2; //接收CML超时
|
|
U8_T RECV_CRO_AA_TMO:2; //接收CRO=AA超时
|
|
U8_T reserve2:4; //保留2
|
|
U8_T RECV_CCS_TMO:2; //接收CCS超时
|
|
U8_T RECV_CST_TMO:2; //接收CTS超时
|
|
U8_T reserve3:4; //保留3
|
|
U8_T RECV_CSD_TMO:2; //接收CSD超时
|
|
U8_T reserve4:6; //保留3
|
|
|
|
U8_T Message_Sequence:8; //通信流程消息序列
|
|
U8_T CR_Plc_ErrorCodeII:8; //错误代码II 见附录
|
|
U8_T CR_Plc_ErrorCode:8; //错误代码 见附录
|
|
U8_T ErrorCode_CPorPP_state:3; //CP或PP状态的错误代码 见附录
|
|
U8_T CR_PLc_EvErrCode:4; //EV车辆发送的错误代码 见附录
|
|
U8_T reserve5:1; //预留位
|
|
}BEM_TMO_FLAG;
|
|
#else
|
|
U8_T u8_bem_data[4];
|
|
struct
|
|
{
|
|
U8_T RECV_CRM_00_TMO:2; //接收CRM=00超时
|
|
U8_T RECV_CRM_AA_TMO:2; //接收CRM=AA超时
|
|
U8_T reserve1:4; //保留1
|
|
U8_T RECV_CML_TMO:2; //接收CML超时
|
|
U8_T RECV_CRO_AA_TMO:2; //接收CRO=AA超时
|
|
U8_T reserve2:4; //保留2
|
|
U8_T RECV_CCS_TMO:2; //接收CCS超时
|
|
U8_T RECV_CST_TMO:2; //接收CTS超时
|
|
U8_T reserve3:4; //保留3
|
|
U8_T RECV_CSD_TMO:2; //接收CSD超时
|
|
U8_T reserve4:6; //保留3
|
|
}BEM_TMO_FLAG;
|
|
#endif
|
|
}BMS_BEM_DATA_U;
|
|
|
|
//BMS_CEM报文数据联合体
|
|
typedef union
|
|
{
|
|
U8_T u8_cem_data[4];
|
|
struct
|
|
{
|
|
U8_T RECV_BRM_TMO:2; //接收RRM超时
|
|
U8_T reserve1:6; //保留1
|
|
U8_T RECV_BCP_TMO:2; //接收BCP超时
|
|
U8_T RECV_BRO_AA_TMO:2; //接收BRO=AA超时
|
|
U8_T reserve2:4; //保留2
|
|
U8_T RECV_BCS_TMO:2; //接收BCS超时
|
|
U8_T RECV_BCL_TMO:2; //接收BCL超时
|
|
U8_T RECV_BST_TMO:2; //接收BTS超时
|
|
U8_T reserve3:2; //保留3
|
|
U8_T RECV_BSD_TMO:2; //接收BSD超时
|
|
U8_T reserve4:6; //保留3
|
|
}CEM_TMO_FLAG;
|
|
|
|
}BMS_CEM_DATA_U;
|
|
|
|
//BMS_BST报文数据联合体
|
|
typedef union
|
|
{
|
|
#if CAN_PLC_FLAG //欧标 CAN转PLC使能
|
|
U8_T u8_bst_data[8];
|
|
struct
|
|
{
|
|
U8_T ACHIEVE_AIM_SOC:2; //达到目标SOC
|
|
U8_T ACHIEVE_VOLT:2; //接收总电压设定值
|
|
U8_T ACHIEVE_CELL_VOLT:2; //达到单体电压设定值
|
|
U8_T CHARGER_STOP:2; //充电机主动终止
|
|
U8_T INSU_FAULT:2; //绝缘故障
|
|
U8_T DC_OUT_OVER_TEMP:2; //输出连接器过温故障
|
|
U8_T BMS_OVER_TEMP:2; //BMS元件、输出连接器过温故障
|
|
U8_T CONNECT_FAULT:2; //充电连接器故障
|
|
U8_T BATT_OVER_TEMP:2; //电池组温度过高故障
|
|
U8_T HV_RELAYS_FAULT:2; //高压继电器故障
|
|
U8_T CONN_CHECK_TWO_FAULT:2; //检测点2电压检测故障
|
|
U8_T OTHER_FAULT:2; //其它故障
|
|
U8_T OVER_CURR:2; //电流过大
|
|
U8_T OVER_VOLT:2; //电压过大
|
|
U8_T reserve:2; //预留位
|
|
U8_T CF_Plc_FullChgComplete:1; //车充电是否完成 0:未满1:完全充电完成
|
|
U8_T CF_Plc_ChgFinished:1; //桩充电状态 0:充电,1:充电停止请求
|
|
|
|
U8_T Message_Sequence:8; //通信流程消息序列
|
|
U8_T CR_Plc_ErrorCodeII:8; //错误代码II 见附录
|
|
U8_T CR_Plc_ErrorCode:8; //错误代码 见附录
|
|
U8_T ErrorCode_CPorPP_state:3; //CP或PP状态的错误代码 见附录
|
|
U8_T CR_PLc_EvErrCode:4; //EV车辆发送的错误代码 见附录
|
|
U8_T reserve2:1; //预留位
|
|
}BST_TMO_FLAG;
|
|
#else
|
|
U8_T u8_bst_data[4];
|
|
struct
|
|
{
|
|
U8_T ACHIEVE_AIM_SOC:2; //达到目标SOC
|
|
U8_T ACHIEVE_VOLT:2; //接收总电压设定值
|
|
U8_T ACHIEVE_CELL_VOLT:2; //达到单体电压设定值
|
|
U8_T CHARGER_STOP:2; //充电机主动终止
|
|
U8_T INSU_FAULT:2; //绝缘故障
|
|
U8_T DC_OUT_OVER_TEMP:2; //输出连接器过温故障
|
|
U8_T BMS_OVER_TEMP:2; //BMS元件、输出连接器过温故障
|
|
U8_T CONNECT_FAULT:2; //充电连接器故障
|
|
U8_T BATT_OVER_TEMP:2; //电池组温度过高故障
|
|
U8_T HV_RELAYS_FAULT:2; //高压继电器故障
|
|
U8_T CONN_CHECK_TWO_FAULT:2; //检测点2电压检测故障
|
|
U8_T OTHER_FAULT:2; //其它故障
|
|
U8_T OVER_CURR:2; //电流过大
|
|
U8_T OVER_VOLT:2; //电压过大
|
|
U8_T reserve:4; //预留位
|
|
|
|
}BST_TMO_FLAG;
|
|
#endif
|
|
}BMS_BST_DATA_U;
|
|
|
|
//BMS_CST报文数据联合体
|
|
typedef union
|
|
{
|
|
U8_T u8_cst_data[4];
|
|
struct
|
|
{
|
|
U8_T PILE_NORMAL_STOP:2; //达到充电机设定的条件中止
|
|
U8_T MAN_MADE_STOP:2; //人工中止
|
|
U8_T FAULT_STOP:2; //故障中止
|
|
U8_T BMS_STOP:2; //BMS主动中止
|
|
U8_T PILE_TEMP_OVER:2; //充电机过温故障
|
|
U8_T PILE_CONNET_FAULT:2; //充电连接器故障
|
|
U8_T PILE_TEMP_CVER2:2; //充电机内部过温故障
|
|
U8_T NOT_NEOUGH_ENERGY:2; //所需电量不能传送
|
|
U8_T EMERGENCY_STOP:2; //充电机急停故障
|
|
U8_T OTHER:2; //其他故障
|
|
U8_T reserve:4; //预留位
|
|
U8_T OVER_CURR:2; //电流过大
|
|
U8_T OVER_VOLT:2; //电压过大
|
|
U8_T reserve1:4; //预留位
|
|
}CST_TMO_FLAG;
|
|
|
|
}BMS_CST_DATA_U;
|
|
|
|
typedef enum
|
|
{
|
|
E_BMS_GET_PARA_GUN_CNT=0, //枪数量
|
|
E_BMS_GET_PARA_GB_EN, //国标使能
|
|
E_BMS_GET_PARA_SC_EN, //团标使能
|
|
E_BMS_GET_PARA_MAX_VOL, //最大电压 精度0.1
|
|
E_BMS_GET_PARA_MIN_VOL, //最小电压 精度0.1
|
|
E_BMS_GET_PARA_MAX_CUR, //最大电流 精度0.1
|
|
E_BMS_GET_PARA_MIN_CUR, //最小电流 精度0.1
|
|
|
|
E_BMS_GET_GUN_OUT_VOL, //输出电压 精度0.1
|
|
E_BMS_GET_GUN_OUT_CUR, //输出电流 精度0.1
|
|
E_BMS_GET_GUN_CHR_TIME, //充电时长 单位min
|
|
E_BMS_GET_GUN_CHR_POWER, //充电电量 单位0.1 kWh
|
|
|
|
E_BMS_GET_GUN_FIOW_CTRL, //BMS充电状态 0无意义 1空闲 2开始握手 3绝缘完成,开始握手辨识 4预充完成,发送cro_aa 5充电停止 发送cst 6停止充电完成 停止发送CSD 7BMS通讯超时
|
|
E_BMS_GET_GUN_FLOW_RENEW, //获取重连标识
|
|
E_BMS_CLEAR_GUN_FLOW_RENEW, //清空重连标识
|
|
}E_BMS_GET_PARA_TYPE;
|
|
|
|
typedef enum
|
|
{
|
|
E_BMS_PUT_DATA_BMS_GB_VER =0, //BMS 国标协议版本 0 2011版 1 2015版
|
|
E_BMS_PUT_DATA_BMS_STATE, //BMS 获取BMS状态 0无 1握手完成 2握手失败 3开始预充 4开始充电 5禁止充电 6停止充电 7报文接收超时
|
|
E_BMS_PUT_DATA_BMS_MAX_VOL, //BMS 最大充电电压值 精度 0.1V
|
|
E_BMS_PUT_DATA_BMS_MAX_CUR, //BMS 最大充电电流值 精度 0.1A
|
|
E_BMS_PUT_DATA_BMS_REAL_BATT_VOL, //BMS 当前电池电压值 精度 0.1V
|
|
E_BMS_PUT_DATA_BMS_NEED_VOL, //BMS 需求电压值 精度 0.1V
|
|
E_BMS_PUT_DATA_BMS_NEED_CUR, //BMS 需求电流值 精度 0.1A
|
|
E_BMS_PUT_DATA_BMS_CAN_SEND_CNT, //BMS 报文发送次数 参数值 0代表cem 1代表csd
|
|
E_BMS_PUT_DATA_BMS_STOP_RES, //BMS 停止原因 详看E_FAULT_INFO枚举内容 BMS部分
|
|
E_BMS_PUT_DATA_BMS_RECONN_FLAG, //BMS 重连标志 0不重连 1重连
|
|
|
|
E_BMS_PUT_DATA_GUN_SOC, //BMS SOC %
|
|
E_BMS_PUT_DATA_GUN_ONE_BATT_MAX_TEMP, //单体电池最大温度 度
|
|
E_BMS_PUT_DATA_GUN_ONE_BATT_MAX_VOL, //单体电池最大电压 0.1V
|
|
E_BMS_PUT_DATA_GUN_BATT_TYPE, //电池类型 01H,铅酸电池;02H:镍氢电池;03H:磷酸铁锂电池;04H:锰酸锂电池;05H:钴酸锂电池;
|
|
E_BMS_PUT_DATA_GUN_BATT_RATED_C10, //整车动力蓄电池系统额定容量,数据范围0~1000A.h,精度0.1
|
|
}E_BMS_PUT_DATA_TYPE;
|
|
|
|
/*------ Exported variables(变量定义) -------------------*/
|
|
|
|
/*------ Exported function prototypes (函数声明) -------*/
|
|
void v_bms_add_timer(void);
|
|
void v_delay_set_tymer_val(void);
|
|
|
|
U16_T u16_bms_get_sys_para(U8_T gunNo , E_BMS_GET_PARA_TYPE e_type);
|
|
U16_T u16_bms_put_data(U8_T gunNo , E_BMS_PUT_DATA_TYPE e_type,U8_T u8_dataPara);
|
|
void v_bms_put_vin_str(U8_T u8_gunNo,U8_T *u8_vin,U8_T u8_len);
|
|
|
|
void v_bms_get_rt_time(Comm_Time *time);
|
|
U8_T u8_bms_get_cst(U8_T gunNo,U8_T *u8_data);
|
|
void v_bms_get_pile_nun(U8_T *pilenum);
|
|
|
|
#if CAN_PLC_FLAG //欧标 CAN转PLC使能
|
|
U8_T u8_bms_get_gunLink(U8_T gunNo); //can 转PLC 获取枪连接状态
|
|
#endif
|
|
#ifdef __cplusplus
|
|
}
|
|
#endif
|
|
|
|
#endif /* BMS_INTERFACE_H */
|