0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

請問Simulink如何在線動態(tài)修改模塊參數(shù)呢?

冬至子 ? 來源:Matlab Fans ? 作者:Matlab_Fans ? 2023-07-20 17:23 ? 次閱讀

典型的Simulink模塊雙擊時會彈出對話框,在對話框中可以設(shè)置模塊參數(shù),如:雙擊正弦波模塊(SineWave),可以設(shè)置正弦波幅值和頻率;雙擊增益模塊(Gain),可以設(shè)置增益值;雙擊PID控制器模塊(PID Controller),可以設(shè)置PID參數(shù)值;雙擊傳遞函數(shù)模塊(Transfer Fcn),可以設(shè)置傳遞函數(shù)的分子和分母系數(shù)。

圖片

但很多時候,需要在 Simulink仿真過程中修改模塊的對話框參數(shù) (稱為在線修改或動態(tài)修改模塊參數(shù)),如:希望在仿真過程中改變正弦波的頻率,實現(xiàn)掃頻信號;希望在仿真過程中改變增益模塊增益值,實現(xiàn)變增益;希望在仿真過程中改變PID控制器增益,實現(xiàn)自適應(yīng)的PID控制;希望在仿真過程中改變傳遞函數(shù)的分子或分母系數(shù),實現(xiàn)時變的傳遞函數(shù)。

本文詳細(xì)介紹Simulink如何在線修改(動態(tài)修改)模塊參數(shù)的方法,并提供原創(chuàng)的DynamicChange Parameter模塊(簡稱DCP模塊),可以輕松解決在線修改(動態(tài)修改)模塊參數(shù)問題,提供詳細(xì)幫助文件和大量例程,簡單易用。

1. 方法

Simulink中的對話框參數(shù)有三種類型:Tunable(可調(diào));Nontunable(不可調(diào));SimOnlyTunable(不可動態(tài)調(diào)整)。需要動態(tài)調(diào)整的參數(shù),必須為可調(diào)(Tunable)類型。

鄭志波《Simulink 模塊參數(shù)在線修改方法的研究》中提到了兩種在線更新參數(shù)的方法:1. 使用全局變量,在m文件中動態(tài)修改全局變量的值,進(jìn)而達(dá)到修改參數(shù)的目的;2. 使用set_param函數(shù),在m文件中動態(tài)設(shè)置對話框參數(shù)。

圖片

經(jīng)測試,第一種方法不可行。如圖2所示,Modify_c函數(shù)中對全局變量進(jìn)行動態(tài)更新,使c的取值由0每隔1s增加至11,Simulink運(yùn)行完成后全局變量的c更新為11,模型對全局變量的更新是成功的,但對話框參數(shù)并未隨全局變量的改變而改變,增益c仍然為0。原因是:simulink模塊對變量的讀入只在模型初始化(或開始運(yùn)行)的回調(diào)函數(shù)中執(zhí)行,在仿真進(jìn)行的過程中,盡管對話框參數(shù)的變量值改變了,但是系統(tǒng)并不會讀取更新后的參數(shù)值,仿真中使用的參數(shù)值仍是變量的初始值0。

第二種方法是可行的,該方法可用S函數(shù)來實現(xiàn),將模塊名和參數(shù)名都作為S函數(shù)的參數(shù),需要改變的參數(shù)值作為S函數(shù)的輸入,在S函數(shù)的狀態(tài)更新(Updata)回調(diào)函數(shù)中,使用set_param函數(shù)對對話框參數(shù)進(jìn)行動態(tài)更新。

本人采用Level-2的S函數(shù)實現(xiàn)了上述第二種方法,并將其封裝為模塊形式(下文中稱此模塊為DCP模塊),方便在其它模型中調(diào)用。

3. DCP模塊

DCP模塊經(jīng)封裝后,與Simulink自帶模塊完全相同,有兩個輸入端口,雙擊模塊會彈出屬性對話框,可以在對話框中設(shè)置需要動態(tài)改變的模塊參數(shù)信息。

圖片

輸入接口

接口1 [var] : 需要設(shè)定的參數(shù)值;

接口2[flag] : flag=0時忽略接口1的輸入,不對參數(shù)進(jìn)行更新;flag~=0時更新參數(shù)。

對話框參數(shù):

模塊名[block_name] :格式為“mdl文件名/子模型名/模塊名(tag)”,字符串形式;

參數(shù)名[par_name] : 需要動態(tài)修改的參數(shù)變量名,字符串形式,如需要修改增益模塊的增益值,則輸入“Gain”。一般來說,手動輸入模塊名、參數(shù)名比較復(fù)雜而且容易出錯,模塊中采用函數(shù)自動提取模塊名和變量名,用戶只需在所提供的GUI中作出選擇即可。

重置[Reset] : 此復(fù)選框選中時,彈出選擇模塊和參數(shù)設(shè)置GUI,如圖4所示。

圖片

圖4 模塊和參數(shù)設(shè)置GUI

采樣模式: 1×2矩陣;設(shè)置模塊的采樣方式(與S函數(shù)中的采樣方式定義相同)。

[0 offset] : 連續(xù)采樣時間,offset給定時間偏置;

[ts offset] : 離散采樣時間,ts為采樣時間;

[-1, 0] : 繼承采樣時間,取決于上一模塊的采樣方式和時間;

參數(shù)維數(shù): 1×2矩陣([行數(shù) 列數(shù)]),表示需要修改參數(shù)的維數(shù)(即接口1中輸入數(shù)據(jù)的維數(shù)),使用本模塊必須保證參數(shù)的維數(shù)不變。

4.使用

DCP模塊配套文件有:

1.jpg

使用步驟如下:

1)將DCP文件夾放置在Matlab工作目錄下;

2)運(yùn)行1次AddFilePath.m文件(僅首次使用DCP模塊時需要執(zhí)行此步驟);

3)兩種方式將DCP模塊加入到Simulink中:方法一,打開Simulink Library Browser -> User Defined Block模塊組 -> DCP模塊 -> 將DCP模塊拖入Simulink模型中;方法二,復(fù)制例程中的DCP模塊至需要的Simulink模型中。

圖片

4)雙擊DCP模塊,彈出屬性設(shè)置對話框,點擊Reset復(fù)選框,彈出模塊和參數(shù)設(shè)置GUI,選擇需要在線修改的模塊和參數(shù),設(shè)置采樣時間和參數(shù)維度,點擊“OK”確定;

5)將需要修改的參數(shù)值接入DCP模塊的輸入接口1,輸入接口2用于進(jìn)行時序控制,如不需要進(jìn)行時序控制,輸入接口2可以接入常數(shù)1。

5. 例程

5.1 DCP模塊實現(xiàn)可變增益

模型 :DCP_Test01_stairGain.slx

圖片

功能描述 :通過動態(tài)改變增益值,實現(xiàn)階梯上升曲線;

改變參數(shù)的條件 :通過設(shè)置DCP 為離散定步長采樣方式,并給定固定采樣時間0.1s,來實現(xiàn)每隔0.1s 改變一次增益值。

結(jié)果

圖片

說明 :實際設(shè)定的參數(shù)比期望設(shè)定的要滯后一拍,這說明參數(shù)的更新需要在下一個步長起作用,0~0.1s內(nèi)設(shè)定的參數(shù)值2為Gain模塊的初始值。

5.2 DCP模塊實現(xiàn)正弦掃頻信號

模型 :DCP_Test02_sweep.mdl

圖片

功能描述 :通過動態(tài)改變正弦波模塊的頻率,實現(xiàn)掃頻曲線。頻率間隔為1Hz,每個頻率保持時間為1s;

改變參數(shù)的條件 :通過輸入接口1 中參數(shù)par_val 的輸入波形來控制,接口1 中輸入的參數(shù)為階梯波(可在Scope__Frequence 中查看),DCP 模塊中的set_param 函數(shù)只會在階梯波發(fā)生突變的時間執(zhí)行,其它時間DCP 模塊會執(zhí)行,但其中的set_param 函數(shù)不會執(zhí)行,這不會占用太多的資源。

結(jié)果

圖片

說明:在整數(shù)秒時刻(1、2、3 …)頻率突變。

5.3 DCP模塊實現(xiàn)時變傳遞函數(shù)

模型 :DCP_Test03_variGs.mdl

圖片

功能描述 :通過動態(tài)改變傳遞函數(shù)模塊的分母向量實現(xiàn)時變的傳遞函數(shù),在仿真時間為5s 時,傳遞函數(shù)分母由[1 2 50]突變?yōu)閇1 4 100];

參數(shù)改變的條件 :在仿真時間等于5s 時,使DCP 模塊的接口2 的flag 值從0 突變到1(這里通過一個階躍來實現(xiàn)這個突變)。DCP 模塊中的set_param 函數(shù)前5s 由于flag=0 不會執(zhí)行;階躍后flag=1,set_param 函數(shù)執(zhí)行一次;之后又由于接口1 中的輸入保持恒定,set_param 函數(shù)也不會再執(zhí)行。

結(jié)果

圖片

5.4 DCP模塊實現(xiàn)積分分離PID控制算法

模型 :DCP_Test04_int_separatePID.mdl

圖片

功能描述 :通過動態(tài)改變PID 控制器積分增益的值(由0 變?yōu)?.01),來控制積分環(huán)節(jié)的投入與分離,對一個純滯后的一階系統(tǒng)進(jìn)行控制;仿真表明:積分分離式PID 可無超調(diào)收斂到給定值,常規(guī)PID 有超調(diào),不投入積分時,又會存在穩(wěn)態(tài)誤差。

