9ceb218f80
Co-authored-by: Cursor <cursoragent@cursor.com>
182 lines
8.3 KiB
C
182 lines
8.3 KiB
C
|
||
#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 */
|