《電子技術應用》
您所在的位置:首頁 > 測試測量 > 設計應用 > 基于LABVIEW平臺的數據采集卡軟件設計
基于LABVIEW平臺的數據采集卡軟件設計
摘要: 由于采用數據流模型,LABVIEW可以自動規劃多線程任務,可充分利用PC系統處理器的處理能力,從而提高模塊的采集效率。本文基于LABVIEW開發環境,以庫函數節點的調用方式及結構,實現了一種中頻數據采集與處理卡軟件的設計。
Abstract:
Key words :

  引言

  作為專業測控領域的軟件開發平臺,LABVIEW內含豐富的數據采集、數據信號分析以及功能強大的DAQ助手,搭建數據采集系統更為輕松,便于硬件設計人員直接對硬件的操控展開設計。此外,它可通過DLL、CIN節點、ActiveX、.NET或MATLAB腳本節點等技術,實現與其它編程語言混合編程,通過調用外部驅動代碼使它與設備的連接變得非常容易。由于采用數據流模型,LABVIEW可以自動規劃多線程任務,可充分利用PC系統處理器的處理能力,從而提高模塊的采集效率。本文基于LABVIEW開發環境,以庫函數節點的調用方式及結構,實現了一種中頻數據采集與處理卡軟件的設計。

  數據采集卡軟件結構

  采集卡軟件是基于PC的數據采集系統重要組成部分,它與硬件形成一個完整的數據采集、分析和顯示系統,軟件分為上層應用程序和驅動程序。上層應用程序用以完成數據的分析、存儲和顯示等。驅動程序則可直接對數據采集硬件的寄存器編程,管理數據采集硬件的操作并把它和處理器中斷、DMA和內存這些計算機資源結合在一起。

  驅動程序隱藏了復雜的硬件底層編程細節,為用戶提供容易理解的接口。NI公司為基于NI數據采集設備的數據采集系統提供了相應的接口驅動及VI函數 (VI,Virtual Instrument)。對于一些不常見的硬件設備或用戶研發的硬件設備,NI沒有提供合適的驅動。但是,如前所述,LABVIEW還提供了很多其它的通信接口,包括調用庫函數節點(Call Library Function Node, CLF)、代碼接口節點(Code Interface Node, CIN)、TCP/IP、Data Socket、OPC、共享變量、DDE和.NET等。通過這些通信接口,LABVIEW能夠實現與任何設備的通信。值得留意的是LABVIEW具有調用庫函數節點和代碼接口節點兩種方法,可以結合C語言的編程靈活性和LABVIEW G語言的直觀便捷特點,大幅提高LABVIEW對用戶數據采集卡的軟件設計支持??蛇M一步利用LABVIEW豐富的數據分析資源,節約系統開發成本。

  LABVIEW提供的數據采集卡的常用驅動方式有兩種,調用C語言源代碼方式(CIN方式),以及調用動態鏈接庫方式(CLF方式)。

  CIN方式是實現LABVIEW與C語言混合編程的一種媒介,CIN通過輸入、輸出端口實現兩種語言之間的數據傳遞。輸入、輸出端口的個數可由設計者根據實際需要確定,當LABVIEW的程序運行到CIN節點時,數據由CIN的輸入端口傳遞給C源代碼圖標,程序轉去執行C源代碼,代碼執行完后,執行的數據結果由CIN輸出端口返回至LABVIEW。

  CLF是一種動態鏈接庫(DLL)的調用方式。DLL是一種應用程序在運行時與庫文件連接起來的技術,在WINDOWS的管理下,應用程序與對應DLL之間建立鏈接關系,根據鏈接產生的重定位信息,轉去執行DLL中相應的代碼。LABVIEW中,可通過CLF(調用路徑為Function>>Advanced>>Call Library Function)功能模塊實現調用。

  調用CIN節點需要有C語言編程的支持,它能夠將代碼集成在VI中作為單獨的一個VI發布,CIN 支持的參數類型比DLL 函數多,可使用LABVIEW 定義的任何參數類型,但制作CIN的過程復雜得多。使用這種方法的缺點是在數據采集過程中不能實時地進行數據的顯示,只能在數據全部采集結束后再一起顯示所采集的全部數據,這樣在需要較高執行效率的場合就不適用。其次由于CIN節點在制作數據采集卡的驅動時,需要提供采集卡的硬件參數,需編制對硬件設備進行底層操作的庫函數,對于不清楚函數內核的程序員不適用。相比CIN方式,CLF方式更加簡單易學,開發者只需要熟悉DLL中的各個函數功能以及函數的參數及類型,在本文設計中,擬采用CLF方式實現驅動程序的調用。

  基于CLF方式的采集卡軟件設計

  本文所涉及的軟件控制對象是一款中頻數據采集與處理卡,具有14位A/D精度,最高采樣頻率為105MHz,4路模擬量輸入,提供高精度中頻信號數字化、多通道、多模式數字下變頻(DDC)等數字處理,軟件結構詳見圖1。

