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

相关推荐
Coder_Shenshen8 小时前
罗克韦尔ACD工程归档离线变量树解析
算法·c#
BaiPeter8 小时前
ZPL文件预览
开发语言·c++
国科安芯9 小时前
人在回路中的总线:商业空间站环境控制与生命保障系统CANFD网络的可靠性与功能安全
网络·嵌入式硬件·安全·架构·php·抗辐射
国科安芯10 小时前
算力上天之后的电与静:星上边缘计算载荷带外管理网络的低功耗调度与辐射容错
网络·人工智能·嵌入式硬件·安全·边缘计算·低轨卫星·商业航天
wdeok10 小时前
Socket编程UDP-简单的聊天室
网络·网络协议·udp
噢,我明白了13 小时前
JAVA中的一些基础应用知识点
java·开发语言
寂寞的船14 小时前
【Unity知识速递】第10期 Unity GC 零分配实战:从 UnityEngine.Pool 到手动 GC 控制的全链路优化
jvm·unity·c#·游戏引擎·lucene
时间的拾荒人14 小时前
Redis 入门详解:核心特性、重要文件与全局命令实战
开发语言·redis·面试
敲上瘾15 小时前
Qt Widgets入门:项目模板解析与Hello World
开发语言·数据库·c++·qt·ui·qt6.3
QXWZ_IA15 小时前
定位数据怎么推给 IoT 平台?消息协议选型与接入准备
网络·人工智能·物联网·安全