Initial commit: CCU621_M firmware project with BLE debug link support.
Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
File diff suppressed because it is too large
Load Diff
@@ -0,0 +1,213 @@
|
||||
|
||||
#ifndef UI_COMM_IMPL_H
|
||||
#define UI_COMM_IMPL_H
|
||||
|
||||
#ifdef __cplusplus /*C++编译环境下兼容C语言*/
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
/*------ Exported includes(头文件) ----------------------*/
|
||||
#include "main.h"
|
||||
#include "usart.h"
|
||||
#include "publicdata/type.h"
|
||||
/*------ Exported macro(宏定义) -------------------------*/
|
||||
#if SYSTEM_TYPE == SYSTEM_TYPE_CCU601E_D
|
||||
#define UI_COM_ID E_USART_9 /* [CCU601E_D] USART9 */
|
||||
#elif SYSTEM_TYPE == SYSTEM_TYPE_CCU621_M
|
||||
#define UI_COM_ID E_USART_5 /* [CCU621_M] USART5 */
|
||||
#else
|
||||
#define UI_COM_ID E_USART_9 /* 默认 USART9 */
|
||||
#endif
|
||||
#define UI_RX_BUF_SIZE NUM_128 //UI接收数据缓存区
|
||||
|
||||
#define UI_OUTTIME (20) //通信超时时间
|
||||
#define UI_STATE_TIMEOUT (120) //状态超时时间 单位秒
|
||||
#define UI_UPDATE_TIMEOUT (60*20) //系统升级状态超时时间 单位秒
|
||||
#define UI_SEND_SLEEP (2)
|
||||
/*------ Exported struct(结构体定义) --------------------*/
|
||||
// 数量宏:与 UI_SYSTEM_PARAM_T 字段数量保持一致(UI_SYSTEM_PARAM_T 定义在 ui_comm_impl.c 内部)
|
||||
#define UI_SYSTEM_PARAM_COUNT (14u) // 系统参数数量
|
||||
#define UI_PILE_PROTECT_PARAM_COUNT (11u) // 充电桩保护参数数量
|
||||
#define UI_NETWORK_PARAM_COUNT (21u) // 网络参数数量
|
||||
#define UI_MODULE_PARAM_COUNT (5u) // 充电模块参数数量
|
||||
#define UI_RESERVE_PARAM_COUNT (12u) // 预留参数数量
|
||||
|
||||
// union 内部用 u16_data/u8_data 作为通用 buffer,只需覆盖“单个类型”的最大字段数
|
||||
#define UI_PARAM_MAX_COUNT (UI_NETWORK_PARAM_COUNT)
|
||||
|
||||
// 参数类型枚举
|
||||
typedef enum
|
||||
{
|
||||
E_UI_PARAM_TYPE_INVALID = 0, // 无效参数类型
|
||||
E_UI_PARAM_TYPE_SYSTEM, //系统参数
|
||||
E_UI_PARAM_TYPE_PILE_PROTECT,//充电桩保护参数
|
||||
E_UI_PARAM_TYPE_NETWORK, //网络参数
|
||||
E_UI_PARAM_TYPE_MODULE, //模块参数
|
||||
E_UI_PARAM_TYPE_RESERVE, //预留参数
|
||||
E_UI_PARAM_TYPE_OTHER,
|
||||
//其他参数类型...
|
||||
} E_UI_PARAM_TYPE_T;
|
||||
// ========================= Basic parameter(系统基础参数) =========================
|
||||
// 系统参数(UI页面:系统参数配置)
|
||||
typedef struct
|
||||
{
|
||||
U16_T number_of_guns; // 0x0200 Number of guns
|
||||
U16_T pile_type; // 0x0201 Pile type
|
||||
|
||||
U16_T terminal_address_1; // 0x0202 Terminal address 1
|
||||
U16_T terminal_address_2; // 0x0203 Terminal address 2
|
||||
|
||||
U16_T gun_type_1; // 0x0204 Gun type 1
|
||||
U16_T gun_type_2; // 0x0205 Gun type 2
|
||||
|
||||
U16_T light_panel_type; // 0x0206 Light panel type
|
||||
U16_T lcd_enable; // 0x0207 LCD Enable
|
||||
|
||||
U16_T system_time_zone; // 0x0208 System Time Zone
|
||||
U16_T language_type; // 0x0209 Language type
|
||||
|
||||
U16_T liquid_cooling_enable; // 0x020A Liquid cooling enable
|
||||
U16_T host_comm_type; // 0x020B Host comm type
|
||||
|
||||
U16_T screensaver_enable; // 0x020C Screensaver Enable
|
||||
U16_T card_type; // 0x020D Card type
|
||||
} UI_SYSTEM_PARAM_T;
|
||||
// ========================= Charging pile protection parameter(充电桩保护参数) =========================
|
||||
// 充电桩保护参数(UI页面:Charging pile protection parameter)
|
||||
typedef struct
|
||||
{
|
||||
U16_T min_out_vol; // 0x0220 Min out vol (0.1V)
|
||||
U16_T max_out_vol; // 0x0221 Max out vol (0.1V)
|
||||
U16_T max_out_cur; // 0x0222 Max out cur (0.1A)
|
||||
U16_T pile_rated_power; // 0x0223 Pile rated power (0.1kW)
|
||||
|
||||
U16_T fan_start_temp; // 0x0224 Fan start temp (0.1°C)
|
||||
U16_T fan_stop_temp; // 0x0225 Fan stop temp (0.1°C)
|
||||
|
||||
U16_T gun_temp_thresh; // 0x0226 Gun temp thresh (0.1°C)
|
||||
U16_T pile_temp_thresh; // 0x0227 Pile temp thresh (0.1°C)
|
||||
|
||||
U16_T gun1_power_limit; // 0x0228 Gun 1 power limit (0.1kW)
|
||||
U16_T gun2_power_limit; // 0x0229 Gun 2 power limit (0.1kW)
|
||||
|
||||
U16_T soc_thresh; // 0x022A SOC thresh (0.1%)
|
||||
} UI_PILE_PROTECT_PARAM_T;
|
||||
// ========================= Network parameter(网络参数) =========================
|
||||
// 网络参数(如:本地IP、网关、MAC、APN、平台网络配置等)
|
||||
typedef struct
|
||||
{
|
||||
// Local IP: A.B.C.D
|
||||
U16_T local_ip_1; //0x0240 Local IP byte1
|
||||
U16_T local_ip_2; //0x0241 Local IP byte2
|
||||
U16_T local_ip_3; //0x0242 Local IP byte3
|
||||
U16_T local_ip_4; //0x0243 Local IP byte4
|
||||
|
||||
// Gateway: A.B.C.D
|
||||
U16_T gateway_ip_1; //0x0244 Gateway IP byte1
|
||||
U16_T gateway_ip_2; //0x0245 Gateway IP byte2
|
||||
U16_T gateway_ip_3; //0x0246 Gateway IP byte3
|
||||
U16_T gateway_ip_4; //0x0247 Gateway IP byte4
|
||||
|
||||
// MAC address: 6 bytes
|
||||
U16_T mac_addr_1; //0x0248 MAC byte1
|
||||
U16_T mac_addr_2; //0x0249 MAC byte2
|
||||
U16_T mac_addr_3; //0x024A MAC byte3
|
||||
U16_T mac_addr_4; //0x024B MAC byte4
|
||||
U16_T mac_addr_5; //0x024C MAC byte5
|
||||
U16_T mac_addr_6; //0x024D MAC byte6
|
||||
|
||||
// APN type
|
||||
U16_T apn_type; //0x024E APN type
|
||||
|
||||
// Platform 1
|
||||
U16_T plat1_enable; //0x024F Platform1 enable
|
||||
U16_T plat1_net_type; //0x0250 Platform1 network type
|
||||
U16_T plat1_plat_type; //0x0251 Platform1 platform type
|
||||
|
||||
// Platform 2
|
||||
U16_T plat2_enable; //0x0252 Platform2 enable
|
||||
U16_T plat2_net_type; //0x0253 Platform2 network type
|
||||
U16_T plat2_plat_type; //0x0254 Platform2 platform type
|
||||
} UI_NET_PARAM_T;
|
||||
|
||||
// 充电模块参数(UI页面:Module parameter)
|
||||
// 地址从 0x0260 开始(共 5 个)
|
||||
typedef struct
|
||||
{
|
||||
U16_T module_rated_power; // 0x0260 Module rated power (0.1kW)
|
||||
U16_T module_rated_volt; // 0x0261 Module rated voltage (0.1V)
|
||||
U16_T module_rated_cur; // 0x0262 Module rated current (0.1A)
|
||||
U16_T module_count; // 0x0263 Module count
|
||||
U16_T module_type; // 0x0264 Module type
|
||||
} UI_MODULE_PARAM_T;
|
||||
|
||||
// 预留参数(UI页面:Reserve parameter)
|
||||
// 地址从 0x0280 开始,共 12 个 U16_T,全部默认 0
|
||||
typedef struct
|
||||
{
|
||||
U16_T reserve_1; // 0x0280
|
||||
U16_T reserve_2; // 0x0281
|
||||
U16_T reserve_3; // 0x0282
|
||||
U16_T reserve_4; // 0x0283
|
||||
U16_T reserve_5; // 0x0284
|
||||
U16_T reserve_6; // 0x0285
|
||||
U16_T reserve_7; // 0x0286
|
||||
U16_T reserve_8; // 0x0287
|
||||
U16_T reserve_9; // 0x0288
|
||||
U16_T reserve_10; // 0x0289
|
||||
U16_T reserve_11; // 0x028A
|
||||
U16_T reserve_12; // 0x028B
|
||||
} UI_RESERVE_PARAM_T;
|
||||
|
||||
// 参数结构体
|
||||
typedef struct
|
||||
{
|
||||
E_UI_PARAM_TYPE_T e_ui_param_type; // 参数类型
|
||||
union
|
||||
{
|
||||
U16_T u16_data[UI_PARAM_MAX_COUNT];
|
||||
U8_T u8_data[UI_PARAM_MAX_COUNT * 2];
|
||||
UI_SYSTEM_PARAM_T s_ui_system_param;
|
||||
UI_PILE_PROTECT_PARAM_T s_ui_pile_protect_param;
|
||||
UI_NET_PARAM_T s_ui_net_param;
|
||||
UI_MODULE_PARAM_T s_ui_module_param;
|
||||
UI_RESERVE_PARAM_T s_ui_reserve_param;
|
||||
} s_ui_param_union; // 参数联合体
|
||||
|
||||
} UI_PARAM_T;
|
||||
/*------ Exported variables(变量定义) -------------------*/
|
||||
extern UI_PARAM_T s_ui_param;
|
||||
/*------ Exported function prototypes (函数声明) -------*/
|
||||
U16_T u16_ui_recv_data(U8_T *u8_recvBuf ,U16_T u16_len);
|
||||
|
||||
void v_ui_read_id_reg(void) ;
|
||||
void v_ui_id_change(U16_T id);
|
||||
|
||||
void v_set_recv_data(U16_T u16_addr , U32_T u32_data) ;
|
||||
void v_set_recv_str_data(U16_T u16_addr , U8_T *u8_str , U8_T u8_str_len) ;
|
||||
void v_ui_ctrl_var_clear(void) ;
|
||||
|
||||
// 配置参数写入(Basic parameter + Charging pile protection parameter)
|
||||
void v_ui_param_set_value(U16_T u16_addr, U32_T u32_data);
|
||||
void v_ui_set_param_type(E_UI_PARAM_TYPE_T e_type);
|
||||
U8_T u8_ui_save_param(E_UI_PARAM_TYPE_T e_type);
|
||||
|
||||
|
||||
void v_wr_var_data(U16_T addr,U16_T data);
|
||||
void v_wr_32var_data(U16_T addr,U32_T data) ;
|
||||
void v_show_AnimationIcon(U16_T addr, U16_T value) ;
|
||||
void v_wr_var_datas(U16_T addr, U8_T* data_buf, U8_T u8_len);
|
||||
void v_disp_text_clear(U16_T addr);
|
||||
void v_disp_string_handler(U16_T addr,U8_T* p_str,U8_T str_len);
|
||||
|
||||
void v_ui_char_real_info(U8_T u8_gunNo);
|
||||
void v_ui_char_batt_info(U8_T u8_gunNo);
|
||||
void v_ui_char_log_info(U8_T u8_gunNo);
|
||||
void v_ui_standby_char_real_info(U8_T u8_gunNo);
|
||||
void v_ui_fault_info_show(void);
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
||||
#endif /* UI_COMM_IMPL_H */
|
||||
@@ -0,0 +1,369 @@
|
||||
#include "ui_info.h"
|
||||
|
||||
//迪文屏幕 仅支持GB2312格式的中文显示 因此特地保留本文件编码格式为GB2312 用于向屏幕发送中文信息
|
||||
|
||||
// const char p_null[] = "无";
|
||||
// const char p_no_fault[] = "无故障";
|
||||
// const char p_no_waring[] = "无告警";
|
||||
// const char prompt[] = "请输入正确的充电密码!";
|
||||
// const char p_free_mag[] = "费率";
|
||||
// const char p_mag[] = "主板复归计数:";
|
||||
|
||||
//Пожалуйста, подождите !
|
||||
//Please wait !
|
||||
const char p_wait_mag[] = "Please wait !";
|
||||
const char c_wait_mag[] = "请等待!!!";
|
||||
//Время ожидания считывания карты истекло!
|
||||
//Card swipe timeout !
|
||||
const char p_card_timeout_mag[] = "Card swipe timeout !";
|
||||
const char c_card_timeout_mag[] = "刷卡超时!!!";
|
||||
|
||||
#if 0
|
||||
const static S_FAULT_INFO ui_fault_info[] =
|
||||
{
|
||||
|
||||
//常规停止代码
|
||||
{E_NORMAL_1000, "充满停止"},
|
||||
{E_NORMAL_1001, "本地停止充电"},
|
||||
{E_NORMAL_1002, "后台停止充电"},
|
||||
{E_NORMAL_1003, "达到设置充电时长停止"},
|
||||
{E_NORMAL_1004, "达到设置充电电量停止"},
|
||||
{E_NORMAL_1005, "达到设置充电金额停止"},
|
||||
{E_NORMAL_1006, "达到离线停机条件"},
|
||||
{E_NORMAL_1007, "达到SOC终止条件停止"},
|
||||
{E_NORMAL_1008, "用户拔枪停止"},
|
||||
{E_NORMAL_1009, "APP停止充电"},
|
||||
// {E_NORMAL_1010, "车端S2主动断开"},
|
||||
{E_NORMAL_1011, "BMS停止充电"},
|
||||
{E_NORMAL_1012, "账户余额不足"},
|
||||
{E_NORMAL_1013, "预付金额不足"},
|
||||
// {E_NORMAL_1014, "车辆S2闭合超时"},
|
||||
//{E_NORMAL_1015, "充电中车辆S2断开超时"},
|
||||
{E_NORMAL_1016, "达到涓流充电停机条件"},
|
||||
|
||||
//直流充电设备异常代码
|
||||
{E_FAULT_13000, "交流输入断路器故障"},
|
||||
{E_FAULT_13001, "避雷器故障"},
|
||||
{E_FAULT_13002, "交流输入接触器粘连故障"},
|
||||
{E_FAULT_13003, "交流输入接触器拒动/误动故障"},
|
||||
{E_FAULT_13004, "直流输出接触器粘连故障"},
|
||||
{E_FAULT_13005, "直流输出接触器拒动/误动故障"},
|
||||
{E_FAULT_13006, "直流输出熔断器故障"},
|
||||
{E_FAULT_13007, "辅助电源故障"},
|
||||
{E_FAULT_13008, "泄放继电器拒动/误动故障"},
|
||||
{E_FAULT_13009, "泄放继电器粘连"},
|
||||
{E_FAULT_13010, "充电枪电子锁上锁故障"},
|
||||
{E_FAULT_13011, "充电枪电子锁解锁故障"},
|
||||
// {E_FAULT_13012, "PE 断线故障"},
|
||||
{E_FAULT_13013, "充电接口过温故障"},
|
||||
{E_FAULT_13014, "充电接口过温告警"},
|
||||
{E_FAULT_13015, "控制导引电压异常"},
|
||||
{E_FAULT_13016, "充电中车辆控制导引故障"},
|
||||
{E_FAULT_13017, "急停"},
|
||||
{E_FAULT_13018, "门禁"},
|
||||
{E_FAULT_13019, "充电机柜门禁故障"},
|
||||
{E_FAULT_13020, "功率控制模块故障"},
|
||||
{E_FAULT_13021, "功率控制模块告警"},
|
||||
{E_FAULT_13022, "功率控制模块通信故障"},
|
||||
{E_FAULT_13023, "桥接接触器拒动/误动故障"},
|
||||
{E_FAULT_13024, "桥接接触器粘连故障"},
|
||||
|
||||
// {E_FAULT_13025, "ESAM 故障"},
|
||||
{E_FAULT_13026, "液冷油温过高"},
|
||||
// {E_FAULT_13027, "充电桩过温故障( 可选)"},
|
||||
// {E_FAULT_13028, "充电桩过温告警( 可选)"},
|
||||
// {E_FAULT_13029, "充电机柜过温告警"},
|
||||
// {E_FAULT_13030, "充电机柜过温故障"},
|
||||
{E_FAULT_13031, "液冷报警"},
|
||||
{E_FAULT_13032, "烟感报警"},
|
||||
{E_FAULT_13033, "充电桩水浸故障"},
|
||||
// {E_FAULT_13034, "充电机柜水浸故障"},
|
||||
{E_FAULT_13035, "充电机环境湿度告警"},
|
||||
// {E_FAULT_13036, "数据合法性校验失败"},
|
||||
// {E_FAULT_13037, "充电控制器 版本校验 未完成"},
|
||||
// {E_FAULT_13038, "充电控制器 下发充电参数 未完成"},
|
||||
// {E_FAULT_13039, "充电桩暂停服务, 拒绝启动"},
|
||||
{E_FAULT_13040, "上次充电完成未拔枪"},
|
||||
// {E_FAULT_13041, "充电桩与车辆处于未连接状态,拒绝启动"},
|
||||
{E_FAULT_13042, "绝缘监测故障"},
|
||||
{E_FAULT_13043, "绝缘监测告警"},
|
||||
// {E_FAULT_13044, "充电桩执行功率分配策略失败故障"},
|
||||
// {E_FAULT_13045, "预留( 输入电压过压故障)"},
|
||||
// {E_FAULT_13046, "预留( 输入电压欠压故障)"},
|
||||
{E_FAULT_13047, "泄放回路故障"},
|
||||
{E_FAULT_13048, "直流输出电压过压故障"},
|
||||
{E_FAULT_13049, "直流输出电流过流故障"},
|
||||
{E_FAULT_13050, "直流输出电压欠压故障"},
|
||||
// {E_FAULT_13051, "无空闲模块可用( 限智能分配功率)"},
|
||||
// {E_FAULT_13052, "电池反接故障"},
|
||||
{E_FAULT_13053, "预充阶段调压失败"},
|
||||
{E_FAULT_13054, "输出电流大于车辆需求电流"},
|
||||
{E_FAULT_13055, "充电过程中功率控制器为非工作状态"},
|
||||
{E_FAULT_13056, "电能计量异常"},
|
||||
{E_FAULT_13057, "车辆鉴权码不一致"},
|
||||
// {E_FAULT_13058, "未上送交易记录已满"},
|
||||
// {E_FAULT_13059, "交易记录存储失败"},
|
||||
// {E_FAULT_13060, "CAN 通讯版本校验异常"},
|
||||
// {E_FAULT_13061, "进程运行异常"},
|
||||
// {E_FAULT_13062, "程序文件校验失败"},
|
||||
// {E_FAULT_13063, "程序文件损坏"},
|
||||
{E_FAULT_13064, "非法 VIN"},
|
||||
// {E_FAULT_13065, "非即插即充设备"},
|
||||
// {E_FAULT_13066, "充电桩处于“暂停” 状态( 27930中的暂停状态)"},
|
||||
{E_FAULT_13067, "即插即充鉴权失败"},
|
||||
// {E_FAULT_13068, "充电桩充电中暂停超时( 27930中的暂停充电)"},
|
||||
{E_FAULT_13069, "充电控制器通讯超时"},
|
||||
{E_FAULT_13070, "读卡器通讯超时"},
|
||||
{E_FAULT_13071, "电表通讯超时"},
|
||||
{E_FAULT_13072, "两枪同充一车模式下充电控制器间通信超时"},
|
||||
{E_FAULT_13074, "液冷通讯超时"},
|
||||
// {E_FAULT_13073, "异常掉电"},
|
||||
// {E_FAULT_13074, "预留"},
|
||||
{E_FAULT_13075, "功率控制器间通讯超时"},
|
||||
// {E_FAULT_13076, "功率控制器接收遥控、 遥信报文超时故障"},
|
||||
// {E_FAULT_13077, "功率控制器与环境信息采集模块通讯超时"},
|
||||
// {E_FAULT_13078, "车辆识别数据帧接收超时"},
|
||||
// {E_FAULT_13079, "充电启动命令应答超时"},
|
||||
// {E_FAULT_13080, "等待充电启动完成状态超时"},
|
||||
// {E_FAULT_13081, "充电停止命令应答超时"},
|
||||
// {E_FAULT_13082, "等待充电停止完成状态超时"},
|
||||
// {E_FAULT_13083, "充电启动完成状态确认超时"},
|
||||
// {E_FAULT_13084, "功率调节指令应答超时"},
|
||||
// {E_FAULT_13085, "充电停止完成状态确认超时"},
|
||||
// {E_FAULT_13086, "充电控制器间并枪时通信异常"},
|
||||
// {E_FAULT_13087, "功率控制器地址冲突"},
|
||||
// {E_FAULT_13088, "充电控制器地址冲突"},
|
||||
{E_FAULT_13089, "人机通信异常"},
|
||||
// {E_FAULT_13090, "设备自检超时故障"},
|
||||
// {E_FAULT_13091, "内部通讯故障"},
|
||||
// {E_FAULT_13092, "车位锁故障"},
|
||||
// {E_FAULT_13093, "车位锁电池耗尽故障"},
|
||||
// {E_FAULT_13094, "车位锁落锁失败故障"},
|
||||
// {E_FAULT_13095, "终止订单号异常"},
|
||||
{E_FAULT_13096, "开出盒通讯故障(DCU)"},
|
||||
// {E_FAULT_13097, "开入盒通讯故障"},
|
||||
// {E_FAULT_13098, "绝缘采样盒通讯故障"},
|
||||
{E_FAULT_13099, "AB板通讯故障"},
|
||||
// {E_FAULT_13100, "导引板通讯故障"},
|
||||
// {E_FAULT_13101, "灯板通讯告警"},
|
||||
// {E_FAULT_13102, "充电控制器未知停止原因"},
|
||||
{E_FAULT_13103, "辅助电源电压切换回路故障"},
|
||||
{E_FAULT_13104, "输出电流超过车辆最高允许电流"},
|
||||
// {E_FAULT_13105, "系统时钟异常"},
|
||||
// {E_FAULT_13106, "计费模型请求超时故障"},
|
||||
// {E_FAULT_13107, "计费模型不合法故障"},
|
||||
// {E_FAULT_13108, "对时超时故障"},
|
||||
// {E_FAULT_13109, "对时时间不合法故障"},
|
||||
|
||||
//直流充电电源异常代码
|
||||
{E_FAULT_14000, "开关模块故障"},
|
||||
{E_FAULT_14001, "开关模块告警"},
|
||||
{E_FAULT_14002, "开关模块通信故障"},
|
||||
{E_FAULT_14003, "开关模块拒动/误动故障"},
|
||||
{E_FAULT_14004, "开关模块粘连故障"},
|
||||
// {E_FAULT_14005, "预留(开关模块拒动/误动告警)"},
|
||||
// {E_FAULT_14006, "预留(开关模块粘连告警)"},
|
||||
{E_FAULT_14007, "充电模块故障"},
|
||||
// {E_FAULT_14008, "充电模块过温故障"},
|
||||
// {E_FAULT_14009, "充电模块过温告警"},
|
||||
// {E_FAULT_14010, "充电模块输出短路故障"},
|
||||
// {E_FAULT_14011, "充电模块输出过流告警"},
|
||||
// {E_FAULT_14012, "充电模块输出过压告警"},
|
||||
// {E_FAULT_14013, "充电模块输出欠压告警"},
|
||||
// {E_FAULT_14014, "充电模块交流输入告警"},
|
||||
// {E_FAULT_14015, "充电模块输入过压告警"},
|
||||
// {E_FAULT_14016, "充电模块输入欠压告警"},
|
||||
// {E_FAULT_14017, "充电模块输入缺相告警"},
|
||||
// {E_FAULT_14018, "充电模块输入不平衡告警"},
|
||||
{E_FAULT_14019, "充电模块通信故障"},
|
||||
{E_FAULT_14020, "充电模块启动失败"},
|
||||
{E_FAULT_14021, "充电模块关机失败"},
|
||||
// {E_FAULT_14022, "充电模块风扇故障"},
|
||||
// {E_FAULT_14023, "充电模块泄放故障"},
|
||||
// {E_FAULT_14024, "充电模块地址异常"},
|
||||
// {E_FAULT_14025, "PFC 电路过温故障"},
|
||||
// {E_FAULT_14026, "主变压器过温故障"},
|
||||
// {E_FAULT_14027, "DC/DC 电路过温故障"},
|
||||
// {E_FAULT_14028, "输出隔离二极管故障"},
|
||||
// {E_FAULT_14029, "模块启动故障(非保护动作造成的模块启动失败)"},
|
||||
// {E_FAULT_14030, "PFC 电路总故障"},
|
||||
// {E_FAULT_14031, "PFC 电路过压故障"},
|
||||
// {E_FAULT_14032, "PFC 电路偏压故障"},
|
||||
// {E_FAULT_14033, "DC/DC 电路总故障"},
|
||||
// {E_FAULT_14034, "高低压切换电路故障"},
|
||||
// {E_FAULT_14035, "输出电路不平衡故障"},
|
||||
// {E_FAULT_14036, "充电模块不输出告警"},
|
||||
//{E_FAULT_14037, "启动充电前直流输出接触器外侧电压大于充电机最大输出电压"}, 文字太长
|
||||
//{E_FAULT_14038, "启动充电前直流输出接触器外侧电压小于充电机最小输出电压"}, 文字太长
|
||||
|
||||
//直流充电车辆异常代码
|
||||
{E_FAULT_15000, "BMS 通讯故障"},
|
||||
{E_FAULT_15001, "直流充电控制模块判断BMS故障"},
|
||||
// {E_FAULT_15002, "BMS 发送故障信息"},
|
||||
{E_FAULT_15003, "BCP 充电参数配置报文超时"},
|
||||
{E_FAULT_15004, "BRO 充电准备就绪报文超时"},
|
||||
{E_FAULT_15005, "BCS 电池充电状态报文超时"},
|
||||
{E_FAULT_15006, "BCL 电池充电需求报文超时"},
|
||||
{E_FAULT_15007, "BST 中止充电报文超时"},
|
||||
{E_FAULT_15008, "BSM 动力蓄电池状态报文超时"},
|
||||
{E_FAULT_15009, "BRO 报文(0x00) 接收超时"},
|
||||
{E_FAULT_15010, "BRO 报文(0xAA) 接收超时"},
|
||||
{E_FAULT_15011, "BRM 车辆辨识报文超时"},
|
||||
// {E_FAULT_15012, "BSM 报文中单体动力蓄电池电压过高"},
|
||||
// {E_FAULT_15013, "BSM 报文中单体动力蓄电池电压过低"},
|
||||
// {E_FAULT_15014, "BSM 报文中 SOC 过高"},
|
||||
// {E_FAULT_15015, "BSM 报文中 SOC 过低"},
|
||||
// {E_FAULT_15016, "BSM 报文中充电过流"},
|
||||
// {E_FAULT_15017, "BSM 报文中动力蓄电池温度过高"},
|
||||
// {E_FAULT_15018, "BSM 报文中动力蓄电池绝缘状态异常"},
|
||||
// {E_FAULT_15019, "BSM 报文中连接器连接状态异"},
|
||||
// {E_FAULT_15020, "BRO 准备就绪后取消"},
|
||||
// {E_FAULT_15021, "BST 停止未知故障"},
|
||||
// {E_FAULT_15022, "BST 绝缘故障"},
|
||||
// {E_FAULT_15023, "BST 连接器过温"},
|
||||
// {E_FAULT_15024, "BST 元件、 输出连接器过温"},
|
||||
// {E_FAULT_15025, "BST 连接器故障"},
|
||||
// {E_FAULT_15026, "BST 电池组过温"},
|
||||
// {E_FAULT_15027, "BST 其他故障"},
|
||||
// {E_FAULT_15028, "BST 检测点 2 电压检测故障"},
|
||||
// {E_FAULT_15029, "BST 高压继电器故障"},
|
||||
// {E_FAULT_15030, "BST 电流过大"},
|
||||
// {E_FAULT_15031, "BST 电压异常"},
|
||||
// {E_FAULT_15032, "BRM 报文数据项异常"},
|
||||
// {E_FAULT_15033, "BCP 报文数据项异常"},
|
||||
{E_FAULT_15034, "绝缘监测前直流输出接触器外侧电压越限(60V)"},
|
||||
{E_FAULT_15035, "启动充电前直流输出接触器外侧电压与通信报文电池电压相差>±5%"},
|
||||
{E_FAULT_15036, "电池最高允许充电电压小于充电机最小输出电压"},
|
||||
{E_FAULT_15037, "输出电压大于车辆最高允许充电电压"},
|
||||
{E_FAULT_15038, "需求电流超过车辆最高允许充电电流"},
|
||||
{E_FAULT_15039, "需求电压超过车辆最高允许充电电压"},
|
||||
{E_FAULT_15040, "BCS 中最高单体电池电压超过BCP 中最高允许单体电池电压"},
|
||||
// {E_FAULT_15041, "BSM 中最高动力蓄电池温度超过BCP 中单体动力蓄电池最高允许温度"},
|
||||
{E_FAULT_15042, "SOC 达到上限值"},
|
||||
// {E_FAULT_15043, "BMS 通信协议版本不匹配"},
|
||||
{E_FAULT_15044, "输出电流大于最高允许充电电流"},
|
||||
{E_FAULT_15045, "电池端电压大于电池最高允许充电电压"},
|
||||
// {E_FAULT_15046, "SOC 达到 100 持续请求大电流(可选)"},
|
||||
};
|
||||
#endif
|
||||
|
||||
const char ui_flow_real_mag[][30] =
|
||||
{
|
||||
"空闲 ",
|
||||
"充电启动 ",
|
||||
"绝缘启动 ",
|
||||
"绝缘计算完成 ",
|
||||
"绝缘检测模块停止 ",
|
||||
"开始预充 ",
|
||||
"预充完成 ",
|
||||
"充电中 ",
|
||||
"BMS通讯超时 ",
|
||||
"充电停止 ",
|
||||
"充电停止完成 ",
|
||||
};
|
||||
const char ui_flow_real_mag_e[][60] =
|
||||
{
|
||||
"Idle ",
|
||||
"Charging Start ",
|
||||
"Insulation Start ",
|
||||
"Insulation Calc Done ",
|
||||
"Insulation Det Stop ",
|
||||
"Start Pre-charge ",
|
||||
"Pre-charge Complete ",
|
||||
"Charging ",
|
||||
"BMS Comm Timeout ",
|
||||
"Charging Stop ",
|
||||
"Charging Stop Done ",
|
||||
};
|
||||
|
||||
// const char ui_flow_real_mag_e[][60] =
|
||||
// {
|
||||
// "Ожидание ",
|
||||
// "Начало зарядки ",
|
||||
// "Начало изоляции ",
|
||||
// "Расчет изоляции завершен ",
|
||||
// "Изоляция. Остановите это ",
|
||||
// "Начало предзаряда ",
|
||||
// "Предзаряд завершен ",
|
||||
// "Зарядка ",
|
||||
// "Таймаут связи BMS ",
|
||||
// "Остановка зарядки ",
|
||||
// "Остановка зарядки завершена "
|
||||
// };
|
||||
|
||||
const char c_reat_str[][10] =
|
||||
{
|
||||
"无",
|
||||
"尖时段",
|
||||
"峰时段",
|
||||
"平时段",
|
||||
"谷时段",
|
||||
"深谷时段",
|
||||
"预留1",
|
||||
"预留2",
|
||||
"预留3",
|
||||
};
|
||||
|
||||
const char c_batt_type[][20] =
|
||||
{
|
||||
"无"
|
||||
"铅酸电池",
|
||||
"镍氢电池",
|
||||
"磷酸铁锂电池",
|
||||
"锰酸锂电池",
|
||||
"钴酸锂电池",
|
||||
};
|
||||
const char c_charge_status[][50] =
|
||||
{
|
||||
"Available", //空闲
|
||||
"Preparing", //准备中
|
||||
"Charging", //充电中
|
||||
"SuspendedEVSE", //充电暂停(充电桩原因)
|
||||
"SuspendedEV", //充电暂停(车辆原因)
|
||||
"Finishing", //结束充电
|
||||
"Reserved", //预留
|
||||
"Unavailable", //不可用
|
||||
"Faulted" //故障
|
||||
};
|
||||
|
||||
// const char c_charge_status[][50] =
|
||||
// {
|
||||
// "Доступно", //空闲
|
||||
// "Подготовка", //准备中
|
||||
// "Зарядка", //充电中
|
||||
// "Приостановлено EVSE", //充电暂停(充电桩原因)
|
||||
// "Приостановлено EV", //充电暂停(车辆原因)
|
||||
// "Завершение", //结束充电
|
||||
// "Зарезервировано", //预留
|
||||
// "Недоступно", //不可用
|
||||
// "Сбой", //故障
|
||||
// };
|
||||
|
||||
/****************************************************
|
||||
*函数名称: v_get_fault_info()
|
||||
*功能说明: 获取故障告警数据的 中文解析数据
|
||||
*参数说明:
|
||||
* 输入参数: E_FAULT_INFO e_info 告警数据 mag 返回值
|
||||
* 输出参数:
|
||||
****************************************************/
|
||||
void v_ui_get_fault_info(uint16_t e_info, char *mag)
|
||||
{
|
||||
uint8_t len;
|
||||
|
||||
// for(i=0;i<info_size;i++)
|
||||
// {
|
||||
// if(e_info == ui_fault_info[i].e_mag)
|
||||
// {
|
||||
// len = strlen(ui_fault_info[i].info);
|
||||
// memcpy(mag,ui_fault_info[i].info,len);
|
||||
// mag[len] = '\0';
|
||||
// flag = 1;
|
||||
// break;
|
||||
// }
|
||||
// }
|
||||
|
||||
len = (uint8_t)sprintf(mag, "%u", (unsigned)e_info);
|
||||
mag[len] = '\0';
|
||||
}
|
||||
|
||||
|
||||
@@ -0,0 +1,41 @@
|
||||
|
||||
#ifndef UI_INFO_H
|
||||
#define UI_INFO_H
|
||||
|
||||
#ifdef __cplusplus /*C++编译环境下兼容C语言*/
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
/*------ Exported includes(头文件) ----------------------*/
|
||||
#include "main.h"
|
||||
#include "flash_file_mgr/fault_flash_impl.h"
|
||||
/*------ Exported macro(宏定义) -------------------------*/
|
||||
|
||||
/*------ Exported struct(结构体定义) --------------------*/
|
||||
|
||||
/*------ Exported variables(变量定义) -------------------*/
|
||||
// extern const char p_null[];
|
||||
// extern const char p_no_fault[];
|
||||
// extern const char p_no_waring[];
|
||||
// extern const char prompt[];
|
||||
// extern const char p_free_mag[];
|
||||
// extern const char p_mag[];
|
||||
|
||||
extern const char ui_flow_real_mag[][30];
|
||||
extern const char ui_flow_real_mag_e[][60];
|
||||
extern const char c_reat_str[][10];
|
||||
extern const char c_batt_type[][20];
|
||||
extern const char c_charge_status[][50];
|
||||
extern const char p_wait_mag[];
|
||||
extern const char p_card_timeout_mag[];
|
||||
extern const char c_wait_mag[];
|
||||
extern const char c_card_timeout_mag[];
|
||||
/*------ Exported function prototypes (函数声明) -------*/
|
||||
|
||||
|
||||
void v_ui_get_fault_info(E_FAULT_INFO e_info , char *mag);
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
||||
#endif /* UI_INFO_H */
|
||||
File diff suppressed because it is too large
Load Diff
@@ -0,0 +1,115 @@
|
||||
|
||||
#ifndef UI_INTERFACE_H
|
||||
#define UI_INTERFACE_H
|
||||
|
||||
#ifdef __cplusplus /*C++编译环境下兼容C语言*/
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
/*------ Exported includes(头文件) ----------------------*/
|
||||
#include "main.h"
|
||||
#include "usart.h"
|
||||
#include "publicdata/type.h"
|
||||
#include "ui/ui_comm_impl.h"
|
||||
#include "meter_calculate\meter_calculate_impl.h"
|
||||
/*------ Exported macro(宏定义) -------------------------*/
|
||||
|
||||
|
||||
/*------ Exported struct(结构体定义) --------------------*/
|
||||
typedef enum
|
||||
{
|
||||
E_UI_GET_DATA_UI_EN = 0, //UI使能 0不使能 1使能
|
||||
E_UI_GET_DATA_SCREEN_SAVER_EN, //UI屏保界面显示使能 0不使能 1使能 2使能轮播
|
||||
E_UI_GET_DATA_GUN_CNT, //枪数量
|
||||
E_UI_GET_DATA_LALANGGUAGE_TYPE, //语言类型 0中文 1英文
|
||||
E_UI_GET_DATA_GUN_LINK, //枪连接状态 0未连接 1已连接;
|
||||
E_UI_GET_DATA_TIME_ZONE, //时区偏移量
|
||||
|
||||
E_UI_GET_DATA_BS_COMM_FLAG, //平台连接标志 0未连接 1已连接
|
||||
E_UI_GET_DATA_BS_UPDATE_FLAG, //获取远程升级标志
|
||||
E_UI_GET_DATA_FLOW_STAET, //充电流程控制状态 0空闲 1充电启动 2绝缘启动 3绝缘计算完成 4绝缘检测模块停止 5开始预充 6预充完成 7充电中 8BMS通讯超时 9充电停止 10充电停止完成
|
||||
E_UI_GET_DATA_CHAR_VOL, //充电电压 精度 0.1V
|
||||
E_UI_GET_DATA_CHAR_CUR, //充电电流 精度 0.1A
|
||||
E_UI_GET_DATA_CHAR_POWER_H2, //充电电量 高2字节 精度 0.0001 -- 65535
|
||||
E_UI_GET_DATA_CHAR_POWER_L2, //充电电量 底2字节 精度 0.0001 -- 65535
|
||||
E_UI_GET_DATA_CHAR_MONEY, //充电金额 0.01元
|
||||
E_UI_GET_DATA_CHAR_TIME, //充电时间 min
|
||||
E_UI_GET_DATA_CHAR_SOC, //充电soc %
|
||||
E_UI_GET_DATA_BAAT_TYPE, //电池类型 01H,铅酸电池;02H:镍氢电池;03H:磷酸铁锂电池;04H:锰酸锂电池;05H:钴酸锂电池;
|
||||
E_UI_GET_DATA_NEED_VOL, //需求电压 精度 0.1V
|
||||
E_UI_GET_DATA_NEED_CUR, //需求电流 精度 0.1A
|
||||
E_UI_GET_DATA_BATT_ONE_MAX_TEMP, //最高单体温度 度
|
||||
E_UI_GET_DATA_BATT_ONE_MAX_VOL, //最高单体电压 0.1V
|
||||
E_UI_GET_DATA_BATT_RATED_C10, //电池容量 0.1
|
||||
E_UI_GET_DATA_RATED_VOL, //额定电压 0.1
|
||||
E_UI_GET_DATA_MAX_OUT_CUR, //最大充电电流 0.1
|
||||
|
||||
E_UI_GET_DATA_STOP_INFO, //充电停止原因
|
||||
E_UI_GET_DATA_FAULT_NUM, //故障数量
|
||||
}E_UI_GET_DATA_TYPE;
|
||||
|
||||
typedef enum
|
||||
{
|
||||
E_UI_GET_STR_PILE_NO = 0, //桩编号 参数区分获取两平台桩编号信息
|
||||
E_UI_GET_STR_QRcode, //二维码
|
||||
E_UI_GET_STR_VERSION_INFO, //版本信息
|
||||
E_UI_GET_STR_MAINTENANCE_PWD, //维护密码
|
||||
E_UI_GET_STR_PILENO, //平台桩编号
|
||||
E_UI_GET_STR_DOMAIN, //平台服务器域名
|
||||
E_UI_GET_STR_QR, //二维码
|
||||
E_UI_GET_STR_APN, //apn
|
||||
E_UI_GET_STR_OCPP_AUTH_KEY, //OCPP鉴权密钥
|
||||
}E_UI_GET_STR_TYPE;
|
||||
|
||||
typedef enum
|
||||
{
|
||||
E_START_VIN = 0,
|
||||
E_START_CARD,
|
||||
E_START_DEBUG,
|
||||
}E_START_TYPE;
|
||||
|
||||
typedef enum
|
||||
{
|
||||
E_CHARGE_STATUS_AVAILABLE, //空闲
|
||||
E_CHARGE_STATUS_PREPARING, //准备中
|
||||
E_CHARGE_STATUS_CHARGING, //充电中
|
||||
E_CHARGE_STATUS_SUSPENDED_EVSE, //充电暂停(充电桩原因)
|
||||
E_CHARGE_STATUS_SUSPENDED_EV, //充电暂停(车辆原因)
|
||||
E_CHARGE_STATUS_FINISHING, //结束充电
|
||||
E_CHARGE_STATUS_RESERVED, //预留
|
||||
E_CHARGE_STATUS_UNAVAILABLE, //不可用
|
||||
E_CHARGE_STATUS_FAULTED //故障
|
||||
}E_CHARGE_STATUS;
|
||||
/*------ Exported variables(变量定义) -------------------*/
|
||||
|
||||
/*------ Exported function prototypes (函数声明) -------*/
|
||||
U16_T u16_ui_get_sys_data(U8_T u8_gunNo, E_UI_GET_DATA_TYPE e_dataType , U16_T u16_dataPara);
|
||||
U8_T u8_ui_get_sys_str(U8_T u8_gunNo, E_UI_GET_STR_TYPE e_dataType , U16_T u16_dataPara ,U8_T *u8_str , U16_T u16_len);
|
||||
U16_T u16_ui_get_his_fault_count(void);
|
||||
U8_T u8_ui_get_his_fault_line(U16_T newest_pos, U8_T *u8_str, U16_T u16_len);
|
||||
U16_T u16_ui_get_his_charge_count(void);
|
||||
U8_T u8_ui_get_his_charge_line(U16_T newest_pos, U8_T *u8_str, U16_T u16_len);
|
||||
|
||||
U8_T u8_ui_ctrl_charge(U8_T u8_gunNo,E_CMD e_cmd, E_START_TYPE e_type);
|
||||
void v_ui_set_comm_timeout(U8_T u8_flag);
|
||||
U8_T u8_ui_gun_work_state(U8_T u8_gunNo);
|
||||
START_REASON e_ui_get_charge_way(U8_T u8_gunNo);
|
||||
|
||||
void v_set_LCD_rtc(void); //设定液晶rtc时间
|
||||
E_CHARGE_STATUS e_ui_get_charge_status(U8_T u8_gunNo);
|
||||
|
||||
/** 非 UI 任务调用:请求界面回到待机/空闲(如 flowctrl FREE 态在线鉴权失败);UI 任务内轮询清标志并跳转 */
|
||||
void v_ui_request_idle_screen_recover(void);
|
||||
|
||||
U32_T u32_ui_get_charge_power(U8_T u8_gunNo); //获取充电电量,单位0.0001kWh
|
||||
|
||||
void v_ui_param_init_by_type(E_UI_PARAM_TYPE_T e_type);
|
||||
void v_ui_param_save_by_type(E_UI_PARAM_TYPE_T e_type);
|
||||
void v_ui_para_str_update(U16_T u16_addr, U8_T *u8_str, U8_T u8_str_len);
|
||||
void v_ui_param_init(void);
|
||||
void v_ui_system_reboot(void);
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
||||
#endif /* UI_INTERFACE_H */
|
||||
+2087
File diff suppressed because it is too large
Load Diff
@@ -0,0 +1,286 @@
|
||||
|
||||
#ifndef UI_TASK_H
|
||||
#define UI_TASK_H
|
||||
|
||||
#ifdef __cplusplus /*C++编译环境下兼容C语言*/
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
/*------ Exported includes(头文件) ----------------------*/
|
||||
#include "main.h"
|
||||
#include "app_init/app_init.h"
|
||||
#include "mylog/mylog.h"
|
||||
#include "publicdata/publicdata.h"
|
||||
|
||||
|
||||
/*------ Exported macro(宏定义) -------------------------*/
|
||||
#define UITASK_TASK_ID (TASK_ID_UI)
|
||||
#define UI_LOG(fmt, ...) MYLOG_MSG(UITASK_TASK_ID, (fmt), ##__VA_ARGS__)
|
||||
|
||||
#define FRAME_HEAD_H 0x5A //帧头高字节
|
||||
#define FRAME_HEAD_L 0xA5 //帧头低字节
|
||||
|
||||
#define UI_WR_REG_CODE 0x80 //写控制寄存器
|
||||
#define UI_RD_REG_CODE 0x81 //读寄存器数据
|
||||
#define UI_WR_DATA_CODE 0x82 //写数据寄存器(字)
|
||||
#define UI_RD_DATA_CODE 0x83 //读数据寄存器(字)
|
||||
|
||||
#define UI_ID_ADDR 0x03 //存放图片的控制寄存器地址
|
||||
|
||||
#define UI_DATA_ADDR_MASK 0xFF00
|
||||
|
||||
//变量地址规划,0000H~6FFFH
|
||||
#define UI_TCH_ADDR 0x0000 //触控从0x0000开始
|
||||
#define UI_DIS_ADDR 0x0100 //只读变量(充电中实时信息等...)
|
||||
#define UI_CFG_ADDR 0x0200 //可读写变量(配置变量)
|
||||
#define UI_CODE_ADDR 0x0300 //图标变量
|
||||
#define UI_STR_ADDR 0x0400 //文本从0x0400开始
|
||||
#define UI_STR_ADDR_2 0x0500 //文本0x0500
|
||||
|
||||
//触控地址规划,0100H~01FFH
|
||||
#define UI_GUN_ID 0x0103 //抢号显示
|
||||
#define UI_CHARGE_DATA_ID 0x0103 //充电数据显示地址 -- 10B
|
||||
#define UI_CHARGE_POWER_ID 0x010C //充电电量 - 12D
|
||||
#define UI_CHARGE_MONEY_ID 0x0110 //总消费金额
|
||||
#define UI_CHARGE_TIME_ID 0x0112 //已充时间min
|
||||
#define UI_STANDBY_CHARGE_INFO_A_ID 0x0114 //待机充电信息显示
|
||||
#define UI_STANDBY_CHARGE_INFO_B_ID 0x011A //待机充电信息显示
|
||||
#define UI_BATT_DATA_ID 0x0129 //电池数据显示地址
|
||||
#define UI_HIS_ALARM_TOTAL_ID 0x012E //历史故障记录总数显示
|
||||
#define UI_HIS_CHARGE_TOTAL_ID 0x012F //历史充电记录总数显示
|
||||
#define UI_TIMER_ADDR 0x0135 //倒计时地址
|
||||
#define UI_TIMER_ADDR_2 0x0136 //倒计时地址
|
||||
#define UI_BATT_RATED_DATA_ID 0x0137 //电池容量信息
|
||||
|
||||
//配置变量地址规划,0200H~02FFH
|
||||
#define UI_CFG_ADDR_SYSTEM_PARAM 0x0200 //系统参数
|
||||
#define UI_CFG_ADDR_PROTECTION_PARAM 0x0220 //充电桩保护参数
|
||||
#define UI_CFG_ADDR_NETWORK_PARAM 0x0240 //网络参数
|
||||
#define UI_CFG_ADDR_MODULE_PARAM 0x0260 //模块参数
|
||||
#define UI_CFG_ADDR_RESERVE_PARAM 0x0280 //预留参数
|
||||
#define UI_CFG_ADDR_OTHER_PARAM 0x02A0 //其他参数
|
||||
|
||||
|
||||
//图标变量地址规划,0300H~03FFH
|
||||
#define UI_WIFI_FLAG 0x0300 //联网标识
|
||||
#define UI_ANIMATION_ICON 0x0310 //动画图标
|
||||
|
||||
//文本变量地址规划,0400H~
|
||||
#define UI_VERSION_INFO 0x0400 //主控版本显示地址
|
||||
#define UI_VERSION_INFO2 0x0440 //主控版本显示地址
|
||||
#define UI_CARD_SHOW_ID 0x04C0 //刷卡显示地址
|
||||
#define UI_START_STATE_ID 0x04D0 //启动状态显示地址
|
||||
#define UI_GUN_A_STATE_ID 0x0500 //A枪状态显示地址
|
||||
#define UI_GUN_B_STATE_ID 0x0520 //B枪状态显示地址
|
||||
|
||||
#define UI_PLATFORM1_PILE_NO 0x0540 //平台1桩编号参数 32字节 0x0540~0x055F
|
||||
#define UI_PLATFORM2_PILE_NO 0x0560 //平台2桩编号参数 32字节 0x0560~0x057F
|
||||
|
||||
#define UI_PLATFORM1_DOMAIN 0x0580 //平台1域名地址 64字节 0x0580~0x05BF
|
||||
#define UI_PLATFORM2_DOMAIN 0x05C0 //平台2域名地址 64字节 0x05C0~0x05FF
|
||||
|
||||
#define UI_STR_APN 0x0600 //0x0C00 apn1
|
||||
|
||||
#define UI_PILE_NO 0x0650 //桩编号
|
||||
#define UI_STR_R1 0x06A0 //OCPP鉴权密钥(AuthorizationKey)
|
||||
#define UI_STR_OCPP_AUTH_KEY UI_STR_R1
|
||||
#define UI_STR_R2 0x06C0 //0x06C0 预留3
|
||||
|
||||
#define UI_STOP_REASON_ID 0x0700 //停机原因
|
||||
#define UI_FAULT_INFO_ID 0x0800 //故障信息显示
|
||||
#define UI_PICTURE 0x0910 //左上角图片剪切赋值
|
||||
#define UI_QR_CODE_GUN_A 0x0A00 //二维码
|
||||
#define UI_QR_CODE_GUN_B 0x0B00
|
||||
|
||||
|
||||
|
||||
//历史告警界面显示地址:每页3条(文本)
|
||||
#define UI_HIS_ALARM_LINE1 0x0E00
|
||||
#define UI_HIS_ALARM_LINE2 0x0F00
|
||||
#define UI_HIS_ALARM_LINE3 0x1000
|
||||
|
||||
//历史充电记录界面显示地址:每页3条(文本)
|
||||
#define UI_HIS_CHARGE_LINE1 0x1100
|
||||
#define UI_HIS_CHARGE_LINE2 0x1200
|
||||
#define UI_HIS_CHARGE_LINE3 0x1300
|
||||
|
||||
#define UI_MAINTENANCE_PWD_ID 0x0420 //维护密码输入地址
|
||||
#define UI_ADMIN_PWD_ID 0x0430 //管理后台维护密码输入地址
|
||||
#define UI_PARAM_INIT_PWD_ID 0x0440 //参数初始化密码输入地址
|
||||
#define UI_SYSTEM_RESTART_PWD_ID 0x0450 //系统重启密码输入地址
|
||||
|
||||
#define UI_MAINTENANCE_PWD "123456" //维护密码
|
||||
#define UI_ADMIN_PWD "27930" //管理员密码
|
||||
|
||||
#define E_UI_PARAM_INIT_FLAG (0xF0) //参数初始化标志
|
||||
#define E_UI_SYSTEM_RESTART_FLAG (0xF1) //系统重启标志
|
||||
|
||||
/*------ Exported struct(结构体定义) --------------------*/
|
||||
typedef enum
|
||||
{
|
||||
E_UI_ID_NULL = 0,
|
||||
E_UI_ID_HOME_PAGE, //首页-待机界面
|
||||
E_UI_ID_STANDBY_TWIN_GUN_NO_WORK, //双枪待机界面
|
||||
E_UI_ID_STANDBY_TWIN_GUN_A_WORK, //A枪充电-双枪待机界面
|
||||
E_UI_ID_STANDBY_TWIN_GUN_B_WORK, //B枪充电-双枪待机界面
|
||||
E_UI_ID_STANDBY_TWIN_GUN_AB_WORK, //AB枪充电-双枪待机界面
|
||||
E_UI_ID_STANDBY_SINGLE_GUN_NO_WORK, //单枪待机界面
|
||||
E_UI_ID_STANDBY_SINGLE_GUN_WORK, //单枪充电-待机界面、
|
||||
|
||||
E_UI_ID_CHAR_METHOD_SELE, //充电方式选择界面
|
||||
E_UI_ID_GUN_NO_LINK, //枪未连接提示界面
|
||||
E_UI_ID_CHAR_STARTING_UP, //充电启动中界面
|
||||
E_UI_ID_CHAR_CARD, //充电刷卡等待界面
|
||||
|
||||
E_UI_ID_CHAR_IN_REAL_DATA, //充电中实时信息
|
||||
E_UI_ID_CHAR_IN_BATT_DATA, //充电中电池信息
|
||||
E_UI_ID_CHAR_STOP_ING, //充电停止中提示界面
|
||||
E_UI_ID_CHAR_SETTLEMENT, //充电结算界面
|
||||
E_UI_ID_FAULT_INFO, //故障显示界面
|
||||
|
||||
E_UI_ID_SYS_UPDATE, //系统升级中
|
||||
|
||||
E_UI_ID_MAINTENANCE, //维护界面
|
||||
E_UI_ID_BASIC_PARAM_SET, //基本参数设置界面
|
||||
E_UI_ID_PROT_PARAM_SET, //保护参数设置界面
|
||||
E_UI_ID_NET_PARAM_SET, //网络参数设置界面
|
||||
E_UI_ID_MODULE_PARAM_SET, //模块参数设置界面
|
||||
E_UI_ID_RESERVE_PARAM_SET, //预留参数设置界面
|
||||
E_UI_ID_OTHER_PARAM_SET, //其他参数设置界面
|
||||
E_UI_ID_HISTORY_ALARM, //历史告警界面
|
||||
E_UI_ID_CHARGE_RECORD, //充电记录界面
|
||||
E_UI_ID_VERSION_INFO, //版本信息界面
|
||||
E_UI_ID_CONFIRM_OPERATION, //请确认操作界面
|
||||
}E_UI_ID_TYPE;
|
||||
|
||||
|
||||
typedef struct
|
||||
{
|
||||
U8_T u8_func_code; //功能码
|
||||
U16_T u16_addr; //寄存器地址
|
||||
U16_T u16_cnt; //从数据寄存器地址开始读cnt个[字]长度数据,从控制寄存器地址开始读cnt个[字节]长度数据
|
||||
U32_T u32_data; //数据
|
||||
U8_T u8_str_len; //长度
|
||||
U8_T u8_str[NUM_32];
|
||||
}UICOMM_CMD_T;
|
||||
|
||||
//多次使用的公共按钮 ,因为每次触控信息都清空,所以不同界面相同按钮地址可共用 lyn20200622
|
||||
typedef struct
|
||||
{
|
||||
U8_T u8_frist_page ; //0x0000 首页跳转按钮
|
||||
U8_T u8_other_change_A; //0x0001 A枪其他充电方式选择
|
||||
U8_T u8_other_change_B; //0x0002 B枪其他充电方式选择
|
||||
U8_T u8_vin_start ; //0x0003 vin启动
|
||||
U8_T u8_card_start ; //0x0004 刷卡启动
|
||||
U8_T u8_account_start ; //0x0005 账户启动
|
||||
U8_T u8_stop_charge ; //0x0006 停止充电按钮
|
||||
U8_T u8_auxpower_12v ; //0x0007 辅源选择 12V
|
||||
U8_T u8_auxpower_24v ; //0x0008 辅源选择 24V
|
||||
U8_T u8_maintain ; //0x000B 维护密码点击按钮
|
||||
U8_T u8_maintain_cnt ; //维护密码点击次数
|
||||
U8_T u8_charge_state_A ; //0x000C A枪充电状态点击按钮
|
||||
U8_T u8_charge_state_B ; //0x000D B枪充电状态点击按钮
|
||||
U8_T u8_param_set ; //0x0011 参数设置按钮
|
||||
U8_T u8_history_alarm ; //0x0012 历史告警
|
||||
U8_T u8_charge_record ; //0x0013 充电记录
|
||||
U8_T u8_version_info ; //0x0014 版本信息
|
||||
U8_T u8_cfg_system; //0x0015 系统参数配置
|
||||
U8_T u8_cfg_pile_protect; //0x0016 充电桩保护参数配置
|
||||
U8_T u8_cfg_network; //0x0017 网络参数配置
|
||||
U8_T u8_cfg_module; //0x0018 模块参数配置
|
||||
U8_T u8_cfg_reserve; //0x0019 预留参数配置
|
||||
U8_T u8_cfg_other; //0x001A 其他参数配置
|
||||
|
||||
U8_T u8_real_data ; //0x002C 充电实时信息
|
||||
U8_T u8_batt_data ; //0x002D 电池信息
|
||||
U8_T u8_fee_info ; //0x0030 费率信息显示
|
||||
U8_T u8_card_retry ; //0x0031 刷卡重试按钮
|
||||
U8_T u8_charge_info_A ; //0x0032 A枪充电中实时信息界面
|
||||
U8_T u8_charge_info_B ; //0x0033 B枪充电中实时信息界面
|
||||
U8_T u8_card_return ; //0x0034 刷卡强制退出按钮
|
||||
U8_T u8_card_info ; //0x002E 卡信息显示
|
||||
U8_T u8_exit ; //0x0020 退出
|
||||
U8_T u8_return ; //0x0021 返回
|
||||
U8_T u8_page_up ; //0x0022 上一页
|
||||
U8_T u8_page_down ; //0x0023 下一页
|
||||
U8_T u8_confirm ; //0x0024 确认
|
||||
}S_UI_TOUCH_CTRL;
|
||||
|
||||
|
||||
typedef struct
|
||||
{
|
||||
U8_T u8_type; //字符串类型
|
||||
U8_T u8_len;
|
||||
U8_T u8_str[NUM_32];
|
||||
}S_UI_STR_DATA;
|
||||
|
||||
typedef struct
|
||||
{
|
||||
S_UI_TOUCH_CTRL s_ui_touch_ctrl; //触控按钮
|
||||
|
||||
S_UI_STR_DATA s_ui_str_data; //字符串数据 默认同时只处理一包字符数据
|
||||
//变量数据
|
||||
}UI_CTRL_VAR_T;
|
||||
typedef struct
|
||||
{
|
||||
U8_T u8_enable_flag; //液晶使能标志
|
||||
U8_T u8_lalanguage_type; //0中文 1英文
|
||||
U8_T u8_gunCnt; //枪数量
|
||||
|
||||
E_UI_ID_TYPE e_set_pic_id; //设置当前界面ID
|
||||
E_UI_ID_TYPE e_previous_id; //上一页界面id
|
||||
U8_T u8_jump_remark; //界面跳转传递的其他信息
|
||||
U8_T u8_ret_pic_id; //从迪文屏读回来的当前显示的界面图片ID
|
||||
|
||||
U8_T u8_first_jump; //界面首次跳转标志 1为首次跳转 界面跳转时赋值
|
||||
U8_T u8_gunNo; //控制枪号
|
||||
|
||||
U8_T u8_send_cnt; //数据发送条数
|
||||
|
||||
U16_T u16_outtime_cnt; //通信超时计数
|
||||
U16_T u16_timer_cnt; //任务定时器计数 用于周期控制
|
||||
|
||||
ULONG ulong_timer; //跳转界面时间
|
||||
|
||||
U16_T u16_his_page; //历史记录页号(0=最新)
|
||||
U8_T u8_his_inited; //历史记录界面初始化标志
|
||||
|
||||
UI_CTRL_VAR_T s_ui_ctrl_var; //触控变量
|
||||
/** 在线鉴权失败/超时:经 v_flow_request_ui_idle_recover → v_ui_request_idle_screen_recover 置1;UI 任务清0并回待机 */
|
||||
U8_T u8_flow_idle_recover_req;
|
||||
}S_UI_CTRL_DATA; //UI任务控制数据
|
||||
|
||||
/*------ Exported variables(变量定义) -------------------*/
|
||||
|
||||
/*------ Exported function prototypes (函数声明) -------*/
|
||||
void v_ui_task(void *argument);
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
||||
#endif /* UI_TASK_H */
|
||||
|
||||
/*
|
||||
typedef struct
|
||||
{
|
||||
U8_T maintain_password[6]; //维护密码
|
||||
U8_T user_password[6]; //充电密码
|
||||
// U32_T IC_password; //IC卡密码
|
||||
U8_T current_id; //当前界面ID
|
||||
U8_T pic_id; //从迪文屏读回来的当前显示的界面图片ID
|
||||
U8_T previous_id; //上一页界面id
|
||||
U8_T previous_remark; //上一页界面跳转传递的其他信息
|
||||
U8_T u8_first_flag; //界面首次跳转标志 1为首次跳转 界面跳转时赋值
|
||||
ULONG ulong_timer; //跳转界面时间
|
||||
|
||||
//lyn20201031-默认值0,有效值=1
|
||||
//从“充电实时数据/模块信息/查询费率/实时状态”这4个界面返回时置1;
|
||||
//从“充电实时数据”界面因停止充电退出时,归0
|
||||
//在首页进行检测,if(此值=1 且 流程状态=空闲/停止充电)则直接跳转至“充电实时数据”界面,以即时显示停止状态进行结算
|
||||
U8_T u8_rate_index[3]; //上一界面、当前界面、下一界面初始费率位置
|
||||
U8_T charging_return_flag;
|
||||
U8_T current_gun_no;
|
||||
UI_CTRL_VAR_T s_ui_ctrl_var; //触控变量
|
||||
UI_CONF_VAR_T t_ui_conf_var; //可读写的数字变量
|
||||
}UI_T;
|
||||
*/
|
||||
@@ -0,0 +1,161 @@
|
||||
# UI 模块说明(CCU621_M)
|
||||
|
||||
> 路径:`app/ui/`
|
||||
> 返回主说明:[README](../../README.md)
|
||||
|
||||
## 1. 模块定位
|
||||
|
||||
`app/ui` 是整机的人机交互中枢,负责把“系统状态”转换为“屏幕可视化结果”,并把“屏幕触控/输入”转换为“系统控制动作”。
|
||||
|
||||
核心职责分为四类:
|
||||
|
||||
- 通信层:与迪文屏进行串口协议收发;
|
||||
- 交互层:触控事件解析、输入字符串解析;
|
||||
- 状态机层:页面跳转、页面生命周期、超时返回;
|
||||
- 数据适配层:把业务数据统一封装给 UI(`ui_interface.c`)。
|
||||
|
||||
## 2. 代码结构与职责划分
|
||||
|
||||
- `ui_task.c/.h`
|
||||
- UI 主任务入口;
|
||||
- 页面状态机(当前页面判断、页面切换触发);
|
||||
- 页面显示刷新调度(按 1s/首次进入/事件触发刷新);
|
||||
- 看门狗喂狗和通信超时检测。
|
||||
|
||||
- `ui_comm_impl.c/.h`
|
||||
- 迪文协议封包/解包;
|
||||
- 控制寄存器与数据寄存器读写;
|
||||
- 字符串显示下发、动画图标下发;
|
||||
- 参数区块镜像管理与屏幕写回。
|
||||
|
||||
- `ui_interface.c/.h`
|
||||
- 提供统一的“取数/控数”接口;
|
||||
- 屏蔽底层模块差异(流程、BMS、计量、平台);
|
||||
- 当前版本承担 `CCU621_M` 兼容层职能(部分数据默认值策略)。
|
||||
|
||||
- `ui_info.c/.h`
|
||||
- 页面文案资源(中文/英文);
|
||||
- 故障文本辅助转换;
|
||||
- UI 显示固定字符串资源。
|
||||
|
||||
## 3. UI 主流程(任务周期)
|
||||
|
||||
`v_ui_task()` 一个周期内的关键步骤:
|
||||
|
||||
调度信息(来自 `app/app_init/app_init.c`):
|
||||
|
||||
- `UiComm`:`100ms` 周期(任务入口:`v_ui_task(void *argument)`)
|
||||
|
||||
1. 看门狗喂狗;
|
||||
2. 读取并解包屏幕报文(触控、字符串、变量写入);
|
||||
3. 执行页面切换控制(当前页校验 + 目标页下发);
|
||||
4. 执行当前页面刷新逻辑(按页面类型调用对应显示函数);
|
||||
5. 更新通信超时计数并上报状态;
|
||||
6. 睡眠等待下个周期。
|
||||
|
||||
设计目标是将“通信、状态机、显示逻辑”解耦,便于后续替换业务数据源而不影响页面框架。
|
||||
|
||||
## 4. 多语言界面实现逻辑
|
||||
|
||||
多语言由两个层次实现:
|
||||
|
||||
- 页面资源映射层(页面ID -> 屏幕图片ID)
|
||||
- 每个逻辑页面 `E_UI_ID_TYPE` 在映射表里有多套语言图片索引;
|
||||
- 通过 `u8_lalanguage_type` 选择对应语言图片并下发;
|
||||
- 切语言时不改页面状态机,只改映射结果。
|
||||
|
||||
- 动态文本层(实时字符串)
|
||||
- 实时流程文案、状态文本通过 `ui_info.c` 的字符串表输出;
|
||||
- 同一个寄存器地址可按语言写入不同字符串;
|
||||
- 对于长度变化文本,先清空再写入,防止残留字符。
|
||||
|
||||
当前默认使用中/英两套资源,后续可按同一模式扩展第三语言。
|
||||
|
||||
## 5. 页面跳转状态机设计
|
||||
|
||||
页面切换由“被动跳转 + 主动跳转”共同驱动:
|
||||
|
||||
- 被动跳转(用户输入)
|
||||
- 触控按钮(开始、停止、返回、上一页、下一页等);
|
||||
- 字符串输入(维护密码、管理员密码、确认动作密码等)。
|
||||
|
||||
- 主动跳转(系统状态变化)
|
||||
- 空闲 -> 启动中 -> 充电中 -> 停止中 -> 结算;
|
||||
- 故障触发 -> 故障页面;
|
||||
- 升级标志触发 -> 升级页面;
|
||||
- 空闲超时 -> 屏保/首页。
|
||||
|
||||
状态机关键变量:
|
||||
|
||||
- `e_set_pic_id`:目标逻辑页面;
|
||||
- `u8_ret_pic_id`:屏幕当前页面ID回读值;
|
||||
- `e_previous_id`:上一页面(用于返回);
|
||||
- `u8_first_jump`:首次进入页面标志(用于首次刷新)。
|
||||
|
||||
## 6. 主要页面显示内容(摘要)
|
||||
|
||||
- 待机页
|
||||
- 二维码、联网图标、枪状态、桩号;
|
||||
- 双枪/单枪根据配置和工作状态动态切换页面。
|
||||
|
||||
- 启动中页
|
||||
- 当前流程阶段文本;
|
||||
- 倒计时;
|
||||
- 达到充电状态后自动转实时页。
|
||||
|
||||
- 充电实时页
|
||||
- 电压、电流、电量/功率、金额、时长、SOC;
|
||||
- 支持切换到电池信息页和停止操作。
|
||||
|
||||
- 电池信息页
|
||||
- 电池类型/容量、需求电压电流、额定上限等;
|
||||
- 不同语言模式可展示不同字段重点。
|
||||
|
||||
- 停止中/结算页
|
||||
- 停止倒计时、订单结算信息、停止原因;
|
||||
- 支持返回待机。
|
||||
|
||||
- 维护相关页
|
||||
- 参数分类配置(系统/保护/网络/模块/预留/其他);
|
||||
- 历史告警分页、历史充电记录分页;
|
||||
- 操作确认页(保存参数/参数初始化/系统重启)。
|
||||
|
||||
## 7. 参数配置区块设计
|
||||
|
||||
参数按寄存器区块管理:
|
||||
|
||||
- `0x0200` 系统参数;
|
||||
- `0x0220` 保护参数;
|
||||
- `0x0240` 网络参数;
|
||||
- `0x0260` 模块参数;
|
||||
- `0x0280` 预留参数。
|
||||
|
||||
读写策略:
|
||||
|
||||
- “进入页面”时:从共享配置初始化 UI 参数镜像并下发到屏;
|
||||
- “屏幕修改”时:回写参数镜像;
|
||||
- “确认保存”时:镜像写回系统配置并持久化。
|
||||
|
||||
字符串参数(桩号、域名、二维码、APN)单独按地址映射回写,避免和数值参数混用。
|
||||
|
||||
## 8. 当前兼容策略(CCU621_M 过渡期)
|
||||
|
||||
由于 `CCU621_M` 业务模块未完全对齐旧项目,`ui_interface.c` 使用了默认策略:
|
||||
|
||||
- 部分运行时数据(流程/BMS/计量/平台状态)临时返回默认值;
|
||||
- 控制接口先占位(记录启动方式,不直接驱动底层流程);
|
||||
- 历史记录接口返回空结果并给固定提示文案;
|
||||
- 可直接映射的固定参数与字符串(桩号、域名、密码、二维码、APN)已接入共享配置。
|
||||
|
||||
该策略目标是“先保障界面框架稳定可联调”,后续逐项替换默认值。
|
||||
|
||||
## 9. 后续对接建议(优先级)
|
||||
|
||||
建议按以下顺序接入真实业务能力:
|
||||
|
||||
1. 流程状态与启停控制;
|
||||
2. 电表/计量实时数据与订单结算数据;
|
||||
3. BMS 数据;
|
||||
4. 平台在线/升级/禁用状态;
|
||||
5. 历史故障与历史订单分页读取;
|
||||
6. 通信超时与故障上报闭环。
|
||||
Reference in New Issue
Block a user