999精品在线视频,手机成人午夜在线视频,久久不卡国产精品无码,中日无码在线观看,成人av手机在线观看,日韩精品亚洲一区中文字幕,亚洲av无码人妻,四虎国产在线观看 ?

基于Matlab GUI的串口通信編程實現

2010-04-12 00:00:00王戰軍,
現代電子技術 2010年9期

摘 要:Matlab不僅具有強大的科學計算功能,還內置了GUI工具用于進行界面開發。利用Matlab的GUI工具和內置的串口通信API,設計開發一個可視化的串口通信例程,實現IMU原始數據的接收采集,并利用Matlab強大的科學計算功能,對數據進行實時處理,圖形化顯示數據處理結果。最后介紹了編譯發布Matlab程序的步驟與注意事項。

關鍵詞:Matlab GUI; 串口通信; IMU; 軟件編譯

中圖分類號:TP311 文獻標識碼:A

文章編號:1004-373X(2010)09-0038-03

Serial Communication Program Development Based on Matlab GUI

(1. PLA 91329 Unit, Weihai 264200, China; 2. PLA 92859 Unit, Tianjin 300061, China)

Abstract: Matlab has powerful scientific computation ability, and an embedded GUI tool is used to interface development. A visualized serial communication routines is designed with the GUI tool and embedded serial communication API, the reception and acquisition of IMU original data is realized the scientific computation ability of Matlab is used for processing data real-timly and displaying result graphically. In the end, steps to compile and release the program is introduced.

Keywords: Matlab GUI; serial communication; IMU; software compiler

0 引 言

Matlab是MathWorks公司開發的一種科學計算軟件。Matlab運行穩定、可靠、使用方便,是廣大科研人員進行科學研究的得力助手。Matlab不僅具有強大的科學計算功能,還具有滿足一般要求的數據采集以及界面設計開發功能。Matlab GUI(Graphic User Interface)就是內置于Matlab的進行圖形界面開發的模塊。本文利用Matlab GUI設計通過串口進行數據發送和接收的界面,并利用內置于Matlab的串口通信API實現串口數據發送與接收功能。

1 Matlab GUI介紹

啟動Matlab后,運行guide命令即可以啟動Matlab GUI開發工具。如圖1所示。

新建Blank GUI,如圖2所示。

在新建Blank GUI界面中,包含了一般的界面元素,如菜單、按鈕、坐標軸、控件等。添加必要的串口通信參數設置按鈕。

運行后的界面如圖3所示。

圖1 Matlab GUI開發界面

圖2 新建Blank GUI界面

圖3 串口通信界面

2 串口數據發送與接收功能實現

2.1 建立串口通信流程的基本步驟

Matlab提供了對串口進行打開、關閉、以及串口參數設置等操作的一系列函數。利用這些函數可以選擇串口號、設置串口通信參數(波特率、數據位、停止位、校驗位等)、進行中斷控制、流控制。從建立串口通信到結束串口通信的完整流程包括以下幾個步驟:

(1) 為應用程序創建串口對象。實現該功能的函數為:

obj= serial(′port′,′PropertyName′,PropertyValue,…)

其中參數port為完整的串口名稱,如com1。PropertyName為串口通信參數,如baudrate,startbits等。創建串口對象的過程中,也可以忽略PropertyName。其函數為:

obj = serial(′port′)

(2) 連接打開串口。實現該功能的函數為:

fopen(obj)

obj即為使用創建串口對象函數的返回值。在連接打開串口后,可以對串口通信參數進行修改。

(3) 設置或者修改串口通信參數。在能夠有效地進行串口通信前,必須設置正確的串口通信參數。實現該功能的函數為:

props = set(obj,′PropertyName′,PropertyValue,…)

obj即為使用創建串口對象函數的返回值;PropertyName為串口通信參數,如baudrate,startbits等。

(4) 從串口讀寫數據。在前面三個步驟正常完成后,即可以從串口讀數據或者向串口寫數據,也就是接收或者發送數據。實現讀串口功能的函數有多個。其區別在于根據到達串口數據的類型選擇合適的讀函數。主要包括:fgetl,fgets,fread,fscanf。這里主要介紹fread,fread函數實現從串口讀入二進制數據。fread的實現形式為:

A=fread(obj,size)

A為讀入的數據,以數組的形式存儲,存儲數據形式為字節;obj即為使用創建串口對象函數的返回值;size指定一次讀操作讀入字節的個數。實現寫串口的函數有兩個,分別為fwrite和fprintf。fwrite以二進制形式向串口寫入數據,實現形式為:

fwrite(obj,A)

obj即為使用創建串口對象函數的返回值;A為寫入的數據,以數組形式存儲。fwrite以文本形式向串口寫入數據,即以ASCII碼的形式向串口寫數據,實現形式為:

fprintf(obj,′cmd′)

obj即為使用創建串口對象函數的返回值;cmd為寫入的文本數據,以數組形式存儲。

