GrabBag/App/StatorPosition/Doc/定子线圈ModbusTCP协议.md

140 lines
6.7 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=1(PLC发起触发) │
│◄─────────────────────────────────│
│ │
│ ③ 写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个float(X,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(完成正常)时有效
- 两个通道独立运行,可同时使用