如何使用研華ADVAN USB-4718同時量測多個Channel

最近拿到了新玩具→
研華的USB-4718,很興奮的把上網找了他的驅動跟相關程式。
1.似乎是硬體驅動forwin7
Bionic 64/32-bit driver for USB-4718 (Win7/WinXP/Vista)
2.應該是他門公司的DAQ驅動,沒裝就不能用他們的軟體Wavescan 2.0
A-DAQ Pro (Advantech's OCX Control Driver)
3.WaveScan 2.0 看起來像是VB寫出來的,拿來比對自己的程式量測的數據對不對。

4.重頭戲,他們提供的Labview量測模組
http://support.advantech.com.tw/support/DownloadSRDetail.aspx?SR_ID=1-29WTFD&Doc_Source=Download
5.他們儀器的管理員

後來才發現的好工具,不知道什麼在時候安裝的,連結熊熊找不到稍後補上。
這邊出現很詭異的情況,一個使用量測類比輸入一個使用熱電偶量測
把量測到的電壓(inputeRange是0~2.5V)拿去跟K型熱電偶的電壓/溫度比,0.9xx mV換算出來竟然只有20度!!
可是明明都把四顆電偶都黏到同一塊杯子上(魔鬼氈,倒冰塊&放熱水可以觀察溫度變化),其他都是30度左右,如果用量測到的電壓去換算都只剩2X度。

labview程式↓
灌好它提供的範例程式以後可以在下面位址找到程式
LabVIEW\examples\Advantech\THERMO.llb
.

溫度量測主要是看迴圈裡面的子VI去讀資料到電腦端,點他的BD

看到都傻了~竟然是Code Interface Node,我看不懂他,他看不懂我。
OS:蝦咪~這不是Labview Code~ Labview不是應該有滿滿的義大利麵+框框嗎?

我嘗試使用這個模組去量測溫度訊號,量測出來數值真的滿準的!(誤差約1~2度C而已。


問題來了:
1.
這樣的量測,進來的數據不是連續的!
(不是連續的,間隔1秒去讀一次的資料畫成圖型還可以顫抖...
所以想把它濾波都不行。難道用移動平均?用移動平均效果也不明顯,想試試權重式的移動平均,不過那個權重的公式.....依然是看不懂,用研華的waveScan程式去觀察訊號,真的滿奇怪的,一個固定溫度卻不會顯示直線,而是往上或往下+0.05度C,這表示我的熱電偶受到外界雜訊影響了??...嗯....兩根細細的金屬線還併排...感覺是雜訊...

後來回頭去看到它使用手冊,他的取量率竟然只有10Hz~純使用這個量測模組去量測,
這表示我迴圈比須高於100 ms 才不會取到重複的值?疑惑(是殘留在FIFO的數據嗎?

2.
我嘗試想要同時量測多個Channel,也是用它給的labview模組.....
VISA...嗯....還不熟...這個儀器的韌體接受指令有哪些..封包格式....還沒查到..沒有方向...

P.S.我試過他的labview類比輸入量測範例,出來的電壓值...換算成溫度...真的異常的不准,
不知道哪個環節出了問題。我是按照K型熱電偶的datasheet去換算的。
它的類比輸入訊號量測模組可以同時讀取多個channel的資料,讀出來是各Channel個別1筆資料,
輸出堆疊成一個Arry!所以讀出來的訊號也不是連續的。
而且讀出來數字都是0.0009XX(單位是V).... 數字非常小,換算出的溫度也很奇怪
(少了8.9度。不知道是不是因為研華這塊儀器InputeRange最高只有0~2.5的關係。

回到正題,多個channel,可是都用同一個量測模組(SubVI?),
那個Labview量測模組(subvi)叫做TCMuxRead.vi,有灌它的範例程式就可以在User.Lib找到,
另外就是一定要灌研華的Driver,才能執行,不然它的模組點開都會顯示斷掉的箭頭(有Error!)

所以多Channe溫度擷取l程式初步規劃如下:

假設有三個channel→
1.三個迴圈+個delay 
(發現有兩種Delay~一種像手錶、一種像鐘擺,兩個放上去感覺效果差不多?後來發現鐘擺那個Delay可以讓迴圈延遲得很準!但最後還是改用TimeLoop了)

2.TCMuxRead.vi設定改成可以重入(Reentrant),可以同時送出讀取溫度的訊息給儀器,達到同時讀取的目的!
...不知道通訊會不會塞車?或讀到錯誤的值?
3.收集三個數據,BuildArry、位移暫存器等累積資料,看要怎麼處理那顫抖的溫度(約上/下0.05度C)

其實對於它通訊的部份實在沒有概念,如果他的範例程式是用VISA寫的還可以研究一下他送了什麼指令,
一次在BUFF存了多少資料,有沒有設定同位元等等....

程式部分不知道還有沒有更好的寫法?感覺用迴圈設個Delay當作取樣的間隔時間似乎不是好事情,而且間隔時間會隨著電腦處理速度而變化!


希望可以把這部份轉交給儀器處理,讓儀器可能先用較高的取樣率去讀資料,讀到固定筆資料就通知我去BUFF拿資料,或者是我一直去讀取BUFF,等到資料量夠了,就抓下來。


不知道這個想法能不能實踐,目前概念薄弱,不知道如何下手!
對於儀器通訊還不熟析,我該如何寫程式跟他通訊?請問有甚麼推薦的資料嗎?

想請各位大大多多提點小弟,分享一些經驗!

 

 

Labview是個很有趣的程式,我希望有一天大家都用Labview,不然一直找不到人討論。

 

平均run1次 119 ms for 3 chhannel~取了1分鐘左右,Y軸是溫度

請問這樣的曲線,是被雜訊入侵了嗎?



Lovesmartx40701.3548263889

1. 0.05°C 的peak noise已經很厲害了; thermal couple digitizer 專用24bit模組10Hz也是很快了, NI9211 還2Hz (不過這module對常見的50/60Hz電源雜訊有85dB的rejection)...

2. 反正取樣率很低, 再者溫度更新速度太快意義也不大, 讓溫控VI跑起來後, 定時往share variable丟結果就好了, 在同一個project裡的所有VI都看得到這個存放現在溫度的share variable, 要用的人去read出來就好了.

3. Shift register 左端點可以往下拉, 拉10個出來後通通送進mean.vi裡平均就是moving average了, 10Hz的話, 每次的值就都是1秒內的平均, 感覺雜訊處裡 (解析度又多一個0了) 與反應速度應該就夠平衡了. 還不高興也可以再拉更長後build 成waveform 送進filter, 想砍誰就砍誰吧 (Fs=10Hz, filter上限就是5Hz了) ...

感謝大大的回覆

1. 0.05°C 的peak noise已經很厲害了; thermal couple digitizer 專用24bit模組10Hz也是很快了, NI9211 還2Hz (不過這module對常見的50/60Hz電源雜訊有85dB的rejection)...
請問大大~85dB是Datasheet裡面寫的Analog Input CMR @ 50/60 Hz 92 dB ..衰減4萬倍?
我有點不明白他的意義,跟熱電偶的Single-End放大?我是不是看錯資料來參考了呢= =|||
恩...只知道挑放大器會去看這個項目....我的電子電路學.. 嗚嗚

2. 反正取樣率很低, 再者溫度更新速度太快意義也不大, 讓溫控VI跑起來後, 定時往share variable丟結果就好了, 在同一個project裡的所有VI都看得到這個存放現在溫度的share variable, 要用的人去read出來就好了.

是那個傳說中可以透過網路分享數據的share variable..還沒實做過..看到網路通訊就頭暈了...
我想步驟是
1.新增一個project建立共享變數
2.然後把溫控VI和計算&顯示VI放到Project..
3.最後是資料讀寫來源用share Variable。
這樣的好處是我讓溫控VI跑起來以後,不會去影響到我另一個專門在讀取&運算的VI,以達到即時看起來類似即時的效果?

3. Shift register 左端點可以往下拉, 拉10個出來後通通送進mean.vi裡平均就是moving average了, 10Hz的話, 每次的值就都是1秒內的平均, 感覺雜訊處裡 (解析度又多一個0了) 與反應速度應該就夠平衡了. 還不高興也可以再拉更長後build 成waveform 送進filter, 想砍誰就砍誰吧 (Fs=10Hz, filter上限就是5Hz了) ...

程式下午才能補上@@ ,其實我本來試寫了幾個VI測試,我是先讓那個溫控VI裡面設定幾個計時器..讀取1秒就跳出迴圈..BuildArry到位移暫存器,然後取mean值(發現還是會有上下0.05的震盪.XYGraph的Y軸精密度一調高就可以很清楚看到那個鋸齒),然後每秒就會有一筆資料,然後每筆在跟每筆比較,如果誤差小於 0.05就select前一筆的值,超過才用新的值...不過畫出來的結果...原本的三角波變成有點像方波...太詭異了...=口=..
還是溫度訊號就是這個樣子?
想要溫度顯示的平滑一點,果然還是要移動平均嗎?
我是在想,如果今天我忽然給他一個瞬間的高溫,那他後面幾筆都會受到那筆資料影響,這樣我所顯示的資料是不是沒辦法當作實際的值?
還是說所謂統計學就是這樣,單位時間內用一個值去代表一群的值?

後來把這個溫控VI當作SubVI丟到計算的VI迴圈去跑...就吐血了...異常的Delay,要等溫控VI 1秒跑完才會計算,最後是顯示,一點即時的感覺都沒有..而且我還擺了三個..抓三個channel..結果就delay3秒....|||..
計算&顯示的VI用迴圈,裡面是循序結構:量測→計算→顯示XYGraph。

X軸是取系統時間,軸是計算好的資料,有趣的來了..間隔時間不固定.....=口=

後來改成把量測放到另外一個迴圈,資料存到區域變數。
需要計算就從那個區域變數讀取,取完清空,結果..間隔時間還是不固定,不知道怎麼去改進會比較好?
似乎都卡在量測那部分,超慘!量測VI雖然有設定Delay,但CPU使用率還是隨著執行往上衝100% ,然後Delay就降回去0%。
程式邏輯還太薄弱....

量測週期就是放在最底層量測VI的延遲...以為可以控制取樣數率...但忘記考量測量這個動作也是需要時間,結果DELAY有點不準...
前面我會計算間隔時間,然後算出下次領資料的時間,迴圈會等時間到才會離開。
雖然改用重入,三個測量VI可以同時跑,但是...常常會卡住...有時候要等1.2秒才有反應,我猜是卡在通訊或儀器。

Lovesmartx40699.5976273148