Files
CCU621M/app/meter_calculate/meter_calculate_impl.h
T

182 lines
8.3 KiB
C
Raw 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 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 */