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失败可能的原因

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

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