GrabBag/App/RodWeldSeam/Doc/钢筋焊缝定位系统ModbusTCP通信协议.md
2026-07-11 16:00:14 +08:00

6.8 KiB
Raw Permalink Blame History

钢筋焊缝定位系统 Modbus TCP 通信协议

1. 系统架构

  • 视觉系统:作为 Modbus TCP Server默认端口 502
  • 外部客户端:连接到视觉系统进行检测触发和结果读取

2. 连接参数

参数
协议 Modbus TCP
端口 502默认
角色 Server被动等待连接

3. 寄存器定义

寄存器输出与 App 页面"焊缝结果卡片"显示内容对应焊缝类型、中心点、起点、终点并提供机械臂坐标系下的姿态角Roll/Pitch/Yaw替代法向量便于机器人直接抓取。

地址 寄存器数 类型 读/写 说明
0 1 uint16 R/W 控制命令(写入后自动清零,命令见 3.1
1 1 uint16 R 状态码(见第 4 节)
2 1 uint16 R 焊缝类型0=未知1=点焊2=焊缝3=焊缝间隙)
3 1 uint16 R 当前焊缝索引(从 1 开始计数)
4 1 uint16 R 焊缝总数(本次检测识别出的焊缝个数)
5 1 uint16 R 保留
6 2 float R 中心点 Xmm
8 2 float R 中心点 Ymm
10 2 float R 中心点 Zmm
12 2 float R 起点 Xmm
14 2 float R 起点 Ymm
16 2 float R 起点 Zmm
18 2 float R 终点 Xmm
20 2 float R 终点 Ymm
22 2 float R 终点 Zmm
24 2 float R Roll绕 X 轴旋转角,度)
26 2 float R Pitch绕 Y 轴旋转角,度)
28 2 float R Yaw绕 Z 轴旋转角,度)

浮点数编码IEEE 754 单精度浮点数,每个 float 占 2 个 uint16 寄存器,字节序由网络配置 byteOrder 决定0=大端1=小端)。

坐标系XYZ 为机械臂坐标系下的值已经过手眼标定转换RPY 为 ZYX 外旋欧拉角,由焊缝轴向方向与法向方向构建旋转矩阵后提取,已包含完整姿态信息,无需单独输出法向量。

3.1 控制命令(地址 0

命令值 说明
1 触发相机 1 执行检测
2 触发相机 2 执行检测
10 读取下一个缓存焊缝结果(从上次检测结果中依次获取)

3.2 焊缝类型(地址 2

类型值 含义 页面显示
0 UNKNOWN "未知"
1 POINT "点焊"
2 SEAM "焊缝"
3 SEAM_GAP "焊缝(间隙)"

4. 状态码定义

状态码 说明
0 正在检测
1 成功(地址 2~29 数据有效)
2 检测失败
3 结果为空 / 无更多缓存结果

5. 通信流程

5.1 触发检测

  1. 外部客户端写入地址 0值为相机编号1 或 2
  2. 视觉系统自动清零地址 0并将地址 1 设为 0正在检测
  3. 视觉系统触发对应相机的检测
  4. 检测完成后自动输出第一个焊缝结果(地址 1=1地址 2~29=焊缝数据)

5.2 读取结果

  1. 检测完成后,视觉系统写入:
    • 地址 1状态码1=成功2=失败3=空结果)
    • 地址 2焊缝类型
    • 地址 3当前焊缝索引1
    • 地址 4焊缝总数
    • 地址 6~29第 1 个焊缝的中心/起点/终点/RPY仅状态码为 1 时有效)
  2. 外部客户端轮询地址 1当值从 0 变为非零时表示检测完成
  3. 状态码为 1 时,读取地址 2~29 获取页面同款定位结果

5.3 典型时序(单焊缝)

客户端                              视觉系统
  |                                    |
  |--- 写入 地址0 = 1 (触发相机1) ----->|
  |                                    |-- 清零地址0地址1=0(正在检测)
  |                                    |-- 执行检测...
  |                                    |
  |<-- 读取 地址1 = 0 (正在检测) -------|
  |                                    |
  |<-- 读取 地址1 = 1 (检测成功) -------|
  |                                    |-- 写入地址1=1
  |                                    |   地址2=类型地址3=1地址4=总数,
  |                                    |   地址6~29=第1个焊缝的中心/起止/RPY
  |<-- 读取 地址2~29 -------------------|
  |                                    |

5.4 读取多焊缝结果时序

当检测到多个焊缝时,可通过写命令 10 依次获取后续结果:

客户端                              视觉系统
  |                                    |
  |--- 写入 地址0 = 1 (触发相机1) ----->|
  |                                    |-- 清零地址0地址1=0(正在检测)
  |                                    |-- 执行检测(发现 N 个焊缝)...
  |                                    |
  |<-- 读取 地址1 = 1 (成功) -----------|
  |                                    |-- 自动输出第 1 个焊缝结果
  |<-- 读取 地址2~29 (焊缝1全部信息) ----|
  |                                    |
  |--- 写入 地址0 = 10 (读取下一个) ---->|
  |                                    |-- 输出第 2 个焊缝结果地址3=2
  |<-- 读取 地址1 = 1 (成功) -----------|
  |<-- 读取 地址2~29 (焊缝2全部信息) ----|
  |                                    |
  |--- 写入 地址0 = 10 (继续读取) ------>|
  |                                    |-- 无更多结果
  |<-- 读取 地址1 = 3 (无更多结果) ------|
  |                                    |

注意:触发新的检测(写 1 或写 2缓存索引自动归零第一个焊缝由系统主动输出写 10 用于继续读取后续焊缝。

6. 寄存器与页面字段对照

页面字段WeldSeamItem 卡片) 对应寄存器
焊缝 N [类型] 中的 N 地址 3当前焊缝索引
焊缝 N [类型] 中的"类型" 地址 2焊缝类型枚举
中心: (X, Y, Z) 地址 6/8/10float ×3
起止 起点 (X, Y, Z) 地址 12/14/16float ×3
起止 终点 (X, Y, Z) 地址 18/20/22float ×3
法向: (X, Y, Z) 不单独输出,已折算到 RPY
(页面未显示,给机器人使用) 地址 24/26/28Roll/Pitch/Yaw

7. 注意事项

  1. 触发寄存器写入后会自动清零,无需客户端手动清零
  2. 检测完成后自动输出第一个焊缝结果;写命令 10 可依次获取第 2、3… 个结果
  3. 坐标数据为机械臂坐标系下的值(已经过手眼标定转换)
  4. 欧拉角为 ZYX 外旋顺序(从焊缝轴向方向和法向方向构建旋转矩阵提取),已表达完整姿态,无需读取法向量
  5. 浮点数字节序(大端/小端)由网络配置中的 byteOrder 参数决定
  6. 当状态码非 1 时,地址 2~29 中的数据视为无效,客户端不应使用