GrabBag/App/WeldSeam/Doc/WeldSeam_ModbusTCP_Protocol.md
2026-08-18 14:44:38 +08:00

2.8 KiB
Raw Blame History

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),确认值为 034,并确认现场允许开始新任务。
  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

高字寄存器 = 0x4148
低字寄存器 = 0x0000

若第 0 点 X0=12.5,则 PDU 地址 3=0x4148、地址 4=0x0000

5. 异常处理

  • 非就绪状态写开始命令、非扫描状态写停止命令或未知命令时,Status 置为 4
  • 扫描失败、点云为空、算法返回错误或无有效焊缝时,PointCount=0Status=4
  • 通信断开不自动重复运动或扫描命令Client 恢复连接后必须先核对现场设备状态。