客戶打電話給我,上來就說:“你們寫的軟件真垃圾,運行一會兒就不工作了!”,我勸客戶消消氣,讓他說明事情原委。原來,我們公司的一個上位機軟件在客戶那只要運行時間超過5分鐘就會停止工作,那么這個事情到底是咋回事呢?

打開網(wǎng)易新聞 查看精彩圖片

還好客戶正在使用的上位機軟件在公司有環(huán)境可以運行,于是,我就在公司試運行了下,發(fā)現(xiàn)并沒有出現(xiàn)客戶所說的運行超過5分鐘就會停止工作的這個事情,所以,想要搞清楚事情的原委,只能去客戶現(xiàn)場了解情況了。

到了客戶現(xiàn)場,客戶一臉埋怨得跟我說,這個軟件前段時間還運行得好好的,這幾天突然就不行了,只要人不在機器旁邊,不一會兒設(shè)備準報警。

客戶著重說了下“人必須在機器旁邊”這個重要線索。讓我覺得,這個事情可能不太好搞,因為越是這樣,原因越不好找。

我開始以為是客戶上位機的磁盤、CPU或者內(nèi)存滿載了導(dǎo)致的軟件崩潰,之所以軟件沒有直接閃退,可能是軟件的異常捕捉做得到位導(dǎo)致的。

但是,這些原因很快就被我排除了,因為我查看了下上位機的硬盤,發(fā)現(xiàn)硬盤連10%都沒有用到,而CPU和內(nèi)存在軟件運行時,也不會超過50%。

我還特意盯著任務(wù)管理器,發(fā)現(xiàn)軟件運行期間CPU和內(nèi)存的使用率都沒有明顯上升的跡象。

排查了一圈原因,最后還是沒找到問題所在,但是,就在我跟客戶溝通的時候,設(shè)備又報警了,問題當著我的面就出現(xiàn)了,搞得我非常尷尬。

但是,找了一圈問題沒找到原因,也不能干耗著,我只能跟客戶說我回去看看代碼,眼看沒有頭緒,客戶也不想看著我礙眼,只能放我走。

回到公司以后,我翻開這個上位機的代碼,發(fā)現(xiàn)上位機某個關(guān)鍵部分的邏輯是由一個定時器定時執(zhí)行的,定時器會定時去監(jiān)聽某個PLC地址的信號,然后再去執(zhí)行關(guān)鍵代碼。

但是,看了一圈,我也沒看到這段代碼有什么不妥之處,代碼寫得還是挺嚴謹?shù)摹?/p>

就在我在自己工作的電腦上查問題的時候,老板找我開會,于是我就把代碼放在那,開會去了。

大約一個小時后我回來,驚訝地發(fā)現(xiàn),我電腦上的軟件也停止運行了,跟現(xiàn)場的一模一樣,果然如客戶所說,只要人不在,問題立馬出現(xiàn)!

這時候,我隱隱約約才想起來,這個問題似曾相識。

我在上上家公司寫的某個軟件也出現(xiàn)過類似的情況,當時我們負責在客戶現(xiàn)場值守的同事跟我反映說,上位機只要黑屏一段時間,再激活上位機電腦,就會發(fā)現(xiàn)軟件“假死”了。

我一想到這件事情,發(fā)現(xiàn)兩個事情有一個共同點,那就是電腦黑屏。

我恍然大悟,立馬就想到了問題所在。

我之所以在自己的電腦上能復(fù)現(xiàn)問題,而最開始沒有復(fù)現(xiàn)成功,最主要的原因就在我最開始使用的那個電腦是我們公司的試驗機,那臺電腦電源選項是常亮的,而我自己的電腦的電源選項則是5分鐘內(nèi)息屏。

5分鐘!對,就是這個關(guān)鍵的時間!

但是,我一想不對,因為我們給客戶配上位機電腦的時候都會刻意在電腦的電源選項里將電腦設(shè)置為最佳性能模式,即使會息屏,軟件也仍然會運行,難道有人改了客戶上位機電腦的電源選項?

打開網(wǎng)易新聞 查看精彩圖片

想到這里,我打電話給客戶,讓他幫我確認下,果然,客戶那邊的上位機選項被人給改成5分鐘掛起了!而原因就出在這!

當上位機息屏以后,軟件被掛起,這時候軟件內(nèi)部的定時器就會停止循環(huán),因此就不執(zhí)行監(jiān)聽任務(wù)了(比如下圖代碼里的定時器在軟件息屏掛起后,中間有很明顯的一段停頓)。

打開網(wǎng)易新聞 查看精彩圖片
打開網(wǎng)易新聞 查看精彩圖片

結(jié)語

最后,我讓客戶把上位機電腦的電源選項給改成了從不掛起,足夠問題再也沒有出現(xiàn)了!

至于到底是誰改了客戶上位機的電源選項,我們公司和客戶那邊的操作人員都沒有人承認。但是,做上位機開發(fā)就是這樣,有時候其實挺簡單的問題,如果腦子不夠靈活,找問題的過程就會很讓人頭疼!