# DLD960 串口通信协议

# 1 通信说明

## 1.1 通信方式

串口通信，波特率：115200

# 2 协议格式

Package

| 1Byte | 3Bytes | 0~64Bytes | 2Bytes |
| --- | --- | --- | --- |
| Magic byte | Header | Value | Check Bytes |

## 2.1 Magic Byte(1Byte)

标识协议类型，也表示数据包开始信息。

| Magic Byte | 说明 |
| --- | --- |
| 0x7F | 屏、地感检测、探头的配置和查询协议，或者部分雷达的协议 |
| 0x8F | 支持DBN查询和配置的专有协议 |

## 2.2 Header(3Bytes)

当Magic Byte为 0x7F时，Header字节定义如下：

| 1Byte | 1Byte | 1Byte |
| --- | --- | --- |
| Addr 地址 | LEN 数据长度 | CMD 命令字节 |

*   LEN数据长度，表示数据包的有效数据(Value)长度，包括命令(CMD Byte)和数据(Data Bytes)；
*   CMD 命令字节；
*   该协议的详细说明参考《DCP101点阵驱动说明》以及相关的地感检测485协议

当Magic Byte为0x8F时，Header字节定义如下：

| 1Byte | 1Byte | 1Byte |
| --- | --- | --- |
| SubPkgFlag 分包标记 | LEN 数据长度 | CMD 命令字节 |

> 分包标记 SubPkgFlag，高四位表示分包数量SubAmount，低四位表示为当前分包中第几个分包SubSequence，其中SubSequence = [1,SubAmount]：
*   00表示无分包，是一条数据完整的记录；
*   当SubAmount不为0时，SubSequence从1开始到SubAmount结束，整合为一条完整的数据包。

## 2.3 校验字节(Check Bytes：2Bytes)

当Magic Byte为0x7F时，校验字节实现参考《DCP101点阵驱动说明》《DPG100 485通信协议》 和相关的地感检测485协议说明，部分雷探头的协议也需要支持0x7F。
当Magic Byte为0x8F时，校验字节实现如下：

| 1Byte | 1Byte |
| --- | --- |
| XOR 异或校验 | SUM 和校验 |

> XOR 异或校验，校验从分包标记字节开始，到命令数据的最后一个字节结束；
> SUM 和校验，校验从分包标记字节开始，到命令数据的最后一个字节结束。

# 3 Cmd详解

## 3.1 更改设备序列码(0x09)

|  | Header | Dev_Serial |
| --- | --- | --- |
| **Value(Hex)** | 00 08 09 | xx |
| **Length** | 3 Byte | 6 Byte |

返回：

|  | Header | status |
| --- | --- | --- |
| **Value(Hex)** | 00 01 11 | 00/01 |
| **Length** | 3 Byte | 1 Byte |

> **status**: 00 success, 01 fail

## 3.2 查询设备信息命令(0x10)

|  | Header | Data Value |
| --- | --- | --- |
| **Value(Hex)** | 00 01 10 |  |
| **Length** | 3 Byte | 0 Byte |

返回:

|  | Header | Dev_Serial | Hard Ver | Soft Ver | Model | Num | Sub_Code | Bus1 | Bus2 | Bus3 | Bus4 |
| --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- |
| **Value(Hex)** | 00 1C 10 | xx | 01 01 | 01 01 | xx | xx | xx | xx | xx | xx | xx |
| **Length** | 3 Byte | 6 Byte | 2 Byte | 2 Byte | 7~10 Byte | 6 Byte | 2 Byte | 1 Byte | 1 Byte | 1 Byte | 1 Byte |
| **Describe** |  | 序列码 | 硬件版本号 | 软件版本号 | 产品型号 | 产品编码 | 子功能代码 | 总线1探头数 | 总线2 | 总线3 | 总线4 |

> Model: 当首字节的值在[1,12]内时表示Mode的有效字节长度。
> Sub_Code： 表示子功能代码 `SUB_CODE`，各个比特位对应不同的子功能，0表示禁用，1表示启用

