GrabBag/App/ScrewPosition/Doc/螺杆定位ModbusTCP协议文档.md

107 lines
2.8 KiB
Markdown
Raw Normal View History

# 螺杆/工具盘定位 ModbusTCP 协议文档
## 1. 概述
- 协议: Modbus TCP
- 服务端默认端口: `5020`
- 当前实现使用保持寄存器
- 地址说明均为保持寄存器地址
## 2. 寄存器定义
| 地址 | 长度 | 访问 | 说明 |
|------|------|------|------|
| `0` | 1 | 写 | 触发检测,`1=螺杆检测``2=工具盘检测`,写入后服务端会自动清零 |
| `1` | 1 | 读 | 工作状态,`0=空闲``1=检测中``2=完成``3=异常` |
| `2` | 2 | 写 | 机械臂 `X``float32` |
| `4` | 2 | 写 | 机械臂 `Y``float32` |
| `6` | 2 | 写 | 机械臂 `Z``float32` |
| `8` | 2 | 写 | 机械臂 `RX``float32` |
| `10` | 2 | 写 | 机械臂 `RY``float32` |
| `12` | 2 | 写 | 机械臂 `RZ``float32` |
| `14` | 2 | 读 | 结果 `X``float32` |
| `16` | 2 | 读 | 结果 `Y``float32` |
| `18` | 2 | 读 | 结果 `Z``float32` |
| `20` | 2 | 读 | 结果 `RX``float32` |
| `22` | 2 | 读 | 结果 `RY``float32` |
| `24` | 2 | 读 | 结果 `RZ``float32` |
说明:
- 地址 `2~13` 为机械臂当前位姿(眼在手上模式),触发前写入
- 地址 `14~25` 为检测结果输出 `XYZ RX RY RZ`
- 每个 `float32` 占用 2 个保持寄存器,字序为高字在前、低字在后
- 当前版本只输出首个目标位姿
- 当没有结果或检测失败时,`14~25` 地址返回全 0
## 3. 触发方式
### 3.1 写入机械臂位姿
触发前,先将机械臂当前位姿写入地址 `2~13`
### 3.2 触发螺杆检测
向地址 `0` 写入:
```text
1
```
### 3.3 触发工具盘检测
向地址 `0` 写入:
```text
2
```
工具盘检测会调用 `sx_getLocationPlatePose` 算法,输出定位盘中心位姿。
## 4. 工作状态说明
| 状态值 | 含义 |
|--------|------|
| `0` | 空闲,可接收下一次触发 |
| `1` | 检测中 |
| `2` | 检测完成,结果已写入地址 `14~25` |
| `3` | 检测异常或当前请求不被支持 |
## 5. 位姿数据格式
### 机械臂位姿(输入,地址 2~13
| 字段 | 地址范围 |
|------|----------|
| `X` | `2~3` |
| `Y` | `4~5` |
| `Z` | `6~7` |
| `RX` | `8~9` |
| `RY` | `10~11` |
| `RZ` | `12~13` |
### 检测结果(输出,地址 14~25
| 字段 | 地址范围 |
|------|----------|
| `X` | `14~15` |
| `Y` | `16~17` |
| `Z` | `18~19` |
| `RX` | `20~21` |
| `RY` | `22~23` |
| `RZ` | `24~25` |
其中:
- 螺杆检测输出为机械臂坐标系下的 `XYZ + RX/RY/RZ`
- 工具盘检测输出为机械臂坐标系下的定位盘中心 `XYZ + RX/RY/RZ`(法向量转欧拉角)
## 6. 典型流程
1. 读取地址 `1`,确认当前为 `0`
2. 将机械臂当前位姿写入地址 `2~13`
3. 向地址 `0` 写入 `1``2`
4. 轮询地址 `1`
5. 当地址 `1=2` 时,读取地址 `14~25`
6. 当地址 `1=3` 时,本次检测失败