GrabBag/App/BagThreadPosition/MODBUS_PROTOCOL.md

3.3 KiB
Raw Blame History

糖包拆线 ModbusTCP 协议说明

应用名称: BagThreadPosition(糖包拆线) 版本: v1.0 日期: 2026-02-07

概述

糖包拆线应用作为 ModbusTCP 服务端,使用标准 ModbusTCP 协议(端口 502)与外部设备(客户端)通信,实现相机扫描控制和检测结果输出。

基本信息

  • 服务端: 糖包拆线应用(BagThreadPosition)
  • 客户端: PLC、机器人控制器或其他支持 ModbusTCP 的设备
  • 协议: ModbusTCP(基于 TCP/IP 的 Modbus 协议)
  • 端口: 502
  • 功能码: 0x03(读保持寄存器)、0x10(写多个保持寄存器)

寄存器地址映射

控制寄存器

地址 功能 读/写 数据类型 说明
0 启动扫描 写 uint16 写入1启动相机扫描
2 检测状态 读 uint16 0=未完成, 1=成功, 2=失败

数据寄存器

地址 功能 读/写 数据类型 说明
4+ xyzu数据 读 float[] 拆线位置数据(每条拆线8个寄存器)

使用流程

客户端操作步骤

1. 启动扫描

客户端写入寄存器[0] = 1

  • 服务端启动相机扫描
  • 寄存器[2]被重置为0(检测中)

2. 等待检测完成

客户端循环读取寄存器[2],直到值不为0

  • 值为1:检测成功,xyzu数据已自动写入寄存器[4]开始的位置
  • 值为2:检测失败

3. 读取检测结果

当寄存器[2] = 1(成功)时,客户端直接从寄存器[4]开始读取 xyzu 数据。

数据格式

寄存器布局

每条拆线占用 8 个寄存器(4个float,每个float占2个寄存器):

寄存器[4+i*8+0:1]   -> x (centerX, float)
寄存器[4+i*8+2:3]   -> y (centerY, float)
寄存器[4+i*8+4:5]   -> z (centerZ, float)
寄存器[4+i*8+6:7]   -> u (rotateAngle, float)

其中 i 为拆线索引(从0开始)。

xyzu 含义

  • x (centerX): 拆线端部中心点的X坐标(毫米)
  • y (centerY): 拆线端部中心点的Y坐标(毫米)
  • z (centerZ): 拆线端部中心点的Z坐标(毫米)
  • u (rotateAngle): 拆线旋转角度(度,范围 -30° ~ 30°)

Float 数据格式

每个 float 值占用 2 个 uint16 寄存器(IEEE 754 单精度浮点数):

  • 低位寄存器:float 的低16位
  • 高位寄存器:float 的高16位

注意事项

  1. 服务端: 糖包拆线应用启动后自动开启 ModbusTCP 服务端,监听端口 502
  2. 客户端: 支持标准 ModbusTCP 协议的设备均可连接(PLC、机器人控制器等)
  3. 数据顺序: 拆线数据按检测顺序排列
  4. 自动输出: 检测成功后,服务端自动将 xyzu 数据写入寄存器[4]开始的位置,客户端无需额外请求
  5. 字节序: Float 数据使用小端字节序(Little Endian)
  6. 连接数: 支持多个客户端同时连接,但建议单客户端操作
  7. 超时处理: 建议客户端设置合理的超时时间(如30秒)等待检测完成

错误处理

如果寄存器[2]返回2(失败),可能的原因:

  • 相机未连接
  • 检测算法失败
  • 检测处理器未初始化

建议客户端在失败后重新启动扫描或通知操作人员检查设备状态。