GrabBag/App/RodAndBarPosition/Doc/MODBUS_PROTOCOL.md

82 lines
3.0 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.

# 棒材定位系统 Modbus TCP 通信协议
## 1. 系统架构
- **视觉系统**:作为 Modbus TCP Server默认端口 502
- **外部客户端**:连接到视觉系统进行检测触发和结果读取
## 2. 连接参数
| 参数 | 值 |
|------|------|
| 协议 | Modbus TCP |
| 端口 | 502默认 |
| 角色 | Server被动等待连接 |
## 3. 寄存器定义
| 地址 | 寄存器数 | 类型 | 读/写 | 说明 |
|------|----------|------|-------|------|
| 0 | 1 | uint16 | R/W | 检测触发写入非零值触发1=相机12=相机2触发后自动清零 |
| 1 | 1 | uint16 | R | 状态码 |
| 2 | 2 | float | R | X中心点 X 坐标mm |
| 4 | 2 | float | R | Y中心点 Y 坐标mm |
| 6 | 2 | float | R | Z中心点 Z 坐标mm |
| 8 | 2 | float | R | Roll绕X轴旋转角 |
| 10 | 2 | float | R | Pitch绕Y轴旋转角 |
| 12 | 2 | float | R | Yaw绕Z轴旋转角 |
> **浮点数编码**IEEE 754 单精度浮点数,每个 float 占 2 个 uint16 寄存器,字节序由网络配置决定
> **坐标系**XYZ 为机械臂坐标系下的值已经过手眼标定转换RPY 为 ZYX 外旋欧拉角
## 4. 状态码定义
| 状态码 | 说明 |
|--------|------|
| 0 | 正在检测 |
| 1 | 检测成功(地址 2~13 数据有效) |
| 2 | 检测失败 |
| 3 | 检测成功但结果为空 |
## 5. 通信流程
### 5.1 触发检测
1. 外部客户端写入地址 0值为相机编号1 或 2
2. 视觉系统自动清零地址 0并将地址 1 设为 0正在检测
3. 视觉系统触发对应相机的检测
### 5.2 读取结果
1. 检测完成后,视觉系统写入:
- 地址 1状态码1=成功2=失败3=空结果)
- 地址 2~13第一个棒材的 X, Y, Z, Roll, Pitch, Yaw仅状态码为 1 时有效)
2. 外部客户端轮询地址 1当值从 0 变为非零时表示检测完成
3. 状态码为 1 时,读取地址 2~13 获取定位结果
### 5.3 典型时序
```
客户端 视觉系统
| |
|--- 写入 地址0 = 1 (触发相机1) ----->|
| |-- 清零地址0地址1=0(正在检测)
| |-- 执行检测...
| |
|<-- 读取 地址1 = 0 (正在检测) -------|
| |
|<-- 读取 地址1 = 1 (检测成功) -------|
| |-- 写入地址1=1, 地址2~13=结果
|<-- 读取 地址2~13 (XYZ+RPY) --------|
| |
```
## 6. 注意事项
1. 触发寄存器写入后会自动清零,无需客户端手动清零
2. 仅输出第一个检测到的棒材结果
3. 坐标数据为机械臂坐标系下的值(已经过手眼标定转换)
4. 欧拉角为 ZYX 外旋顺序(从轴向方向和法向方向构建旋转矩阵提取)
5. 浮点数字节序(大端/小端)由网络配置中的 byteOrder 参数决定