Matlab腳本輔助Simulink建模

Matlab/Simulink建模從形式上可以分為交互式建模和編程式建模。交互式建模就是大家最常用的方式,即通過鼠標操作的方式來選擇模塊、編輯模塊屬性、連接模塊等,這種方式可以快速的建立單個功能模塊,實現我們建模或仿真的需求。編程式建模一般用的不多,主要存在於批量建立相似功能模塊或者整理模型建模規範等場景,例如,對於某ECU,它需要接收來自其他節點的幾十幀報文,對每一幀報文信號都需要做相似的信號處理,採用編程式建模就會大大提高工作效率。

今天我們就談編程式建模的兩個小方法:自動生成輸入輸出接口和輸入輸出接口連線自動對齊​。​


自動生成輸入輸出接口

在做模型開發時,架構工程師往往已經把功能模塊輸入輸出信號的數量和名稱定義好了,軟件工程師只需要搭建功能邏輯即可。有些功能模塊的輸入輸出接口加起來可能有上百個,去逐個創建會很繁瑣,這時用編程式建模就會很方便。

假如功能模塊的輸入輸出信號已經定義在了excel文件中,如下圖所示:

Matlab腳本輔助Simulink建模

第一列是輸入信號名稱,第二列是輸出信號名稱。我們運行以下代碼:

Matlab腳本輔助Simulink建模


運行後如下圖,輸入輸出結果自動創建完成,效果很好,符合預期。

Matlab腳本輔助Simulink建模

核心代碼就是add_block指令,add_block(source,) 官方解釋是從庫或模型中將模塊 source 的副本添加到指定的目標模型和模塊名稱。

以輸入接口Inport創建為例具體解釋:

for i=1:inportLength;

add_block('simulink/Commonly Used Blocks/In1',strcat('newModel/',name{i,1}),'Position',[50 100+i*50 80 115+i*50]);

end

1、這裡我們從庫模型中提取source模塊,即simulink/Commonly Used Blocks/In1。

2、放到指定的模型newModel中,並命名為name{i,1}。這裡用For循環依次調用了元胞數組裡每一行的第一列字符串。

3、定義了每一個輸入接口的位置,即定義屬性Position為[50 100+i*50 80 115+i*50],這個1x4的向量依次定義了接口的左、上、右、下的絕對座標位置。


輸入輸出接口連線自動對齊

上面建立的輸入輸出接口後,很容易手動封裝成子系統,然後把子系統框圖稍微拉大一點,就變成如下圖所示的樣子。

Matlab腳本輔助Simulink建模

同樣的問題,當輸入輸出接口數量很多的時候,調整輸入輸出接口與子系統之間的連線也是比較浪費時間的,這時我們同樣可以採用編程式建模來自動對齊連線。

運行以下代碼:

Matlab腳本輔助Simulink建模

運行後結果如下圖,連線自動對齊,很完美,符合預期。

Matlab腳本輔助Simulink建模

核心代碼包括get_param、find_system、set_param。

1、get_param(Object,) 用於返回指定模型或模塊對象的指定參數的名稱或值,我們這裡用來獲取子系統的接口位置信息。

2、find_system(System,) 用於返回指定系統中滿足指定條件的對象,我們這裡用來找到所有Inport接口。

3、set_param(Object,,) 用於將指定模型或模塊對象上的參數設置為指定的值,我們這裡把子系統接口位置依次給輸入輸出接口用於定義其位置,保證二者對齊。


以上,按個人理解介紹了兩種編程式建模方法和Matlab部分函數用法,算是一個拋磚引玉吧。大家有不理解的地方,可以經常查閱Matlab自帶的幫助文檔,裡面有更加詳細全面的介紹。


分享到:


相關文章: