V1.5: 计划内复位前保存累计电量(reset_log_mark内调hlw8032_save),复位不再丢电量

This commit is contained in:
helei 2026-08-15 00:45:12 +08:00
parent 3647d0fb14
commit 79ea75f669
3 changed files with 5 additions and 1 deletions

View File

@ -14,6 +14,7 @@
#include "log.h" #include "log.h"
#include "main.h" #include "main.h"
#include "app_loop.h" #include "app_loop.h"
#include "hlw8032.h"
#include "../W25Q64/w25q64.h" #include "../W25Q64/w25q64.h"
#include "string.h" #include "string.h"
@ -123,6 +124,7 @@ static void append_record(uint8_t reason, uint32_t uptime_sec)
/* 主动复位前标记细分原因(共享 RAM热复位后 APP 开机读取) */ /* 主动复位前标记细分原因(共享 RAM热复位后 APP 开机读取) */
void reset_log_mark(uint8_t reason) void reset_log_mark(uint8_t reason)
{ {
hlw8032_save(); /* 计划内复位前把累计电量落 EEPROM无变化时空操作 */
BOOT_SHARE->pending_reason = reason; BOOT_SHARE->pending_reason = reason;
boot_share_store(); boot_share_store();
} }

View File

@ -113,7 +113,7 @@
- **通信**4800bps 8E1F1 上按 9 位帧长 + 偶校验配置),芯片每 50ms 主动上报 24 字节帧,只收不发;帧同步 = 首字节 0x55/0xAA/0xFx + 第二字节 0x5A + 校验和([2]~[22] 相加低 8 位) - **通信**4800bps 8E1F1 上按 9 位帧长 + 偶校验配置),芯片每 50ms 主动上报 24 字节帧,只收不发;帧同步 = 首字节 0x55/0xAA/0xFx + 第二字节 0x5A + 校验和([2]~[22] 相加低 8 位)
- **电量算法**(手册公式):`kWh = 总脉冲 × 功率参数寄存器 × 电压系数 × 电流系数 / (10^9×3600)`PF 寄存器 16 位溢出由数据更新寄存器 bit7 翻转计数(`总脉冲 = k×65536 + PF`50ms 一帧不可能漏翻转;芯片断电重启(计数值倒退)自动重新基准 - **电量算法**(手册公式):`kWh = 总脉冲 × 功率参数寄存器 × 电压系数 × 电流系数 / (10^9×3600)`PF 寄存器 16 位溢出由数据更新寄存器 bit7 翻转计数(`总脉冲 = k×65536 + PF`50ms 一帧不可能漏翻转;芯片断电重启(计数值倒退)自动重新基准
- **系数宏**`main.h` 的 `HLW_U_COEF`=100K/49.9/1000=2.004)、`HLW_I_COEF`=1/(0.002×1000)=0.5)——改电阻/互感器只动这两个宏 - **系数宏**`main.h` 的 `HLW_U_COEF`=100K/49.9/1000=2.004)、`HLW_I_COEF`=1/(0.002×1000)=0.5)——改电阻/互感器只动这两个宏
- **持久化**累计脉冲数uint64存 EEPROM 偏移 164~171每攒约 0.1kWh 写一次(限制擦写),断电预警(法拉电容续航内)立即写一次,掉电损失 <0.1kWh - **持久化**累计脉冲数uint64存 EEPROM 偏移 164~171每攒约 0.1kWh 写一次(限制擦写),所有计划内复位(`reset_log_mark` 覆盖的复位点)复位前写一次,断电预警(法拉电容续航内)再写一次——除突然死机外基本不丢电量
- **上报**MQTT 就绪且芯片在线1s 内有有效帧)时,每分钟随运行心跳上报一次 `{"energy":%.2f}`;未联网/芯片不在线不上报 - **上报**MQTT 就绪且芯片在线1s 内有有效帧)时,每分钟随运行心跳上报一次 `{"energy":%.2f}`;未联网/芯片不在线不上报
- **调试日志**:芯片在线时每分钟日志同时打印电压/电流/功率(`运行时间: ... 电能: x.xxkWh 电压: xxx.xV 电流: x.xxA 功率: xxxx.xW` - **调试日志**:芯片在线时每分钟日志同时打印电压/电流/功率(`运行时间: ... 电能: x.xxkWh 电压: xxx.xV 电流: x.xxA 功率: xxxx.xW`

View File

@ -102,6 +102,8 @@
PF 16 位溢出靠数据更新寄存器 bit7 翻转计数50ms 一帧不会漏);芯片断电重启自动重新基准 PF 16 位溢出靠数据更新寄存器 bit7 翻转计数50ms 一帧不会漏);芯片断电重启自动重新基准
- 系数宏 `HLW_U_COEF`(2.004)/`HLW_I_COEF`(0.5) 在 main.h对应 ZMPT107-1(100K/49.9R)+CT 1000:1(2R) - 系数宏 `HLW_U_COEF`(2.004)/`HLW_I_COEF`(0.5) 在 main.h对应 ZMPT107-1(100K/49.9R)+CT 1000:1(2R)
- 芯片在线时每分钟日志打印电压/电流/功率/电能(调试校准用) - 芯片在线时每分钟日志打印电压/电流/功率/电能(调试校准用)
- 修复:计划内复位(心跳超时/被踢/OTA/命令复位等 reset_log_mark 覆盖点)前未保存电量 →
reset_log_mark 里统一调 hlw8032_save(),复位不再丢未落盘的电量
- 修复PD2 浮空噪声/真实帧使 online 为真后,每分钟电能日志在 sys_task(1KB 栈) 里格式化 4 个浮点数 - 修复PD2 浮空噪声/真实帧使 online 为真后,每分钟电能日志在 sys_task(1KB 栈) 里格式化 4 个浮点数
导致栈溢出卡死看门狗复位 → sys_task 栈加到 2KB帧同步加"连续 3 帧且间隔 20~150ms"防噪声假同步 导致栈溢出卡死看门狗复位 → sys_task 栈加到 2KB帧同步加"连续 3 帧且间隔 20~150ms"防噪声假同步
- 累计脉冲(uint64)持久化 EEPROM 偏移 164每攒约 0.1kWh 写一次 + 断电预警时立即写(法拉电容续航内) - 累计脉冲(uint64)持久化 EEPROM 偏移 164每攒约 0.1kWh 写一次 + 断电预警时立即写(法拉电容续航内)