(5) 關閉串口以及釋放串口對象占用的存儲空間。關閉串口函數為:fclose(obj)。釋放串口對象占用的內存空間,函數為:delete(obj)。釋放串口對象在Matlab工作區中占用的存儲空間,函數為:clear obj。

以上5步是建立串口通信過程到關閉串口,釋放串口占用資源的基本步驟。基本步驟可以實現手動收發數據。其例程如下:

s=serial(′COM1′);

fopen(s);

s.BytesAvailableFcnMode = ′terminator′;

s.BytesAvailableFcn = @instrcallback;

fprintf(s,′*IDN?′);

out = fscanf(s);

運行以上語句后,顯示的結果如下:

BytesAvailable event occurred at 17:01:29 for the object:

Serial-COM1.

串口數據接收完畢后,需要關閉串口,并釋放串口對象占用的資源,使用的命令如下:

fclose(s);

delete(s);

clear s;

2.2 串口中斷設置及中斷處理函數

要實現自動收發數據,還需要定義串口中斷處理函數以及觸發串口中斷的方式。定義串口中斷處理函數也就是定義串口數據接收或者發送函數。定義觸發串口中斷的方式其目的是為了在串口檢測到接收數據的時候,通知并啟動串口數據接收函數進行數據接收操作;在串口輸出緩存為空的時候,通知啟動串口數據發送函數。

(1) 觸發串口中斷的方式。在Matlab串口通信編程中,Matlab通過檢測到串口通信事件,從而觸發串口中斷。涉及到串口讀寫的事件包括:Bytes available,Output empty。其中Bytes available事件有兩種:一種是接收到的字符數達到人工設定的數目時,則系統產生該事件;另一種是當接收到指定字符時,系統產生該事件。Output empty事件是在系統檢測到輸出緩存區為空時,產生該事件。

Bytes available事件需要事先設置??梢允褂煤瘮?set(obj,′ BytesAvailableFcnMode′,′ byte′);set(obj,′BytesAvailableFcnCount′,240);以上兩個函數設置當串口檢測到輸入緩存中到達了240個字符的數據時,則觸發串口中斷。另外,也可以設置為當系統檢測到某個字符達到串口,則觸發串口中斷。其設置函數為:set(obj,′ BytesAvailableFcnMode′,′ terminator′);set(obj,′ terminator′,′H′)。以上兩個函數設置當串口檢測到字符H時,則觸發串口中斷。

輸出緩存為空事件的產生。該事件由系統自動檢測產生,不需要用戶特別設置。該事件一般在輸出緩存中的最后一個字符發送完畢后產生。用戶可以定義該事件引起的串口中斷處理函數。

(2) 串口中斷處理函數。串口中斷處理函數可以根據用戶需要自行定義。如串口讀中斷處理函數可以這樣定義:

obj.BytesAvailableFcn=@receiveData。

receiveData即為串口讀中斷處理函數。在讀中斷處理函數中可以進行串口讀操作。即將輸入緩存區中的數據讀到用戶自定義的存儲變量中,以備后續的數據處理與分析。類似可以定義輸出緩存為空時觸發的串口中斷處理函數:

obj.OutputEmptyFcn=@writeData。

本文開發的串口通信程序用于接收采集IMU(Inertial Measurement Unit)輸出的加速度計和陀螺的測量數據。通過定義串口讀中斷事件和串口中斷處理函數,實現了數據的自動采集,并以Matlab圖形方式實時顯示數據。

3 串口通信程序的編譯發布

3.1 編譯程序

為了對代碼進行保密,以及方便用戶發布可以在不同平臺運行的可執行程序,Matlab提供了Matlab程序編譯與發布功能。在進行Matlab程序編譯之前,需要設置編譯工具。在Matlab命令窗口中,輸入運行mbuild –setup,進行編譯工具設置。如圖4所示。

mbuild-setup命令運行后,Matlab會檢測已經安裝在本機上的編譯器,用戶可以自行選擇任意一個編譯器,選擇完畢后,運行編譯命令,Matlab將使用用戶選定的編譯器對程序進行編譯。

設置完畢編譯工具后,即可以在命令窗口中運行編譯命令,將Matlab程序編譯成可執行程序。命令格式為:

mcc [-options] mfile1 [mfile2 … mfileN];

options為編譯參數;

mfile1為待編譯的Matlab文件,如果包含多個Matlab文件,可以直接列在mfile1后面。

圖4 設置Matlab編譯工具

如將一個文件名為myfun.m的Matlab文件編譯成一個獨立可執行程序,可以使用mcc命令:

mcc -m myfun;

mcc命令可以用使用多個編譯參數,相應參數的含義可以參見Matlab幫助文檔。

3.2 發布程序

Matlab文件編譯完畢后,生成的可執行程序還需要Matlab環境的支持,要發布到沒有安裝Matlab的機器上運行,還需要進行最后一項工作,即打包Matlab組件運行環境(Matlab Component Runtime,MCR)。將MCR與可執行程序一起打包,拷貝到其他沒有安裝Matlab的機器上,在該機器上安裝MCR,安裝完畢即可以直接在該機器上運行編譯的Matlab可執行程序。MCR安裝文件位于:

