基于Matlab GUI的PC機(jī)與智能車的無線通信
5 基于Matlab GUI查詢方式實(shí)現(xiàn)異步串行通信
基于Matlab查詢方式的非實(shí)時(shí)串口通信雖然編程簡(jiǎn)單,對(duì)數(shù)據(jù)的調(diào)用處理也更為容易,但是只能接收一個(gè)過程的數(shù)據(jù),這在對(duì)實(shí)時(shí)性要求較高的系統(tǒng)中往往不能滿足設(shè)計(jì)者的需求。以下為部分通信程序代碼。
6 基于Matlab中斷方式實(shí)現(xiàn)實(shí)時(shí)串行通信
事件驅(qū)動(dòng)方式的優(yōu)點(diǎn)是程序響應(yīng)及時(shí),可靠性高。在Matlab環(huán)境下實(shí)現(xiàn)實(shí)時(shí)通信的中斷方式,實(shí)際上就是采用事件驅(qū)動(dòng)的方式實(shí)現(xiàn)的,類似于VB語言MSComm控件中OnComm事件的實(shí)現(xiàn)方法。當(dāng)串口上監(jiān)視到緩沖區(qū)有指定字節(jié)數(shù)目的數(shù)據(jù)可用(bytes-available event),串口接收到的數(shù)據(jù)長(zhǎng)時(shí)間處于非激活狀態(tài)(break-interrupt event),串行口引腳狀態(tài)改變(pin-status event)或輸出緩沖區(qū)為空(output empty eve nt)等事件發(fā)生時(shí),Matlab會(huì)自動(dòng)調(diào)用回調(diào)函數(shù)進(jìn)行通信事件的處理。因此,事件驅(qū)動(dòng)實(shí)質(zhì)上是一種中斷機(jī)制,而回調(diào)函數(shù)實(shí)質(zhì)上相當(dāng)于一個(gè)中斷服務(wù)子程序。Matlab端實(shí)時(shí)串行通信的程序流程如圖4所示。以下為兩種不同的方式實(shí)現(xiàn)實(shí)時(shí)通信的中斷機(jī)制程序。
6.1 將中斷服務(wù)子程序?qū)懭?a class="contentlabel" href="http://butianyuan.cn/news/listbylabel/label/GUI">GUI組件的部分M文件代碼
主程序創(chuàng)建串口設(shè)備對(duì)象、設(shè)置串口設(shè)備屬性及打開串口等初始化操作的代碼與查詢方式下的初始化代碼相同:
6.2 通過調(diào)用修改后的instroallback.m文件實(shí)現(xiàn)中斷
主程序:
修改instreallback(obj,evenlt)回調(diào)函數(shù),instrcallback.m文件包含了Matlab提供的回調(diào)函數(shù)程序模板,設(shè)計(jì)者可以根據(jù)需要自行添加相應(yīng)的服務(wù)程序代碼。Matlab安裝目錄下有兩個(gè)instrcallback.m文件,只需要修改MATLABtoolboxmatlabiofun@instrument目錄下的instrcallback.m文件即可。另外,在修改instrcallback.m文件之前,最好對(duì)其做一個(gè)備份。在修改了instrcallback(obj,event)回調(diào)函數(shù)后,需要對(duì)其進(jìn)行保存,重新啟動(dòng)Matlab配置該文件,才使修改后的函數(shù)生效。
圖5為以下方式實(shí)現(xiàn)的智能車啟動(dòng)過程速度的實(shí)時(shí)顯示,修改后的instrcallback.m文件主要程序代碼如下:
數(shù)字通信相關(guān)文章:數(shù)字通信原理
評(píng)論