新聞中心

        EEPW首頁(yè) > 測(cè)試測(cè)量 > 設(shè)計(jì)應(yīng)用 > LabVIEW 調(diào)用 C/C++ Dll 詳解

        LabVIEW 調(diào)用 C/C++ Dll 詳解

        作者: 時(shí)間:2017-01-06 來(lái)源:網(wǎng)絡(luò) 收藏
        LabVIEW 在配上NI的采集卡或者別的第三方的硬件,約等于神器(雖然有時(shí)候貴了點(diǎn))。這樣你可以比較集中精力的專注于數(shù)據(jù)處理了,就不用學(xué)習(xí)麻煩的Win32的GUI編程, 也不用關(guān)注和你自己搞的采集板之間的通信了。
        對(duì)于每一個(gè)測(cè)控行業(yè)的程序來(lái)說(shuō),基本上都是:
        初始化-->數(shù)據(jù)采集-->數(shù)據(jù)處理-->數(shù)據(jù)顯示-->數(shù)據(jù)保存-->結(jié)束 的一個(gè)過(guò)程。
        當(dāng)然如果是實(shí)時(shí)的,那么采集,處理,顯示就是在一個(gè)loop里面。當(dāng)然為了保證實(shí)時(shí)性,數(shù)據(jù)處理和數(shù)據(jù)采集不一定在一個(gè)線程里,因?yàn)樘幚淼臅r(shí)候把采集給block住也挺傻的。
        LabVIEW 很容易幫你搞定:
        初始化-->數(shù)據(jù)采集-->數(shù)據(jù)處理-->數(shù)據(jù)顯示-->數(shù)據(jù)保存-->結(jié)束
        但是數(shù)據(jù)處理部分,是和你的學(xué)科緊密相關(guān)的,有時(shí)候算法會(huì)“詭異”到你很難用VI來(lái)實(shí)現(xiàn),那么你就要有C++" target="_blank">C++
        code來(lái)搞了。 那么C/C++ 是如何與LabVIEW 交互的呢,本文來(lái)較詳細(xì)的闡述一下,因?yàn)闇?zhǔn)備采用總分總的寫作手法...所以先來(lái)個(gè)概括...
        1. 把C/C++ code 編譯成Dll
        2. 用LabVIEW的call library node來(lái)調(diào)用。
        難點(diǎn)在于:如何把LabVIEW的數(shù)據(jù)類型和C/C++ 的來(lái)對(duì)應(yīng)。

        控件x相當(dāng)與一個(gè)double,當(dāng)然其類型也是可以選擇的(如右圖所示)。
        boolean 按理說(shuō)應(yīng)該是一個(gè)bool, 但是傳入call library node的時(shí)候,一般要轉(zhuǎn)成unsigned int型。
        cluster其實(shí)就是個(gè)struct ,左圖的cluster是:
        struct tCluster
        {
        double x11; // 類型都可以向右圖那樣自己配置
        double x2;
        int x3;
        };
        對(duì)于string,這里要著重講一下,labview的string類型里面是包含長(zhǎng)度信息的,它不是一個(gè)簡(jiǎn)單的char *
        它是個(gè)LStrHandle類型:定義咋extcode.h 里面(可以在labview目錄下搜到)
        typedef struct {
        int32 cnt;
        uChar str[1];
        } LStr, *LStrPtr, **LStrHandle;
        cnt就是含有多少個(gè)字符,str這個(gè)指針?biāo)傅木褪菙?shù)據(jù)區(qū)的第一個(gè)字符。
        (還有很多沒(méi)寫...明天繼續(xù),排版也雜亂無(wú)章...等全部寫好在整理吧)
        其實(shí)應(yīng)該列個(gè)提綱,大概是:
        1.背景
        2.call library node(CLN) 支持很多數(shù)據(jù)類型
        3.用戶內(nèi)存區(qū) 和 LabVIEW內(nèi)存區(qū)
        4.
        struct tArray
        {
        unsigned int cnt;
        T data[1];
        }; 是神馬? 一堆handle.
        5.怎樣把字符串傳遞給CLN
        6.怎樣把LabVIEW 的 1-D, 2-D, 3-D 數(shù)組傳遞給 DLL
        7.把LabVIEW 的簇和簇?cái)?shù)組傳遞給 DLL


        關(guān)鍵詞: LabVIEWCC++Dl

        評(píng)論


        相關(guān)推薦

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

        關(guān)閉
        主站蜘蛛池模板: 阜新市| 嘉义县| 利津县| 德令哈市| 林周县| 屏山县| 乌兰察布市| 交口县| 绥宁县| 红原县| 石棉县| 正安县| 罗甸县| 丰都县| 津市市| 桐柏县| 闽侯县| 长岭县| 曲沃县| 怀柔区| 库尔勒市| 广河县| 新兴县| 额尔古纳市| 东丰县| 毕节市| 金山区| 甘孜县| 永春县| 元朗区| 涟水县| 鹤庆县| 柏乡县| 襄城县| 东兰县| 涞水县| 壶关县| 东乌珠穆沁旗| 唐河县| 武汉市| 惠州市|