docs(vd960DBN): 开发日志 V3.5 — 保活精简 + SocketSend 故障恢复

This commit is contained in:
wangfq
2026-07-23 18:36:40 +08:00
parent 98d9b99cf6
commit a5ac54a2bf
+48
View File
@@ -578,6 +578,53 @@ initialize → iot_mqtt_publish() → buf[1024]
所有发布点用 `g_iot_msg_id + 1` 预读, `iot_mqtt_publish` 内部 `++g_iot_msg_id` (MQTT pktid for QoS>0, 对QoS=0 也递增以保持一致)。 所有发布点用 `g_iot_msg_id + 1` 预读, `iot_mqtt_publish` 内部 `++g_iot_msg_id` (MQTT pktid for QoS>0, 对QoS=0 也递增以保持一致)。
---
## 2026-07-23 — 保活精简 + SocketSend 故障恢复
### 保活机制梳理
heartbeat JSON (60s 单向设备上报) 与 MQTT PINGREQ/PINGRESP 功能重叠:
- heartbeat 是设备→平台单向, 平台不回复, 不能做存活检测
- MQTT PINGREQ/PINGRESP 才是双向保活, broker 不回 → TCP 超时
**决策**: 删除 heartbeat JSON, MQTT PINGREQ 独立保活;
loop_data 按 `g_report_cfg.interval` 上报即可。
### 三层保活链路
| 层级 | 机制 | 超时 | 触发 |
|------|------|------|------|
| MQTT | PINGREQ/PINGRESP (60s) | broker无响应→TCP超时 | `SINT_STAT_TIM_OUT` |
| TCP | KeepAlive | WCHNET 检测 | `SINT_STAT_DISCONNECT` |
| 硬件 | IWDG (4s, LSI) | 主循环卡死 | 硬件复位 |
### SocketSend 故障快速恢复
**问题**: WCHNET_SocketSend 突然返回 `ret=0x11 sent=0`,
TCP 超时要等 ~2 分钟才触发 `SINT_STAT_TIM_OUT`,
期间所有 loop_data/event_report 全丢。
**修复 v1** — 连续失败检测 (7c0de6c):
- `_iot_send_fail_cnt` 追踪连续失败次数
- 3 次连续失败 → 主动 `WCHNET_SocketClose` + `DISCONNECTED` → 重连
- 任一次成功清零, 新连接也清零
**修复 v2** — 重连时重建 socket (98d9b99):
- `iot_connect_broker()` 原只设 `g_iot_socket = SocketId_TCP`
但 close 后 socket 已销毁 → TCP connect 一直超时
- 改为调 `WCHNET_CreateTcpMqttSocket()` 真正 create + connect
- 断连后加 3s 延迟再重连, 给 WCHNET 清理时间
### BSS 变动
| 变量 | 改动 | ΔBSS |
|------|------|------|
| `data_json[1024]` | 删除 (v1) | -1024B |
| `iot_send_heartbeat::payload[512]` | 删除 (函数移除) | -512B |
| `_iot_send_fail_cnt` | 新增 | +4B |
| **净省** | | **-1532B** |
---| ---|
| 消灭 `data_json[1024]` | 直接在 `payload[1400]` 构建完整 JSON, 省 1024B BSS | | 消灭 `data_json[1024]` | 直接在 `payload[1400]` 构建完整 JSON, 省 1024B BSS |
| 消除 `%s` 拷贝 | 不再从中间缓冲格式化到 payload, 杜绝尾部二进制残留路径 | | 消除 `%s` 拷贝 | 不再从中间缓冲格式化到 payload, 杜绝尾部二进制残留路径 |
@@ -590,6 +637,7 @@ initialize → iot_mqtt_publish() → buf[1024]
## 修订记录 ## 修订记录
| 版本 | 时间 | 说明 | | 版本 | 时间 | 说明 |
| V3.5 | 2026-07-23 | 保活精简(去heartbeat+IWDG) + SocketSend故障恢复(3次失败重连+重建socket) |
| V3.4 | 2026-07-23 | MQTT 栈重构: 发送缓冲隔离/命令处理/msg_id统一/看门狗, 共10项修复 | | V3.4 | 2026-07-23 | MQTT 栈重构: 发送缓冲隔离/命令处理/msg_id统一/看门狗, 共10项修复 |
| V3.3 | 2026-07-23 | loop_data: 消灭 data_json[1024] BSS 缓冲 + coil_count 硬限, 防 mqttBuf 重叠致 _raw 异常 | | V3.3 | 2026-07-23 | loop_data: 消灭 data_json[1024] BSS 缓冲 + coil_count 硬限, 防 mqttBuf 重叠致 _raw 异常 |
|------|------|------| |------|------|------|