Simulink代碼生成: If-Action子系統及其代碼

本文研究Simulink中的If-Action子系統及其生成的代碼。

1 概述

If-Action子系統是一種特殊的子系統。參考Matlab幫助文件中的示例圖片,可以對該系統有一個直觀的認識。
在這裏插入圖片描述
它是由動作信號觸發,來決定子系統是否執行。動作信號通過If模塊對輸入的判斷產生。最後用一個merge模塊把各個子系統的輸出結果合成。這種條件判斷執行某些模塊的方式,類似C代碼中的if-else語句。

2 示例模型搭建

參照幫助文件裏的例子,搭建一個If-Action子系統。

2.1 If模塊

默認的If模塊是一個輸入信號和兩條判斷分支,如下圖。
在這裏插入圖片描述
雙擊If模塊可以對其進行配置。可配置內容包括輸入信號數量,條件表達式和顯示else分支。注意如果有多個else if的表達式,要一起寫在Elseif expressions中。
在這裏插入圖片描述

2.2 If-Action子系統

If-Action子系統相比普通的子系統,在上方多了一個動作觸發輸入端。該輸入端與If模塊的輸出相連,表明在If某款的某個判斷條件下才執行這個子系統。
在這裏插入圖片描述
與使能子系統相似,If-Action子系統中的輸出模塊也可以選擇held或者reset。
在這裏插入圖片描述

2.3 merge模塊

如果整體的輸出值在不同的條件下對應着不同的子系統的輸出,就需要用merge模塊把這些子系統的輸出合併成一個。實際上也只有其中一個子系統的輸出值是有效的。
在這裏插入圖片描述

2.4 完整模型

依照幫助文檔裏的示例建立的完整模型如下:
在這裏插入圖片描述
其中,輸入和輸出信號線關聯了Simulink.Signal,爲了使得生成的代碼更直觀。

兩個If-Action子系統中沒有加入任何運算策略,只是將輸入的Input1或Input2輸出到merge模塊。

可以注意到,If模塊的輸出信號類型是action,而不是常見的single,uint,int等。而且信號線變成了虛線。這表明這根信號線是action信號線,用於觸發If-Action子系統。

3 代碼生成

Ctrl + B生成代碼,如圖所示:
在這裏插入圖片描述
可以看出,step函數中是一段簡單的if-else判斷語句。其中判斷條件Input3 > 0.0F對應了If模塊的配置,花括號內的執行語句Output1 = Input1;和Output1 = Input2;對應If-Action子系統裏的控制策略。

4 拓展

除了If模塊,用Switch Case模塊搭配If-Action子系統也可以實現條件判斷的控制策略。建模方式相似,文章內就不做演示。
在這裏插入圖片描述

>>返回個人博客總目錄

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