GrabBag/App/WorkpieceHole/Doc/MODBUS_PROTOCOL.md
2026-02-02 23:24:24 +08:00

5.7 KiB
Raw Blame History

WorkpieceHole 工件孔定位 - Modbus TCP 通信协议

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. 地址映射规则

汇川PLC D寄存器与Modbus保持寄存器地址映射关系

代码协议地址 = D寄存器地址 + 1

示例:
  D1000 -> 代码协议地址 1001
  D1002 -> 代码协议地址 1003
  D2000 -> 代码协议地址 2001

4. 寄存器地址定义

4.1 控制寄存器

PLC寄存器 代码协议地址 类型 读/写 说明
D1000 1001 uint16 R/W 拍照请求标志1=请求拍照)
D1002 1003 uint16 W 数据输出完成标志1=完成)

4.2 坐标数据寄存器D2000开始最多10个点

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

点序号 PLC寄存器范围 代码协议地址范围 说明
点0 D2000-D2011 2001-2012 第1个点坐标
点1 D2012-D2023 2013-2024 第2个点坐标
点2 D2024-D2035 2025-2036 第3个点坐标
点3 D2036-D2047 2037-2048 第4个点坐标
点4 D2048-D2059 2049-2060 第5个点坐标
点5 D2060-D2071 2061-2072 第6个点坐标
点6 D2072-D2083 2073-2084 第7个点坐标
点7 D2084-D2095 2085-2096 第8个点坐标
点8 D2096-D2107 2097-2108 第9个点坐标
点9 D2108-D2119 2109-2120 第10个点坐标

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

PLC寄存器 代码协议地址 类型 说明
D2000-D2001 2001-2002 float (大端) X坐标 (mm)
D2002-D2003 2003-2004 float (大端) Y坐标 (mm)
D2004-D2005 2005-2006 float (大端) Z坐标 (mm)
D2006-D2007 2007-2008 float (大端) Pitch角度 (°)
D2008-D2009 2009-2010 float (大端) Roll角度 (°)
D2010-D2011 2011-2012 float (大端) Yaw角度 (°)

注意:

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

5. 通信流程

时序图:

3D视觉系统                      汇川PLC
    │                              │
    │   轮询读取D1000(地址1001)    │
    │◄─────────────────────────────│
    │                              │
    │   D1000=1 (拍照请求)         │
    │◄─────────────────────────────│
    │                              │
    │   写0到D1000(地址1001)       │
    │─────────────────────────────►│
    │                              │
    │   [执行拍照和算法处理]        │
    │                              │
    │   写坐标到D2000(地址2001)开始│
    │─────────────────────────────►│
    │                              │
    │   写1到D1002(地址1003)       │
    │─────────────────────────────►│
    │                              │

5.1 详细流程说明

  1. 轮询拍照请求

    • 3D系统持续轮询读取PLC的D1000寄存器代码协议地址1001
    • 轮询间隔100ms可配置
    • 使用边沿检测只在0→1变化时触发
  2. 拍照执行

    • 检测到D1000=1后立即写0到D1000清除请求
    • 触发相机拍照
    • 执行工件孔定位算法
  3. 坐标输出

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

    • 坐标数据写入成功后写1到D1002代码协议地址1003
    • 通知PLC数据输出完成

6. 连接管理

6.1 自动重连机制

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

6.2 优雅退出

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

7. 错误处理

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