色婷婷AⅤ一区二区三区|亚洲精品第一国产综合亚AV|久久精品官方网视频|日本28视频香蕉

          新聞中心

          EEPW首頁(yè) > 測(cè)試測(cè)量 > 設(shè)計(jì)應(yīng)用 > Labview與其他應(yīng)用程序的接口設(shè)計(jì)

          Labview與其他應(yīng)用程序的接口設(shè)計(jì)

          作者: 時(shí)間:2017-01-09 來(lái)源:網(wǎng)絡(luò) 收藏
          labview固然強(qiáng)大,但是有些功能實(shí)現(xiàn)起來(lái)也是比較麻煩的。我們想使用其他語(yǔ)言或者平臺(tái)下的現(xiàn)成的程序,怎么辦呢?

          可以通過(guò)下面的集中辦法來(lái)實(shí)現(xiàn):

          本文引用地址:http://cafeforensic.com/article/201701/337128.htm

          1、調(diào)用公式節(jié)點(diǎn) functions- All fuctions-structures

          2、調(diào)用C語(yǔ)言代碼(code interface node)functions- All fuctions-structures代碼接口節(jié)點(diǎn)

          3、調(diào)用matlab腳本節(jié)點(diǎn)functions- All fuctions-analyze-mathematics-formula

          4、調(diào)用windows API函數(shù)(call library function node) 調(diào)用庫(kù)函數(shù)節(jié)點(diǎn) .dll

          5、調(diào)用ActiveX控件(微軟的)使用ActiveX容器,具體的實(shí)例可參見(jiàn)labview幫助文件里面的事件回調(diào)的瀏覽器的例子。

          6、調(diào)用.dll程序集或者共享庫(kù),通過(guò).net容器來(lái)實(shí)現(xiàn)。

          labview前面板有兩種容器:.net容器和activeX容器。.net是使用應(yīng)用程序集。而ActiveX是使用微軟的對(duì)象模型(如瀏覽器,ms播放器等,比較直觀的交互技術(shù)集)

          具體調(diào)用細(xì)節(jié)實(shí)際摸索后逐步添加:

          1、調(diào)用公式節(jié)點(diǎn)的例子

          圖1公式節(jié)點(diǎn)實(shí)例

          其公式與C語(yǔ)言具有類似的表達(dá)式,具體看幫助文件。

          2、調(diào)用C語(yǔ)言代碼

          這個(gè)內(nèi)容從網(wǎng)絡(luò)上找到一篇介紹的比較好的文章,現(xiàn)收錄進(jìn)來(lái)。在此注明原文地址(為使文章更可讀,將圖號(hào)進(jìn)行修改):

          http://www.eefocus.com/bbs/article_10_6482.html
          CIN(Code Interface Node)節(jié)點(diǎn)是LabVIEW中用來(lái)調(diào)用C/C++代碼的功能節(jié)點(diǎn)。它與動(dòng)態(tài)鏈接庫(kù)的不同之處在于,它能夠?qū)⒋a集成在VI中作為單獨(dú)的一個(gè)VI發(fā)布,而不需要多余的文件。另外,它提供了函數(shù)入口,它可以根據(jù)用戶提供的輸入輸出自動(dòng)生成函數(shù)入口代碼,從而使用戶專心關(guān)注代碼功能而不用為函數(shù)聲明、定義等語(yǔ)句費(fèi)心。因此CIN節(jié)點(diǎn)與DLL在不同的場(chǎng)合有不同的優(yōu)勢(shì),但是CIN節(jié)點(diǎn)的使用比調(diào)用DLL要復(fù)雜得多。

          由于LabVIEW中數(shù)據(jù)的存儲(chǔ)格式遵循了C語(yǔ)言中數(shù)據(jù)的存儲(chǔ)格式,并且二者完全相同,所以用戶可以向CIN傳遞任意復(fù)合的數(shù)據(jù)結(jié)構(gòu)。另外,CIN比圖形化語(yǔ)言可獲得更高的執(zhí)行效率。

          注意:對(duì)于完全相同的代碼,CIN和DLL的執(zhí)行效率是完全一樣的。

          如果要使用CIN節(jié)點(diǎn),你必須安裝了C編譯器。在Windows下,CIN支持以下編譯器:

          • Microsoft Visual C++
          • Symantec C

          CIN節(jié)點(diǎn)必須調(diào)用.lsb文件。.lsb文件是通過(guò)外部編譯器與CINTools工具結(jié)合將C代碼編譯生成的。

          下面我們通過(guò)一個(gè)Step by Step的實(shí)例來(lái)看如何在LabVIEW中實(shí)現(xiàn)CIN節(jié)點(diǎn)調(diào)用,本例所用外部編譯器為Microsoft Visual C++ 6.0。

          第一步:在程序框圖放置一個(gè)空CIN節(jié)點(diǎn);

          CIN節(jié)點(diǎn)位于Functions Palette的Connectivity->Libraries & Executables->Code Interface Node。

          第二步:創(chuàng)建CIN節(jié)點(diǎn)的輸入輸出端口;

          初始情況下,CIN只有一對(duì)端口:一個(gè)輸入端口和一個(gè)輸出端口。向下拉大節(jié)點(diǎn)邊框或右擊節(jié)點(diǎn)端口選擇Add Parameter,可以為節(jié)點(diǎn)增加輸入輸出端口。CIN節(jié)點(diǎn)的端口都是成對(duì)出現(xiàn)的,因?yàn)镃IN節(jié)點(diǎn)端口傳遞的是指針,所以該參數(shù)既可以作為輸入又可以作為輸出。如果不需要輸入,則可以右擊該輸入端口選擇Output Only,這時(shí)候該對(duì)端口的左側(cè)端口變?yōu)榛疑?,表明這對(duì)端口僅用作輸出。

          本例實(shí)現(xiàn)的功能為c=a+b,因此需要兩個(gè)輸入端口:a,b;一個(gè)輸出端口c。如圖18.8所示。

          設(shè)置好端口后,在前面板窗口創(chuàng)建兩個(gè)Numeric Control(分別命名為a和b)和一個(gè)Numeric Indicator(命名為c)。分別將a,b與輸入端口連接,c與輸出端口連接,如圖3所示??梢钥吹剑丝跁?huì)自動(dòng)根據(jù)輸入?yún)⒘康念愋团c之匹配。

          圖2設(shè)置CIN節(jié)點(diǎn)端口



          圖3 CIN節(jié)點(diǎn)端口與控件連接

          雖然控件與端口已經(jīng)連接,但是此時(shí)的CIN節(jié)點(diǎn)并不具備任何功能,因?yàn)樗€沒(méi)有裝載.lsb文件。因此此時(shí)VI是不可運(yùn)行的,即Run按鈕處于Broken狀態(tài)。下面的任務(wù)就是創(chuàng)建.c源文件,并編譯為.lsb文件,最后加載到節(jié)點(diǎn)上。

          第三步:創(chuàng)建.c源文件

          右擊CIN節(jié)點(diǎn)選擇Create .c File...,在彈出的對(duì)話框中保存文件,這里文件名命名為CINExample_add.c。打開(kāi)該文件可以看到LabVIEW已經(jīng)自動(dòng)添加了一些代碼用于包含庫(kù)以及函數(shù)聲明等,內(nèi)容如下:

          #i nclude "extcode.h"

          MgErr CINRun(float64 *a, float64 *b, float64 *c);

          MgErr CINRun(float64 *a, float64 *b, float64 *c)

          {

          return noErr;

          }

          用戶可以在“”處添加函數(shù)所需的C代碼。頭文件“extcode.h”是LabVIEW自帶的一個(gè)頭文件,位于... LabVIEW 8.2cintools目錄下。它定義了CIN和外部程序所用到的基本數(shù)據(jù)類型和許多函數(shù)等。其中定義的某些常量和數(shù)據(jù)類型可能會(huì)與系統(tǒng)頭文件相沖突,因此在使用系統(tǒng)頭文件并進(jìn)行系統(tǒng)調(diào)用時(shí),需要將cintools目錄下的hosttype.h文件也包含進(jìn)來(lái)。#i nclude “hosttype.h”必須緊跟著#i nclude “extcode.h”語(yǔ)句,然后才能用#i nclude語(yǔ)句包含系統(tǒng)頭文件。

          當(dāng)CIN節(jié)點(diǎn)執(zhí)行時(shí),LabVIEW將調(diào)用CINRun函數(shù)。CINRun函數(shù)將CIN節(jié)點(diǎn)的輸入輸出作為參數(shù)看待。此外,還可以添加一些其它的后臺(tái)例行程序(Routines):CINLoad,CINSave,CINUnload,CINAbort,CINInit,CINDispose和CINProperties。它們分別在不同的時(shí)刻執(zhí)行。例如CINLoad在第一次載入VI時(shí)執(zhí)行。缺省情況下是不執(zhí)行任何內(nèi)容的,如果你需要在VI載入時(shí)執(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=*a+*b;

          return noErr;

          }

          改寫后保存該文件就完成了.c源文件的編寫,下面我們通過(guò)Visual C++ 6.0集成開(kāi)發(fā)環(huán)境來(lái)編譯該源文件。

          第四步:編譯.c源文件為.lsb文件

          1.打開(kāi)VC++ 6.0,在主窗口菜單中選擇File->New...,在彈出的對(duì)話框選擇Win32Dynamic-Link Library,設(shè)置Project Name為CINExample_add,并在Location欄設(shè)置該P(yáng)roject所在路徑,如圖4所示。點(diǎn)擊OK按鈕后,在接下來(lái)的對(duì)話框中選擇Finish按鈕,在接著彈出的信息提示對(duì)話框中點(diǎn)擊OK,就成功創(chuàng)建了一個(gè)空的DLL Project。

          圖4VC中創(chuàng)建新DLL Project對(duì)話框

          2.將前面創(chuàng)建的CINExample_add.c源文件與...LabVIEW 8.2cintools目錄下的cin.obj, labview.lib, lvsb.lib, lvsbmain.def添加到Project中。添加方法是在VC++主菜單中選擇Project->Add To Project->Files...。

          3.選擇Project->Settings...,在彈出對(duì)話框的Settings for欄中選擇All Configurations,然后選擇C/C++tab頁(yè),選擇Category欄為Preprocessor,將...LabVIEW 8.2cintools目錄添加到Additional include directories中,如圖5所示。


          圖5將cintools目錄添加到搜索目錄中

          4.仍然在上面的對(duì)話框中選擇Category為Code Generation,設(shè)置Struct member alignment為1 byte。設(shè)置Use run-time library為Multithreaded DLL。

          5.選擇Custom Buildtab頁(yè),在Commands欄中輸入:”cintools所在目錄lvsbutil” $(TargetName) –d “$(WkspDir)$(OutDir)”,在Outputs欄中輸入:” $(OutDir)$(TargetName).lsb”,如圖6所示。這一步就是利用LabVIEW的CINTools工具包中的lvsbutil工具將VC++生成的DLL文件轉(zhuǎn)換為CIN節(jié)點(diǎn)能夠使用的.lsb文件。



          圖6設(shè)置Custom Build為lvsbutil

          6.點(diǎn)擊OK按鈕完成配置后,點(diǎn)擊VC++工具欄中的Build按鈕,編譯工程。編譯過(guò)程中,VC++首先創(chuàng)建一個(gè)DLL文件,然后調(diào)用lvsbutil工具將這個(gè)DLL文件轉(zhuǎn)換為.lsb文件。編譯完成后,打開(kāi)工程目錄下的Debug文件夾,我們可以看到新生成的.lsb文件:CINExample_add.lsb。下面就可以將該文件加載到CIN節(jié)點(diǎn)中了。

          第五步:加載.lsb文件到CIN節(jié)點(diǎn)

          回到LabVIEW程序中,右擊第二步中創(chuàng)建的CIN節(jié)點(diǎn),選擇Load Code Resource...,在彈出的文件選擇對(duì)話框中雙擊選擇剛才創(chuàng)建好的CINExample_add.lsb文件,這就完成了.lsb文件的加載過(guò)程。這時(shí)候VI窗口工具欄中的Run按鈕也變?yōu)榭蓤?zhí)行狀態(tài)。運(yùn)行VI可以得到預(yù)期結(jié)果,如圖7所示。


          圖7利用CIN節(jié)點(diǎn)進(jìn)行加法運(yùn)算

          到此為止,我們就完成了一個(gè)CIN節(jié)點(diǎn)的創(chuàng)建過(guò)程。其實(shí)LabVIEW提供了大量的外部函數(shù)供CIN節(jié)點(diǎn)調(diào)用,這些函數(shù)涵蓋了從底層字節(jié)操作到數(shù)據(jù)排序、內(nèi)存管理等各個(gè)方面。這些函數(shù)都在一個(gè)稱為Managers的庫(kù)中管理。在C代碼中通過(guò)調(diào)用這些函數(shù)可以方便的實(shí)現(xiàn)非常強(qiáng)大的功能。限于篇幅,這里就不詳細(xì)介紹了,有興趣的讀者可以參考NI公司的Using External Code in LabVIEW.pdf文檔。在...LabVIEW 8.2examplescins目錄下也可以看到LabVIEW提供的不少CIN節(jié)點(diǎn)實(shí)例。


          3、調(diào)用Matlab腳本節(jié)點(diǎn)

          Matlab腳本節(jié)點(diǎn)的介紹

          Matlab腳本節(jié)點(diǎn)位于函數(shù)面板的“數(shù)學(xué)→腳本與公式→腳本節(jié)點(diǎn)→Matlab腳本節(jié)點(diǎn)”。由于Matlab腳本節(jié)點(diǎn)中的腳本完全是Matlab中的M文件,運(yùn)行Matla腳本節(jié)點(diǎn)時(shí)會(huì)啟動(dòng)Matlab,并在Matlab中執(zhí)行腳本內(nèi)容,其支持的函數(shù)由Matlab來(lái)提供。

          Matlab腳本節(jié)點(diǎn)可以通過(guò)增加輸入輸出端子來(lái)實(shí)現(xiàn)LabVIEW和Matlab 腳本節(jié)點(diǎn)交互數(shù)據(jù)。方法為:右擊節(jié)點(diǎn)邊框,選擇Add Input或者Add Output選項(xiàng);可以手動(dòng)輸入M文件,也可以導(dǎo)入或者導(dǎo)出M文件。方法為:右擊節(jié)點(diǎn)邊框,選擇Import或者Export選項(xiàng)。

          利用LabVIEW調(diào)用Matlab實(shí)例

          在實(shí)例中,我們將完成兩個(gè)實(shí)驗(yàn):一個(gè)簡(jiǎn)單的加法運(yùn)算,x,y為輸入的兩個(gè)加數(shù),z為輸出的求和值;一個(gè)三維曲面的顯示,通過(guò)改變?nèi)S曲面數(shù)值,可以展示曲面的不同形狀。程序前面板如圖


          (1)利用matlab節(jié)點(diǎn)實(shí)現(xiàn)簡(jiǎn)單運(yùn)算

          ①函數(shù)面板的“數(shù)學(xué)→腳本與公式→腳本節(jié)點(diǎn)”,將Matlab腳本節(jié)點(diǎn)放置在合適的位置。

          ②單擊工具選板上的,在Matlab Script Node中單擊即可以編輯M腳本。

          ③在Matlab Script Node中輸入如下語(yǔ)句:

          z=x+y;

          ④在Matlab Script Node框圖左側(cè)上單擊鼠標(biāo)右鍵,選擇“添加輸入”,在出現(xiàn)的方框中輸入x;重復(fù)操作,在方框中輸入y。

          注意:在Matlab Script Node中有幾個(gè)輸入變量,則需要添加幾個(gè)輸入。

          ⑤在Matlab Script Node框圖右側(cè)上單擊鼠標(biāo)右鍵,選擇“添加輸出”,在出現(xiàn)的方框中輸入z。

          注意:此時(shí)只有一個(gè)輸出變量,故只添加一個(gè)輸出變量。

          ⑥在前面板中選擇“控件→新式→數(shù)值”,選擇數(shù)值輸入控件,將其放在前面板的合適位置。重復(fù)上述操作,將第二個(gè)數(shù)值控件放在前面板的合適位置。

          ⑦在前面板中選擇“控件→新式→數(shù)值”,選擇數(shù)值顯示控件,將其放在前面板的合適位置

          ⑧在程序框圖中將兩個(gè)數(shù)值輸入控件分別與x,y連接,數(shù)值顯示控件與z連接。

          程序框圖如圖所示:


          運(yùn)行程序,改變數(shù)值輸入控件2和3的值,可以看到數(shù)值顯示控件隨之改變。同時(shí)會(huì)啟動(dòng)Matlab,并在Matlab中自動(dòng)運(yùn)行該腳本

          (2)利用Matlab腳本節(jié)點(diǎn)實(shí)現(xiàn)3D圖形

          ①在函數(shù)面板的“數(shù)學(xué)→腳本與公式→腳本節(jié)點(diǎn)”,將Matlab腳本節(jié)點(diǎn)放置在合適的位置。

          ②單擊工具選板上的,在Matlab Script Node中單擊即可以編輯M腳本。

          ③在Matlab Script Node中輸入如下語(yǔ)句:

          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è)上單擊鼠標(biāo)右鍵,選擇“添加輸出”,在出現(xiàn)的方框中輸入z。并在z方框中右擊,選擇“選擇數(shù)據(jù)類型→2-D Array of Real”。

          ⑤在前面板中選擇“新式→圖形→三維曲面圖”,將其放在前面板合適的位置。

          ⑥連接z和三維曲面圖的“矩陣”輸入端口。

          最終程序框圖如圖所示:


          運(yùn)行該VI的同時(shí)也會(huì)啟動(dòng)Matlab,并在Matlab中自動(dòng)運(yùn)行該腳本,產(chǎn)生如圖所示圖形。


          4、調(diào)用庫(kù)函數(shù)節(jié)點(diǎn)(調(diào)用DLL)

          相對(duì)于CIN來(lái)講,NI更推薦用戶使用DLL來(lái)共享基于文本編程語(yǔ)言開(kāi)發(fā)的代碼。除了共享和重復(fù)利用代碼,開(kāi)發(fā)人員還能利用DLL封裝軟件的功能模塊,以便這些模塊能被不同開(kāi)發(fā)工具利用。在labview中,使用DLL一般有以下幾種途徑:

          (1)使用自己開(kāi)發(fā)DLL中的函數(shù)。

          (2)調(diào)用操作系統(tǒng)或硬件驅(qū)動(dòng)供應(yīng)商提供的API。

          對(duì)于前一種方法來(lái)說(shuō),又可以通過(guò)以下幾步實(shí)現(xiàn):

          (a)在labview中定義DLL原型;

          (b)生成.C或.C++文件,完成實(shí)現(xiàn)函數(shù)功能的代碼并為函數(shù)添加DLL導(dǎo)出聲明;

          (c)通過(guò)外部IDE(如VC++)創(chuàng)建DLL項(xiàng)目并編譯生成.dll文件。


          上一頁(yè) 1 2 下一頁(yè)

          關(guān)鍵詞: Labview接口設(shè)

          評(píng)論


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

          關(guān)閉