跳到主要内容

AI 驱动文档

您想了解什么?

PLC 握手

PLC 与 OV Spark 之间的每一次交互都遵循握手机制:PLC 发起请求,相机进行确认,PLC 在看到确认后撤销请求。共有四种握手:触发、读取结果、程序切换和命令。

本页面面向编写 PLC 逻辑的控制工程师。EtherNet/IP 和 PROFINET 的工作方式相同。

简而言之
  • 在发起请求前,始终等待相机的 ready 位,并保持请求直到看到 ack
  • 根据 Results Valid 加上变化的 Inspection ID 来读取结果,切勿仅依据单一跳变
  • 必须确认每个结果,否则不会呈现新内容
本页使用信号名,字节偏移请查阅生成的文件

本页刻意使用信号名而非地址。字节和位的布局由固件生成,因此请从相机固件对应的 EDS 或 GSDML 文件中获取,或从相机工业以太网页面的参考章节中获取。手工键入偏移量,是导致安装后在升级时读错位的常见原因。

触发​

  1. 检查 Online = 1、Trigger Ready = 1 且 Trigger Ack = 0。写入 Part ID,如果使用则写入 User Data,然后拉高 Trigger 并保持
  2. 相机在上升沿接受触发:Trigger Ready 降为 0,Trigger Ack 升为 1,Part ID 和 User Data 被锁存。如果拒绝触发,Trigger Error 升起,Error ID 说明原因
  3. 当看到 Trigger Ack = 1 时,拉低 Trigger
  4. 相机拉低 Trigger Ack。曝光结束时 Exposure Complete 置位,下一次采集可以开始时 Trigger Ready 恢复为 1
注意事项
  • 保持 Trigger 为高不会重复触发。 相机仅响应上升沿
  • Trigger Error 反映来自任何来源的最后一次触发,而不仅仅是您的触发。请读取 Error ID 查明原因,而不是臆断是触发过快
  • Busy = 1 时 Trigger Ready = 1 是正常的,当图像缓冲区正在使用时。相机可以在当前检测完成之前接受下一次触发。请勿将其锁存为故障

读取结果​

一次握手涵盖两种模式。当 Buffer Results Enable = 0 时,结果为实时的,每个新结果都会覆盖上一个。当 Buffer Results Enable = 1 时,最多可排队 10 个结果。

  1. 等待 Results Valid = 1
  2. 在一个扫描周期内读取所有结果字段,连同 Inspection ID
  3. 拉高 Inspection Results Ack 并保持。相机将结果出队,Results Valid 以及通过和失败位降为 0
  4. 当看到 Results Valid = 0 时,拉低 Ack。如果队列中还有更多结果,下一个将在该下降沿时呈现

将 Results Valid 从 0 变为 1 并伴随变化的 Inspection ID 视为新结果。

注意事项
  • Inspection Completed 是跳变信号,不是电平信号。 在缓冲模式下,它标记的是一次完成而非一次呈现,因此即使结果字段保持不变它也可能翻转。切勿仅依据跳变读取结果
  • 实时模式可能隐藏某次检测。 一个数据包周期内发生两次完成可能看起来像一次翻转。缓冲模式则不存在此问题
  • 更改 Buffer Results Enable 会在任一边沿时丢弃队列以及已呈现的结果
  • Inspection ID 中出现空缺意味着某次已接受的触发未产生结果:被中止、丢弃或抑制
  • 当 Ack 为高时,无论完成多少次检测,都不会呈现新结果

总体判定结果位于 Inspection Pass 和 Inspection Fail 中。两者都为 0 表示无结果。各工具的详细信息来自您在 步骤 5:输出 中分配的槽位。

程序切换​

  1. 检查 Recipe Switch Ack = 0,写入 Recipe ID,然后拉高 Recipe Switching Request
  2. 如果接受:Recipe Switch Ack 升起,Trigger Ready 下降,Online 下降并 Offline Reason = 3,表示程序正在加载。如果拒绝:Recipe Switch Error 升起,附带未知程序或忙碌错误
  3. 加载完成后:Current Recipe ID、Recipe Version 和 Tool Count 更新,Recipe Load Complete 升起,Online 恢复为 1
  4. 拉低 Recipe Switching Request。相机清除 Ack 和 Recipe Load Complete
注意事项
  • 从请求的上升沿到 Ack 之间,Recipe ID 必须保持不变
  • 正在处理中的部件按旧程序完成检测。 它们在 Recipe ID During Judgment 中携带旧程序 ID,因此应使用它而不是 Current Recipe ID 来解读结果
  • 队列中的结果在切换后仍然保留,并保留判定它们时使用的程序
  • 如果加载失败,先前的程序仍保持已加载状态
  • Recipe ID 是在 步骤 5:输出 中设置的 PLC recipe ID。复制或导入程序会为其分配新的 ID

命令​

  1. 检查 Command Ready = 1,写入 Command ID 和 Command Arg 0 到 3,然后拉高 Execute Command 并保持
  2. 相机锁存 ID 和参数:Command Ready 下降,Command Executing 升起
  3. 完成后,一次更新同时携带 Command Response 0 到 3、Command Result Code、Command Executing = 0、Command Complete = 1,若失败则还包括 Command Failed = 1。这些永远不会跨扫描周期拆分
  4. 读取响应并拉低 Execute Command。相机清除 Command Complete 并将 Command Ready 恢复为 1

命令列表和结果代码位于相机工业以太网页面的 Command reference 和 Codes 章节中。

一个稳健的 PLC 序列​

对于典型的生产线,能在生产中稳定运行的逻辑如下:

  1. 当部件到位时,等待 Trigger Ready,然后触发
  2. 等待 Results Valid 并出现新的 Inspection ID
  3. 读取判定、所需的槽位以及 Recipe ID During Judgment
  4. 确认
  5. 根据判定执行动作,通过 Part ID 或 Inspection ID 将结果与部件匹配
通过 ID 匹配结果与部件,而不是靠时序

假设"下一个结果属于下一个部件"的做法,在第一次丢失触发之前都能工作。在每次触发时写入一个 Part ID,并检查它是否随结果返回,这样即使漏掉一个部件,也不会让之后的每个判定都错位。

返回入门路径连接到您的 PLC