docs: Modbus协议 V1.2→V1.3 修正对齐实际硬件参数
- 灵敏度档位 3→4 (范围 0-3, 默认 1) - MEASUREMENT_BASE 131072→524288 (CH591R@60MHz 无分频) - Origin 窗口 100→500 - 融合模式 5/6 待定义→已实现+状态机 - 命令示例数值对齐实际值 (Freq/CAPVD/Origin/Variation) - 700BS 标注为已完成 - 版本号 FW 3.00→3.01
This commit is contained in:
@@ -1,10 +1,10 @@
|
|||||||
# DLD154Pro RS485 Modbus RTU 协议
|
# DLD154Pro RS485 Modbus RTU 协议
|
||||||
|
|
||||||
> 版本: V1.2 | 日期: 2026-07-22 | 状态: 草案(待评审,未实现)
|
> 版本: V1.3 | 日期: 2026-07-29 | 状态: 定稿(待编码实现)
|
||||||
>
|
>
|
||||||
> 适用产品: DLD154Pro (CH591R, 单路线圈车检器)
|
> 适用产品: DLD154Pro (CH591R, 单路线圈车检器)
|
||||||
>
|
>
|
||||||
> RS485 支持两种协议:700BS(后续定义)和 Modbus RTU。
|
> RS485 支持两种协议:700BS(已完成)和 Modbus RTU(待实现)。
|
||||||
> 协议选择通过 `g_function_mode` bit0 控制(BLE 小程序设置 `direction_mode` 高 4 位的 bit0)。
|
> 协议选择通过 `g_function_mode` bit0 控制(BLE 小程序设置 `direction_mode` 高 4 位的 bit0)。
|
||||||
|
|
||||||
---
|
---
|
||||||
@@ -82,21 +82,21 @@
|
|||||||
| 0x0007 | Variation Lo | int16 | | 变化量,低 16 位 |
|
| 0x0007 | Variation Lo | int16 | | 变化量,低 16 位 |
|
||||||
| 0x0008 | FW Version | uint16 | 1 寄存器 | 固件版本,高字节=主版本,低字节=子版本。例 `0x0300` = v3.00 |
|
| 0x0008 | FW Version | uint16 | 1 寄存器 | 固件版本,高字节=主版本,低字节=子版本。例 `0x0300` = v3.00 |
|
||||||
| 0x0009 | HW Version | uint16 | 1 寄存器 | 硬件版本。例 `0x0301` = v3.01 |
|
| 0x0009 | HW Version | uint16 | 1 寄存器 | 硬件版本。例 `0x0301` = v3.01 |
|
||||||
| 0x000A | Freq Sens | uint16 | 1 寄存器 | 当前灵敏度等级 (0=低, 1=中, 2=高) |
|
| 0x000A | Freq Sens | uint16 | 1 寄存器 | 当前灵敏度等级 (0=低, 1=中, 2=高, 3=最高) |
|
||||||
| 0x000B | Condition | uint16 | 1 寄存器 | 环境活跃度 (0=安静, 1–100=嘈杂) |
|
| 0x000B | Condition | uint16 | 1 寄存器 | 环境活跃度 (0=安静, 1–100=嘈杂) |
|
||||||
| 0x000C | DIP Virtual | uint16 | 1 寄存器 | 虚拟拨码(700BS 兼容): bit[7:4]=function_mode, bit[3:0]=fusion_mode |
|
| 0x000C | DIP Virtual | uint16 | 1 寄存器 | 虚拟拨码(700BS 兼容): bit[7:4]=function_mode, bit[3:0]=fusion_mode |
|
||||||
|
|
||||||
> **32-bit 值换算**:
|
> **32-bit 值换算**:
|
||||||
> - 频率:`freq_hz = (reg[0x0000] << 16) | reg[0x0001]`,单位 Hz。典型空线圈 50–120kHz。
|
> - 频率:`freq_hz = (reg[0x0000] << 16) | reg[0x0001]`,单位 Hz。典型空线圈 50–120kHz。
|
||||||
> - CAPVD:`capvd = (reg[0x0002] << 16) | reg[0x0003]`,归一化到 `MEASUREMENT_BASE = 131072`。
|
> - CAPVD:`capvd = (reg[0x0002] << 16) | reg[0x0003]`,归一化到 `MEASUREMENT_BASE = 524288`。
|
||||||
> - Origin:`origin = (reg[0x0004] << 16) | reg[0x0005]`,100 次滑动平均累加值。
|
> - Origin:`origin = (reg[0x0004] << 16) | reg[0x0005]`,500 窗滑动平均累加值。
|
||||||
> - Variation:`var = (int32_t)((reg[0x0006] << 16) | reg[0x0007])`,正值=频率降低(可能有车),负值=频率升高。
|
> - Variation:`var = (int32_t)((reg[0x0006] << 16) | reg[0x0007])`,正值=频率降低(可能有车),负值=频率升高。
|
||||||
|
|
||||||
### 3.3 保持寄存器 (Holding Registers) — 功能码 0x03 / 0x06 / 0x10
|
### 3.3 保持寄存器 (Holding Registers) — 功能码 0x03 / 0x06 / 0x10
|
||||||
|
|
||||||
| 地址 | 名称 | 范围 | 默认 | R/W | 说明 |
|
| 地址 | 名称 | 范围 | 默认 | R/W | 说明 |
|
||||||
|------|------|------|------|-----|------|
|
|------|------|------|------|-----|------|
|
||||||
| 0x0000 | Sensitivity | 0–2 | 2 | R/W | 灵敏度等级 (0=低, 1=中, 2=高) |
|
| 0x0000 | Sensitivity | 0–3 | 1 | R/W | 灵敏度等级 (0=低, 1=中, 2=高, 3=最高) |
|
||||||
| 0x0001 | Fusion Mode | 0–6 | 0 | R/W | 输出组合模式(见 §6.5) |
|
| 0x0001 | Fusion Mode | 0–6 | 0 | R/W | 输出组合模式(见 §6.5) |
|
||||||
| 0x0002 | Hold Time | 0–255 | 0 | R/W | 有限存在时间 (×5s), 0=永久存在 |
|
| 0x0002 | Hold Time | 0–255 | 0 | R/W | 有限存在时间 (×5s), 0=永久存在 |
|
||||||
| 0x0003 | Output Delay | 0–255 | 10 | R/W | 离开延时 (×50ms), 例 10=500ms |
|
| 0x0003 | Output Delay | 0–255 | 10 | R/W | 离开延时 (×50ms), 例 10=500ms |
|
||||||
@@ -134,10 +134,10 @@
|
|||||||
```
|
```
|
||||||
>>> 01 04 00 00 00 08 70 1F (读 0x0000 起 8 个寄存器)
|
>>> 01 04 00 00 00 08 70 1F (读 0x0000 起 8 个寄存器)
|
||||||
<<< 01 04 10
|
<<< 01 04 10
|
||||||
00 01 86 A0 ← Freq = 0x000186A0 = 100000 Hz
|
00 01 38 80 ← Freq = 0x00013880 = 80000 Hz
|
||||||
00 02 00 7C ← CAPVD = 0x0002007C = 131196
|
00 07 FF C8 ← CAPVD = 0x0007FFC8 = 524200
|
||||||
00 01 FF F3 ← Origin = 0x0001FFF3 = 131059
|
00 08 00 00 ← Origin = 0x00080000 = 524288
|
||||||
FF FF 00 99 ← Var = 0xFFFF0099 = −65383 (频率降低)
|
FF FF FF A8 ← Var = 0xFFFFFFA8 = −88 (频率升高,有车)
|
||||||
XX XX
|
XX XX
|
||||||
```
|
```
|
||||||
|
|
||||||
@@ -147,17 +147,17 @@
|
|||||||
|
|
||||||
```
|
```
|
||||||
>>> 01 03 00 00 00 05 84 09 (读 5 个: 灵敏度/融合模式/存在时间/延时/频率档)
|
>>> 01 03 00 00 00 05 84 09 (读 5 个: 灵敏度/融合模式/存在时间/延时/频率档)
|
||||||
<<< 01 03 0A 00 02 00 00 00 00 00 0A 00 00 XX XX
|
<<< 01 03 0A 00 01 00 00 00 00 00 0A 00 00 XX XX
|
||||||
→ 灵敏度=2(高), 融合模式=0(仅地感), 永久存在, 延时=500ms, 高频
|
→ 灵敏度=1(中), 融合模式=0(仅地感), 永久存在, 延时=500ms, 高频
|
||||||
```
|
```
|
||||||
|
|
||||||
### 4.4 写单个寄存器 — 功能码 0x06
|
### 4.4 写单个寄存器 — 功能码 0x06
|
||||||
|
|
||||||
修改灵敏度为"中":
|
修改灵敏度为"高":
|
||||||
|
|
||||||
```
|
```
|
||||||
>>> 01 06 00 00 00 01 49 F3 (写 0x0000=1)
|
>>> 01 06 00 00 00 02 88 32 (写 0x0000=2)
|
||||||
<<< 01 06 00 00 00 01 49 F3
|
<<< 01 06 00 00 00 02 88 32
|
||||||
```
|
```
|
||||||
|
|
||||||
修改融合模式为"地感或雷达":
|
修改融合模式为"地感或雷达":
|
||||||
@@ -182,7 +182,7 @@
|
|||||||
写入超出范围的灵敏度值:
|
写入超出范围的灵敏度值:
|
||||||
|
|
||||||
```
|
```
|
||||||
>>> 01 06 00 00 00 05 88 32 (写 0x0000=5, 超出 0–2)
|
>>> 01 06 00 00 00 05 88 32 (写 0x0000=5, 超出 0–3)
|
||||||
<<< 01 86 03 02 63 (异常: 功能码 0x86, 异常码 0x03=Illegal Data Value)
|
<<< 01 86 03 02 63 (异常: 功能码 0x86, 异常码 0x03=Illegal Data Value)
|
||||||
```
|
```
|
||||||
|
|
||||||
@@ -224,7 +224,7 @@
|
|||||||
|
|
||||||
### 6.1 为什么 CAPVD/Origin/Variation 用 2 个寄存器?
|
### 6.1 为什么 CAPVD/Origin/Variation 用 2 个寄存器?
|
||||||
|
|
||||||
DLD154V4B 算法移植后,`MEASUREMENT_BASE = 131072 (2^17)`,IIR 滤波后的 CAPVD 和 Origin 是 `uint32_t` 类型,典型值在 10 万级,远超 16 位(65535)。Variation 是差值且可能为负,需要完整 32-bit 有符号表示。因此各占 2 个 Modbus 寄存器(寄存器对,大端序)。
|
DLD154Pro 算法移植后,`MEASUREMENT_BASE = 524288 (2^19)`(CH591R@60MHz 无内部分频,需要比 DLD154V4B 更大的 BASE)。IIR 滤波后的 CAPVD 和 Origin 是 `uint32_t` 类型,典型值在 50 万级,远超 16 位(65535)。Variation 是差值且可能为负,需要完整 32-bit 有符号表示。因此各占 2 个 Modbus 寄存器(寄存器对,大端序)。
|
||||||
|
|
||||||
### 6.2 为什么不通过 Modbus 修改 RS485 地址/波特率?
|
### 6.2 为什么不通过 Modbus 修改 RS485 地址/波特率?
|
||||||
|
|
||||||
@@ -242,11 +242,14 @@ DLD154V4B 算法移植后,`MEASUREMENT_BASE = 131072 (2^17)`,IIR 滤波后
|
|||||||
|
|
||||||
| 灵敏度值 | SensTable 进入 | ΔL/L 进入 | SensTable1 离开 | ΔL/L 离开 |
|
| 灵敏度值 | SensTable 进入 | ΔL/L 进入 | SensTable1 离开 | ΔL/L 离开 |
|
||||||
|---------|---------------|-----------|----------------|-----------|
|
|---------|---------------|-----------|----------------|-----------|
|
||||||
|
| 3 (最高) | 14 | **0.043%** | 12 | 0.037% |
|
||||||
| 2 (高) | 28 | **0.085%** | 16 | 0.049% |
|
| 2 (高) | 28 | **0.085%** | 16 | 0.049% |
|
||||||
| 1 (中) | 54 | **0.165%** | 32 | 0.098% |
|
| 1 (中) | 54 | **0.165%** | 32 | 0.098% |
|
||||||
| 0 (低) | 108 | **0.330%** | 81 | 0.247% |
|
| 0 (低) | 108 | **0.330%** | 81 | 0.247% |
|
||||||
|
|
||||||
ΔL/L 越大越不灵敏。高灵敏度 (2) 适合安静环境,低灵敏度 (0) 适合强干扰环境。
|
ΔL/L 越大越不灵敏。最高灵敏度 (3) 适合摩托车/安静环境,低灵敏度 (0) 适合强干扰环境。
|
||||||
|
|
||||||
|
> ⚠ 第 3 档 (sens=14) 信噪比余量仅约 2:1(20°C 温漂 ≈0.1% 感量偏移),仅推荐摩托车/小型车辆检测场景,需确保线圈安装质量。
|
||||||
|
|
||||||
### 6.5 输出组合模式 (Fusion Mode)
|
### 6.5 输出组合模式 (Fusion Mode)
|
||||||
|
|
||||||
@@ -261,15 +264,19 @@ DLD154V4B 算法移植后,`MEASUREMENT_BASE = 131072 (2^17)`,IIR 滤波后
|
|||||||
|
|
||||||
| 值 | 模式 | 继电器吸合条件 | 适用场景 |
|
| 值 | 模式 | 继电器吸合条件 | 适用场景 |
|
||||||
|----|------|--------------|---------|
|
|----|------|--------------|---------|
|
||||||
| 0 | 默认 (仅地感) | 线圈有车 | 纯线圈场景(光耦未接雷达时也用此模式) |
|
| 0 | 光耦复位 + 地感 | 线圈有车(光耦用于远程复位) | 需要远程复位功能 |
|
||||||
| 1 | 仅地感 | 线圈有车 | 同 0,显式指定忽略雷达 |
|
| 1 | 仅地感 | 线圈有车 | 纯线圈场景(默认,未接光耦时也用此模式) |
|
||||||
| 2 | 仅雷达 | 光耦输入有效(雷达有车) | 纯雷达,地感只做背景监控 |
|
| 2 | 仅光耦 | 光耦输入有效(雷达有车) | 纯雷达,地感只做背景监控 |
|
||||||
| 3 | 地感 **或** 雷达 | 线圈 OR 雷达 | 互补冗余,任一触发即吸合 |
|
| 3 | 地感 **或** 光耦 | 线圈 OR 雷达 | 互补冗余,任一触发即吸合 |
|
||||||
| 4 | 地感 **且** 雷达 | 线圈 AND 雷达 | 双确认,防地感误触(如行人/拖车) |
|
| 4 | 地感 **且** 光耦 | 线圈 AND 雷达 | 双确认,防地感误触(如行人/拖车) |
|
||||||
| 5 | 混行模式 | 待定义 | 混合交通流场景 |
|
| 5 | 人车混行防砸 | 有车后 coil OR opto,离场 3s 窗口内光耦有效 | 混合交通流防砸人 |
|
||||||
| 6 | ETC 模式 | 待定义 | ETC 专用逻辑 |
|
| 6 | ETC 模式 | 有车后 coil OR opto,光耦断开 500ms 防抖才释放 | ETC 专用逻辑 |
|
||||||
|
|
||||||
> **注意**:当 `g_fm_radar_input_disable = 1`(光耦配置为复位功能)时,`fusion_mode` 无效,继电器仅由线圈检测结果驱动。
|
**模式 5(人车混行防砸)状态机**:IDLE(仅线圈检测)→ 线圈有车 → ARMED(线圈||光耦)→ 两者均释放 → WINDOW(3s 防砸窗口,光耦触发即续吸,连续进入持续防砸)→ 3s 超时 → IDLE。
|
||||||
|
|
||||||
|
**模式 6(ETC)状态机**:IDLE(仅线圈检测)→ 线圈有车 → ARMED(线圈||光耦)→ 两者均释放 → DEBOUNCE(500ms 防抖,期间触发即回 ARMED)→ 超时 → IDLE。
|
||||||
|
|
||||||
|
> **注意**:当光耦配置为复位功能(`function_mode` bit1=1)时,`fusion_mode` 无效,继电器仅由线圈检测结果驱动。模式 0 下光耦输入低电平 ≥400ms 后上升沿触发 `SYS_ResetExecute()` 芯片全复位。
|
||||||
|
|
||||||
### 6.6 实现要点(待编码时参考)
|
### 6.6 实现要点(待编码时参考)
|
||||||
|
|
||||||
@@ -321,6 +328,7 @@ DLD154Pro RS485 同时支持 700BS 协议(`g_fm_700bs_disable=0`)和 Modbus
|
|||||||
|
|
||||||
| 版本 | 日期 | 作者 | 变更 |
|
| 版本 | 日期 | 作者 | 变更 |
|
||||||
|------|------|------|------|
|
|------|------|------|------|
|
||||||
|
| V1.3 | 2026-07-29 | wangfq | 修正: 灵敏度档位 3→4 (范围 0–3, 默认 1); MEASUREMENT_BASE 131072→524288; Origin 窗口 100→500; 融合模式 5/6 待定义→已实现+状态机; 命令示例数值对齐实际硬件; 700BS 标注为已完成; 版本号 FW 3.00→3.01 |
|
||||||
| V1.2 | 2026-07-22 | wangfq | 700BS 兼容: +DI Freq Low/High Fault, +DI Init Flag, +IR DIP Virtual, +HR Device Reset(0x00FF), +HR Init Flag Clear(0x00FE); +§7 700BS 兼容对照表 |
|
| V1.2 | 2026-07-22 | wangfq | 700BS 兼容: +DI Freq Low/High Fault, +DI Init Flag, +IR DIP Virtual, +HR Device Reset(0x00FF), +HR Init Flag Clear(0x00FE); +§7 700BS 兼容对照表 |
|
||||||
| V1.1 | 2026-07-22 | wangfq | 修正: CAPVD/Origin/Variation 扩展为 32-bit (×2 寄存器); Output Mode 删除脉冲模式(仅存在输出); 新增 Fusion Mode(输出组合模式 0-6); direction_mode 字段重构说明 |
|
| V1.1 | 2026-07-22 | wangfq | 修正: CAPVD/Origin/Variation 扩展为 32-bit (×2 寄存器); Output Mode 删除脉冲模式(仅存在输出); 新增 Fusion Mode(输出组合模式 0-6); direction_mode 字段重构说明 |
|
||||||
| V1.0 | 2026-07-22 | wangfq | 初版草案 |
|
| V1.0 | 2026-07-22 | wangfq | 初版草案 |
|
||||||
|
|||||||
Reference in New Issue
Block a user