关于自动化暗箱测试设备
又是近一个月没更新,工作比较忙,大多数时间在捣腾产线的自动化设备。
暗箱测试现在很多品牌笔记本电脑已经取消,但 ROG 这类高端游戏本容不得一点瑕疵。
本文只重点记录此次自动化的一些系统数据交互过程。
暗箱测试是什么
在开机状态下,调用纯黑色图片覆盖屏幕桌面,放入黑暗环境中(也就是暗箱),如果边缘或者屏幕内发光超过了标准设定值,就认为屏幕漏光,判断为不良品,需维修处理。
漏光测试的意义是什么?防止屏幕在某些情况下出现颜色失真,正常高光人的肉眼较难看出差别,但如果宿舍熄灯,笔记本调整为暖色模式且背光自动降低,这时候看电影或者玩游戏,漏光的地方就会出现色差,影响体验。
至于如何维修,需维修判断是否为原材料做工问题(极少,所以大多数品牌不测)或组装工艺造成,如是组装工艺,修正手法,重新组装即可处理。
自动化暗箱测试又是什么
原本是操作工从流水线搬运电脑到暗箱里面进行测试,考虑到人的疲劳度以及对机器离线产生的外观风险,遂有在线式自动化测试方案。
自动化就是把暗箱这个箱体做到皮带线上,一般有两个方式,在现有皮带线上做嫁接,类似字母 F,此方案不需切线,但较易漏光,且需控制主线皮带速度,影响效率。其二是切线,增加一段皮带,把箱体放在皮带上,自行用 PLC 进行控制。
部分交互代码
PLC 部分交由厂商撰写,厂内测试部分由我开发衔接,编程语言采用 C#,交互方式使用 RS232。
第一点:扫描器交互
为确保 1 对 1 关系,电脑进入暗箱前需使用扫描器确认屏幕二维码,待工控电脑接受到二维码信息后开始无线交互,UUT 随即黑屏待内部摄像头拍照测试。
二维码程序:ToQRcode.exe (参数文本)
后面跟参数文本,即可在屏幕置顶显示对应二维码,二维码生成直接调用的 NuGet 程序包中的 QRCoder 包。
部分代码分享:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 |
namespace ToQRcode { public partial class Form1 : Form { string[] args; //定义字符串数组接收参数文本 public Form1(string[] args) { this.args = args; //把对应的参数传值进去 this.WindowState = FormWindowState.Maximized; this.TopMost = true; InitializeComponent(); } private void Form1_Load(object sender, EventArgs e) { this.label1.Text = this.label1.Text + args[0]; //下面是关键方法,自定义Encoder类,用args[0]传值显示出对应二维码 Bitmap bmp = Encoder.Code(args[0], 5, 7, 0, 0, true); this.pictureBox1.Image = bmp; Program.b = 22; //回传给command返回值 } } } |
第二点:PLC 交互
扫描器得到 UUT 二维码信息后通过无线与工控机进行数据交互,然后利用 com 口监听 PLC 返回值,确定设备 ready 后开始拍照。因为监听扫描器和监听 PLC 都是 RS232 转 USB,代码类似,所以就在一段里面记录。
监听程序:ComMsg.exe (两个参数)
部分代码分享:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 |
// 接收线程 private static void Receivedata() { while (true) { char[] rec = new char[100]; port.Read(rec, 0, 100); string str = CharArrayTosting(rec, 100); Console.WriteLine("接收线程:{0}", str); Thread.Sleep(500); //开始循环监听判断 A代码设备已准备OK if (str == "A" || str == "AA") { break; } //D代表PLC错误,做文本记录 if (str == "D" || str == "DD") { StreamWriter sw = new StreamWriter("c:\\error.txt"); sw.Write("error"); sw.Close(); break; } //E代表设备报警,做文本记录 if (str == "E" || str == "EE") { StreamWriter sw = new StreamWriter("c:\\baojing.txt"); sw.Write("baojing"); sw.Close(); break; } //这一段是判断二维码的部分,如果收到的数据长度大于14,即进行以下判断 if (str.Length>14) { string b = str.Substring(str.Length - 15); string a = b.Substring(0, 1); if (b.Substring(0, 1)=="L") { StreamWriter sw = new StreamWriter("c:\\" + b + ".txt"); sw.Write("SET SNQR=" + b); sw.Close(); break; } else { StreamWriter sw = new StreamWriter("c:\\scanfail.txt"); sw.Write("FAIL"); sw.Close(); break; } } } } // 发送线程,当测试完成后发给PLC private static void Senddata() { int count = 0; while(count < 3) { string sendstr = "BB\n"; port.Write(sendstr); Console.WriteLine("发送线程:" + sendstr); Thread.Sleep(500); count++; } } |
以上都是基于 com 口的基本代码操作。
硬件上遇到的困难
从 4 月开始这个项目后,系统逻辑已非常完善,更多在于硬件上的修改和不稳定,如前期压坏屏幕,拍照不稳定,碰撞等,在设备设计时结构就出现了非常大的问题,下面记录在案,作为经验。
- 线速不匹配导致的机器拉扯易撞机(皮带分三段可解决,需使用步进电机)
- 内部气缸力量调控需适当
- 进出需增加 4 组光电感应,待进,完全进入,待出,完全出门。(防止门压机器)
- 阻挡气缸受力较大,需加强固定 (阻挡是为了校正 X,Y 轴)
总结
忙完了,上线使用情况还不错,自动化和智能化还是有点差别的,如果要做更好,PLC 再进一步,设备每天的使用情况都是可以传给服务器做大数据分析。
最近休整下,貌似也很久没拜访其他博客,休息够了再恢复阅读吧 ?
-End-
2020年07月30日 16:37 沙发
已经连了几个COM口记得有API可以调。这样如果只插了一个的话应该可以自动识别的。
还有,直接字符串搞长度遇到中英文混合文件名没问题吗?
2020年07月30日 17:30
@大致 System.IO.Ports 里面有SerialPort类,我用的这个,然后通过线程去做的控制,至于中英文嘛,哈哈哈,特殊环境下面的应用,不存在的~ 厂内的东西都比较死板。
2020年07月30日 21:24 板凳
好高端的酱紫。。。
2020年08月01日 10:05
@Lvtu 都是工作~ 厂里面的东西算不得高端,都是基础
2020年07月30日 22:15 地板
成功干掉至少三个产线工人的岗位
2020年08月01日 10:04
@执迷不悟 嗯,确实减少人力了,主要还有个联机互动,控制皮带线流动的,用这个后才能省人,我没写到正文。
2020年08月02日 00:07 4楼
难怪ROG系列大受好评,尤其是Zephyrus G14。
2020年08月03日 15:14
@皮皮 现在ROG都是我们厂在生产,品质真的不错。
2020年08月02日 20:40 5楼
我有台笔记本,在关机的情况下都有一边漏光。。。。
真是神奇了。。。
2020年08月03日 15:15
@心灵博客 这……确实有点神奇,关机下没有上电,灯管那边就是纯黑,还在漏光说不过去呀。
2020年08月03日 20:59
@Sam.Z 有点说错了,不是关机,而是睡眠的时候会漏光。
关机的时候漏不漏不知道,因为我基本一年都不会关一次机。
2020年08月03日 22:31
@心灵博客 睡眠的时候是这样,有standby电压随时准备被拉起(移动鼠标或者敲击键盘),所以你能看到漏光,不严重就行,你看华为荣耀那个X1智慧屏电视机,简直到处都在漏光
2020年08月03日 22:34
@Sam.Z 还有这样的吗?
可是以前睡眠了就像关机了一样,没任何漏光。
2020年08月03日 22:40
@心灵博客 看是S3还是S4,S3是保存在内存,这种状态并非完全关机,电源在给内存供电,S4是保存当前状态到硬盘,这时候和关机差不多,只是开机后会从硬盘读取状态。睡眠应该是S4,那就不清楚了,可能系统卡了,反正不上电的情况,绝不可能看到漏光。
2020年08月03日 22:20 6楼
知识是第一生产力,果然不骗人
2020年08月03日 22:34
@bosir 你那边留言回复通知搞定了么,需要帮忙不
2020年08月04日 08:53
@Sam.Z 我弄了一个回复插件,等我测试看看能不能用,不行的话,到时候找你帮忙啊
2020年08月04日 16:39 7楼
感觉给机器编程相当有意思呀
2020年08月04日 20:08 8楼
看不懂,哈哈哈
2020年08月04日 21:13 9楼
研究的好高深。
2020年08月04日 21:24 10楼
完全看不懂嘿,关于漏光我倒是发现自家的飞利浦显示器长时间无操作进入休眠模式,关了灯能明显看到四周边有漏光现象..
2020年08月04日 23:07
@Mr.Chou 正常,待机状态一般都有,只要不严重一般也不影响,这个测试现在很少有人在做了(主要灯管厂商自己出厂会测试,成品厂商害怕组织干涉,所以也会加测),因为漏光一般上电后看不出来,但是过于严重,会影响观感。
2020年08月05日 10:27 11楼
看到代码就感到亲切,屏幕漏光检测除了用纯黑壁纸看四周外,还有啥方法没
2020年08月05日 18:57
@zmmio 没有了,因为漏光是在这两个条件下产生的现象,笔记本处于纯黑的环境,屏幕处于纯黑的背景~
2020年08月19日 15:56 12楼
原谅我看不懂,哈哈哈哈哈,好高级的样子
2020年08月29日 00:41 13楼
学习了,长知识,说实话不是你说 还真不知道还有这么一个流程。
2021年04月21日 11:08 14楼
总算是遇到了一个搞自动化的博客!其实像这种项目后期的问题往往在机械硬件上,软件其实花不了多少功夫。
2021年04月21日 11:28
@窗外一叶 也不敢过多写一些细节, 毕竟都是公司项目, 自动化东西其实蛮多的.