| [0] | [1] | [2] | [3] | [4] | [5] | [6] | [7] |
| --- | --- | --- | --- | --- | --- | --- | --- |
| net | iot | RFU | RFU | RFU | RFU | RFU | RFU |
| 网络 | MQTT |  |  |  |  |  |  |

| [8] | [9] | [10] | [11] | [12] | [13] | [14] | [15] |
| --- | --- | --- | --- | --- | --- | --- | --- |
| RFU | RFU | RFU | RFU | RFU | RFU | RFU | RFU |
|  |  |  |  |  |  |  |  |

## 3.3 设置SSC网络配置(0x11)

|  | Header | Dev IP | Subnet Mask | Route IP | LSSC IP | DNS | Port |
| --- | --- | --- | --- | --- | --- | --- | --- |
| **Value(Hex)** | 00 19 11 | xx | xx | xx | xx | xx | xx |
| **Length** | 3 Byte | 4 Byte | 4 Byte | 4 Byte | 4 Byte | 4 Byte | 10 Byte |

返回：

|  | Header | status |
| --- | --- | --- |
| **Value(Hex)** | 00 01 11 | 00/01 |
| **Length** | 3 Byte | 1 Byte |

> **status**: 00 success, 01 fail

## 3.4 查询SSC网络配置(0x12)

|  | Header | Data |
| --- | --- | --- |
| **Value(Hex)** | 00 01 12 |  |
| **Length** | 3 Byte | 0 Byte |

返回：

|  | Header | Dev IP | Subnet Mask | Route IP | LSSC IP | DNS | Port |
| --- | --- | --- | --- | --- | --- | --- | --- |
| **Value(Hex)** | 00 19 12 | xx | xx | xx | xx | xx | 00 |
| **Length** | 3 Byte | 4 Byte | 4 Byte | 4 Byte | 4 Byte | 4 Byte | 10 Byte |

## 3.5 设置IoT网络配置(0x13)

|  | Header | IoT Host(Domain name/IP) + Port + ClientID + Username + Password |
| --- | --- | --- |
| **Value(Hex)** | xx xx 13 | xx 00 xx 00 xx 00 xx 00 xx |
| **Length** | 3 Byte | xx Byte |

> 注：
*   数据部分的不同字段通过 0x00 分隔
*   ClientID 为空时用一个空格符替代

返回:

|  | Header | Status |
| --- | --- | --- |
| **Value(Hex)** | 00 01 13 | 00/01 |
| **Length** | 3 Byte | 1 Byte |

> **Status**: 00 success, 01 failed

## 3.6 查询IoT网络配置(0x14)

|  | Header | Data |
| --- | --- | --- |
| **Value(Hex)** | 00 01 14 |  |
| **Length** | 3 Byte | 0 Byte |

返回：

|  | Header | IoT Host(Domain name/IP) |
| --- | --- | --- |
| **Value(Hex)** | 00 xx 14 | xx |
| **Length** | 3 Byte | xx Byte |

## 3.7 设置设备Topic(0x15)

|  | Header | ClientID_Enable + Topic_Pub + Topic_Sub |
| --- | --- | --- |
| **Value(Hex)** | xx xx 15 | xx 00 xx 00 |
| **Length** | 3 Byte | xx Byte |

*   数据部分不同字段通过0x00 来分隔
*   Client_Enable: 0x00 disable, 0x01 enable

返回:

|  | Header | Status |
| --- | --- | --- |
| **Value(Hex)** | 00 01 15 | 00/01 |
| **Length** | 3 Byte | 1 Byte |

> **Status**: 00 success, 01 failed

## 3.8 查询设备Topic(0x16)

发送:

|  | Header |  |
| --- | --- | --- |
| **Value(Hex)** | 00 01 16 |  |
| **Length** | 3 Byte |  |

> **Status**: 00 success, 01 failed

返回：

|  | Header | ClientID_Enable + Topic_Pub + Topic_Sub |
| --- | --- | --- |
| **Value(Hex)** | xx xx 16 | xx 00 xx 00 |
| **Length** | 3 Byte | xx Byte |

