目录
本篇文章搭配如下视频进行介绍,读者可以以视频为主,文章为辅,视频讲解更具体更清晰。
CSDN观看视频体验一般,建议读者直接跳转到B站观看视频。
欢迎添加VX happyyuhangboy 进行更多资料的分享和建模经验的交流。
Simulink 0基础入门教程 P3 仿真时间、求解器、数据类型、delay模块介绍
B站视频链接如下:
Simulink 0基础入门教程 P3 仿真时间、求解器、数据类型、delay模块介绍
1. 模型仿真时间的设置
模型的仿真时间,可以理解为模型在仿真系统中被执行的时长,比如10s,但是由于matlab进行模型仿真的速度比较快(模型不是特别复杂的情况下),因此10s的仿真时间,在simulink中只需要非常短的时间就运行完了,这也是仿真的高效率的优点。如果模型很复杂,运算量很大,那么实际仿真的时间超过10s也是有可能的。
仿真时间的设置,根据开发人员自己的需要进行设置,不影响生成的代码。
在如下位置可设置模型运行的时间:
也可以在模型的设置页面进行设置:
如下设置模型的仿真时间为10s,scope中显示的最大时间也是10s
2. 求解器 Solver 的设置
求解器Solver的设置,对模型仿真的结果影响很大,每个新建的模型,都应进行求解器的配置,在模型的配置页面的Solver标签下,都是关于这部分的配置。一般关注Type、Solver、Fixed-step size三个配置项即可。
求解器的类型Type有变步长和定步长两种选择,一般选择定步长。在进行嵌入式软件开发的时候,模型开发的应用层软件一般为周期函数,在Task中按照固定周期进行调用的,因此,使用定步长更符合实际情况,也容易让开发者进行调试和仿真。
如果选择变步长,则Matlab会根据模型的计算情况,兼顾模型仿真的精度和效率,自行决定步长的大小。
Type后面的Solver是选择具体的求解算法,这里其实有离散(discrete)和连续的两种solver,如果选择了离散类型,则一些连续模块不可使用,一般选择auto即可。
选择Type为Fixed-step后,会出现Fixed-step size的配置项,即仿真步长,可以理解为函数(模型)的调用周期。以嵌入式软件开发为例,如果你开发的模型是一个周期函数,则此处的仿真步长就是函数被调用的周期。例如仿真步长设置为0.1s,那么每100ms,这个模型会被执行一次。
3. 数据类型的设置和显示
如同C语言中的数据类型有int / float / unsigned int等,Simulink中也有类似的数据类型,常数模块或者运算模块都可以设置其输出的数据的数据类型。Simulink中的数据类型,根据嵌入式系统的特点,相比于C语言,更加细化了。
simulink中常用的数据类型有:
浮点型:double / single
布尔型:boolean
无符号整型:uint8 / uint16 / uint32 / uint64
有符号整型:int8 / int16 / int32 / int64
定点数据类型:fixdt(1,16)等
single类似于C语言中的float,为32位浮点数。
无符号整型中的uint8,表示该数据在内存中占用的长度为8个bit,所以其可以表示的范围是0~255,其他无符号类型类似。
有符号整型中的int8,表示该数据在内存中占用的长度为8个bit,其可表示的范围为-128~127.
定点数据类型,用整型数表示有小数的数据,如果软件使用的芯片支持浮点运算,则可以不必关注和使用定点数据类型。
可以看到有符号和无符号整型数,在Simulink中有了更加细化的分类,我们在进行嵌入式软件开发时,由于硬件的资源有限,应当根据实际软件的需要,选择更合理的数据类型,兼顾需求和资源的占用。
所有的模块都应当进行数据类型的设置,或者经过检查。包括constant和各类运算模块。
开发人员应养成良好的建模习惯,建模时将所有信号的数据类型显示出来,可以更方便的观察和纠错。在模型空白处右键,如下菜单处勾选即可。
4. delay模块的使用
delay模块的作用是将输入信号延迟指定个步长后再输出。
如下图所示,双击delay模块,可以设置其Delay length和Initial condition,Delay length即对输入信号延迟的步长数量,Initial condition即delay模块的初始值,因为delay模块是对输入信号延迟输出,那么当软件第一次运行时,此时应输出的值,即由此处的初始值决定。
如下的例子,输入信号是一个阶跃信号,信号值在1s时跳变为1,delay模块的Delay Length为2,模型的step-size为0.1s,因此输出相比于输入应延迟0.2s,通过scope观测到的结果符合这个规律。
delay模块生成代码后对应着全局变量。
delay模块的一个常用功能,是用来搭建累加计数器,如下模型可实现每个仿真步长输出的数据加1的效果。
delay模块的输出,即上一次的加法器输出值,在本次运行,加1后,再输出,并作为delay模块的输入,因此,模型每次运行,都是在上一次的累加和的基础上再加1并输出。scope观测的结果如下: