GrabBag/App/HoleDetection/Doc/MODBUS_PROTOCOL.md
2026-03-11 23:40:06 +08:00

5.4 KiB
Raw Blame History

HoleDetection 孔洞检测 - Modbus TCP 通信协议

注意:此协议已停用。 当前版本使用 TCP 文本协议(眼在手上),详见 孔洞检测TCP通信协议.md

1. 系统架构

┌─────────────────┐      Modbus TCP      ┌─────────────────────┐
│                 │◄────────────────────►│                     │
│   3D视觉系统     │      192.168.0.88    │  汇川PLC-easy320    │
│  (Modbus客户端)  │         :502         │  (Modbus服务端)     │
│                 │                      │                     │
└─────────────────┘                      └─────────────────────┘

2. 网络配置

设备 IP地址 端口 角色
3D视觉系统 - - Modbus TCP 客户端
汇川PLC-easy320 192.168.0.88 502 Modbus TCP 服务端

3. 地址映射规则

寄存器地址直接对应 Modbus 保持寄存器地址(可通过配置文件自定义)。

默认配置:

地址 0: 拍照请求
地址 1: 数据输出完成标志
地址 2: 坐标数据起始

4. 寄存器地址定义

4.1 控制寄存器

寄存器地址 类型 读/写 说明
0 uint16 R/W 拍照请求标志1=触发相机1, 2=触发相机2
1 uint16 W 数据输出完成标志1=完成)

4.2 坐标数据寄存器地址2开始最多10个点

每个点包含6个float值X, Y, Z, Pitch, Roll, Yaw每个float占用2个寄存器大端序共12个寄存器/点。

点序号 寄存器地址范围 说明
点0 2-13 第1个孔洞坐标
点1 14-25 第2个孔洞坐标
点2 26-37 第3个孔洞坐标
点3 38-49 第4个孔洞坐标
点4 50-61 第5个孔洞坐标
点5 62-73 第6个孔洞坐标
点6 74-85 第7个孔洞坐标
点7 86-97 第8个孔洞坐标
点8 98-109 第9个孔洞坐标
点9 110-121 第10个孔洞坐标

4.3 单点坐标数据布局以点0为例

寄存器地址 类型 说明
2-3 float (大端) X坐标 (mm)
4-5 float (大端) Y坐标 (mm)
6-7 float (大端) Z坐标 (mm)
8-9 float (大端) Pitch角度 (°)
10-11 float (大端) Roll角度 (°)
12-13 float (大端) Yaw角度 (°)

注意:

  • 每个float值占用2个寄存器采用IEEE 754单精度浮点数格式
  • 大端序Big-Endian高位字在低地址寄存器低位字在高地址寄存器
  • 最多支持10个点共120个寄存器10 × 6 × 2 = 120

5. 通信流程

时序图:

3D视觉系统                      汇川PLC
    │                              │
    │   轮询读取地址0(拍照请求)     │
    │◄─────────────────────────────│
    │                              │
    │   地址0=1(相机1) 或 =2(相机2) │
    │◄─────────────────────────────│
    │                              │
    │   写0到地址0(清除请求)        │
    │─────────────────────────────►│
    │                              │
    │   [执行拍照和孔洞检测算法]    │
    │                              │
    │   写坐标到地址2开始           │
    │─────────────────────────────►│
    │                              │
    │   写1到地址1(数据完成)        │
    │─────────────────────────────►│
    │                              │

5.1 详细流程说明

  1. 轮询拍照请求

    • 3D系统持续轮询读取PLC的拍照请求寄存器地址0
    • 轮询间隔100ms可配置
    • 使用边沿检测只在0→非0变化时触发
    • 寄存器值即为相机索引1=相机1, 2=相机2
  2. 拍照执行

    • 检测到地址0为非0值后立即写0到地址0清除请求
    • 根据寄存器值选择对应相机触发拍照
    • 执行孔洞检测算法
  3. 坐标输出

    • 算法处理完成后将坐标数据写入地址2开始的寄存器
    • 单点12个寄存器6个float值
    • 数据格式IEEE 754单精度浮点数大端序
  4. 完成通知

    • 坐标数据写入成功后写1到地址1
    • 通知PLC数据输出完成

6. 连接管理

6.1 自动重连机制

  • 初始化时尝试连接PLC
  • 连接失败时自动启动重连定时器
  • 重连间隔3000ms可配置
  • 持续重连直到连接成功或软件关闭

6.2 优雅退出

  • 设置关闭标志,阻止新的重连尝试
  • 停止所有定时器(轮询、重连)
  • 断开Modbus连接
  • 释放资源

7. 错误处理

错误类型 处理方式
连接失败 自动重连,发送错误信号
读取失败 记录日志,下次轮询重试
写入失败 记录日志,返回失败状态
超时 默认1秒超时触发重连