9ceb218f80
Co-authored-by: Cursor <cursoragent@cursor.com>
4.2 KiB
4.2 KiB
meter_calculate 模块说明
路径:
app/meter_calculate/
返回主说明:README
1. 模块职责
- 提供电表采集与计量计费两类任务能力:
meter_coll_task负责电表数据采集,meterfee_task负责订单计量与费用累计; - 维护充电订单生命周期数据(开始、充电中、结束)并对外提供订单读写接口;
- 提供费率查询、周期计量、下周期金额预估能力;
- 对接故障系统,处理计量跳变、费率时间异常等故障置位/恢复;
- 对接 Flash/EEPROM 订单存储与未结算订单管理,支持掉电续传和平台结算确认。
2. 关键文件
meter_coll_task.c/.h:电表通信采集任务与底层数据更新;calculate_task.c/.h:计量计费任务(v_meterfee_task)及计费控制结构;meter_calculate_impl.c/.h:计量对外接口、订单数据接口、故障与结算接口;BSP/flash_file_mgr/meter_calculate_flash_impl.c/.h:订单正式记录与临时订单 EEPROM/Flash 持久化;BSP/flash_file_mgr/unsettled_order_mng.c/.h:未结算订单索引管理。
3. 功能说明
3.1 任务与调度模型
v_meterfee_task()在系统任务表中按周期运行,流程为:- 初始化计量控制对象
s_metering_ctrl; - 初始化订单存储模块
v_chg_order_flash_init()与未结算模块v_unsettled_order_init(); - 循环执行
v_meterlog_action_cheak()(计费启停状态机)和v_meterlog_ctrl()(周期计费); - 周期喂狗、日志输出与睡眠调度。
- 初始化计量控制对象
- 计量主循环按 5 秒节拍进行电量与费用更新,充电中每 60 秒刷新一次 EEPROM 临时订单。
3.2 计量与计费流程
- 通过
u64_meterlog_get_meter_data()获取电表电量(0.0001kWh 精度); - 首次计量记录起始电量,后续计算循环差分电量并累计到:
- 总电量
u32_used_energy - 分时段电量
u32_part_energy[period] - 电费
u32_used_money - 服务费
u32_used_service
- 总电量
v_meterlog_real_fee_updata()根据当前时间计算 15 分钟时段索引(0~95),并更新充电/放电费率缓存;u32_meterlog_next_cycle_money()提供下一周期金额预测(基于当前电压电流和费率)。
3.3 订单生命周期管理
- 启动充电:
v_meterlog_set_start_char_log_info()清零并写入启动订单关键信息(交易号、用户、VIN、起始电量、起始时间); - 充电中:
v_meterlog_log_updata()持续更新结束时间、结束电量、SOC、已充时长; - 停止充电:
v_meterlog_set_stop_char_log_info()写入停止原因并更新末态数据; - 对外接口:
v_meterlog_put_char_log_data()读取订单完整结构;v_meterlog_set_char_log_info()按字段更新订单;u32_meterlog_put_data()按枚举提取关键订单字段。
3.4 存储与结算接口
v_meterlog_flash_save_log(u8_flag, u8_gunNo):u8_flag=0:充电中更新 EEPROM 临时订单(未结算标志);u8_flag=1:结束后保存正式订单到 Flash,记录u32_index,加入未结算列表,并清除临时订单。
u8_platform_settlement_confirm(orderIndex):平台确认结算后,从未结算列表移除订单;u8_check_order_settlement_status(orderIndex):查询订单是否已结算(0 已结算,1 未结算)。
3.5 故障处理
- 计量相关故障由
v_meterlog_set_fault()统一上报:E_FAULT_17007:电表跳变异常;E_FAULT_17008:电量长时间未更新;E_FAULT_17009:费率/时间异常。
- 计费停止后会执行对应恢复逻辑,避免故障状态长期残留。
4. 维护建议
- 调整计量周期、临时订单保存周期(当前 60 秒)时,需同步评估 EEPROM 擦写寿命与掉电恢复精度;
- 修改费率来源时,优先保持
u32_meterlog_get_sys_data()作为统一入口,避免业务层直连全局配置; - 若后续接入平台上送流程,可在
v_set_plat_log_flag()增加上送触发逻辑并和未结算列表闭环验证; - 建议联动验证三类场景:正常停机、异常掉电恢复、平台延迟结算。
5. 关联文档
BSP/flash_file_mgr/flash_file_mgr模块说明.md- 主索引:README