日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 运维知识 > windows >内容正文

windows

Simulink代码生成:Simulink Function子系统及其代码

發(fā)布時間:2023/12/20 windows 47 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Simulink代码生成:Simulink Function子系统及其代码 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

本文研究Simulink Function子系統(tǒng)的用法和該模塊生成的代碼。

文章目錄

  • 1 問題引入
  • 2 Simulink Function子系統(tǒng)建模
    • 2.1 Simulink Function子系統(tǒng)
    • 2.2 Function Caller模塊
  • 3 代碼生成
    • 3.1 默認(rèn)配置
    • 3.2 Function visibility配置
    • 3.3 多個輸出端口
    • 3.4 輸入和輸出變量相同
    • 3.5 參數(shù)為數(shù)組
    • 3.6 參數(shù)為結(jié)構(gòu)體
  • 4 總結(jié)

1 問題引入

博主在其他的博客中研究了許多模塊和子系統(tǒng),以及它們生成的代碼。通常來說,博主研究的方法是建立一個Inport,一個outport,以及兩者之間的控制邏輯,譬如如下的Gain模塊。

配置好該模型,并生成代碼如下。

其中的step函數(shù)就可以反映出模型的算法,輸入和輸出都被定義為全局變量,而step函數(shù)的參數(shù)和返回值都是void。

博主最近遇到的項(xiàng)目需求是,需要生成帶有非空參數(shù)的函數(shù)。也就是要把模型的inport作為函數(shù)的參數(shù)傳入,outport作為函數(shù)的返回值。這樣一來,以前的代碼生成方案就無法使用了。經(jīng)博主研究后,可以采用Simulink Function子系統(tǒng),來實(shí)現(xiàn)這個需求。

2 Simulink Function子系統(tǒng)建模

本節(jié)研究一下Simulink Function子系統(tǒng)的建模。

2.1 Simulink Function子系統(tǒng)

1)首先,從Simulink Library中拖拽出一個Simulink Function子系統(tǒng)到空白模型中。

從外面可以觀察到,Simulink Function子系統(tǒng)上方有一個引子,和一個函數(shù)表達(dá)式。左右兩側(cè)沒有和子系統(tǒng)外界交互的端口,這一點(diǎn)和其他子系統(tǒng)不一樣。

2)雙擊進(jìn)入子系統(tǒng),可以看到頂部的一個Trigger模塊,以及輸入輸出端口。

這里的輸入輸出端口和Inport/Outport模塊是不一樣的,因?yàn)檫@是專門用于Simulink Function子系統(tǒng)中的Argument Inport模塊和Argument Outport模塊。

3)雙擊Trigger模塊,將函數(shù)名修改成function1,同時把Trigger模塊的名稱也改成function1。

這樣的話,外面的子系統(tǒng)的函數(shù)原型也就變成了 y = function1(u)

4)最后在輸入輸出之間加一個Gain模塊,使得這個Simulink Function子系統(tǒng)實(shí)現(xiàn)放大兩倍的算法。

2.2 Function Caller模塊

上一節(jié)建立好Simulink Function子系統(tǒng)后,就可以用Function Caller模塊在模型的其他地方調(diào)用這個子系統(tǒng)的功能。

1)新建一個Function Caller模塊,將其中的Function Prototype改成上文的函數(shù)原型 : y = function1(u)

2)為Function Caller模塊添加一個常數(shù)輸入和一個disp輸出并仿真,測試一下調(diào)用的效果。

由圖中可見,Function Caller模塊調(diào)用了function1的gain功能。

3 代碼生成

3.1 默認(rèn)配置

1)將2.1章中的Function Caller模塊刪除,在模型中只保留一個Simulink Function子系統(tǒng),然后Ctrl + B生成代碼如下。

與其他博客中生成的代碼有所不同,這次沒有生成step函數(shù),而是生成了一個demo_function1的函數(shù)(模型名稱+Simulink Function函數(shù)名稱),并且?guī)в袇?shù)和返回值。

