From 08df2ea6d7502d420dfd9772310bf58a29f5f30c Mon Sep 17 00:00:00 2001 From: wangfq Date: Wed, 22 Jul 2026 18:58:01 +0800 Subject: [PATCH] =?UTF-8?q?docs:=20700BS=20=E5=8D=8F=E8=AE=AE=20Markdown?= =?UTF-8?q?=20+=20Modbus=20V1.2=20700BS=20=E5=85=BC=E5=AE=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 新增 docs/rs485-700bs-protocol.md: 700BS V1.15 完整协议文档 - Modbus V1.2: DI +Freq Low/High Fault, +Init Flag; IR +DIP Virtual; HR +Device Reset(0x00FF), +Init Flag Clear(0x00FE) - +§7 700BS 兼容对照表 (FA/1B/2C/3D/AA → Modbus 寄存器映射) --- docs/rs485-700bs-protocol.md | 210 ++++++++++++++++++++++++++++++++++ docs/rs485-modbus-protocol.md | 54 ++++++++- 2 files changed, 261 insertions(+), 3 deletions(-) create mode 100644 docs/rs485-700bs-protocol.md diff --git a/docs/rs485-700bs-protocol.md b/docs/rs485-700bs-protocol.md new file mode 100644 index 0000000..a055b29 --- /dev/null +++ b/docs/rs485-700bs-protocol.md @@ -0,0 +1,210 @@ +# 车检器 RS485 通信协议 — DLD-700BS + +> 版本: V1.15 | 日期: 2022-08-19 | 来源: `reference/docs/A5 20220819 车检器RS485通信协议 DLD-700BS V1.15.pdf` +> +> 兼容产品: DLD-700BS 系列车检器 + +--- + +## 1. 物理层 + +| 参数 | 值 | +|------|-----| +| 接口 | RS485 半双工 | +| 波特率 | 9600 bps | +| 数据位 | 8 | +| 校验 | 无 (N) | +| 停止位 | 1 | +| 从机地址 | 0x01–0x10(16 个地址,DIP 拨码设置) | + +--- + +## 2. 地址码设置(DIP 拨码) + +| DIP7 | DIP8 | DIP9 | DIP10 | 地址 | +|------|------|------|-------|------| +| OFF | OFF | OFF | OFF | 0x01 | +| ON | OFF | OFF | OFF | 0x02 | +| OFF | ON | OFF | OFF | 0x03 | +| ON | ON | OFF | OFF | 0x04 | +| OFF | OFF | ON | OFF | 0x05 | +| ON | OFF | ON | OFF | 0x06 | +| OFF | ON | ON | OFF | 0x07 | +| ON | ON | ON | OFF | 0x08 | +| OFF | OFF | OFF | ON | 0x09 | +| ON | OFF | OFF | ON | 0x0A | +| OFF | ON | OFF | ON | 0x0B | +| ON | ON | OFF | ON | 0x0C | +| OFF | OFF | ON | ON | 0x0D | +| ON | OFF | ON | ON | 0x0E | +| OFF | ON | ON | ON | 0x0F | +| ON | ON | ON | ON | 0x10 | + +--- + +## 3. 通信数据包格式 + +主机发送固定 **3 字节**: + +``` +| STX | ADDR/CMD | XOR | +| 1 byte | 1 byte | 1 byte | +``` + +| 字段 | 类型 | 说明 | +|------|------|------| +| STX | uint8 | 起始字节 / 命令码 | +| ADDR | uint8 | 目标地址 (0x01–0x10),或命令码的组成部分 | +| XOR | uint8 | 异或校验:`XOR = STX ^ ADDR/CMD` | + +--- + +## 4. 命令集 + +### 4.1 查询有车状态及线圈好坏 + +**主机发送:** + +``` +| 0xFA | ADDR | XOR | +``` + +> 例:查询 1# 车检器 → `FA 01 FB` + +**从机回复:** + +``` +| 0xF5 | DATA | XOR | +``` + +| DATA 位 | 说明 | +|---------|------| +| bit7 | 车辆状态:0=无车,1=有车 | +| bit5 | 线圈状态:0=正常,1=线圈断开 | +| bit4–0 | 地址 (0x01–0x10) | +| XOR | `0xF5 ^ DATA` | + +> 例: +> - 1# 无车 → `F5 01 F4` +> - 2# 有车 → `F5 82 77` +> - 3# 无车+线圈断 → `F5 23 D6` + +--- + +### 4.2 查询线圈振荡频率 + +**主机发送:** + +``` +| 0x1B | ADDR | XOR | +``` + +> 例:查询 1# → `1B 01 1A` + +**从机回复:** + +``` +| 0x14 | Fre_1 | Fre_2 | Fre_3 | ADDR | XOR | +``` + +| 字段 | 说明 | +|------|------| +| Fre_1–3 | 3 字节频率 (big-endian): `Freq = (Fre_1 << 16) \| (Fre_2 << 8) \| Fre_3`,单位 Hz | +| XOR | `0x14 ^ Fre_1 ^ Fre_2 ^ Fre_3 ^ ADDR` | + +> 例: +> - 1# → `14 00 ED E8 01 10`,Freq = 0x00EDE8 = 60.904 kHz +> - 2# → `14 01 63 06 02 72`,Freq = 0x016306 = 90.886 kHz + +--- + +### 4.3 车检器复位重新初始化线圈 + +**主机发送:** + +``` +| 0x2C | ADDR | XOR | +``` + +> 例:复位 1# → `2C 01 2D` + +**从机无回复。** + +--- + +### 4.4 查询拨码开关 DIP1–5 设置 + +**主机发送:** + +``` +| 0x3D | ADDR | XOR | +``` + +> 例:查询 1# → `3D 01 3C` + +**从机回复:** + +``` +| 0x32 | DATA | ADDR | XOR | +``` + +| DATA 位 | 说明 | +|---------|------| +| bit4–0 | DIP1–5 状态:0=OFF,1=ON | + +> 例: +> - 1# → `32 0D 01 3E`(DIP1、DIP3、DIP4=ON,DIP2、DIP5=OFF) +> - 2# → `32 0A 02 3A`(DIP2、DIP4=ON,DIP1、DIP3、DIP5=OFF) + +--- + +### 4.5 主动上报心跳 (0xAA) + +空闲每隔 **5 秒**上报一次。线圈异常每隔 **1 秒**上报直到恢复。有车/无车事件**立即上报**。 + +**从机主动发送:** + +``` +| 0xAA | Init_B | State | Fre_Err | Fre_1 | Fre_2 | Fre_3 | ADDR | XOR | +``` + +| 字段 | 字节 | 说明 | +|------|------|------| +| Init_B | 1 | `A1`=设备复位后首次上报,`A0`=正常 | +| State | 1 | bit7=有车,bit5=线圈断开,bit4–0=地址 | +| Fre_Err | 1 | `0x00`=频率正常。bit0=1→下限异常;bit4=1→上限异常 | +| Fre_1–3 | 3 | 线圈振荡频率 (big-endian, Hz) | +| ADDR | 1 | 设备地址 | +| XOR | 1 | `0xAA ^ Init_B ^ State ^ Fre_Err ^ Fre_1 ^ Fre_2 ^ Fre_3 ^ ADDR` | + +> 复位触发条件:上电、协议控制复位(0x2C)、有限存在模式超时复位、重新连接线圈。 +> +> 例: +> - 1# 启动后首次上报 → `AA A1 01 00 00 BF 50 01 E4` +> - 1# 车进入 → `AA A0 81 00 00 BF 84 01 B1` +> - 1# 车离开 → `AA A0 01 00 00 BF 50 01 E5` +> - 1# 线圈断开 → `AA A0 21 00 00 BF 4E 01 DB`(持续每秒发送,直到恢复) + +--- + +## 5. 命令速查表 + +| STX | 方向 | 功能 | 回复 | +|-----|------|------|------| +| 0xFA | 主→从 | 查询有车 + 线圈状态 | F5 DATA XOR | +| 0x1B | 主→从 | 查询线圈频率 | 14 Fre1-3 ADDR XOR | +| 0x2C | 主→从 | 复位初始化线圈 | 无回复 | +| 0x3D | 主→从 | 查询 DIP1-5 | 32 DATA ADDR XOR | +| 0xAA | 从→主 | 主动心跳上报 | 不回复 | + +--- + +## 6. DLD154Pro 兼容说明 + +| 700BS 命令 | DLD154Pro 兼容 | 备注 | +|-----------|---------------|------| +| 0xFA 查询状态 | Modbus → DI 0x0000–01 | 等价覆盖 | +| 0x1B 查询频率 | Modbus → IR 0x0000–01 | 等价覆盖(32-bit) | +| 0x2C 复位 | Modbus → HR 0x00FF | 新增命令寄存器 | +| 0x3D 查拨码 | Modbus → IR 0x000C (DIP Virtual) | DLD154Pro 无物理拨码,虚拟映射 | +| 0xAA 心跳 | Modbus 无等价 | 主从架构限制,靠轮询 DI+IR 补偿 | diff --git a/docs/rs485-modbus-protocol.md b/docs/rs485-modbus-protocol.md index 33a4889..10ac269 100644 --- a/docs/rs485-modbus-protocol.md +++ b/docs/rs485-modbus-protocol.md @@ -1,6 +1,6 @@ # DLD154Pro RS485 Modbus RTU 协议 -> 版本: V1.1 | 日期: 2026-07-22 | 状态: 草案(待评审,未实现) +> 版本: V1.2 | 日期: 2026-07-22 | 状态: 草案(待评审,未实现) > > 适用产品: DLD154Pro (CH591R, 单路线圈车检器) > @@ -62,6 +62,11 @@ | 0x0003 | Opto Input | 光耦输入状态 (PB10) | 0=低, 1=高 | | 0x0004 | Power Up State | 上电初始化中 | 0=正常, 1=初始化 | | 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=复位后首次—上位机读后清零* | + +> **Init Flag 清除机制**:上位机读到 1 后,应发送 **写 HR 0x00FE=0x0001** 清零。参见 §4.7。 ### 3.2 输入寄存器 (Input Registers) — 功能码 0x04 @@ -79,6 +84,7 @@ | 0x0009 | HW Version | uint16 | 1 寄存器 | 硬件版本。例 `0x0301` = v3.01 | | 0x000A | Freq Sens | uint16 | 1 寄存器 | 当前灵敏度等级 (0=低, 1=中, 2=高) | | 0x000B | Condition | uint16 | 1 寄存器 | 环境活跃度 (0=安静, 1–100=嘈杂) | +| 0x000C | DIP Virtual | uint16 | 1 寄存器 | 虚拟拨码(700BS 兼容): bit[7:4]=function_mode, bit[3:0]=fusion_mode | > **32-bit 值换算**: > - 频率:`freq_hz = (reg[0x0000] << 16) | reg[0x0001]`,单位 Hz。典型空线圈 50–120kHz。 @@ -102,9 +108,11 @@ | 0x0009 | BT Timeout | 0–255 | 0 | R/W | 蓝牙空闲关闭超时 (分钟), 0=不关闭 | | 0x000A | Safe Timeout | 0–255 | 0 | R/W | 安全模式超时 (×10s), 0=关闭 | | 0x000B | Opto Func | 0–1 | 0 | **R** | 光耦功能: 0=雷达输入, 1=复位 | +| 0x00FE | Init Flag Clear | 0–1 | — | **W** | 写 1 清零 Init Flag (DI 0x0008) | +| 0x00FF | Device Reset | — | — | **W** | 写入 `0x5A5A` 触发复位初始化线圈(等效 700BS 0x2C) | > **只读寄存器 (0x0005–0x0008, 0x000B)**:写操作返回异常 0x02(Illegal Data Address)。 -> 这些参数只能通过 BLE 小程序修改。RS485 地址/波特率通过 Modbus 误改会立即失联。 +> **写入寄存器 (0x00FE, 0x00FF)**:只写不读。读返回 0x0000。写入非魔数值返回异常 0x03。 --- @@ -178,6 +186,22 @@ <<< 01 86 03 02 63 (异常: 功能码 0x86, 异常码 0x03=Illegal Data Value) ``` +### 4.7 触发设备复位 — 写 HR 0x00FF + +``` +>>> 01 06 00 FF 5A 5A xx xx (写 0x00FF=0x5A5A, 触发复位) +<<< 01 06 00 FF 5A 5A xx xx (回显, 随后设备复位) +``` + +> 复位后设备重新初始化线圈基线,Init Flag (DI 0x0008) 置 1。 + +### 4.8 清除 Init Flag — 写 HR 0x00FE + +``` +>>> 01 06 00 FE 00 01 xx xx (写 0x00FE=1) +<<< 01 06 00 FE 00 01 xx xx (Init Flag → 0) +``` + --- ## 5. 功能码支持矩阵 @@ -270,9 +294,33 @@ RS485 半双工时序:发送最后一字节后等待 **1 字节时间** 再切 --- -## 7. 版本历史 +## 7. 700BS 协议兼容对照 + +DLD154Pro RS485 同时支持 700BS 协议(`g_fm_700bs_disable=0`)和 Modbus RTU(`g_fm_700bs_disable=1`)。 +协议选择通过 BLE 小程序切换。参见 `docs/rs485-700bs-protocol.md`。 + +| 700BS 命令 | 700BS 字段 | Modbus 等价 | 说明 | +|-----------|-----------|------------|------| +| 0xFA 查询状态 | bit7=有车 | DI 0x0000 Car Present | ✅ | +| | bit5=线圈故障 | DI 0x0001 Loop Fault | ✅ | +| 0x1B 查询频率 | 3 字节 Freq | IR 0x0000–01 Freq (32bit) | ✅ | +| 0x2C 复位 | — | **HR 0x00FF** 写 0x5A5A | ✅ V1.2 新增 | +| 0x3D 查拨码 | DIP1-5 | **IR 0x000C DIP Virtual** | ✅ V1.2 新增 (DLD154Pro 无物理拨码,虚拟映射) | +| 0xAA 心跳 Init_B | A1=首次 | **DI 0x0008 Init Flag** | ✅ V1.2 新增 | +| 0xAA 心跳 Fre_Err | bit0=下限异常 | **DI 0x0006 Freq Low Fault** | ✅ V1.2 新增 | +| | bit4=上限异常 | **DI 0x0007 Freq High Fault** | ✅ V1.2 新增 | +| 0xAA 心跳 主动上报 | 5s/1s/事件 | — | ⚠️ Modbus 主从架构不支持 push,上位机周期性轮询 DI+IR 等价 | + +> **主动上报限制**:Modbus RTU 为严格主从协议,从机不能主动发送数据。 +> 700BS 的心跳/事件上报在 Modbus 模式下不可用。需上位机以 >=1s 周期轮询 DI 0x0000–01 +> 并通过边沿检测模拟事件触发。 + +--- + +## 8. 版本历史 | 版本 | 日期 | 作者 | 变更 | |------|------|------|------| +| 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.0 | 2026-07-22 | wangfq | 初版草案 |