跳到主要内容

AI 驱动文档

您想了解什么?

PLC 通信细节 (EtherNet/IP)

OV80i 视觉系统支持与基于 EtherNet/IP 的 PLC 进行实时通信。本指南解释如何配置循环 I/O 连接、映射数据结构,并使用 Overview 的 Node-RED 工具访问全局和 ROI 级别的检测结果。

视频指南

查看此主题的实际操作:自动集成构建器

备注

有关基本连接说明,请参见 连接到 PLC (EtherNet/IP, PROFINET).


概述

OV80i 作为 EtherNet/IP 适配器运行,而您的 PLC 则作为扫描器(或主设备)。配置完成后,设备每个周期以紧凑且可预测的格式交换结构化数据。

支持的功能

  • 循环 I/O 通信 - 支持 20–10,000 毫秒的周期时间
  • 数据吞吐量 - 每个方向最多 256 字节
  • 自定义数据处理 - 作为活动配方的一部分读取/写入 Node-RED 数据

输入组装 (OV80i → PLC)

输入组装包含每个周期从 OV80i 发送到 PLC 的数据。这包括系统状态、检测结果、配方信息和可选的 ROI 细分。

OV80i 输入组装的字节和位布局

输出组装 (PLC → OV80i)

输出组装包含从 PLC 发送到 OV80i 的控制数据。您可以使用它来触发检测、更改配方或传入自定义参数。

OV80i 输出组装的字节和位布局

定时和握手行为

EtherNet/IP 触发定时图

自定义数据支持

OV80i 可以接受或返回额外的自定义数据,作为您的 Node-RED 流的一部分。

PLC → OV80i

  • 写入外部标志、阈值或计数器,以影响 Node-RED 中的逻辑

OV80i → PLC

  • 返回计算值、测量值、时间戳或条件输出

自定义数据适合放入组装的扩展部分,从核心信号和配方信息之后开始。

ROI 结果细分(仅限分类配方)

对于分类配方,您可以使用 Overview 的自定义 Node-RED 节点 Format data for PLC 将每个 ROI 的结果暴露给 PLC。

工作原理:

  • 放置在 Node-RED 流中的所有块输出数据和发送数据到 PLC 之间

PLC 数据格式化 Node-RED 流示例

  • 自动填充从输入组装的第 16 字节开始的结构化 ROI 区域

  • 每次检测支持最多 4 个 ROI

  • 每个 ROI 包括:

    • ROI ID
    • 通过/失败位
    • 置信度分数
    • 未来使用的保留字节
注意

Format Data for PLC 节点仅适用于分类配方。

OV80i 输出组装的字节和位布局


默认 PLC 标签参考

本节提供输入和输出组件中每个标签的完整参考,包括字节偏移、位位置、数据类型和默认值。在配置您的 PLC 程序时,将其作为最终的位图使用。

