63 lines
2.8 KiB
Markdown
63 lines
2.8 KiB
Markdown
|
|
# WeldSeam ModbusTCP 协议
|
|||
|
|
|
|||
|
|
## 1. 通信参数
|
|||
|
|
|
|||
|
|
| 项目 | 值 |
|
|||
|
|
|---|---|
|
|||
|
|
| 角色 | 视觉控制器为 ModbusTCP Server,主控/PLC 为 Client |
|
|||
|
|
| 默认端口 | `5020` |
|
|||
|
|
| Unit ID | `1`(服务端按标准 MBAP 头处理) |
|
|||
|
|
| 数据区 | Holding Registers |
|
|||
|
|
| 支持功能码 | `0x03` 读保持寄存器、`0x06` 写单寄存器、`0x10` 写多寄存器 |
|
|||
|
|
| 地址表示 | 下表为 PDU 零基地址;PLC 若使用 4xxxx 表示法需按厂商规则换算 |
|
|||
|
|
|
|||
|
|
所有 32 位浮点数均使用 IEEE-754 `float32`,高 16 位寄存器在前;每个寄存器内部仍按 Modbus 网络字节序(大端)传输。
|
|||
|
|
|
|||
|
|
## 2. 寄存器映射
|
|||
|
|
|
|||
|
|
| PDU 地址 | 数量 | 读写 | 名称 | 说明 |
|
|||
|
|
|---:|---:|---|---|---|
|
|||
|
|
| `0` | 1 | R/W | Command | 写 `1` 开始扫描,写 `2` 停止扫描并计算;服务端受理后自动清零 |
|
|||
|
|
| `1` | 1 | R | Status | `0`就绪,`1`扫描中,`2`计算中,`3`成功,`4`失败 |
|
|||
|
|
| `2` | 1 | R | PointCount | 有效路径点数量,范围 `0..40` |
|
|||
|
|
| `3..242` | 240 | R | PointData | 最多 40 个路径点,每点 6 个寄存器(X/Y/Z 三个 float32) |
|
|||
|
|
|
|||
|
|
第 `i` 个路径点(`i=0..39`)的地址:
|
|||
|
|
|
|||
|
|
| 坐标 | PDU 起始地址 | 寄存器数 |
|
|||
|
|
|---|---:|---:|
|
|||
|
|
| `Xi` | `3 + i*6` | 2 |
|
|||
|
|
| `Yi` | `5 + i*6` | 2 |
|
|||
|
|
| `Zi` | `7 + i*6` | 2 |
|
|||
|
|
|
|||
|
|
仅前 `PointCount` 个点有效;其余点寄存器为 `0`。TCP 文本协议不受 40 点限制,Modbus 超过 40 点时只发布前 40 点。
|
|||
|
|
|
|||
|
|
## 3. 操作流程
|
|||
|
|
|
|||
|
|
1. Client 读取 `Status(1)`,确认值为 `0`、`3` 或 `4`,并确认现场允许开始新任务。
|
|||
|
|
2. Client 向 `Command(0)` 写 `1`。
|
|||
|
|
3. Server 清空旧结果并将 `Status` 置为 `1`;主控随后移动相机,VzNLSDK 以非摆动动态模式采集。
|
|||
|
|
4. 相机移动结束并停止后,Client 向 `Command(0)` 写 `2`。
|
|||
|
|
5. Server 停止采集并将 `Status` 置为 `2`,随后自动调用算法计算。
|
|||
|
|
6. 成功时 Server 写入 `PointCount/PointData` 并将 `Status` 置为 `3`;失败时清零点数并将 `Status` 置为 `4`。
|
|||
|
|
7. Client 在 `Status=3` 后读取 `PointCount`,再按点数读取路径点。
|
|||
|
|
|
|||
|
|
按 Modbus 规范,功能码 `0x03` 单次最多读取 125 个寄存器。读取较多路径点时,Client 必须把 `PointData` 拆成多次连续读取,且不得拆开某个 float32 对应的两个寄存器。
|
|||
|
|
|
|||
|
|
## 4. float32 示例
|
|||
|
|
|
|||
|
|
数值 `12.5` 的 IEEE-754 十六进制为 `0x41480000`:
|
|||
|
|
|
|||
|
|
```text
|
|||
|
|
高字寄存器 = 0x4148
|
|||
|
|
低字寄存器 = 0x0000
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
若第 0 点 `X0=12.5`,则 PDU 地址 `3=0x4148`、地址 `4=0x0000`。
|
|||
|
|
|
|||
|
|
## 5. 异常处理
|
|||
|
|
|
|||
|
|
- 非就绪状态写开始命令、非扫描状态写停止命令或未知命令时,`Status` 置为 `4`。
|
|||
|
|
- 扫描失败、点云为空、算法返回错误或无有效焊缝时,`PointCount=0`、`Status=4`。
|
|||
|
|
- 通信断开不自动重复运动或扫描命令;Client 恢复连接后必须先核对现场设备状态。
|