docs(vd960DBN): 开发日志 V3.5 — 保活精简 + SocketSend 故障恢复
This commit is contained in:
@@ -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 也递增以保持一致)。
|
||||
|
||||
---
|
||||
|
||||
## 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 |
|
||||
| 消除 `%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.3 | 2026-07-23 | loop_data: 消灭 data_json[1024] BSS 缓冲 + coil_count 硬限, 防 mqttBuf 重叠致 _raw 异常 |
|
||||
|------|------|------|
|
||||
|
||||
Reference in New Issue
Block a user