電動(dòng)車仿真設(shè)計(jì)-課程設(shè)計(jì)報(bào)告_第1頁
已閱讀1頁,還剩21頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡介

1、<p>  課 程 設(shè) 計(jì) 報(bào) 告</p><p>  課程設(shè)計(jì)名稱: 電動(dòng)車仿真設(shè)計(jì) </p><p>  系 部: 三 系 </p><p>  學(xué)生姓名: </p><p>  班 級: 通信( )班 </p><

2、;p>  學(xué) 號: </p><p>  成 績: </p><p>  指導(dǎo)教師: </p><p>  開課時(shí)間: 學(xué)年 1 學(xué)期</p><p><b>  目錄</b></p><p&

3、gt;<b>  第一章 引言2</b></p><p>  1.1 課程設(shè)計(jì)目的2</p><p>  1.2 課程設(shè)計(jì)任務(wù)與要求2</p><p>  第二章 課程設(shè)計(jì)基本原理3</p><p>  2.1 MATLAB的圖形用戶界面(GUI)3</p><p>  2.3 Vir

4、tual Reality (VR) toolbox4</p><p>  2.3.1 Virtual Reality (虛擬現(xiàn)實(shí))4</p><p>  2.3.2 virtual reality toolbox的安裝及特點(diǎn)4</p><p>  第三章 課程設(shè)計(jì)過程5</p><p>  3.1 建立動(dòng)車仿真模型5</p&

5、gt;<p>  3.1.1安裝V-Realm Builder from MATLAB5</p><p>  3.1.2 利用virtual reality toolbox創(chuàng)建動(dòng)車模型5</p><p>  3.1.3 小車運(yùn)行程序7</p><p>  3.2 設(shè)計(jì)串口終端圖形用戶界面8</p><p>  3.3 P

6、WM步進(jìn)電機(jī)控制17</p><p>  3.3.1 開發(fā)環(huán)境17</p><p>  3.3.2 操作步驟17</p><p>  3.4 課程設(shè)計(jì)結(jié)果18</p><p>  第四章 總結(jié)與體會(huì)20</p><p><b>  參考文獻(xiàn)21</b></p><p

7、><b>  電動(dòng)車仿真設(shè)計(jì)</b></p><p><b>  第一章 引言</b></p><p>  1.1 課程設(shè)計(jì)目的</p><p>  本課程是為通信工程專業(yè)本科生開設(shè)的必修課,結(jié)合學(xué)生的專業(yè)方向的理論課程,充分發(fā)揮學(xué)生的主動(dòng)性,使學(xué)生掌握應(yīng)用MATLAB 等仿真軟件建立基于Linux的通信系統(tǒng),鞏固理

8、論課程內(nèi)容,規(guī)范文檔的建立,培養(yǎng)學(xué)生的創(chuàng)新能力,并能夠運(yùn)用其所學(xué)知識進(jìn)行綜合的設(shè)計(jì)。</p><p>  Embedded System的課程設(shè)計(jì)是對嵌入通信與控制系統(tǒng)仿真軟件、課程學(xué)習(xí)的綜合檢驗(yàn),配合理論課的教學(xué),讓學(xué)生親自參加設(shè)計(jì)、仿真、驗(yàn)證Embedded System系統(tǒng)的一般原理、Applications等方面的知識點(diǎn)。</p><p>  1.2 課程設(shè)計(jì)任務(wù)與要求</p

9、><p>  在WINDOWS環(huán)境下,用MATLAB搭建虛擬賽車平臺,用行駛速度來控制ARM箱上面的電機(jī)的轉(zhuǎn)速或方向。</p><p>  電動(dòng)車仿真設(shè)計(jì)主要運(yùn)用MATLAB安裝V-Realm Builder,并在其中建立軌道及動(dòng)車模型。并利用Matlab GUI設(shè)計(jì)通過串口進(jìn)行數(shù)據(jù)發(fā)送和接收的界面,并利用內(nèi)置于Matlab的串口通信API實(shí)現(xiàn)串口數(shù)據(jù)發(fā)送與接收功能。通過串口來完成通信即實(shí)現(xiàn)動(dòng)

10、車速度的控制。通過輸入不同的數(shù)值來控制小車以不同的速度跑起來,同時(shí)控制ARM箱上面的電機(jī)的轉(zhuǎn)速或方向。要求:</p><p>  利用Matlab和Simulink對3D Virtual Reality Design。</p><p>  Install Ubuntu Linux system</p><p>  Install Virtual Reality Ki

11、t</p><p>  Simulate Electronic Motors</p><p>  Connect with the Motor Driver on the ARM9 board </p><p>  User must be able to control the motor speed or direction.</p><p&

12、gt;  第二章 課程設(shè)計(jì)基本原理</p><p>  2.1 MATLAB的圖形用戶界面(GUI) </p><p>  圖形用戶界面GUI(Graphical User Interfaces):由各種圖形對象組成的用戶界面,在這種用戶界面下,用戶的命令和對程序的控制是通過“選擇”各種圖形對象來實(shí)現(xiàn)的?;緢D形對象分為控件對象和用戶界面菜單對象,簡稱控件和菜單。</p>