參數(shù)改變的條件 :當(dāng)偏差信號(指令信號減去給定信號)的絕對值小于閾值(這里取0.3)時,積分增益由0 突變?yōu)?.01,之后保持不變。本例與前述例子的不同之處在于,使用一個布爾條件作為DCP 模塊接口2 的flag 值。

注意 :由于DCP 模塊中的第二個接口定義的是double 類型的數(shù)據(jù),所以判斷條件的結(jié)構(gòu)(為布爾量)不能直接接入,需通過一個數(shù)據(jù)類型轉(zhuǎn)換(Data Type Conversion)模塊進(jìn)行數(shù)據(jù)類型轉(zhuǎn)換之后再輸入到DCP 模塊的接口2。數(shù)據(jù)類型轉(zhuǎn)換模塊的路徑為:Simulink –> Signal Attributes -> Data Type Conversion。

結(jié)果

圖片

6. 適用范圍

使用set_param修改模塊參數(shù)耗時較長,如將set_param循環(huán)10000次消耗4.9s,過于頻繁的調(diào)用DCP模塊會使模型仿真速度很慢。為了盡量減少set_param不必要的執(zhí)行,DCP模塊中采用了以下方法:

1)當(dāng)輸入接口1中輸入的變量值與上一采樣時間相等,即var(k) = var(k-1)時,set_param不執(zhí)行;

2)當(dāng)輸入接口2中輸入0值,即flag=0時,set_param不執(zhí)行;

下面情況請慎用本模塊:需要設(shè)定的參數(shù)連續(xù)變化,即在求解器的每個時間(步長)內(nèi)都要執(zhí)行set_param,這將嚴(yán)重影響仿真效率。此時建議使用“轉(zhuǎn)換”的思想,將對話框參數(shù)變成輸入接口。

DCP 模塊的功能通俗的講,就是將模塊的“對話框參數(shù)”變成一個“輸入接口”,通過在這個接口中引入動態(tài)信號(simulink 中連線傳遞的都是動態(tài)信號),來達(dá)到動態(tài)改變參數(shù)的目的。 DCP模塊帶來方便的同時,頻繁執(zhí)行set_param會降低Simulink運(yùn)行速度,因此參數(shù)連續(xù)變化時需要一種效率更高的解決辦法。

變參數(shù)的問題稍作變化可以得到解決,如例程1 中的變增益問題:如下所示,可直接使用乘法模塊,將信號增益轉(zhuǎn)換成信號乘法,從而實現(xiàn)將“對話框參數(shù)”轉(zhuǎn)換成“輸入?yún)?shù)”。

圖片

當(dāng)然這只是一個簡單的例子,對于復(fù)雜的問題道理也是相同的,即:使用恰當(dāng)?shù)哪K,將“對話框參數(shù)”轉(zhuǎn)變?yōu)椤拜斎虢涌凇薄M笥袡C(jī)會的話,我將向大家介紹幾種實現(xiàn)時變傳遞函數(shù)的方法。

7. 不足之處

1)由于S 函數(shù)中未定義RTW 相關(guān)回調(diào)函數(shù),使用了DCP 模塊的simulink 模型不能編譯。

2)set_param 是在S 函數(shù)中的Updata 回調(diào)函數(shù)中,simulink 的運(yùn)行模式是先執(zhí)行Output回調(diào)函數(shù),再執(zhí)行Updata 回調(diào)函數(shù),所以DCP 模塊中設(shè)置的參數(shù)只能在下一步長中生效,當(dāng)前步長的計算中仍使用的舊參數(shù),即使用本模塊有一拍的固有延時(延時時間為一個仿真步長)。觀察Test01 的結(jié)果,0-0.1s 內(nèi),輸出為Gain 的初始值,0.1-0.2s 內(nèi),輸出為0(0 是在0.1s 時由DCP 設(shè)置的),0.2-0.3s 內(nèi)為0.1 …… 一般來說,當(dāng)simulink 的仿真步長足夠小時,上述的延時可以忽略不計。

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • DCP
    DCP
    +關(guān)注

    關(guān)注

    0

    文章

    28

    瀏覽量

    17140
  • PID控制器
    +關(guān)注

    關(guān)注

    2

    文章

    167

    瀏覽量

    18488
  • GUI
    GUI
    +關(guān)注

    關(guān)注

    3

    文章

    631

    瀏覽量

    39298
  • RTW
    RTW
    +關(guān)注

    關(guān)注

    1

    文章

    9

    瀏覽量

    10950
  • simulink仿真
    +關(guān)注

    關(guān)注

    0

    文章

    75

    瀏覽量

    8527
