新聞中心

        EEPW首頁 > 手機與無線通信 > 設計應用 > 彈上通信系統的LabVIEW與單片機的通信技術

        彈上通信系統的LabVIEW與單片機的通信技術

        作者: 時間:2011-04-12 來源:網絡 收藏

        ③編譯C8051F340UsbInl.c文件,生成可被執行的C8051F340UsbInl.1sb。以VC++為例編譯CIN節點源文件。在VC++下創建C8051F340UsbInl.mak文件,內容如下:
        c.jpg
        在VC++下點擊new\project\make file,輸入文件名C8051F340UsbInl后點擊為OK和Finish按鈕。將C8051F340UsbInl.c和C8051F340U-sbInl.mak一起復制到C8051F340UsbInl文件夾下,重新打開C8051F340UsbInl工作臺,按F7可生成C8051F340UsbInl.1sb文件。
        ④右擊選用的CIN圖標,選擇“加載代碼資源”并選擇C8051F340UsbInl.1sb文件。至此,一個基于CIN的讀USB端口1的VI創建完畢。
        上面是一個利用CIN創建開發USB驅動的VI的步驟,實際開發過程要麻煩很多,需要對設備及協議相當熟悉。因此,利用CIN實現USB受到一些限制。

        2 調用DLL實現USB
        開發USB設備時,不僅要面向USB控制器編程還要面向Windows編程(如果上位機用Windows操作),對不熟悉USB協議的用戶而言是個難題。為了縮短用戶開發USB設備時間,生產廠家往往會把對USB設備進行操作的函數封裝成DLL(Dynamic Link Library,動態鏈接庫)提供給用戶。dll文件是一種可執行文件,允許程序共享執行特殊任務必需的代碼和其他資源,與語言無關,可以被任何支持DLL的語言編寫的應用程序訪問。
        Silicon Labs公司針對USB系列為USB驅動程序開發提供了USBXpress開發套件,其中的SiUSBXp.dll包含了23個函數。一個簡單的USB通信程序,通常要用到SiUSBXp.dll中的SI_GetNumDevices、SI_SetTimeouts、SI_Open、SI_Read、SI_Write和SI_Close等幾個函數。在中調用dll文件有兩種方法,下面將分別介紹。
        首先是利用CLF(調用庫函數節點)節點調用SiUSBXp.dll,一般步驟如下:
        ①放置CLF節點并通過路徑加載dll文件。CLF節點位于“函數選板”一“互連接口”一“庫與可執行庫文件”子選板下。
        ②在加載的dll文件里選擇要用到的函數并進行參數配置。根據USBXpress開發手冊,對每一個被調用的函數配置合適的參數。
        ③配置參數完成之后,每一個函數就是一個VI,可在程序中調用。
        其次是通過導入共享庫的方法調用SiUSBXp.dll。
        導入共享庫的實質是將dll文件中的函數自動生成對應的VI。函數的每個參數可在頭文件包含以及預處理定義條件下在生成的VI中顯示出來,與利用CLF相比較,省去了手動配置參數的步驟。使用方法如下:新建一個VI,點擊“工具”一“導入共享庫”,選擇為用戶創建共享庫;點擊下一步,在“選擇共享庫及頭文件”頁面加載.dll文件和.h文件的路徑;點擊下一步,在預處理定義中添加預處理說明(如果需要添加);點擊下一步,等待解析頭文件并選擇待轉換函數;點擊下一步,進行項目庫設置配置,連續點擊下一步,直至所有選中的函數生成VI存放用戶庫里(默認狀態)。調用時,在“函數選板”一“用戶庫”一“SiUSBXp”,選擇在LabVIEW程序設計中用到的VI。
        以上兩種調用DLL實現USB通信的方法具體操作不一樣,但本質都是利用USB廠家提供的dll文件訪問USB設備。圖1為LabVIEW調用DLL實現一個簡單USB通信的流程。

        d.jpg


        LabVIEW通過調用dll文件大大縮減了實現USB通信開發工作量,但最關鍵也是最難的一步在于給函數配置參數。通常來講,DLL主要用C/C++等文本語言開發,有些參數類型和LabVIEW不匹配,直接調用無法正常使用。為了解決這個問題,需要用戶對參數進行修改或者對原有的dll文件進行二次開發,加大了工作量。



        評論


        相關推薦

        技術專區

        關閉
        主站蜘蛛池模板: 石柱| 日喀则市| 新民市| 绵竹市| 毕节市| 奉化市| 金寨县| 开封县| 澄迈县| 鸡西市| 阳信县| 精河县| 方山县| 佛山市| 东源县| 杭锦后旗| 重庆市| 象州县| 措美县| 徐闻县| 海盐县| 滨海县| 来安县| 普兰县| 成武县| 布尔津县| 渝中区| 桐乡市| 沙湾县| 集贤县| 营山县| 环江| 通山县| 武威市| 分宜县| 汉川市| 达州市| 塔城市| 西盟| 福海县| 崇信县|