Labview調(diào)用庫(kù)函數(shù)節(jié)點(diǎn)方法_第1頁(yè)
Labview調(diào)用庫(kù)函數(shù)節(jié)點(diǎn)方法_第2頁(yè)
全文預(yù)覽已結(jié)束

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、 4/4Labview調(diào)用庫(kù)函數(shù)節(jié)點(diǎn)方法 Labview調(diào)用庫(kù)函數(shù)節(jié)點(diǎn)(調(diào)用DLL) 相對(duì)于CIN來講,NI更推薦用戶使用DLL來共享基于文本編程語(yǔ)言開發(fā)的代碼。除了共享和重復(fù)利用代碼,開發(fā)人員還能利用DLL封裝軟件的功能模塊,以便這些模塊能被不同開發(fā)工具利用。在labview中,使用DLL一般有以下幾種途徑: (1)使用自己開發(fā)DLL中的函數(shù)。 (2)調(diào)用操作系統(tǒng)或硬件驅(qū)動(dòng)供應(yīng)商提供的API。 對(duì)于前一種方法來說,又可以通過以下幾步實(shí)現(xiàn): (a)在labview中定義DLL原型; (b)生成.C或.C+文件,完成實(shí)現(xiàn)函數(shù)功能的代碼并為函數(shù)添加DLL 導(dǎo)出聲明; (c)通過外部IDE(如VC+

2、)創(chuàng)建DLL項(xiàng)目并編譯生成.dll文件。下面的內(nèi)容將具體講解: 配置Call library function node (CFN) 無論在labview中使用自己開發(fā)的DLL,或者硬件驅(qū)動(dòng)供應(yīng)商(操作系統(tǒng))提供的API,都可以通過配置CFN來完成。如下圖 在CFN圖標(biāo)的右鍵菜單選擇“配置”,打開配置對(duì)話 框,通過該對(duì)話框,可以指定動(dòng)態(tài)庫(kù)存放路徑、調(diào)用函數(shù)名以及傳遞給函數(shù)的參數(shù)類型和函數(shù)返回值的類型。在配置完成后,CFN節(jié)點(diǎn)會(huì)根據(jù)用戶的配置自動(dòng)更新其顯示。 通過browse按鈕或者直接在library name or path輸入框中指定調(diào)用函數(shù)多在.dll文件的路徑。 通過browse按鈕下

3、的控件用戶可以指定多個(gè)線程同時(shí)調(diào)用DLL。默認(rèn)情況下,labview以run in UI Thread方式調(diào)用DLL,調(diào)用的函數(shù)將直接在用戶線程中運(yùn)行。另外一種方式是遞歸方式reentrant,在這種情況下可以允許多個(gè)線程同時(shí)調(diào)用DLL中的函數(shù)。但要確保正常調(diào)用,必須使dll中的代碼線程安全。 在“Function Name”輸入框中指定要調(diào)用函數(shù)的函數(shù)名。 通過“Call Conventions”下拉列表框指定調(diào)用DLL 中函數(shù)的方式??梢灾付ㄕ{(diào)用方式為“C”(默認(rèn)方式)或Windows 標(biāo)準(zhǔn)調(diào)用方式“stdcall”。一般來說用“C”方式調(diào)用開發(fā)人員自己寫的DLL 函數(shù),而“stdcall

4、”一般做為標(biāo)準(zhǔn)調(diào)用方式來調(diào)用windows 的API 通過Parameter 域可以指定所調(diào)用函數(shù)的返回值類型。默認(rèn)情況下CFN 節(jié)點(diǎn)沒有輸入?yún)?shù)而且只有一個(gè)void 類型的返回參數(shù)。該參數(shù)由CFN 節(jié)點(diǎn)第一對(duì)連接點(diǎn)的右端返回,代表CFN 執(zhí)行結(jié)果。如果返回參數(shù)的類型是void 類型,則CFN 連接點(diǎn)為未啟用狀態(tài)(保持為灰色)。CFN 的每一對(duì)連接點(diǎn)代表一個(gè)輸入或輸出參數(shù),若要傳遞參數(shù)給CFN 則將參數(shù)連接至相應(yīng)連接點(diǎn)的左端,若要讀取返回值,則將相應(yīng)連接點(diǎn)的右端連接到Indicator。CFN 返回參數(shù)的類型可以是Void,Numeric 或String。只能為返回參數(shù)指定Void 類型,輸入

5、參數(shù)不能指定為Void 類型。調(diào)用的函數(shù)沒有返回值時(shí),指定CFN 的返回參數(shù)類型為void 類型。即使參數(shù)有確定類型的返回值,也可以指定CFN 的返回類型為Void,但是此時(shí),函數(shù)的返回值將被忽略。有些時(shí)候,調(diào)用的函數(shù)返回值不是以上三種類型,可以使用與以上三種類中有相同大小的一個(gè)來代替。例如如果調(diào)用的函數(shù)返回一個(gè)Char 類型數(shù)據(jù),則可以用一個(gè)8-bit unsigned integer Numeric 類型來代替。此外,由于LabVIEW 中沒有指針,因此調(diào)用DLL 中的返回指針的函數(shù)似乎不可能。但是可以設(shè)定返回值類型為一個(gè)與指針有相同大小的Integer 類型,LabVIEW 將把地址以整

