新聞中心

        EEPW首頁 > 測試測量 > 設計應用 > Labview與其他應用程序的接口設計

        Labview與其他應用程序的接口設計

        作者: 時間:2017-01-09 來源:網絡 收藏
        labview固然強大,但是有些功能實現起來也是比較麻煩的。我們想使用其他語言或者平臺下的現成的程序,怎么辦呢?

        可以通過下面的集中辦法來實現:

        本文引用地址:http://www.104case.com/article/201701/337128.htm

        1、調用公式節點 functions- All fuctions-structures

        2、調用C語言代碼(code interface node)functions- All fuctions-structures代碼接口節點

        3、調用matlab腳本節點functions- All fuctions-analyze-mathematics-formula

        4、調用windows API函數(call library function node) 調用庫函數節點 .dll

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

        6、調用.dll程序集或者共享庫,通過.net容器來實現。

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

        具體調用細節實際摸索后逐步添加:

        1、調用公式節點的例子

        圖1公式節點實例

        其公式與C語言具有類似的表達式,具體看幫助文件。

        2、調用C語言代碼

        這個內容從網絡上找到一篇介紹的比較好的文章,現收錄進來。在此注明原文地址(為使文章更可讀,將圖號進行修改):

        http://www.eefocus.com/bbs/article_10_6482.html
        CIN(Code Interface Node)節點是LabVIEW中用來調用C/C++代碼的功能節點。它與動態鏈接庫的不同之處在于,它能夠將代碼集成在VI中作為單獨的一個VI發布,而不需要多余的文件。另外,它提供了函數入口,它可以根據用戶提供的輸入輸出自動生成函數入口代碼,從而使用戶專心關注代碼功能而不用為函數聲明、定義等語句費心。因此CIN節點與DLL在不同的場合有不同的優勢,但是CIN節點的使用比調用DLL要復雜得多。

        由于LabVIEW中數據的存儲格式遵循了C語言中數據的存儲格式,并且二者完全相同,所以用戶可以向CIN傳遞任意復合的數據結構。另外,CIN比圖形化語言可獲得更高的執行效率。

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

        如果要使用CIN節點,你必須安裝了C編譯器。在Windows下,CIN支持以下編譯器:

        • Microsoft Visual C++
        • Symantec C

        CIN節點必須調用.lsb文件。.lsb文件是通過外部編譯器與CINTools工具結合將C代碼編譯生成的。

        下面我們通過一個Step by Step的實例來看如何在LabVIEW中實現CIN節點調用,本例所用外部編譯器為Microsoft Visual C++ 6.0。

        第一步:在程序框圖放置一個空CIN節點;

        CIN節點位于Functions Palette的Connectivity->Libraries & Executables->Code Interface Node。

        第二步:創建CIN節點的輸入輸出端口;

        初始情況下,CIN只有一對端口:一個輸入端口和一個輸出端口。向下拉大節點邊框或右擊節點端口選擇Add Parameter,可以為節點增加輸入輸出端口。CIN節點的端口都是成對出現的,因為CIN節點端口傳遞的是指針,所以該參數既可以作為輸入又可以作為輸出。如果不需要輸入,則可以右擊該輸入端口選擇Output Only,這時候該對端口的左側端口變為灰色,表明這對端口僅用作輸出。

        本例實現的功能為c=a+b,因此需要兩個輸入端口:a,b;一個輸出端口c。如圖18.8所示。

        設置好端口后,在前面板窗口創建兩個Numeric Control(分別命名為a和b)和一個Numeric Indicator(命名為c)。分別將a,b與輸入端口連接,c與輸出端口連接,如圖3所示。可以看到,端口會自動根據輸入參量的類型與之匹配。

        圖2設置CIN節點端口



        圖3 CIN節點端口與控件連接

        雖然控件與端口已經連接,但是此時的CIN節點并不具備任何功能,因為它還沒有裝載.lsb文件。因此此時VI是不可運行的,即Run按鈕處于Broken狀態。下面的任務就是創建.c源文件,并編譯為.lsb文件,最后加載到節點上。

        第三步:創建.c源文件

        右擊CIN節點選擇Create .c File...,在彈出的對話框中保存文件,這里文件名命名為CINExample_add.c。打開該文件可以看到LabVIEW已經自動添加了一些代碼用于包含庫以及函數聲明等,內容如下:

        #i nclude "extcode.h"

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

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

        {

        return noErr;

        }

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

        當CIN節點執行時,LabVIEW將調用CINRun函數。CINRun函數將CIN節點的輸入輸出作為參數看待。此外,還可以添加一些其它的后臺例行程序(Routines):CINLoad,CINSave,CINUnload,CINAbort,CINInit,CINDispose和CINProperties。它們分別在不同的時刻執行。例如CINLoad在第一次載入VI時執行。缺省情況下是不執行任何內容的,如果你需要在VI載入時執行某段程序,則可以把該段程序添加在CINLoad例程中。編寫CINLoad例程的代碼如下:

        CIN MgErr CINLoad(RsrcFile reserved) {

        Unused (reserved);

        return noErr;

        }

        通常情況下,我們只需要編寫CINRun函數。本例中,只需要將.c源文件中的CINRun函數改寫如下:

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

        {

        *c=*a+*b;

        return noErr;

        }

        改寫后保存該文件就完成了.c源文件的編寫,下面我們通過Visual C++ 6.0集成開發環境來編譯該源文件。

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

        1.打開VC++ 6.0,在主窗口菜單中選擇File->New...,在彈出的對話框選擇Win32Dynamic-Link Library,設置Project Name為CINExample_add,并在Location欄設置該Project所在路徑,如圖4所示。點擊OK按鈕后,在接下來的對話框中選擇Finish按鈕,在接著彈出的信息提示對話框中點擊OK,就成功創建了一個空的DLL Project。

        圖4VC中創建新DLL Project對話框

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

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


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

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

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



        圖6設置Custom Build為lvsbutil

        6.點擊OK按鈕完成配置后,點擊VC++工具欄中的Build按鈕,編譯工程。編譯過程中,VC++首先創建一個DLL文件,然后調用lvsbutil工具將這個DLL文件轉換為.lsb文件。編譯完成后,打開工程目錄下的Debug文件夾,我們可以看到新生成的.lsb文件:CINExample_add.lsb。下面就可以將該文件加載到CIN節點中了。

        第五步:加載.lsb文件到CIN節點

        回到LabVIEW程序中,右擊第二步中創建的CIN節點,選擇Load Code Resource...,在彈出的文件選擇對話框中雙擊選擇剛才創建好的CINExample_add.lsb文件,這就完成了.lsb文件的加載過程。這時候VI窗口工具欄中的Run按鈕也變為可執行狀態。運行VI可以得到預期結果,如圖7所示。


        圖7利用CIN節點進行加法運算

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


        3、調用Matlab腳本節點

        Matlab腳本節點的介紹

        Matlab腳本節點位于函數面板的“數學→腳本與公式→腳本節點→Matlab腳本節點”。由于Matlab腳本節點中的腳本完全是Matlab中的M文件,運行Matla腳本節點時會啟動Matlab,并在Matlab中執行腳本內容,其支持的函數由Matlab來提供。

        Matlab腳本節點可以通過增加輸入輸出端子來實現LabVIEW和Matlab 腳本節點交互數據。方法為:右擊節點邊框,選擇Add Input或者Add Output選項;可以手動輸入M文件,也可以導入或者導出M文件。方法為:右擊節點邊框,選擇Import或者Export選項。

        利用LabVIEW調用Matlab實例

        在實例中,我們將完成兩個實驗:一個簡單的加法運算,x,y為輸入的兩個加數,z為輸出的求和值;一個三維曲面的顯示,通過改變三維曲面數值,可以展示曲面的不同形狀。程序前面板如圖


        (1)利用matlab節點實現簡單運算

        ①函數面板的“數學→腳本與公式→腳本節點”,將Matlab腳本節點放置在合適的位置。

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

        ③在Matlab Script Node中輸入如下語句:

        z=x+y;

        ④在Matlab Script Node框圖左側上單擊鼠標右鍵,選擇“添加輸入”,在出現的方框中輸入x;重復操作,在方框中輸入y。

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

        ⑤在Matlab Script Node框圖右側上單擊鼠標右鍵,選擇“添加輸出”,在出現的方框中輸入z。

        注意:此時只有一個輸出變量,故只添加一個輸出變量。

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

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

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

        程序框圖如圖所示:


        運行程序,改變數值輸入控件2和3的值,可以看到數值顯示控件隨之改變。同時會啟動Matlab,并在Matlab中自動運行該腳本

        (2)利用Matlab腳本節點實現3D圖形

        ①在函數面板的“數學→腳本與公式→腳本節點”,將Matlab腳本節點放置在合適的位置。

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

        ③在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框圖右側上單擊鼠標右鍵,選擇“添加輸出”,在出現的方框中輸入z。并在z方框中右擊,選擇“選擇數據類型→2-D Array of Real”。

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

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

        最終程序框圖如圖所示:


        運行該VI的同時也會啟動Matlab,并在Matlab中自動運行該腳本,產生如圖所示圖形。


        4、調用庫函數節點(調用DLL)

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

        (1)使用自己開發DLL中的函數。

        (2)調用操作系統或硬件驅動供應商提供的API。

        對于前一種方法來說,又可以通過以下幾步實現:

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

        (b)生成.C或.C++文件,完成實現函數功能的代碼并為函數添加DLL導出聲明;

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


        上一頁 1 2 下一頁

        關鍵詞: Labview接口設

        評論


        技術專區

        關閉
        主站蜘蛛池模板: 二连浩特市| 射阳县| 正定县| 来宾市| 沁阳市| 宁安市| 柳州市| 北宁市| 清远市| 梁平县| 偏关县| 福安市| 宁强县| 同德县| 安西县| 东宁县| 邯郸市| 澄城县| 白水县| 平凉市| 锦州市| 屏东县| 京山县| 方正县| 汉阴县| 图们市| 锡林郭勒盟| 疏附县| 长兴县| 临夏县| 巴林右旗| 皮山县| 句容市| 三台县| 延安市| 正宁县| 科技| 原平市| 宁海县| 武汉市| 盐亭县|