Labview與其他應(yīng)用程序的接口設(shè)計
labview前面板有兩種容器:.net容器和activeX容器。.net是使用
具體調(diào)用細節(jié)實際摸索后逐步添加:
圖1
其公式與C語言具有類似的表達式,具體看幫助文件。
2、調(diào)用C語言代碼
這個內(nèi)容從網(wǎng)絡(luò)上找到一篇介紹的比較好的文章,現(xiàn)收錄進來。在此注明原文地址(為使文章更可讀,將圖號進行修改):
http://www.eefocus.com/bbs/article_10_6482.html
CIN(Code Interface Node)節(jié)點是LabVIEW中用來調(diào)用C/C++代碼的功能節(jié)點。它與動態(tài)鏈接庫的不同之處在于,它能夠?qū)⒋a集成在VI中作為單獨的一個VI發(fā)布,而不需要多余的文件。另外,它提供了函數(shù)入口,它可以根據(jù)用戶提供的輸入輸出自動生成函數(shù)入口代碼,從而使用戶專心關(guān)注代碼功能而不用為函數(shù)聲明、定義等語句費心。因此CIN節(jié)點與DLL在不同的場合有不同的優(yōu)勢,但是CIN節(jié)點的使用比調(diào)用DLL要復(fù)雜得多。
由于LabVIEW中數(shù)據(jù)的存儲格式遵循了C語言中數(shù)據(jù)的存儲格式,并且二者完全相同,所以用戶可以向CIN傳遞任意復(fù)合的數(shù)據(jù)結(jié)構(gòu)。另外,CIN比圖形化語言可獲得更高的執(zhí)行效率。
注意:對于完全相同的代碼,CIN和DLL的執(zhí)行效率是完全一樣的。
如果要使用CIN節(jié)點,你必須安裝了C編譯器。在Windows下,CIN支持以下編譯器:
- Microsoft Visual C++
- Symantec C
CIN節(jié)點必須調(diào)用.lsb文件。.lsb文件是通過外部編譯器與CINTools工具結(jié)合將C代碼編譯生成的。
下面我們通過一個Step by Step的實例來看如何在LabVIEW中實現(xiàn)CIN節(jié)點調(diào)用,本例所用外部編譯器為Microsoft Visual C++ 6.0。
第一步:在程序框圖放置一個空CIN節(jié)點;
CIN節(jié)點位于Functions Palette的Connectivity->Libraries & Executables->Code Interface Node。
第二步:創(chuàng)建CIN節(jié)點的輸入輸出端口;
初始情況下,CIN只有一對端口:一個輸入端口和一個輸出端口。向下拉大節(jié)點邊框或右擊節(jié)點端口選擇Add Parameter,可以為節(jié)點增加輸入輸出端口。CIN節(jié)點的端口都是成對出現(xiàn)的,因為CIN節(jié)點端口傳遞的是指針,所以該參數(shù)既可以作為輸入又可以作為輸出。如果不需要輸入,則可以右擊該輸入端口選擇Output Only,這時候該對端口的左側(cè)端口變?yōu)榛疑?,表明這對端口僅用作輸出。
本例實現(xiàn)的功能為c=a+b,因此需要兩個輸入端口:a,b;一個輸出端口c。如圖18.8所示。
圖2
圖3 CIN節(jié)點端口與控件連接
雖然控件與端口已經(jīng)連接,但是此時的CIN節(jié)點并不具備任何功能,因為它還沒有裝載.lsb文件。因此此時VI是不可運行的,即Run按鈕處于Broken狀態(tài)。下面的任務(wù)就是創(chuàng)建.c源文件,并編譯為.lsb文件,最后加載到節(jié)點上。
第三步:創(chuàng)建.c源文件
右擊CIN節(jié)點選擇Create .c File...,在彈出的對話框中保存文件,這里文件名命名為CINExample_add.c。打開該文件可以看到LabVIEW已經(jīng)自動添加了一些代碼用于包含庫以及函數(shù)聲明等,內(nèi)容如下:
#i nclude "extcode.h"
MgErr CINRun(float64 *a, float64 *b, float64 *c);
MgErr CINRun(float64 *a, float64 *b, float64 *c)
用戶可以在“”處添加函數(shù)所需的C代碼。頭文件“extcode.h”是LabVIEW自帶的一個頭文件,位于... LabVIEW 8.2cintools目錄下。它定義了CIN和外部程序所用到的基本數(shù)據(jù)類型和許多函數(shù)等。其中定義的某些常量和數(shù)據(jù)類型可能會與系統(tǒng)頭文件相沖突,因此在使用系統(tǒng)頭文件并進行系統(tǒng)調(diào)用時,需要將cintools目錄下的hosttype.h文件也包含進來。#i nclude “hosttype.h”必須緊跟著#i nclude “extcode.h”語句,然后才能用#i nclude語句包含系統(tǒng)頭文件。
當(dāng)CIN節(jié)點執(zhí)行時,LabVIEW將調(diào)用CINRun函數(shù)。CINRun函數(shù)將CIN節(jié)點的輸入輸出作為參數(shù)看待。此外,還可以添加一些其它的后臺例行程序(Routines):CINLoad,CINSave,CINUnload,CINAbort,CINInit,CINDispose和CINProperties。它們分別在不同的時刻執(zhí)行。例如CINLoad在第一次載入VI時執(zhí)行。缺省情況下是不執(zhí)行任何內(nèi)容的,如果你需要在VI載入時執(zhí)行某段程序,則可以把該段程序添加在CINLoad例程中。編寫CINLoad例程的代碼如下:
CIN MgErr CINLoad(RsrcFile reserved) {
Unused (reserved);
return noErr;
}
通常情況下,我們只需要編寫CINRun函數(shù)。本例中,只需要將.c源文件中的CINRun函數(shù)改寫如下:
MgErr CINRun(float64 *a, float64 *b, float64 *c)
改寫后保存該文件就完成了.c源文件的編寫,下面我們通過Visual C++ 6.0集成開發(fā)環(huán)境來編譯該源文件。
第四步:編譯.c源文件為.lsb文件
1.
圖4
2.
3.
圖5
4.
圖6
6.
回到LabVIEW程序中,右擊第二步中創(chuàng)建的CIN節(jié)點,選擇Load Code Resource...,在彈出的文件選擇對話框中雙擊選擇剛才創(chuàng)建好的CINExample_add.lsb文件,這就完成了.lsb文件的加載過程。這時候VI窗口工具欄中的Run按鈕也變?yōu)榭蓤?zhí)行狀態(tài)。運行VI可以得到預(yù)期結(jié)果,如圖7所示。
圖7
到此為止,我們就完成了一個CIN節(jié)點的創(chuàng)建過程。其實LabVIEW提供了大量的外部函數(shù)供CIN節(jié)點調(diào)用,這些函數(shù)涵蓋了從底層字節(jié)操作到數(shù)據(jù)排序、內(nèi)存管理等各個方面。這些函數(shù)都在一個稱為Managers的庫中管理。在C代碼中通過調(diào)用這些函數(shù)可以方便的實現(xiàn)非常強大的功能。限于篇幅,這里就不詳細介紹了,有興趣的讀者可以參考NI公司的Using External Code in LabVIEW.pdf文檔。在...LabVIEW 8.2examplescins目錄下也可以看到LabVIEW提供的不少CIN節(jié)點實例。
3、調(diào)用Matlab腳本節(jié)點
Matlab腳本節(jié)點的介紹
Matlab腳本節(jié)點位于函數(shù)面板的“數(shù)學(xué)→腳本與公式→腳本節(jié)點→Matlab腳本節(jié)點”。由于Matlab腳本節(jié)點中的腳本完全是Matlab中的M文件,運行Matla腳本節(jié)點時會啟動Matlab,并在Matlab中執(zhí)行腳本內(nèi)容,其支持的函數(shù)由Matlab來提供。
Matlab腳本節(jié)點可以通過增加輸入輸出端子來實現(xiàn)LabVIEW和Matlab 腳本節(jié)點交互數(shù)據(jù)。方法為:右擊節(jié)點邊框,選擇Add Input或者Add Output選項;可以手動輸入M文件,也可以導(dǎo)入或者導(dǎo)出M文件。方法為:右擊節(jié)點邊框,選擇Import或者Export選項。
利用LabVIEW調(diào)用Matlab實例
在實例中,我們將完成兩個實驗:一個簡單的加法運算,x,y為輸入的兩個加數(shù),z為輸出的求和值;一個三維曲面的顯示,通過改變?nèi)S曲面數(shù)值,可以展示曲面的不同形狀。程序前面板如圖
(1)利用matlab節(jié)點實現(xiàn)簡單運算
①函數(shù)面板的“數(shù)學(xué)→腳本與公式→腳本節(jié)點”,將Matlab腳本節(jié)點放置在合適的位置。
②單擊工具選板上的
③在Matlab Script Node中輸入如下語句:
z=x+y;
④在Matlab Script Node框圖左側(cè)上單擊鼠標右鍵,選擇“添加輸入”,在出現(xiàn)的方框中輸入x;重復(fù)操作,在方框中輸入y。
注意:在Matlab Script Node中有幾個輸入變量,則需要添加幾個輸入。
⑤在Matlab Script Node框圖右側(cè)上單擊鼠標右鍵,選擇“添加輸出”,在出現(xiàn)的方框中輸入z。
注意:此時只有一個輸出變量,故只添加一個輸出變量。
⑥在前面板中選擇“控件→新式→數(shù)值”,選擇數(shù)值輸入控件,將其放在前面板的合適位置。重復(fù)上述操作,將第二個數(shù)值控件放在前面板的合適位置。
⑦在前面板中選擇“控件→新式→數(shù)值”,選擇數(shù)值顯示控件,將其放在前面板的合適位置
⑧在程序框圖中將兩個數(shù)值輸入控件分別與x,y連接,數(shù)值顯示控件與z連接。
程序框圖如圖所示:
運行程序,改變數(shù)值輸入控件2和3的值,可以看到數(shù)值顯示控件隨之改變。同時會啟動Matlab,并在Matlab中自動運行該腳本
(2)利用Matlab腳本節(jié)點實現(xiàn)3D圖形
①在函數(shù)面板的“數(shù)學(xué)→腳本與公式→腳本節(jié)點”,將Matlab腳本節(jié)點放置在合適的位置。
②單擊工具選板上的
③在Matlab Script Node中輸入如下語句:
x=-8:0.5:8;
y=x;
[XX,YY]=meshgrid(x,y);
r=sqrt(XX.^2+YY.^2)+eps;
z=sin(r)./r;
surf(z);
title(sin(r)/r);
④在Matlab Script Node框圖右側(cè)上單擊鼠標右鍵,選擇“添加輸出”,在出現(xiàn)的方框中輸入z。并在z方框中右擊,選擇“選擇數(shù)據(jù)類型→2-D Array of Real”。
⑤在前面板中選擇“新式→圖形→三維曲面圖”,將其放在前面板合適的位置。
⑥連接z和三維曲面圖的“矩陣”輸入端口。
運行該VI的同時也會啟動Matlab,并在Matlab中自動運行該腳本,產(chǎn)生如圖所示圖形。
4、調(diào)用庫函數(shù)節(jié)點(調(diào)用DLL)
評論