新聞中心

        EEPW首頁 > 模擬技術 > 設計應用 > LabVIEW與C接口設計

        LabVIEW與C接口設計

        作者: 時間:2012-03-23 來源:網絡 收藏

        設計

        介紹一種的設計方法。利用此接口方法,可以根據實際應用的要求,擴展的功能。
          關鍵詞:LabVIEW;CIN;Visual C++

        Wuxi 214028, China)
          LabViEW提供支持VXI總線、GPIB總線、RS?232串行總線接口硬件的驅動程序庫,但它對物理內存的操作受到限制,且對硬件操作的實時性不好。但它提供了CIN(Code Interface Node)節點。用戶可在LabVIEW中確定CIN節點的入口與出口參數個數類型,在C編譯環境下,生成.lsb文件,然后在LabVIEW中對CIN節點選擇Load cin object code,最后將該節點封裝成一個VI,由主程序調用。采用CIN節點,也可充分利用Win95支持多線程的功能,提高運行效率,利用主線程監控各子線程,有效地避免因硬件通信錯誤而導致程序被掛起的現象,同時,可充分利用Win95有效的內存管理技術,提高數據處理及運算速度。
        2.1VI設計
          首先在塊流圖(Block Diagram)上放置一個CIN VI,然后通過CIN彈出菜單中的Add Parameter增加接線端子(Terminal),通過接線端子來標識CIN的輸入和輸出。接線端子通常有輸入輸出接線端子(Input?Output Terminal)和輸出接線端子(Output?Only Terminal),在缺省情況下,接線端子是輸入輸出接線端子,其左邊是輸入,而右邊是輸出。在生成的代碼中,與輸入輸出接線端子對應的是一個參數,通過該參數,數據輸入CIN,CIN可以使用該參數的值或修改參數的值能夠由該參數返回;如果輸入輸出接線端子的右邊沒有使用,即只有輸入,則CIN只能使用該參數的值而不能修改它。對于輸出接線端子,它只有輸出端,沒有輸入端。由LabVIEW在內存中設置空間保存CIN的返回值。在定義了CIN接線端子后,將設定的數據控制器(Control,連接輸入)、數據指示器(Indicator,連接輸出)與對應的接線端子用線(Wire,代表數據流)連接起來,這樣將確定所生成代碼中的參數類型。
          上面的過程只是定義了CIN的內部接口,還必須定義VI的編程接口,即肖像/連接器,通過它才能在程序中調用設計好的VI。在肖像/連接器的設計中,盡量使所畫的肖像能夠表達出所設計的VI的功能,采用在肖像上標識該VI名稱的方法。連接器則是標明肖像的輸入輸出屬性,數據和信息通過連接器的端點在兩個VI間傳遞。這樣就設計好了一個VI,但要給它裝入目標代碼后才能執行。
        2.2生成.c文件
          在設計好CIN VI后,可用LabVIEW生成C語言格式的.c文件。下面是我們設計的StdCMD.VI所生成的StdCMD.c文件:
          
          在所生成的文件中,自動包含了文件extcode.h,它是定義能夠被CIN使用的基本數據類型和外部子程序的頭文件。如果設計的CIN代碼含有系統調用,還必須包含文件hosttype.h。當CIN代碼執行時,LabVIEW調用CINRun函數,通過CINRun函數的參數傳遞VI的輸入輸出值。LabVIEW定義的程序返回值是MgErr數據類型,在執行完CIN代碼后,LabVIEW能夠檢查返回值并確定代碼執行是否有錯誤。
        2.3用戶代碼設計
          在CINRun函數體內編寫用戶代碼是實現所設計的CIN VI功能的關鍵。在我們所設計的5個VI中,這部分代碼的編寫主要是利用設計好的驅動程序完成多機測控系統的控制任務,將驅動程序的接口函數封裝在VI內,在用LabVIEW編制測試軟件時,通過調用VI來實現對多機測控系統的控制操作。
        2.4編譯代碼生成.lsb文件
          在Windows95/98下,利用Visual C+ 5.0 IDE編譯設計代碼,具體操作過程如下:
          (1)創建一個新的DLL項目。在Visual C++ 5.0 IDE環境中選擇菜單命令FileNew…..在彈出的對話框中New:域中選擇Project Workspace項,按OK鍵。在接著彈出的對話框中Type:域中選擇Dynamic?Link Library項,在Name:域中輸入StdCMD(該項目的名稱),在Platforms:域中選擇Win32(表示將要生成的DLL是32位的),在Location:域中輸入(或按Browser…鍵,選擇)源代碼文件所在的路徑(注:編譯過程中生成的中間文件和可執行代碼也會產生在這個路徑下),按Create…鍵完成DLL項目的創建。
          (2)把CIN的目標文件和運行庫添加到項目中。選擇菜單InsertFiles into Project…。把文件…\StdCMD\StdCMD.c添加到項目中;文件把存放在子目錄…\LABVIEW\Cintools\Win32下的文件cin.obj,labview.lib,lvsb.lib和lvsbmain.def添加到項目中。這些文件對于創建CIN節點都是必須的;把項目包含的頭文件(.h文件)添加到項目中,這些文件必須在同一目錄(文件夾)中。
          (3)把生成節點的工具所在子目標添加到包含路徑中。選擇菜單命令…,在彈出的對話框中,選中Settings For:域中的全部內容;選中C/C++標簽,將其中的Category置為Preprocessor;在Additional include directories域中輸入CIN節點工具所在的子目錄…\LabVIEW\Cintools。
          (4)設置校準為1Byte。選擇菜單命令…。在彈出的對話框中,選出Settings For:域中的全部內容;選中C++標簽,將其中的Category置為Code Generations;從Struct member alignment域中選擇1Byte。
          (5)選用多線程run-time函數庫。選擇菜單命令…,在彈出的對話框中,選出Settings For:域中的全部內容;選中C/C++標簽,將其中的Category置為Code Generations;從Use run?time library域中選擇Multithreaded。
          (6)建立一個定制的生成命令來運行lvsbutil程序。選擇菜單命令…在彈出的對話框中,選中Settings For:域中的全部內容;選中Custom Build標簽,在Build command(s):域中輸入…\LabVIEW\Cintools\Win32\lvsbutil$(TargeName)-d$(WkspDir)\$(OutDir);在Output file(s):域中輸入$(OutDir)$(TargetName).lsb。
          (7)執行生成動態庫命令。執行菜單命令Build?Build StdCMD.Dll。編譯連接正常的情況下,Visual C++編輯器會按照定制的要求在…\StdCMD\debug目錄下生成StdCMD.lsb文件。
          由于編譯代碼的過程比較煩瑣,容易出錯,因此我們設計了CIN模板應用向導(CinTemp AppWizard),并給出CinTemp.awx和CinTemp.pdb文件。將其添加到Visual C++ 5.0 IDE中,可以由用戶方便地自動生成編譯CIN代碼的項目。
        2.5裝載CIN目標代碼
          裝載CIN目標代碼是將生成的.lsb文件裝入VI的過程。這一過程將目標代碼裝入內存并與VI的前面板/塊流圖鏈接起來,保存VI后,即可在程序中調用該VI實現設定的功能。這一過程的操作是在LabVIEW環境中打開StdCMD.VI程序,將光標指到框圖中的CIN節點按右鍵。選中彈出菜單中的命令,將StdCMD.lsb文件裝載到CIN節點上。在使用過程中,也可修改CIN代碼以擴充其功能,只需重新裝入新的.lsb文件即可。


        關鍵詞: LabVIEW C接口

        評論


        相關推薦

        技術專區

        關閉
        主站蜘蛛池模板: 调兵山市| 桑日县| 绥阳县| 新河县| 阿拉尔市| 青阳县| 西和县| 吴江市| 托克逊县| 永年县| 通州区| 永清县| 城市| 阿拉善左旗| 盐津县| 日喀则市| 五原县| 石河子市| 应用必备| 礼泉县| 漳州市| 绥化市| 克什克腾旗| 偏关县| 吉木萨尔县| 岢岚县| 灵武市| 新乡县| 邯郸县| 钟祥市| 阜新| 温州市| 宣汉县| 锡林郭勒盟| 德江县| 嘉峪关市| 河间市| 三明市| 奉节县| 城固县| 洛川县|