102 lines
3.3 KiB
Markdown
102 lines
3.3 KiB
Markdown
# 糖包拆线 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(失败),可能的原因:
|
||
- 相机未连接
|
||
- 检测算法失败
|
||
- 检测处理器未初始化
|
||
|
||
建议客户端在失败后重新启动扫描或通知操作人员检查设备状态。
|