在相机 UI 中查看默认标签

  1. 打开 OV80i 网络界面(例如,http://10.250.0.100)。
  2. 在左侧边栏中导航到 工业以太网
  3. 选择您的活动协议(EtherNet/IPPROFINET)。
  4. 页面显示当前的组件配置,包括输入/输出数据大小和连接状态。
  5. 此页面上显示的默认标签布局对应于下面的表格。

输入组件标签 (OV80i → PLC)

这些标签由 PLC 读取。相机在每个 I/O 周期写入它们。

字节 0 -- 状态标志

PLC 标签地址标签名称数据类型描述默认值
0I.Data[0].0触发准备BOOL相机准备好接受触发。发送触发请求前必须为高电平。0(启动后变为高电平)
1I.Data[0].1触发确认BOOL相机已接收并接受触发请求。0
2I.Data[0].2配方切换确认BOOL相机已接收并完成配方切换请求。0
7I.Data[0].7在线 / 启动完成BOOL相机已完成启动并在线。0(启动后变为高电平)

字节 1 -- 错误和状态标志

PLC 标签地址标签名称数据类型描述默认值
0I.Data[1].0触发错误BOOL触发周期中发生错误。保持直到清除。0
1I.Data[1].1配方切换错误BOOL配方切换中发生错误。保持直到清除。0
6I.Data[1].6BOOL相机正在处理(检测运行或配方切换)。高电平时请勿发送新命令。0

字节 2 -- 检测结果标志

PLC 标签地址标签名称数据类型描述默认值
0I.Data[2].0曝光完成BOOL图像曝光已完成。0
1I.Data[2].1检测完成 / 结果可用BOOL检测处理已完成,结果有效。0
2I.Data[2].2检测通过BOOL最终的通过/失败结果。高电平 = 通过,低电平 = 失败。仅在结果可用为高电平时有效。0

字节 3--7 -- 保留

字节PLC 标签地址标签名称数据类型描述默认值
3I.Data[3]保留BYTE保留以供将来使用。0x00
4I.Data[4]保留BYTE保留以供将来使用。0x00
5I.Data[5]保留BYTE保留以供将来使用。0x00
6--7I.Data[6]--I.Data[7]保留BYTE保留以供将来使用。0x00

字节 8--9 -- 当前配方 ID

字节PLC 标签地址标签名称数据类型描述默认值
8--9I.Data[8]--I.Data[9]当前配方 IDUINT (16 位)当前活动配方的 ID。与 O.Data[4] 比较以验证配方切换是否完成。0

字节 10--11 -- 保留

字节PLC 标签地址标签名称数据类型描述默认值
10--11I.Data[10]--I.Data[11]保留BYTE供将来使用。0x00

字节 12--13 -- 检查 ID

字节PLC 标签地址标签名称数据类型描述默认值
12--13I.Data[12]--I.Data[13]检查 IDUINT (16 位)每次检查递增的 16 位滚动计数器。用于将结果与特定触发器关联。0

字节 14--15 -- 保留

字节PLC 标签地址标签名称数据类型描述默认值
14--15I.Data[14]--I.Data[15]保留BYTE供将来使用。0x00

字节 16--256 -- ROI 结果汇编 / 来自 Node-RED 的自定义数据

字节PLC 标签地址标签名称数据类型描述默认值
16--256I.Data[16]--I.Data[256]ROI 结果 / 自定义数据BYTE[]使用 "格式化数据到 PLC" 的 Node-RED 块时,此区域填充结构化的 ROI 结果。否则可用于来自 Node-RED 流的自定义数据。0x00

输出汇编标签 (PLC → OV80i)

这些标签由 PLC 写入。相机每个 I/O 周期读取它们。

字节 0 -- 控制标志

PLC 标签地址标签名称数据类型描述默认值
0O.Data[0].0触发请求BOOL设置为高电平以触发检查。保持直到触发确认 (I.Data[0].1) 变为高电平,然后释放。0
1O.Data[0].1配方切换请求BOOL设置为高电平以请求切换到 O.Data[4] 中的配方 ID。保持直到配方切换确认 (I.Data[0].2) 变为高电平,然后释放。0

字节 1--3 -- 保留

字节PLC 标签地址标签名称数据类型描述默认值
1O.Data[1]保留BYTE供将来使用。0x00
2O.Data[2]保留BYTE供将来使用。0x00
3O.Data[3]保留BYTE供将来使用。0x00

字节 4--5 -- 配方 ID

字节PLC 标签地址标签名称数据类型描述默认值
4--5O.Data[4]--O.Data[5]配方 IDUINT (16 位)要切换到的配方 ID。在设置配方切换请求位之前,将所需的配方编号写入此处。0

字节 6--256 -- Node-RED 的自定义数据

字节PLC 标签地址标签名称数据类型描述默认值
6--256O.Data[6]--O.Data[256]Node-RED 的自定义数据BYTE[]用户定义的数据,Node-RED 流程可以读取。使用此区域传递序列号、阈值、零件 ID 或其他任何参数给相机。0x00

位映射图

以下基于文本的图示显示了两个组件的完整字节/位布局。每一行代表一个字节(或字节范围),每一列代表一个位位置(位 7 在左,位 0 在右)。

输入组件位图 (OV80i → PLC)

Byte │ Bit 7          │ Bit 6  │ Bit 5 │ Bit 4 │ Bit 3 │ Bit 2              │ Bit 1                      │ Bit 0
─────┼────────────────┼────────┼───────┼───────┼───────┼────────────────────┼────────────────────────────┼──────────────────
0 │ Online/Startup │ --- │ --- │ --- │ --- │ Recipe Switch Ack │ Trigger Ack │ Trigger Ready
│ Complete │ │ │ │ │ │ │
─────┼────────────────┼────────┼───────┼───────┼───────┼────────────────────┼────────────────────────────┼──────────────────
1 │ --- │ Busy │ --- │ --- │ --- │ --- │ Recipe Switch Error │ Trigger Error
─────┼────────────────┼────────┼───────┼───────┼───────┼────────────────────┼────────────────────────────┼──────────────────
2 │ --- │ --- │ --- │ --- │ --- │ Inspection Pass │ Inspection Completed / │ Exposure
│ │ │ │ │ │ │ Result Available │ Complete
─────┼────────────────┼────────┼───────┼───────┼───────┼────────────────────┼────────────────────────────┼──────────────────
3-5 │ --- │ --- │ --- │ --- │ --- │ --- │ --- │ ---
─────┼────────────────┼────────┼───────┼───────┼───────┼────────────────────┼────────────────────────────┼──────────────────
6-7 │ Reserved │
─────┼──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────
8-9 │ Current Recipe ID (16-bit unsigned integer) │
─────┼──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────
10-11│ Reserved │
─────┼──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────
12-13│ Inspection ID (16-bit unsigned integer) │
─────┼──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────
14-15│ Reserved │
─────┼──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────
16- │ ROI Results Assembly or Custom Data from Node-RED │
256 │ │

输出组装位图 (PLC → OV80i)

Byte │ Bit 7 │ Bit 6 │ Bit 5 │ Bit 4 │ Bit 3 │ Bit 2 │ Bit 1                 │ Bit 0
─────┼───────┼───────┼───────┼───────┼───────┼───────┼───────────────────────┼────────────────
0 │ --- │ --- │ --- │ --- │ --- │ --- │ Recipe Switch Request │ Trigger Request
─────┼───────┼───────┼───────┼───────┼───────┼───────┼───────────────────────┼────────────────
1-3 │ Reserved │
─────┼──────────────────────────────────────────────────────────────────────────────────────────
4-5 │ Recipe ID (16-bit unsigned integer) │
─────┼──────────────────────────────────────────────────────────────────────────────────────────
6- │ Custom Data for Node-RED │
256 │ │

ROI 结果组装细节 (字节 16--55)

当使用 Format Data for PLC Node-RED 块与分类配方时,输入组装的字节 16+ 被填充为结构化的对齐器和每个 ROI 数据,如下所示:

对齐器部分 (字节 16--23)

字节PLC 标签地址标签名称数据类型描述
16, 位 0I.Data[16].0对齐器成功BOOL如果对齐器成功定位到零件,则为 HIGH。
17--18I.Data[17]--I.Data[18]对齐器置信度UINT (16-bit)对齐的置信度分数 (0--65535)。
19--20I.Data[19]--I.Data[20]对齐器角度INT (16-bit, signed)相对于模板的匹配角度。
21--23I.Data[21]--I.Data[23]保留 (对齐器)BYTE保留用于未来的对齐器数据。

ROI 结果块 (字节 24--55)

每个 ROI 占用 8 字节。最多支持 4 个 ROI (ROI 0 到 ROI 3)。

ROI 块结构 (每 8 字节重复):

块内偏移标签名称数据类型描述
+0ROI IDUINT8 (8-bit)ROI 的唯一数字标识符。
+1, 位 0ROI 通过BOOLHIGH = 此 ROI 通过,LOW = 此 ROI 失败。
+2 到 +3ROI 置信度UINT (16-bit)此 ROI 分类的置信度分数 (0--65535)。
+4 到 +7保留BYTE保留用于未来的每个 ROI 数据。

ROI 起始地址:

ROI起始字节PLC 地址范围ID 地址通过地址置信度地址
ROI 024I.Data[24]--I.Data[31]I.Data[24]I.Data[25].0I.Data[26]--I.Data[27]
ROI 132I.Data[32]--I.Data[39]I.Data[32]I.Data[33].0I.Data[34]--I.Data[35]
ROI 240I.Data[40]--I.Data[47]I.Data[40]I.Data[41].0I.Data[42]--I.Data[43]
ROI 348I.Data[48]--I.Data[55]I.Data[48]I.Data[49].0I.Data[50]--I.Data[51]

缓冲区配置

在相机 UI 中查看默认标签

默认标签布局由相机固件定义,并对应于上述表格。要查看当前配置:

  1. 打开 OV80i 网络界面。
  2. 在左侧菜单中转到 工业以太网
  3. 选择您的协议 (EtherNet/IPPROFINET)。
  4. 页面显示:
    • 连接状态和设备信息
    • 输入和输出组件大小(每个方向最多 256 字节)
    • EDS 或 GSDML 文件下载链接(该链接还编码了默认组件结构)

EDS 文件(用于 EtherNet/IP)和 GSDML 文件(用于 PROFINET)都定义了默认数据大小。当您在 Studio 5000 或 TIA Portal 中添加相机模块时,这些描述文件中的组件大小决定了每个周期交换的字节数。

创建自定义数据缓冲区

要在相机和 PLC 之间发送自定义数据(超出默认状态/结果标签),请使用 "Format Data for PLC" Node-RED 块:

  1. 从相机网络界面打开 Node-RED(导航到 Node-RED 编辑器)。
  2. 在您的配方流程中,将 "Format Data for PLC" 节点放置在 "All Blocks Output Data" 节点和 "Send Data to PLC" 节点之间。
  3. 配置字节顺序:
    • 小端 用于 Allen-Bradley / Rockwell PLC
    • 大端 用于西门子 PLC
  4. 该块会自动将分类 ROI 结果格式化为从输入组件的第 16 字节开始的结构化布局(请参见上述 ROI 结果组件详细信息部分)。

对于完全自定义的数据缓冲区(不使用默认的 ROI 格式):

  1. 在您的 Node-RED 流中,使用 Function 节点构建一个具有所需字节布局的 msg.payload 缓冲区。
  2. 将其连接到 "Send Data to PLC" 节点。
  3. 您的自定义字节将从第 16 字节开始填充输入组件。
  4. 在 PLC 侧,通过 I.Data[16]I.Data[256] 地址读取相应的数据。

更改标签分配

核心标签(输入组件的字节 0--15 和输出组件的字节 0--5)由相机固件固定,无法重新分配。这些是系统级信号(触发器、配方切换、状态、错误、配方 ID 和检查 ID)。

可配置区域为:

  • 输入组件字节 16--256:由 Node-RED 填充。您可以通过配置 Node-RED 流来控制此处的数据。默认情况下,"Format Data for PLC" 块将此填充为 ROI 结果,或者您可以使用 Function 节点写入任意数据。
  • 输出组件字节 6--256:由 Node-RED 读取。您可以将 PLC 中的任何数据写入这些字节,然后在 Node-RED 流中使用适当的输入节点读取它们。这对于将序列号、批次 ID、阈值或其他参数从 PLC 发送到相机非常有用。

从 PLC 向相机发送自定义数据(输出组件)

要将自定义数据从 PLC 传递到 Node-RED:

  1. 在您的 PLC 程序中,将值写入 O.Data[6]O.Data[256]
  2. 在相机上的 Node-RED 中,使用 PLC 输入数据节点读取这些字节。
  3. 在您的流逻辑中使用这些值(例如,阈值、序列号、条件参数)。

快速参考:标签地址备忘单

下表总结了在 PLC 编程中常用的标签,方便快速查找:

PLC 地址方向信号名称用途
I.Data[0].0相机 → PLC触发准备触发前检查
I.Data[0].1相机 → PLC触发确认此信号为高时解除触发
I.Data[0].2相机 → PLC配方切换确认此信号为高时解除配方请求
I.Data[0].7相机 → PLC在线 / 启动完成确认相机已启动
I.Data[1].0相机 → PLC触发错误监控触发故障
I.Data[1].1相机 → PLC配方切换错误监控配方切换故障
I.Data[1].6相机 → PLC高电平时不要发送命令
I.Data[2].0相机 → PLC曝光完成图像已捕获
I.Data[2].1相机 → PLC结果可用可以安全读取合格/不合格
I.Data[2].2相机 → PLC检查合格高电平 = 合格,低电平 = 不合格
I.Data[8]--I.Data[9]相机 → PLC当前配方 ID切换后验证配方
I.Data[12]--I.Data[13]相机 → PLC检查 ID将结果与触发器关联
O.Data[0].0PLC → 相机触发请求高电平保持以触发
O.Data[0].1PLC → 相机配方切换请求高电平保持以切换配方
O.Data[4]--O.Data[5]PLC → 相机配方 ID设置所需的配方编号
O.Data[6]+PLC → 相机自定义数据用户定义的数据,用于 Node-RED
I.Data[16]+相机 → PLCROI 结果 / 自定义数据ROI 结果或自定义 Node-RED 输出