Matlab Root\\\oolbox\\\\compiler\\\\deploy\\\\win32

在2008版Matlab中,已經內置了Matlab編譯發布工具箱,在Matlab命令窗口中運行deploytool命令,即可以調出該工具窗口,通過該工具可以方便、快捷地編譯發布Matlab程序。

4 結 語

Matlab具有強大的科學計算功能和圖形顯示功能,選用Matlab作為數據處理與分析工具是合適的,但其界面開發和數據采集功能相對較弱,不如Visual C++或者LabView強大。不過,對于一般的界面開發,和普通功能的串口通信開發,Matlab是足以勝任的,同時也可以直接利用其強大的數據分析與處理功能。本

文基于MatlabGUI的串口通信功能的編程實現表明

利用Matlab GUI可以進行包含一般界面元素的界面開發,在此基礎上,加入串口通信功能,實現數據的實時采集與分析處理,并進行圖形化顯示。

參考文獻

[1]陳垚光,毛濤濤,王正林,等.精通Matlab GUI設計[M].北京:電子工業出版社,2008.

[2]秦襄培.Matlab圖像處理與界面編程寶典[M].北京:電子工業出版社,2009.

[3]Igor Penjivrag. MatlabGUI 編程[EB/OL]. [2007-11-2]. http://Matlabstudio.yo2.cn/Matlab/Matlab-gui-programming-guide-for-beginners, 2007.

[4]陳安宇,陳偉,石彬,等.Matlab圖形用戶界面的應用研究[J].機電工程技術,2008,16(10):16-21.

[5]張立炎,張天賀,黃亮,等.燃料電池空氣供給系統建模及基于Matlab GUI仿真界面設計[J].系統仿真技術,2008,10(2):10-13.

[6]夏慶觀,盛黨紅,溫秀蘭.基于Matlab GUI的零件圖像識別[J].中國制造業信息化,2008,15(23):15-18.

[7]趙震,劉志剛,刁利軍.基于Matlab的船用螺旋槳計算機實時仿真及GUI設計[J].計算機應用與軟件,2008,49(3):49-52.

主站蜘蛛池模板: 91在线一9|永久视频在线| 精品福利视频导航| 亚洲无码免费黄色网址| 国产精品欧美在线观看| 国产一区二区三区日韩精品| 亚洲AV成人一区二区三区AV| 亚洲色图另类| 精品人妻AV区| 深夜福利视频一区二区| 少妇精品网站| 992Tv视频国产精品| 久久综合九九亚洲一区| 精品国产成人国产在线| 2021最新国产精品网站| 粗大猛烈进出高潮视频无码| 国产精品女同一区三区五区| 欧美日本激情| 国产女人18毛片水真多1| 99性视频| 国产成人精品在线| 91久久偷偷做嫩草影院免费看| 2019年国产精品自拍不卡| 一区二区欧美日韩高清免费| 精品一区二区三区视频免费观看| 91久久国产综合精品女同我| 久久国产精品波多野结衣| 精品无码国产一区二区三区AV| 国产在线小视频| 亚洲第一综合天堂另类专| 四虎精品免费久久| 欧美成人免费一区在线播放| 色天堂无毒不卡| 五月天福利视频| 一本大道视频精品人妻 | 免费无遮挡AV| 亚洲成人在线免费| 91在线精品免费免费播放| V一区无码内射国产| 麻豆精品久久久久久久99蜜桃| 亚洲无线观看| 亚洲天堂网在线视频| 国产成人精品一区二区三在线观看| 国产成人综合亚洲欧美在| 欧美激情视频二区| 孕妇高潮太爽了在线观看免费| 任我操在线视频| 国产精品不卡片视频免费观看| www.国产福利| 免费Aⅴ片在线观看蜜芽Tⅴ| 亚洲欧美另类中文字幕| 欧洲极品无码一区二区三区| 波多野结衣久久高清免费| 97国产成人无码精品久久久| 久久精品国产免费观看频道| 亚洲中文字幕在线精品一区| 3p叠罗汉国产精品久久| 亚洲VA中文字幕| 国产精品青青| 国产精品久久久久久久久kt| 狠狠色噜噜狠狠狠狠奇米777 | 玖玖精品在线| 亚洲人成成无码网WWW| 亚洲色无码专线精品观看| 国产精品hd在线播放| 国产在线小视频| 日韩免费成人| 国产黄在线免费观看| 一本一本大道香蕉久在线播放| 国产激情国语对白普通话| 亚洲AV永久无码精品古装片| 性欧美精品xxxx| 欧美va亚洲va香蕉在线| 伊人中文网| 国产精品久线在线观看| 女人毛片a级大学毛片免费 | 国产精品综合久久久| 一级一级特黄女人精品毛片| 中文精品久久久久国产网址| 91免费国产在线观看尤物| 国产日韩欧美精品区性色| 在线观看精品自拍视频| 97综合久久|