客户打电话给我,上来就说:“你们写的软件真垃圾,运行一会儿就不工作了!”,我劝客户消消气,让他说明事情原委。原来,我们公司的一个上位机软件在客户那只要运行时间超过5分钟就会停止工作,那么这个事情到底是咋回事呢? 还好客户正在使用的上位机软件在公司有环境可以运行,于是,我就在公司试运行了下,发现并没有出现客户所说的运行超过5分钟就会停止工作的这个事情,所以,想要搞清楚事情的原委,只能去客户现场了解情况了。 到了客户现场,客户一脸埋怨得跟我说,这个软件前段时间还运行得好好的,这几天突然就不行了,只要人不在机器旁边,不一会儿设备准报警。 客户着重说了下“人必须在机器旁边”这个重要线索。让我觉得,这个事情可能不太好搞,因为越是这样,原因越不好找。 我开始以为是客户上位机的磁盘、CPU或者内存满载了导致的软件崩溃,之所以软件没有直接闪退,可能是软件的异常捕捉做得到位导致的。 但是,这些原因很快就被我排除了,因为我查看了下上位机的硬盘,发现硬盘连10%都没有用到,而CPU和内存在软件运行时,也不会超过50%。 我还特意盯着任务管理器,发现软件运行期间CPU和内存的使用率都没有明显上升的迹象。 排查了一圈原因,最后还是没找到问题所在,但是,就在我跟客户沟通的时候,设备又报警了,问题当着我的面就出现了,搞得我非常尴尬。 但是,找了一圈问题没找到原因,也不能干耗着,我只能跟客户说我回去看看代码,眼看没有头绪,客户也不想看着我碍眼,只能放我走。 回到公司以后,我翻开这个上位机的代码,发现上位机某个关键部分的逻辑是由一个定时器定时执行的,定时器会定时去监听某个PLC地址的信号,然后再去执行关键代码。 但是,看了一圈,我也没看到这段代码有什么不妥之处,代码写得还是挺严谨的。 就在我在自己工作的电脑上查问题的时候,老板找我开会,于是我就把代码放在那,开会去了。 大约一个小时后我回来,惊讶地发现,我电脑上的软件也停止运行了,跟现场的一模一样,果然如客户所说,只要人不在,问题立马出现! 这时候,我隐隐约约才想起来,这个问题似曾相识。 我在上上家公司写的某个软件也出现过类似的情况,当时我们负责在客户现场值守的同事跟我反映说,上位机只要黑屏一段时间,再激活上位机电脑,就会发现软件“假死”了。 我一想到这件事情,发现两个事情有一个共同点,那就是电脑黑屏。 我恍然大悟,立马就想到了问题所在。 我之所以在自己的电脑上能复现问题,而最开始没有复现成功,最主要的原因就在我最开始使用的那个电脑是我们公司的试验机,那台电脑电源选项是常亮的,而我自己的电脑的电源选项则是5分钟内息屏。 5分钟!对,就是这个关键的时间! 但是,我一想不对,因为我们给客户配上位机电脑的时候都会刻意在电脑的电源选项里将电脑设置为最佳性能模式,即使会息屏,软件也仍然会运行,难道有人改了客户上位机电脑的电源选项? 想到这里,我打电话给客户,让他帮我确认下,果然,客户那边的上位机选项被人给改成5分钟挂起了!而原因就出在这! 当上位机息屏以后,软件被挂起,这时候软件内部的定时器就会停止循环,因此就不执行监听任务了(比如下图代码里的定时器在软件息屏挂起后,中间有很明显的一段停顿)。 结语 最后,我让客户把上位机电脑的电源选项给改成了从不挂起,足够问题再也没有出现了! 至于到底是谁改了客户上位机的电源选项,我们公司和客户那边的操作人员都没有人承认。但是,做上位机开发就是这样,有时候其实挺简单的问题,如果脑子不够灵活,找问题的过程就会很让人头疼! 声明:个人原创,仅供参考 |