在Simulink中对S 函数进行参数传递的三种方法
1)之前在調(diào)程序的時候,用的都是S函數(shù)來進(jìn)行編寫的,但是因為需要對不同的系數(shù)設(shè)置不同的值,然后看仿真的結(jié)果。一開始仿真的時候只會在S函數(shù)的文件中修改相應(yīng)變量的值,每次都要在幾個文件中修改四五個值,然后進(jìn)行仿真。
2) 上一種的方法實在是太麻煩了,后來經(jīng)過在MATLAB中文論壇中查找相應(yīng)的資料和看了孫忠瀟老師的書之后,開始會利用S函數(shù)的屬性頁中的對話框(如圖1所示)進(jìn)行參數(shù)變量的傳遞,然后把模型中涉及的S函數(shù)中的變量全部寫到一個M腳本文件中(腳本文件),每次仿真程序的時候,先運(yùn)行這個M文件,然后就可以仿真了,這個好處在于可以成批量的修改參數(shù),如何設(shè)置可以參考用Simulink進(jìn)行仿真遇到的一些問題以及相應(yīng)的解決方法整理。需要注意的是用這個方法之后是不需要再S函數(shù)中定義變量了,直接使用變量名就可以了。為什么這里要強(qiáng)調(diào)是M腳本文件呢?因為腳本文件中的值自己運(yùn)行之后,其值會直接輸出到工作區(qū)間中,固然用M 函數(shù)文件也可以輸出到工作去年中,但是M函數(shù)文件默認(rèn)是只輸出一個變量的,如果在調(diào)用的時候你要輸出多個變量的話,那么就需要指定輸出變量的名稱,這樣的話相比M腳本文件麻煩了許多的。但是在有的情況還是可以使用的。
正如這段代碼一樣:
A=2;
B=3;
C=4;
在直接運(yùn)行M腳本文件的時候是可以在工作區(qū)間看到這三個變量的,但是如果使用M函數(shù)的時候是這樣的:[A,B,C]=MFunctionfile_name。
但是這種方法還是不能對S函數(shù)中的參變量進(jìn)行自動的修改并且仿真。目前發(fā)現(xiàn)對于S函數(shù)模塊可以利用get_param來獲取參數(shù),但是好像并沒有什么用。相應(yīng)的命令是get_param(‘model_name/S-Function4’,’Parameters’),但是得到的是你設(shè)置的變量名稱,并不是變量的值。而且當(dāng)你使用Set_param時也可以對S函數(shù)的參數(shù)變量這一欄進(jìn)行修改,但是修改之后你原來設(shè)置的參數(shù)名稱也都沒了。
3)后來在無意中對一個示波器進(jìn)行創(chuàng)建子系統(tǒng)的操作(因為我們不會無聊到對一個模塊來創(chuàng)建子系統(tǒng)吧),就在想是不是也可以對S函數(shù)模塊進(jìn)行這種操作,因為操作子系統(tǒng)之后就可以使用Set_param函數(shù)來設(shè)置參數(shù)變量了。然后就驗證了一個發(fā)現(xiàn)是可以這樣做的。
驗證的模型框圖如圖2所示,圖3是自己寫的一個S函數(shù),圖4是采用第二種方法來傳遞參數(shù)變量的,圖5是采用第三種方法來傳遞參數(shù)變量的。對S函數(shù)模塊創(chuàng)建子系統(tǒng)還是需要在圖4的基礎(chǔ)中進(jìn)行創(chuàng)建。最終的結(jié)果如圖6所示,兩種方法的結(jié)果是不同的。
在MATLAB中采用M文件實現(xiàn)對Simulink中的S函數(shù)程序?qū)崿F(xiàn)自動調(diào)參數(shù)
圖1 S函數(shù)模塊屬性頁
圖2 仿真模型圖
圖 3 S函數(shù)
圖4 第二種方法S函數(shù)模塊屬性頁 圖5 第三種方法S函數(shù)屬性頁 圖6 最終實驗結(jié)果圖總結(jié)
以上是生活随笔為你收集整理的在Simulink中对S 函数进行参数传递的三种方法的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: [SQL]SQL server 常用代码
- 下一篇: Oracle数据库查询用 where i