




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認(rèn)領(lǐng)
文檔簡介
1、注:本程序可直接在 MATLAB 2017a 中運行該腳本文件用于學(xué)習(xí) GPS數(shù)據(jù)的讀取,需要做其他用途請自行修改代碼本腳本文件的前面幾行代碼是要設(shè)置的一些參數(shù)默認(rèn)使用 COM3(需視情況修改)波特率設(shè)為 GPS模塊默認(rèn)的 38400下面為程序源碼clearnum_execute = 100; %執(zhí)行次數(shù)num_SingleRead = 150; %單次從串口讀取的字節(jié)數(shù)( 最好設(shè)置足夠大(最低大概設(shè)為80 ),保證單次讀取的數(shù)據(jù)包含一條完整的GPS數(shù)據(jù) )Timedelay = 0.2; %用于延時讀取串口數(shù)據(jù)BaudRate = 38400; % Terminator = CR;讀取數(shù)據(jù)的
2、波特率num_MaxTry = 5; %打開串口的最多嘗試次數(shù)BytesAvailableFcnCount = 1000;設(shè)置參數(shù)delete(instrfindall); %串口打開失敗時使用此句delete(s);clear s % 串口打開失敗時使用此句serial3 = serial(COM3);串口設(shè)置serial3.BytesAvailableFcnMode = byte;% serial3.InputBufferSize = 38400; %輸出波特率serial3.BaudRate = BaudRate; %讀入波特率serial3.OutputBufferSize = 102
3、4; serial3.BytesAvailableFcnCount = BytesAvailableFcnCount; serial3.ReadAsyncMode = continuous;serial3.Terminator = Terminator;打開串口count_opentimes = 1;while contains(serial3.status,closed) 0 & count_opentimes num_MaxTryfopen(serial3); %打開串口count_opentimes = count_opentimes+1;endif contains(serial3.s
4、tatus,open) 0)GPS_DataStrs = fread(serial3,num_SingleRead,char);%一次讀出 10 個字符GPS_DataStrs = reshape(GPS_DataStrs,1,);GPS_DataStrs = split_str2strs(GPS_DataStrs);GPS_Data_tmp = get_GPS_specificData(GPS_DataStrs);GPS_Data = Updata_GPU_Data(GPS_Data,GPS_Data_tmp);show_GPS_Data(GPS_Data);pause(Timedelay)
5、; %延時num_execute = num_execute-1;end% fprintf(s,abcd);%給串口的發(fā)送數(shù)據(jù)% fscanf(s);%從串口的接收緩存讀數(shù)據(jù)關(guān)閉串口并刪除相關(guān)數(shù)據(jù)fclose(serial3);%關(guān)閉串口delete(serial3);clear serial3%將字符串根據(jù) rn 劃分成多個子字符串 ,同時去掉首尾無用的殘余字符串function out_strs = split_str2strs(StrData)if contains(class(StrData),char)uint8(StrData);endrecord = get_pos_enterf
6、lag(StrData);if StrData(1) = uint8($) %flag_start = 1;elseif size(record,2) 0flag_start = record(1)+2;elseout_strs = cell(0,0);returnendendif StrData(end) = 13flag_end = length(StrData)-1;elseif size(record,2) 0flag_end = record(end)-1;endendif flag_start = flag_endout_strs = cell(0,0);return開頭為 $ 的
7、情況endStrData = StrData(flag_start:flag_end); %截取有效數(shù)據(jù),方便下面劃分子字符串record = get_pos_enterflag(StrData);num_strs = size(record,2)+1;out_strs = cell(num_strs,1);if num_strs 1out_strs1,1 = char(StrData(1:record(1)-1);if num_strs = 2out_strsnum_strs,1 = char(StrData(record(1)+2:end); elsefor i = 2 : num_str
8、s-1out_strsi,1 = char(StrData(record(i-1)+2:record(i)-1);endout_strsnum_strs,1 = char(StrData(record(i)+2:end);endelseout_strs1,1 = char(StrData);end得到字符串中 rn 在字符串中的位置 ( 實際為 r 的位置 ) function record = get_pos_enterflag(data)record = ; %記錄回車符號位置for ii = 1 : length(data)-1if data(ii) = 13if data(ii+1)
9、= 10record = record,ii;= ii+1;endendendendend得到具體 GPS結(jié)構(gòu)體數(shù)據(jù)function GPS_Data_tmp = get_GPS_specificData(StrsData)GPS_Data_tmp = ;num_str = size(StrsData,1);for i = 1 : num_strstr_tab = StrsDatai,1;if contains(str_tab,GGA) 0GPS_Data_tmp = GNGGA(str_tab);elseif contains(str_tab,GSA) 0GPS_Data_tmp = GNG
10、SA(str_tab);elseif contains(str_tab,GSV) 0GPS_Data_tmp = GNGSV(str_tab);elseif contains(str_tab,RMC) 0GPS_Data_tmp = GNRMC(str_tab);elseif contains(str_tab,VTG) 0GPS_Data_tmp = GNVTG(str_tab);elseif contains(str_tab,GLL) 0GPS_Data_tmp = GNGLL(str_tab);endendendGPS 字符串解析function GPS_Data_tmp = GNGGA(
11、str_tab)index = strfind(str_tab,);count = 1;TimeLatitude= str_tab(index(count)+1:index(count+1)-1);count=count+1; = str_tab(index(count)+1:index(count+1)-1);count=count+1;GPS_Data_tmp.LatitudeDir = str_tab(index(count)+1:index(count+1)-1);count=count+1;Longitude1);count=count+1;= str_tab(index(count
12、)+1:index(count+1)-GPS_Data_tmp.LongitudeDir = str_tab(index(count)+1:index(count+1)-1);count=count+1;GPS_Data_tmp.GPSState = str_tab(index(count)+1:index(count+1)-1);count=count+1;GPS_Data_tmp.SatelliteNum = str_tab(index(count)+1:index(count+1)-1);count=count+1;GPS_Data_tmp.HDOP 1);count=count+1;=
13、 str_tab(index(count)+1:index(count+1)-GPS_Data_tmp.altitude 1);count=count+1;= str_tab(index(count)+1:index(count+1)-%other= str_tab(index(count)+1:end);% 進一步處理緯度tmp = str2double(Latitude(6:9);tmp = tmp*6/1000; % tmp = tmp/10000*60;經(jīng)度tmp = str2double(Longitude(7:10);tmp = tmp*6/1000; % tmp = tmp/10
14、000*60;UTC 時間轉(zhuǎn)換為北京時間if str2num(hour)+8 = 24endfunction GPS_Data_tmp = GNGSA(str_tab)index = strfind(str_tab,);count = 1;GPS_Data_tmp.LocationMode = str_tab(index(count)+1:index(count+1)-1);count=count+1;GPS_Data_tmp.CurState= str_tab(index(count)+1:index(count+1)-1);count=count+1;GPS_Data_tmp.PRN= s
15、tr_tab(index(count)+1:index(count+1)-1);count=count+1;GPS_Data_tmp.PDOP= str_tab(index(count)+1:index(count+1)-1);count=count+1;GPS_Data_tmp.HDOP= str_tab(index(count)+1:index(count+1)-1);count=count+1;GPS_Data_tmp.VDOP= str_tab(index(count)+1:index(count+1)-1);count=count+1;% other= str_tab(index(c
16、ount)+1:end);endfunction GPS_Data_tmp = GNGSV(str_tab)此語句為與衛(wèi)星有關(guān)的信息(包括衛(wèi)星方位,衛(wèi)星編號)暫時用不著,不處理GPS_Data_tmp = ;endfunction GPS_Data_tmp = GNRMC(str_tab)index = strfind(str_tab,);count = 1;Time= str_tab(index(count)+1:index(count+1)-1);count=count+1;GPS_Data_tmp.LocationState = str_tab(index(count)+1:index(
17、count+1)-1);count=count+1;Latitude1);count=count+1;= str_tab(index(count)+1:index(count+1)-GPS_Data_tmp.LatitudeDir = str_tab(index(count)+1:index(count+1)-1);count=count+1;Longitude1);count=count+1;= str_tab(index(count)+1:index(count+1)-GPS_Data_tmp.LongitudeDir = str_tab(index(count)+1:index(coun
18、t+1)-1);count=count+1;GPS_Data_tmp.speed 1);count=count+1;= str_tab(index(count)+1:index(count+1)-GPS_Data_tmp.TrueDir 1);count=count+1;= str_tab(index(count)+1:index(count+1)-Date= str_tab(index(count)+1:index(count+1)-1);count=count+1;GPS_Data_tmp.MagneticAngle = str_tab(index(count)+1:index(count
19、+1)-1);count=count+1;GPS_Data_tmp.MagneticDir = str_tab(index(count)+1:index(count+1)-1);count=count+1;%other= str_tab(index(count)+1:end);% 進一步處理緯度tmp = str2double(Latitude(6:9);tmp = tmp*6/1000; % tmp = tmp/10000*60;經(jīng)度tmp = str2double(Longitude(7:10);tmp = tmp*6/1000; % tmp = tmp/10000*60;UTC 時間轉(zhuǎn)換
20、為北京時間if str2num(hour)+8 = 24endfunction GPS_Data_tmp = GNVTG(str_tab)index = strfind(str_tab,);count = 1;GPS_Data_tmp.TrueDir= str_tab(index(count)+1:index(count+1)-1);count=count+1;GPS_Data_tmp.ReferenceTrueDir= str_tab(index(count)+1:index(count+1)-1);count=count+1;GPS_Data_tmp.RelativeDir= str_ta
21、b(index(count)+1:index(count+1)-1);count=count+1;GPS_Data_tmp.ReferenceRelativeDir = str_tab(index(count)+1:index(count+1)-1);count=count+1;GPS_Data_tmp.step= str_tab(index(count)+1:index(count+1)-1);count=count+1;GPS_Data_tmp.stepflag= str_tab(index(count)+1:index(count+1)-1);count=count+1;GPS_Data
22、_tmp.velocity 1);count=count+1;= str_tab(index(count)+1:index(count+1)-%other= str_tab(index(count)+1:end);endfunction GPS_Data_tmp = GNGLL(str_tab)index = strfind(str_tab,);Latitude1);count=count+1;= str_tab(index(count)+1:index(count+1)-GPS_Data_tmp.LatitudeDir = str_tab(index(count)+1:index(count
23、+1)-1);count=count+1;Longitude1);count=count+1;= str_tab(index(count)+1:index(count+1)-GPS_Data_tmp.LongitudeDir = str_tab(index(count)+1:index(count+1)-1);count=count+1;Date1);count=count+1;= str_tab(index(count)+1:index(count+1)-GPS_Data_tmp.LocationState = str_tab(index(count)+1:index(count+1)-1)
24、;count=count+1;%other= str_tab(index(count)+1:end);進一步處理緯度tmp = str2double(Latitude(6:9);tmp = tmp*6/1000; % tmp = tmp/10000*60;tmp = str2double(Longitude(7:10);tmp = tmp*6/1000; % tmp = tmp/10000*60;經(jīng)度end更新獲取到的相關(guān)數(shù)據(jù)function GPS_Data = Updata_GPU_Data(GPS_Data,GPS_Data_tmp)用不到的數(shù)據(jù)可以注釋掉if isfield(GPS_D
25、ata_tmp,Time) = 1endif isfield(GPS_Data_tmp,DATE) = 1endif isfield(GPS_Data_tmp,Latitude) = 1endif isfield(GPS_Data_tmp,LatitudeDir) = 1GPS_Data.LatitudeDir = GPS_Data_tmp.LatitudeDir;endif isfield(GPS_Data_tmp,Longitude) = 1endif isfield(GPS_Data_tmp,LongitudeDir) = 1GPS_Data.LongitudeDir = GPS_Dat
26、a_tmp.LongitudeDir;endif isfield(GPS_Data_tmp,GPSState) = 1GPS_Data.GPSState = GPS_Data_tmp.GPSState;endif isfield(GPS_Data_tmp,SatelliteNum) = 1GPS_Data.SatelliteNum = GPS_Data_tmp.SatelliteNum;endif isfield(GPS_Data_tmp,speed) = 1GPS_Data.speed = GPS_Data_tmp.speed;endif isfield(GPS_Data_tmp,veloc
27、ity) = 1GPS_Data.velocity = GPS_Data_tmp.velocity;endif isfield(GPS_Data_tmp,LocationState) = 1GPS_Data.LocationState = GPS_Data_tmp.LocationState;endif isfield(GPS_Data_tmp,altitude) = 1GPS_Data.altitude = GPS_Data_tmp.altitude;endif isfield(GPS_Data_tmp,CurState) = 1GPS_Data.CurState = GPS_Data_tm
28、p.CurState;endif isfield(GPS_Data_tmp,LocationMode) = 1GPS_Data.LocationMode = GPS_Data_tmp.LocationMode;endif isfield(GPS_Data_tmp,HDOP) = 1GPS_Data.HDOP = GPS_Data_tmp.HDOP;endif isfield(GPS_Data_tmp,VDOP) = 1GPS_Data.VDOP = GPS_Data_tmp.VDOP;endif isfield(GPS_Data_tmp,PDOP) = 1GPS_Data.PDOP = GPS
29、_Data_tmp.PDOP;endif isfield(GPS_Data_tmp,TrueDir) = 1GPS_Data.TrueDir = GPS_Data_tmp.TrueDir;endif isfield(GPS_Data_tmp,MagneticAngle) = 1GPS_Data.MagneticAngle = GPS_Data_tmp.MagneticAngle;endif isfield(GPS_Data_tmp,MagneticDir) = 1GPS_Data.MagneticDir = GPS_Data_tmp.MagneticDir;endif isfield(GPS_
30、Data_tmp,ReferenceTrueDir) = 1GPS_Data.ReferenceTrueDir = GPS_Data_tmp.ReferenceTrueDir;endif isfield(GPS_Data_tmp,RelativeDir) = 1GPS_Data.RelativeDir = GPS_Data_tmp.RelativeDir;endif isfield(GPS_Data_tmp,ReferenceRelativeDir) = 1GPS_Data.ReferenceRelativeDir = GPS_Data_tmp.ReferenceRelativeDir;end
31、if isfield(GPS_Data_tmp,step) = 1GPS_Data.step = GPS_Data_tmp.step;endif isfield(GPS_Data_tmp,stepflag) = 1GPS_Data.stepflag = GPS_Data_tmp.stepflag;endif isfield(GPS_Data_tmp,PRN) = 1GPS_Data.PRN = GPS_Data_tmp.PRN;endend顯示相關(guān) GPS數(shù)據(jù)function show_GPS_Data(GPS_Data)DataAndTime = sprintf(20%02s-%02s-%0
32、2s %02s:%02s:%02s:%03s,.Location = sprintf( %s:%02s%02s %03s %04s,%s:%02s%02s %03s %04s,.Others = sprintf( GPSState:%s,SatelliteNum:%02s,Speed:%03s,Velocity:%s,LocationState:%s,.%GPS_Data.GPSState,GPS_Data.SatelliteNum,GPS_Data.speed,GPS_Data.velocity,GPS _Data.LocationState);show_Message_str(strcat(Data
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- T-ZJCX 0045-2024 食用菌干制品
- T-ZGZS 0411-2024 T-CCPITCSC 150-2024 綠色會展廢棄物管理規(guī)范
- T-ZMDS 10024-2024 手術(shù)導(dǎo)航設(shè)備配準(zhǔn)技術(shù)要求及試驗方法
- 2025年度高端辦公空間無償租賃合作協(xié)議
- 2025年度能源企業(yè)質(zhì)押貸款擔(dān)保合同
- 二零二五年度企業(yè)辦公用品定制化采購合同
- 醫(yī)藥公司二零二五年度員工商業(yè)秘密保密協(xié)議及保密技術(shù)支持服務(wù)協(xié)議
- 2025年度村辦公室裝修與農(nóng)村電商市場拓展合作合同
- 二零二五年度酒店加盟店經(jīng)營管理合作協(xié)議
- 2025年度物流園區(qū)開發(fā)物業(yè)移交與倉儲物流服務(wù)協(xié)議
- 綠色化學(xué)原理課件
- 《數(shù)獨》(第一課)教學(xué)課件
- 新教科版三年級下冊科學(xué)全冊教案(2022年1月修訂)
- 便與健康課件
- 自然辯證法概論課件:第二章馬克思主義科學(xué)技術(shù)觀
- 氣道廓清技術(shù)及護理課件
- 中國黃金集團公司黃金工業(yè)項目初步設(shè)計
- 《現(xiàn)代漢語語法》PPT課件(完整版)
- SAP培訓(xùn)講義(FICO概覽)V3-中石油
- 全國江蘇小學(xué)科學(xué)學(xué)科教師基本功大賽試題匯總(共19頁)
- 幕墻工程施工質(zhì)量通病和防治措施方案
評論
0/150
提交評論