13、<p><b>  控件對象的描述:</b></p><p> ?。?) 按鈕(Push Buttons):執(zhí)行某種預(yù)定的功能或操作;(2) 開關(guān)按鈕(Toggle Button):產(chǎn)生一個(gè)動(dòng)作并指示一個(gè)二進(jìn)制狀態(tài)(開或關(guān)),當(dāng)鼠點(diǎn)擊它時(shí)按鈕將下陷,并執(zhí)行callback(回調(diào)函數(shù))中指定的內(nèi)容,再次點(diǎn)擊,按鈕復(fù)原,并再次執(zhí)行callback 中的內(nèi)容;(3) 單選框(Rad

14、io Button):單個(gè)的單選框用來在兩種狀態(tài)之間切換,多個(gè)單選框組成一個(gè)單選框組時(shí),用戶只能在一組狀態(tài)中選擇單一的狀態(tài),或稱為單選項(xiàng);(4) 復(fù)選框(Check Boxes):單個(gè)的復(fù)選框用來在兩種狀態(tài)之間切換,多個(gè)復(fù)選框組成一個(gè)復(fù)選框組時(shí),可使用戶在一組狀態(tài)中作組合式的選擇,或稱為多選項(xiàng);(5) 文本編輯器(Editable Texts):用來使用鍵盤輸入字符串的值,可以對編輯框中的內(nèi)容進(jìn)行編輯、刪除和替換等操作;(6) 靜

15、態(tài)文本框(Static Texts):僅僅用于顯示單行的說明文字;(7) 滾動(dòng)條(Slider): 可輸入指定范圍的數(shù)量值;(8) 邊框(Frames):在圖形窗口圈出一塊區(qū)域;(9) 列表框(List Boxes):在其中定義一系列可供</p><p>  S3C2410X有5個(gè)16位定時(shí)器,其中定時(shí)器0、1、2、3具有脈沖寬度調(diào)制(PWM)功能,定時(shí)器4具有內(nèi)部定時(shí)左右,但是沒有輸出引腳。定時(shí)器0具有死

16、區(qū)生成器,可以控制大電流設(shè)備。定時(shí)器T0、T1共用一個(gè)8bit預(yù)分定時(shí)器T2、T3、T4共用另一個(gè)8bit預(yù)分頻器,每個(gè)定時(shí)器都有一個(gè)時(shí)鐘分頻器,信號分頻輸出有5種模式。每個(gè)定時(shí)器模塊都從時(shí)鐘分頻器接收它自己的時(shí)鐘信號,時(shí)鐘分頻器接收的時(shí)鐘信號來自于8bit預(yù)分頻器。可編程8bit預(yù)分頻器根據(jù)存儲(chǔ)在TCFG0和TCFG1中的數(shù)據(jù)對PCLK進(jìn)行分頻。</p><p>  每一個(gè)定時(shí)器都有一個(gè)自己的用定時(shí)器時(shí)鐘驅(qū)動(dòng)的

17、16位減法計(jì)數(shù)器。當(dāng)減法計(jì)數(shù)器減到0時(shí),就會(huì)產(chǎn)生一個(gè)定時(shí)器中斷來通知CPU定時(shí)器操作下次操作。當(dāng)定時(shí)器減法計(jì)數(shù)器減到0時(shí),相應(yīng)的TCNTBN的值被自動(dòng)重載到減法計(jì)數(shù)器中繼續(xù)下次操作。然而,如果定時(shí)器停止了,比如在運(yùn)行時(shí),通過清除TCON中定時(shí)器使能位來中止定時(shí)器的運(yùn)行,TCNTBN的值不會(huì)被重載到減法計(jì)數(shù)器中。</p><p>  2.3 Virtual Reality (VR) toolbox</p>

18、;<p>  2.3.1 Virtual Reality (虛擬現(xiàn)實(shí))</p><p>  虛擬現(xiàn)實(shí)具有沉浸感、交互性和思想性三個(gè)主要特點(diǎn):所謂沉浸感,是指用戶感到作為主角存在于虛擬環(huán)境中的真實(shí)程度。理想的虛擬環(huán)境應(yīng)該達(dá)到使用戶難以分辨真假的程度;所謂交互性,是指用戶對虛擬環(huán)境內(nèi)物體的可操作程度和從環(huán)境得到反饋的自然程度(包括實(shí)時(shí)性);所謂思想性,則是指虛擬現(xiàn)實(shí)不僅僅是一個(gè)媒體,一個(gè)高級用戶界面,還

19、反映了設(shè)計(jì)者的思想,是心靈的工具。正是基于虛擬現(xiàn)實(shí)的這三個(gè)特點(diǎn),雖然其產(chǎn)生至今不過短短40年的時(shí)間,但是已經(jīng)廣泛的應(yīng)用于軍事、醫(yī)學(xué)、教育、文化及藝術(shù)等諸多領(lǐng)域。</p><p>  2.3.2 virtual reality toolbox的安裝及特點(diǎn)</p><p>  virtual reality toolbox的安裝??梢栽贛ATLAB以前安裝,只要在安裝MATLAB時(shí)選擇virt

20、ual reality toolbox就可以了。若在安裝MATLAB時(shí)沒有安裝virtual reality toolbox,可以在重新啟動(dòng)MATLAB時(shí)安裝,在安裝對話框適當(dāng)?shù)牡胤竭x上virtual reality toolbox選項(xiàng),就可以了。</p><p>  VRML瀏覽器的安裝。當(dāng)安裝了virtual reality toolbox,virtual reality toolbox瀏覽器就作為默認(rèn)瀏覽器

