原文鏈接:【MBD開發】參考模型(Reference Model)

01.參考模型

在《Sinmulink代碼生成基礎體驗教程》介紹通過Subsystem將模型封裝成函數,並且通過原子子系統實現函數的復用。

上圖是一個比較極端的例子,實際工程不會分這麼細。通常一個大模型是由不同的模塊組成的,不同的模塊都會有各自的Owner。

如果使用原子子系統,ROOT層(模型的最上面那層)的模型無法與下面的子模塊完全解耦,對子模塊的維護不是很友好。

假設有兩個簡單的模型【variant_mode1】與【variant_mode2】,兩個模型的邏輯各不相同,也隸屬於兩個不同的Owner。下面開看看如何使用模型參考解決子模型維護的問題!

往Simulink中加入【Model】模塊,通過這個模塊可以引用其他的slxmdl等格式文件。如上圖,兩個【Model】分別引用variant_mode_1 與variant_mode_2模塊。

02.參考模型生成代碼

完善下ROOT層模型的輸入輸出,並且完善數據字典,然後綁定信號。具體操作不贅述,還不清楚的自行翻閱《Sinmulink代碼生成基礎體驗教程》

點擊生成代碼,怎麼生成就不說瞭前面嘮叨無數次瞭,如果不知道去看《Sinmulink代碼生成基礎體驗教程》。

需要註意的是,ROOT層主模型、2個引用模型的模型配置要完全一樣(如:芯片類型,數據類型等等)

打開生成代碼報告,可以看到引用的兩個模型已經生成兩個函數引用語句。如果夠細心會發現一個問題,就是variant_mode_1與variant_mode_2的函數原型在哪裡?

打開資源管理器,在生成的文件夾中也沒找到存放variant_mode_1與variant_mode_2的函數原型的C文件。

默認配置下藏在這裡,再與ROOT層模型同級目錄下有一個slprjert文件夾 。variant_mode_1與variant_mode_2文件夾就是存放函數原型的地方,代碼集成的時候直接引用slprjert即可。

03.受保護模型

在跨部門或者或組織合作中,很多時候都希望自己輸出的模型是一種受保護的狀態。例如,使用者無權查看源代碼或者需要輸入密碼才能查看源代碼。

右鍵一個【Model】,選擇【Create Protected Model for Selected Model Block】將模型轉換受保護狀態。

其中【content type】配置為【readable source code】可讀模式,打開和編輯的密碼都為空,老鐵們有需要自己設置個密碼試試看。最後一個【contents】生成內容配置為【protect model (.slxp) only】

有一個點要註意,這種轉換模式需要外部編譯器的支持,如:GCC或者VC++等。

把【variant_mode_1】編譯成slxp文件,從新引用。這樣我們就能對比兩個引用模型的區別瞭。