2.8 KiB
2.8 KiB
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. 操作流程
- Client 读取
Status(1),确认值为0、3或4,并确认现场允许开始新任务。 - Client 向
Command(0)写1。 - Server 清空旧结果并将
Status置为1;主控随后移动相机,VzNLSDK 以非摆动动态模式采集。 - 相机移动结束并停止后,Client 向
Command(0)写2。 - Server 停止采集并将
Status置为2,随后自动调用算法计算。 - 成功时 Server 写入
PointCount/PointData并将Status置为3;失败时清零点数并将Status置为4。 - Client 在
Status=3后读取PointCount,再按点数读取路径点。
按 Modbus 规范,功能码 0x03 单次最多读取 125 个寄存器。读取较多路径点时,Client 必须把 PointData 拆成多次连续读取,且不得拆开某个 float32 对应的两个寄存器。
4. float32 示例
数值 12.5 的 IEEE-754 十六进制为 0x41480000:
高字寄存器 = 0x4148
低字寄存器 = 0x0000
若第 0 点 X0=12.5,则 PDU 地址 3=0x4148、地址 4=0x0000。
5. 异常处理
- 非就绪状态写开始命令、非扫描状态写停止命令或未知命令时,
Status置为4。 - 扫描失败、点云为空、算法返回错误或无有效焊缝时,
PointCount=0、Status=4。 - 通信断开不自动重复运动或扫描命令;Client 恢复连接后必须先核对现场设备状态。