請求幫忙 , 程式bug

煩請各位幫我看一下程式,我想請問幾個問題,這是我簡化後的程式,不過已經可以表達我的疑問

1.為什麼一開始Device Setup.vi的front panel會跳出,沒有按下Device Setup button前,應該不會被呼叫啊

2.如果先按test start,DAQ可以擷取訊號,但是要是先按 Device Setup,按下ok後, test start 的event就不會正常

程式下載:2004-04-13_125038_52.zip

ps.請先不要問我為什麼要用global variable,因為我的程式需要

![](upload://d5PiGkiOEqNY4yktR6DnTIRtxEp.jpeg)

![](upload://vheXFNP7pmXdVXdzpe4TRJc567M.jpeg)

Benjamin38090.5687384259

Hi, 也許是 Vi property 內的 勾了 “Run when opened”  !!

ㄛ..我不小心設定到了 , 原本的程式是沒有勾的

難怪一開始的時候沒這問題 , 謝謝你

那只剩第二個問題![](upload://bYCGLVQ2xYCkY6TSDzv2PwwNXoA.gif)

[QUOTE=Mickey]Hi, 也許是 Vi property 內的 勾了 "Run when opened"  !![/QUOTE]

別忘了,「close afterwards if originally closed」也可以勾起來喔。智少我習慣這樣子。

![](upload://n4l5izAdDjl2la6IxvpiAEtvsxo.jpeg)

![](upload://c18uB5rWU76AWYydm3wZraRQBv5.jpeg)

 

不然另外一種作法就是在「File」, 「VI property」裡面,選擇「Windows Appearence」,然後選擇「Dialog(對話框)」,可樣子也可以喔。

![](upload://1acoEpuAIvYevDYusJAXKqFSEGm.jpeg)

![](upload://yqHZqbjyjBbfuIbPxVOP30PAwYw.jpeg)

關於你的第二個問題:「如果先按test start,DAQ可以擷取訊號,但是要是先按 Device Setup,按下ok後, test start 的event就不會正常」。我認為是跟你的第一個問題相連在一起的。因為你在post這一篇文章時,沒有勾選「Run when opened」,所以其實程式是有call你的「setupdevice.vi」,只是沒有跳出視窗而已,我想你地setupd evice.vi裡面一定有那種類似按下「確定送出」的那一種機制吧,問題就出再,你的setupdevice.vi一直在等你 下達「確定送出」的命令,但是你的setupdevice.vi這一個程式的面板又沒有出現再螢幕上,所以你根本無從按起。所以 你會覺得程式有問題,程式當了。但是實際情況不是這樣,你只要將你的第一個問題解決,那麼我想你的第二個問題也會迎刃而解。

此外,我剛剛看了你的程式,發現,如果按下「Test Start」,那麼就會讀取DAQ訊號,但是我發現那一個event case裡面有一個while loop。而那個while loop停止得機制是偵測DAQ有沒有錯誤,有錯誤就停止,沒有錯誤就繼續執行。你應該新增一個可以從frint panael控制的機制。這是我的一點寫寫的建議。

謝謝Benjamin , 之前忘了封到DeviceSetup.vi檔,請重新下載此檔

2004-04-13_125038_52.zip

我的確有勾Show front panel when called那兩項,不過第一個問題我知道了

第二個問題和第一個沒什麼關係,並不是devicesetup.vi的front panel沒有出來

而且程式也沒有當掉 , 只是變的很慢 , 還是可以由上方的中斷鍵中斷 , 只是要等一下

這就是我的疑問 , 為什麼程式會變的很慢 ?

另外 , test start的case是可以由front panel停止迴圈 , 並不只是一定要DAQ出現error才會停止 , 再按一次test start後就可以跳出迴圈

![](upload://hqukHKQe0CumjBZrDWfpbDtO0Nt.jpeg)

 

[QUOTE=yao] 另外 , test start的case是可以由front panel停止迴圈 , 並不只是一定要DAQ出現error才會停止 , 再按一次test start後就可以跳出迴圈

![](upload://hqukHKQe0CumjBZrDWfpbDtO0Nt.jpeg)[/QUOTE]

抱歉,我之前看錯了...![](upload://qnzVoNgZAhoI9ENXkcZ3ALHjava.gif)

Benjamin38090.5691898148

用test start物件本身就可停止while loop,為何要使用local variable(建議少用)呢?另外,while loop內加一點點的delay time就可改善電腦鎖定在讀取的情形.

[QUOTE=chien]用test start物件本身就可停止while loop,為何要使用local variable(建議少用)呢?另外,while loop內加一點點的delay time就可改善電腦鎖定在讀取的情形.[/QUOTE]

喔..這是我修改過的程式...這一點我沒注意...謝謝提醒

不過用local variable也是無法避免的事吧,總不可能一個程式每個元件都能用在所有地方

在不必要的狀況下,變數當然越少越好,不過有影響那麼大嗎 ?![](upload://vs4zIZHdD1IeE8RLZlhtNsx8Xtj.gif)

另外while loop內加一點點的delay time就可改善電腦鎖定在讀取的情形這一句話的意思是什麼 , 在這個程式裡的while loop內加delay並不能解決現在的問題啊![](upload://qnzVoNgZAhoI9ENXkcZ3ALHjava.gif)

這就是我的疑問 , 為什麼程式會變的很慢 ?

Ans.你可點取highligth execution查看程式被鎖定在那一個方塊當中,就知道問題出在那了.

在不必要的狀況下,變數當然越少越好,不過有影響那麼大嗎 ?

Ans.隨著電腦速度的提升及記憶體的增加,多增加一些負擔當然是無所為,若對大程式發展效能與學習的觀點上,大部份人都會運用 執行的最好最快的方法來達成目地吧!

while loop內加一點點的delay time就可改善電腦鎖定在讀取的情形.

Ans.本以為你的程式讀取過快所致.

程式是停在AI Read.vi中 , 不過我不知道為什麼為停在那邊停那麼久 , 所以才來求救

沒人知道為什麼嗎 ???

AI Read.vi的timeout時間有設定嗎?

[QUOTE=小小羊兒]AI Read.vi的timeout時間有設定嗎?[/QUOTE]

timeout ? 要怎麼設定 ?

小小羊兒有下載我的 vi run過嗎 ? 你是否可以找出為什麼嗎

 

你的面板上設定的scan rate和scan to read at a time,

與globel variables設定的相反,

以你設定的default來說意思是指scan rate 10 scans/rate,

但是卻要取樣200點,

因此至少要20秒才能取樣完一次,

所以顯示的很慢....