包括DAQ之三點疑問

1.為什麼繪出DAQ擷取進來的訊號,會有一小段空白,要如何修正 ? 不管的我buffer或scan rate設多大都沒有用.但是如果兩者都設成10時,就不會有空白,但是都設成10實在是太小了. 我有看過已經製成EXE檔之程式不會有這種情形.

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

2.Waveform chart 的 X 軸要如何從0或者一個預設值開始,因為不管設成多少,一執行後,X軸又會自動變成系統的數字(順便請問這個數字是用時間去換算出 來的嗎)

3.已經compiler成EXE檔的LabVIEW程式有沒有辦法像一般的VB或者C寫的程式一樣decomplier回來

我使用之LabVIEW版本 : 7.0 DAQ pad : 6020E

附檔為一最簡單之AI程式2004-03-08_193212_AI040308.vi

 

 

You can use Help >> Find Examples... to find a VI called Cont Acq&Chart (buffered).vi in Hardware Input and Output -> Traditional DAQ, and then imitate the example to correct the error in your code.

Sincerely suggest you to use NI-DAQmx, the newest driver architecture, for easier and more consistent programming model.

CHANGE LINE STYLE

Examples裡的範例我看過了,當然照著作結果會一樣

不過我比較想要知道的是,為什麼我那樣寫不行

很多時候知道哪裡錯比一直照著正確的路走

得到的經驗會多的多

而且Examples裡的chart可以勾選Transpose array這個選項

而我寫的就不行,不知到這個功能有什麼意義

yao38055.6287847222

[QUOTE=yao]

1.為什麼繪出DAQ擷取進來的訊號,會有一小段空白,要如何修正 ? 不管的我buffer或scan rate設多大都沒有用.但是如果兩者都設成10時,就不會有空白,但是都設成10實在是太小了. 我有看過已經製成EXE檔之程式不會有這種情形.

你應該要先去買本DAQ的書,瞭解這些參數的意義,至於Line style不對我倒是沒碰過

2.Waveform chart 的 X 軸要如何從0或者一個預設值開始,因為不管設成多少,一執行後,X軸又會自動變成系統的數字(順便請問這個數字是用時間去換算出 來的嗎)

請參考LabVIEW入門書籍,瞭解Chart設定,必要時配合property node

3.已經compiler成EXE檔的LabVIEW程式有沒有辦法像一般的VB或者C寫的程式一樣decomplier回來

不太可能.

我使用之LabVIEW版本 : 7.0 DAQ pad : 6020E

附檔為一最簡單之AI程式2004-03-08_193212_AI040308.vi

你的VI只有AI read.vi需要放在loop內

[/QUOTE]

結論:我覺得你應該才開始接觸LAbVIEW,建議你先對LabVIEW及DAQ有基本認識再開始寫程式,如果程式寫大了才發現 根本性錯誤才要重寫就累了

我照你的程式來改, 附在後面, 其中有幾點要注意:

1. AI Start 的 number of scans to acquire 要設成 0, 這樣才會一直擷取資料.

2. 既是多點擷取就要用 graph, 一次把整批 show 出, 而非用 chart.

3. 用 AI Read 的 number of scans to read 來控制一次讀出顯示的量.

4. 只有 AI Read 放在 while loop 內即可.

你每樣都 try 看看就會知道我在說什麼了.

2004-03-10_175955_AI040308changed.vi

Good Luck.

 

謝謝sean及小小羊兒的回覆

1.書我是看了不少,雖然說可能不是太深入,不過我不是完全不會的隨便發問

