GrabBag/App/StatorPosition/Doc/定子线圈ModbusTCP协议.md
2026-02-23 19:45:47 +08:00

140 lines
6.5 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. 系统架构
3D视觉系统提供双通道 Modbus TCP 通信接口,两个通道使用相同的寄存器协议,独立运行。
```
┌──────────────────┐
│ │
通道1 │ 3D视觉系统 │ 通道2
┌────────────────►│ │◄───────────────┐
│ Modbus TCP │ │ Modbus TCP │
│ └──────────────────┘ │
│ │
▼ ▼
┌──────────────────┐ ┌──────────────────┐
│ PLC │ │ 外部设备 │
│ 192.168.0.88 │ │ │
│ 端口 502 │ │ 连接端口 502 │
└──────────────────┘ └──────────────────┘
```
- **通道1**3D视觉系统作为 Modbus TCP 客户端,连接 PLC服务端端口502
- **通道2**3D视觉系统作为 Modbus TCP 服务端监听端口502等待外部设备连接
## 2. 寄存器定义
每次检测输出1个目标位置6个float值 = 12个寄存器
### 2.1 寄存器地址表
| 地址 | 类型 | 说明 |
|------|------|------|
| 0 | uint16 | 触发信号(边沿检测 0→1 触发) |
| 1 | uint16 | 工作状态 |
| 2-13 | float × 6 | 目标位姿数据X, Y, Z, Roll, Pitch, Yaw |
### 2.2 工作状态值地址1
| 值 | 含义 |
|----|------|
| 0 | 正在工作 |
| 1 | 完成(正常) |
| 2 | 完成(异常) |
### 2.3 目标位姿数据布局地址2-13
| 地址 | 类型 | 说明 |
|------|------|------|
| 2-3 | float | X坐标 (mm) |
| 4-5 | float | Y坐标 (mm) |
| 6-7 | float | Z坐标 (mm) |
| 8-9 | float | Roll角度 (°) |
| 10-11 | float | Pitch角度 (°) |
| 12-13 | float | Yaw角度 (°) |
> **float编码**IEEE 754 单精度浮点数每个float占2个保持寄存器默认大端序高位字在低地址
## 3. 通信流程
### 3.1 通道1 时序3D视觉系统 → PLC
3D视觉系统主动轮询PLC的触发寄存器检测到触发后执行检测并回写结果。
```
3D视觉系统 PLC
│ │
│ ① 轮询读取地址0 │
│◄─────────────────────────────────│
│ │
│ ② 地址0=1PLC发起触发
│◄─────────────────────────────────│
│ │
│ ③ 写0到地址0清除触发
│─────────────────────────────────►│
│ │
│ ④ 写0到地址1状态=正在工作) │
│─────────────────────────────────►│
│ │
│ [3D视觉系统执行检测] │
│ │
│ ⑤ 写位姿数据到地址2-13 │
│─────────────────────────────────►│
│ │
│ ⑥ 写1到地址1状态=完成正常) │
│─────────────────────────────────►│
│ │
```
### 3.2 通道2 时序(外部设备 → 3D视觉系统
外部设备作为 Modbus 客户端连接到3D视觉系统端口502通过写寄存器触发检测通过读寄存器获取结果。
```
外部设备 3D视觉系统(:502)
│ │
│ ① 写1到地址0触发
│─────────────────────────────────►│
│ │
│ [3D系统清除地址0、置地址1=0] │
│ [3D系统执行检测] │
│ [3D系统写位姿到地址2-13] │
│ [3D系统置地址1=1或2] │
│ │
│ ② 轮询读取地址1查询状态
│─────────────────────────────────►│
│ 返回: 1=完成正常 / 2=异常 │
│◄─────────────────────────────────│
│ │
│ ③ 读取地址2-13获取位姿
│─────────────────────────────────►│
│ 返回: 6个floatX,Y,Z,R,P,Y
│◄─────────────────────────────────│
│ │
```
### 3.3 流程说明
1. **触发**地址0写入1采用边沿检测0→1变化时触发重复写1不会重复触发
2. **工作中**触发后3D系统立即清除地址0并将地址1置为0正在工作
3. **结果输出**检测完成后位姿数据写入地址2-13然后地址1置为1完成正常
4. **异常处理**检测失败时地址1置为2异常位姿数据无效
5. **双通道联动**:任一通道触发检测后,结果会同时写入两个通道的寄存器
## 4. 使用建议
### 4.1 触发方检查流程
1. 写1到地址0触发检测
2. 轮询读取地址1等待值变为非0
- 值为1检测成功读取地址2-13获取位姿
- 值为2检测异常可重新触发
3. 处理完毕后可再次触发下一次检测
### 4.2 注意事项
- 3D系统工作期间地址1=0请勿重复触发
- 位姿数据仅在地址1=1完成正常时有效
- 两个通道独立运行,可同时使用