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