2.如果不把其他control跟vi放在while loop內,那就無法在中途增加 channel及設定其他參數了啊,是吧![](upload://qPCmzfq2KigUaPncn6Um67RUCob.gif)

3.我使用chart是因為我需要即時的顯示

其實我附的檔案只有一個地方設錯,其實也不能說錯,因為我把AI read 的 waveform data設成waveform而非scale array,所以會造成我提的那些原因,不過我想知道的是為什麼設成waveform不行.我不是要大家一步一步教我如何抓訊號 .

如果看書學習,學到的是正確的方向,當出現錯誤或例外時,往往書上是找不到解決方法的,所以才需要與人討教,所以對這個問題,我 比較care的是為什麼錯,又為什麼不行,或許要解釋清楚可能要打很多字,不過我還是希望大家多多發言,謝謝

如果你要用chart,可能要把AI Read 的 number of scans to read 設為1,再利用index array連結到chart。

劍少38057.002037037

[QUOTE=yao]

2.如果不把其他control跟vi放在while loop內,那就無法在中途增加 channel及設定其他參數了啊,是吧![](upload://qPCmzfq2KigUaPncn6Um67RUCob.gif)

[/QUOTE]

在「Analog Input」裡面有很多icon。

第一排:![](upload://2FTMBkX5H5qEwjivnZV3PrsSgTf.jpeg)

第二排:![](upload://bDzlQNdLnGDU7hDfKB4qpKX2Z4C.jpeg)

基本上,在你的檔案中,您所使用的是第二排的icon。擷取訊號的時候,通過:「config」、「star」、「read」、 「close」。第二排的這一些icon主要是提供使用者「快速read資料」所用,所以,把「read的icon」分離出來, 目的就是要快速讀取,而非讓使用者可以及時修改config參數。如果你需要能夠快速修改參數,不妨使用第一排icon的「AI Acquire Wavefoem」。但是這樣做的話,每作一個「AI Acquire Wavefoem」,就相當於第二排的icon中的「config」、「star」、「read」、「close」全部都跑一次 ,所以根本快不起來。我以前想要快速地測量電壓訊號,並且及時顯示在螢幕上,但是我由於我使用的是「AI Acquire Wavefoem」,所以每一次讀取的間隔最低大約是170ms(詳細的數字我已經忘記了,總之不能低於150ms就是了)。

如果你要快速顯示,右要能修改參數的話,建議您把「read」的部份放在loop裡面,燃後再作一個按鈕,榜你想要更改conf ig時,再跑「config」、「star」、「read」...的程序。這樣既可以快速讀取資料,又可以修改config資料 。

[QUOTE=sean]AI Start 的 number of scans to acquire 要設成 0, 這樣才會一直擷取資料.[/QUOTE]

這一點蠻重要的,我第一次使用時,也不知道要做這一點,所以當時多次嘗試都try不出來。

Benjamin38060.9884027778

[QUOTE=Benjamin]

[QUOTE=sean]AI Start 的 number of scans to acquire 要設成 0, 這樣才會一直擷取資料.[/QUOTE]

這一點蠻重要的,我第一次使用時,也不知道要做這一點,所以當時多次嘗試都try不出來。

[/QUOTE]

請問一下這個道理為何, 我現在是用chart取兩通道的訊號, 目前看起來是沒什麼問題, 對於兩位的經驗我還沒有體會, 可以解釋一下嗎

Benjamin38060.9904398148

這裡有一份NI公司出的manual,內容是講述如何使用DAQ卡來作資料擷取。
這是免費下載的版本,內容相當豐富。

LabVIEW-Measurements.pdf

Benjamin38060.9844791667

謝謝,有資料就好辦了,要找到正確且好的資料不是那麼容易的

[QUOTE=Benjamin][QUOTE=yao]

2.如果不把其他control跟vi放在while loop內,那就無法在中途增加 channel及設定其他參數了啊,是吧![](upload://qPCmzfq2KigUaPncn6Um67RUCob.gif)

[/QUOTE]

在「Analog Input」裡面有很多icon。

第一排:![](upload://2FTMBkX5H5qEwjivnZV3PrsSgTf.jpeg)

第二排:![](upload://bDzlQNdLnGDU7hDfKB4qpKX2Z4C.jpeg)

基本上,在你的檔案中,您所使用的是第二排的icon。擷取訊號的時候,通過:「config」、「star」、「read」、 「close」。第二排的這一些icon主要是提供使用者「快速read資料」所用,所以,把「read的icon」分離出來, 目的就是要快速讀取,而非讓使用者可以及時修改config參數。如果你需要能夠快速修改參數,不妨使用第一排icon的「AI Acquire Wavefoem」。但是這樣做的話,每作一個「AI Acquire Wavefoem」,就相當於第二排的icon中的「config」、「star」、「read」、「close」全部都跑一次 ,所以根本快不起來。我以前想要快速地測量電壓訊號,並且及時顯示在螢幕上,但是我由於我使用的是「AI Acquire Wavefoem」,所以每一次讀取的間隔最低大約是170ms(詳細的數字我已經忘記了,總之不能低於150ms就是了)。

如果你要快速顯示,右要能修改參數的話,建議您把「read」的部份放在loop裡面,燃後再作一個按鈕,榜你想要更改conf ig時,再跑「config」、「star」、「read」...的程序。這樣既可以快速讀取資料,又可以修改config資料 。

![](upload://j03HfI2TMqenOSl5lfi4w7XHM9g.gif)好聰明的方法。

[/QUOTE]

[QUOTE=yao][QUOTE=Benjamin]

[QUOTE=sean]AI Start 的 number of scans to acquire 要設成 0, 這樣才會一直擷取資料.[/QUOTE]

這一點蠻重要的,我第一次使用時,也不知道要做這一點,所以當時多次嘗試都try不出來。

[/QUOTE]

請問一下這個道理為何, 我現在是用chart取兩通道的訊號, 目前看起來是沒什麼問題, 對於兩位的經驗我還沒有體會, 可以解釋一下嗎

[/QUOTE]

我想應該是為了方便使用者記住所指定的參數,連續擷取的話你指定number of scans to acquire 為1,2,3...都不對,乾脆定義為0最好記,總沒有人要擷取0的點數吧!

[QUOTE=yao][QUOTE=Benjamin]

[QUOTE=sean]AI Start 的 number of scans to acquire 要設成 0, 這樣才會一直擷取資料.[/QUOTE]

這一點蠻重要的,我第一次使用時,也不知道要做這一點,所以當時多次嘗試都try不出來。

[/QUOTE]

請問一下這個道理為何, 我現在是用chart取兩通道的訊號, 目前看起來是沒什麼問題, 對於兩位的經驗我還沒有體會, 可以解釋一下嗎

[/QUOTE]

這個問題就是所謂的「連續資料擷取」,也就是說,電腦不斷從記憶體的緩衝區內,讀出資料。請參考下圖,下圖就是一個「循環緩衝區示意圖」。循環的步驟如下:

  1. 先定義緩衝區的大小,以及取樣速率(samoling rate),然後電腦開始以我們事先定義好的取樣速率,將資料擷取到記憶體的緩衝區中。
  2. 電腦將緩衝區的資料擷取出來,並且顯示在螢幕上,此時電腦會繼續以先前定義好的sampling rate錸將資料存入緩衝區中
  3. 持續進行
  4. 當緩衝區的資料寫滿時,會從頭開始覆寫(overwride)。

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

 

以下是「連續擷取資料」的一個範例:

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

number of scans to acquire設定為零的部份,蕭子健先生的書中並沒有詳細說明,只說到,如果要做連續讀取,就要將number of scans to acquire設定為零。

為什麼AI Read要接出「Scan Backlog 」,因為知道labVIEW是否來得及讀取資料相當重要,如果緩衝區資料覆寫的速度高於從緩衝區取出資料的速度,那我們的資料可 能會被覆寫,造成有部分資料無法顯示在螢幕上,造成盲點。而「Scan Backlog」可以反映這件事。

Benjamin38062.5943865741

不好意思,把這麼舊的文章搬出來了.我想請問一下如果改成用labview7.1配上DAQmx要怎麼做呢?我碰到的問題是DAQ測量DC訊號都ok,幾Hz還勉強可以,可是當頻率越來越高時,振幅就會開始減小,直到接近振幅零,看起來就像雜訊![](upload://rQ25pKKFhgVCxeNHT7gS2eqhtGp.gif).我的問題是不是跟上面說的雷同?那用DAQmx如何解決呢?

^^我的問題可能解決了.因為我的硬體有lowpass filter,要用property node disable.不過要怎麼用阿??我再去查查.