91 lines
2.6 KiB
Markdown
91 lines
2.6 KiB
Markdown
# 锥形工件定位 / 转子钢芯定位 Modbus TCP 客户对接协议
|
||
|
||
## 1. 通信参数
|
||
|
||
| 项目 | 说明 |
|
||
|---|---|
|
||
| 协议 | Modbus TCP |
|
||
| 视觉设备角色 | Server / 从设备 |
|
||
| 客户设备角色 | Client / 主设备 |
|
||
| 连接端口 | 现场标准端口 `502` |
|
||
| 寄存器地址 | 本文档使用 0-based 地址 |
|
||
| 数据区 | Holding Register |
|
||
| 浮点格式 | 32 位 IEEE754,占 2 个 16 位寄存器 |
|
||
| 默认浮点字顺序 | 高字在前,低字在后,即 `ABCD` |
|
||
|
||
## 2. 支持的功能码
|
||
|
||
| 功能码 | 名称 | 用途 |
|
||
|---|---|---|
|
||
| `0x03` | Read Holding Registers | 读取状态和检测结果 |
|
||
| `0x06` | Write Single Register | 写入触发命令 |
|
||
| `0x10` | Write Multiple Registers | 写入触发命令 |
|
||
|
||
## 3. 寄存器表
|
||
|
||
| 地址 | 名称 | 数据类型 | 客户操作 | 说明 |
|
||
|---:|---|---|---|---|
|
||
| `0` | Trigger | uint16 | 写 | 触发检测命令 |
|
||
| `1` | Status | uint16 | 读 | 检测状态 |
|
||
| `2` | ResultStart | - | 读 | 工件检测结果起始地址 |
|
||
|
||
## 4. 触发命令
|
||
|
||
客户向 `Trigger` 寄存器写入:
|
||
|
||
| 写入值 | 命令 |
|
||
|---:|---|
|
||
| `1` | 工件检测 |
|
||
| `2` | 料框检测 |
|
||
|
||
## 5. 状态寄存器
|
||
|
||
客户读取 `Status` 寄存器:
|
||
|
||
| 状态值 | 说明 |
|
||
|---:|---|
|
||
| `0` | 正在检测 |
|
||
| `1` | 检测完成 |
|
||
| `2` | 检测失败 |
|
||
|
||
工件检测完成且 `Status=1` 后,客户读取工件检测结果寄存器。
|
||
|
||
料框检测只通过 `Status` 返回完成或失败,不提供料框几何结果寄存器。
|
||
|
||
## 6. 工件检测结果
|
||
|
||
当前 Modbus TCP 返回第一个工件结果。
|
||
|
||
结果从地址 `2` 开始,共 14 个寄存器:
|
||
|
||
| 地址 | 寄存器数 | 数据类型 | 字段 | 说明 |
|
||
|---:|---:|---|---|---|
|
||
| `2` | 1 | uint16 | `workpieceType` | 工件类型 |
|
||
| `3` | 1 | uint16 | reserved | 保留 |
|
||
| `4-5` | 2 | float | `X` | X 坐标,单位 mm |
|
||
| `6-7` | 2 | float | `Y` | Y 坐标,单位 mm |
|
||
| `8-9` | 2 | float | `Z` | Z 坐标,单位 mm |
|
||
| `10-11` | 2 | float | `A` | 姿态第 1 项,单位 deg |
|
||
| `12-13` | 2 | float | `B` | 姿态第 2 项,单位 deg |
|
||
| `14-15` | 2 | float | `C` | 姿态第 3 项,单位 deg |
|
||
|
||
## 7. 姿态字段顺序
|
||
|
||
默认姿态字段含义:
|
||
|
||
| 字段 | 默认含义 |
|
||
|---|---|
|
||
| `A` | Roll |
|
||
| `B` | Pitch |
|
||
| `C` | Yaw |
|
||
|
||
如现场约定了其他姿态顺序,以项目交付时确认的协议参数为准。
|
||
|
||
## 8. 典型交互流程
|
||
|
||
1. 客户设备连接视觉设备 Modbus TCP 端口。
|
||
2. 客户设备向地址 `0` 写入 `1`,触发工件检测。
|
||
3. 客户设备轮询地址 `1`。
|
||
4. 当地址 `1` 读取为 `1` 时,读取地址 `2-15` 获取工件结果。
|
||
5. 当地址 `1` 读取为 `2` 时,本次检测失败,不读取结果。
|