21、,若要使用網(wǎng)絡(luò)瀏覽器作為VRML瀏覽器,就必須安裝blaxxun Connect 插件,這個(gè)插件能夠在Microsoft Internet Explorer或者Netscape Navigator中使用。</p><p>  第三章 課程設(shè)計(jì)過程</p><p>  3.1 建立動(dòng)車仿真模型</p><p>  3.1.1安裝V-Realm Builder fro

22、m MATLAB</p><p>  在MATLAB界面輸入vrinstall -check后回車,檢查是否安裝,若沒有安裝則輸入命令vrinstall -install后回車進(jìn)行安裝。然后再次輸入命令vrinstall -check確認(rèn)是否成功安裝。</p><p>  3.1.2 利用virtual reality toolbox創(chuàng)建動(dòng)車模型</p><p> 

23、?。?)Starting V-Realm Builder,路徑為C:\Matlab\toolbox\vr\vrealm\progrom。打開vrbuild2,點(diǎn)擊File選擇New新建一個(gè)文件。</p><p> ?。?) Insert background button,單擊按鈕插入背景。 </p><p>  圖3.1 插入背景圖 </p><p> ?。?/p>

24、3)Insert 小車,先選中New World,然后單擊Libraries選擇Import From 選擇Object Library,從Category選項(xiàng)中任意選中一小車拖進(jìn)背景區(qū),修改一下對象的名字防止混淆??梢噪p擊scale對其大小做修改,雙擊translation修改其坐標(biāo)(默認(rèn)為原點(diǎn))。</p><p>  圖3.2 插入小車圖</p><p>  圖3.3 改變小車尺寸圖&

25、lt;/p><p>  圖3.4 改變小車位置圖</p><p> ?。?)Insert 車道,選中New World,單擊按鈕插入軌道,修改一下名字,同理可以修改其參數(shù)將其拉長變窄。</p><p>  圖3.5 插入車道圖</p><p>  圖3.6 改變車道大小圖</p><p>  Insert視角,選中New

26、World,然后單擊Nodes選擇Insert選擇Bindable選擇Viewpoint插入視角,點(diǎn)擊position改變視角,然后點(diǎn)擊set-bind設(shè)置為True,就可以改變視角。</p><p>  選擇保存路徑,一般保存在MATLAB的work中。</p><p>  圖3.7 動(dòng)車模型圖</p><p>  3.1.3 小車運(yùn)行程序</p>

27、<p><b>  源代碼為</b></p><p>  global v_x;</p><p>  world=vrworld('car.wrl');</p><p>  open(world);</p><p>  fig=view(world,'-internal');&l

28、t;/p><p>  pos_z=0.0;</p><p>  pos_y=0.0;</p><p>  pos_x=-9.0;</p><p>  for t=0:0.000001:10</p><p>  pos_x=pos_x+v_x*t;</p><p>  world.car.transl

29、ation=[pos_x pos_y pos_z];</p><p>  vrdrawnow;</p><p>  end </p><p>  3.2 設(shè)計(jì)串口終端圖形用戶界面</p><p>  3.2.1 用MATLAB中GUI軟件設(shè)計(jì)串口接口程序</p><p>  啟動(dòng)Matl

30、ab后,運(yùn)行g(shù)uide命令即可以啟動(dòng)Matlab GUI開發(fā)工具。新建Blank GUI,在新建Blank GUI界面中,包含了一般的界面元素,如菜單、按鈕、坐標(biāo)軸、控件等。添加必要的串口通信參數(shù)設(shè)置按鈕。然后打開串口(選擇波特率為115200、1位停止位、無校驗(yàn)位、無硬件流控制)。</p><p>  3.2.2 串口通信接口界面程序</p><p><b>  源程序代碼為:

31、</b></p><p>  function varargout = serial_communication2(varargin)</p><p>  % ×÷ÕߣºÂÞ»ª·É</p><p>  % ¹

32、66;ÄÜ£»´®¿ÚÊÕ·¢</p><p>  % °æ±¾£º20101103 V2.0</p><p>  gui_Singleton = 1;</p><p>  gui_S

33、tate = struct('gui_Name', mfilename, ...</p><p>  'gui_Singleton', gui_Singleton, ...</p><p>  'gui_OpeningFcn', @serial_communication2_OpeningFcn, ...</p>

34、<p>  'gui_OutputFcn', @serial_communication2_OutputFcn, ...</p><p>  'gui_LayoutFcn', [] , ...</p><p>  'gui_Callback', []);</p><p>  if nargin &am

35、p;& ischar(varargin{1})</p><p>  gui_State.gui_Callback = str2func(varargin{1});</p><p><b>  end</b></p><p>  if nargout</p><p>  [varargout{1:nargout}]

36、 = gui_mainfcn(gui_State, varargin{:});</p><p><b>  else</b></p><p>  gui_mainfcn(gui_State, varargin{:});</p><p><b>  end</b></p><p>  function

