跳转至

逻辑检测:把多个检测项的结果组合判断

有些判定单看一个框看不出来:两个日期之间差了几天、两个定位点之间隔了多远、批号和型号是不是对得上。逻辑检测专门干这个 —— 它自己不画框、不看图,只把别的检测项已经跑出来的结果拿过来做二次判断。

它提供三种比较,可以单用也可以一起用:

  • 日期比较:比两个可变区域识别出来的日期。
  • 距离比较:比两个固定区域的定位结果之间的距离或角度。
  • 变量比较:用自定义变量写一条表达式,自己决定怎么判。

三种里勾了几种,每一种都得通过,整项才 PASS。

前置条件

  • 要比较的检测项已经建好、能正常出结果。日期比较需要两个可变区域,距离比较需要两个固定区域。
  • 用变量比较前,先给要参与运算的检测项设好自定义变量(在树里右键该检测项 →"设为自定义变量")。
  • 分工:方案内的逻辑检测只管本方案;要跨相机工位、跨检测方案比结果(比如正面和背面的型号对不对得上),一律用整件逻辑检测。

它包含哪些检测框

只有一个:"调整参数"。逻辑检测在树里没有 ROI 子项,因为它不占图上的任何位置。

新建与画框

逻辑检测没有框,所以只能从菜单建,不能在图上拖:

  1. 切到"编辑模式"。
  2. 点工具栏"新建检测项",类型选"逻辑检测",确定。
  3. 在树里双击"调整参数",打开设置窗口。
  4. 勾上要用的比较方式,选好数据来源。
  5. 点"训练工程",再点"整体运行"验证。

逻辑检测"调整参数"窗口

参数说明

"日期比较"

把两个可变区域认出来的文字都当日期解析,比它们相差几天。

参数 含义 调参建议
分组标题上的勾选框 勾上才启用日期比较 不用就别勾,省得空绑定报错
"可变区域(源1)" 第一个日期来自哪个可变区域 下拉框里列出本检测方案下所有可变区域;不想绑就选"未绑定"
"可变区域(源2)" 第二个日期来自哪个可变区域 同上
两个"识别结果"框 各在对应下拉框的下一行,显示这两个源当前认出来的内容,没跑过时显示"无结果" 只读。用来确认绑对了没有
"校验规则" 允许相差几"天" 填 0 表示两个日期必须是同一天;填 30 表示相差不超过 30 天

窗口里那行提示 "注: 日期源检测项结果之间比较, 不与本机系统时间比较" 是重点:它比的是标签上这两个日期彼此的关系,和电脑的系统时间无关。

"距离比较"

拿两个固定区域的定位结果(中心点坐标和角度)算距离。

参数 含义 调参建议
分组标题上的勾选框 勾上才启用距离比较
"固定区域(源1)" / "固定区域(源2)" 两个定位来源 下拉框列出本检测方案下所有固定区域,可选"未绑定"
两个"定位结果"框 各在对应下拉框的下一行,显示各自的定位结果,形如 X: 120.5, Y: 300.2, Ang: 0.3 只读。显示空白说明这个固定区域这次没定位成功
"对比类型" "X"只比横向距离,"Y"只比纵向距离,"XY"比直线距离,"角度"比两者的角度差 只关心左右间距选"X",只关心上下选"Y",要真实间距选"XY"
"范围"一行里的两个数字框(下限 < 实测值 < 上限) 结果必须严格落在两者之间才 PASS 先跑几件看中间那个只读框里的实测值,再按实测值上下留余量。下限必须小于上限,否则关窗时会提示"请确认距离比较的最大值大于最小值"
"范围"一行中间的只读框 本次算出来的距离 只读,没跑过时显示"空"

跑过一次之后,"输入图片"这张结果图上会画出两个固定区域的定位框和中心坐标,可以直接看两个点取得对不对。

"变量比较"

给会写一点表达式的调试人员用,能做前两种做不到的判断。

