4. 视觉与PLC通信协议解析

在Teledyne视觉系统与PLC的产线集成中,通信协议决定了“数据以什么形式、按什么节奏、在哪个地址上流动”。同一台视觉相机,用Profinet接入西门子PLC、用EtherNet/IP接入罗克韦尔PLC、用Modbus TCP接入三菱或国产PLC,其数据映射方式、配置入口和调试手段完全不同。本节围绕这三种主流协议,讲清它们各自的数据组织方式、Teledyne视觉侧的配置要点,以及PLC侧如何把视觉结果落到可用的寄存器或标签上。

一、三种协议的定位差异

Profinet是西门子主导的工业以太网标准,采用“设备描述文件(GSDML)+ 插槽/子模块”的组态模型,视觉系统在PLC工程中表现为一个IO设备,其输入输出数据以字节数组形式映射到PLC的输入区(I区)和输出区(Q区)。EtherNet/IP由ODVA维护,基于CIP协议,采用“EDS文件 + 隐式/显式报文”模型,视觉系统作为适配器(Adapter),PLC作为扫描器(Scanner),数据以标签(Tag)或实例(Instance)方式访问。Modbus TCP则是应用层协议,结构最简单,以“功能码 + 寄存器地址”访问,视觉系统通常作为服务器(Slave),PLC作为客户端(Master)主动轮询。

三者的关键区别在于:Profinet和EtherNet/IP是周期性实时通信,适合把视觉的判定结果、坐标、角度等小数据量结果以固定周期刷新给PLC;Modbus TCP是请求-响应式,适合数据量小、实时性要求不苛刻的场合,但配置最直观、跨品牌兼容性最好。

Teledyne视觉系统与PLC三种协议数据映射对比 Profinet(西门子) GSDML 设备描述 插槽/子模块组态 输入区 I(视觉→PLC) 判定/坐标/角度 字节数组 输出区 Q(PLC→视觉) 触发/切换程序号 周期刷新 典型 1~8 ms PLC侧访问 IB/QB 直接寻址 适合:西门子产线 实时性要求高 EtherNet/IP(罗克韦尔) EDS 电子数据表 适配器/扫描器模型 输入实例(视觉→PLC) Assembly 输入标签 输出实例(PLC→视觉) Assembly 输出标签 隐式报文(I/O) RPI 典型 2~10 ms PLC侧访问 标签名直接引用 适合:AB/罗克韦尔产线 标签化编程 Modbus TCP(通用) 无设备描述文件 手动配置寄存器 保持寄存器 4xxxx 视觉结果写入 线圈 0xxxx 触发/复位位 请求-响应轮询 典型 20~100 ms PLC侧访问 功能码 03/06/16 适合:跨品牌/低成本 实时性要求一般

二、Profinet的数据映射与配置

在Teledyne视觉系统侧,首先需要导入或安装对应的GSDML文件,使PLC工程能够识别该视觉设备。组态时,视觉系统通常提供若干“模块”供选择,例如“输入数据8字节”“输出数据4字节”“结果数据16字节”等。以常见的In-Sight系列为例,其Profinet接口一般提供固定长度的输入/输出区域,输入区承载视觉结果,输出区承载PLC下发的控制字。

假设组态时选择输入16字节、输出4字节,则PLC侧会得到类似 IB68~IB83 的输入地址和 QB64~QB67 的输出地址。视觉侧需要把“作业通过/失败”“X坐标”“Y坐标”“角度”等结果按字节偏移写入输入区。例如约定:字节0为状态字(0=等待,1=通过,2=失败),字节1保留,字节2~5为X坐标(32位浮点或整型),字节6~9为Y坐标,字节10~13为角度。PLC侧用 MOVE 或直接寻址读取这些字节,再转换为工程量。

配置的关键是“字节序”和“数据类型对齐”。Profinet默认大端(Big-Endian),而视觉系统内部可能按小端存储,若直接按字节搬运,PLC读到的浮点数会完全错误。稳妥做法是:视觉侧输出整型放大值(如X坐标乘以1000后以DINT输出),PLC侧再除以1000还原,避免浮点字节序问题。

三、EtherNet/IP的数据映射与配置

EtherNet/IP的配置入口是EDS文件。在Studio 5000中安装EDS后,视觉系统会作为一个通用适配器出现在设备列表中。添加设备时需要设置IP地址、输入/输出实例号(Assembly Instance)以及数据长度。Teledyne视觉系统通常提供固定的输入实例(如Instance 100)和输出实例(如Instance 101),长度由EDS定义。

与Profinet不同,EtherNet/IP的数据在PLC侧表现为标签,而不是绝对地址。例如输入实例映射为 Vision: I.Data,输出实例映射为 Vision: O.Data。PLC程序中可以直接用 Vision:I.Data[0] 访问第一个字节。若视觉结果包含浮点数,可在EDS中定义为REAL类型,PLC侧直接得到浮点标签,无需手动转换字节序——CIP协议本身处理了字节序问题。

实际配置时,RPI(Requested Packet Interval)是核心参数。RPI设为5 ms意味着PLC每5 ms向视觉系统请求一次数据。若视觉系统的处理周期为30 ms,则PLC会读到重复的旧数据,因此需要在PLC侧用“结果更新标志位”判断数据是否为新。视觉侧通常提供一个“数据有效”位,PLC检测到该位上升沿后才读取坐标值。

四、Modbus TCP的数据映射与配置

Modbus TCP没有设备描述文件,配置完全靠“地址约定”。Teledyne视觉系统作为Modbus服务器,开放一组保持寄存器(4xxxx)和线圈(0xxxx)。PLC作为客户端,用功能码03读保持寄存器、06写单个寄存器、16写多个寄存器。

典型映射约定如下:保持寄存器40001~40002存放X坐标(32位整型,高字在前),40003~40004存放Y坐标,40005存放角度(放大10倍),40006存放状态码(0=等待,1=通过,2=失败)。线圈00001用于PLC触发视觉拍照,00002用于复位结果。PLC侧用Modbus轮询指令周期性读取这些寄存器。

Modbus TCP的寄存器地址存在“协议地址”和“文档地址”的偏移问题:协议报文中的地址从0开始,而文档中常写40001对应协议地址0。配置时必须确认视觉系统手册中的地址基准,否则会整体偏移一个寄存器。此外,Modbus TCP是请求-响应模式,PLC轮询周期决定了结果刷新速度,若产线节拍为200 ms,轮询周期建议不超过50 ms,并配合状态码判断结果是否已更新。

五、配置后的验证与常见问题

三种协议配置完成后,验证方法各有侧重。Profinet可用PLC的在线诊断查看IO设备是否正常、输入输出数据是否刷新;EtherNet/IP可在Studio 5000的“Module Properties”中查看连接状态和RPI实际值;Modbus TCP可用Modbus Poll等工具先独立测试视觉服务器的寄存器读写,确认地址和数据类型无误后再接入PLC程序。

常见问题集中在三处:一是字节序不一致导致数值乱码,解决方法是统一用整型放大值传输;二是触发与结果读取的时序竞争,解决方法是引入“数据有效”握手位;三是地址偏移错误,解决方法是先用工具单独读写单个寄存器验证。把这三类问题在调试阶段排除,视觉与PLC的数据映射就能稳定运行。