# 锥形工件定位 / 转子钢芯定位 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` 时,本次检测失败,不读取结果。