采集卡的軟件結構

圖1 采集卡的軟件結構

  LABVIEW應用程序分為用戶界面和圖標代碼,通過搭建和調用子VI編寫主體程序,各VI利用LABVIEW的CLF技術調用動態鏈接庫中的驅動函數,實現與硬件設備的數據交換。子VI將基本的驅動函數進行功能封裝。一個完整的LABVIEW應用程序通常由若干個子VI及其外部編程連線構成,VI的層級結構設計是設計虛擬儀器驅動程序的核心,各VI分別為組成驅動程序的模塊化子程序。設計中,動態鏈接庫由VC編寫,調用底層的驅動函數與設備通信。軟件包括兩類子VI函數集合,一類是低層組件VI集合,分為若干個獨立的軟件功能模塊,每個模塊負責控制儀器的某項特殊功能,這類VI是儀器驅動程序的基礎;另一類為高層應用VI集合,應用VI通過調用合適的組件VI以實現最通常的儀器設置和測量任務。顯然,就驅動程序開發而言,能否根據硬件特性成功構建組件VI集合是關鍵所在。VI層次結構如圖2所示。

 

VI的層級結構

圖2 VI的層級結構

  如圖所示,按功能有兩個高層應用子VI集合:Config.vi,Config DDC.vi,這兩個子VI又分別調用低層組件子VI來完成特定的設置、配置任務。Config.vi完成采集卡的常規配置,例如對采集卡單次采集數量、FIFO滿深度、寄存器(硬件通道、時鐘、觸發、采集方式、采集模式等的控制)設置、采集卡的狀態查詢等;Config DDC.vi完成DDC的所有配置工作,包括對DDC的模式、抽取率、輸出格式、本振頻率、本振相位、增益、CFIR濾波參數、PFIR濾波參數等的設置,從而實現DDC的數字IQ分離、抽取、數字濾波、重采樣、多級增益調節、多種調制方式的解調等功能。其余低層組件VI實現設備的打開關閉、數據從數據采集卡到主機內存的傳送、數據保存等。無論應用子VI或組件子VI均為獨立可執行程序,實現特定功能,各VI函數作為提供給用戶進行系統應用開發所需的各類操作。采用該結構,能夠使用戶在運行時修改虛擬儀器系統的運行邏輯與人機界面,可立即執行,因此在用戶需要改變需求的情況下能迅速適配,數據采集卡具有可重構的特點,用戶也不必去關心硬件的實現細節。

  DLL的調用

  在LABVIEW 中調用DLL時,把編寫好的DLL放在當前目錄或特定目錄下,然后根據應用程序的需要,確定參數個數和參數類型及調用規則,在LABVIEW中正確地配置DLL 。首先從函數模板Function 中調用CLF 節點,雙擊彈出設置對話框,如圖2所示。對話框中,第一個參數Library Name Path 填入需要調用的動態鏈接庫文件的名字和路徑。第二個參數Function Name 是鏈接庫中要調用的函數名稱。第三個參數為線程調用方式,在DLL只被一個線程調用的情況下,兩種調用方式都可選擇,但在多線程調用情況下,需注意選擇。Run in UI Thread 表示在用戶接口線路中調用,DLL 的執行期將等到用戶接口線程(即LABVIEW環境下的VI 應用程序) 執行DLL 的導出函數調用時才開始;Run in any Thread 表示允許多個線程同時調用這個DLL。在編制DLL 過程中,充分考慮了線程保護的同步機制,如使用臨界區、互斥、信號量等,線程安全較為確定,那么可以選用Run in any Thread方式,這將有助于提高DLL調用的性能;反之,可選Run in UI Thread。第四個參數是對DLL的調用規則,可選擇C或stdcall,在此選擇stdcall。LABVIEW調用庫函數設置界面如圖3所示,其中Parameters項是對參數選項的設置,根據調用的函數,添加和設置相應的參數,參數名稱、類型和數據類型,且要與被調用函數中的參數名相同。需要注意的是,當調用多個函數時要分別填寫參數的個數和對應的類型,而且在調用過程中應保持數據位的一致。由于LABVIEW中的數據類型和不同編程語言對應的數據類型在形式上有些不一致,因此需要知道它們是如何對應的。如:LABVIEW中I16表示有符號16位整型,對應C語言中的short型。

