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