yao
(yao)
#1
煩請各位幫我看一下程式,我想請問幾個問題,這是我簡化後的程式,不過已經可以表達我的疑問
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,因為我的程式需要


Benjamin38090.5687384259
Mickey
(Mickey)
#2
Hi, 也許是 Vi property 內的 勾了 “Run when opened” !!
yao
(yao)
#3
ㄛ..我不小心設定到了 , 原本的程式是沒有勾的
難怪一開始的時候沒這問題 , 謝謝你
那只剩第二個問題
[QUOTE=Mickey]Hi, 也許是 Vi property 內的 勾了 "Run when opened" !![/QUOTE]
別忘了,「close afterwards if originally closed」也可以勾起來喔。智少我習慣這樣子。


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


關於你的第二個問題:「如果先按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控制的機制。這是我的一點寫寫的建議。
yao
(yao)
#6
謝謝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後就可以跳出迴圈

[QUOTE=yao] 另外 , test start的case是可以由front panel停止迴圈 , 並不只是一定要DAQ出現error才會停止 , 再按一次test start後就可以跳出迴圈
[/QUOTE]
抱歉,我之前看錯了...
Benjamin38090.5691898148
chien
(chien)
#8
用test start物件本身就可停止while loop,為何要使用local variable(建議少用)呢?另外,while loop內加一點點的delay time就可改善電腦鎖定在讀取的情形.
yao
(yao)
#9
[QUOTE=chien]用test start物件本身就可停止while loop,為何要使用local variable(建議少用)呢?另外,while loop內加一點點的delay time就可改善電腦鎖定在讀取的情形.[/QUOTE]
喔..這是我修改過的程式...這一點我沒注意...謝謝提醒
不過用local variable也是無法避免的事吧,總不可能一個程式每個元件都能用在所有地方
在不必要的狀況下,變數當然越少越好,不過有影響那麼大嗎 ?
另外while loop內加一點點的delay time就可改善電腦鎖定在讀取的情形這一句話的意思是什麼 , 在這個程式裡的while loop內加delay並不能解決現在的問題啊
chien
(chien)
#10
這就是我的疑問 , 為什麼程式會變的很慢 ?
Ans.你可點取highligth execution查看程式被鎖定在那一個方塊當中,就知道問題出在那了.
在不必要的狀況下,變數當然越少越好,不過有影響那麼大嗎 ?
Ans.隨著電腦速度的提升及記憶體的增加,多增加一些負擔當然是無所為,若對大程式發展效能與學習的觀點上,大部份人都會運用 執行的最好最快的方法來達成目地吧!
while loop內加一點點的delay time就可改善電腦鎖定在讀取的情形.
Ans.本以為你的程式讀取過快所致.
yao
(yao)
#11
程式是停在AI Read.vi中 , 不過我不知道為什麼為停在那邊停那麼久 , 所以才來求救
AI Read.vi的timeout時間有設定嗎?
yao
(yao)
#14
[QUOTE=小小羊兒]AI Read.vi的timeout時間有設定嗎?[/QUOTE]
timeout ? 要怎麼設定 ?
小小羊兒有下載我的 vi run過嗎 ? 你是否可以找出為什麼嗎
sonic
(sonic)
#15
你的面板上設定的scan rate和scan to read at a time,
與globel variables設定的相反,
以你設定的default來說意思是指scan rate 10 scans/rate,
但是卻要取樣200點,
因此至少要20秒才能取樣完一次,
所以顯示的很慢....