LABVIEW調用庫函數設置界面

圖3 LABVIEW調用庫函數設置界面

  設置后,LABVIEW將自動生成各參數的入口及出口狀態,完成調用庫函數節點的配置。對于外部的編程和連線,如Trigger.vi,如圖4所示。

Trigger子VI程序框圖

圖4 Trigger子VI程序框圖

  DLL調用中的參數類型匹配

  在LABVIEW中調用動態鏈接庫,難點在于參數類型匹配。最常用的三種數據類型是:數值類型、字符串、數值型數組。設計中,將采集數據傳送到內存塊過程涉及到帶數組參數的函數調用,值得注意的是,LABVIEW 只支持 C 數據類型中的數值型數組,調用含有數組參數函數時,傳遞數組類型“Array Format”要選擇“Array Data Pointer”。這個設置中還有其他兩個選項(Array Handle,Array Handle Pointer),這種帶有“Handle”的參數類型都是表示LABVIEW定義的特殊類型的,在第三方的DLL中不會使用到。按前述步驟設置好CLF節點,連接外部輸入(采集數量size)和輸出(存放采集數據的數組)后,輸出沒有反應,檢查分析得知,數組參數作為輸出值時,要為輸出的數組數據開辟空間,將輸入數據的指針復制給輸出數組數據指針并傳給驅動函數。在LABVIEW中開辟數據空間的方法有兩種:

 

  1.創建一個長度滿足要求的數組,作為初始值傳遞給輸入參數,輸出數據就會被放置在輸入數組所在的內存空間內。

  2.直接在參數配置面板上進行設置。在 Minimum size 中寫入一個固定的數值或選擇函數的其它數據參數,LABVIEW 就會按此大小為輸出數組開辟空間。

  詳細設置如表1所示。字符串的使用與數組非常類似,實際上在C語言中字符串就是一個I8數組。

表1 調用含有數組參數函數舉例

調用含有數組參數函數舉例

  此外,布爾類型在DLL函數和LABVIEW VI之間傳遞沒有專有的數據類型,需利用數值類型來傳遞。輸入時先把布爾值轉變為數值,傳遞給DLL函數;輸出時把數值轉為布爾值。對于所調用的DLL 庫函數的參數類型,如果在配置框中找不到匹配的類型,可以在Type 框中選Adapt to Type,表示編程時指定的LABVIEW數據類型與DLL中參數類型進行自動匹配。LABVIEW也定義了一些特有的數據類型,例如復數類型、LV布爾類型。為了在動態鏈接庫中能對這些類型的數據進行操作,在LABVIEW目錄中的extcode.h文件對LABVIEW的各種數據類型進行了定義。在編寫動態鏈接庫時,通過引用該文件就可以在C代碼中對LABVIEW的這些獨有數據類型進行操作。

  實驗與結論

  程序設計采用循環順序執行結構,主要設置三個調用動態鏈接庫節點。循環順序執行結構中包括三幀,第一幀調用Config函數進行數據采集卡的初始化;第二幀循環調用datatrans函數采集數據至內存,并用波形圖顯示出來;第三幀調用deviceshut函數釋放采集卡所占資源,程序結束。圖5是設計完成的采集卡軟件工作界面,圖中顯示了對系統采集參數、處理參數配置以及采集波形的顯示等,波形顯示了對正弦信號采集4096個有效數據點。

