本文档持续更新,记录 MPPT Monitor 的所有变更、Bug 修复和功能新增。
通过 Web 界面远程配置 MPPT 设备参数,使用 Modbus 功能码 0x10 (Write Multiple Registers)。
GET /api/settings - 返回可写寄存器列表和说明POST /api/settings - 写入设备参数
{"device_addr": 1, "param": "battery_type", "value": 2}{"success": true, "param_desc": "电池类型", "value": 2, "message": "写入成功"}| 参数名 | 寄存器 | 范围 | 说明 |
|---|---|---|---|
| battery_type | 40001 (0x0000) | 0-5 | 电池类型 |
| battery_level | 40002 (0x0001) | 0-6 | 电池电压等级 |
| charge_current_limit | 40003 (0x0002) | 5-100 | 充电电流限制(%) |
| full_charge_voltage | 40006 (0x0005) | 80-600 | 充满电压(0.1V),仅自定义电池可写 |
| device_address | 40008 (0x0007) | 0-247 | 485设备地址 |
| charge_mode | 40009 (0x0008) | 0-1 | 0=MPPT, 1=DCDC |
src/modbus_client.h/c: 新增 modbus_write_register() 和 modbus_validate_setting()src/web_server.c: 新增 handle_api_settings() 处理函数www/index.html: 新增 "Device Settings" 标签页,包含参数选择表单和寄存器参考表升级到 V2.0.0 后,设备无法读取数据,日志显示 Address mismatch: expected 1, got 105。
recv() 单次调用可能只读到部分响应,导致后续解析错位drain_socket() 函数:每次发送前清空 TCP 缓冲区残留数据Device #1 [ONLINE] Batt:28.0V(100%) PV:42.0V/1.7A/72W Temp:48C Fault:Normal
Type:Custom (自定义) Mode:DC-DC SW:v115
config.ini 配置GET /api/devices 返回所有设备摘要信息device_addr 参数)history_data 表包含全部 20+ 字段config.h/config.c - INI 配置文件解析模块db.h/db.c - SQLite3 数据库模块modbus_client.h/c - 完整 DM Series V2.1 协议支持web_server.h/c - 多设备 API + 外部 HTML 仪表盘www/index.html - 独立前端仪表盘(Chart.js 图表)Makefile - 链接 SQLite3| 功能码 | 方向 | 说明 |
|---|---|---|
| 0x04 | Read | Input Registers (30001-30011) - 实时数据 |
| 0x03 | Read | Output Registers (40001-40009) - 配置参数 |
| 0x10 | Write | Write Multiple Registers - 写配置(预留) |
SQLite3 历史数据存储
db.h/db.c 数据库模块history_data 表,包含所有 MPPT 寄存器字段config.ini 配置文件
config.h/config.c 配置解析模块[modbus]、[storage]、[web] 三个配置段历史数据查询 API
GET /api/history - 分页查询历史数据start_time、end_time(ISO 8601 格式)、page、page_size、sort(ASC/DESC)total、page、page_size、total_pages、records[]历史数据仪表盘页面
趋势图表(Chart.js 3.x)
storage_interval_sec 配置)web_ctx_t 新增 db 和 config 指针-lsqlite3 链接和 config.c、db.c 编译目标| 库 | 版本 | 用途 |
|---|---|---|
| SQLite3 | 3.x | 历史数据存储(新增) |
Modbus RTU over TCP 客户端
Mongoose 7.22 HTTP Web 服务器
GET /api/data - 返回完整 MPPT 实时数据(JSON)GET /api/status - 返回连接与设备状态(JSON)GET /api/health - 健康检查端点GET / - HTML 实时监控仪表盘(每 2 秒自动刷新)mongoose-7.22 新 API 适配
mg_match() 替代已废弃的 mg_http_match_uri()struct mg_str { char *buf; size_t len; } 新结构体cJSON 1.7.19 JSON 序列化
多线程架构
跨平台兼容
构建系统
文档
| 寄存器 | 参数 | 换算 |
|---|---|---|
| 30001 | 电池电压 | raw / 10 = V |
| 30002 | 光伏电压 | raw / 10 = V |
| 30003 | 光伏充电电流 | raw / 10 = A |
| 30004 | 累计发电量 | raw / 10 = kWh |
| 30005 | 机器温度 | raw = °C |
| 30006 | 故障代码 | raw |
| 30007 | 电池电量 | raw = % |
| 30008 | 电池串数 | raw |
| 30009 | 充电状态 | raw |
| 30010 | 设备类型 | raw |
| 库 | 版本 | 用途 |
|---|---|---|
| Mongoose | 7.22 | HTTP 服务器 |
| cJSON | 1.7.19 | JSON 序列化 |
| OpenSSL | 3.x | TLS 支持(可选) |
| pthread | - | 多线程 |
# Ubuntu 24.04 / 树莓派 5
make
# 自定义 OpenSSL 路径
gcc src/main.c src/modbus_client.c src/web_server.c \
lib/cJSON-1.7.19/cJSON.c lib/mongoose-7.22/mongoose.c \
-W -Wall -Wextra -g -I. -Isrc \
-Ilib/cJSON-1.7.19 -Ilib/mongoose-7.22 \
-DMG_ENABLE_OPENSSL=1 \
-I/opt/openAI/Lib64U/include \
-L/opt/openAI/Lib64U/lib -lssl -lcrypto \
-lpthread -lm -o mppt_monitor
后续变更请按以下格式记录:
## [版本号] - 日期
### 新增功能
- 描述新增的功能
### Bug 修复
- 描述修复的问题
### 变更/优化
- 描述改进的内容
### 已知问题
- 描述已知但未修复的问题
最后更新: 2026-08-04