docs(协议): TCP JSON V1.03 + IoT MQTT V1.07 — log_* 命令完善传感快照流 (2026-08-18)
- log_stat/log_query/log_clear 复用 stream 字段区分 event/snapshot(与 BLE 0x28/0x2A 同语义) - 快照统计 capacity 随芯片动态(48064~449472);快照分页 count≤2(SnapRec 64B 原始结构 JSON 化,channels 对齐 0xC0) - 快照清除审计留痕 + 阻塞时长说明(事件 2.8s / 快照 45ms) - capacity/count 类型 uint16→uint32 修正(W25Q256 事件流 130944 超 16bit) - README/技术规格书协议矩阵/产品手册相关文档表同步
This commit is contained in:
@@ -58,8 +58,8 @@ DLD960 是一款基于环形线圈检测原理的四通道车辆检测器,支
|
||||
|------|------|--------|------|
|
||||
| [DLD960Loop_串口通信协议.md](docs/DLD960Loop_串口通信协议.md) | V1.05 | Loop MCU ↔ DBN MCU | 0x7F 帧、0xC0 传感主动上报、variation 3B 有符号 |
|
||||
| [DLD960_串口通信协议.md](docs/DLD960_串口通信协议.md) | V1.01 | 整机 TTL 串口 | 设备管理、参数配置、数据上报 |
|
||||
| [DLD960_TCP_JSON协议.md](docs/DLD960_TCP_JSON协议.md) | V1.02 | 以太网 TCP :5960 | 鉴权 + 命令 + event_report 客户端必答 + 脱机日志 |
|
||||
| [DLD960_IoT_MQTT协议.md](docs/DLD960_IoT_MQTT协议.md) | V1.06 | 云平台 MQTT | 双主题 `{sn}/srv`+`{sn}/dev`、initialize、event_report 平台必答、设备时钟同步、脱机日志 |
|
||||
| [DLD960_TCP_JSON协议.md](docs/DLD960_TCP_JSON协议.md) | V1.03 | 以太网 TCP :5960 | 鉴权 + 命令 + event_report 客户端必答 + 脱机日志(事件/快照流) |
|
||||
| [DLD960_IoT_MQTT协议.md](docs/DLD960_IoT_MQTT协议.md) | V1.07 | 云平台 MQTT | 双主题 `{sn}/srv`+`{sn}/dev`、initialize、event_report 平台必答、设备时钟同步、脱机日志(事件/快照流) |
|
||||
| [DLD960_BLE协议.md](docs/DLD960_BLE协议.md) | V1.02 | 蓝牙 BLE | 帧格式 + 分包 + 脱机日志(OFFLOG_STAT/QUERY/CLEAR)+ 传感快照(SNAP_STAT/QUERY/CLEAR,0x28/0x29/0x2A),与 MQTT/TCP 同语义 |
|
||||
| [DLD960硬件资源.md](docs/DLD960硬件资源.md) | — | 硬件 | 双 MCU IO 分配、继电器、指示灯、拨码 |
|
||||
|
||||
|
||||
+107
-18
@@ -137,9 +137,9 @@ dld960/{dev_serial}/{direction}
|
||||
| `loop_param_set` | 设置车检器多路参数 | srv→dev | 0x63 |
|
||||
| `loop_param_query` | 读取车检器多路参数 | srv→dev | 0x64 |
|
||||
| `report_config` | 设置主动上报 | srv→dev | 0xC5 |
|
||||
| `log_stat` | 查询脱机事件日志统计 | srv→dev | — |
|
||||
| `log_query` | 分页拉取脱机事件日志 | srv→dev | — |
|
||||
| `log_clear` | 清除脱机事件日志(审计留痕) | srv→dev | — |
|
||||
| `log_stat` | 查询脱机日志统计(事件/快照流) | srv→dev | — |
|
||||
| `log_query` | 分页拉取脱机日志(事件/快照流) | srv→dev | — |
|
||||
| `log_clear` | 清除脱机日志(事件/快照流,审计留痕) | srv→dev | — |
|
||||
| `initialize` | 设备上电初始化登陆 | dev→srv | — |
|
||||
| `loop_data` | 线圈传感数据上报 | dev→srv | 0xC0 |
|
||||
| `event_report` | 事件上报(**平台须应答**,见 §5.3) | dev→srv | — |
|
||||
@@ -648,10 +648,11 @@ dld960/{dev_serial}/{direction}
|
||||
|
||||
---
|
||||
|
||||
## 4.16 查询脱机事件日志统计 `log_stat`
|
||||
## 4.16 查询脱机日志统计 `log_stat`
|
||||
|
||||
> Topic: `dld960/{sn}/srv`
|
||||
> 设备本地 W25Qxx 环形事件日志(事件区动态:W25Q32=512KB/16256 条,掉电不丢)。用于日志拉取前的分页定位。
|
||||
> 设备本地 W25Qxx 环形日志(事件区/快照区容量随存储芯片动态,掉电不丢)。用于日志拉取前的分页定位。
|
||||
> 通过 `data.stream` 区分日志流:`event`(事件日志,缺省)/ `snapshot`(传感快照)。
|
||||
|
||||
**请求:**
|
||||
|
||||
@@ -660,11 +661,17 @@ dld960/{dev_serial}/{direction}
|
||||
"msg_id": 16,
|
||||
"cmd": "log_stat",
|
||||
"ts": 1719000000,
|
||||
"data": {}
|
||||
"data": {
|
||||
"stream": "event"
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
**响应 data:**
|
||||
| data 字段 | 类型 | 说明 |
|
||||
|-----------|------|------|
|
||||
| `stream` | string | 日志流:`event`(缺省,可省略)或 `snapshot` |
|
||||
|
||||
**响应 data(stream=event):**
|
||||
|
||||
```json
|
||||
{
|
||||
@@ -678,22 +685,37 @@ dld960/{dev_serial}/{direction}
|
||||
}
|
||||
```
|
||||
|
||||
**响应 data(stream=snapshot):**
|
||||
|
||||
```json
|
||||
{
|
||||
"stream": "snapshot",
|
||||
"enabled": true,
|
||||
"boot_seq": 2,
|
||||
"count": 1234,
|
||||
"capacity": 48064,
|
||||
"seq_first": 100,
|
||||
"seq_last": 1333
|
||||
}
|
||||
```
|
||||
|
||||
| data 字段 | 类型 | 说明 |
|
||||
|-----------|------|------|
|
||||
| `stream` | string | 日志流,当前仅 `event`(快照流预留) |
|
||||
| `stream` | string | 日志流:`event` / `snapshot` |
|
||||
| `enabled` | bool | 日志功能是否启用(Flash 初始化成功) |
|
||||
| `boot_seq` | uint16 | 当前启动序号(每次上电 +1,区分复位段) |
|
||||
| `count` | uint16 | 有效记录条数(0~capacity,环形覆盖后 < capacity) |
|
||||
| `capacity` | uint16 | 容量上限(**随存储芯片动态**:W25Q32=16256 / W25Q64=32640 / W25Q128=65408 / W25Q256=130944) |
|
||||
| `seq_first` | uint32 | 逻辑首条记录全局序号(`seq_last - count + 1`) |
|
||||
| `count` | uint32 | 有效记录条数(0~capacity,环形覆盖后 < capacity) |
|
||||
| `capacity` | uint32 | 容量上限(**随存储芯片与流动态**):事件流 W25Q32=16256 / Q64=32640 / Q128=65408 / Q256=130944;快照流 W25Q32=48064 / Q64=105408 / Q128=220096 / Q256=449472 |
|
||||
| `seq_first` | uint32 | 逻辑首条记录全局序号(`seq_last - count + 1`,count=0 时为 0) |
|
||||
| `seq_last` | uint32 | 最新一条记录全局序号(跨 boot 单调递增) |
|
||||
|
||||
---
|
||||
|
||||
## 4.17 分页拉取脱机事件日志 `log_query`
|
||||
## 4.17 分页拉取脱机日志 `log_query`
|
||||
|
||||
> Topic: `dld960/{sn}/srv`
|
||||
> **分页按全局序号,不按时间**(未同步段时间不可靠)。`count` 上限 **4**(受 MQTT 发布 ≤500B 限制,MSS=576 教训)。
|
||||
> **分页按全局序号,不按时间**(未同步段时间不可靠)。`count` 上限按流区分:事件流 **4**(受 MQTT 发布 ≤500B 限制,MSS=576 教训)/ 快照流 **2**(64B×2 记录)。
|
||||
> 通过 `data.stream` 区分日志流:`event`(缺省)/ `snapshot`。
|
||||
|
||||
**请求:**
|
||||
|
||||
@@ -703,6 +725,7 @@ dld960/{dev_serial}/{direction}
|
||||
"cmd": "log_query",
|
||||
"ts": 1719000000,
|
||||
"data": {
|
||||
"stream": "event",
|
||||
"start_seq": 1330,
|
||||
"count": 4
|
||||
}
|
||||
@@ -711,10 +734,11 @@ dld960/{dev_serial}/{direction}
|
||||
|
||||
| data 字段 | 类型 | 说明 |
|
||||
|-----------|------|------|
|
||||
| `stream` | string | 日志流:`event`(缺省,可省略)或 `snapshot` |
|
||||
| `start_seq` | uint32 | 起始全局序号(含);越界(< `seq_first` 或 > `seq_last`)返回空 `records` |
|
||||
| `count` | uint8 | 拉取条数,**上限 4**,超限按 4 处理 |
|
||||
| `count` | uint8 | 拉取条数;事件流上限 **4**、快照流上限 **2**,超限按各自上限处理;0 按上限处理 |
|
||||
|
||||
**响应 data:**
|
||||
**响应 data(stream=event):**
|
||||
|
||||
```json
|
||||
{
|
||||
@@ -756,9 +780,70 @@ dld960/{dev_serial}/{direction}
|
||||
| `time_anchor` | 时钟同步锚点 | null(`unix_ts` 即平台下发值,严格一致) |
|
||||
| `log_clear` | 日志清除(审计) | null |
|
||||
|
||||
**响应 data(stream=snapshot):**
|
||||
|
||||
```json
|
||||
{
|
||||
"start_seq": 12345,
|
||||
"records": [
|
||||
{
|
||||
"seq": 12345,
|
||||
"boot_seq": 2,
|
||||
"ts_ms": 456789,
|
||||
"coil_count": 4,
|
||||
"channels": [
|
||||
{
|
||||
"ch": 1,
|
||||
"freq_level": "high",
|
||||
"direction": 0,
|
||||
"freq_type": 1,
|
||||
"sensitivity": 2,
|
||||
"condition": 0,
|
||||
"loop_ok": true,
|
||||
"has_car": false,
|
||||
"misc_type": "time",
|
||||
"freq": 69418,
|
||||
"variation": 7,
|
||||
"misc": 0
|
||||
}
|
||||
]
|
||||
}
|
||||
]
|
||||
}
|
||||
```
|
||||
|
||||
快照记录为 64B 定长原始结构 `SnapRec`(与 0xC0 线上线圈单元逐字节一致,见《DLD960Loop 串口通信协议》§3.07),JSON 化后字段:
|
||||
|
||||
| 记录字段 | 类型 | 说明 |
|
||||
|----------|------|------|
|
||||
| `seq` | uint32 | 全局序号(跨 boot 递增) |
|
||||
| `boot_seq` | uint16 | 所属启动段 |
|
||||
| `ts_ms` | uint32 | boot 内相对时间(ms,采集时刻) |
|
||||
| `coil_count` | uint8 | 本记录线圈数(SnapRec.len/12,1~4) |
|
||||
| `channels` | array | 线圈传感单元(每路 12B,与 0xC0 线上格式一致) |
|
||||
|
||||
`channels[]` 单元字段(与 0xC0 传感单元一致):
|
||||
|
||||
| 字段 | 类型 | 说明 |
|
||||
|------|------|------|
|
||||
| `ch` | uint8 | 通道号 1~4 |
|
||||
| `freq_level` | string | 频率档位:`"high"`(33nF) / `"mid_high"`(43nF) / `"mid_low"`(66nF) / `"low"`(76nF) |
|
||||
| `direction` | uint8 | 0=触发模式 1=方向判别 |
|
||||
| `freq_type` | uint8 | 0=初始频率 1=当前实时频率 |
|
||||
| `sensitivity` | uint8 | 灵敏度等级(cfg 低四位) |
|
||||
| `condition` | uint8 | 环境评估值(cond 高四位,值越大干扰越大) |
|
||||
| `loop_ok` | bool | 线圈正常(SnapRec loop_state bit:0=正常→true,1=断开→false) |
|
||||
| `has_car` | bool | 有车(SnapRec car_state bit:1=有车) |
|
||||
| `misc_type` | string | `"time"` / `"cut_count"` / `"flow_count"` / `"relay_count"`(00 时间量 / 01 线圈断开次数 / 10 车流量 / 11 继电器输出次数) |
|
||||
| `freq` | uint32 | 线圈频率(Hz,3B LE 无符号) |
|
||||
| `variation` | int32 | 变化量(3B LE 有符号补码,`Origin − CAPVD`;正=车/裕量,负=反向漂移) |
|
||||
| `misc` | uint32 | 杂项值(misc_type=time 时 = 通过时间/车间距,**50ms 单位**) |
|
||||
|
||||
> 绝对时间回算同事件流:用事件流 `time_anchor`(boot_seq ↔ unix_ts 映射)+ 本记录 `boot_seq`/`ts_ms`;未同步段仅相对时间。
|
||||
|
||||
---
|
||||
|
||||
## 4.18 清除脱机事件日志 `log_clear`
|
||||
## 4.18 清除脱机日志 `log_clear`
|
||||
|
||||
> Topic: `dld960/{sn}/srv`
|
||||
> ⚠ **高风险操作**:清除动作本身写入事件流(`log_clear` 审计——谁在何时清了日志,留痕不可清除)。平台侧应做权限控制。
|
||||
@@ -778,9 +863,12 @@ dld960/{dev_serial}/{direction}
|
||||
|
||||
| data 字段 | 类型 | 说明 |
|
||||
|-----------|------|------|
|
||||
| `stream` | string | 日志流,当前仅 `event`;缺省等同 `event` |
|
||||
| `stream` | string | 日志流:`event`(缺省,可省略)或 `snapshot` |
|
||||
|
||||
**响应:** 标准成功/失败。成功后 `log_stat` 的 `count` 归 1(仅剩审计记录),`seq_last` 继续递增(序号不复位)。
|
||||
**响应:** 标准成功/失败。
|
||||
|
||||
- `stream=event`:成功后 `log_stat` 的 `count` 归 1(仅剩审计记录),`seq_last` 继续递增(序号不复位)。**阻塞 ~2.8s**(63 个数据扇区 SPI 擦除),请勿高频调用。
|
||||
- `stream=snapshot`:成功后 `log_stat` 的 `count` 归 0,`seq_last` 继续递增;清除动作写入事件流审计(`log_clear`,payload 标记快照流)。**阻塞 ~45ms**(逻辑清除 + 当前写扇区擦除,其余扇区由环形写覆盖时自动擦)。
|
||||
|
||||
---
|
||||
|
||||
@@ -1039,4 +1127,5 @@ dld960/{dev_serial}/{direction}
|
||||
| V1.04 | 2026-07-15 | `event_report` 增加**平台必答**机制:应答格式(回显 `msg_id`)、设备 5s 超时重发(同 `msg_id`/`ts`,最多 3 次)、待发队列合并上报、平台去重与先落库后应答要求 | wangfq |
|
||||
| V1.05 | 2026-07-15 | 增加**设备时钟同步**(§2.3,方案B):设备无 RTC,`initialize` 上线后平台经 `report_config` 命令下发 Unix `ts`,设备据此校准,之后上行 `ts` 为真实 Unix 时间;校准前为上电秒数 | wangfq |
|
||||
| V1.06 | 2026-08-04 | 增加**脱机事件日志**命令:`log_stat`(统计/分页定位)、`log_query`(按全局序号分页,count≤4)、`log_clear`(清除+审计留痕);§2.3 补充日志双时间戳语义(`ts_ms` 相对 + `unix_ts` 已同步,0=未同步,锚点回算规则) | wangfq |
|
||||
| V1.07 | 2026-08-18 | `log_stat` / `log_query` / `log_clear` 增加**快照流**支持(`stream=snapshot`,与 BLE 0x28/0x29/0x2A 同语义):快照统计 capacity 随芯片动态(48064~449472)、快照分页 count≤2(SnapRec 64B 原始结构 JSON 化)、快照清除审计留痕;`capacity`/`count` 类型修正为 uint32(W25Q256 事件流 130944 超 16bit) | wangfq |
|
||||
|
||||
|
||||
+83
-31
@@ -119,9 +119,9 @@ Client Device (DLD960)
|
||||
| `loop_param_set` | 设置车检器多路参数 | 是 | 0x63 |
|
||||
| `loop_param_query` | 读取车检器多路参数 | 是 | 0x64 |
|
||||
| `report_config` | 设置主动上报 | 是 | 0xC5 |
|
||||
| `log_stat` | 查询脱机事件日志统计 | 是 | — |
|
||||
| `log_query` | 分页拉取脱机事件日志 | 是 | — |
|
||||
| `log_clear` | 清除脱机事件日志(审计留痕) | 是 | — |
|
||||
| `log_stat` | 查询脱机日志统计(事件/快照流) | 是 | — |
|
||||
| `log_query` | 分页拉取脱机日志(事件/快照流) | 是 | — |
|
||||
| `log_clear` | 清除脱机日志(事件/快照流,审计留痕) | 是 | — |
|
||||
| 主动推送 | | | |
|
||||
| `loop_data` | 线圈传感数据(设备→客户端) | — | 0xC0 |
|
||||
| `event_report` | 事件上报(设备→客户端,**客户端须应答**,见 §5.2) | — | — |
|
||||
@@ -345,50 +345,63 @@ Client Device (DLD960)
|
||||
|
||||
---
|
||||
|
||||
## 4.16 查询脱机事件日志统计 `log_stat`
|
||||
## 4.16 查询脱机日志统计 `log_stat`
|
||||
|
||||
> 设备本地 W25Qxx 环形事件日志(事件区动态:W25Q32=512KB/16256 条,掉电不丢)。用于日志拉取前的分页定位。
|
||||
> 设备本地 W25Qxx 环形日志(事件区/快照区容量随存储芯片动态,掉电不丢)。用于日志拉取前的分页定位。
|
||||
> 通过 `data.stream` 区分日志流:`event`(事件日志,缺省)/ `snapshot`(传感快照)。
|
||||
|
||||
**请求:**
|
||||
|
||||
```json
|
||||
{"msg_id":16,"cmd":"log_stat","ts":1719000000,"data":{}}
|
||||
{"msg_id":16,"cmd":"log_stat","ts":1719000000,"data":{"stream":"event"}}
|
||||
```
|
||||
|
||||
**响应 data:**
|
||||
| data 字段 | 类型 | 说明 |
|
||||
|-----------|------|------|
|
||||
| `stream` | string | 日志流:`event`(缺省,可省略)或 `snapshot` |
|
||||
|
||||
**响应 data(stream=event):**
|
||||
|
||||
```json
|
||||
{"stream":"event","enabled":true,"boot_seq":2,"count":1234,"capacity":16256,"seq_first":100,"seq_last":1333}
|
||||
```
|
||||
|
||||
| data 字段 | 类型 | 说明 |
|
||||
|-----------|------|------|
|
||||
| `stream` | string | 日志流,当前仅 `event`(快照流预留) |
|
||||
| `enabled` | bool | 日志功能是否启用(Flash 初始化成功) |
|
||||
| `boot_seq` | uint16 | 当前启动序号(每次上电 +1,区分复位段) |
|
||||
| `count` | uint16 | 有效记录条数(0~capacity) |
|
||||
| `capacity` | uint16 | 容量上限(**随存储芯片动态**:W25Q32=16256 / W25Q64=32640 / W25Q128=65408 / W25Q256=130944) |
|
||||
| `seq_first` | uint32 | 逻辑首条记录全局序号(`seq_last - count + 1`) |
|
||||
| `seq_last` | uint32 | 最新一条记录全局序号(跨 boot 单调递增) |
|
||||
|
||||
---
|
||||
|
||||
## 4.17 分页拉取脱机事件日志 `log_query`
|
||||
|
||||
> **分页按全局序号,不按时间**(未同步段时间不可靠)。`count` 上限 **4**(受响应帧 ≤800B 限制)。
|
||||
|
||||
**请求:**
|
||||
**响应 data(stream=snapshot):**
|
||||
|
||||
```json
|
||||
{"msg_id":17,"cmd":"log_query","ts":1719000000,"data":{"start_seq":1330,"count":4}}
|
||||
{"stream":"snapshot","enabled":true,"boot_seq":2,"count":1234,"capacity":48064,"seq_first":100,"seq_last":1333}
|
||||
```
|
||||
|
||||
| data 字段 | 类型 | 说明 |
|
||||
|-----------|------|------|
|
||||
| `start_seq` | uint32 | 起始全局序号(含);越界(< `seq_first` 或 > `seq_last`)返回空 `records` |
|
||||
| `count` | uint8 | 拉取条数,**上限 4**,超限按 4 处理 |
|
||||
| `stream` | string | 日志流:`event` / `snapshot` |
|
||||
| `enabled` | bool | 日志功能是否启用(Flash 初始化成功) |
|
||||
| `boot_seq` | uint16 | 当前启动序号(每次上电 +1,区分复位段) |
|
||||
| `count` | uint32 | 有效记录条数(0~capacity,环形覆盖后 < capacity) |
|
||||
| `capacity` | uint32 | 容量上限(**随存储芯片与流动态**):事件流 W25Q32=16256 / Q64=32640 / Q128=65408 / Q256=130944;快照流 W25Q32=48064 / Q64=105408 / Q128=220096 / Q256=449472 |
|
||||
| `seq_first` | uint32 | 逻辑首条记录全局序号(`seq_last - count + 1`,count=0 时为 0) |
|
||||
| `seq_last` | uint32 | 最新一条记录全局序号(跨 boot 单调递增) |
|
||||
|
||||
**响应 data:**
|
||||
---
|
||||
|
||||
## 4.17 分页拉取脱机日志 `log_query`
|
||||
|
||||
> **分页按全局序号,不按时间**(未同步段时间不可靠)。`count` 上限按流区分:事件流 **4**(受响应帧 ≤800B 限制)/ 快照流 **2**(64B×2 记录)。
|
||||
> 通过 `data.stream` 区分日志流:`event`(缺省)/ `snapshot`。
|
||||
|
||||
**请求:**
|
||||
|
||||
```json
|
||||
{"msg_id":17,"cmd":"log_query","ts":1719000000,"data":{"stream":"event","start_seq":1330,"count":4}}
|
||||
```
|
||||
|
||||
| data 字段 | 类型 | 说明 |
|
||||
|-----------|------|------|
|
||||
| `stream` | string | 日志流:`event`(缺省,可省略)或 `snapshot` |
|
||||
| `start_seq` | uint32 | 起始全局序号(含);越界(< `seq_first` 或 > `seq_last`)返回空 `records` |
|
||||
| `count` | uint8 | 拉取条数;事件流上限 **4**、快照流上限 **2**,超限按各自上限处理;0 按上限处理 |
|
||||
|
||||
**响应 data(stream=event):**
|
||||
|
||||
```json
|
||||
{"start_seq":1330,"records":[{"seq":1330,"boot_seq":2,"ts_ms":456789,"unix_ts":1784768575,"type":"iot_ready","data":null}]}
|
||||
@@ -418,9 +431,44 @@ Client Device (DLD960)
|
||||
| `time_anchor` | 时钟同步锚点 | null(`unix_ts` 即平台下发值,严格一致) |
|
||||
| `log_clear` | 日志清除(审计) | null |
|
||||
|
||||
**响应 data(stream=snapshot):**
|
||||
|
||||
```json
|
||||
{"start_seq":12345,"records":[{"seq":12345,"boot_seq":2,"ts_ms":456789,"coil_count":4,"channels":[{"ch":1,"freq_level":"high","direction":0,"freq_type":1,"sensitivity":2,"condition":0,"loop_ok":true,"has_car":false,"misc_type":"time","freq":69418,"variation":7,"misc":0}]}]}
|
||||
```
|
||||
|
||||
快照记录为 64B 定长原始结构 `SnapRec`(与 0xC0 线上线圈单元逐字节一致,见《DLD960Loop 串口通信协议》§3.07),JSON 化后字段:
|
||||
|
||||
| 记录字段 | 类型 | 说明 |
|
||||
|----------|------|------|
|
||||
| `seq` | uint32 | 全局序号(跨 boot 递增) |
|
||||
| `boot_seq` | uint16 | 所属启动段 |
|
||||
| `ts_ms` | uint32 | boot 内相对时间(ms,采集时刻) |
|
||||
| `coil_count` | uint8 | 本记录线圈数(SnapRec.len/12,1~4) |
|
||||
| `channels` | array | 线圈传感单元(每路 12B,与 0xC0 线上格式一致) |
|
||||
|
||||
`channels[]` 单元字段(与 0xC0 传感单元一致):
|
||||
|
||||
| 字段 | 类型 | 说明 |
|
||||
|------|------|------|
|
||||
| `ch` | uint8 | 通道号 1~4 |
|
||||
| `freq_level` | string | 频率档位:`"high"`(33nF) / `"mid_high"`(43nF) / `"mid_low"`(66nF) / `"low"`(76nF) |
|
||||
| `direction` | uint8 | 0=触发模式 1=方向判别 |
|
||||
| `freq_type` | uint8 | 0=初始频率 1=当前实时频率 |
|
||||
| `sensitivity` | uint8 | 灵敏度等级(cfg 低四位) |
|
||||
| `condition` | uint8 | 环境评估值(cond 高四位,值越大干扰越大) |
|
||||
| `loop_ok` | bool | 线圈正常(SnapRec loop_state bit:0=正常→true,1=断开→false) |
|
||||
| `has_car` | bool | 有车(SnapRec car_state bit:1=有车) |
|
||||
| `misc_type` | string | `"time"` / `"cut_count"` / `"flow_count"` / `"relay_count"`(00 时间量 / 01 线圈断开次数 / 10 车流量 / 11 继电器输出次数) |
|
||||
| `freq` | uint32 | 线圈频率(Hz,3B LE 无符号) |
|
||||
| `variation` | int32 | 变化量(3B LE 有符号补码,`Origin − CAPVD`;正=车/裕量,负=反向漂移) |
|
||||
| `misc` | uint32 | 杂项值(misc_type=time 时 = 通过时间/车间距,**50ms 单位**) |
|
||||
|
||||
> 绝对时间回算同事件流:用事件流 `time_anchor`(boot_seq ↔ unix_ts 映射)+ 本记录 `boot_seq`/`ts_ms`;未同步段仅相对时间。
|
||||
|
||||
---
|
||||
|
||||
## 4.18 清除脱机事件日志 `log_clear`
|
||||
## 4.18 清除脱机日志 `log_clear`
|
||||
|
||||
> ⚠ **高风险操作**:清除动作本身写入事件流(`log_clear` 审计——谁在何时清了日志,留痕不可清除)。客户端应做权限控制。
|
||||
|
||||
@@ -432,9 +480,12 @@ Client Device (DLD960)
|
||||
|
||||
| data 字段 | 类型 | 说明 |
|
||||
|-----------|------|------|
|
||||
| `stream` | string | 日志流,当前仅 `event`;缺省等同 `event` |
|
||||
| `stream` | string | 日志流:`event`(缺省,可省略)或 `snapshot` |
|
||||
|
||||
**响应:** 标准成功/失败。成功后 `log_stat` 的 `count` 归 1(仅剩审计记录),`seq_last` 继续递增(序号不复位)。
|
||||
**响应:** 标准成功/失败。
|
||||
|
||||
- `stream=event`:成功后 `log_stat` 的 `count` 归 1(仅剩审计记录),`seq_last` 继续递增(序号不复位)。**阻塞 ~2.8s**(63 个数据扇区 SPI 擦除),请勿高频调用。
|
||||
- `stream=snapshot`:成功后 `log_stat` 的 `count` 归 0,`seq_last` 继续递增;清除动作写入事件流审计(`log_clear`,payload 标记快照流)。**阻塞 ~45ms**(逻辑清除 + 当前写扇区擦除,其余扇区由环形写覆盖时自动擦)。
|
||||
|
||||
---
|
||||
|
||||
@@ -554,3 +605,4 @@ Client Device (DLD960)
|
||||
| V1.00 | 2026-06-22 | 初始版本,基于串口协议 V1.01 | wangfq |
|
||||
| V1.01 | 2026-07-15 | `event_report` 增加**客户端必答**机制:应答格式(回显 `msg_id`)、设备 5s 超时重发(同 `msg_id`/`ts`,最多 3 次)、待发队列合并上报、客户端去重与先落库后应答要求(与 MQTT 协议 V1.04 对称) | wangfq |
|
||||
| V1.02 | 2026-08-04 | 增加**脱机事件日志**命令:`log_stat`(统计/分页定位)、`log_query`(按全局序号分页,count≤4)、`log_clear`(清除+审计留痕);事件类型表与 MQTT 协议 V1.06 对齐 | wangfq |
|
||||
| V1.03 | 2026-08-18 | `log_stat` / `log_query` / `log_clear` 增加**快照流**支持(`stream=snapshot`,与 BLE 0x28/0x29/0x2A 同语义):快照统计 capacity 随芯片动态(48064~449472)、快照分页 count≤2(SnapRec 64B 原始结构 JSON 化)、快照清除审计留痕;`capacity`/`count` 类型修正为 uint32(W25Q256 事件流 130944 超 16bit) | wangfq |
|
||||
|
||||
+2
-2
@@ -162,8 +162,8 @@ DLD960 是一款四通道环形线圈车辆检测器,一台设备即可覆盖
|
||||
|------|------|
|
||||
| 《DLD960 技术规格书》 | 完整技术参数 |
|
||||
| 《DLD960 串口通信协议》V1.01 | 串口 对接开发 |
|
||||
| 《DLD960 TCP JSON 协议》V1.02 | 局域网对接开发 |
|
||||
| 《DLD960 IoT MQTT 协议》V1.06 | 云平台对接开发 |
|
||||
| 《DLD960 TCP JSON 协议》V1.03 | 局域网对接开发 |
|
||||
| 《DLD960 IoT MQTT 协议》V1.07 | 云平台对接开发 |
|
||||
| 《DLD960 BLE 协议》V1.02 | 蓝牙小程序/APP 对接开发(脱机日志与传感快照读写) |
|
||||
| 《环路车辆检测器验收标准》 | 采购/部署验收 |
|
||||
|
||||
|
||||
@@ -105,8 +105,8 @@ DLD960 是一款基于环形线圈(LC 振荡)检测原理的四通道车辆
|
||||
| 协议 | 版本 | 通道 | 要点 |
|
||||
|------|------|------|------|
|
||||
| DLD960 串口通信协议 | V1.01 | TTL | 设备管理、参数配置、数据上报 |
|
||||
| DLD960 TCP JSON 协议 | V1.02 | ETH :5960 | 密码鉴权 + 18 条命令;event_report 客户端必答(5s×3 重发);脱机日志 log_stat/log_query/log_clear |
|
||||
| DLD960 IoT MQTT 协议 | V1.06 | ETH → Broker | 双主题 `dld960/{sn}/srv`+`/dev`;initialize 上线、loop_data 三档调度、event_report 平台必答、设备时钟同步、脱机日志 log_stat/log_query/log_clear |
|
||||
| DLD960 TCP JSON 协议 | V1.03 | ETH :5960 | 密码鉴权 + 18 条命令;event_report 客户端必答(5s×3 重发);脱机日志 log_stat/log_query/log_clear(事件/快照流,stream 区分) |
|
||||
| DLD960 IoT MQTT 协议 | V1.07 | ETH → Broker | 双主题 `dld960/{sn}/srv`+`/dev`;initialize 上线、loop_data 三档调度、event_report 平台必答、设备时钟同步、脱机日志 log_stat/log_query/log_clear(事件/快照流,stream 区分) |
|
||||
| DLD960Loop 串口协议 | V1.05 | MCU 间(内部) | 0x7F 帧、0xC0 传感上报(variation 3B 有符号) |
|
||||
| DLD960 BLE 协议 | V1.02 | 蓝牙 BLE | 帧格式 + 分包;脱机日志 OFFLOG_STAT/QUERY/CLEAR + 传感快照 SNAP_STAT/QUERY/CLEAR(0x28/0x29/0x2A),与 MQTT/TCP 同语义 |
|
||||
|
||||
|
||||
Reference in New Issue
Block a user