




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
在MATLAB環(huán)境中調(diào)用DLL對(duì)硬件資源訪問的方法饒和昌;趙英俊【摘要】MATLABisahigh-performancescientificandengineeringcomputingsoftwarewithastrongnumericalcalculationandanalysiscapabilities,butitsabilitytoaccessthehardwareisweak.IntheMATLABenvironmentdirectaccesstohardwareresourcescangreatlyfacilitatethevalidationofdataprocessingandalgorithm,basedonthispurposeproposeanextensionofMATLABhardwareaccess,usingMATLABexternalinterfacefunctionstocallthird-partydevices'dynamiclinklibraryexportedfunctionsrealizethegeneralhardwareaccess,andspecificdescriptionofthemethodinthebarometricaltimeterprototypesystemdesign.ThisapproachsimplifiestheMATLABandhardwaredataexchange,providesaneffectivemeansfortheprototypesystemdesignandvalidationofthealgorithm.%MATLAB是一款高性能的科學(xué)與工程計(jì)算軟件,具有強(qiáng)大的數(shù)值計(jì)算和分析能力,但其對(duì)硬件的訪問能力較弱。在MATLAB環(huán)境中實(shí)現(xiàn)對(duì)硬件資源的直接訪問可以極大的方便對(duì)數(shù)據(jù)的處理及算法的驗(yàn)證,基于這種目的提出一種擴(kuò)展MATLAB訪問硬件的方法,通過MATLAB夕卜部函數(shù)接口調(diào)用第三方器件商提供的動(dòng)態(tài)鏈接庫導(dǎo)出函數(shù),在MATLAB平臺(tái)下實(shí)現(xiàn)對(duì)一般硬件的訪問,并具體介紹了該方法在氣壓高度計(jì)原型系統(tǒng)設(shè)計(jì)中的應(yīng)用。該方法簡(jiǎn)化了MATLAB與硬件的數(shù)據(jù)交互,對(duì)于原型系統(tǒng)設(shè)計(jì)和算法的驗(yàn)證提供了一種有效的手段?!酒诳Q】《電子設(shè)計(jì)工程》【年(卷),期】2012(020)014【總頁數(shù)】4頁(P50-52,55)【關(guān)鍵詞】MATLAB;動(dòng)態(tài)鏈接庫;硬件訪問;數(shù)據(jù)采集【作者】饒和昌;趙英俊【作者單位】華中科技大學(xué)機(jī)械科學(xué)與工程學(xué)院,湖北武漢430074;華中科技大學(xué)機(jī)械科學(xué)與工程學(xué)院,湖北武漢430074【正文語種】中文【中圖分類】TP391MATLAB是美國MathWorks公司開發(fā)的高性能的科學(xué)與工程計(jì)算軟件,憑借其強(qiáng)大的科學(xué)計(jì)算和繪圖功能、大量穩(wěn)定可靠的算法庫和簡(jiǎn)潔高效的編程語言,被科技工作者們廣泛應(yīng)用于自動(dòng)控制、數(shù)學(xué)運(yùn)算、信號(hào)分析、圖像處理等各行各業(yè)[1-2]。盡管MATLAB本身是一個(gè)完整的、自成體系的編程和數(shù)據(jù)處理環(huán)境,但由于語言的特性使其訪問硬件的能力相對(duì)較差,這在一定程度上限制了它的使用。對(duì)于那些涉及復(fù)雜算法同時(shí)又需要對(duì)硬件資源進(jìn)行訪問的系統(tǒng),一般的做法是在一個(gè)通用的編程平臺(tái)(如VisualC++、VisualBasic.Delphi等)上實(shí)現(xiàn)對(duì)硬件資源的訪問,而后調(diào)用MATLAB算法對(duì)數(shù)據(jù)進(jìn)行處理。這種方法優(yōu)點(diǎn)是通用性好,程序運(yùn)行效率高,適用大多數(shù)場(chǎng)合,但對(duì)開發(fā)人員編程能力有較高要求,開發(fā)周期較長(zhǎng)。在一些需要快速的驗(yàn)證模型和算法的場(chǎng)合,為充分發(fā)揮MATLAB強(qiáng)大的數(shù)值計(jì)算能力,以MATLAB作為主開發(fā)平臺(tái)來得更為合適。隨著模塊化的設(shè)計(jì)思想在越來越多的產(chǎn)品中得到體現(xiàn),器件生產(chǎn)廠商們一般都會(huì)提供該產(chǎn)品的二次開發(fā)函數(shù)庫,方便了開發(fā)者們對(duì)硬件操作的同時(shí),也使得MATLAB通過外部程序接口實(shí)現(xiàn)對(duì)硬件的訪問成為可能。文中具體論述一種基于動(dòng)態(tài)鏈接庫調(diào)用實(shí)現(xiàn)MATLAB訪問一般硬件的方法,并將該方法用于對(duì)高精度氣壓傳感器MS5803的數(shù)據(jù)采集,實(shí)現(xiàn)了MATLAB與硬件的無縫結(jié)合,極大的方便了數(shù)據(jù)的后續(xù)處理。1動(dòng)態(tài)鏈接庫在具體闡述MATLAB環(huán)境下調(diào)用動(dòng)態(tài)鏈接庫函數(shù)訪問外部硬件之前,有必要對(duì)動(dòng)態(tài)鏈接庫做簡(jiǎn)要介紹。動(dòng)態(tài)鏈接庫英文為DynamicLinkableLibrary,縮寫DLL,最初是為了解決代碼共享的問題而提出的,通俗的理解可以把DLL看成一種倉庫,它提供一些可以直接拿來使用的變量、函數(shù)或類[3]。動(dòng)態(tài)鏈接庫可以使用不同編程語言來編寫,只要符合標(biāo)準(zhǔn)即可。為了加深對(duì)動(dòng)態(tài)鏈接庫函數(shù)調(diào)用的理解,下面以C/C++語言為例簡(jiǎn)要介紹動(dòng)態(tài)鏈接庫的編寫步驟。首先介紹兩組關(guān)鍵字:_declspec(dllimport)這組關(guān)鍵字表示從DLL中導(dǎo)入函數(shù)或者數(shù)據(jù),一般用在DLL對(duì)應(yīng)的頭文件中。_declspec(dllexport)這組關(guān)鍵字表示從DLL中導(dǎo)出函數(shù)或者數(shù)據(jù),一般用在DLL對(duì)應(yīng)的工程文件中。編寫動(dòng)態(tài)鏈接庫函數(shù)的方法與編寫一般函數(shù)的方法基本相同,只不過要對(duì)庫中的可導(dǎo)出函數(shù)進(jìn)行必要的申明。下面以VC環(huán)境下一個(gè)最簡(jiǎn)單的DLL工程dll_test進(jìn)行說明,工程包含dll_test.h和dll_test.cpp兩個(gè)文件。//dll_test.h__declspec(dllexport)intadd(intm,intn);__declspec(dllexport)intsub(intm,intn);//dll_test.cpp#include"dll_test.h”__declspec(dllexport)intadd(intm,intn){return(m+n);}__declspec(dllexport)intsub(intm,intn){return(m-n);}編譯上述dll_test工程即可得到動(dòng)態(tài)鏈接庫dll_test.dll(在Debug或Release目錄下),此動(dòng)態(tài)鏈接庫實(shí)現(xiàn)了add和sub函數(shù)的功能。在解決一些實(shí)際問題過程中,有時(shí)會(huì)遇到只有DLL而沒有與之相對(duì)應(yīng)的頭文件的情況,而MATLAB在調(diào)用DLL文件中的函數(shù)之前,必須具備頭文件中的函數(shù)聲明才行,這樣根據(jù)上述DLL的編寫規(guī)范可以很容易的編寫出與所調(diào)用的DLL相對(duì)應(yīng)的頭文件。2MATLAB調(diào)用C/C++動(dòng)態(tài)鏈接庫從Matlab6.5(R13)起,Matlab提供了對(duì)動(dòng)態(tài)連接庫DLL文件的接口[1]。利用這個(gè)接口,可以在Matlab中調(diào)用動(dòng)態(tài)連接庫導(dǎo)出的函數(shù)。MATLAB加載和使用動(dòng)態(tài)鏈接庫函數(shù)僅通過7~8個(gè)函數(shù)就可以實(shí)現(xiàn),只要掌握這些函數(shù)的使用方法,就掌握了加載和應(yīng)用動(dòng)態(tài)鏈接的基本方法,從而可以在MATLAB平臺(tái)下輕松實(shí)現(xiàn)對(duì)硬件的訪問。利用MATLAB共享庫接口實(shí)現(xiàn)對(duì)外部DLL庫的調(diào)用主要有以下幾個(gè)步驟[4]。1)加載動(dòng)態(tài)鏈接庫文件在使用動(dòng)態(tài)鏈接庫之前,必須將所需的動(dòng)態(tài)鏈接庫加載到MATLAB工作空間中,之后MATLAB才能調(diào)用動(dòng)態(tài)庫中的函數(shù)。函數(shù)lodalibrary用于加載動(dòng)態(tài)鏈接庫,其使用語法如下:loadlibrary(‘shrlib',‘hfile’)loadlibrary函數(shù)有兩個(gè)輸入?yún)?shù),參數(shù)shrlib表示庫文件的名稱,參數(shù)hfile為對(duì)應(yīng)庫的C語言頭文件,C語言的頭文件用于向MATLAB提供基本的函數(shù)說明。下面以一示例說明loadlibrary的用法,在命令提示窗口中輸入如下命令:>>loadlibrary(‘dll_test’,’dll_test.h')(1)通過以上命令即將dll_test.dll加載到MATLAB工作空間中。瀏覽動(dòng)態(tài)庫中的函數(shù)成功加載動(dòng)態(tài)鏈接庫后便可調(diào)用庫中提供的函數(shù)。與函數(shù)使用類似,在調(diào)用函數(shù)之前首先要明確函數(shù)各輸入輸出參數(shù)的含義及數(shù)據(jù)類型。一般情況下動(dòng)態(tài)庫編寫者會(huì)提供相應(yīng)函數(shù)的幫助文檔,以便用戶理解函數(shù)的含義并對(duì)其進(jìn)行調(diào)用。動(dòng)態(tài)鏈接庫大多使用C或者C++語言編寫,然而標(biāo)準(zhǔn)的C或C++數(shù)據(jù)類型與MATLAB所使用的數(shù)據(jù)類型不盡相同,因此調(diào)用函數(shù)前首先要弄清被調(diào)用函數(shù)參數(shù)對(duì)應(yīng)于MATLAB環(huán)境下的數(shù)據(jù)類型。使用函數(shù)libfunctions可在MATLAB環(huán)境下查看動(dòng)態(tài)庫中函數(shù)的聲明,并將原C函數(shù)中參數(shù)類型以對(duì)應(yīng)MATLAB參數(shù)類型顯示,之后便能正確的按照MATLAB語法規(guī)則進(jìn)行調(diào)用。libfunctions用法如下:libfunctions(‘libname’,‘-full’)參數(shù)libname為已加載到MATLAB工作空間的動(dòng)態(tài)庫文件名,-full為可選參數(shù)用于輸出函數(shù)的詳細(xì)說明。>>libfunctions(‘dll_test’,‘-full’)(2)輸入語句(2)后命令行中會(huì)顯示所有dll_test庫中的函數(shù),如下:Functionsinlibrarydll_test:int32add(int32,int32)int32sub(int32,int32)調(diào)用動(dòng)態(tài)庫中的導(dǎo)出函數(shù)明確了動(dòng)態(tài)庫中函數(shù)的參數(shù)類型后,便可利用MATLAB提供的calllib接口函數(shù)對(duì)庫中函數(shù)進(jìn)行調(diào)用。calllib函數(shù)使用方法如下:[x1,...,xN]=calllib(‘libname’,‘funcname’,arg1,...,argN)參數(shù)libname表示被調(diào)用函數(shù)所在的庫文件名,funcname為被調(diào)用的函數(shù)名稱,arg1,...,argN為函數(shù)funcname的輸入?yún)?shù),x1,...,xN為函數(shù)funcname的返回值。以下為dll_test.dll中add函數(shù)的調(diào)用示例:>>calllib(‘dll_test’,‘a(chǎn)dd’,1,2)ans=3卸載動(dòng)態(tài)鏈接庫當(dāng)不再需要對(duì)動(dòng)態(tài)庫中的函數(shù)進(jìn)行訪問后,應(yīng)及時(shí)將動(dòng)態(tài)庫從MATLAB工作空間中卸載。與加載動(dòng)態(tài)庫類似MATLAB也提供對(duì)應(yīng)的卸載動(dòng)態(tài)庫的命令unloadlibrary,例如:>>unloadlibrary(‘dll_test’)通過以上4步便可實(shí)現(xiàn)在MATLAB環(huán)境下對(duì)動(dòng)態(tài)鏈接庫導(dǎo)出函數(shù)的調(diào)用。在實(shí)際應(yīng)用中通過調(diào)用硬件商提供的動(dòng)態(tài)鏈接庫或者將其提供的API函數(shù)編譯為動(dòng)態(tài)鏈接庫,便可實(shí)現(xiàn)在MATLAB平臺(tái)下實(shí)現(xiàn)對(duì)硬件資源的訪問。3用MATLAB實(shí)現(xiàn)傳感器的數(shù)據(jù)采集MS5803是瑞士Intersema公司生產(chǎn)的一款集成有壓阻式壓力傳感器和ADC接口的SMD混合集成電路,具有體積小(6.2x6.4mm)、穩(wěn)定性好、低功耗(1MA).高分辨率、高精度等特點(diǎn),其內(nèi)置的24位A/D轉(zhuǎn)換器可實(shí)現(xiàn)對(duì)壓力和溫度的采樣,通過標(biāo)準(zhǔn)I2C和SPI接口與外部設(shè)備通信[5]。本設(shè)計(jì)以MATLAB為軟件開發(fā)平臺(tái),MS5803為目標(biāo)器件,通過DLL調(diào)用方式實(shí)現(xiàn)對(duì)傳感器的數(shù)據(jù)采集,并對(duì)氣壓高度算法進(jìn)行快速測(cè)試與驗(yàn)證。氣壓高度計(jì)的原型系統(tǒng)結(jié)構(gòu)框圖如圖1所示[6]。圖1氣壓高度計(jì)原型系統(tǒng)結(jié)構(gòu)Fig.1Structurediagramofabarometricaltimetryprototype圖1中GY7502為USB轉(zhuǎn)SPI適配器,一端與筆記本相連,另一端與MS5803連接,MS5803選擇工作在SPI接口模式。該原型系統(tǒng)通過一個(gè)簡(jiǎn)單的接口適配器便建立了PC與傳感器的連接,之后即可按照一定的通信規(guī)則進(jìn)行編程完成對(duì)MS5803數(shù)據(jù)采集,輕松的實(shí)現(xiàn)了數(shù)據(jù)由目標(biāo)器件到上位機(jī)的傳輸,后續(xù)借助于PC強(qiáng)大的運(yùn)算功能快速的對(duì)算法和模型進(jìn)行測(cè)試。下面以MATLAB環(huán)境下實(shí)現(xiàn)對(duì)MS5803數(shù)據(jù)的采集為例,具體介紹前述關(guān)于擴(kuò)展MATLAB硬件訪問能力的方法。GY7502型USB-SPI適配器以動(dòng)態(tài)鏈接庫的方式提供了開發(fā)所需的接口函數(shù)并提供了各功能函數(shù)的頭文件定義,開發(fā)者只需要熟悉各個(gè)接口函數(shù)的定義及其功能便能方便的實(shí)現(xiàn)對(duì)SPI接口器件的操作,而無需關(guān)注底層硬件的具體實(shí)現(xiàn)。以下為本設(shè)計(jì)中使用到了庫函數(shù)聲明。//GY7502.hDWORD__stdcallGY7502_Open();//打開設(shè)備DWORD__stdcallGY7502_Close();〃關(guān)閉設(shè)備DWORD__stdcallGY7502_SetConfig(pGY7502_CONFIG_INFOpConfigInfo);〃設(shè)置通信頻率及SPI總線模式DWORD__stdcallGY7502_Read(pGY7502_DATA_INFOpDataInfo);//讀SPI總線DWORD__stdcallGY7502_Write(pGY7502_DATA_INFOpDataInfo);〃寫SPI總線pGY7502_CONFIG_INFO和pGY7502_DATA_INFO為GY7502.h定義的兩種結(jié)構(gòu)體數(shù)據(jù)類型分別用于配置GY7502適配器工作模式和作為接收或發(fā)送數(shù)據(jù)的緩存。MS5803在出產(chǎn)的時(shí)候生產(chǎn)廠商已經(jīng)對(duì)其進(jìn)行了初始標(biāo)定,并將標(biāo)定系數(shù)C1~C6固化在內(nèi)部的128位PROM中,傳感器采樣轉(zhuǎn)換輸出的原始數(shù)據(jù)D1和D2需要經(jīng)過系數(shù)C1~C6按照MS5803數(shù)據(jù)手冊(cè)提供的模型進(jìn)行修正,才能計(jì)算出真實(shí)意義上的壓力值和溫度值。為此傳感器每次上電后系統(tǒng)需要先讀取出系數(shù)C1~C6,之后才能進(jìn)行壓力和溫度的采樣,基本工作流程如圖2所示。圖2數(shù)據(jù)采集基本工作流程Fig.2Flowchartofdataacquisition下面給出在MATLAB環(huán)境下通過調(diào)用動(dòng)態(tài)鏈接庫的方法實(shí)現(xiàn)傳感器數(shù)據(jù)采集的關(guān)鍵程序段。%sample.m%加載GY7502所需的動(dòng)態(tài)鏈接庫loadlibraryGY7502GY7502.h%定義配置參數(shù)和讀寫緩沖SetConfigInfo=libstruct('GY7502_CONFIG_INFO')DataInfo=libstruct('GY7502_DATA_INFO')D1=libstruct('GY7502_DATA_INFO')D2=libstruct('GY7502_DATA_INFO')???%打開設(shè)備建立連接calllib(‘GY7502’, ‘GY7502_Open’)%配置GY7502工作模式calllib(‘GY7502’,‘GY7502_SetConfig’,GY7502_CONFIG_INFO)%復(fù)位傳感器,讀取標(biāo)定系數(shù)C1~C6%啟動(dòng)一次采樣???%讀取壓力和溫度轉(zhuǎn)換數(shù)值D1、D2[result,D1]=calllib(‘GY7502’,‘GY7502_Write’,DataReadD1)[result,D2]=calllib(‘GY7502’,‘GY7502_Write’,DataReadD2)%計(jì)算溫度T及溫度補(bǔ)償后的壓力P%采樣結(jié)束斷開連接calllib(‘GY7502’, ‘GY7502_Close’)%卸載動(dòng)態(tài)鏈接庫unloadlibraryGY7502完成數(shù)據(jù)采集之后,便可進(jìn)行壓力與高度換算。由于數(shù)據(jù)直接引入到MATLAB工作環(huán)境,借助于MATLAB強(qiáng)大的數(shù)值計(jì)算功能,極大地方便了后續(xù)算法及模型的測(cè)試工作,同時(shí)也降低了開發(fā)者的工作強(qiáng)度。4結(jié)論MATLAB強(qiáng)大的數(shù)值計(jì)算能力深受廣大科技工作者的喜愛,但其對(duì)硬件的支持能力相對(duì)較弱。文中通過調(diào)用動(dòng)態(tài)鏈接庫的方法,增強(qiáng)了MATLAB對(duì)硬件的訪問能力,使得開發(fā)者可
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 28 面團(tuán)長(zhǎng)大了(教學(xué)設(shè)計(jì))-三年級(jí)科學(xué)上冊(cè)青島版(五四制)
- 寧夏民族職業(yè)技術(shù)學(xué)院《德育論》2023-2024學(xué)年第二學(xué)期期末試卷
- 浙江農(nóng)業(yè)商貿(mào)職業(yè)學(xué)院《Oracle數(shù)據(jù)庫應(yīng)用》2023-2024學(xué)年第二學(xué)期期末試卷
- 青島飛洋職業(yè)技術(shù)學(xué)院《運(yùn)動(dòng)(二)》2023-2024學(xué)年第二學(xué)期期末試卷
- 中國石油大學(xué)(北京)《文化人類學(xué)》2023-2024學(xué)年第二學(xué)期期末試卷
- 益陽職業(yè)技術(shù)學(xué)院《數(shù)字多媒體作品創(chuàng)作》2023-2024學(xué)年第二學(xué)期期末試卷
- 廣東潮州衛(wèi)生健康職業(yè)學(xué)院《土地測(cè)量學(xué)實(shí)驗(yàn)》2023-2024學(xué)年第二學(xué)期期末試卷
- 集寧師范學(xué)院《數(shù)控加工工藝及編程》2023-2024學(xué)年第二學(xué)期期末試卷
- 泰州2024年江蘇泰州靖江市公安局補(bǔ)錄招聘警務(wù)輔助人員18人筆試歷年參考題庫附帶答案詳解
- 煙臺(tái)工程職業(yè)技術(shù)學(xué)院《財(cái)務(wù)共享理論與實(shí)務(wù)》2023-2024學(xué)年第二學(xué)期期末試卷
- 2024年廣東省《輔警招聘考試必刷500題》考試題庫含答案
- 國家科技安全教學(xué)課件
- DB3301T 1088-2018 杭州龍井茶栽培技術(shù)規(guī)范
- 2010浙G22 先張法預(yù)應(yīng)力混凝土管樁
- 安徽省部分省示范中學(xué)2025屆高三第一次模擬考試英語試卷含解析
- 工程機(jī)械租賃服務(wù)方案及保障措施 (二)
- 國網(wǎng)基建安全管理課件
- 部編版初中語文7-9年級(jí)教材必背古詩詞、古文99篇詳細(xì)解析及欣賞
- DB36T 1393-2021 生產(chǎn)安全風(fēng)險(xiǎn)分級(jí)管控體系建設(shè)通則
- 檔案三合一制度培訓(xùn)
- Unit 1 I go to school by bus. Period 4(說課稿)-2023-2024學(xué)年教科版(廣州)英語二年級(jí)下冊(cè)
評(píng)論
0/150
提交評(píng)論