新聞中心

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

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

        作者: 時間:2017-01-09 來源:網絡 收藏

        下面的內容將具體講解:

        配置Call library function node (CFN)

        無論在labview中使用自己開發的DLL,或者硬件驅動供應商(操作系統)提供的API,都可以通過配置CFN來完成。如下圖



        在CFN圖標的右鍵菜單選擇“配置”,打開配置對話框,通過該對話框,可以指定動態庫存放路徑、調用函數名以及傳遞給函數的參數類型和函數返回值的類型。在配置完成后,CFN節點會根據用戶的配置自動更新其顯示。



        通過browse按鈕或者直接在library name or path輸入框中指定調用函數多在.dll文件的路徑。

        通過browse按鈕下的控件用戶可以指定多個線程同時調用DLL。默認情況下,labview以run in UI Thread方式調用DLL,調用的函數將直接在用戶線程中運行。另外一種方式是遞歸方式reentrant,在這種情況下可以允許多個線程同時調用DLL中的函數。但要確保正常調用,必須使dll中的代碼線程安全。

        在“Function Name”輸入框中指定要調用函數的函數名。
        通過“Call Conventions”下拉列表框指定調用DLL 中函數的方式。可以指定調用方式為“C”(默認方式)或Windows 標準調用方式“stdcall”。一般來說用“C”方式調用開發人員自己寫的DLL 函數,而 “stdcall”一般做為標準調用方式來調用windows 的API
        通過Parameter 域可以指定所調用函數的返回值類型。默認情況下CFN 節點沒有輸入參數而且只有一個void 類型的返回參數。該參數由CFN 節點第一對連接點的右端返回,代表CFN 執行結果。如果返回參數的類型是void 類型,則CFN 連接點為未啟用狀態(保持為灰色)。CFN 的每一對連接點代表一個輸入或輸出參數,若要傳遞參數給CFN 則將參數連接至相應連接點的左端,若要讀取返回值,則將相應連接點的右端連接到Indicator。CFN 返回參數的類型可以是Void,Numeric 或String。只能為返回參數指定Void 類型,輸入參數不能指定為Void 類型。調用的函數沒有返回值時,指定CFN 的返回參數類型為void 類型。即使參數有確定類型的返回值,也可以指定CFN 的返回類型為Void,但是此時,函數的返回值將被忽略。有些時候,調用的函數返回值不是以上三種類型,可以使用與以上三種類中有相同大小的一個來代替。例如如果調用的函數返回一個Char 類型數據,則可以用一個8-bit unsigned integer Numeric 類型來代替。此外,由于LabVIEW 中沒有指針,因此調用DLL 中的返回指針的函數似乎不可能。但是可以設定返回值類型為一個與指針有相同大小的Integer 類型,LabVIEW 將把地址以整型值來看待,并且用戶可以在以后的調用中直接使用它。

        通過Parameter 域和其右邊的“Add a Parameter Before”,“Add a Parameter After” 和“Delete thisParameter”三個按鈕可以增加、刪除以及修改CFN 的輸入參數和類型。當用戶選擇某參數的類型后,其詳細的數據類型列表和參數傳遞方式列表將顯示出來,以方便進行詳細設定。下表列出了可以設定的輸入參數類型及其詳細數據類型信息。



        有時可能在CFN 配置對話框中并不能找到要傳遞給它的參數類型,在這種情況下可以通過下面方法來解決。如果參數不含指針,則可以通過Flatten to String 函數將參數轉換為字符串,并將此字符串指針傳遞給函數。還有其它一些技巧請參見NI 手冊。設定后的最終結果顯示在“Function Prototype”文本框中,在確認前,可以在此檢查設定是否正確。如果不正確可以在此修改設定。

        調用自己開發DLL中的函數

        開發人員可以在LabVIEW 中指定DLL 函數的原型,然后在外部IDE 中完成代碼并編譯生成.dll 文件以
        供項目使用。
        下面就以一個簡單的求數組求和的項目為例來說明這種開發過程。
        1. 在LabVIEW 中創建DLL 函數原型。
        a) 在LabVIEW 的diagram 面板上添加一個CFN 并通過其右鍵菜單打開CFN 的配置對話框;
        b) 使“Library Name or Path”輸入框為空;
        c) 指定函數名“Function Name”和調用方式“Calling Conventions”分別為add_num和C;
        d) 重命名返回參數的名稱為“error”,并指定其類型為Numeric 的Signed 32-bit Integer;
        e) 用“Add a Parameter After”按鈕添加第一個參數p,指定其類型為Array 的4-byte Single 并設定Array Format 為Array Data Pointer;
        f) 用“Add a Parameter After”按鈕添加第二個參數size,指定其類型為為Numeric 的Signed32-bit Integer 并設置參數傳遞方式為Value;
        g) 用“Add a Parameter After”按鈕添加第三個參數sum,指定其類型為為Numeric 的4-byteSingle 并設置參數傳遞方式為Pointer to Value;
        h) 至此,函數的原型應如下圖所示

        long add_num(float *p, long size, float *sum);


        i) 確定后會發現CFN 根據配置自動進行了更新更新后的情況如圖示。



        2. 生成.C 或.C++文件,完成實現函數功能的代碼并為函數添加DLL 導出聲明;
        在CFN 節點上通過右鍵菜單選擇“Create .C File…”生成mydll.c 文件,其內容如下:



        將以下代碼插入到句之后實現函數的功能。
        int i;
        float tmpSum = 0;
        if(p != NULL)
        {
        for(i=0; i < size; i++)
        tmpSum = tmpSum + p[i];
        }
        else
        return (1);
        * sum = tmpSum;
        return (0);
        在完成實現函數功能的代碼后,還必須為函數添加導出聲明以便能在LabVIEW 中使用這些函數。
        C/C++聲名導出函數的關鍵字是_declspec (dllexport),使用該關鍵字可以代替模塊定義文件。
        對于此處的例子來說,只要在函數聲明和定義部分添加關鍵字即可。最終代碼如下:



        3. 在外部IDE(以VC++為例)中創建DLL 項目并編譯生成.dll 文件。
        用VC++ 6.0 進行編譯生成.dll 文件的步驟如下:
        a) 在VC++中創建一個DLL 項目,如果在DLL 中沒有使用MFC 就選擇創建“Win32Dynamic-Link Library”,否則選擇“MFC AppWizard(dll)”,對此例子來說選擇前者。選定后進入下一步選擇創建一個空的DLL 項目。
        b) 通過Project»Add to Project»Files 添加mydll.c 到創建的mydll 項目之中
        c) 通過Project»Settings 打開項目配置對話框,選擇C/C++選項卡。
        d) 配置項目的All Configurations。選擇Settings For 下拉列表框中的All Configurations,選擇Category下拉列表框中的Code Generation,最后設置Struct member alignment 為1 Byte。



        e) 配置項目的Release 版本。選擇Settings For 下拉列表框中的Win32 Release,選擇Category下拉列表框中的Code Generation,最后從Use run-time library 下拉列表框中選擇Multithreaded DLL。配置結果如圖。




        f) 配置項目的Debug 版本。選擇Settings For 下拉列表框中的Win32 Debug,選擇Category
        下拉列表框中的Code Generation,最后從Use run-time library 下拉列表框中選擇Debug
        Multithreaded DLL。配置結果如圖


        4. 在LabVIEW 項目中調用.dll 中的函數。創建如圖所示的VI,其中Array 為Representation»Single Precision 類型的數組,Sum 為Representation»Single Precision 類型的Indicator, error 為Representation»Long 類型的Indicator。運行后可以看到對數組求和的結果。




        調用API的例子不細述了。

        5、調用ActiveX控件:不細述。看labview自帶的例子。

        6、調用.dll程序集和共享庫。通過.net容器,查看自己編寫的光功率計采樣程序。有時間會加到這里面來。


        上一頁 1 2 下一頁

        關鍵詞: Labview接口設

        評論


        技術專區

        關閉
        主站蜘蛛池模板: 上林县| 沂水县| 涞水县| 双牌县| 高密市| 新竹县| 台州市| 许昌县| 昔阳县| 五莲县| 安阳市| 贵州省| 山丹县| 通州区| 循化| 筠连县| 延川县| 江津市| 利津县| 鄂托克旗| 长乐市| 包头市| 亚东县| 天门市| SHOW| 邛崃市| 海阳市| 永平县| 泰兴市| 宣汉县| 隆化县| 尉氏县| 名山县| 碌曲县| 桐乡市| 富源县| 临洮县| 会宁县| 新巴尔虎右旗| 旅游| 芷江|