6、型值來看待,并且用戶可以在以后的調(diào)用中直接使用它。 通過Parameter 域和其右邊的“Add a Parameter Before”,“Add a Parameter After”和“Delete thisParameter”三個(gè)按鈕可以增加、刪除以及修改CFN 的輸入?yún)?shù)和類型。當(dāng)用戶選擇某參數(shù)的類型后,其詳細(xì)的數(shù)據(jù)類型列表和參數(shù)傳遞方式列表將顯示出來,以方便進(jìn)行詳細(xì)設(shè)定。下表列出了可以設(shè)定的輸入?yún)?shù)類型及其詳細(xì)數(shù)據(jù)類型信息。 有時(shí)可能在CFN 配置對(duì)話框中并不能找到要傳遞給它的參數(shù)類型,在這種情況下可以通過下面方法來解決。如果參數(shù)不含指針,則可以通過Flatten to String

7、函數(shù)將參數(shù)轉(zhuǎn)換為字符串,并將此字符串指針傳遞給函數(shù)。還有其它一些技巧請(qǐng)參見NI 手冊(cè)。設(shè)定后的最終結(jié)果顯示在“Function Prototype”文本框中,在確認(rèn)前,可以在此檢查設(shè)定是否正確。如果不正確可以在此修改設(shè)定。 調(diào)用自己開發(fā)DLL中的函數(shù) 開發(fā)人員可以在LabVIEW 中指定DLL 函數(shù)的原型,然后在外部IDE 中完成代碼并編譯生成.dll 文件以 供項(xiàng)目使用。 下面就以一個(gè)簡(jiǎn)單的求數(shù)組求和的項(xiàng)目為例來說明這種開發(fā)過程。 1. 在LabVIEW 中創(chuàng)建DLL 函數(shù)原型。 a) 在LabVIEW 的diagram 面板上添加一個(gè)CFN 并通過其右鍵菜單打開CFN 的配置對(duì)話框; b)

8、 使“Library Name or Path”輸入框?yàn)榭眨?c) 指定函數(shù)名“Function Name”和調(diào)用方式“Calling Conventions”分別為add_num和C; d) 重命名返回參數(shù)的名稱為“error”,并指定其類型為Numeric 的Signed 32-bit Integer; e) 用“Add a Parameter After”按鈕添加第一個(gè)參數(shù)p,指定其類型為Array 的4-byte Single 并設(shè)定Array Format 為Array Data Pointer; f) 用“Add a Parameter After”按鈕添加第二個(gè)參數(shù)size,指定

9、其類型為為Numeric 的Signed32-bit Integer 并設(shè)置參數(shù)傳遞方式為Value; g) 用“Add a Parameter After”按鈕添加第三個(gè)參數(shù)sum,指定其類型為為Numeric 的4-byteSingle 并設(shè)置參數(shù)傳遞方式為Pointer to Value; h) 至此,函數(shù)的原型應(yīng)如下圖所示 long add_num(float *p, long size, float *sum); i) 確定后會(huì)發(fā)現(xiàn)CFN 根據(jù)配置自動(dòng)進(jìn)行了更新更新后的情況如圖示。 2. 生成.C 或.C+文件,完成實(shí)現(xiàn)函數(shù)功能的代碼并為函數(shù)添加DLL 導(dǎo)出聲明;在CFN 節(jié)點(diǎn)上通過

10、右鍵菜單選擇“Create .C File”生成mydll.c 文件,其內(nèi)容如下: 將以下代碼插入到句之后實(shí)現(xiàn)函數(shù)的功能。 int i; float tmpSum = 0; if(p != NULL) for(i=0; i size; i+) tmpSum = tmpSum + pi; else return (1); * sum = tmpSum; return (0); 在完成實(shí)現(xiàn)函數(shù)功能的代碼后,還必須為函數(shù)添加導(dǎo)出聲明以便能在LabVIEW 中使用這些函數(shù)。 C/C+聲名導(dǎo)出函數(shù)的關(guān)鍵字是_declspec (dllexport),使用該關(guān)鍵字可以代替模塊定義文件。 對(duì)于此處的例子來說

11、,只要在函數(shù)聲明和定義部分添加關(guān)鍵字即可。最終代碼如下: 3. 在外部IDE(以VC+為例)中創(chuàng)建DLL 項(xiàng)目并編譯生成.dll 文件。 用VC+ 6.0 進(jìn)行編譯生成.dll 文件的步驟如下: a) 在VC+中創(chuàng)建一個(gè)DLL 項(xiàng)目,如果在DLL 中沒有使用MFC 就選擇創(chuàng)建“Win32Dynamic-Link Library”,否則選擇“MFC AppWizard(dll)”,對(duì)此例子來說選擇前者。選定后進(jìn)入下一步選擇創(chuàng)建一個(gè)空的DLL 項(xiàng)目。 b) 通過Pro ject?Add to Project?Files 添加mydll.c 到創(chuàng)建的mydll 項(xiàng)目之中。 c) 通過Project?

12、Settings 打開項(xiàng)目配置對(duì)話框,選擇C/C+選項(xiàng)卡。 d) 配置項(xiàng)目的All Configurations。選擇Settings For 下拉列表框中的All Configurations,選擇Category下拉列表框中的Code Generation,最后設(shè)置Struct member alignment 為1 Byte。 e) 配置項(xiàng)目的Release 版本。選擇Settings For 下拉列表框中的Win32 Release,選擇Category下拉列表框中的Code Generation,最后從Use run-time library 下拉列表框中選擇Multithreaded DLL。配置結(jié)果如圖。 f) 配置項(xiàng)目的Debug 版本。選擇Settings For 下拉列表框中的Win32 Debug,選擇Category 下拉列表框中的Code Generation,最后從Use run-time library 下拉列表框中選擇Debug Multithreaded DLL。配置

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論