汽車行業流行平臺化開發,希望通過一套軟件對付一系列車型,當然這一系列車型的軟件基本上一致,不同配置之間可能有很少一點差別,怎么辦?C語言開發中有條件編譯,同一份源代碼,可以通過設置不同的參數,讓編譯出來不同的軟件,而無需編譯冗余的軟件。
使用模型開發算法,
是否也可以讓模型生成的代碼做到這一點呢?
回答是肯定的。
下面我們來看一個例子,例子中我們通過參數K來選擇編譯不同部分的算法。

雙擊打開Variant Subsystem,往這里面添加幾個Atomic Subsystem,分別命名為Algorithm1、Algorithm2、Algorithm3,如下圖:

Algorithm1、Algorithm2、Algorithm3里面的算法如下:

不同的是Algorithm1、Algorithm2、Algorithm3里面的Gain分別為1、2、3。
在Variant Subsystem模塊上,鼠標右鍵,選擇Block Parameters,設置如下圖所示:

最后,在Base Workspace或者data dictionary里使用參數類定義參數對象K,設置K的Storage Class為Define,同時指定頭文件為my_config.h。
好了,做完上述設置就可以生成如下的代碼了:
void mymodel_step(void)
{
#if K == 1
y = x;
#elif K == 2
y = 2.0 * x;
#elif K == 3
y = 3.0 * x;
#endif
}
注:假如我們給K賦值為2,模型就會出現最前面兩幅圖片里顯示的那樣,Variant Subsystem最上方的名字是Algorithm2,Variant Subsystem里面的3個Atomic Subsystem中Algorithm2是黑色的,另外兩個是灰色的。
需要注意的是:
代碼生成的時候,在Variant Subsystem模塊上鼠標右鍵,選擇Block Parameter,設置Variant control條件,同時,勾上Analyze all choices during update diagram and generate preprocessorconditionals;
Variant Subsystem內部的連接關系是通過顏色表示的,黑色的就表明已經連上了,不要試圖使用鼠標把這里的Inport、Outport和某個子系統上的端口硬連接,當然,你也是連不上的;
這三部分算法之間的差別非常小,可以使用Variant subsystem的方式實現,如果算法差別的部分比較大,建議使用Model Variant實現。
往期 | 老胡專欄
為什么要基于模型設計?
自動代碼生成五大原則
什么樣的模型算正確的模型?
簡單說說MIL、SIL、PIL和HIL
自動生成的代碼支持哪些硬件平臺?
-
算法
+關注
關注
23文章
4784瀏覽量
98075 -
代碼
+關注
關注
30文章
4968瀏覽量
73989 -
編譯
+關注
關注
0文章
694瀏覽量
35166
發布評論請先 登錄
rk3576 android15平臺camera編譯配置都做了什么?
小藝開放平臺平臺功能
Elektrobit EB civion平臺助力SDV 2.0智能座艙開發
PPEC Workbench 智能化開發平臺助力高校電力電子教學與科研
PPEC Workbench 平臺拓撲全覆蓋,滿足各類電源開發需求
RK3506開發板QT Creator開發手冊,交叉編譯工具鏈與QT應用示例,入門必備
Simulink模型測試典型問題分享——模型庫管理問題
OpenAI開源模型登陸IBM watsonx.ai開發平臺
ArkUI-X在Android平臺動態化開發指南
【「零基礎開發AI Agent」閱讀體驗】+Agent開發平臺
在任何平臺上使用PetaLinux的先決條件
分享條件編譯助力Simulink模型平臺化開發的相關介紹
評論