37、 serial_communication2_OpeningFcn(hObject, eventdata, handles, varargin)</p><p>  handles.output = hObject;</p><p>  warning('off');</p><p>  javaFrame = get(hObject, 'J

38、avaFrame');</p><p>  javaFrame.setFigureIcon(javax.swing.ImageIcon('icon.jpg'));</p><p>  %% ³õʼ»¯²ÎÊý</p><p>  hasDat

39、a = false; %±íÕ÷´®¿ÚÊÇ·ñ½ÓÊÕµ½Êý¾Ý</p><p>  isShow = false; %±íÕ÷ÊÇ

40、;·ñÕýÔÚ½øÐÐÊý¾ÝÏÔʾ£¬¼´ÊÇ·ñÕýÔÚÖ´Ðк¯

41、02;ýdataDisp</p><p>  isStopDisp = false; %±íÕ÷ÊÇ·ñ°´ÏÂÁË¡¾Í£Ö¹ÏÔʾ¡¿&#

42、176;´Å¥</p><p>  isHexDisp = false; %±íÕ÷ÊÇ·ñ¹´Ñ¡ÁË¡¾Ê®Áù½øÖÆÏ

43、12;ʾ¡¿</p><p>  isHexSend = false; %±íÕ÷ÊÇ·ñ¹´Ñ¡ÁË¡¾Ê®Áù½øÖÆ

44、3;¢ËÍ¡¿</p><p>  numRec = 0; %½ÓÊÕ×Ö·û¼ÆÊý</p><p>  numSend = 0; %·¢ËÍ×Ö&#

45、183;û¼ÆÊý</p><p>  strRec = ''; %ÒѽÓÊÕµÄ×Ö·û´®</p><p>  %% ½«ÉÏÊ

46、;ö²ÎÊý×÷ΪӦÓÃÊý¾Ý£¬´æÈë´°¿Ú¶ÔÏóÄÚ</p><p>

47、  setappdata(hObject, 'hasData', hasData);</p><p>  setappdata(hObject, 'strRec', strRec);</p><p>  setappdata(hObject, 'numRec', numRec);</p><p>  setappdat

48、a(hObject, 'numSend', numSend);</p><p>  setappdata(hObject, 'isShow', isShow);</p><p>  setappdata(hObject, 'isStopDisp', isStopDisp);</p><p>  setappdata(h

49、Object, 'isHexDisp', isHexDisp);</p><p>  setappdata(hObject, 'isHexSend', isHexSend);</p><p>  guidata(hObject, handles);</p><p>  function varargout = serial_commu

50、nication2_OutputFcn(hObject, eventdata, handles) </p><p>  varargout{1} = handles.output;</p><p>  function com_Callback(hObject, ~, handles)</p><p>  function com_CreateFcn(hObject

51、, eventdata, handles)</p><p>  if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor'))</p><p>  set(hObject,'BackgroundColor'

52、,'white');</p><p><b>  end</b></p><p>  function rate_Callback(hObject, eventdata, handles)</p><p>  function rate_CreateFcn(hObject, eventdata, handles)</p&g

53、t;<p>  if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor'))</p><p>  set(hObject,'BackgroundColor','white');</p>

54、<p><b>  end</b></p><p>  function jiaoyan_Callback(hObject, eventdata, handles)</p><p>  function jiaoyan_CreateFcn(hObject, eventdata, handles)</p><p>  if ispc

55、&& isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor'))</p><p>  set(hObject,'BackgroundColor','white');</p><p><b>  en

