乡下人产国偷v产偷v自拍,国产午夜片在线观看,婷婷成人亚洲综合国产麻豆,久久综合给合久久狠狠狠9

  • <output id="e9wm2"></output>
    <s id="e9wm2"><nobr id="e9wm2"><ins id="e9wm2"></ins></nobr></s>

    • 分享

      GUI指導(dǎo)教程系列(9)——在GUI中調(diào)用Simulink模型 - MATLAB技術(shù)論壇 ...

       aliceblue 2011-04-29

      MATLAB技術(shù)論壇

      標(biāo)題: GUI指導(dǎo)教程系列(9)——在GUI中調(diào)用Simulink模型

      作者: dynamic    時(shí)間: 2010-3-25 22:40     標(biāo)題: GUI指導(dǎo)教程系列(9)——在GUI中調(diào)用Simulink模型

      本節(jié)教程主要向大家演示使用三種不同的方法,在GUIDE中嵌入Simulink模塊。關(guān)于原理大家可以參考http://www./access/ ... g_guis/f6-8865.html

      在Simulink中能夠直觀快速的搭建系統(tǒng)模型,如果再聯(lián)合GUIDE的面向?qū)ο罂梢暬幊?,可以說(shuō)是錦上添花!將Simulink融入到GUIDE中可以方便模型的終端用戶,很容易直接可視化的操控模型參數(shù)和顯示仿真結(jié)果,而此時(shí)并不需要進(jìn)入Simulink環(huán)境。


      構(gòu)建Simulink模型



      該部分我們將快速的構(gòu)建一個(gè)Simulink模型方便在后面的GUIDE中使用。本次我們就使用一個(gè)簡(jiǎn)單的二階“質(zhì)量-彈簧-阻尼”系統(tǒng)作為示例吧。

      image001.gif 

      在使用該教程時(shí),我們假定您已經(jīng)具備Simulink相關(guān)建?;A(chǔ)和了解“質(zhì)量-彈簧-阻尼”系統(tǒng)的理論。因此在這里我就不深入介紹Simulink模型的建立和“質(zhì)量-彈簧-阻尼”系統(tǒng)的數(shù)學(xué)推導(dǎo)。如果的確需要,建議您參考下http://edu./Tutorials/Matlab/Simulink/index.html

      1、先下載論壇為您制作好的Simulink和GUI模型 simulink-gui.zip (13.04 KB, 下載次數(shù): 338) ,包含simulink_gui.fig、simulink_gui.m、 simulateButton.mmass_spring.mdl四個(gè)文件,將其解壓到MATLAB工作目錄。

      2、在Simulink中打開模型,框圖如下所示

      image003.png 

      3、請(qǐng)注意增益(Gain)模塊的增益使用的是變量1/m、c/m和k/m,而不是數(shù)值。因?yàn)?font color=red>Simulink默認(rèn)使用基本狀態(tài)空間(Base WorkSpace)的數(shù)據(jù),因此在仿真之前必須先在狀態(tài)空間定義參數(shù)m、c和k,否則將出錯(cuò)。當(dāng)然我們可以使用set_param()函數(shù)直接設(shè)置參數(shù),這個(gè)將會(huì)在后面講解。

      4、由于函數(shù)有自己的狀態(tài)空間(不是Base Workspace),因此在函數(shù)中使用sim()函數(shù)進(jìn)行模型仿真,即使你在函數(shù)中定義了模型的必要參數(shù),但是這些參數(shù)只存在于函數(shù)狀態(tài)空間中,模型在仿真是沒(méi)法獲取。比如下面的代碼將會(huì)導(dǎo)致錯(cuò)誤
      1. function runSimulinkModel(m,c,k)
      2. % 即使在函數(shù)中有模型的參數(shù)輸入或定義,但是Simulink默認(rèn)只使用基本狀態(tài)空間的數(shù)據(jù)
      3. sim('mass_spring');
      復(fù)制代碼
      5、由于函數(shù)狀態(tài)空間和基本狀態(tài)空間的變量和數(shù)據(jù)不兼容,這就增加了在GUIDE中調(diào)用Simulink模型的難度。在接下來(lái)的教程中,我們將討論使用三種方法來(lái)解決這個(gè)問(wèn)題!


      GUIDE調(diào)用Simulink




      方法一:

      主要使用set_param函數(shù)設(shè)置仿真參數(shù)


      方法二:

      Simulink中提供的simset()函數(shù),可以讓用戶自定Simulink模型的運(yùn)行空間(默認(rèn)是Base Workspace),我們只要將Simulink設(shè)置為從當(dāng)前工作空間運(yùn)行就Ok了。關(guān)于simset的更多用法,感興趣的網(wǎng)友可以自己參考Matlab幫助!

      1、在GUIDE中打開simulink_gui.fig文件(不會(huì)使用GUIDE,那先看下http://www./thread-5217-1-1.html),GUI布局如下所示

      image005.png 

      2、打開simulink_gui.m文件定位到Simulate!按鈕的回調(diào)函數(shù)simulate_pushbutton_Callback,在后面添加如下代碼
      1. axes(handles.axes1) % 將axes1設(shè)置為當(dāng)前坐標(biāo)系,便于繪制仿真結(jié)果
      2. m=str2num(get(handles.mass_editText,'String')); % 獲取質(zhì)量
      3. c=str2num(get(handles.damping_editText,'String')); % 獲取阻尼
      4. k=str2num(get(handles.spring_editText,'String')); % 獲取勁度系數(shù)

      5. % 配置Simulink仿真選項(xiàng),使其使用當(dāng)前工作空間
      6. % 設(shè)置Simulink從當(dāng)前工作空間運(yùn)行
      7. options = simset('SrcWorkspace','current');

      8. % 使用sim()函數(shù)對(duì)模型進(jìn)行仿真
      9. % 第一參數(shù)是模型名稱
      10. % 第二個(gè)參數(shù)是向量,指定仿真開始和結(jié)束時(shí)間
      11. % 如果設(shè)置為[],則使用在Simulink中設(shè)置的始末時(shí)間
      12. % 第三個(gè)參數(shù)設(shè)置Simulink仿真選項(xiàng)
      13. sim('mass_spring',[],options);

      14. % 繪制圖形% 模型中有一個(gè)OUT模塊,使用它我們可以設(shè)置輸出變量為tout和yout
      15. % 然后就可以直接調(diào)用Simulink的獲取仿真結(jié)果tout和yout進(jìn)行繪圖了
      16. plot(tout,yout)
      17. xlabel('Time')
      18. ylabel('Displacement')
      19. Title('2nd Order Mass Spring System')
      20. grid on
      復(fù)制代碼
      3、保存修改,再運(yùn)行GUI。在文本框中輸入“質(zhì)量-彈簧-阻尼”系統(tǒng)的三個(gè)參數(shù)(注意不要輸入字母、符號(hào)或負(fù)數(shù)),然后點(diǎn)擊“Simulate!”按鈕,看看我們的勞動(dòng)成果吧!

      image013.png 


      方法三:

      1、同樣在GUIDE中打開未經(jīng)有修改的simulink_gui.fig文件

      image005.png 

      2、雙擊“Simulate!”按鈕打開屬性查看器,將Callback屬性修改為simulateButton。以后每次點(diǎn)擊“Simulate!”按鈕時(shí),則GUI只響應(yīng)simlateButton中定義的操作,而不是simulate_pushbutton_Callback。

      注意:simulateButton是另外編寫的一個(gè)M腳本文件,MATLAB中腳本文件(不同于函數(shù)文件)中的所有變量和數(shù)據(jù)共用基本狀態(tài)空間。

      image007.png 

      3、其實(shí)simulateButton.m腳本的代碼如下
      1. % 注意到simulateButton.m文件不是一個(gè)M函數(shù)(以function開頭的為M函數(shù)),而是M腳本!
      2. % Matlab腳本將在基本工作空間運(yùn)行,它涉及到所有的變量和數(shù)據(jù)都保存在基本工作空間!
      3. % 而Simulink所有參數(shù)默認(rèn)調(diào)用基本工作空間的數(shù)據(jù),所以此時(shí)我們就可以直接使用sim()函數(shù)進(jìn)行模型仿真了!

      4. clear all

      5. % 獲取當(dāng)前GUI窗體的句柄
      6. h =gcf;
      7. % 獲取GUI的handles結(jié)構(gòu)體,它包含了所有控件的信息
      8. handles = guidata(h);

      9. % 選擇當(dāng)前坐標(biāo)系,由于后面的繪圖
      10. axes(handles.axes1);

      11. % 獲取文本框中的Simulink仿真參數(shù)
      12. m=str2num(get(handles.mass_editText,'String')); % 注意獲取的string是一個(gè)字符串,需要使用str2num將其轉(zhuǎn)換為數(shù)值
      13. c=str2num(get(handles.damping_editText,'String'));
      14. k=str2num(get(handles.spring_editText,'String'));

      15. % 仿真系統(tǒng)
      16. sim('mass_spring');

      17. % 繪制仿真結(jié)果圖形
      18. plot(tout,yout)
      19. xlabel('Time')
      20. ylabel('Displacement')
      21. Title('2nd Order Mass Spring System')
      22. grid on
      復(fù)制代碼
      其實(shí)方法二的一種變形就是,跨空間計(jì)算Simulink模型所需要的參數(shù),比如evalin('base','m=5'),就表示在基本工作空間運(yùn)行m=5這條命令。

      4、保存下對(duì)GUI的修改,驗(yàn)證下我們的成果吧!

      image013.png 

      圖片附件: image001.gif (2010-3-25 22:42, 5.23 KB) / 下載次數(shù) 6
      http://www./forum.php?mod=attachment&aid=NDQ0NHwyYzg5NTYyY3wxMzA0MDc3ODI0fDkwMDk5



      圖片附件: image003.png (2010-3-25 22:42, 12.78 KB) / 下載次數(shù) 9
      http://image28.360doc.com/DownloadImg/2011/04/2919/11332968_3



      圖片附件: image005.png (2010-3-25 22:42, 15.32 KB) / 下載次數(shù) 5
      http://image28.360doc.com/DownloadImg/2011/04/2919/11332968_4



      圖片附件: image007.png (2010-3-25 22:42, 11.16 KB) / 下載次數(shù) 4
      http://www./forum.php?mod=attachment&aid=NDQ0N3wzZDlkNzA3NHwxMzA0MDc3ODI0fDkwMDk5



      圖片附件: image013.png (2010-3-25 22:42, 12.05 KB) / 下載次數(shù) 2
      http://image28.360doc.com/DownloadImg/2011/04/2919/11332968_5



      附件: simulink-gui.zip (2010-3-25 22:44, 13.04 KB) / 下載次數(shù) 338
      http://www./forum.php?mod=attachment&aid=NDQ0OXw2ZDE0NDQwNHwxMzA0MDc3ODI0fDkwMDk5

      圖片附件: image005.png (2010-3-25 23:09, 15.32 KB) / 下載次數(shù) 6
      http://image28.360doc.com/DownloadImg/2011/04/2919/11332968_6



      圖片附件: image013.png (2010-3-25 23:09, 12.05 KB) / 下載次數(shù) 4
      http://image28.360doc.com/DownloadImg/2011/04/2919/11332968_7

       
       
      assignin('base','m',m);
      assignin('base','c',c);
      assignin('base','k',k);
      sim('massspring');也可以

        本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購(gòu)買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊一鍵舉報(bào)。
        轉(zhuǎn)藏 分享 獻(xiàn)花(0

        0條評(píng)論

        發(fā)表

        請(qǐng)遵守用戶 評(píng)論公約

        類似文章 更多