119 lines
4.3 KiB
Markdown
119 lines
4.3 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. 触发命令
|
||
|
||
以下工件序号规则仅适用于 `WorkpieceRotorApp`;`WorkpieceTaperedApp` 协议保持原有实现。
|
||
Rotor 客户向 `Trigger` 寄存器写入组合命令:`工件序号 × 10 + 相机号`。个位为相机号(1–9),十位及以上为工件序号。
|
||
|
||
| 写入值 | 命令 |
|
||
|---:|---|
|
||
| `0` | 不触发 |
|
||
| `1` / `2` | 使用相机 1 / 2 和配置的默认工件检测 |
|
||
| `11` / `12` | 使用相机 1 / 2 和 1 号工件检测 |
|
||
| `21` / `22` | 使用相机 1 / 2 和 2 号工件检测 |
|
||
| 个位为 `0` 的非零值 | 无效相机号,启动失败 |
|
||
|
||
相机必须已配置且可用;工件序号必须存在于“工件尺寸”Tab。省略工件序号(写入 `1–9`)时使用默认工件。
|
||
组合值不能超过 uint16 上限 `65535`:相机 1–5 最多可指定工件 6553,相机 6–9 最多可指定工件 6552。
|
||
沿用原寄存器地址,不增加寄存器,不修改结果区;`workpieceType` 仍表示算法输出类型,与尺寸序号无关。
|
||
工件序号按列表顺序从 1 连续编号,上下移动或删除后重新编号;保存后须同步调整 PLC 的工件序号。旧配置的半径、高度自动迁移为 1 号工件。
|
||
|
||
服务端收到非零值后将触发寄存器清零,并捕获本次相机号和工件序号。
|
||
未配置的序号或无效尺寸列表使本次启动失败(`Status=2`);忙时的新请求被忽略,不覆盖当前尺寸及状态。
|
||
客户应等待本轮完成后再发送下一次请求。检测开始后修改配置不会改变本轮半径、高度。
|
||
|
||
工件检测算法会在定位过程中同步计算所需的料框信息,不需要单独触发料框检测。
|
||
|
||
## 5. 状态寄存器
|
||
|
||
客户读取 `Status` 寄存器:
|
||
|
||
| 状态值 | 说明 |
|
||
|---:|---|
|
||
| `0` | 正在检测 |
|
||
| `1` | 检测完成 |
|
||
| `2` | 检测失败 |
|
||
|
||
工件检测完成且 `Status=1` 后,客户读取工件检测结果寄存器。
|
||
|
||
## 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 |
|
||
|
||
`workpieceType` 取值含义如下:
|
||
|
||
| `workpieceType` | 含义 |
|
||
|---:|---|
|
||
| `0` | 中央 |
|
||
| `1` | 上边 |
|
||
| `2` | 下边 |
|
||
| `3` | 左边 |
|
||
| `4` | 右边 |
|
||
| `5` | 左上角 |
|
||
| `6` | 右上角 |
|
||
| `7` | 左下角 |
|
||
| `8` | 右下角 |
|
||
| `9` | 隔板 |
|
||
|
||
## 7. 姿态字段顺序
|
||
|
||
默认姿态字段含义:
|
||
|
||
| 字段 | 默认含义 |
|
||
|---|---|
|
||
| `A` | Roll |
|
||
| `B` | Pitch |
|
||
| `C` | Yaw |
|
||
|
||
如现场约定了其他姿态顺序,以项目交付时确认的协议参数为准。
|
||
|
||
## 8. 典型交互流程
|
||
|
||
1. 客户设备连接视觉设备 Modbus TCP 端口。
|
||
2. 客户设备向地址 `0` 写入组合命令,例如 `21`,使用相机 1 触发 2 号工件检测。
|
||
3. 客户设备轮询地址 `1`。
|
||
4. 当地址 `1` 读取为 `1` 时,读取地址 `2-15` 获取工件结果。
|
||
5. 当地址 `1` 读取为 `2` 时,本次检测失败,不读取结果。
|