<meter id="pryje"><nav id="pryje"><delect id="pryje"></delect></nav></meter>
          <label id="pryje"></label>

          新聞中心

          EEPW首頁 > 模擬技術(shù) > 設(shè)計(jì)應(yīng)用 > 基于LABVIEW平臺(tái)的數(shù)據(jù)采集卡軟件設(shè)計(jì)

          基于LABVIEW平臺(tái)的數(shù)據(jù)采集卡軟件設(shè)計(jì)

          作者: 時(shí)間:2010-01-08 來源:網(wǎng)絡(luò) 收藏


          DLL的調(diào)用

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

          設(shè)置后,LABVIEW將自動(dòng)生成各參數(shù)的入口及出口狀態(tài),完成調(diào)用庫函數(shù)節(jié)點(diǎn)的配置。對(duì)于外部的編程和連線,如Trigger.vi,如圖4所示。

          圖3 LABVIEW調(diào)用庫函數(shù)設(shè)置界面

          圖4 Trigger子VI程序框圖

          DLL調(diào)用中的參數(shù)類型匹配

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

          1.創(chuàng)建一個(gè)長度滿足要求的數(shù)組,作為初始值傳遞給輸入?yún)?shù),輸出數(shù)據(jù)就會(huì)被放置在輸入數(shù)組所在的內(nèi)存空間內(nèi)。

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

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

          表1 調(diào)用含有數(shù)組參數(shù)函數(shù)舉例


          圖5 采集波形顯示圖

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

          實(shí)驗(yàn)與結(jié)論

          程序設(shè)計(jì)采用循環(huán)順序執(zhí)行結(jié)構(gòu),主要設(shè)置三個(gè)調(diào)用動(dòng)態(tài)鏈接庫節(jié)點(diǎn)。循環(huán)順序執(zhí)行結(jié)構(gòu)中包括三幀,第一幀調(diào)用Config函數(shù)進(jìn)行的初始化;第二幀循環(huán)調(diào)用datatrans函數(shù)采集數(shù)據(jù)至內(nèi)存,并用波形圖顯示出來;第三幀調(diào)用deviceshut函數(shù)釋放采集卡所占資源,程序結(jié)束。圖5是設(shè)計(jì)完成的采集卡軟件工作界面,圖中顯示了對(duì)系統(tǒng)采集參數(shù)、處理參數(shù)配置以及采集波形的顯示等,波形顯示了對(duì)正弦信號(hào)采集4096個(gè)有效數(shù)據(jù)點(diǎn)。

          結(jié)果表明,數(shù)據(jù)卡的接口工作穩(wěn)定,數(shù)據(jù)正確無誤,達(dá)到了設(shè)計(jì)的目標(biāo)。上述方法成功實(shí)現(xiàn)了LABVIEW與采集卡驅(qū)動(dòng)程序的數(shù)據(jù)交換,進(jìn)而利用LABVIEW豐富的函數(shù)庫,能方便地實(shí)現(xiàn)采集卡的所有功能,搭建了以LABVIEW為應(yīng)用程序的數(shù)字采集處理系統(tǒng)。很明顯這種集成了VC++和LABVIEW圖形化編程語言各自優(yōu)勢(shì)的采集處理系統(tǒng)不僅性價(jià)比高、通用性強(qiáng)、易于開發(fā)、數(shù)據(jù)處理簡單,且可以大大縮短開發(fā)時(shí)間。采用CLF 技術(shù),充分利用已有的動(dòng)態(tài)鏈接程序庫,可大大增強(qiáng)LABVIEW 和底層硬件的通信能力。

          上一頁 1 2 下一頁

          評(píng)論


          相關(guān)推薦

          技術(shù)專區(qū)

          關(guān)閉
          看屁屁www成人影院,亚洲人妻成人图片,亚洲精品成人午夜在线,日韩在线 欧美成人 (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })();