VisionMaster 通信模块实战(上):Modbus、TCP 收发、协议组装解析
视觉方案本身只会"看",要让它跟 PLC、机械手、上位机打交道,就靠通信模块 。这篇讲 VM(VisionMaster)里最常用的几种通信:Modbus 模块、TCP Server/Client、协议组装/解析、发送/接收数据,以及作业里"N 点标定用通信模式做"是怎么回事。下篇讲 C# 二开怎么把 .sol 方案接到自己软件里。(下篇见《VisionMaster 二开实战(下):C# 加载 .sol、运行流程、取结果、渲染》)
一、VM 通信模块全家桶
在"1.通信模块1.sol / 2.通信模块2.sol"里,VM 平台提供了一整套通信工具:
| 模块 | 作用 | 典型对端 |
|---|---|---|
| Modbus 模块 | 走 Modbus TCP/RTU 读写寄存器 | PLC、仪表、伺服 |
| TCPClient | 作为客户端主动连别人 | 上位机、服务器 |
| TCPServer | 作为服务器等别人来连 | 多个客户端并发收 |
| 协议组装 | 把测量结果打包成自定义报文 | 自己的上位机协议 |
| 协议解析 | 把收到的字节流拆成字段 | 自定义协议解析 |
| 发送数据 | 把组装好的报文发出去 | ------ |
| 接收数据 | 把对端发来的数据收进来 | ------ |
核心套路:视觉测量出结果 → 协议组装 → 发送数据(Modbus/TCP)→ PLC/上位机收到并执行 ;反过来 PLC 发触发/参数 → 协议解析 → 触发视觉流程。
二、Modbus 模块:跟 PLC 最常用
1. 为什么用 Modbus?
现场 PLC(西门子、三菱、汇川等)几乎都支持 Modbus,VM 的 ModbusModule 直接当主站(Master)读写从站寄存器:
text
VM(主站) ──读保持寄存器(03)──▶ PLC(从站)
VM(主站) ◀─写多个寄存器(16)── PLC(从站)
2. ModbusItem:一个条目对应一个寄存器
工程里有 ModbusItem1 ~ ModbusItem16,每个 Item 就是一个读写项:
| 配置项 | 含义 |
|---|---|
| 站号 | 从机地址(PLC 站号) |
| 功能码 | 03 读保持寄存器 / 16 写多个寄存器 |
| 寄存器地址 | 读/写哪个地址(如 DBD0、DB50.DBW0) |
| 数据类型 | Int16/Int32/Float 等 |
| 绑定值 | 把视觉结果(如圆心 X)绑到这个 Item |
视觉测出圆心 (Cx, Cy),把 Cx 绑到 ModbusItem1 的写寄存器,VM 就自动把它写给 PLC。
三、TCP Server / Client:自定义协议通通用
Modbus 是标准协议,但很多时候上位机/机械手用的是自定义协议,这时候直接走 TCP:
text
VM 作为 TCPClient:主动连接上位机 IP:Port
VM 作为 TCPServer:监听端口,上位机/机械手连上来
1. 协议组装:把数据打成报文
比如上位机约定报文格式:
text
帧头(0xAA) + 数据1(4字节Float) + 数据2(4字节Float) + 校验 + 帧尾(0x55)
协议组装模块 把 Cx、Cy、OK/NG 状态按这个格式拼成字节流,再用发送数据发出去。
2. 协议解析:把收到的字节拆开
反过来,PLC/上位机发一段字节流过来,协议解析模块按帧头、长度、数据、校验拆出各个字段(比如触发信号、标定坐标、设定值)。
3. 典型数据链(1.通信模块1.sol)
text
图像源1 → 快速匹配1 → 快速匹配2 → 位置修正1(Fixture)
→ 测量出 Cx/Cy
→ 协议组装1(打包报文)
→ 发送数据1(经 ModbusModule / TCPClient 发出)
→ 格式化1/2(整理显示)
四、作业:N 点标定用"通信模式"做
"测试.sol"工程演示了一个进阶用法:N 点标定(IMVSNPointCalibModu)走通信。
1. 为什么用通信做标定?
传统九点标定要手动记 9 个点。用通信做的好处:机械手/运动平台走到一个位置 → 平台把它的坐标通过 TCP 发给 VM → VM 视觉同时识别靶标点 → 自动配对 (图像点, 平台点) → 自动采满 9 个点。
2. 工程工具链
text
图像源1 → 快速匹配1(识别靶标点)
→ 位置修正1
→ 接收数据1(TCP 收到平台坐标)
→ 协议解析1(拆出 X/Y)
→ N点标定1(自动累计 9 组对应点)
→ 分支模块1(采够了就解算)
这就是"通信驱动标定":平台走点、VM 收坐标、视觉识别靶标,全程自动,不用手抄数。
五、糖果案例:颜色识别 + 多色计数 + 多发数据
"糖果案例.sol"是个综合案例:灰度匹配 + 颜色识别 + BLOB 分析 + 5 路发送数据。
text
灰度匹配1 → 位置修正
→ 颜色转换1 → 颜色识别1 → BLOB分析1
→ 分别统计:红色计数 / 绿色计数 / 黄色计数 / 橙色计数 / 棕色计数
→ 变量计算1~5(每路糖果数量)
→ 发送数据1~5(每路结果分别上报)
典型应用:数不同颜色糖果的数量,分别报给 PLC/分拣机构。
六、上篇小结
| 知识点 | 一句话 |
|---|---|
| Modbus 模块 | 直接读写 PLC 寄存器,Item1~16 对应读写项 |
| TCP Server/Client | 自定义协议时用,VM 可当服务器或客户端 |
| 协议组装/解析 | 把测量值打包成报文 / 把收到的字节拆字段 |
| 发送/接收数据 | 报文出口和入口 |
| 通信做 N 点标定 | 平台发坐标 + 视觉识别靶标,自动采 9 点 |
| 糖果案例 | 颜色识别+BLOB,多色计数多路发送 |
下篇预告
通信模块在 VM 里拖拖控件就能用,但怎么把 VM 方案集成到自己写的 C# 上位机里 ?怎么用代码 VmSolution.Load 加载 .sol、SyncRun 跑流程、GetOutputFloat 取圆心结果、再用 vmRenderControl 把图像画到自己界面上?下篇《VisionMaster 二开实战(下):C# 加载 .sol、运行流程、取结果、渲染》继续,点关注别错过!
参考:结合 VisionMaster(VM) 通信模块、Modbus、TCP 通信、二开教学讲义整理的学习笔记。