2)然后打開demo_function1.h,既可以看到這個函數(shù)的外部聲明。其他的代碼只要包含這個頭文件,就可以調(diào)用生成的這個函數(shù)了。

3.2 Function visibility配置

在3.1中,生成的函數(shù)名中帶有模型名的前綴。如果將Simulink Function做一個Global配置,生成的名稱就不一樣,配置過程如下。

1)雙擊Simulink Function的Trigger模塊,將Function visibility配置成global,并確認(rèn)。

2)然后在子系統(tǒng)的正中間就會出現(xiàn)一個global的標(biāo)志,代表它是全局的。

3)重新Ctrl + B生成代碼如下。

生成的函數(shù)定義和外部聲明就和3.1中不同,只是function1而不再有demo的前綴,博主比較喜歡這種方式。

這里還有一點(diǎn)值得注意一下,輸入端口變量是rtu_u,前綴是rtu;輸出端口變量是rty_y,前綴是rty。前綴的字符是默認(rèn)的,博主也沒找到哪里可以配置,不過也沒必要配置。

3.3 多個輸出端口

在C語言中,一個函數(shù)只有一個return返回值。如果Simulink Function子系統(tǒng)有多個輸出端口,生成的代碼就會傳遞指針參數(shù)。通過下面的方式可以驗(yàn)證一下。

1)在3.2的基礎(chǔ)上再增加一個Outport,并改一下Gain模塊參數(shù),如下圖所示。

2)重新Ctrl + B生成代碼如下。

可以看出,這次生成的函數(shù)不再有返回值,而是將輸出端口的變量作為指針傳入函數(shù),再由函數(shù)中更新該地址的內(nèi)容。

3.4 輸入和輸出變量相同

在C語言編程的時候,也會遇到傳入一個指針給函數(shù),然后函數(shù)經(jīng)過一些計(jì)算把地址里的值更新掉的情形。對應(yīng)Simulink Function中只要把Inport和Outport的名字改成一樣的即可。

1)在3.2的基礎(chǔ)上,把輸入和輸出的名稱都改為u。

2)重新Ctrl + B生成代碼如下。

這里的函數(shù)只傳入了一個指針參數(shù)rtuy_u,函數(shù)中將地址中的值乘以2,再賦值回這個地址的空間。

值得注意的是,變量前綴不是3.2中的rtu或者rty,而是rtuy,代表了這個變量在模型中既是輸入也是輸出。

3.5 參數(shù)為數(shù)組

對于參數(shù)為數(shù)組的情況,只需要在Argument Inport或者Argument Outport中配置即可。

1)在3.2的基礎(chǔ)上,將Argument Inport的Port dimensions設(shè)為3。

2)對輸出的Port dimensions也設(shè)為3。
3)重新Ctrl + B生成代碼如下。

函數(shù)中傳入的參數(shù)就成為了數(shù)組。

3.6 參數(shù)為結(jié)構(gòu)體

對于參數(shù)為結(jié)構(gòu)體的情況,需要在Argument Inport或者Argument Outport中將類型配置為bus。后面演示輸入端口配置成bus的情況。

1)在Matlab工作空間新建一個bus1,并配置2個element成員。

2)在3.2的基礎(chǔ)上,將Argument Inport的類型配置為bus1。

3)用Bus Selector模塊,把element1挑選出來輸出給后面的Gain模塊。

4)重新Ctrl + B生成代碼如下。

這里生成的函數(shù)的參數(shù)是一個結(jié)構(gòu)體指針。結(jié)構(gòu)體的定義在另一個文件中。

4 總結(jié)

Simulink Function子系統(tǒng)可以生成帶有參數(shù)的函數(shù),在某些需求下是非常有用的。同時還可以靈活地配置端口參數(shù),來得到想要的函數(shù)形式。

>>返回個人博客總目錄

總結(jié)

以上是生活随笔為你收集整理的Simulink代码生成:Simulink Function子系统及其代码的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。