Simulink代碼生成: 信號線、參數配置

在汽車嵌入式軟件開發中,需要正確地配置Simulink的信號和參數,才能生成相應的標定量、輸入輸出變量和觀測量。本文通過一個例子總結筆者工作中所用的配置方法。

1 問題引入

Simulink代碼生成(一) Embedded Coder配置這一篇博客中,沒有對輸入輸出信號做任何配置就生成了代碼。此時生成的代碼表現爲結構體的形式,並且是在模塊內定義的。
在這裏插入圖片描述
一個模型的輸入信號可能來源於其他模型的輸出或者底層軟件,因此這樣直接在自身代碼內部的定義方式顯然是不符合實際開發需求的。筆者在工作中是通過配置輸入輸出信號線對象,即Simulink.Signal對象,生成了特定存儲方式的代碼。

2 輸出信號配置

首先建立一個Simulink模型demo1.slx,並將輸出信號線命名爲Output1,如圖所示。
在這裏插入圖片描述
在Matlab命令行輸入:

>> Output1 = Simulink.Signal;

此時,在右側的工作區創建了一個名爲Output1Signal對象。雙擊該對象,將其配置如下圖:
在這裏插入圖片描述
其中,Data Type表示其數值類型爲single型,Initial Value表示初始值設爲10,Storage Class設爲ExportToFile表示該變量輸出到外部文件,下面的HeaderFile和DefinitionFile表示外部的C文件和頭文件。1

然後回到模型demo1.slx,右擊Output1信號線,選擇Properties打開該信號線的屬性窗口。在窗口中勾選Signal name must resolve to Simulink signal object,將該信號線和剛剛定義的Signal對象關聯起來2。關聯後模型中會出現一個小叉子的圖標。
在這裏插入圖片描述
然後生成代碼,打開報告。在demo1.c的step函數中可以看到,輸出變量命名爲了Output1,而不是之前的Demo_Y.Out的結構體。initialize函數中可以看到,將Output1初始化爲了10,與之前配置相吻合。
在這裏插入圖片描述
那麼,這個Output1是在哪兒定義的呢?打開Demo1_Output.c就可以看到Output1的定義了,這與之前的StorageClass配置相吻合。
在這裏插入圖片描述
然後,在Demo1_Output.h中用extern關鍵字外部定義了Output1,也就是說其他的模型如果要輸入Output1這個變量,代碼中只需要包含Demo1_Output.h這個頭文件即可。可以注意到,demo.c文件中包含了demo.h頭文件,demo1.h頭文件中包含了Demo1_Output.h頭文件。
在這裏插入圖片描述

3 輸入信號配置

配置輸入信號的步驟與輸出信號相似,要給信號線命名並關聯。但是在Signal對象中要把StorageClass設置爲ImportFromFile,並且只需要填入HeaderFile頭文件。這裏假設Input1是Demo2輸出的。
在這裏插入圖片描述在這裏插入圖片描述
生成的代碼中,demo1_private.h包含Demo2_Output.h頭文件。但是不會生成這個頭文件,因爲這個變量是Import的,屬於別的文件中定義的。並且Input1這個變量也不會在initialize函數中初始化。
在這裏插入圖片描述
在這裏插入圖片描述

4 觀測量配置

觀測量和輸出信號配置類似,都是輸出到外部文件。不過最好在C文件命名上體現其中的是觀測量。

5 標定量配置

標定量在汽車軟件中是可以被標定工具所修改的,因此需要有volatile關鍵字修飾。標定量在模型中不是以信號線存在的,而是作爲某個模塊的參數,常見的是作爲Const模塊的參數。

如圖所示,將Simulink中Const的參數定爲一個標定量。
在這裏插入圖片描述
然後,在Matlab命令行定義一個Parameter對象

>> Calibration1 = Simulink.Parameter;

打開該對象,配置參數信息。
在這裏插入圖片描述
其中,Value表示代碼中的賦值,StorageClass、HeaderFile和DefinitionFile表示存儲類型爲Volatile和所在文件。

然後,不需要像信號線一樣關聯對象,直接生成代碼。就會多生成標定量的C文件和頭文件,其中定義了標定量。
在這裏插入圖片描述
在step函數中用了這個標定量。如果用標定工具修改了這個量,就會在MCU中生效。
在這裏插入圖片描述

6 總結

本文只是筆者所用到的對信號線和參數的配置方法。在實際工作中根據不同的項目特點可以進行其他配置。

>>返回個人博客總目錄


  1. Signal對象也可以在數據字典裏定義。 ↩︎

  2. 也可以通過Matlab腳本批量勾選,詳見Matlab技巧(三) 通過腳本獲取/修改Simulink信號線參數 ↩︎

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