采集波形顯示圖

圖5 采集波形顯示圖

  結果表明,數據卡的接口工作穩定,數據正確無誤,達到了設計的目標。上述方法成功實現了LABVIEW與采集卡驅動程序的數據交換,進而利用LABVIEW豐富的函數庫,能方便地實現采集卡的所有功能,搭建了以LABVIEW為應用程序的數字采集處理系統。很明顯這種集成了VC++和LABVIEW圖形化編程語言各自優勢的采集處理系統不僅性價比高、通用性強、易于開發、數據處理簡單,且可以大大縮短開發時間。采用CLF 技術,充分利用已有的動態鏈接程序庫,可大大增強LABVIEW 和底層硬件的通信能力。

此內容為AET網站原創,未經授權禁止轉載。
热re99久久精品国产66热_欧美小视频在线观看_日韩成人激情影院_庆余年2免费日韩剧观看大牛_91久久久久久国产精品_国产原创欧美精品_美女999久久久精品视频_欧美大成色www永久网站婷_国产色婷婷国产综合在线理论片a_国产精品电影在线观看_日韩精品视频在线观看网址_97在线观看免费_性欧美亚洲xxxx乳在线观看_久久精品美女视频网站_777国产偷窥盗摄精品视频_在线日韩第一页
  • <strike id="ygamy"></strike>
  • 
    
      • <del id="ygamy"></del>
        <tfoot id="ygamy"></tfoot>
          <strike id="ygamy"></strike>
          欧美成人免费全部| 欧美日本在线视频| 欧美国产精品| 亚洲欧美综合精品久久成人| 欧美另类亚洲| 免费91麻豆精品国产自产在线观看| 好吊成人免视频| 亚洲欧洲精品一区二区| 国产精品九九久久久久久久| 欧美aⅴ一区二区三区视频| 久久国产手机看片| 久久综合久久久久88| 99伊人成综合| 亚洲三级免费电影| 亚洲国产一二三| 亚洲永久在线| 欧美日韩一区在线| 在线观看欧美激情| 国产一区二区按摩在线观看| 亚洲欧美一区二区三区极速播放| 亚洲精品久久久一区二区三区| 久久久久国产精品麻豆ai换脸| 欧美高清视频一区| 久久精品毛片| 国产精品你懂的| 国产精品国产三级欧美二区| 欧美日韩天堂| 国产区二精品视| 欧美激情综合亚洲一二区| 免费在线一区二区| 午夜精品久久久久久久蜜桃app| 欧美日韩一区二区在线观看| 欧美日本一道本在线视频| 欧美日本精品在线| 亚洲丁香婷深爱综合| 老牛影视一区二区三区| 免费不卡在线观看| 欧美国产视频一区二区| 午夜久久99| 国产精品激情电影| 国产精品自拍在线| 亚洲欧美怡红院| 精品动漫3d一区二区三区免费| 亚洲美女电影在线| 欧美~级网站不卡| 亚欧成人精品| 99riav1国产精品视频| 老司机67194精品线观看| 欧美影院久久久| 久久综合久久综合这里只有精品| 亚洲欧美日韩视频一区| 国产精品综合久久久| 亚洲欧美日韩在线| 欧美一区二区精品| 亚洲高清三级视频| 欧美日本网站| 欧美三级不卡| 狠狠做深爱婷婷久久综合一区| 欧美日韩国内自拍| 欧美日韩亚洲一区三区| 久久漫画官网| 国产精品捆绑调教| 欧美日韩国产成人在线观看| 欧美成人免费视频| 亚洲欧洲精品一区二区| 国产精品一区二区男女羞羞无遮挡| 国产九九精品视频| 亚洲欧美一区二区三区久久| 亚洲欧美激情一区二区| 亚洲国产精品第一区二区| 国产一区二区三区久久精品| 国产综合av| 欧美日韩一本到| 亚洲精品久久久久久久久久久久久| 欧美成人精品h版在线观看| 合欧美一区二区三区| 亚洲精品一级| 1024国产精品| 亚洲一区二区三区在线看| 一区二区三区四区国产精品| 午夜精品美女久久久久av福利| 久久激情网站| 国产精品日韩欧美一区二区三区| 欧美日韩国产电影| 国语精品中文字幕| 在线欧美日韩| 欧美日本精品| 久久久久久一区二区| 禁久久精品乱码| 国产一区二区三区最好精华液| 国产免费成人在线视频| 欧美偷拍一区二区| 欧美激情综合| 亚洲一区二区三区久久| 中文日韩在线视频| 欧美日韩国产小视频在线观看| 久久久91精品国产一区二区精品| 亚洲人成网站精品片在线观看| 国产精品国产精品| 国内欧美视频一区二区| 精品av久久707| 欧美激情在线狂野欧美精品| 久久琪琪电影院| 一本色道久久综合精品竹菊| 午夜精品久久久久久久99樱桃| 亚洲小说春色综合另类电影| 午夜精品视频一区| 欧美成人嫩草网站| 欧美一区亚洲二区| 亚洲久久在线| 国产精品影院在线观看| 国产精品视频yy9099| 国产亚洲成精品久久| 欧美性大战久久久久久久| 国产精自产拍久久久久久蜜| 亚洲午夜精品久久久久久浪潮| 一区二区三区av| 亚洲国产91色在线| 性一交一乱一区二区洋洋av| 日韩视频一区| 亚洲第一精品夜夜躁人人爽| 国产精品大全| 国产欧美一区二区视频| 欧美成人一区二免费视频软件| 欧美成人一区二免费视频软件| 国产视频观看一区| 欧美一区二区三区在线视频| 欧美巨乳波霸| 亚洲欧美日韩在线观看a三区| 夜夜夜精品看看| 国内揄拍国内精品久久| 国产一区二区视频在线观看| 狠狠88综合久久久久综合网| 一区二区三区精品视频在线观看| 久久精品主播| 在线日韩电影| 亚洲专区国产精品| 妖精视频成人观看www| 亚洲理伦电影| 欧美一区二区视频观看视频| 欧美精品日本| 女人天堂亚洲aⅴ在线观看| 午夜国产精品影院在线观看| 91久久综合亚洲鲁鲁五月天| 亚洲视频播放| 香蕉av福利精品导航| 激情欧美亚洲| 欧美日韩国产专区| 亚洲欧美成人一区二区在线电影| 亚洲午夜日本在线观看| 欧美一区三区三区高中清蜜桃| 国产视频亚洲精品| 亚洲欧美日韩成人高清在线一区| 欧美亚洲动漫精品| 香蕉久久夜色精品国产| 亚洲天堂av高清| 久久久伊人欧美| 中日韩美女免费视频网址在线观看| 国产伦精品一区二区三区四区免费| 欧美 日韩 国产在线| 一本不卡影院| 欧美久久久久久| 亚洲在线1234| 精东粉嫩av免费一区二区三区| 欧美视频中文字幕在线| 国产一区二区久久精品| 黄色亚洲大片免费在线观看| 欧美性猛片xxxx免费看久爱| 欧美国产日韩xxxxx| 欧美fxxxxxx另类| a4yy欧美一区二区三区| 久久人人精品| 亚洲最新视频在线播放| 欧美在线视频播放| 欧美在线视频网站| 性做久久久久久| 在线中文字幕一区| 激情自拍一区| 一区二区三区高清在线| 亚洲美女视频在线免费观看| 亚洲精品视频啊美女在线直播| 欧美国产一区二区| 中文一区二区在线观看| 国产日韩欧美中文在线播放| 最新国产乱人伦偷精品免费网站| 亚洲永久字幕| 欧美日韩视频在线| 99精品视频免费在线观看| 欧美激情中文字幕一区二区| 亚洲欧美大片| 亚洲精品乱码| 亚洲欧美日韩在线不卡| 欧美国产极速在线| 在线国产亚洲欧美| 欧美日韩国语| 欧美日韩综合另类| 欧美揉bbbbb揉bbbbb| 亚洲一级网站| 国产乱码精品| 欧美怡红院视频| 99riav久久精品riav| 免费在线观看成人av| 欧美亚洲午夜视频在线观看| 欧美日本精品| 艳女tv在线观看国产一区| 久久久精品欧美丰满| 欧美福利一区二区| 国产精品一二三| 欧美日韩亚洲网| 极品av少妇一区二区| 欧美大尺度在线观看| 一区二区三区视频免费在线观看| 在线观看欧美精品| 国产精品入口麻豆原神| 国产日韩av高清| 午夜国产精品视频免费体验区| 亚洲一区二区三区激情| 久久青草久久| 午夜国产不卡在线观看视频| 欧美在线电影| 在线播放国产一区中文字幕剧情欧美| 免费成人av在线看| 欧美系列精品| 欧美一级精品大片| 欧美自拍偷拍午夜视频| 樱花yy私人影院亚洲| 欧美日韩美女| 国产深夜精品福利| 亚洲一区观看| 欧美日韩伦理在线| 欧美经典一区二区三区| 在线中文字幕一区| 有坂深雪在线一区| 亚洲高清精品中出| 亚洲国产精品免费| 亚洲欧洲另类| 亚洲一卡二卡三卡四卡五卡| 欧美日韩的一区二区| 欧美日韩免费观看中文| 欧美黄在线观看| 美女主播视频一区| 国产精品久久久久久一区二区三区| 美女精品国产| 亚洲国产一区二区精品专区| 亚洲国产成人精品久久久国产成人一区| 欧美色欧美亚洲另类二区| 国产一区二区三区高清在线观看| 国产亚洲一区二区三区| 国产情人综合久久777777| 国产精品成人av性教育| 老牛嫩草一区二区三区日本| 国产精品免费区二区三区观看| 亚洲精品乱码视频| 亚洲片在线资源| 国产精品永久免费观看| 亚洲国产综合视频在线观看| 欧美三级日本三级少妇99| 国产麻豆午夜三级精品| 久久视频在线视频| 男男成人高潮片免费网站| 精东粉嫩av免费一区二区三区| 欧美亚洲视频在线看网址| 亚洲一区美女视频在线观看免费| 欧美高清视频一区| 欧美日韩一区二区在线观看视频| 欧美亚洲成人精品| 欧美激情亚洲综合一区| 麻豆精品一区二区综合av| 国产欧美另类| 老司机午夜免费精品视频| 国产亚洲精品一区二555| 国产精品国产自产拍高清av| 国产日韩精品一区观看| 欧美在线二区| 亚洲一区不卡| 国产在线拍偷自揄拍精品| 欧美不卡在线视频| 久久久精品视频成人| 欧美亚洲午夜视频在线观看| 欧美一区午夜视频在线观看| 欧美主播一区二区三区美女 久久精品人| 亚洲欧美中日韩| 亚洲国产精品一区二区三区| 一区二区三区视频免费在线观看| 亚洲一级二级| 欧美好吊妞视频| 国产精品一二三四区| 欧美黑人在线观看| 欧美精品在欧美一区二区少妇| 亚洲乱码国产乱码精品精| 欧美另类久久久品| 狠狠88综合久久久久综合网| 伊人久久婷婷色综合98网| 在线视频欧美日韩| 欧美福利视频网站| 国产九九视频一区二区三区| 亚洲视频一二三| 一区二区三区四区五区精品| 久久精品视频在线观看| 欧美在线三级| 久久久999成人| 亚洲一区二区日本| 国产精品久久久久久久久免费樱桃| 看片网站欧美日韩| 国产精品一区二区三区乱码| 欧美日韩1区2区3区| 亚洲国产日韩精品| 亚洲午夜高清视频| 亚洲午夜小视频| 欧美午夜免费电影| 欧美一区二区日韩一区二区| 亚洲国产91| 欧美日韩国产区一| 亚洲私人影院在线观看| 欧美在线999| 伊人成人网在线看| 亚洲美女黄网| 狠狠干综合网| 亚洲国产精品电影在线观看| 欧美中文字幕精品| 午夜国产精品视频免费体验区| 亚洲欧美日韩人成在线播放| 亚洲麻豆国产自偷在线| 欧美亚洲日本一区| 蜜臀av国产精品久久久久| 亚洲午夜激情| 国产精品一区亚洲| 亚洲黄色成人网|