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

107 lines
2.8 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 螺杆/工具盘定位 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` 时,本次检测失败