Files
CCU621M/app/bms/bms_interface.h
T

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 */