收藏 人收藏

    評論

    相關(guān)推薦

    何在代碼中動態(tài)修改手指電容?

    何在代碼中動態(tài)修改手指電容
    發(fā)表于 05-22 07:11

    GUI控制simulink模塊參數(shù)的綜合實例

    和slider的聯(lián)合使用,及利用edit text 和slider 對simulink 參數(shù)動態(tài)修改;4、演示了simulink
    發(fā)表于 03-20 11:13

    Simulink在線修改參數(shù)

    求助各位大神!有什么方法可以實現(xiàn)在線修改simulink模塊參數(shù),比如電阻模塊的阻值按照某個函
    發(fā)表于 04-24 11:46

    在gui中修改simulink參數(shù)一直報錯顯示

    在gui中修改simulink參數(shù)set_param('mo/Pulse Generator','Period',1/hz)一直報錯顯示,怎么解決,修改其他
    發(fā)表于 11-20 19:05

    何在simulink初始化電機(jī)參數(shù)

    何在simulink初始化電機(jī)參數(shù)?最近有很多同學(xué)問,在模型里面為什么有Ld、Lq、Ts等參數(shù),這些參數(shù)如何設(shè)置。這些
    發(fā)表于 07-07 07:05

    如何對基于matlab╱simulink的礦井低壓電纜絕緣參數(shù)在線監(jiān)測系統(tǒng)進(jìn)行仿真

    電纜絕緣參數(shù)在線監(jiān)測的原理是什么?如何對基于matlab╱simulink的礦井低壓電纜絕緣參數(shù)在線監(jiān)測系統(tǒng)進(jìn)行仿真?
    發(fā)表于 09-06 06:55

    怎樣使用STM32去支持并運(yùn)行RTT動態(tài)模塊

    的驅(qū)動,因為最終編譯的動態(tài)模塊需要在文件系統(tǒng)中。進(jìn)入到bsp目錄,使用env工具配置如下:為了支持動態(tài)模塊的運(yùn)行,修改 bsp 對應(yīng)的 rt
    發(fā)表于 06-08 10:58

    請問何在Peripheral例程修改“外圍設(shè)備首選連接參數(shù)”?

    如題,APP查看GAP 屬性外圍設(shè)備首選連接參數(shù)為:50 00 80 00 E8 03。通讀Peripheral例程,對應(yīng)不上。請問何在Peripheral例程修改“外圍設(shè)備首選連接
    發(fā)表于 10-09 06:47

    請問N32926能否調(diào)用動態(tài)?需要修改內(nèi)核嗎?

    現(xiàn)在需要開發(fā)一個項目,中間需要用到第三方的動態(tài)庫,請問N32926能否調(diào)用動態(tài),需要修改內(nèi)核嗎?
    發(fā)表于 06-14 09:14

    SIMULINK功能模塊的處理

    SIMULINK功能模塊的處理功能模塊的基本操作,包括模塊的移動、復(fù)制、刪除、轉(zhuǎn)向、改變大小、模塊命名、顏色設(shè)定、
    發(fā)表于 06-19 12:50 ?2450次閱讀

    SIMULINK線的處理/SIMULINK自定義功能模塊

    SIMULINK線的處理/SIMULINK自定義功能模塊     SIMULINK模型的構(gòu)建是通過用線將各種功能
    發(fā)表于 06-19 12:51 ?5088次閱讀

    simulink模塊簡單介紹

    simulink模塊介紹simulink模塊介紹simulink模塊介紹
    發(fā)表于 12-29 10:46 ?0次下載

    SIMULINK仿真基礎(chǔ)及模塊介紹

    SIMULINK是MATLAB軟件的擴(kuò)展,它是實現(xiàn)動態(tài)系統(tǒng)建模和仿真的一個軟件包,它與MATLAB語言的主要區(qū)別在于,其與用戶交互接口是基于Windows的模型化圖形輸入,其結(jié)果是使得用戶可以把更多
    發(fā)表于 01-24 17:50 ?0次下載

    PLC控制系統(tǒng)如何實現(xiàn)在線修改程序和在線修改配置(CCOTF)

    修改,這樣就可以實現(xiàn)在線修改程序和在線修改配置(CCOTF)。 在線
    的頭像 發(fā)表于 09-23 09:55 ?1.3w次閱讀
    PLC控制系統(tǒng)如何實現(xiàn)<b class='flag-5'>在線</b><b class='flag-5'>修改</b>程序和<b class='flag-5'>在線</b><b class='flag-5'>修改</b>配置(CCOTF)

    如何動態(tài)修改cron參數(shù)?

    按正常來講,修改定時任務(wù)的執(zhí)行周期,把服務(wù)停下來,改下任務(wù)的cron參數(shù),再重啟服務(wù)就搞搞定了。這種方式很簡單,沒有可說的,但是有沒有一種可能,在不停服務(wù)的情況下,就可以動態(tài)修改任務(wù)
    的頭像 發(fā)表于 04-12 11:04 ?1783次閱讀