#ifndef METER_CALCULATE_IMPL_H #define METER_CALCULATE_IMPL_H #ifdef __cplusplus /*C++编译环境下兼容C语言*/ extern "C" { #endif /*------ Exported includes(头文件) ----------------------*/ #include "main.h" #include "fault_cheak/fault_interface.h" /*------ Exported macro(宏定义) -------------------------*/ #define METER_MAX_ELE (9999999999) //电表最大支持电量 xxxxxx.xxxx kWh #define METER_PERIOD_MAX_ADDED_VAL (10000 * 10) //周期计算电量 最大增量 超过这个值 则认为是数据错误 #define EVS_MAX_TRADE_LEN (40 + 1) //订单流水号最大长度 #define Calculate_LOG(fmt, ...) \ MYLOG_MSG(TASK_ID_Meterfee,fmt, ##__VA_ARGS__) //任务打印 /*------ Exported struct(结构体定义) --------------------*/ typedef enum { E_METERLOG_GET_DATA_GUN_CNT = 0, //枪数量 E_METERLOG_GET_DATA_FEE_RATE_DATA, //费率电费信息 抢号代表时段位置 0-95;参数0代表充电费率 1代表放电费率 精度 0.0001元 E_METERLOG_GET_DATA_FEE_SERVER_DATA, //费率服务费信息 抢号代表时段位置 0-95;参数0代表充电费率 1代表放电费率 精度 0.0001元 E_METERLOG_GET_DATA_GUN_SOC, //当前soc值 E_METERLOG_GET_DATA_GUN_PUT_VOL, //当前充电电压 精度 0.1V E_METERLOG_GET_DATA_GUN_PUT_CUR, //当前充电电流 精度 0.1A E_METERLOG_GET_DATA_GUN_FLOW_STATE, //终端充电状态 0空闲 1充电启动 2绝缘启动 3绝缘计算完成 4绝缘检测模块停止 5开始预充 6预充完成 7充电中 8BMS通讯超时 9充电停止 10充电停止完成 }E_METERLOG_GET_DATA_TYPE; //启动原因 typedef enum { CTR_CMD_NONE = 0, //无动作 CTR_CMD_CARD_START, //离线卡 CTR_CMD_ONCARD_START, //在线卡 CTR_CMD_BS_START, //后台启动(tcu/积成)\扫码启动 CtR_CMD_VIN_START, //vin启动 CTR_CMD_DEBUG, //调试启动 }START_REASON; typedef enum //启动方式 { E_SDK_STTY_APP = 10, //10:app一键启动 E_SDK_STTY_VIN, //11:即插即充 E_SDK_STTY_BLUETOOTH, //12:蓝牙离线启动 E_SDK_STTY_QR, //13:二维码启动 E_SDK_STTY_PILE, //14:桩侧扫码启动(桩自带识别器) E_SDK_STTY_PLAT, //15:平台启动 E_SDK_STTY_BLE, //16: 蓝牙启动// E_SDK_STTY_VIN2, //17: 离线 VIN 即插即充 }E_SDK_START_TYPE; typedef enum /* 用户类型 */ { USER_TYPE_ONLINE_CARD = 0, //在线卡 USER_TYPE_APP, //APP用户 USER_TYPE_OFFLINE_CARD, //离线卡 USER_TYPE_VIN, //VIN USER_TYPE_WECHAT, //微信用户 USER_TYPE_ALIPAY, //支付宝 USER_TYPE_BAIDU, //百度用户 USER_TYPE_CAR_BRAND, //车牌,类似VIN USER_TYPE_LCD, //触摸屏按键启动 USER_TYPE_UNICOM, //互联互通用户 }USER_TYPE_E; typedef struct { START_REASON e_start_reason; //启动充电原因 E_SDK_START_TYPE e_sdk_startType; //启动方式 sdk订单上传使用 USER_TYPE_E e_user_type; //用户类型 --积成平台使用 U8_T u8_preTradeNo[EVS_MAX_TRADE_LEN]; //平台交易流水号:8位桩地址+2位枪号+12位时间+补0(ascii码后面补0,相当于结束符) U8_T u8_tradeNo[EVS_MAX_TRADE_LEN]; //设备交易流水号 U8_T u8_stop_cmd[4]; //停机码 4位 U8_T u8_user_id[32]; //用户标识 U8_T u8_vinCode[18]; //车辆vin U32_T u32_balance_begin; //启动充电前金额 0.0001元 }S_CHAR_LOG_START_DATA; //启动充电 赋值订单信息 typedef struct { U32_T u32_index; //订单索引,用于唯一标识和快速查找 START_REASON e_start_reason; //启动充电原因 E_FAULT_INFO e_stop_reason[NUM_5]; //停止原因 E_SDK_START_TYPE e_sdk_startType; //启动方式 sdk订单上传使用 USER_TYPE_E e_user_type; //用户类型 --积成平台使用 Comm_Time StartChargeTime; //开始充电时间 Comm_Time EndChargeTime; //停止充电时间 U8_T u8_gunNo; //充电枪编号 U8_T u8_charge_flag; //充电标志 是否进入到充电 U8_T u8_preTradeNo[EVS_MAX_TRADE_LEN]; //平台交易流水号:8位桩地址+2位枪号+12位时间+补0(ascii码后面补0,相当于结束符) U8_T u8_tradeNo[EVS_MAX_TRADE_LEN]; //设备交易流水号 U8_T u8_startSoc; //启动时SOC U8_T u8_endSoc; //结束时SOC U8_T u8_stop_cmd[4]; //停机码 4位 U8_T u8_user_id[32]; //用户标识 U8_T u8_vinCode[18]; //车辆vin U16_T u16_ChargedTime; //充电时间 min U32_T u32_balance_begin; //启动充电前金额 0.0001元 U32_T u32_used_money; //己充金额,单位是0.0001元 U32_T u32_used_service; //己充服务费,单位是0.0001元 U64_T u64_startKWh; //电表总起示值 单位是0.0001KWh U64_T u64_endKWh; //电表总止示值 单位是0.0001KWh U32_T u32_used_energy; //己用电量,单位是0.0001KWh U32_T u32_part_energy[FEE_MODEL_CNT]; //各时段使用电量,单位是0.0001KWh - 96个 }S_LOG_DATA; typedef enum { E_METERLOG_SET_LOG_INFO_u32_start_reason = 0, //启动充电原因 E_METERLOG_SET_LOG_INFO_u32_sdk_startType, //启动方式 sdk订单上传使用 E_METERLOG_SET_LOG_INFO_u32_user_type, //用户类型 --积成平台使用 E_METERLOG_SET_LOG_INFO_u32_balance_begin, //启动充电前金额 0.0001元 E_METERLOG_SET_LOG_INFO_char_vinCode, //车辆vin E_METERLOG_SET_LOG_INFO_char_user_id, //用户标识 E_METERLOG_SET_LOG_INFO_char_stop_cmd, //停机码 4位 E_METERLOG_SET_LOG_INFO_char_tradeNo, //设备交易流水号 E_METERLOG_SET_LOG_INFO_char_preTradeNo, //平台交易流水号: }E_METERLOG_SET_LOG_INFO_TYPE; typedef enum { E_METERLOG_PUT_LOG_INFO_USED_MONEY, //以充电费金额,精度0.0001元 E_METERLOG_PUT_LOG_INFO_USED_SERVICE, //以充服务费金额,精度0.0001元 E_METERLOG_PUT_LOG_INFO_USED_ENERGY, //以充电量,精度0.0001kWh E_METERLOG_PUT_LOG_INFO_START_TYPE, //启动充电方式 START_REASON E_METERLOG_PUT_LOG_INFO_USER_ID, //用户ID E_METERLOG_PUT_LOG_INFO_CHAR_TIME, //充电时长 单位分钟 }E_METERLOG_PUT_LOG_INFO_TYPE; typedef enum { E_METER_DATA_POWER = 0, //电表采集电量值 精度 0.0001 E_METER_DATA_VOL, //电表采集电压值 精度 0.0001 E_METER_DATA_CUR, //电表采集电流值 精度 0.0001 }E_METER_DATA_TYPE; /*------ Exported variables(变量定义) -------------------*/ /*------ Exported function prototypes (函数声明) -------*/ U64_T u64_meterlog_get_meter_data(U8_T u8_gunNo ,U8_T u8_type); U32_T u32_meterlog_get_sys_data(U8_T u8_gunNo , E_METERLOG_GET_DATA_TYPE e_dataType , U16_T u16_dataPara); U64_T u64_get_meter_data(U8_T u8_gunNo ,U8_T u8_id , E_METER_DATA_TYPE e_type); void v_meterlog_put_char_log_data(U8_T u8_gunNo,S_LOG_DATA *s_log); void v_meterlog_set_char_log_info(U8_T u8_gunNo, E_METERLOG_SET_LOG_INFO_TYPE e_type , U32_T *u32_data, U8_T *u8_str); void v_meterlog_set_start_char_log_info(U8_T u8_gunNo,S_CHAR_LOG_START_DATA *s_log_start_data); void v_meterlog_set_stop_char_log_info(U8_T u8_gunNo,E_FAULT_INFO e_stop_reason); void v_set_plat_log_flag(U8_T u8_gunNo); void v_meterlog_set_fault(U8_T u8_gunNo, U8_T u8_flag,U8_T u8_fault_flag,U16_T u16_data1,U16_T u16_data2); U32_T u32_meterlog_put_data(U8_T u8_gunNo,E_METERLOG_PUT_LOG_INFO_TYPE e_typeData,U8_T *u8_str , U16_T u16_len); U32_T u32_meterlog_next_cycle_money(U8_T u8_gunNo); void v_meterlog_flash_save_log(U8_T u8_flag , U8_T u8_gunNo); /** 上电后从 EEPROM 临时记录恢复未完成订单到 RAM(掉电续传) */ void v_meterlog_restore_temp_from_eeprom(void); U8_T u8_platform_settlement_confirm(U32_T orderIndex); U8_T u8_check_order_settlement_status(U32_T orderIndex); #ifdef __cplusplus } #endif #endif /* METER_CALCULATE_IMPL_H */