2026-09-17 15:30:30 +08:00
|
|
|
|
# 停机引导对接协议
|
|
|
|
|
|
|
|
|
|
|
|
## 版本信息
|
|
|
|
|
|
|
|
|
|
|
|
| 项目 | 内容 |
|
|
|
|
|
|
| --- | --- |
|
|
|
|
|
|
| 文档版本 | V1.1 |
|
2026-09-19 10:01:32 +08:00
|
|
|
|
| 更新日期 | 2026-09-18 |
|
|
|
|
|
|
| 适用范围 | UDP 组播状态包、HTTP 当前状态查询、本机记录库历史访问 |
|
|
|
|
|
|
| 说明 | 在 1.0 基础上增加工作模式、系统激活、设备状态,以及选择机型与检测机型的区分。第 11 节补充 `guide_session`、`guide_detail`、`guide_event` 三表关系。 |
|
2026-09-17 15:30:30 +08:00
|
|
|
|
|
|
|
|
|
|
* 状态 JSON 协议名称为 `ParkingSpaceGuideResult`,`version` 为 `1.1`。
|
|
|
|
|
|
|
|
|
|
|
|
## 1. 协议概述
|
|
|
|
|
|
|
|
|
|
|
|
停机引导系统支持通过组播主动发送检测结果,也支持作为 HTTP 服务端,由现场系统按需查询当前停机状态。本协议(组播和 HTTP)只提供当前状态,没有历史查询地址。历史引导过程从本机记录库读取,字段与第 7 节相同。现场系统获取数据后,可解析当前停机位、目标编号、机型、到停止线距离、机身偏转角等信息。
|
|
|
|
|
|
|
|
|
|
|
|
访问方式:
|
|
|
|
|
|
|
|
|
|
|
|
| 方式 | 地址 | 数据内容 |
|
|
|
|
|
|
| --- | --- | --- |
|
|
|
|
|
|
| UDP 组播 | 默认 `239.255.0.1:8800` | 当前 `ParkingSpaceGuideResult` |
|
|
|
|
|
|
| HTTP GET | `http://<设备IP>:8801/api/parking/status` | 与组播相同的当前状态,不提供历史 |
|
|
|
|
|
|
| 记录库 | 见第 11 节 | 历史引导过程,字段与第 7 节一致 |
|
|
|
|
|
|
|
|
|
|
|
|
协议特点:
|
|
|
|
|
|
|
|
|
|
|
|
- 传输方式:组播,基于 UDP 数据报
|
|
|
|
|
|
- 查询方式:HTTP,停机引导系统作为服务端,现场系统作为客户端;仅当前状态
|
|
|
|
|
|
- 历史访问:本协议无历史 URL,使用第 11 节记录库连接信息
|
|
|
|
|
|
- 数据格式:JSON;历史记录字段与 JSON 协议相同
|
|
|
|
|
|
- 字符编码:UTF-8
|
|
|
|
|
|
- 组播数据方向:停机引导系统发送,现场系统接收
|
|
|
|
|
|
- HTTP 数据方向:现场系统请求,停机引导系统响应
|
|
|
|
|
|
- 组播应答机制:无应答
|
|
|
|
|
|
- HTTP 应答机制:请求-响应
|
|
|
|
|
|
- 组播重发机制:无重发
|
|
|
|
|
|
- 组播发送时机:每次检测结果更新时发送 1 包;`status`、轮挡时间或自检状态变化时也发送 1 包
|
|
|
|
|
|
|
|
|
|
|
|
## 2. 组播网络参数
|
|
|
|
|
|
|
|
|
|
|
|
组播网络参数由停机引导系统配置。
|
|
|
|
|
|
|
|
|
|
|
|
| 参数 | 默认值 | 说明 |
|
|
|
|
|
|
| --- | --- | --- |
|
|
|
|
|
|
| enabled | true | 是否启用组播发送。 |
|
|
|
|
|
|
| address | 239.255.0.1 | 组播地址。 |
|
|
|
|
|
|
| port | 8800 | 组播端口。 |
|
|
|
|
|
|
| targetId | T001 | 目标编号,由软件配置或现场系统约定。 |
|
|
|
|
|
|
| parkId | P01 | 当前停机位编号,由软件配置。 |
|
|
|
|
|
|
|
|
|
|
|
|
## 3. HTTP 查询对接
|
|
|
|
|
|
|
|
|
|
|
|
HTTP 查询用于现场系统主动获取当前停机状态。停机引导系统作为 HTTP 服务端,返回最近一次状态;系统刚启动且尚未产生检测结果时,返回第 6 节示例中的状态包。
|
|
|
|
|
|
|
|
|
|
|
|
| 参数 | 默认值 | 说明 |
|
|
|
|
|
|
| --- | --- | --- |
|
|
|
|
|
|
| enabled | true | 是否启用 HTTP 状态服务。 |
|
|
|
|
|
|
| address | 0.0.0.0 | HTTP 服务监听地址;`0.0.0.0` 表示监听本机所有网卡。 |
|
|
|
|
|
|
| port | 8801 | HTTP 服务端口。 |
|
|
|
|
|
|
| maxQueued | 16 | 等待处理的最⼤连接队列数。|
|
|
|
|
|
|
| maxThreads | 4 | 最⼤处理线程数。|
|
|
|
|
|
|
|
|
|
|
|
|
请求方式:
|
|
|
|
|
|
|
|
|
|
|
|
| 项目 | 内容 |
|
|
|
|
|
|
| --- | --- |
|
|
|
|
|
|
| URL | `http://<停机引导设备IP>:8801/api/parking/status` |
|
|
|
|
|
|
| Method | `GET` |
|
|
|
|
|
|
| Request Body | 无 |
|
|
|
|
|
|
| Response Content-Type | `application/json; charset=utf-8` |
|
|
|
|
|
|
|
|
|
|
|
|
兼容路径:
|
|
|
|
|
|
* /
|
|
|
|
|
|
* /status
|
|
|
|
|
|
* /api/status
|
|
|
|
|
|
* /api/parking/status
|
|
|
|
|
|
|
|
|
|
|
|
响应数据:
|
|
|
|
|
|
* HTTP 状态码 200 :返回当前停机状态 JSON,数据内容与 UDP 组播状态包⼀致,字段与第 4 ⾄第 7
|
|
|
|
|
|
节定义⼀致。
|
|
|
|
|
|
* HTTP 状态码 404 :请求路径不存在。
|
|
|
|
|
|
* HTTP 状态码 405 :请求⽅法不⽀持。
|
|
|
|
|
|
现场系统建议按 timestamp 判断数据是否更新,避免重复处理同⼀包状态。
|
|
|
|
|
|
|
|
|
|
|
|
现场系统建议按 `timestamp` 判断数据是否更新。
|
|
|
|
|
|
|
|
|
|
|
|
## 4. JSON 数据格式
|
|
|
|
|
|
|
|
|
|
|
|
每包组播数据为一个 JSON 对象。实际发送时为紧凑 JSON,不包含格式化换行。
|
|
|
|
|
|
|
|
|
|
|
|
HTTP 查询返回的数据内容与 UDP 组播数据一致,字段、含义、类型、单位和取值规则相同,仅传输方式不同。
|
|
|
|
|
|
|
|
|
|
|
|
本软件每次只检测一个飞机停机位,结果字段放在顶层对象中,不包含结果数组。
|
|
|
|
|
|
|
|
|
|
|
|
接收端应允许 JSON 增加字段。组播不保证到达和顺序,应以最新 `timestamp` 为准。`timestamp` 为 Unix 毫秒整数;其余时间字段为设备本地 `yyyy-MM-dd HH:mm:ss` 字符串,未记录时为空字符串。检测内部信息不对外发送。距离、偏转角、横向偏移、速度为浮点数;状态序号和错误码为整数。
|
|
|
|
|
|
|
|
|
|
|
|
## 5. 成功数据示例
|
|
|
|
|
|
|
|
|
|
|
|
```json
|
|
|
|
|
|
{
|
|
|
|
|
|
"protocol": "ParkingSpaceGuideResult",
|
|
|
|
|
|
"version": "1.1",
|
|
|
|
|
|
"success": true,
|
|
|
|
|
|
"hasResult": true,
|
|
|
|
|
|
"targetId": "T001",
|
|
|
|
|
|
"parkId": "P01",
|
|
|
|
|
|
"expectedModelType": "A320",
|
|
|
|
|
|
"modelType": "A320",
|
|
|
|
|
|
"modelMatched": true,
|
|
|
|
|
|
"guideStateCode": 21,
|
|
|
|
|
|
"distanceToStop": 50.0,
|
|
|
|
|
|
"bodyYawAngle": 0.0,
|
|
|
|
|
|
"lateralOffset": 0.0,
|
|
|
|
|
|
"aircraftSpeed": 0.4,
|
|
|
|
|
|
"hasException": false,
|
|
|
|
|
|
"guideText": "CHOCK ON",
|
|
|
|
|
|
"personChockTime": "2026-09-07 14:40:00",
|
|
|
|
|
|
"chockOnTime": "2026-09-07 14:40:05",
|
|
|
|
|
|
"chockOffTime": "",
|
|
|
|
|
|
"status": {
|
|
|
|
|
|
"workMode": "normal",
|
|
|
|
|
|
"activated": true,
|
|
|
|
|
|
"camera": { "name": "平面相机", "connected": true },
|
|
|
|
|
|
"lidar": { "name": "雷达", "connected": true },
|
|
|
|
|
|
"emergencyStop": {
|
|
|
|
|
|
"name": "急停",
|
|
|
|
|
|
"enabled": true,
|
|
|
|
|
|
"available": true,
|
|
|
|
|
|
"active": false,
|
|
|
|
|
|
"latched": false
|
|
|
|
|
|
}
|
|
|
|
|
|
},
|
|
|
|
|
|
"selfCheck": {
|
|
|
|
|
|
"running": false,
|
|
|
|
|
|
"ok": true,
|
|
|
|
|
|
"lidarOk": true,
|
|
|
|
|
|
"cameraOk": true,
|
|
|
|
|
|
"storageOk": true,
|
|
|
|
|
|
"networkOk": true,
|
|
|
|
|
|
"errorCode": 0,
|
|
|
|
|
|
"message": "自检通过:雷达、相机、存储、网络正常"
|
|
|
|
|
|
},
|
|
|
|
|
|
"message": "轮挡区域人员检测已确认,轮挡固定流程完成",
|
|
|
|
|
|
"errorCode": 0,
|
|
|
|
|
|
"timestamp": 1783339200000
|
|
|
|
|
|
}
|
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
|
|
选择名称包含 `A320` 或 `B737` 的配置机型时,按检测家族匹配:
|
|
|
|
|
|
|
|
|
|
|
|
```json
|
|
|
|
|
|
"expectedModelType": "A320-200 NEO",
|
|
|
|
|
|
"modelType": "A320",
|
|
|
|
|
|
"modelMatched": true
|
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
|
|
选择非 A320/B737 家族的配置机型时,`expectedModelType` 为配置中的机型名称,`modelType` 仍为检测结果(`A320`、`B737` 或 `其他`),`modelMatched` 为 `false`:
|
|
|
|
|
|
|
|
|
|
|
|
```json
|
|
|
|
|
|
"expectedModelType": "C919",
|
|
|
|
|
|
"modelType": "其他",
|
|
|
|
|
|
"modelMatched": false
|
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
|
|
## 6. 失败或无结果数据示例
|
|
|
|
|
|
|
|
|
|
|
|
检测失败、无有效目标或尚未开始引导时,仍发送状态包。`success=false`,`hasResult=false`。空闲包仍携带 `status`。
|
|
|
|
|
|
|
|
|
|
|
|
```json
|
|
|
|
|
|
{
|
|
|
|
|
|
"protocol": "ParkingSpaceGuideResult",
|
|
|
|
|
|
"version": "1.1",
|
|
|
|
|
|
"success": false,
|
|
|
|
|
|
"hasResult": false,
|
|
|
|
|
|
"targetId": "T001",
|
|
|
|
|
|
"parkId": "P01",
|
|
|
|
|
|
"expectedModelType": "",
|
|
|
|
|
|
"modelType": "未知",
|
|
|
|
|
|
"modelMatched": false,
|
|
|
|
|
|
"guideStateCode": 0,
|
|
|
|
|
|
"distanceToStop": 0.0,
|
|
|
|
|
|
"bodyYawAngle": 0.0,
|
|
|
|
|
|
"lateralOffset": 0.0,
|
|
|
|
|
|
"aircraftSpeed": 0.0,
|
|
|
|
|
|
"hasException": true,
|
|
|
|
|
|
"guideText": "",
|
|
|
|
|
|
"personChockTime": "",
|
|
|
|
|
|
"chockOnTime": "",
|
|
|
|
|
|
"chockOffTime": "",
|
|
|
|
|
|
"status": {
|
|
|
|
|
|
"workMode": "normal",
|
|
|
|
|
|
"activated": false,
|
|
|
|
|
|
"camera": { "name": "平面相机", "connected": true },
|
|
|
|
|
|
"lidar": { "name": "雷达", "connected": false },
|
|
|
|
|
|
"emergencyStop": {
|
|
|
|
|
|
"name": "急停",
|
|
|
|
|
|
"enabled": true,
|
|
|
|
|
|
"available": true,
|
|
|
|
|
|
"active": false,
|
|
|
|
|
|
"latched": false
|
|
|
|
|
|
}
|
|
|
|
|
|
},
|
|
|
|
|
|
"selfCheck": {
|
|
|
|
|
|
"running": false,
|
|
|
|
|
|
"ok": false,
|
|
|
|
|
|
"lidarOk": false,
|
|
|
|
|
|
"cameraOk": true,
|
|
|
|
|
|
"storageOk": true,
|
|
|
|
|
|
"networkOk": true,
|
|
|
|
|
|
"errorCode": 0,
|
|
|
|
|
|
"message": ""
|
|
|
|
|
|
},
|
|
|
|
|
|
"message": "无有效结果",
|
|
|
|
|
|
"errorCode": -1,
|
|
|
|
|
|
"timestamp": 1783339200000
|
|
|
|
|
|
}
|
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
|
|
## 7. 字段定义
|
|
|
|
|
|
|
|
|
|
|
|
类型均为 JSON 取值类型。`int` 为整数,`float` 为浮点数,`bool` 为布尔,`string` 为字符串,`object` 为对象。历史记录字段与下表相同,不再另列。
|
|
|
|
|
|
|
|
|
|
|
|
| 字段 | 类型 | 单位 | 说明 |
|
|
|
|
|
|
| --- | --- | --- | --- |
|
|
|
|
|
|
| protocol | string | - | 固定为 `ParkingSpaceGuideResult`。 |
|
|
|
|
|
|
| version | string | - | 协议版本,当前为 `1.1`。 |
|
|
|
|
|
|
| success | bool | - | 本包含有效结果且 `errorCode=0` 时为 `true`。 |
|
|
|
|
|
|
| hasResult | bool | - | 本包是否包含有效引导结果。 |
|
|
|
|
|
|
| targetId | string | - | 目标编号,默认 `T001`。 |
|
|
|
|
|
|
| parkId | string | - | 当前停机位编号,默认 `P01`。 |
|
|
|
|
|
|
| expectedModelType | string | - | 操作员选择的机型。未选择时为空。取值来自当前配置的可选机型,不是协议写死的清单。名称包含 `A320` 或 `B737` 时按家族校验;其余名称以现场配置为准。 |
|
|
|
|
|
|
| modelType | string | - | 相机检测机型。仅 `A320`、`B737`、`其他`;未检出为 `未知`。 |
|
|
|
|
|
|
| modelMatched | bool | - | 选择名称包含 `A320` 且 `modelType` 为 `A320`,或包含 `B737` 且 `modelType` 为 `B737` 时为 `true`。选择其他机型或不选时为 `false`。 |
|
|
|
|
|
|
| personChockTime | string | 日期时间 | 人员轮挡确认时间,设备本地时间,格式 `yyyy-MM-dd HH:mm:ss`;未确认时为空。 |
|
|
|
|
|
|
| chockOnTime | string | 日期时间 | 人工上轮挡时间,设备本地时间,格式 `yyyy-MM-dd HH:mm:ss`;未记录时为空。 |
|
|
|
|
|
|
| chockOffTime | string | 日期时间 | 人工下轮挡时间,设备本地时间,格式 `yyyy-MM-dd HH:mm:ss`;未记录时为空。 |
|
|
|
|
|
|
| status | object | - | 状态:工作模式、是否激活、相机/雷达/急停,见下表。 |
|
|
|
|
|
|
| selfCheck | object | - | 开始前自检结果,见下表。 |
|
|
|
|
|
|
| guideStateCode | int | - | 引导状态序号,见第 8 节;无状态为 `0`。 |
|
|
|
|
|
|
| distanceToStop | float | 毫米 | 到停止线距离。 |
|
|
|
|
|
|
| bodyYawAngle | float | 度 | 机身偏转角。 |
|
|
|
|
|
|
| lateralOffset | float | 毫米 | 相对引导中心线的横向偏移。 |
|
|
|
|
|
|
| aircraftSpeed | float | 米/秒 | 飞机接近速度。 |
|
|
|
|
|
|
| hasException | bool | - | `errorCode != 0`,或 `guideStateCode` 为 10~20、22~24 时为 `true`。 |
|
|
|
|
|
|
| guideText | string | - | 引导显示文本。 |
|
|
|
|
|
|
| message | string | - | 说明或异常原因。 |
|
|
|
|
|
|
| errorCode | int | - | `0` 正常。设备异常码见第 10 节;`-1` 表示无有效结果。 |
|
|
|
|
|
|
| timestamp | int | 毫秒 | 本包生成时刻,Unix 毫秒时间戳。除本字段外,其余时间均使用 `yyyy-MM-dd HH:mm:ss`。 |
|
|
|
|
|
|
|
|
|
|
|
|
`expectedModelType` 是页面选择的机型,`modelType` 是检测结果,二者不要混用。可选机型由配置维护。检测只区分 `A320`、`B737`、`其他`。选择名称包含 `A320` 且检测为 `A320` 算匹配,包含 `B737` 且检测为 `B737` 同样算匹配,例如选择 `A320-200 NEO` 检测 `A320`。仅这两类家族做校验,不一致可进入状态 15;选择 A321、C919 等其他配置机型不校验。检测置信度、是否支持精确校验、轮挡区域内人员及人数等内部信息不对外发送。
|
|
|
|
|
|
|
|
|
|
|
|
`status` 与 `selfCheck` 含义不同:`status` 是当前工作模式、激活情况和设备在线状态,`selfCheck` 是本次开始前的自检结果。工作模式和是否激活只放在 `status` 中,不再出现在顶层。
|
|
|
|
|
|
|
|
|
|
|
|
| status 字段 | 类型 | 说明 |
|
|
|
|
|
|
| --- | --- | --- |
|
|
|
|
|
|
| workMode | string | `normal` 正常模式;`maintenance` 维护模式。缺省按 `normal`。维护模式引导流程与正常模式相同。 |
|
|
|
|
|
|
| activated | bool | `true`:已开始且自检通过,正在引导。`false`:未开始、自检中或已停止。缺省按 `false`。 |
|
|
|
|
|
|
| camera.name | string | `平面相机` |
|
|
|
|
|
|
| camera.connected | bool | 平面相机是否在线 |
|
|
|
|
|
|
| lidar.name | string | `雷达` |
|
|
|
|
|
|
| lidar.connected | bool | 雷达是否在线 |
|
|
|
|
|
|
| emergencyStop.name | string | `急停` |
|
|
|
|
|
|
| emergencyStop.enabled | bool | 是否启用急停 |
|
|
|
|
|
|
| emergencyStop.available | bool | 急停输入是否可用 |
|
|
|
|
|
|
| emergencyStop.active | bool | 急停是否正在触发 |
|
|
|
|
|
|
| emergencyStop.latched | bool | 急停是否已锁存 |
|
|
|
|
|
|
|
|
|
|
|
|
| selfCheck 字段 | 类型 | 说明 |
|
|
|
|
|
|
| --- | --- | --- |
|
|
|
|
|
|
| running | bool | 是否正在自检 |
|
|
|
|
|
|
| ok | bool | 是否全部通过 |
|
|
|
|
|
|
| lidarOk | bool | 雷达 |
|
|
|
|
|
|
| cameraOk | bool | 平面相机 |
|
|
|
|
|
|
| storageOk | bool | 存储 |
|
|
|
|
|
|
| networkOk | bool | 网络 |
|
|
|
|
|
|
| errorCode | int | 见第 10 节。自检失败时与顶层 `errorCode` 相同。 |
|
|
|
|
|
|
| message | string | 说明 |
|
|
|
|
|
|
|
|
|
|
|
|
自检失败时 `guideStateCode=22`,`status.activated=false`。
|
|
|
|
|
|
|
|
|
|
|
|
人员轮挡时间与人工上/下轮挡时间相互独立。
|
|
|
|
|
|
|
|
|
|
|
|
## 8. 引导状态枚举
|
|
|
|
|
|
|
|
|
|
|
|
`guideStateCode` 为 `10` 至 `20` 或 `22` 至 `24` 时按异常处理,`hasException=true`。状态 `21` 为正常完成。状态 `8` 为停稳,保持约 5 秒后进入状态 `9`。
|
|
|
|
|
|
|
|
|
|
|
|
| 序号 | 流程/功能 | 显示文本 | 说明 |
|
|
|
|
|
|
| --- | --- | --- | --- |
|
|
|
|
|
|
| 1 | 泊位引导启动 | START | 已开始,距离不大于 100 m |
|
|
|
|
|
|
| 2 | 捕获 | CAPTURE | 距离大于 25 m 且不大于 80 m |
|
|
|
|
|
|
| 3 | 跟踪 | | 内部跟踪 |
|
|
|
|
|
|
| 4 | 接近率 | | 内部接近率 |
|
|
|
|
|
|
| 5 | 对准中心线 | 距离 | 距离不大于 25 m,横向和航向在容差内 |
|
|
|
|
|
|
| 6 | 慢速 | SLOW | 距离不大于 15 m,速度不小于 2 m/s |
|
|
|
|
|
|
| 7 | 方位引导 | 距离 | 距离不大于 25 m,横向或航向超差 |
|
|
|
|
|
|
| 8 | 到达停止位置 | STOP | 到停止线距离在 ±0.1 m 内 |
|
|
|
|
|
|
| 9 | 泊位引导完成 | OK | 停稳并保持约 5 秒 |
|
|
|
|
|
|
| 10 | 越位 | TOO FAR | 越过停止线不小于 0.5 m |
|
|
|
|
|
|
| 11 | 提前停止 | | 提前停止 |
|
|
|
|
|
|
| 12 | 等待 | | 未进入 100 m 范围或空闲 |
|
|
|
|
|
|
| 13 | 异常慢速-恶劣天气 | | 恶劣天气 |
|
|
|
|
|
|
| 14 | 飞机丢失 | | 引导中连续丢失 |
|
|
|
|
|
|
| 15 | 飞机验证失败 | ID FAIL | 选择名称包含 A320/B737 且与检测家族不一致 |
|
|
|
|
|
|
| 16 | 机位受阻 | GATE BLOCK | 机位受阻 |
|
|
|
|
|
|
| 17 | 视野受阻 | VIEW BLOCK | 视野受阻 |
|
|
|
|
|
|
| 18 | SBU停止 | | 安全备份停止 |
|
|
|
|
|
|
| 19 | 速度过快 | | 速度过快 |
|
|
|
|
|
|
| 20 | 紧急停止 | STOP | 急停有效 |
|
|
|
|
|
|
| 21 | 挡轮挡 | CHOCK ON | 人员轮挡已确认 |
|
|
|
|
|
|
| 22 | 系统错误 | ERROR | 自检或系统错误 |
|
|
|
|
|
|
| 23 | 系统故障 | | 系统故障 |
|
|
|
|
|
|
| 24 | 电源故障 | | 电源故障 |
|
|
|
|
|
|
|
|
|
|
|
|
## 9. 对接说明
|
|
|
|
|
|
|
|
|
|
|
|
现场系统建议优先解析:
|
|
|
|
|
|
|
|
|
|
|
|
- `targetId`、`parkId`
|
|
|
|
|
|
- `expectedModelType`、`modelType`、`modelMatched`
|
|
|
|
|
|
- `guideStateCode`、`guideText`
|
|
|
|
|
|
- `distanceToStop`、`bodyYawAngle`、`lateralOffset`、`aircraftSpeed`
|
|
|
|
|
|
- `personChockTime`、`chockOnTime`、`chockOffTime`
|
|
|
|
|
|
- `status.workMode`、`status.activated`
|
|
|
|
|
|
- `hasException`、`errorCode`、`timestamp`
|
|
|
|
|
|
|
|
|
|
|
|
设备异常时优先看 `errorCode`(`2200`~`2205`)和 `status` 中对应设备的在线状态。
|
|
|
|
|
|
|
|
|
|
|
|
状态判断:
|
|
|
|
|
|
|
|
|
|
|
|
- `success=true` 且 `hasResult=true`:本包含有效引导结果。
|
|
|
|
|
|
- `success=false`:异常、无目标或无有效结果。
|
|
|
|
|
|
- `status.activated=true`:系统已激活。
|
|
|
|
|
|
- `status.workMode=maintenance`:维护模式。
|
|
|
|
|
|
- `guideStateCode=8`:停稳(STOP);随后为 `9`(OK)。
|
|
|
|
|
|
|
|
|
|
|
|
注意事项:
|
|
|
|
|
|
|
|
|
|
|
|
- 组播不保证到达和顺序,以最新 `timestamp` 为准。
|
|
|
|
|
|
- 接收端应允许 JSON 增加字段。
|
|
|
|
|
|
- 数值单位以本协议为准。
|
|
|
|
|
|
- `selfCheck` 不能代替 `status`。
|
|
|
|
|
|
- 轮挡时间未记录时为空字符串,不要按 `0` 解析。
|
|
|
|
|
|
- 设备异常码见第 10 节;`-1` 不是设备故障,表示当前无有效引导结果。
|
|
|
|
|
|
- 组播和 HTTP 没有历史查询地址。历史见第 11 节记录库。
|
|
|
|
|
|
|
|
|
|
|
|
## 10. 错误码
|
|
|
|
|
|
|
|
|
|
|
|
顶层 `errorCode` 与 `selfCheck.errorCode` 使用同一套取值。`0` 为正常。设备异常使用 `2200`~`2205`。
|
|
|
|
|
|
|
|
|
|
|
|
| errorCode | 含义 | 说明 |
|
|
|
|
|
|
| ---: | --- | --- |
|
|
|
|
|
|
| 0 | 正常 | 本包无设备或系统错误。 |
|
|
|
|
|
|
| -1 | 无有效结果 | 未开始、空闲或尚无检测结果。不是设备故障。 |
|
|
|
|
|
|
| 2200 | 多项设备异常 | 雷达、相机、存储、网络中两项及以上异常。 |
|
|
|
|
|
|
| 2201 | 雷达异常 | 雷达离线、未运行或自检失败。 |
|
|
|
|
|
|
| 2202 | 平面相机异常 | 平面相机离线、未打开或自检失败。 |
|
|
|
|
|
|
| 2203 | 存储异常 | 本机存储不可写。 |
|
|
|
|
|
|
| 2204 | 网络异常 | 无可用 IPv4 网卡。 |
|
|
|
|
|
|
| 2205 | 急停输入异常 | 急停已启用但输入不可用。 |
|
|
|
|
|
|
|
|
|
|
|
|
判断方式:
|
|
|
|
|
|
|
|
|
|
|
|
- `errorCode=0`:无设备错误。引导是否异常看 `hasException` 和 `guideStateCode`(如 15 ID FAIL、20 急停按下)。
|
|
|
|
|
|
- `errorCode=-1`:无有效结果,通常 `success=false`、`hasResult=false`。
|
|
|
|
|
|
- `errorCode` 为 `2200`~`2204`:自检或运行中设备异常,`guideStateCode` 一般为 `22`,`status.activated=false`。
|
|
|
|
|
|
- `errorCode=2205`:急停输入异常,`guideStateCode` 一般为 `23`。
|
|
|
|
|
|
- 急停按钮按下是引导状态 `20`,不是本表设备错误码。
|
|
|
|
|
|
- 其他非 `0` 值按一般异常处理,结合 `message` 和 `guideStateCode`。
|
|
|
|
|
|
- `status.camera.connected`、`status.lidar.connected` 是实时在线状态,不能用 `selfCheck` 代替。
|
|
|
|
|
|
|
|
|
|
|
|
雷达异常示例:
|
|
|
|
|
|
|
|
|
|
|
|
```json
|
|
|
|
|
|
"success": false,
|
|
|
|
|
|
"hasResult": false,
|
|
|
|
|
|
"guideStateCode": 22,
|
|
|
|
|
|
"guideText": "ERROR",
|
|
|
|
|
|
"hasException": true,
|
|
|
|
|
|
"errorCode": 2201,
|
|
|
|
|
|
"message": "雷达异常",
|
|
|
|
|
|
"status": {
|
|
|
|
|
|
"workMode": "normal",
|
|
|
|
|
|
"activated": false,
|
|
|
|
|
|
"camera": { "name": "平面相机", "connected": true },
|
|
|
|
|
|
"lidar": { "name": "雷达", "connected": false }
|
|
|
|
|
|
}
|
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
|
|
## 11. 历史记录访问
|
|
|
|
|
|
|
|
|
|
|
|
组播和 HTTP **不支持**历史查询,没有历史 URL。当前状态地址见第 2、3 节。
|
|
|
|
|
|
|
2026-09-19 10:01:32 +08:00
|
|
|
|
历史引导过程从本机记录库读取。库内三张表:`guide_session`(一次引导会话)、`guide_detail`(过程采样)、`guide_event`(操作事件)。明细字段与第 7 节 `ParkingSpaceGuideResult` 对应;`status`、`selfCheck` 拆成 `status_`、`selfCheck_` 前缀列,读出后再拼回对象。另有会话起止时间 `startTime`、`endTime`,格式与轮挡时间相同(`yyyy-MM-dd HH:mm:ss`,进行中的结束时间为空)。`sessionUuid` 只作库内关联和回放查询,不是第 7 节结果包字段。
|
2026-09-17 15:30:30 +08:00
|
|
|
|
|
|
|
|
|
|
连接信息:
|
|
|
|
|
|
|
|
|
|
|
|
| 参数 | 默认值 | 说明 |
|
|
|
|
|
|
| --- | --- | --- |
|
|
|
|
|
|
| 协议 | MariaDB | 使用 MariaDB / MySQL 兼容客户端连接。 |
|
|
|
|
|
|
| 地址 | 停机引导设备 IP | 与 HTTP 查询使用同一台设备。 |
|
|
|
|
|
|
| 端口 | 3306 | 记录库端口。 |
|
|
|
|
|
|
| 库名 | parking_guide | 默认库。 |
|
|
|
|
|
|
| 用户 | parking | 默认账号。 |
|
|
|
|
|
|
| 密码 | parking | 默认密码,现场可改。 |
|
|
|
|
|
|
|
2026-09-19 10:01:32 +08:00
|
|
|
|
默认保留最近 30 天。库不可用时引导、组播和 HTTP 仍可用,仅不写历史。远程控制端也可用 `list_sessions` / `get_session_samples` 读会话和明细,见《停机引导远程控制协议》。
|
|
|
|
|
|
|
|
|
|
|
|
### 11.1 三表关系
|
|
|
|
|
|
|
|
|
|
|
|
关联键一律是 `sessionUuid`(`VARCHAR(64)`)。`guide_session.sessionUuid` 唯一。一次点击开始到停止(或急停、自检失败结束)对应 **一条** `guide_session`。
|
|
|
|
|
|
|
|
|
|
|
|
```
|
|
|
|
|
|
guide_session 1 ── sessionUuid ──< N guide_detail (过程采样,必有所属会话)
|
|
|
|
|
|
guide_session 1 ── sessionUuid ──< 0..N guide_event (操作事件;开机自检等无会话时为空)
|
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
|
|
| 子表 | 关联字段 | 父表 | 基数 | 外键删除 |
|
|
|
|
|
|
| --- | --- | --- | --- | --- |
|
|
|
|
|
|
| `guide_detail` | `sessionUuid` NOT NULL | `guide_session.sessionUuid` | 1 对多 | `ON DELETE CASCADE` |
|
|
|
|
|
|
| `guide_event` | `sessionUuid` 可空 | `guide_session.sessionUuid` | 1 对 0..多 | `ON DELETE CASCADE`;`NULL` 行不随会话删除 |
|
|
|
|
|
|
|
|
|
|
|
|
约束要点:
|
|
|
|
|
|
|
|
|
|
|
|
- 明细必须先有会话。开始引导写入 `guide_session` 后,才向 `guide_detail`、`guide_event` 写该次 `sessionUuid`。
|
|
|
|
|
|
- 事件允许无会话:`sessionUuid` 为空(库内 `NULL`),例如开机自检 `boot_self_check`。这类行没有父会话,删除过期会话时不会被级联清掉。
|
|
|
|
|
|
- 删除一条 `guide_session` 时,该 `sessionUuid` 下的明细和有会话事件一并删除。过期清理先按 `guide_session.startTime` 删会话(级联子表),再按时间删除 `sessionUuid IS NULL` 的事件。
|
|
|
|
|
|
- 三张表各自另有自增主键 `id`,仅库内使用,对外关联只用 `sessionUuid`。
|
|
|
|
|
|
- 点云和图像不入库。回放只能还原当时的状态 JSON,不能还原原始传感器数据。
|
|
|
|
|
|
|
|
|
|
|
|
写入时机:
|
|
|
|
|
|
|
|
|
|
|
|
| 时机 | `guide_session` | `guide_detail` | `guide_event` |
|
|
|
|
|
|
| --- | --- | --- | --- |
|
|
|
|
|
|
| 开机自检 | 不写 | 不写 | `sessionUuid` 为空,`boot_self_check` |
|
|
|
|
|
|
| 点击开始,快检失败 | 不写 | 不写 | 无会话或当前会话的 `self_check` |
|
|
|
|
|
|
| 引导会话开始 | `INSERT` 一条,`endTime` 为空 | 随后按规则采样 | `session_begin` |
|
|
|
|
|
|
| 引导过程中 | 轮挡时间变化时 `UPDATE` | `guideStateCode` 变化立即写一条;其余按 `sampleIntervalMs`(默认 200 ms)采样 | `person_chock` / `chock_on` / `chock_off` / `maintenance` / `self_check` |
|
|
|
|
|
|
| 停止、急停或流程结束 | `UPDATE` 结束状态、检测机型、`endTime` | 可再写最后一条 | `session_end` |
|
|
|
|
|
|
|
|
|
|
|
|
还原一次引导:用 `sessionUuid` 读 `guide_session` 得到起止摘要;按 `timestamp` 升序读 `guide_detail`,把拆列拼回第 7 节对象;需要操作轨迹时再按同一 `sessionUuid` 读 `guide_event`。明细里的 `sessionUuid` 还原时不要放进结果包。
|
|
|
|
|
|
|
|
|
|
|
|
查询示例:
|
|
|
|
|
|
|
|
|
|
|
|
```sql
|
|
|
|
|
|
-- 最近会话
|
|
|
|
|
|
SELECT `sessionUuid`, `parkId`, `targetId`, `expectedModelType`, `modelType`,
|
|
|
|
|
|
`startTime`, `endTime`, `guideStateCode`, `hasException`, `errorCode`
|
|
|
|
|
|
FROM guide_session
|
|
|
|
|
|
ORDER BY `startTime` DESC
|
|
|
|
|
|
LIMIT 50;
|
|
|
|
|
|
|
|
|
|
|
|
-- 某次引导过程(拼回 ParkingSpaceGuideResult,不含 sessionUuid)
|
|
|
|
|
|
SELECT *
|
|
|
|
|
|
FROM guide_detail
|
|
|
|
|
|
WHERE `sessionUuid` = '<sessionUuid>'
|
|
|
|
|
|
ORDER BY `timestamp` ASC;
|
|
|
|
|
|
|
|
|
|
|
|
-- 某次引导的操作事件
|
|
|
|
|
|
SELECT `timestamp`, `eventType`, `message`, `payload`
|
|
|
|
|
|
FROM guide_event
|
|
|
|
|
|
WHERE `sessionUuid` = '<sessionUuid>'
|
|
|
|
|
|
ORDER BY `timestamp` ASC;
|
|
|
|
|
|
|
|
|
|
|
|
-- 无会话事件(如开机自检)
|
|
|
|
|
|
SELECT `timestamp`, `eventType`, `message`, `payload`
|
|
|
|
|
|
FROM guide_event
|
|
|
|
|
|
WHERE `sessionUuid` IS NULL
|
|
|
|
|
|
ORDER BY `timestamp` ASC;
|
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
|
|
时间字段:`guide_session` 的 `startTime`、`endTime` 和三张表中的轮挡时间为设备本地 `DATETIME`(`yyyy-MM-dd HH:mm:ss`);`guide_detail.timestamp`、`guide_event.timestamp` 为 Unix 毫秒整数,与第 7 节 `timestamp` 相同。布尔列存 `TINYINT`:`1` 为真,`0` 为假。
|
|
|
|
|
|
|
|
|
|
|
|
### 11.2 `guide_session` 引导会话
|
|
|
|
|
|
|
|
|
|
|
|
一次点击开始到停止(或急停/自检失败结束)对应一条。结束时回写检测机型、最终状态和错误信息。
|
|
|
|
|
|
|
|
|
|
|
|
| 字段 | 说明 |
|
|
|
|
|
|
| --- | --- |
|
|
|
|
|
|
| sessionUuid | 会话标识,仅库内/回放使用 |
|
|
|
|
|
|
| parkId | 停机位 |
|
|
|
|
|
|
| targetId | 目标编号 |
|
|
|
|
|
|
| expectedModelType | 操作员选择机型 |
|
|
|
|
|
|
| modelType | 检测机型,会话结束时回写 |
|
|
|
|
|
|
| modelMatched | 选择机型与检测机型是否匹配 |
|
|
|
|
|
|
| startTime | 开始时间 |
|
|
|
|
|
|
| endTime | 结束时间;进行中为空 |
|
|
|
|
|
|
| guideStateCode | 结束时的引导状态序号 |
|
|
|
|
|
|
| hasException | 结束时是否异常 |
|
|
|
|
|
|
| errorCode | 结束时错误码,与第 10 节相同 |
|
|
|
|
|
|
| message | 结束时说明 |
|
|
|
|
|
|
| personChockTime | 人员轮挡确认时间 |
|
|
|
|
|
|
| chockOnTime | 人工上轮挡时间 |
|
|
|
|
|
|
| chockOffTime | 人工下轮挡时间 |
|
|
|
|
|
|
|
|
|
|
|
|
### 11.3 `guide_detail` 引导明细
|
|
|
|
|
|
|
|
|
|
|
|
一次会话的过程数据。除 `sessionUuid` 外,列与第 7 节一一对应。
|
|
|
|
|
|
|
|
|
|
|
|
| 字段 | 说明 |
|
|
|
|
|
|
| --- | --- |
|
|
|
|
|
|
| sessionUuid | 所属会话,对应 `guide_session.sessionUuid`,还原时不放入结果包 |
|
|
|
|
|
|
| protocol | 固定 `ParkingSpaceGuideResult` |
|
|
|
|
|
|
| version | 协议版本,当前 `1.1` |
|
|
|
|
|
|
| success | 本条是否有效结果且 errorCode=0 |
|
|
|
|
|
|
| hasResult | 本条是否包含有效引导结果 |
|
|
|
|
|
|
| targetId | 目标编号 |
|
|
|
|
|
|
| parkId | 停机位 |
|
|
|
|
|
|
| expectedModelType | 操作员选择机型 |
|
|
|
|
|
|
| modelType | 检测机型 |
|
|
|
|
|
|
| modelMatched | 选择机型与检测机型是否匹配 |
|
|
|
|
|
|
| personChockTime | 人员轮挡确认时间 |
|
|
|
|
|
|
| chockOnTime | 人工上轮挡时间 |
|
|
|
|
|
|
| chockOffTime | 人工下轮挡时间 |
|
|
|
|
|
|
| status_workMode | 工作模式 |
|
|
|
|
|
|
| status_activated | 是否已激活 |
|
|
|
|
|
|
| status_camera_name | 平面相机名称 |
|
|
|
|
|
|
| status_camera_connected | 平面相机是否在线 |
|
|
|
|
|
|
| status_lidar_name | 雷达名称 |
|
|
|
|
|
|
| status_lidar_connected | 雷达是否在线 |
|
|
|
|
|
|
| status_emergencyStop_name | 急停名称 |
|
|
|
|
|
|
| status_emergencyStop_enabled | 是否启用急停 |
|
|
|
|
|
|
| status_emergencyStop_available | 急停输入是否可用 |
|
|
|
|
|
|
| status_emergencyStop_active | 急停是否正在触发 |
|
|
|
|
|
|
| status_emergencyStop_latched | 急停是否已锁存 |
|
|
|
|
|
|
| selfCheck_running | 是否正在自检 |
|
|
|
|
|
|
| selfCheck_ok | 自检是否通过 |
|
|
|
|
|
|
| selfCheck_lidarOk | 雷达自检 |
|
|
|
|
|
|
| selfCheck_cameraOk | 相机自检 |
|
|
|
|
|
|
| selfCheck_storageOk | 存储自检 |
|
|
|
|
|
|
| selfCheck_networkOk | 网络自检 |
|
|
|
|
|
|
| selfCheck_errorCode | 自检错误码 |
|
|
|
|
|
|
| selfCheck_message | 自检说明 |
|
|
|
|
|
|
| guideStateCode | 引导状态序号 |
|
|
|
|
|
|
| distanceToStop | 到停止线距离,毫米 |
|
|
|
|
|
|
| bodyYawAngle | 机身偏转角,度 |
|
|
|
|
|
|
| lateralOffset | 横向偏移,毫米 |
|
|
|
|
|
|
| aircraftSpeed | 接近速度,米/秒 |
|
|
|
|
|
|
| hasException | 本条是否异常 |
|
|
|
|
|
|
| guideText | 引导文字 |
|
|
|
|
|
|
| message | 说明或异常原因 |
|
|
|
|
|
|
| errorCode | 错误码,与第 10 节相同 |
|
|
|
|
|
|
| timestamp | 本条时间,Unix 毫秒 |
|
|
|
|
|
|
|
|
|
|
|
|
### 11.4 `guide_event` 操作事件
|
|
|
|
|
|
|
|
|
|
|
|
操作员动作和关键系统事件。有会话时 `sessionUuid` 与 `guide_session.sessionUuid` 相同;无会话时为空。
|
|
|
|
|
|
|
|
|
|
|
|
| 字段 | 说明 |
|
|
|
|
|
|
| --- | --- |
|
|
|
|
|
|
| sessionUuid | 所属会话;无会话时为空 |
|
|
|
|
|
|
| timestamp | 事件时间,Unix 毫秒 |
|
|
|
|
|
|
| eventType | 事件类型,见下表 |
|
|
|
|
|
|
| message | 说明文字 |
|
|
|
|
|
|
| payload | 附加 JSON 文本;自检事件为 `selfCheck` 对象,其余通常为空 |
|
|
|
|
|
|
|
|
|
|
|
|
| eventType | 写入时机 | sessionUuid | payload |
|
|
|
|
|
|
| --- | --- | --- | --- |
|
|
|
|
|
|
| boot_self_check | 应用初始化完成时的开机自检 | 空 | 自检结果 |
|
|
|
|
|
|
| self_check | 点击开始后的启动自检 | 有会话则为该次,否则为空 | 自检结果 |
|
|
|
|
|
|
| session_begin | 自检通过,引导会话开始 | 有 | 空 |
|
|
|
|
|
|
| session_end | 停止、急停或流程结束 | 有 | 空 |
|
|
|
|
|
|
| person_chock | 轮挡区域人员首次确认 | 有 | 空 |
|
|
|
|
|
|
| chock_on | 人工上轮挡 | 有 | 空 |
|
|
|
|
|
|
| chock_off | 人工下轮挡 | 有 | 空 |
|
|
|
|
|
|
| maintenance | 进入或退出维护模式 | 有则带会话,否则为空 | 空 |
|