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

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

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

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

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

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

圖片

但很多時(shí)候,需要在 Simulink仿真過程中修改模塊的對(duì)話框參數(shù) (稱為在線修改或動(dòng)態(tài)修改模塊參數(shù)),如:希望在仿真過程中改變正弦波的頻率,實(shí)現(xiàn)掃頻信號(hào);希望在仿真過程中改變?cè)鲆婺K增益值,實(shí)現(xiàn)變?cè)鲆妫幌M诜抡孢^程中改變PID控制器增益,實(shí)現(xiàn)自適應(yīng)的PID控制;希望在仿真過程中改變傳遞函數(shù)的分子或分母系數(shù),實(shí)現(xiàn)時(shí)變的傳遞函數(shù)。

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

1. 方法

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

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

圖片

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

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

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

3. DCP模塊

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

圖片

輸入接口

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

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

對(duì)話框參數(shù):

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

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

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

圖片

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

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

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

[ts offset] : 離散采樣時(shí)間,ts為采樣時(shí)間;

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

參數(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模塊時(shí)需要執(zhí)行此步驟);

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

圖片

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

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

5. 例程

5.1 DCP模塊實(shí)現(xiàn)可變?cè)鲆?/p>

模型 :DCP_Test01_stairGain.slx

圖片

功能描述 :通過動(dòng)態(tài)改變?cè)鲆嬷?,?shí)現(xiàn)階梯上升曲線;

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

結(jié)果

圖片

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

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

模型 :DCP_Test02_sweep.mdl

圖片

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

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

結(jié)果

圖片

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

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

模型 :DCP_Test03_variGs.mdl

圖片

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

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

結(jié)果

圖片

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

模型 :DCP_Test04_int_separatePID.mdl

圖片

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

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

注意 :由于DCP 模塊中的第二個(gè)接口定義的是double 類型的數(shù)據(jù),所以判斷條件的結(jié)構(gòu)(為布爾量)不能直接接入,需通過一個(gè)數(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ù)耗時(shí)較長(zhǎng),如將set_param循環(huán)10000次消耗4.9s,過于頻繁的調(diào)用DCP模塊會(huì)使模型仿真速度很慢。為了盡量減少set_param不必要的執(zhí)行,DCP模塊中采用了以下方法:

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

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

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

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

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

圖片

當(dāng)然這只是一個(gè)簡(jiǎn)單的例子,對(duì)于復(fù)雜的問題道理也是相同的,即:使用恰當(dāng)?shù)哪K,將“對(duì)話框參數(shù)”轉(zhuǎn)變?yōu)椤拜斎虢涌凇?。往后有機(jī)會(huì)的話,我將向大家介紹幾種實(shí)現(xiàn)時(shí)變傳遞函數(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ù)只能在下一步長(zhǎng)中生效,當(dāng)前步長(zhǎng)的計(jì)算中仍使用的舊參數(shù),即使用本模塊有一拍的固有延時(shí)(延時(shí)時(shí)間為一個(gè)仿真步長(zhǎng))。觀察Test01 的結(jié)果,0-0.1s 內(nèi),輸出為Gain 的初始值,0.1-0.2s 內(nèi),輸出為0(0 是在0.1s 時(shí)由DCP 設(shè)置的),0.2-0.3s 內(nèi)為0.1 …… 一般來說,當(dāng)simulink 的仿真步長(zhǎng)足夠小時(shí),上述的延時(shí)可以忽略不計(jì)。

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

    關(guān)注

    0

    文章

    29

    瀏覽量

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

    關(guān)注

    2

    文章

    168

    瀏覽量

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

    關(guān)注

    3

    文章

    632

    瀏覽量

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

    關(guān)注

    1

    文章

    9

    瀏覽量

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

    關(guān)注

    0

    文章

    75

    瀏覽量

    8542
收藏 人收藏

    評(píng)論

    相關(guān)推薦

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

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

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

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

    Simulink在線修改參數(shù)

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

    在gui中修改simulink參數(shù)一直報(bào)錯(cuò)顯示

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

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

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

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

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

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

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

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

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

    請(qǐng)問N32926能否調(diào)用動(dòng)態(tài)庫(kù)?需要修改內(nèi)核嗎?

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

    SIMULINK功能模塊的處理

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

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

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

    simulink模塊簡(jiǎn)單介紹

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

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

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

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

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

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

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