Simulink快速上手之HelloWorld

时间:2024-06-01 07:02:04

一般程序设计的入门书籍,最开始为了让新学者能够更直观的了解开发过程和马上看到自己程序设计的成果,都会从输出"Hello World"开始。对于Simulink来说,它的特长是数据计算,所以我们就用Simulink中最常用的几个模块,快速搭建一个加法运算小程序,来达到“Hello World”的同等效果。

 

一、创建模型

1.打开Matlab,新建一个空白的Simulink模型,同时将模型另存为 “HelloWorld.slx”

Simulink快速上手之HelloWorld

2.在模型空白处双击鼠标,在输入框中输入“Constant”添加两个常量模块,输入“Sum”添加一个加法计算模块。

Simulink快速上手之HelloWorld

3.选中下面的“Constant1”模块,键快捷键“Ctrl+R”旋转模块方向,使箭头向上,对象加法模块下方输入箭头方向。再添加一个"Display"模块,用于表示计算结果数据。

Simulink快速上手之HelloWorld

4.鼠标选中输入\输出端口并用线连接。

Simulink快速上手之HelloWorldSimulink快速上手之HelloWorld

5.选中“DEBUG”选项卡,点击“Run”运行按钮

Simulink快速上手之HelloWorld

可以看到,计算结果会显示在Display模块中。

Simulink快速上手之HelloWorld

6.接下来,我们双击下面的常量模块,并将Value改成2。再次点击“Run”,运行程序。看到Display中显示的计算结果被更新了。Simulink快速上手之HelloWorldSimulink快速上手之HelloWorld

二、代码生成配置

1.按下快捷键“Ctrl+B”对模型进行编译。此时,由于我们还没有对代码生成进行相关配置,系统会弹出错误提示,要求对代码生成进行相关配置。

   注:与其他程序设计IDE不同,Simulink的错误功能非常强大,它不仅仅会提示错误信息,还会给出相应的对策方法。因此“Diagnostics Viewer”窗口,将是我们在Simulink程序设计过程中经常看到,甚至是非常依赖的一个功能。

Simulink快速上手之HelloWorld

由于程序仿真为非连续仿真,所以在生成C代码时,Simulink会给出三个提示及对策:

1.需要将仿真解算器(Solver)步长改为“固定步长(fixed-step)”

2.把输出目标文件类型改为可变步长目标文件

3.通过向导完成代码生成的相关设置

我们点击第一项后面的“Open”按钮,在弹出模型参数设置对话框中,将解算器类型由“variable-step”改为 "fixed-step"。

Simulink快速上手之HelloWorld

Simulink快速上手之HelloWorld

为了简化,其他代码生成的相关设置,我们继续点击第三项,利用"Simulink Coder Quick Start"向导进行配置。这里我们,一路点击"Next"按钮,采用默认配置。

Simulink快速上手之HelloWorld

Simulink快速上手之HelloWorld

2.配置完成后,再次按下快捷键“Ctrl+B”进行C代码自动生成。

   由于向导进行配置中,会默认打开“代码生成报告“功能,因此在代码生成结束后,会自动弹出网页形式的报告。

Simulink快速上手之HelloWorld

3.点击报告左边的“HelloWorld.h”,可以打开生成代码的头文件。但是,在对应的“HelloWorld.c”中,我们并找不到加法运算的相关代码。原因在于,我们在模型中,只是将变量显示在了Simulink的"Display"模块中。对于程序来说,并没有真正的输出。没有输出的代码会被Simulink优化掉。

Simulink快速上手之HelloWorld

三、生成模型对应的C代码

1.我们将刚才模型中的“Constant1”和“Display”分别用“in”(输入)、“Out”(输出)模块替换。

Simulink快速上手之HelloWorld

2.画框选中所有模块,按下快捷键“Ctrl+G”或通过右键菜单选择,将选中模块集生成一个"Subsystem“子系统。以便最终生成一个叫“GetSum”的C代码函数。

Simulink快速上手之HelloWorldSimulink快速上手之HelloWorld

注:通过右键菜单“Format/Show Block Name”菜单,可以设定常时显示每个模块的名称。

Simulink快速上手之HelloWorld

4.再次按下快捷键“Ctrl+D”,对模型进行编译,Simulink会提示,输入/输出端口未被连接。

Simulink快速上手之HelloWorld

 

5.为输入/输出端口 设定一个有效的输入/输出。在模型中添加一个 “Data Store Memory”(A)模块,

   添加这个模块相当于在C语言中,声明一个新的全局变量。

   添加“Data Store Read”模块,读取 (A)的数据,作为GetSum子系统的输入。

   添加“Data Store Write”模块,将GetSum子系统的输出,写入到A中。

Simulink快速上手之HelloWorld

6.为了生成一个单独的函数,我们需要将“GetSum”子系统,定义为一个“atomic unit ”(原子子系统)

   在“Code Generation”选项卡中,将函数打包方式更改为“Resuable funciton“

Simulink快速上手之HelloWorldSimulink快速上手之HelloWorld

7.再次按下快捷键“Ctrl+B ”代码生成后,在代码生成报告的左侧链接处,或在matlab文件夹中可以看到生成的代码文件。

Simulink快速上手之HelloWorld

8.打开“HelloWorld.c”文件,可以看到“HelloWorld_GetSum”就是我们模型中“GetSum”子系统对应的C代码函数。

Simulink快速上手之HelloWorld