## 3.9 验证设备密码(0x1C)

|  | Header | Password |
| --- | --- | --- |
| **Value(Hex)** | 00 07 1C | 31 32 33 34 35 36 |
| **Length** | 3 Byte | 6 Byte |

返回：

|  | Header | Status |
| --- | --- | --- |
| **Value(Hex)** | 00 01 1C | 00/01 |
| **Length** | 3 Byte | 1 Byte |

> Status: 00 Success, 01 Failed

## 3.10 设置设备密码(0x1D)

|  | Header | Old Password | New Password |
| --- | --- | --- | --- |
| **Value(Hex)** | 00 0D 1D |  |  |
| **Length** | 3  Byte | 6 Byte | 6 Byte |

返回：

|  | Header | Status |
| --- | --- | --- |
| **Value(Hex)** | 00 02 1D | 00/01 |
| **Length** | 3 Byte | 1 Byte |

## 3.11 设备出厂初始化(0x1E)

|  | Header | Data |
| --- | --- | --- |
| **Value(Hex)** | 00 01 1E |  |
| **Length** | 3 Byte | 0Byte |

返回：

|  | Header | Status |
| --- | --- | --- |
| **Value(Hex)** | 00 02 1E | 00/01 |
| **Length** | 3 Byte | 1 Byte |

## 3.12 设备复位(0x1F)

|  | Header | Data |
| --- | --- | --- |
| **Value(Hex)** | 00 01 1F |  |
| **Length** | 3 Byte | 0 Byte |

设备无回复。

## 3.13 设置车检器多路参数(0x63)

|  | Header | AutoMode + Amount + Param[Sensitivity, Loop_Delay, Output_Mode, Exist_Mode, Direction_Mode] |
| --- | --- | --- |
| **Value(Hex)** | 00 xx 63 | xx |
| **Length** | 3 Byte | (2 + 5 * Amount) Byte |

*   AutoMode: 是否处于自动模式（自动调频），0表示不启用，默认0。
*   Sensitivity： 低四位表示灵敏度，0~9级，值越大，灵敏度越高，默认7；高四位表示高低频，其中，[4,5]表示线圈的高低频。
*   Loop_Delay: 地感延时时间，0~200， 0.1s为一级，延时时间范围：[0, 20秒]；
*   Output_Mode： 低三位有效，地感输出方式，0 - 存在输出，1-进入脉冲，2-离开脉冲，3-方向判别；高5位表示SafeMode：是否开启安全模式， 0 关闭，非 0 开启安全模式，分钟为单位。
*   Exist_Mode：低四位表示地感存在方式，0-永久存在，非0-有限存在的分钟数；
*   Direction_Mode:
    *   低三位表示方向判别模式，0 表示触发模式， 1-6 表示方向判别的输出模式，对应以前的 0-5,   update 2023-02-24；
    *   高四位表示Function_Mode，功能模式，是否启用特殊的模式

|  | Header | Status |
| --- | --- | --- |
| **Value(Hex)** | 00 02 63 | 00/01 |
| **Length** | 3 Byte | 1 Byte |

## 3.14 读取车检器多路参数(0x64)

|  | Header | Param |
| --- | --- | --- |
| **Value(Hex)** | 00 01 64 |  |
| **Length** | 3 Byte |  |

返回：

|  | Header | AutoMode+Amount + Data[Sensitivity, Loop_Delay, Output_Mode, Exist_Mode, Direction_Mode, freq1,  freq2, freq3] |
| --- | --- | --- |
| **Value(Hex)** | 00 xx 64 | XX |
| **Length** | 3 Byte | (2 + 8 * Amount) Byte |

## 3.15 设置主动上报(0xC5)

设置主动上报是否使能、类型、时长等。

| 7Fh | ADDR | Len | C5 | SensType(1Byte) | Enable(1Byte) | Interval(1Byte) | Timeout(1Byte) | XOR | SUM |
| --- | --- | --- | --- | --- | --- | --- | --- | --- | --- |

