V1.5: 电能上报策略改为功率>10W每30s一次,<=10W仅首次联网报一次(开关切换随状态大报文携带)
This commit is contained in:
parent
048eed9be6
commit
7500acb041
|
|
@ -293,8 +293,10 @@ static void oled_home_refresh(uint32_t up_ms)
|
|||
}
|
||||
}
|
||||
|
||||
/* 电能日志/上报间隔:想改频率就改这个宏(单位 ms) */
|
||||
#define ENERGY_REPORT_INTERVAL_MS 10000u
|
||||
/* 电能上报策略:功率 > 10W 时每 30s 上报一次;<=10W 仅首次联网报一次
|
||||
* (开关切换随状态大报文带 energy,无需单独发)。串口日志固定 10s 一条 */
|
||||
#define ENERGY_REPORT_INTERVAL_MS 30000u
|
||||
#define ENERGY_REPORT_POWER_W 10.0f
|
||||
|
||||
/*==== sys_task:系统辅助(LED/电量/蓝牙命令/运行时长)====*/
|
||||
static void sys_task(void *arg)
|
||||
|
|
@ -344,16 +346,30 @@ static void sys_task(void *arg)
|
|||
}
|
||||
}
|
||||
|
||||
/* 电能日志+上报:联网且计量芯片在线时每 ENERGY_REPORT_INTERVAL_MS 一条 */
|
||||
/* 电能:串口日志固定 10s 一条;上报按功率策略(>10W 每 30s,否则仅首次) */
|
||||
if (g_net_mqtt_ready && hlw8032_online() &&
|
||||
(HAL_GetTick() - en_print) >= ENERGY_REPORT_INTERVAL_MS) {
|
||||
(HAL_GetTick() - en_print) >= 10000u) {
|
||||
en_print = HAL_GetTick();
|
||||
static uint8_t energy_first_reported = 0;
|
||||
static uint32_t energy_report_tick = 0;
|
||||
float kwh = hlw8032_get_energy_kwh();
|
||||
NET_publish_energy(kwh);
|
||||
float pw = hlw8032_get_power_w();
|
||||
uint8_t report = 0;
|
||||
if (!energy_first_reported) {
|
||||
report = 1;
|
||||
energy_first_reported = 1;
|
||||
} else if (pw > ENERGY_REPORT_POWER_W &&
|
||||
(HAL_GetTick() - energy_report_tick) >= ENERGY_REPORT_INTERVAL_MS) {
|
||||
report = 1;
|
||||
}
|
||||
if (report) {
|
||||
energy_report_tick = HAL_GetTick();
|
||||
NET_publish_energy(kwh);
|
||||
}
|
||||
log_info(FMT_ENERGY, (double)kwh,
|
||||
(double)hlw8032_get_voltage_v(),
|
||||
(double)hlw8032_get_current_a(),
|
||||
(double)hlw8032_get_power_w());
|
||||
(double)pw);
|
||||
}
|
||||
|
||||
vTaskDelay(20);
|
||||
|
|
|
|||
|
|
@ -115,7 +115,7 @@
|
|||
- **电量算法**(手册公式):`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)——改电阻/互感器只动这两个宏
|
||||
- **持久化**:累计脉冲数(uint64)存 EEPROM 偏移 164~171;每攒约 0.1kWh 写一次(限制擦写),所有计划内复位(`reset_log_mark` 覆盖的复位点)复位前写一次,断电预警(法拉电容续航内)再写一次——除突然死机外基本不丢电量
|
||||
- **上报**:MQTT 就绪且芯片在线(1s 内有有效帧)时,每分钟随运行心跳上报一次 `{"energy":%.2f}`;未联网/芯片不在线不上报
|
||||
- **上报策略**:功率 >10W 时每 30s 上报一次 `{"energy":%.2f}`;≤10W 时仅首次联网报一次(省流量);继电器开关切换随状态大报文携带 energy。串口电能日志固定 10s 一条。阈值宏 `ENERGY_REPORT_POWER_W`、间隔宏 `ENERGY_REPORT_INTERVAL_MS` 在 app_loop.c
|
||||
- **调试日志**:芯片在线时每分钟日志同时打印电压/电流/功率(`运行时间: ... 电能: x.xxkWh 电压: xxx.xV 电流: x.xxA 功率: xxxx.xW`)
|
||||
|
||||
## OLED 屏幕显示(128x64 + GB2312 字库 IC)
|
||||
|
|
|
|||
Loading…
Reference in New Issue