跳转至

整件逻辑检测:所有相机工位都跑完后再做一次判断

一件产品往往要好几个相机工位、好几个检测方案才拍完:正面一个方案、背面一个方案,或者上料位和下料位各一台相机。有些判断要把不同工位的结果放在一起才做得了 —— 正面认出来的型号和背面的是不是同一个、两个工位读到的 SN 是不是一致。

整件逻辑检测就是干这个的:一件产品所有相机工位、所有检测方案都跑完以后,拿全部自定义变量做一次"变量预处理 + 结果判定",判定结果固定计入总结果 —— 它判不通过,这件产品就是不通过,没有开关可以关掉"计入"。

和方案内逻辑检测怎么分工

逻辑检测(方案内) 整件逻辑检测
放在哪 某个检测方案里的一个检测项 工程级,调试端任务树最底部(排在所有相机工位之后)
能用哪些变量 只能用本方案的自定义变量(串口变量、SN 不限) 工程里全部自定义变量,哪个工位、哪个方案都行
什么时候跑 跟着本方案,按运行顺序 所有方案都跑完以后,每件只跑一次
能做什么比较 日期比较、距离比较、变量比较 只有变量比较(启用 / 预处理指令 / 判定指令)
结果去哪 本方案的判定 一票否决总结果

规矩很简单:只看本方案的,用方案内逻辑检测;要跨相机工位或跨方案比的,一律用整件逻辑检测。 方案内逻辑检测一旦用了别的方案的变量,运行时会直接报错,不会再等。

前置条件

  • 要参与判断的检测项已经建好、能正常出结果。
  • 先给它们设好自定义变量:在调试端树里右键该检测项 →"设为自定义变量",起一个名字。能设自定义变量的检测项有:字符识别、码检测、条码字符对、可变区域、卡尺工具、圆孔测量。串口收发数据产生的变量、SN 也能直接用。

新建与设置

  1. 用超级管理员登录,进调试端。
  2. 左侧"标签相机工位集合"的树里,在空白处(或某个相机工位上)右键 →"新建整件逻辑",新的一条追加在树的最底部、所有相机工位之后,按 整件逻辑_1、整件逻辑_2 的顺序起名。
  3. 双击这一条(或右键 →"设置整件逻辑"),打开设置窗口,填好三个参数,点"确定"。
  4. 点"保存工程"。整件逻辑存在工程文件里,老工程打开时就是一条都没有,不会提示什么。

右键这一条还有"重命名整件逻辑"(名字在工程里不能重复)、"启用整件逻辑"/"禁用整件逻辑"、"删除整件逻辑"(会二次确认)。禁用的会和禁用的相机工位一样置灰。条目背景按上一次结果:红 = 不通过,其余白;鼠标停上去会显示没跑的原因或指令错误。

整件逻辑设置窗口

参数说明

参数 含义 调参建议
"启用" 勾上才参与判断;不勾 = 不跑、不否决 临时不用就去掉勾,不必删
"变量预处理指令" 多行,先执行一遍,用来从原始变量里算出中间量 例如 front = str(正面型号).strip(),把正面认出来的型号去掉空格后存成 front
"结果判定指令" 一行表达式,结果为真判通过,为假判不通过 不能留空,留空开跑前就会拦下
变量表(变量 / 来源 / 当前值) 只读,列出工程里全部自定义变量:来源写成 相机工位->检测方案->检测项,串口变量、SN 写"运行期变量(串口/SN)" 点"刷新"重新取当前值。来源显示"(已失效)"说明那个检测项已经删了
"变量处理结果" 只读,上一次跑完后预处理之后所有变量的值 调试时照着它确认变量名和取值对不对
"结果" 上一次的判定:通过 / 不通过 / 未运行,下面跟着原因或错误文案

写法和逻辑检测"变量比较"一样:变量名就是设自定义变量时起的名字,能用加减比较、字符串截取、len() 这类常用写法。名字不在自定义变量里的(预处理里自己赋的中间量、内建函数)不会被当成问题。

设置窗口里没有"运行"按钮 —— 整件逻辑只在下面两种情况下跑。

在调试端怎么跑

整件逻辑只在调试模式点工具栏"整体运行"时跑:

  • "整体运行"在调试模式下就是运行整件:启用的相机工位、启用的检测方案,按任务树的顺序,装了调试图的都跑一遍,全部跑完再跑整件逻辑。
  • 有方案没装调试图时,装了图的照跑,整件逻辑不跑,条目上提示"工作站 X 方案 Y 没装调试图, 整件逻辑未运行";跑完后运行时间旁边也会用橙色点名"未运行(没装调试图):工作站 X 方案 Y 没装调试图"(工程里没有整件逻辑时也会提示)。要跑整件逻辑,先给每个启用的方案都装好调试图(点"单次触发"拍一张,或点"打开调试图"选一张)。
  • 一个装了图的方案都没有时,和以前一样报"调试模式输入图片为空!"。
  • 某个方案跑出错时,后面的方案和整件逻辑都不跑,报那个方案的错;整件逻辑条目清掉上一次的结果,提示"方案 Y 出错, 整件逻辑未运行"。
  • 跑完后树里的整件逻辑条目不通过变红,鼠标停上去能看到没跑的原因或指令错误;双击打开设置窗口能看到"变量处理结果"和判定。