> Enable: 是否使能，第0位 0 禁用， 1 使能； 0x10表示只上报一次，此时相当于查询功能；第5位表示是否环境评估，如0x21，表示环境评估类型
> Interval: 当最高位为0时，上报不需要确认，低七位表示上报间隔，0表示实时，低七位非0表示以秒为单位的上报的间隔；最高位为1时，表示上报需要回复确认。
> Timeout: 单位：分钟；0表示没有时间限制。

## 3.16 设备主动上报传感信息(0xC0)

设备主动上报传感信息指令，具体传感数据需要根据不同的类型进行解析。

| 7Fh | ADDR | Len | C0 | SensType(1Byte) | SubPkgFlag(1Byte) | SensData | XOR | SUM |
| --- | --- | --- | --- | --- | --- | --- | --- | --- |

SensType: 传感数据类型
SubPkgFlag: 分包标记，高四位表示分包数量 SubAmount，低四位表示为当前分包中第几个分包 SubSequence，其中 SubSequence = [1,SubAmount]：
*   00 表示无分包，是一条数据完整的记录；
*   当SubAmount不为0时，SubSequence从1开始到SubAmount结束，整合为一条完整的数据包。
*   当SensType为0x05时，SubPkgFlag作为传感数据使用。
*   当SensType为0x06、0x07、0x09时，SubPkgFlag的Seq和SubAmount分开各用一个字节表示。

SensData：传感数据

| SensType | 类型说明 | SensData | 传感数据说明 |
| --- | --- | --- | --- |
| 0x0C | 多线圈传感信息 |  | 四路线圈 |

上报线圈传感数据单元（多路线圈，每一路线圈单元的配置）

| 字段 | 字节数 | 内容 | 详情 |
| --- | --- | --- | --- |
| 配置 1 | 1 | freq_level, Direction，freq_type, sens | 线圈 1 配置<br>freq_level:高低频，两个比特位，00 表示高频(33nF),01表示中高(43nF), 10表示中低(66nF), 11表示低频(76nF)。<br>Direction: 0 表示触发，1 表示方向判别<br>freq_type: 0 表示初始频率，1 表示当前实时频率。<br>sens：低四位表示当前的灵敏度等级 |
| 线圈评估条件 | 1 | condition, loop_state | loop_condition 正常（0）有效，环境状态条件（环境状态评估值，值越大，干扰越大），高四位有效。低四位中，其中第3位表示线圈状态，0 表示正常，1 表示线圈断开；第 2 位表示有无车，0 表示无车，1 表示有车；低两位表示**杂项类型**，0b00表示时间量，0b01表示线圈断开次数；0b10表示车流量数 |
| 频率 1 | 3 | frequent | 低字节在前 |
| 变化量 1 | 2 | variation | 低字节在前 |
| 杂项 | 4 | in_out_passtime/cut_amount/flow_amount | **杂项类型**，可能是时间量，也可能是线圈断开次数、车流量数，说明：<br>1、通过时间或车间距，5ms为单位，最大计时（）<br>2、线圈断开次数<br>3、车流量数 |

eg:

`7F 00 2F C0 0C 00 D2 00 00 00 00 00 00 00 00 00 00 52 00 00 00 00 00 00 00 00 00 00 92 00 00 00 00 00 00 00 00 00 00 D2 00 00 00 00 00 00 00 00 00 00 23 83`

**注意，如果有续包，最后一包上位机无返回**。中间续包上位机返回传感类型，当前收到包的序列和子包的数量：

| 7Fh | ADDR | 07 | C0 | SensType | Seq(1Byte) | SubAmount(1Byte) | XOR | SUM |
| --- | --- | --- | --- | --- | --- | --- | --- | --- |

---

# 修订记录

| 版本 | 修订时间 | 修订说明 | 修订人 |
| --- | --- | --- | --- |
|  |  |  |  |
| V1.00 | 2026-03-11 | 创建协议初始版本 | wangfq |
| V1.01 | 2026-06-22 | 补充遗漏的接口说明 | wangfq |
