VisionMaster 通信模块实战(上):Modbus、TCP 收发、协议组装解析

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 通信、二开教学讲义整理的学习笔记。

相关推荐
努力实干2 小时前
面向对象设计原则——C++
开发语言·c++·数码相机
Escalating_xu3 小时前
【Linux 网络编程】connect 的断线重连:用状态机写一个能恢复连接的 TCP 客户端
linux·网络·tcp/ip
NetX行者4 小时前
四语言 Hello World 背后:编译模型与运行时对比
开发语言
2401_868534784 小时前
局域网络中信息安全方案设计及攻击防范技术(制造企业园区网)
服务器·网络
波力海苔夹心脆6754 小时前
C# 正则表达式零基础入门:从“看得懂“到“会用“
经验分享·后端·mysql·正则表达式·c#
Pin_Qing4 小时前
账单没超,请求先被拒了
大数据·开发语言·人工智能
2601_962885725 小时前
如何用 Python 计算 VaR 和 CVaR(在险价值)?
开发语言·python
懂点Tech5 小时前
ctfshow MISC入门图片篇(信息附加):misc21解题思路
网络
郝亚军5 小时前
manifest 中 `sha256` 与 `signValue` 的作用
java·开发语言·数据结构