客戶打電話給我,上來就說:“你們寫的軟件真垃圾,運行一會兒就不工作了!”,我勸客戶消消氣,讓他說明事情原委。原來,我們公司的一個上位機軟件在客戶那只要運行時間超過5分鐘就會停止工作,那么這個事情到底是咋回事呢?
還好客戶正在使用的上位機軟件在公司有環境可以運行,于是,我就在公司試運行了下,發現并沒有出現客戶所說的運行超過5分鐘就會停止工作的這個事情,所以,想要搞清楚事情的原委,只能去客戶現場了解情況了。
到了客戶現場,客戶一臉埋怨得跟我說,這個軟件前段時間還運行得好好的,這幾天突然就不行了,只要人不在機器旁邊,不一會兒設備準報警。
客戶著重說了下“人必須在機器旁邊”這個重要線索。讓我覺得,這個事情可能不太好搞,因為越是這樣,原因越不好找。
我開始以為是客戶上位機的磁盤、CPU或者內存滿載了導致的軟件崩潰,之所以軟件沒有直接閃退,可能是軟件的異常捕捉做得到位導致的。
但是,這些原因很快就被我排除了,因為我查看了下上位機的硬盤,發現硬盤連10%都沒有用到,而CPU和內存在軟件運行時,也不會超過50%。
我還特意盯著任務管理器,發現軟件運行期間CPU和內存的使用率都沒有明顯上升的跡象。
排查了一圈原因,最后還是沒找到問題所在,但是,就在我跟客戶溝通的時候,設備又報警了,問題當著我的面就出現了,搞得我非常尷尬。
但是,找了一圈問題沒找到原因,也不能干耗著,我只能跟客戶說我回去看看代碼,眼看沒有頭緒,客戶也不想看著我礙眼,只能放我走。
回到公司以后,我翻開這個上位機的代碼,發現上位機某個關鍵部分的邏輯是由一個定時器定時執行的,定時器會定時去監聽某個PLC地址的信號,然后再去執行關鍵代碼。
但是,看了一圈,我也沒看到這段代碼有什么不妥之處,代碼寫得還是挺嚴謹的。
就在我在自己工作的電腦上查問題的時候,老板找我開會,于是我就把代碼放在那,開會去了。
大約一個小時后我回來,驚訝地發現,我電腦上的軟件也停止運行了,跟現場的一模一樣,果然如客戶所說,只要人不在,問題立馬出現!
這時候,我隱隱約約才想起來,這個問題似曾相識。
我在上上家公司寫的某個軟件也出現過類似的情況,當時我們負責在客戶現場值守的同事跟我反映說,上位機只要黑屏一段時間,再激活上位機電腦,就會發現軟件“假死”了。
我一想到這件事情,發現兩個事情有一個共同點,那就是電腦黑屏。
我恍然大悟,立馬就想到了問題所在。
我之所以在自己的電腦上能復現問題,而最開始沒有復現成功,最主要的原因就在我最開始使用的那個電腦是我們公司的試驗機,那臺電腦電源選項是常亮的,而我自己的電腦的電源選項則是5分鐘內息屏。
5分鐘!對,就是這個關鍵的時間!
但是,我一想不對,因為我們給客戶配上位機電腦的時候都會刻意在電腦的電源選項里將電腦設置為最佳性能模式,即使會息屏,軟件也仍然會運行,難道有人改了客戶上位機電腦的電源選項?
想到這里,我打電話給客戶,讓他幫我確認下,果然,客戶那邊的上位機選項被人給改成5分鐘掛起了!而原因就出在這!
當上位機息屏以后,軟件被掛起,這時候軟件內部的定時器就會停止循環,因此就不執行監聽任務了(比如下圖代碼里的定時器在軟件息屏掛起后,中間有很明顯的一段停頓)。
結語
最后,我讓客戶把上位機電腦的電源選項給改成了從不掛起,足夠問題再也沒有出現了!
至于到底是誰改了客戶上位機的電源選項,我們公司和客戶那邊的操作人員都沒有人承認。但是,做上位機開發就是這樣,有時候其實挺簡單的問題,如果腦子不夠靈活,找問題的過程就會很讓人頭疼!
特別聲明:以上內容(如有圖片或視頻亦包括在內)為自媒體平臺“網易號”用戶上傳并發布,本平臺僅提供信息存儲服務。
Notice: The content above (including the pictures and videos if any) is uploaded and posted by a user of NetEase Hao, which is a social media platform and only provides information storage services.