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

評論