56、d</b></p><p>  function data_bits_Callback(hObject, eventdata, handles)</p><p>  function data_bits_CreateFcn(hObject, eventdata, handles)</p><p>  if ispc && isequal(

57、get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor'))</p><p>  set(hObject,'BackgroundColor','white');</p><p><b>  end</b></p&g

58、t;<p>  function stop_bits_Callback(hObject, eventdata, handles)</p><p>  function stop_bits_CreateFcn(hObject, eventdata, handles)</p><p>  if ispc && isequal(get(hObject,'Ba

59、ckgroundColor'), get(0,'defaultUicontrolBackgroundColor'))</p><p>  set(hObject,'BackgroundColor','white');</p><p><b>  end</b></p><p>  func

60、tion start_serial_Callback(hObject, eventdata, handles)</p><p>  % ¡¾´ò¿ª/¹Ø±Õ´®¿Ú¡¿°´Å¥µÄ»

61、;ص÷º¯Êý</p><p>  % ´ò¿ª´®¿Ú£¬²¢³õʼ»¯Ïà¹Ø²ÎÊ

62、;ý</p><p>  %% Èô°´Ï¡¾´ò¿ª´®¿Ú¡¿°´Å¥£¬´ò¿ª´®¿&

63、#218;</p><p>  if get(hObject, 'value')</p><p>  %% »ñÈ¡´®¿ÚµÄ¶Ë¿ÚÃû</p><p>  com_n = sprintf

64、('com%d', get(handles.com, 'value'));</p><p>  %% »ñÈ¡²¨ÌØÂÊ</p><p>  rates = [300 600 1200 2400 4800 9600 19200 38400 43000 560

65、00 57600 115200];</p><p>  baud_rate = rates(get(handles.rate, 'value'));</p><p>  %% »ñȡУÑéλÉèÖÃ</p><

66、p>  switch get(handles.jiaoyan, 'value')</p><p><b>  case 1</b></p><p>  jiaoyan = 'none';</p><p><b>  case 2</b></p><p>  ji

67、aoyan = 'odd';</p><p><b>  case 3</b></p><p>  jiaoyan = 'even';</p><p><b>  end</b></p><p>  %% »ñÈ¡Ê&

68、#253;¾Ýλ¸öÊý</p><p>  data_bits = 5 + get(handles.data_bits, 'value');</p><p>  %% »ñȡֹͣλ&#

69、184;öÊý</p><p>  stop_bits = get(handles.stop_bits, 'value');</p><p>  %% ´´½¨´®¿Ú¶ÔÏó</p><p>  sc

70、om = serial(com_n);</p><p>  %% ÅäÖô®¿ÚÊôÐÔ£¬Ö¸¶¨Æä»Øµ÷º¯Êý</p&

71、gt;<p>  set(scom, 'BaudRate', baud_rate, 'Parity', jiaoyan, 'DataBits',...</p><p>  data_bits, 'StopBits', stop_bits, 'BytesAvailableFcnCount', 10,...</p>

72、;<p>  'BytesAvailableFcnMode', 'byte', 'BytesAvailableFcn', {@bytes, handles},...</p><p>  'TimerPeriod', 0.05, 'timerfcn', {@dataDisp, handles});</p>&

73、lt;p>  %% ½«´®¿Ú¶ÔÏóµÄ¾ä±ú×÷ΪÓû§Êý¾Ý£¬´æÈë

74、80;°¿Ú¶ÔÏó</p><p>  set(handles.figure1, 'UserData', scom);</p><p>  %% ³¢ÊÔ´ò¿ª´®¿Ú</p&

75、gt;<p><b>  try</b></p><p>  fopen(scom); %´ò¿ª´®¿Ú</p><p>  catch % Èô´®¿Ú´ò¿ª

76、02;§°Ü£¬Ìáʾ¡°´®¿Ú²»¿É»ñµÃ£¡¡±</p><p>  msgbox('´®¿&#

77、218;²»¿É»ñµÃ£¡');</p><p>  set(hObject, 'value', 0); %µ¯Æð±¾°´Å¥ </p><p><b>

78、;  return;</b></p><p><b>  end</b></p><p>  %% ´ò¿ª´®¿Úºó£¬ÔÊÐí´®¿Ú·

79、62;ËÍÊý¾Ý£¬Çå¿Õ½ÓÊÕÏÔʾÇø£¬µãÁÁ´®¿Ú״̬&

80、#214;¸Ê¾µÆ£¬</p><p>  %% ²¢¸ü¸Ä±¾°´Å¥Îı¾Îª¡°¹Ø±Õ

81、80;®¿Ú¡±</p><p>  set(handles.period_send, 'Enable', 'on'); %ÆôÓá¾×Ô¶¯·¢ËÍ¡¿°&#

82、180;Å¥</p><p>  set(handles.manual_send, 'Enable', 'on'); %ÆôÓá¾ÊÖ¶¯·¢ËÍ¡¿°´Å¥&

83、lt;/p><p>  set(handles.xianshi, 'string', ''); %Çå¿Õ½ÓÊÕÏÔʾÇø</p><p>  set(handles.activex1, 'value',

84、 1); %µãÁÁ´®¿Ú״ָ̬ʾµÆ</p><p>  set(hObject, 'String', '¹Ø±Õ´®¿

85、8;'); %ÉèÖñ¾°´Å¥Îı¾Îª¡°¹Ø±Õ´®¿Ú¡±</p><p>  else %È

86、4;¹Ø±Õ´®¿Ú</p><p>  %% Í£Ö¹²¢É¾³ý¶¨Ê±Æ÷</p><p>  t = timerfind;</p>

87、<p>  if ~isempty(t)</p><p><b>  stop(t);</b></p><p>  delete(t);</p><p><b>  end</b></p><p>  %% Í£Ö¹²¢

88、1;¾³ý´®¿Ú¶ÔÏó</p><p>  scoms = instrfind;</p><p>  stopasync(scoms);</p><p>  fclose(scoms);</p><p>  delete(scom

89、s);</p><p>  %% ½ûÓá¾×Ô¶¯·¢ËÍ¡¿ºÍ¡¾ÊÖ¶¯·¢ËÍ¡¿°´

90、;Å¥£¬Ï¨Ãð´®¿Ú״ָ̬ʾµÆ</p><p>  set(handles.period_send, 'Enable', 'off', 'v

91、alue', 0); %½ûÓá¾×Ô¶¯·¢ËÍ¡¿°´Å¥</p><p>  set(handles.manual_send, 'Enable', 'off'); %

92、½ûÓá¾ÊÖ¶¯·¢ËÍ¡¿°´Å¥</p><p>  set(handles.activex1, 'value', 0); %ϨÃð´&#

93、174;¿Ú״ָ̬ʾµÆ</p><p><b>  end</b></p><p>  function dataDisp(obj, event, handles)</p><p>  % ´®

94、;¿ÚµÄTimerFcn»Øµ÷º¯Êý</p><p>  % ´®¿ÚÊý¾ÝÏÔʾ</p><p>  %% »ñ&#

95、200;¡²ÎÊý</p><p>  hasData = getappdata(handles.figure1, 'hasData'); %´®¿ÚÊÇ·ñÊÕµ½Êý¾Ý</p&g

96、t;<p>  strRec = getappdata(handles.figure1, 'strRec'); %´®¿ÚÊý¾ÝµÄ×Ö·û´®ÐÎʽ£¬¶¨&#

97、202;±ÏÔʾ¸ÃÊý¾Ý</p><p>  numRec = getappdata(handles.figure1, 'numRec'); %´®¿Ú½ÓÊÕµ½µ&#

98、196;Êý¾Ý¸öÊý</p><p>  %% Èô´®¿ÚûÓнÓÊÕµ½Êý¾Ý£¬Ï

99、0;³¢ÊÔ½ÓÊÕ´®¿ÚÊý¾Ý</p><p>  if ~hasData</p><p>  bytes(obj, event, handles);</p><p><b>  end<

100、;/b></p><p>  %% Èô´®¿ÚÓÐÊý¾Ý£¬ÏÔʾ´®¿ÚÊý¾Ý</p><p>  if hasDa

101、ta</p><p>  %% ¸øÊý¾ÝÏÔʾģ¿é¼Ó»¥³âËø</p><p>  %% ÔÚÖ´Ð

102、8;ÏÔʾÊý¾ÝÄ£¿éʱ£¬²»½ÓÊÜ´®¿ÚÊý¾Ý£¬¼´²»&#

103、214;´ÐÐBytesAvailableFcn»Øµ÷º¯Êý</p><p>  setappdata(handles.figure1, 'isShow', true); </p><p>  %% ÈôÒªÏ&

104、#212;ʾµÄ×Ö·û´®³¤¶È³¬¹ý10000£¬Çå¿ÕÏÔʾÇø</p><p>  if leng

105、th(strRec) > 10000</p><p>  strRec = '';</p><p>  setappdata(handles.figure1, 'strRec', strRec);</p><p><b>  end</b></p><p>  %% Ï&#

106、212;ʾÊý¾Ý</p><p>  set(handles.xianshi, 'string', strRec);</p><p>  %% ¸üнÓÊÕ¼ÆÊý</p>

107、<p>  set(handles.rec,'string', numRec);</p><p>  %% ¸üÐÂhasData±êÖ¾£¬±íÃ÷´®¿ÚÊý¾Ý&#

108、210;Ѿ­ÏÔʾ</p><p>  setappdata(handles.figure1, 'hasData', false);</p><p>  %% ¸øÊý¾ÝÏÔʾģ

109、;¿é½âËø</p><p>  setappdata(handles.figure1, 'isShow', false);</p><p><b>  end</b></p><p>  function bytes(obj, ~, handles)</p&g

110、t;<p>  % ´®¿ÚµÄBytesAvailableFcn»Øµ÷º¯Êý</p><p>  % ´®¿Ú½ÓÊÕÊý¾Ý&

111、lt;/p><p>  %% »ñÈ¡²ÎÊý</p><p>  strRec = getappdata(handles.figure1, 'strRec'); %»ñÈ¡´®¿ÚÒªÏ&

112、#212;ʾµÄÊý¾Ý</p><p>  numRec = getappdata(handles.figure1, 'numRec'); %»ñÈ¡´®¿ÚÒѽÓÊÕ

113、02;ý¾ÝµÄ¸öÊý</p><p>  isStopDisp = getappdata(handles.figure1, 'isStopDisp'); %ÊÇ·ñ°´ÏÂÁË¡¾

114、05;£Ö¹ÏÔʾ¡¿°´Å¥</p><p>  isHexDisp = getappdata(handles.figure1, 'isHexDisp'); %ÊÇ·ñÊ®Áù½

115、;øÖÆÏÔʾ</p><p>  isShow = getappdata(handles.figure1, 'isShow'); %ÊÇ·ñÕýÔÚÖ´ÐÐÏÔʾ

116、Êý¾Ý²Ù×÷</p><p>  %% ÈôÕýÔÚÖ´ÐÐÊý¾ÝÏÔʾ²Ù×÷£¬&#

117、212;ݲ»½ÓÊÕ´®¿ÚÊý¾Ý</p><p><b>  if isShow</b></p><p><b>  return;</b></p><p><b

118、>  end</b></p><p>  %% »ñÈ¡´®¿Ú¿É»ñÈ¡µÄÊý¾Ý¸öÊý</p><p>  n = get(

119、obj, 'BytesAvailable');</p><p>  %% Èô´®¿ÚÓÐÊý¾Ý£¬½ÓÊÕËùÓÐÊý¾Ý</p&

120、gt;<p><b>  if n</b></p><p>  %% ¸üÐÂhasData²ÎÊý£¬±íÃ÷´®¿ÚÓÐÊý¾Ý

121、8;èÒªÏÔʾ</p><p>  setappdata(handles.figure1, 'hasData', true);</p><p>  %% ¶ÁÈ¡´®¿ÚÊý¾Ý&l

122、t;/p><p>  a = fread(obj, n, 'uchar');</p><p>  %% ÈôûÓÐÍ£Ö¹ÏÔʾ£¬½«½ÓÊÕµ

123、½µÄÊý¾Ý½âËã³öÀ´£¬×¼±¸ÏÔʾ</p><p>  if ~isStopDisp </p><p>  %% ¸

124、ù¾Ý½øÖÆÏÔʾµÄ״̬£¬½âÎöÊý¾ÝΪҪÏÔʾµ

125、6;×Ö·û´®</p><p>  if ~isHexDisp </p><p>  c = char(a');</p><p><b>  else</b></p><p>  strHex = dec2hex(a')';</p

126、><p>  strHex2 = [strHex; blanks(size(a, 1))];</p><p>  c = strHex2(:)';</p><p><b>  end</b></p><p>  %% ¸üÐÂÒѽÓ&#

127、202;ÕµÄÊý¾Ý¸öÊý</p><p>  numRec = numRec + size(a, 1);</p><p>  %% ¸üÐÂÒªÏÔʾµÄ

128、×Ö·û´®</p><p>  strRec = [strRec c];</p><p><b>  end</b></p><p>  %% ¸üвÎÊý</p><p> 

129、 setappdata(handles.figure1, 'numRec', numRec); %¸üÐÂÒѽÓÊÕµÄÊý¾Ý¸öÊý</p><p>  setappdata(handles.f

130、igure1, 'strRec', strRec); %¸üÐÂÒªÏÔʾµÄ×Ö·û´®</p><p><b>  end</b></p><p>  function

131、 qingkong_Callback(hObject, eventdata, handles)</p><p>  %% Çå¿ÕÒªÏÔʾµÄ×Ö·û´®</p><p>  setappdata(handl

132、es.figure1, 'strRec', '');</p><p>  %% Çå¿ÕÏÔʾ</p><p>  set(handles.xianshi, 'String', '');</p><p>  functio

133、n stop_disp_Callback(hObject, eventdata, handles)</p><p>  %% ¸ù¾Ý¡¾Í£Ö¹ÏÔʾ¡¿°´Å¥µÄ×´&

134、#204;¬£¬¸üÐÂisStopDisp²ÎÊý</p><p>  if get(hObject, 'Value')</p><p>  isStopDisp = true;</p><p><b>  else</b&

135、gt;</p><p>  isStopDisp = false;</p><p><b>  end</b></p><p>  setappdata(handles.figure1, 'isStopDisp', isStopDisp);</p><p>  function radiobutton1_

136、Callback(hObject, eventdata, handles)</p><p>  function radiobutton2_Callback(hObject, eventdata, handles)</p><p>  function togglebutton4_Callback(hObject, eventdata, handles)</p><p&

137、gt;  function hex_disp_Callback(hObject, eventdata, handles)</p><p>  %% ¸ù¾Ý¡¾Ê®Áù½øÖÆÏÔʾ¡¿¸´&#

138、209;¡¿òµÄ״̬£¬¸üÐÂisHexDisp²ÎÊý</p><p>  if get(hObject, 'Value')</p><p>  isHexDisp = tru

139、e;</p><p><b>  else</b></p><p>  isHexDisp = false;</p><p><b>  end</b></p><p>  setappdata(handles.figure1, 'isHexDisp', isHexDisp);<

140、;/p><p>  function manual_send_Callback(hObject, eventdata, handles)</p><p>  scom = get(handles.figure1, 'UserData');</p><p>  numSend = getappdata(handles.figure1, 'numSe

141、nd');</p><p>  val = get(handles.sends, 'UserData');</p><p>  numSend = numSend + length(val);</p><p>  set(handles.trans, 'string', num2str(numSend));</p>

142、<p>  setappdata(handles.figure1, 'numSend', numSend);</p><p>  %% ÈôÒª·¢Ë͵ÄÊý¾Ý²»Îª¿Õ£

143、;¬·¢ËÍÊý¾Ý</p><p>  if ~isempty(val)</p><p>  %% ÉèÖõ¹¼ÆÊýµÄ³õÖµ<

144、/p><p><b>  n = 1000;</b></p><p><b>  while n</b></p><p>  %% »ñÈ¡´®¿ÚµÄ´«Êä×´&#

145、204;¬£¬Èô´®¿ÚûÓÐÕýÔÚдÊý¾Ý£¬Ð´ÈëÊý¾Ý</p><p&

146、gt;  str = get(scom, 'TransferStatus');</p><p>  if ~(strcmp(str, 'write') || strcmp(str, 'read&write'))</p><p>  fwrite(scom, val, 'uint8', 'async');

147、 %Êý¾ÝдÈë´®¿Ú</p><p><b>  break;</b></p><p><b>  end</b></p><p>  n = n - 1; %µ¹¼

148、ÆÊý</p><p><b>  end</b></p><p><b>  end</b></p><p>  function clear_send_Callback(hObject, eventdata, handles)</p><p>  %% Ç

149、å¿Õ·¢ËÍÇø</p><p>  set(handles.sends, 'string', '')</p><p>  %% ¸üÐÂÒª·¢Ë͵

150、96;Êý¾Ý</p><p>  set(handles.sends, 'UserData', []);</p><p>  function checkbox2_Callback(hObject, eventdata, handles)</p><p>  function period_send_Call

151、back(hObject, eventdata, handles)</p><p>  % ¡¾×Ô¶¯·¢ËÍ¡¿°´Å¥µÄCallback»Øµ÷º¯Ê&#

152、253;</p><p>  %% Èô°´Ï¡¾×Ô¶¯·¢ËÍ¡¿°´Å¥£¬Æô¶¯¶¨Ê

153、7;Æ÷£»·ñÔò£¬Í£Ö¹²¢É¾³ý¶¨Ê±Æ÷</p><p>  if get(hObject, 'value')</p&

154、gt;<p>  t1 = 0.001 * str2double(get(handles.period1, 'string'));%»ñÈ¡¶¨Ê±Æ÷ÖÜÆÚ</p><p>  t = timer('ExecutionMode'

155、;,'fixedrate', 'Period', t1, 'TimerFcn',...</p><p>  {@manual_send_Callback, handles}); %´´½¨¶¨Ê±Æ÷</p><p>  set(handles

156、.period1, 'Enable', 'off'); %½ûÓÃÉèÖö¨Ê±Æ÷ÖÜÆÚµÄEdit Text¶ÔÏó</p><p> 

157、 set(handles.sends, 'Enable', 'inactive'); %½ûÓÃÊý¾Ý·¢Ëͱ༭Çø</p><p>  start(t); %Æô¶

158、;¯¶¨Ê±Æ÷</p><p><b>  else</b></p><p>  set(handles.period1, 'Enable', 'on'); %ÆôÓÃÉèÖö

159、;¨Ê±Æ÷ÖÜÆÚµÄEdit Text¶ÔÏó</p><p>  set(handles.sends, 'Enable', 'on'); %ÆôÓÃÊý¾

160、Ý·¢Ëͱ༭Çø</p><p>  t = timerfind; %²éÕÒ¶¨Ê±Æ÷</p><p>  stop(t); %Í£Ö

161、5;¶¨Ê±Æ÷</p><p>  delete(t); %ɾ³ý¶¨Ê±Æ÷</p><p><b>  end</b></p><p>  function period1_Ca

162、llback(hObject, eventdata, handles)</p><p>  function period1_CreateFcn(hObject, eventdata, handles)</p><p>  if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaul

163、tUicontrolBackgroundColor'))</p><p>  set(hObject,'BackgroundColor','white');</p><p><b>  end</b></p><p>  function clear_count_Callback(hObject, eve

164、ntdata, handles)</p><p>  %% ¼ÆÊýÇåÁ㣬²¢¸üвÎÊýnumRecºÍnumSend</p><p>  set([handl

165、es.rec, handles.trans], 'string', '0')</p><p>  setappdata(handles.figure1, 'numRec', 0);</p><p>  setappdata(handles.figure1, 'numSend', 0);</p><p>

166、  function copy_data_Callback(hObject, eventdata, handles)</p><p>  %% ÉèÖÃÊÇ·ñÔÊÐí¸´ÖƽÓÊÕÊý

167、0;ÝÏÔʾÇøÄÚµÄÊý¾Ý</p><p>  if get(hObject,'value')</p><p>  set(handles.xianshi, 'enable', 'on'

168、);</p><p><b>  else</b></p><p>  set(handles.xianshi, 'enable', 'inactive');</p><p><b>  end</b></p><p>  function figure1_Close

169、RequestFcn(hObject, eventdata, handles)</p><p>  % ¹Ø±Õ´°¿Úʱ£¬¼ì²é¶¨Ê±Æ÷ºÍ´

170、4;¿ÚÊÇ·ñÒѹرÕ</p><p>  % ÈôûÓйرգ¬ÔòÏȹرÕ

171、;</p><p>  %% ²éÕÒ¶¨Ê±Æ÷</p><p>  t = timerfind;</p><p>  %% Èô´æÔÚ¶¨Ê±Æ

172、7;¶ÔÏó£¬Í£Ö¹²¢¹Ø±Õ</p><p>  if ~isempty(t)</p><p>  stop(t); %Èô¶¨Ê±Æ÷

173、95;»ÓÐÍ£Ö¹£¬ÔòÍ£Ö¹¶¨Ê±Æ÷</p><p>  delete(t);</p><p><b>  end</b></p>&

174、lt;p>  %% ²éÕÒ´®¿Ú¶ÔÏó</p><p>  scoms = instrfind;</p><p>  %% ³¢ÊÔÍ£Ö¹¡¢¹&#

175、216;±Õɾ³ý´®¿Ú¶ÔÏó</p><p><b>  try</b></p><p>  stopasync(scoms);</p><p>  fclose(scoms);</p>

176、<p>  delete(scoms);</p><p><b>  end</b></p><p>  %% ¹Ø±Õ´°¿Ú</p><p>  delete(hObject);</p><p>  function hex

177、_send_Callback(hObject, eventdata, handles)</p><p>  %% ¸ù¾Ý¡¾Ê®Áù½øÖÆ·¢ËÍ¡¿¸´Ñ¡¿&

178、#242;µÄ״̬£¬¸üÐÂisHexSend²ÎÊý</p><p>  if get(hObject,'value')</p><p>  isHexSend = true;</p><

179、p><b>  else</b></p><p>  isHexSend = false;</p><p><b>  end</b></p><p>  setappdata(handles.figure1, 'isHexSend', isHexSend);</p><p>

180、  %% ¸üÐÂÒª·¢Ë͵ÄÊý¾Ý</p><p>  sends_Callback(handles.sends, eventdata, handles);</p><p>  function sends_Callback

181、(hObject, eventdata, handles)</p><p>  % Êý¾Ý·¢Ëͱ༭ÇøµÄCallback»Øµ÷º¯Êý</p>

182、<p>  % ¸üÐÂÒª·¢Ë͵ÄÊý¾Ý</p><p>  %% »ñÈ¡Êý¾Ý·¢Ëͱà

183、;¼­ÇøµÄ×Ö·û´®</p><p>  global v_x;</p><p>  str = get(hObject, 'string');</p><p><b>  v_x = str</b>&l

184、t;/p><p>  %% »ñÈ¡²ÎÊýisHexSendµÄÖµ</p><p>  isHexSend = getappdata(handles.figure1, 'isHexSend');</p><p>  if ~isHe

185、xSend %ÈôΪASCIIÖµÐÎʽ·¢ËÍ£¬Ö±½Ó½«×Ö·û´®×ª»¯Îª

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 眾賞文庫僅提供信息存儲(chǔ)空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論