参数 含义 调参建议
分组标题上的勾选框 勾上才启用变量比较
"变量预处理指令" 多行,先执行一遍,用来从原始变量里算出中间量 例如从一串字符里截出型号段,赋给一个新名字
"变量处理结果" 只读,显示预处理之后所有变量的值 调试时照着它确认变量名和取值对不对
"结果判定指令" 一行表达式,结果为真判 PASS,为假判 NG 不能留空,留空会报"结果判定指令不能为空"

可以用的变量,就是在树里右键设过"设为自定义变量"的那些检测项的输出值。变量名在设定时自己取,可以从调试端菜单"查看自定义变量"里看当前有哪些、各自指向哪个检测项、当前值是多少。能设自定义变量的检测项有:字符识别、码检测、条码字符对、可变区域、卡尺工具。

只能用本方案的变量,且被引用的检测项要启用、排在逻辑检测前面

方案内的逻辑检测只管本方案:指令里用到的自定义变量必须是本方案(同一个检测方案)里的检测项,串口变量、SN 这类运行期变量不限。用了别的工作站或别的方案的变量,调试端一运行就报"方案内逻辑检测只能用本方案的变量",运行页点"运行"时开跑前就拦下,不会起跑;这种判断请删掉这条,改用整件逻辑检测。被禁用的检测项会直接报"已被禁用, 永远不会产出结果";排在逻辑检测之后的会报"在本次运行里没有产出结果"。指令里没用到的自定义变量不影响逻辑检测。

训练与调试

  1. 先确认被引用的检测项自己能跑通:单独右键"运行此检测项",确认有结果。
  2. 回到逻辑检测的"调整参数",绑定数据来源,窗口里的只读框会显示这些源当前的结果 —— 对不上就是绑错了。
  3. 点"整体运行"跑整套,看逻辑检测这一项的判定。
  4. 距离比较要先看实测值再定上下限,不要凭空填。
  5. 点"保存工程"。

删掉被引用的检测项会自动解绑

如果把一个被逻辑检测绑着的可变区域或固定区域删掉,逻辑检测这一侧的绑定会自动变成"未绑定",不会留下悬空引用。但判定也就失效了,记得重新绑一个。

常见误判与处理

现象 原因 处理
提示"未选择参与日期逻辑组合的检测项!" 日期比较勾上了,但两个源里有"未绑定" 两个源都选上,或取消勾选日期比较
提示"未选择参与距离逻辑组合的检测项!" 距离比较勾上了,但两个源里有"未绑定" 同上
提示"日期格式不正确, 请核对!" 可变区域认出来的内容不是能识别的日期 先到那个可变区域里看识别结果,把字认准;或用裁切只取日期那一段
提示"OCR结果数量不足, 请检查可变区域是否可用" 绑定的可变区域被禁用或没跑出结果 启用它,确认它自己能出结果
日期比较一直 NG,但两个日期看着没问题 "校验规则"填小了 按实际工艺要求放宽天数
距离比较一直 NG,中间只读框显示"空" 有一个固定区域这次没定位成功 去那个固定区域调定位参数
距离结果正好等于上限或下限时判 NG 判据是严格小于,不含端点 上下限各留一点余量
提示"结果判定指令出错" 表达式写错,或引用了不存在的变量名 对照"变量处理结果"里的变量名逐个核对
提示"比对变量 … 在本次运行里没有产出结果" 指令用到的检测项排在逻辑检测之后、属于别的模板图,或没跑 调整运行顺序,让逻辑检测排在最后;确认引用项已启用
提示"方案内逻辑检测只能用本方案的变量"(调试端运行时,或运行页点"运行"时) 指令用到了别的工作站或别的方案的变量 删掉这条逻辑检测或改掉指令;跨方案的判断改用整件逻辑检测
关窗时提示"请确认距离比较的最大值大于最小值" 上下限填反了 把上限改成大于下限的值

相关页面