140 lines
6.5 KiB
Markdown
140 lines
6.5 KiB
Markdown
# 定子线圈定位 - 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(完成正常)时有效
|
||
- 两个通道独立运行,可同时使用
|