只想调一个方案时,在任务树上右键该方案 →"只运行此方案":不是当前方案会先切过去、切换完成后再跑;只跑这一个方案,不跑整件逻辑。"单模板运行"同样不跑整件逻辑。编辑模式下"整体运行"的行为没有变。

运行页的行为

  • 开始运行前会校验整件逻辑的配置,有问题不起跑,报"整件逻辑检测配置有误, 请先修正: …",问题见下面的提示表。
  • 每件产品等所有检测方案都跑完以后跑一次整件逻辑。标了"最终输出"的通讯输出、汇总结果、存图、人工复判、写 MES、结束这些指令都会先等它跑完,所以 PLC 拿到的总结果、存图的 OK/NG 目录、MES 上传的结果、运行页的结果标签,都已经算上了整件逻辑。
  • 整件逻辑是一票否决:任一条启用的整件逻辑判不通过,总结果就是不通过;和系统设置里总结果按"与"还是"或"汇总无关。它判通过时总结果不变。
  • 不通过时,"不良信息汇总"和 MES 的缺陷描述里会多一段 整件逻辑->名字: 加原因(没有原因写"判定为假");汇总结果串在各方案结果之后多一段 整件逻辑->名字:通过; / 不通过; / 未知;(人工复判、写 MES 那两行还是在最后)。
  • 中途输出看不到整件逻辑:没勾"最终输出"的通讯输出不等所有方案跑完,整件逻辑这时还没跑。
  • 通讯输出里可以引用整件逻辑的结果:变量下拉里会列出 整件逻辑->名字(只列启用的),选上后存成 &整件逻辑->名字,值是通过 / 不通过。只能用在"最终输出"或它之后的输出里;用在中途输出会报变量找不到并停机。
  • 指令运行时出错(比如预处理里除以零、判定里写错了变量名),这件产品判不通过,运行页按异常停机并报出指令错误。

命令行 run_cli info 会列出整件逻辑(piece_logic)和配置问题(piece_logic_problems,与开跑前校验同一份)。run_cli detect 是一张图跑一个方案,不跑整件逻辑;run_cli run(无头运行)和运行页一样会跑。

常见提示与处理

提示 原因 处理
"整件逻辑 X 的结果判定指令为空"(开跑前) 判定指令没填 填上判定指令,或禁用这一条
"整件逻辑 X 的指令有语法错误"(开跑前) 预处理或判定指令写得不合语法 对照"变量处理结果"改指令
"整件逻辑 X 用的变量 V 不存在(检测项可能已删除或被禁用过,请重新设为自定义变量)"(开跑前) 指令用到的变量不在变量表里。在调试端禁用或删除检测项 / 方案 / 相机工位时,软件会把它们的自定义变量一并去掉,重新启用后也不会自动回来 启用检测项后重新右键"设为自定义变量"(名字照旧),或改掉指令。预处理里自己赋值的中间量、内建函数(如 len)、SN 和串口收发变量不算
"整件逻辑 X 用的变量 V 所在的 工位->方案->检测项 已禁用"(开跑前) (变量仍在变量表里时)指令用到的检测项、它的方案或相机工位被禁用了,永远不会有结果 启用它,或改掉指令
"整件逻辑 X 用的变量 V 已失效(检测项已删)"(开跑前) (变量仍在变量表里时)变量指向的检测项已经删了 重新给新的检测项设自定义变量,或改掉指令
"通讯输出 O 引用了不存在或已禁用的整件逻辑 X"(开跑前) 通讯输出里的 &整件逻辑->X 指向的整件逻辑被禁用或删掉了(重命名会自动同步,不会出这条) 启用它,或去通讯输出里改掉引用
"变量预处理指令错误:…"(运行中停机) 预处理指令执行出错 看错误文案,改预处理指令
"结果判定指令出错:…"(运行中停机) 判定表达式执行出错,常见是变量名写错 对照变量表里的变量名逐个核对
"获取变量值错误:…"(运行中停机) 某个变量取值时出错 检查对应检测项
条目提示"… 没装调试图, 整件逻辑未运行",运行时间旁橙色"未运行(没装调试图):…"(调试端) "整体运行"时有方案没装调试图 给每个启用的方案都装好调试图再点"整体运行"
条目提示"方案 Y 出错, 整件逻辑未运行"(调试端) "整体运行"时那个方案跑出错 先按弹出的报错修好那个方案
通讯输出报变量 整件逻辑->名字 找不到 引用它的输出没勾"最终输出"(被禁用的情况开跑前就会拦下) 改到最终输出里引用

相关页面