昨天某學員聯系我,給我拍了這么一個圖,問怎么解決。
、
我一看,這不簡單嘛,就是串口緩存不夠溢出了。
解決方法就是:讀快點,緩存搞大點,把延時去掉或者改小不就OK了么?
給了答案后,過了半天回復,仍舊沒有解決,現象是程序就只執行了一次,卡住了,不執行。
晚上10點又在問我,這工作勁。我想那就遠程看程序了。
遠程一打開,頓時感覺程序是“意大利面”,看起來心煩意亂。不過為了解決BUG,我決定靜下心來分析。
學員說這個一個國外合作的很久前的LabVIEW的采集程序,硬件啥都有,只是程序在,跑程序的老電腦不在了。換了臺新電腦,驅動啥的都裝好了。就幾個串口,還有DAQ采集的。然后領導要恢復起來,能運行。
看的很頭大,程序總共就一個while里面,while里面有FOR循環,FOR循環里面還有定時循環。
這1個while循環里面,有5個儀器的讀寫程序,還有2個DAQ采集卡。都在一個while里面。感覺寫程序的,哪里有空位,就寫到哪里。反正已給字:亂。
我心里第一想的,這么亂的程序,不如自己重寫。
但是,重寫工作量大,先解決問題為主吧。人家只要能用就行。
嘗試運行一次,果然卡住,由于程序就一個while,高亮執行很久,單步也一樣。只能導出打探針看看執行情況。
最后,終于發現了原因,有個儀器有個設置程序,設置之后,會讀取儀器是否有設置成功的指令返回。結果這個程序,用了一個while循環,不停的讀取串口緩沖,判斷是否有某個字符串,收到這個字符串,才退出while。
而實際這個儀器設置有問題,沒有回復正確字符串,while循環退不出,把這個程序卡住了。而且這個while,作為子vi的子vi的子vi的程序,嵌套很深。后來把儀器設置對了,問題解決。
原版程序不方便截圖,大概如下圖所示,大家自己內心體會一下。
全程遠程1小時5分鐘。
所以這里不得不說,有些人寫代碼確實能跑,但是稍微不注意,就跑不起來。包括這個等待儀器回復的這個while,按常理,不應該用一個while判斷,即使判斷,也要設置一個超時,等待一定時間后后,自動退出while,彈出錯誤提示。
所以,很多人問的一個簡單問題,背后可能是其他更大的問題。
希望我們都不要遇到和接手“祖傳”代碼。
審核編輯:劉清
-
LabVIEW
+關注
關注
1981文章
3664瀏覽量
328007 -
DAQ
+關注
關注
6文章
93瀏覽量
32425 -
緩存器
+關注
關注
0文章
63瀏覽量
11726 -
延時器
+關注
關注
1文章
36瀏覽量
15283 -
for循環
+關注
關注
0文章
61瀏覽量
2579
原文標題:【粉絲排BUG記錄】老程序卡住了怎么辦?
文章出處:【微信號:小草手把手LabVIEW,微信公眾號:小草手把手LabVIEW】歡迎添加關注!文章轉載請注明出處。
發布評論請先 登錄
相關推薦
程序運行過程中,有些數據被莫名修改了怎么辦?

評論