docs(DLD154Pro): RS485 协议未实现标注 (rs485-modbus V1.8 / 700BS) + V3.05 文档同步

原则:代码未实现的功能,协议文档在相应指令旁如实标注"未实现",避免文档承诺≠固件实现。

- rs485-modbus-protocol.md V1.7→V1.8:
  §3.1 DI 0x0008 Init Flag 未实现(恒 0);§3.2 IR 0x0006/0x0007(Variation)/
  0x000A/0x000B/0x000C 未实现(改读全数据块 0x010A/0x010B);§3.3 保持寄存器
  全部标注(FC 0x06 仅 0x0010/0x0011/0x0012 可写,0x00FE 无分支);
  §4.3/4.5/4.8 未实现横幅;§5 功能码矩阵 0x03/0x10/0x11 → ✗;
  §6.3 仅 0x06;§7 0x3D/Init_B 对照标注;§8 版本历史 V1.8
- rs485-700bs-protocol.md: §4.4 0x3D 未实现注记 + §5 速查表 + §6 兼容对照
- ble-protocol.md / product-manual.md / technical-spec.md: 版本 V3.04→V3.05 + 版本历史
- devlog.md: 置顶 2026-08-27 条目(减配清单 + 文档标注 + 保留能力 + 宏修复)
This commit is contained in:
wangfq
2026-08-27 08:55:20 +08:00
parent d1fde88dd1
commit 692b406d0f
6 changed files with 94 additions and 39 deletions
+46 -33
View File
@@ -64,9 +64,10 @@
| 0x0005 | Relay Output | 继电器当前输出状态 | 0=释放, 1=吸合 |
| 0x0006 | Freq Low Fault | 频率下限异常 (Fre_Err bit0) | 0=正常, 1=频率过低 |
| 0x0007 | Freq High Fault | 频率上限异常 (Fre_Err bit4) | 0=正常, 1=频率过高 |
| 0x0008 | Init Flag | 复位后首次指示 (Init_B) | 0=正常, 1=复位后首次—上位机读后清零* |
| 0x0008 | Init Flag | 复位后首次指示 (Init_B) | 0=正常, 1=复位后首次—上位机读后清零* |**未实现**(固件恒为 0 |
> **Init Flag 清除机制**:上位机读到 1 后,应发送 **写 HR 0x00FE=0x0001** 清零。参见 §4.7。
> ⚠ **实现状态(V1.8 起标注)**`DI 0x0008` 与 `HR 0x00FE` 固件均**未实现**(DI 恒为 0,HR 无处理分支),此机制仅文档保留。
### 3.2 输入寄存器 (Input Registers) — 功能码 0x04
@@ -78,13 +79,15 @@
| 0x0003 | CAPVD Lo | uint16 | | 归一化周期值,低 16 位 |
| 0x0004 | Origin Hi | uint16 | **2 寄存器** | 基线值 (32-bit),高 16 位 |
| 0x0005 | Origin Lo | uint16 | | 基线值,低 16 位 |
| 0x0006 | Variation Hi | int16 | **2 寄存器** | 变化量 = CAPVD Origin (32-bit 有符号),高 16 位 |
| 0x0007 | Variation Lo | int16 | | 变化量,低 16 位 |
| 0x0008 | FW Version | uint16 | 1 寄存器 | 固件版本,高字节=主版本,低字节=子版本。例 `0x0300` = v3.00 |
| 0x0009 | HW Version | uint16 | 1 寄存器 | 硬件版本。例 `0x0301` = v3.01 |
| 0x000A | Freq Sens | uint16 | 1 寄存器 | 当前灵敏度等级 (0=低, 1=中低, 2=中高, 3=高) |
| 0x000B | Condition | uint16 | 1 寄存器 | 环境活跃度 (0=安静, 1–100=嘈杂) |
| 0x000C | DIP Virtual | uint16 | 1 寄存器 | 虚拟拨码(700BS 兼容): bit[7:4]=function_mode, bit[3:0]=fusion_mode |
| 0x0006 | Variation Hi | int16 | **2 寄存器** | 变化量 = CAPVD Origin (32-bit 有符号),高 16 位 |**未实现**(省 Flash 减配,V1.8 |
| 0x0007 | Variation Lo | int16 | | 变化量,低 16 位 |**未实现** |
| 0x0008 | FW Version | uint16 | 1 寄存器 | 固件版本,高字节=主版本,低字节=子版本。例 `0x0300` = v3.00 | |
| 0x0009 | HW Version | uint16 | 1 寄存器 | 硬件版本。例 `0x0301` = v3.01 | |
| 0x000A | Freq Sens | uint16 | 1 寄存器 | 当前灵敏度等级 (0=低, 1=中低, 2=中高, 3=高) |**未实现**(省 Flash 减配,V1.8 |
| 0x000B | Condition | uint16 | 1 寄存器 | 环境活跃度 (0=安静, 1–100=嘈杂) |**未实现**(省 Flash 减配,V1.8 |
| 0x000C | DIP Virtual | uint16 | 1 寄存器 | 虚拟拨码(700BS 兼容): bit[7:4]=function_mode, bit[3:0]=fusion_mode |**未实现**(省 Flash 减配,V1.8 |
> ⚠ **输入寄存器实现状态(V1.8 起标注)**`0x0006/0x0007`Variation)、`0x000A`Freq Sens)、`0x000B`Condition)、`0x000C`DIP Virtual)固件**未实现**(读返回异常 0x02 Illegal Data Address)。读取变化量请用全数据块 `0x010A/0x010B`(见 §3.2.1,仍可用)。
### 3.2.1 全数据块 (Input Registers 0x0100+) — 功能码 0x04
@@ -127,25 +130,27 @@
### 3.3 保持寄存器 (Holding Registers) — 功能码 0x03 / 0x06 / 0x10
> ⚠ **实现状态(V1.8 起标注)**:功能码 **0x03(读保持寄存器)与 0x10(批量写)固件未实现**(返回异常 0x01 Illegal Function)。保持寄存器**只支持 FC 0x06 写单寄存器**,且仅 `0x0010/0x0011/0x0012` 可写;其余 R/W 寄存器(0x00000x0004, 0x0009, 0x000A)因省 Flash 减配**读写均未实现**,只读寄存器(0x00050x0008, 0x000B)因 FC 0x03 未实现**读不到**。
| 地址 | 名称 | 范围 | 默认 | R/W | 说明 |
|------|------|------|------|-----|------|
| 0x0000 | Sensitivity | 03 | 1 | R/W | 灵敏度等级 (0=低, 1=中低, 2=中高, 3=高) |
| 0x0001 | Fusion Mode | 06 | 0 | R/W | 输出组合模式(见 §6.5) |
| 0x0002 | Hold Time | 0255 | 0 | R/W | 有限存在时间 (×5s), 0=永久存在 |
| 0x0003 | Output Delay | 0255 | 10 | R/W | 离开延时 (×50ms), 例 10=500ms |
| 0x0004 | Freq Level | 01 | 0 | R/W | 线圈频率档: 0=高频, 1=低频 |
| 0x0005 | RS485 Baud Hi | — | — | **R** | RS485 波特率高 16 位(只读) |
| 0x0006 | RS485 Baud Lo | — | — | **R** | RS485 波特率低 16 位(只读) |
| 0x0007 | RS485 Addr | 1247 | 1 | **R** | RS485 从机地址(只读) |
| 0x0008 | Protocol | 01 | 0 | **R** | 当前 RS485 协议: 0=700BS, 1=Modbus |
| 0x0009 | BT Timeout | 0255 | 0 | R/W | 蓝牙空闲关闭超时 (分钟), 0=不关闭 |
| 0x000A | Safe Timeout | 0255 | 0 | R/W | 安全模式超时 (×10s), 0=关闭 |
| 0x000B | Opto Func | 01 | 0 | **R** | 光耦功能: 0=雷达输入, 1=复位 |
| 0x0010 | Auto Rpt Enable | 01 | 0 | R/W | 全数据主动上报: 0=关闭, 1=使能(见 §4.9 |
| 0x0011 | Active Thr | 065535 | 10 | R/W | 活动状态阈值: |Variation| ≥ 该值时进入活动上报速率 (150ms) |
| 0x0012 | System Cmd | — | — | **W** | 系统指令: 写 `0x2C2C` 触发 MCU 全复位 (等效 700BS 0x2C, 见 §4.7) |
| 0x00FE | Init Flag Clear | 01 | — | **W** | 写 1 清零 Init Flag (DI 0x0008) |
| 0x00FF | Device Reset (已废弃) | — | — | **W** | ⚠ V1.7 废弃, 请使用 HR 0x0012=0x2C2C |
| 0x0000 | Sensitivity | 03 | 1 | R/W | 灵敏度等级 (0=低, 1=中低, 2=中高, 3=高) |**未实现**(省 Flash 减配,V1.8 |
| 0x0001 | Fusion Mode | 06 | 0 | R/W | 输出组合模式(见 §6.5) |**未实现**(省 Flash 减配,V1.8 |
| 0x0002 | Hold Time | 0255 | 0 | R/W | 有限存在时间 (×5s), 0=永久存在 |**未实现**(省 Flash 减配,V1.8 |
| 0x0003 | Output Delay | 0255 | 10 | R/W | 离开延时 (×50ms), 例 10=500ms |**未实现**(省 Flash 减配,V1.8 |
| 0x0004 | Freq Level | 01 | 0 | R/W | 线圈频率档: 0=高频, 1=低频 |**未实现**(省 Flash 减配,V1.8 |
| 0x0005 | RS485 Baud Hi | — | — | **R** | RS485 波特率高 16 位(只读) | ⚠ FC 0x03 未实现,读不到 |
| 0x0006 | RS485 Baud Lo | — | — | **R** | RS485 波特率低 16 位(只读) | ⚠ FC 0x03 未实现,读不到 |
| 0x0007 | RS485 Addr | 1247 | 1 | **R** | RS485 从机地址(只读) | ⚠ FC 0x03 未实现,读不到 |
| 0x0008 | Protocol | 01 | 0 | **R** | 当前 RS485 协议: 0=700BS, 1=Modbus | ⚠ FC 0x03 未实现,读不到 |
| 0x0009 | BT Timeout | 0255 | 0 | R/W | 蓝牙空闲关闭超时 (分钟), 0=不关闭 |**未实现**(省 Flash 减配,V1.8 |
| 0x000A | Safe Timeout | 0255 | 0 | R/W | 安全模式超时 (×10s), 0=关闭 |**未实现**(省 Flash 减配,V1.8 |
| 0x000B | Opto Func | 01 | 0 | **R** | 光耦功能: 0=雷达输入, 1=复位 | ⚠ FC 0x03 未实现,读不到 |
| 0x0010 | Auto Rpt Enable | 01 | 0 | R/W | 全数据主动上报: 0=关闭, 1=使能(见 §4.9 | ✅ FC 0x06 可写 |
| 0x0011 | Active Thr | 065535 | 10 | R/W | 活动状态阈值: \|Variation\| ≥ 该值时进入活动上报速率 (150ms) | ✅ FC 0x06 可写 |
| 0x0012 | System Cmd | — | — | **W** | 系统指令: 写 `0x2C2C` 触发 MCU 全复位 (等效 700BS 0x2C, 见 §4.7);读恒 0 | ✅ FC 0x06 可写 |
| 0x00FE | Init Flag Clear | 01 | — | **W** | 写 1 清零 Init Flag (DI 0x0008) |**未实现**(固件无此分支) |
| 0x00FF | Device Reset (已废弃) | — | — | **W** | ⚠ V1.7 废弃, 请使用 HR 0x0012=0x2C2C | ⚠ 废弃(未实现) |
> **只读寄存器 (0x00050x0008, 0x000B)**:写操作返回异常 0x02Illegal Data Address)。
> **写入寄存器 (0x00FE, 0x00FF)**:只写不读。读返回 0x0000。写入非魔数值返回异常 0x03。
@@ -179,6 +184,8 @@
### 4.3 读保持寄存器 — 功能码 0x03
> ⚠ **V1.8 未实现**:固件已禁用 FC 0x03(省 Flash 减配),请求返回异常 `0x83 0x01`Illegal Function)。保持寄存器只支持 FC 0x06 写(仅 0x0010/0x0011/0x0012),请勿依赖此功能码读取参数。
读取全部可读写参数:
```
@@ -205,6 +212,8 @@
### 4.5 批量写寄存器 — 功能码 0x10
> ⚠ **V1.8 未实现**:固件已禁用 FC 0x10(省 Flash 减配),请求返回异常 `0x90 0x01`Illegal Function)。批量写请改用 FC 0x06 逐条写,或走 BLE 小程序配置。
一次写入灵敏度和存在时间(60s)
```
@@ -234,6 +243,8 @@
### 4.8 清除 Init Flag — 写 HR 0x00FE
> ⚠ **V1.8 未实现**:固件无 HR 0x00FE 处理分支(且 DI 0x0008 Init Flag 恒为 0),此命令无实际效果,仅文档保留。
```
>>> 01 06 00 FE 00 01 xx xx (写 0x00FE=1)
<<< 01 06 00 FE 00 01 xx xx (Init Flag → 0)
@@ -302,13 +313,13 @@
|--------|------|------|------|
| 0x01 | Read Coils | ✗ | 不使用 |
| 0x02 | Read Discrete Inputs | ✓ | 车辆状态、故障、继电器、光耦 |
| 0x03 | Read Holding Registers | | 读所有配置参数 |
| 0x04 | Read Input Registers | ✓ | 读传感器数据 (32-bit 跨双寄存器) |
| 0x03 | Read Holding Registers | | **V1.8 未实现**(省 Flash 减配,返回异常 0x01) |
| 0x04 | Read Input Registers | ✓ | 读传感器数据 (32-bit 跨双寄存器);⚠ 0x0006/0x0007/0x000A/0x000B/0x000C 未实现,用 0x0100+ 全数据块 |
| 0x05 | Write Single Coil | ✗ | 不使用 |
| 0x06 | Write Single Register | ✓ | 写单个参数 |
| 0x06 | Write Single Register | ✓ | 写单个参数;⚠ 仅 0x0010/0x0011/0x0012 有效(V1.8 减配) |
| 0x0F | Write Multiple Coils | ✗ | 不使用 |
| 0x10 | Write Multiple Registers | | 批量写参数 |
| 0x11 | Report Slave ID | | 返回设备型号 + 运行状态 |
| 0x10 | Write Multiple Registers | | **V1.8 未实现**(省 Flash 减配,返回异常 0x01) |
| 0x11 | Report Slave ID | | **V1.8 未实现**(省 Flash 减配,返回异常 0x01) |
| N/A | **Active Push** | ✓ | 主动上报全数据块(格式同 FC 0x04 响应),需 HR 0x0010=1 使能 |
> **主动上报**:非标准 Modbus 功能。设备在 `Auto Rpt Enable=1` 时根据变化量阈值自动调速发送数据帧,帧格式与 FC 0x04 读 0x0100 起 19 个寄存器的响应一致。总线上的其他从机在上报期间保持静默,主机需在接收逻辑中处理非请求响应。
@@ -329,9 +340,10 @@ DLD154Pro 算法移植后,`MEASUREMENT_BASE = 524288 (2^19)`CH591R@60MHz
### 6.3 参数持久化
- `0x06` `0x10` 写入 Holding Register → 立即更新 RAM → 写入 DataFlash → 返回响应
- `0x06``0x10`,⚠ V1.8 起 0x10 未实现)写入 Holding Register → 立即更新 RAM → 写入 DataFlash → 返回响应
- Flash 写入失败 → 返回异常码 `0x04` (Slave Device Failure)
- 值超出范围(如灵敏度写 5)→ 返回异常码 `0x03` (Illegal Data Value)
-**V1.8 减配**:写寄存器仅剩 `0x0010`(主动上报使能)/`0x0011`(活动阈值)/`0x0012`(复位)三条有效;灵敏度/融合模式等配置请走 BLE 小程序
### 6.4 灵敏度与 ΔL/L 对应关系
@@ -456,8 +468,8 @@ DLD154Pro RS485 同时支持 700BS 协议(`g_fm_700bs_disable=0`)和 Modbus
| | bit5=线圈故障 | DI 0x0001 Loop Fault | ✅ |
| 0x1B 查询频率 | 3 字节 Freq | IR 0x000001 Freq (32bit) | ✅ |
| 0x2C 复位 | — | **HR 0x0012** 写 0x2C2C | ✅ V1.7: MCU 全复位 (SYS_ResetExecute)
| 0x3D 查拨码 | DIP1-5 | **IR 0x000C DIP Virtual** | V1.2 新增 (DLD154Pro 无物理拨码,虚拟映射) |
| 0xAA 心跳 Init_B | A1=首次 | **DI 0x0008 Init Flag** | V1.2 新增 |
| 0x3D 查拨码 | DIP1-5 | **IR 0x000C DIP Virtual** | V1.8 起未实现(IR 0x000C 减配,读返回异常 0x02 |
| 0xAA 心跳 Init_B | A1=首次 | **DI 0x0008 Init Flag** | V1.8 标注:固件恒为 0(未实现) |
| 0xAA 心跳 Fre_Err | bit0=下限异常 | **DI 0x0006 Freq Low Fault** | ✅ V1.2 新增 |
| | bit4=上限异常 | **DI 0x0007 Freq High Fault** | ✅ V1.2 新增 |
| 0xAA 心跳 主动上报 | 5s/1s/事件 | — | ✅ V1.6: Modbus 新增主动上报 (FC 0x04 响应格式, 800ms/150ms/事件立即) |
@@ -472,6 +484,7 @@ DLD154Pro RS485 同时支持 700BS 协议(`g_fm_700bs_disable=0`)和 Modbus
| 版本 | 日期 | 作者 | 变更 |
|------|------|------|------|
| V1.8 | 2026-08-27 | wangfq | **省 Flash 减配(实现状态如实标注)**FC 0x03(读保持寄存器)/0x10(批量写)/0x11Report Slave ID)未实现;IR 0x0006/0x0007Variation/0x000AFreq Sens/0x000BCondition/0x000CDIP Virtual)未实现(改读全数据块 0x010A/0x010B);HR 0x00000x0004/0x0009/0x000A 读写未实现(灵敏度等配置走 BLE);FC 0x06 仅剩 0x0010/0x0011/0x0012 可写;DI 0x0008 Init Flag 与 HR 0x00FE 标注未实现(固件恒 0/无分支) |
| V1.7 | 2026-07-31 | wangfq | 复位指令重构: HR 0x00FF 废弃, 新增 HR 0x0012 (System Cmd); 写 0x2C2C 触发 `SYS_ResetExecute()` MCU 全复位 (对齐 700BS 0x2C 行为); 0x2C2C 对应 700BS CMD_RESET_INIT 的 0x2C; +§4.7 示例更新 |
| V1.6 | 2026-07-30 | wangfq | 新增主动上报 & 全数据块: +IR 0x01000x0112 全数据块(19 reg, 含灵敏度/频率/融合模式/car_state/线圈/光耦/频率/CAPVD/Variation/断开计数/继电器计数/通过时间); +HR 0x0010 上报使能, +HR 0x0011 活动阈值; +§4.94.12 命令示例; +§6.7 主动上报机制(3 级速率: 空闲800ms/活动150ms/事件立即); 车间距/通过时间(10ms单位); 700BS 对照表更新 |
| V1.5 | 2026-07-30 | wangfq | 枚举再次重排: 且后移 (0=或,1=混行,2=ETC,3=且,4=仅地感,5=仅光耦,6=复位); 模式号引用同步更新 |