4. VisionPro与PLC通信协议选型

在VisionPro与PLC协同的产线系统中,通信协议决定了检测结果能否被PLC及时、正确地消费。很多项目在视觉侧调试完全正常,但产线联调时出现“结果延迟”“偶发丢帧”“PLC读到的坐标错位”,根源往往不是算法,而是协议选型与数据映射方式不匹配。本节从协议特性、帧结构、适用场景到选型决策,给出一套可落地的判断方法。

一、四类协议的本质差异

TCP/IP(原生Socket)是最灵活的一类。VisionPro的Cognex.VisionPro通信工具或自定义C#脚本可作为TCP客户端/服务端,把检测结果按自定义字符串或二进制格式发送给PLC。它的优势是数据格式完全自由,可以传字符串、JSON、结构体;劣势是PLC侧需要编写Socket收发与解析逻辑,实时性和可靠性依赖应用层自己保证。

Modbus TCP是工业现场最通用的“寄存器式”协议。VisionPro侧通常通过Modbus TCP客户端库(如NModbus)把结果写入PLC的保持寄存器(Holding Register,功能码03/06/16)。它的数据模型是“地址+寄存器值”,没有复杂对象概念,PLC侧读取简单,几乎所有PLC都支持。缺点是数据类型受限(16位寄存器),浮点数需要拆成两个寄存器,且无原生事件通知,PLC需轮询。

EtherNet/IP基于CIP协议,采用“生产者-消费者”模型。VisionPro可通过EtherNet/IP标签(Tag)与PLC(如罗克韦尔ControlLogix、CompactLogix)交换数据,支持隐式I/O连接(周期性)和显式消息(按需)。它的优势是与罗克韦尔生态无缝集成,标签名直接映射,实时性好;劣势是配置依赖EDS文件与Studio 5000,跨品牌支持较弱。

Profinet是西门子主导的实时以太网标准。VisionPro通常作为Profinet从站设备接入西门子S7-1200/1500,通过GSDML文件描述设备,PLC侧以I/O地址方式读写。它的优势是实时性高(RT/IRT)、与西门子TIA Portal集成好;劣势是VisionPro侧需要支持Profinet的通信组件或网关,配置门槛较高。

VisionPro ↔ PLC 四类协议数据流与帧结构对比 TCP/IP (Socket) 应用层:自定义字符串/JSON 传输层:TCP 端口 5000 网络层:IP 192.168.1.10 灵活但需自建解析 Modbus TCP MBAP头(7B)+PDU 功能码03/06/16 寄存器地址 40001起 通用、轮询、16位 EtherNet/IP CIP封装 + TCP/UDP 隐式I/O / 显式消息 标签名直接映射 罗克韦尔生态、实时 Profinet RT/IRT 实时帧 GSDML设备描述 I/O地址映射 西门子生态、高实时 选型决策路径 PLC品牌? 罗克韦尔/西门子/其他 实时性要求? 周期 <10ms / 可轮询 数据复杂度? 简单数值/结构体/字符串 现场已有? 网关/交换机 罗克韦尔 → EtherNet/IP 标签映射,隐式I/O周期通信 西门子 → Profinet GSDML组态,I/O地址读写 多品牌/简单数据 → Modbus TCP 寄存器映射,轮询读取

二、数据帧结构与映射要点

以Modbus TCP为例,VisionPro把检测结果写入PLC寄存器时,需要明确“地址—数据—类型”三者的对应关系。假设检测输出为:X坐标(浮点,单位mm)、Y坐标(浮点)、角度(浮点)、OK/NG(布尔)。浮点数在Modbus中占两个连续寄存器(32位,大端或小端由PLC决定),布尔量占一个寄存器的最低位。典型映射如下:

寄存器地址    含义              数据类型    示例值
40001        X坐标高16位        UINT16      0x41A0
40002        X坐标低16位        UINT16      0x0000
40003        Y坐标高16位        UINT16      0x41C8
40004        Y坐标低16位        UINT16      0x0000
40005        角度高16位         UINT16      0x41F0
40006        角度低16位         UINT16      0x0000
40007        结果标志           UINT16      1=OK, 0=NG
40008        心跳/触发计数      UINT16      0~65535循环

PLC侧读取后,需按相同字节序重组浮点数。若VisionPro发送的是大端,而PLC按小端解析,会出现“数值完全不对”的现象。判断方法:发送已知值如20.0(IEEE754为0x41A00000),在PLC中查看两个寄存器的原始值,若为0x41A0和0x0000则字节序一致;若为0x0000和0x41A0则需交换高低字。

EtherNet/IP的帧结构则不同。隐式I/O连接下,数据以“连接ID+数据段”形式周期性传输,PLC侧通过输入标签(Input Tag)直接读取,无需手动解析字节。例如在Studio 5000中定义标签Vision_X为REAL类型,VisionPro侧将X坐标写入对应Assembly实例的偏移0~3字节,PLC即可直接使用。这种方式减少了字节序问题,但要求双方对Assembly实例的偏移量严格一致。

三、适用场景与选型决策

选型不是选“最先进”的协议,而是选“与现有PLC生态、实时性要求、数据复杂度最匹配”的协议。以下给出四条判断依据:

  • PLC品牌优先:罗克韦尔PLC优先EtherNet/IP,西门子PLC优先Profinet,三菱/欧姆龙/国产PLC优先Modbus TCP或TCP/IP。跨品牌混线时,Modbus TCP是最大公约数。
  • 实时性要求:若产线节拍要求视觉结果在10ms内被PLC消费,优先EtherNet/IP隐式I/O或Profinet RT;若节拍在50ms以上,Modbus TCP轮询(轮询周期20ms)即可满足;TCP/IP的延迟取决于应用层实现,通常不用于硬实时。
  • 数据复杂度:只传OK/NG、坐标、角度等简单数值,Modbus TCP足够;需要传字符串、配方号、多组结果结构体,TCP/IP更灵活;EtherNet/IP和Profinet适合固定结构的I/O数据。
  • 现场已有基础设施:若现场已有Profinet交换机与TIA Portal组态,新增Profinet从站成本低;若只有普通以太网交换机,Modbus TCP和TCP/IP无需专用硬件。
实操建议:在项目初期,先用TCP/IP或Modbus TCP做快速验证,把VisionPro的检测结果稳定送到PLC并驱动一个指示灯或气缸。验证通过后,若节拍或品牌要求更高,再迁移到EtherNet/IP或Profinet。迁移时重点检查三件事:数据字节序、触发方式(周期/事件)、异常时的超时与重连策略。

四、一个可执行的选型检查表

以下检查表可直接用于项目评审,逐项确认后再锁定协议:

检查项确认内容示例/判断
PLC型号与品牌是否支持目标协议CompactLogix 5380支持EtherNet/IP
视觉结果数据量字节数、类型、更新频率8个浮点+2个布尔,每件一次
节拍要求结果需在多少ms内到达PLC≤20ms,选EtherNet/IP隐式I/O
触发方式PLC触发拍照还是视觉主动上报PLC发触发字,视觉回结果字
字节序约定大端/小端,高低字顺序统一大端,PLC侧做SWAP
异常处理超时、断线、NG时的行为心跳计数+超时3s报警
调试工具抓包/仿真手段Wireshark抓Modbus,Studio 5000监控标签

最后强调一个常见误区:不要因为“TCP/IP最灵活”就在所有项目中使用原生Socket。当PLC侧没有专职软件工程师维护Socket解析代码时,Modbus TCP的寄存器模型反而更稳定、更易排查。协议选型的终点不是技术先进性,而是产线长期运行的可维护性与可诊断性。