# AoiLite **Repository Path**: whusj/AoiLite ## Basic Information - **Project Name**: AoiLite - **Description**: 基于脚本的AOI,SPC和GRR界面 - **Primary Language**: Shell - **License**: Not specified - **Default Branch**: develop - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 1 - **Created**: 2025-03-28 - **Last Updated**: 2025-03-28 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README [TOC] # 1.概述 项目名称:AoiLite 项目创建时间: 2017-8-23 项目创建人:rime 项目概述:基于脚本的AOI,SPC和GRR界面 ## 1.1 工作需求 ### 1.1.1 实现一个脚本仿真AOI程序,该脚本有三种用法分别如下: 1、aoi不加选项,则进入AOI操作主界面(后称:主界面) 2、aoi -s 或 aoi --spc 则进入AOI的SPC界面(后称:SPC界面) 3、aoi -g 或 aoi --grr 则进入AOI的GRR界面(后称:GRR界面) 4、aoi -h 或 aoi --help则进入帮助说明界面(后称:帮助界面) ### 1.1.2 各界面要实现以下功能: #### I 主界面(形象的概念请参考复蝶SPI主界面相关区域) - 无选项则进入该主界面,但是必须要有参数,参数是批次名称。无选项、无参数则提示该命令至少要有一个参数或选项(请用英语表达) - 有类似复蝶SPI主界面一样的轨道,共分为4段(LoadIn、SlowDown、Stop、LoadOut),内含PCB,PCB为绿色,轨道颜色可自定义 - 通过S开始模仿自动检测全过程,PCB需从LoadIn开始花1s到SlowDown,然后再花2s到Stop区域,到达Stop区域后夹板用该区段轨道变一种颜色代表,然后开始仿真检测,这需要在PCB上显示一个区域颜色代表FOV,建议PCB用6*6对绿色背景“[]”标识,FOV为2*2对其它颜色背景的“[]”(该颜色需要与轨道夹板颜色区别),模拟检测过的PCB区域都用该颜色表示,直至全部检查完毕(每检查1个FOV耗时1秒钟,没查完1个FOV就要更新一次PCB区域颜色),然后夹板装置松开(用恢复该段轨道原先颜色表示),夹板装置松开后整个PCB恢复绿色,并且用1s到达LoadOut位置,在该位置生成数据输出 - 每块PCB到达LoadOut位置要输出检测结果,这意味着每块PCB都会有一个对应数据输出,输出的位置需要按批次来定义,不同批次在不同目录,每块PCB输出数据的文件名请按“年月日小时分秒”来自动设定,而目录名择优进入主界面的命令参数来决定(该参数就作为批次名,输入什么就是什么) - 每块PCB有500个元器件,必须要有以下字段:Name(元件名)、Lib(类型库)、x-shift(x偏移量)、y-shift(y偏移量)、height(高度)、result(结果)、confirm(确认),其中: 1. **Name**: 前400个元器件的name前缀为“chip-”后面依序接001直至400;401起到500则前缀为“ic-”后面依序接001直至100(举例:chip-105、ic-95) 2. **Lib**: 前400个元器件的lib前缀为“chip-”、中缀在“01005-”、“0201-”、“0402-”、“0603-”、“1005-”中随机生成、后缀则为“lib”; 后100个元器件前最为“ic-”、中缀在“BGA”、“PLCC”、“DIP”、“SOP”、“QFP”中随机生成(举例:chip-0201-lib、ic-plcc-lib) 3. **x-shift**:随机输出x偏移值,范围在-500到500之间,单位“um”要后缀带上 4. **y-shift**: 随机输出y偏移值,范围在-500到500之间,单位“um”要后缀带上 5. **height**: 随机输出高度,以“chip-”开头的元器件高度范围在0-500,单位“um”要后缀带上,以“ic-”开头的元器件的高度范围在0-5000,单位“um”要后缀带上 6. **result**:该元器件的x或y偏移量绝对值超过400um的输出"x-misalign"或"y-misalign",该元器件的height如果低于20um则输 出missing, 针对“chip-"开头的器件如果高度超过475um,则输出“wrong-part";针对"ic-"开头的器件如果高度超过4750um则输出“wrong-part"。剩余情况一律输出"OK" 7. **confirm**: 针对result输出不是"OK"的元器件,要做到50%的情况输出"OK",40%的情况输出与result一样的内容,剩余10%则随机在 “x-misalign"、”y-misalign"、"missing"、“wrong-part”中选择一项输出;而针对result输出是“OK”的元器件,只要跟随直接输出“OK”即可 8. 输出完毕后重复开始LoadIn、slowdown、stop、仿真检测、loadout及输出检测结果的过程,直至"Ctrl+P"进入“停止”状态(注意 :按下该 快捷键后必须要把当前PCB按照正常流程LoadOut并且输出检测结果后才停止) 9. 要有地方显示当前批次号、已检测时间(按秒更新)、已检测PCB数量、==累计==不良元器件数量、良率、误报率(注意:直通率、良率、误报 率请按元件数的口径来统计,单位ppm) 要特别注意!必须考虑退出主界面下次再进入还是同一批次需要再原有基础上累计计算的问题 10. 请显示良率、误报率的柱状图,该图默认水平方向,但要实现通过"<"或">"键实现x柱状图水平方向与垂直方向的切换 11. 按"ESC"退出该主界面,只有“停止”状态按下该键才有效 备注:各个批次子目录可以与该脚本在同一根目录下 #### II、SPC界面 - 进入该界面终端会显示所有已经检测过的“批次名称”,并让提示用户输入前面代号,选中批次则显示该批次详细信息,按下“ESC”则退出SPC,大致图示如下: 说明: 上图意味着已经检查了 iphone5、matepro9、mi6s这3个批次,输入a回车则会是显示iphone5该批次的详细信息,如果输入b回车则显示matepro9批次详细信息,以此类推 备注:如果还没有模拟检查过任何批次,那就提示:no any batch info, please use “ESC” to quit! ![image](http://note.youdao.com/yws/public/resource/202deb6b3abfb267b2c9ee2b62bf6c60/xmlnote/WEBRESOURCE8851ae7557dadbb8fa932c314fb4f5d2/16863) - 选中具体批次进入显示详细信息的界面要求如下 A.顶部第一行显示该批次的良率、不良数、误报率的总计数 B.顶部第二行显示该批次发生不良最多的元器件、不良类型数最多的类型、不良最多的Lib类型的显示 C.顶部第三行显示该批次x-shift、y-shift、height的cp/cpk值 D.顶部第四行起有一块较大区域显示x、y平均偏移量用靶状图表示,需要有XY轴,然后命中标记用“×”来标识 E.靶状图下最后区域显示最近10块检测PCB的结果(不足10块就有多少显示多少),需要包含以下字段:“序号”、 “检测时间”、“良率”、“误报率”、“不良元器件数”(注意:这些数值都是基于该PCB的统计),还需要能通过PageDown、PageUp两个键“向前/向后10个记录“显示,但这个过程不会导致前面A、B、C的显示发生变化 F.按下“R”键可以返回“批次选择”界面 #### III、GRR界面 进入该界面后也要显示类似主界面一样的轨道(正好帮大家初步建立“单一性”概念),但不同之处在于以下: - PCB上要高亮6对“[]”模拟6个采样元器件,中间区域取2个,四周各1个 - 需要分为3组来实现,这就意味着要有提示信息让大家键盘输入有这么一个确认动作 - 每组10次,这10次都要有完整的loadIn、slowdown、stop、模拟检测、loadout的显示,其中模拟测试还要与主界面的模拟检测有所区别,这里需要将模拟检测完的期间用不一样的颜色高亮以示区别,而且grr需要采集的数据请模拟每检测完一个器件就输出一次,输出结果都追加在同一个grr文件中,输出数据需要有x-shift、y-shift、height三种,x与y的shift随机输出范围为-500~500um,height高度随机输出范围是300~350um - 3组检测完毕后需提示输入tolerance,然后根据输入的tolerance计算并显示最终x-shift、y-shift、height的GRR值(为了便于用户阅读,之前用户输入的tolerance仍需保留显示) - 按“ESC”键退出,如果正在检测过程中,请确保当前这块PCB检测完完成LoadOut后才退出 #### IV、定时备份任务 要求实现一个脚本,每隔3分钟自动执行1次,它将能够针对AOI主界面所有模拟检测的结果做统计,并将所有批次中检出的不良与误报分别汇总在~/ng.txt和~/false_call.txt中, 汇总信息必须包含如下字段 - 序号 - 时间 - 元器件名 - Lib库类型名 - NG或误报类型 - 需实现每隔15分钟压缩打包清空一次,然后再重新开始汇总 #### V. 其它要求: - 使用git管理代码(包括自己本机代码及与他人合作服务器代码的管理要通过这个项目数量掌握) - 使用atom编辑器 - 要划分模块、代码不能只卸载一个脚本内,并且要确保所有函数具备单一性,坚决杜绝冗余雷同代码 - SPC界面中部分统计信息的显示如果每次都是从头开始统计效率很低,要有优化方案,比如保存一个中间文件不断更新需统计数据,每完成一块PCB更新一下,这样进入SPC界面时就不会有太多运算等待时间了 - 每一个界面都尽可能多一些提示信息,实现用户友好以便用户更好地理解界面输出信息含义与应该按什么键进一步操作