逻辑检测:把多个检测项的结果组合判断¶
有些判定单看一个框看不出来:两个日期之间差了几天、两个定位点之间隔了多远、批号和型号是不是对得上。逻辑检测专门干这个 —— 它自己不画框、不看图,只把别的检测项已经跑出来的结果拿过来做二次判断。
它提供三种比较,可以单用也可以一起用:
三种里勾了几种,每一种都得通过,整项才 PASS。
前置条件¶
- 要比较的检测项已经建好、能正常出结果。日期比较需要两个可变区域,距离比较需要两个固定区域。
- 用变量比较前,先给要参与运算的检测项设好自定义变量(在树里右键该检测项 →"设为自定义变量")。
- 分工:方案内的逻辑检测只管本方案;要跨相机工位、跨检测方案比结果(比如正面和背面的型号对不对得上),一律用整件逻辑检测。
它包含哪些检测框¶
只有一个:"调整参数"。逻辑检测在树里没有 ROI 子项,因为它不占图上的任何位置。
新建与画框¶
逻辑检测没有框,所以只能从菜单建,不能在图上拖:
- 切到"编辑模式"。
- 点工具栏"新建检测项",类型选"逻辑检测",确定。
- 在树里双击"调整参数",打开设置窗口。
- 勾上要用的比较方式,选好数据来源。
- 点"训练工程",再点"整体运行"验证。

参数说明¶
"日期比较"¶
把两个可变区域认出来的文字都当日期解析,比它们相差几天。
| 参数 | 含义 | 调参建议 |
|---|---|---|
| 分组标题上的勾选框 | 勾上才启用日期比较 | 不用就别勾,省得空绑定报错 |
| "可变区域(源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 这类运行期变量不限。用了别的工作站或别的方案的变量,调试端一运行就报"方案内逻辑检测只能用本方案的变量",运行页点"运行"时开跑前就拦下,不会起跑;这种判断请删掉这条,改用整件逻辑检测。被禁用的检测项会直接报"已被禁用, 永远不会产出结果";排在逻辑检测之后的会报"在本次运行里没有产出结果"。指令里没用到的自定义变量不影响逻辑检测。
训练与调试¶
- 先确认被引用的检测项自己能跑通:单独右键"运行此检测项",确认有结果。
- 回到逻辑检测的"调整参数",绑定数据来源,窗口里的只读框会显示这些源当前的结果 —— 对不上就是绑错了。
- 点"整体运行"跑整套,看逻辑检测这一项的判定。
- 距离比较要先看实测值再定上下限,不要凭空填。
- 点"保存工程"。
删掉被引用的检测项会自动解绑
如果把一个被逻辑检测绑着的可变区域或固定区域删掉,逻辑检测这一侧的绑定会自动变成"未绑定",不会留下悬空引用。但判定也就失效了,记得重新绑一个。
常见误判与处理¶
| 现象 | 原因 | 处理 |
|---|---|---|
| 提示"未选择参与日期逻辑组合的检测项!" | 日期比较勾上了,但两个源里有"未绑定" | 两个源都选上,或取消勾选日期比较 |
| 提示"未选择参与距离逻辑组合的检测项!" | 距离比较勾上了,但两个源里有"未绑定" | 同上 |
| 提示"日期格式不正确, 请核对!" | 可变区域认出来的内容不是能识别的日期 | 先到那个可变区域里看识别结果,把字认准;或用裁切只取日期那一段 |
| 提示"OCR结果数量不足, 请检查可变区域是否可用" | 绑定的可变区域被禁用或没跑出结果 | 启用它,确认它自己能出结果 |
| 日期比较一直 NG,但两个日期看着没问题 | "校验规则"填小了 | 按实际工艺要求放宽天数 |
| 距离比较一直 NG,中间只读框显示"空" | 有一个固定区域这次没定位成功 | 去那个固定区域调定位参数 |
| 距离结果正好等于上限或下限时判 NG | 判据是严格小于,不含端点 | 上下限各留一点余量 |
| 提示"结果判定指令出错" | 表达式写错,或引用了不存在的变量名 | 对照"变量处理结果"里的变量名逐个核对 |
| 提示"比对变量 … 在本次运行里没有产出结果" | 指令用到的检测项排在逻辑检测之后、属于别的模板图,或没跑 | 调整运行顺序,让逻辑检测排在最后;确认引用项已启用 |
| 提示"方案内逻辑检测只能用本方案的变量"(调试端运行时,或运行页点"运行"时) | 指令用到了别的工作站或别的方案的变量 | 删掉这条逻辑检测或改掉指令;跨方案的判断改用整件逻辑检测 |
| 关窗时提示"请确认距离比较的最大值大于最小值" | 上下限填反了 | 把上限改成大于下限的值 |