Simulink代碼生成: Selector模塊及其代碼

本文研究Selector模塊的用法和該模塊生成的代碼。

1 Simulink中的Selector模塊

Selector翻譯過來就是選擇器的意思。該模塊用於將Vector信號或者Matrix信號中的某個元素選出來。對應C代碼中就是根據某個索引將數組(一維或者多維)中某個元素提取出來。

1.1 Selector模塊的簡單模型

首先打開Simulink,建立一個Selector模塊。
在這裏插入圖片描述
可以看出默認的Selector模塊左邊有三個矩形,右邊有兩個,並且左邊的第一、二個矩形和右邊的兩個之間有連線。這裏推測是將左邊輸入的三個數的前兩個選擇出來,從右邊輸出。

爲了驗證一下這個想法,在左邊建立一個Const模塊,數值爲[2,4,7]。右邊加一個Display模塊用於觀察結果,如圖所示。
在這裏插入圖片描述
運行後觀察Display模塊,發現確實輸出了前兩個數。通過配置參數,可以讓這個模塊輸出特定位置的元素。
在這裏插入圖片描述

1.2 Selector模塊的參數

雙擊Selector模塊,打開Selector模塊的參數窗口,其中有很多可配置的參數。
在這裏插入圖片描述
1)Number of input dimensions
這一項指定了輸入的維度。Vector信號對應的是一維數組,這裏就寫成1。如果是二位數組,輸入則是一個[nxn]的Matrix信號。下圖展示了一個Matrix信號的,並選擇出它第二行第三列的元素。
在這裏插入圖片描述
2)Index Mode
字面意思是索引模式,可以選擇Zero-based或者One-based。區別是下標從0開始算還是從1開始算。
如下圖所示,如果選Zero-based,Index爲2,就會把第3個元素提取出來。
在這裏插入圖片描述
3)Index Option
這一項是Index的設置,有5個選項。
在這裏插入圖片描述
Index vector這一類是直接按照後面的Index輸出;Starting Index是按照開始的索引和一個長度,輸出若干個連續的元素。

後面括號中的dialog或者port指的是Index是否由外部port口給出。如果是選擇了(port),模塊就會變成下面這個樣子,可以通過一個port口輸入一個index值。
在這裏插入圖片描述
4)Input port size
這一項在Dimensions選擇爲1維的時候纔有,指的是輸入Vector的長度。如果長度和實際輸入不匹配會報錯。

博主在工作中常見的選擇配置是,Number of input dimensions是1維,因爲很少處理Matrix信號;Index Mode是Zero-based,符合C代碼習慣;Index Option選Index vector(port口),因爲多數情況下只要用到數組中的一個元素,而且port口可以更直觀地反映出提取的是哪個元素。

2 Selector模塊的代碼

Selector模塊中的配置很多,這裏只選擇常見的一種情況,研究代碼生成。

章節1.1中的模型做少許修改得到如下demo模型。
在這裏插入圖片描述
其中,把輸入U的Port dimensions設爲4,也就是輸出了一個[1x4]的vector。輸入U和Idx都是single型。
在這裏插入圖片描述
將Selector設置如下,
在這裏插入圖片描述
這個模型的含義是,根據In2的數值,挑選出In1的中對應索引的值。

Ctrl + B生成代碼,如下
在這裏插入圖片描述
可以觀察到step函數中,In1是個長度爲4的數組,類型是浮點型。In2也是浮點型,將其類型轉換爲int32後作爲In1的數組下標,取出對應的數值賦給了Out1。

3 總結

Selector在代碼中的表現還是比較簡單的,主要是模型中做好正確的配置。另外,Selector模塊比較常用,而且會經常和循環相關的模塊配合一起建模。

>>返回個人博客總目錄

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章