Simulink仿真入门到精通(五) Simulink模型的仿真

5.1 模型的配置仿真

由各种模块所构建的可视化逻辑连接,只是模型的外在表现,模型仿真的核心驱动器是被称作解算器(Solver)的组件,相当于Simulink仿真过程的心脏,驱动着模型仿真,它在每一个采样时间点更新模型中所有的状态和信号变量,并计算下一步的步长。除此之外,模型还具有一个参数配置集合(Configuration Parameter Set),它提供了一系列的参数,用户通过这些参数可以选择模型的解算方法,配置硬件目标,优化配置,设置异常响应及诊断,以及配置代码声称等。参数设置集合相当于Simulink软件各个环节的开关控制器,在细节处影响着模型的行为和表现方式。模型的可视化建模方法,解算器及参数配置结合共同构成一个“有血有肉”的Simulink模型。

5.1.1 解算器

分类 步长可变否 离散连续性 显式隐式 解算步长 阶数
1 固定步长 离散 显式 单步 单阶
2 可变步长 连续 隐式 多步 多阶

步长可变否

步长是前后两个相邻采样点之间的时间间隔。

变步长:当模块状态值变化很快是减小步长,反之增大步长,可以根据误差容限调整步长大小,使整个仿真过程中需要计算的采样点数减少,从而使得仿真在较短时间内结束。

二者没有绝对的优劣,在不同的应用场合酌情采用,但在生成嵌入式代码并下载到硬件中去执行时,解算器必须采用固定步长,因为实时硬件的时钟源都是提供稳定频率的时钟源,无法提供变步长解算器的采样时刻计算方式。

离散连续性

这两种解算器都依赖于模型中的具有连续/离散状态变量的模块来工作。具有离散状态变量的模块负责在离散解算器作用下的每个采样时间点计算离散状态变量的值,具有连续状态变量的模块在连续解算器作用下使用连续数值积分方法求解连续状态变量的值。

不具有连续状态模块的模型如果使用连续解算器仿真时,Simulink自动切换到离散解算器进行计算;具有连续状态模块的模型,如果选择离散解算器进行仿真,会发生错误。

显式隐式

这里所说的显式和隐式是指求解方程式是显式或隐式的。

通常,隐式解算器用于求解刚性系统,显式解算器用于求解非刚性系统。

所谓刚性系统,是指在时间间隔很小的情况下才会稳定,时间间隔稍大一点就不再稳定的系统。

相对于显式解算器,隐式解算器对于震荡行为的求解具有更高的稳定性;但是,由于解算过程中产生Jacobian矩阵,使用牛顿法在每一个采样时刻计算代数方程,所以很费时间。

解算步长

单步解算器在计算y(t)时只需要使用y(t-1),连续系统使用y(t-1),y(t-2),…,y(t-m)等多值来计算当前输出y(t)。

阶数

隐式变步长解算器ode15s可以使用1阶到5阶方程,显式变步长解算器oed113可以使用1阶到13阶方程。

总结

变步长

固定步长

方法特点

解算器 应用场合
ode45(显式)

推荐用于模型的首次仿真,具有最好的普适性以及不错的精度。

如果发现仿真速度极慢,可改为ode15s。

ode23(显式) 在误差要求不是特别严格或模型中存在轻微刚性时比ode45具有更高的效率。
ode113(显式) 对于具有严格误差容限和计算密集型的问题,此方法比oed45更合适更高效。
ode15s(隐式) 基于数值差分方程(NDFs)求解,产生雅可比矩阵,通常从阶数为2开始尝试。
ode23s(隐式) 一步解算器,在粗差问题上比ode15s更高效。
ode23t(隐式) 适应于无数值阻尼的中性刚度模型求解。
ode23tb(隐式) 跟ode23s类似,在粗差刚性模型中更高效。

5.1.2 参数的配置

解算器的参数设置

变步长解算器参数

参数名 作用说明
Max step size 解算器可以采用的最大步长
Min step size 解算器可以采用的最小步长
Initial step size 解算器第一步采用的步长
Relative tolerance 可接受的最大相对误差容限
Absolute tolerance 可接受的最大绝对误差容限
Shape preservation 开启时可使用微分信息提升积分的精确度
Number of consecutive min step 当步长超出了最大步长或者小于最小步长时称为步长违例。此选项用于设置连续出现步长违例的步数,一旦超过这个步数就报警或报错。默认为1。

参数名 作用说明
zero-crossing control

使能过零检测功能,对大部分模型而言,可以提升仿真速度,因为精确定位过零点,便可以增大变步长解算器的步长。

UseLocalSettings表示根据模块中是否设置开启过零检测功能来决定,EnableAll和DisableAll则表示全体开启或全体关闭

Time telerance 时间容限,规定过零检测要在容限相关的时间范围内检测连续性,用于控制过零检测发生频度
Algorithm 指定一种过零检测的算法,分为自适应算法和非自适应算法

固定步长解算器参数

参数名 作用说明
Fixed-step size 固定步长

参数名(仅ode14x使用) 作用说明
Solver Jacobian method 提供雅可比算法的4个选项
Extrapolation order 设置外插阶数,可设置1~4
Number  of Newton's iterations 设置牛顿迭代算法的迭代次数

方法:用于判断所选的变步长解算器的仿真结果是否可以接受

将Relative tolerance由1e-3改为1e-4再次仿真,如果和之前的结果没有明显差异,应当对当前的解算方法和仿真结果抱有信心。

数据导入/导出的设置

导入:结合In模块进行

导出:

标签名 作用说明
Time 保存模型的仿真时间采样
States 保存模型的状态量
Output 保存模型的输出量
Final states 保存模型仿真最后一个采样时刻的状态量
Format 保存的时间、状态和输出量存储到工作空间时的数据格式选择
Limit data points to  last 勾选后只保存最新N个采样点的数据
Decimation 每间隔多少个采样点保存一组数据

模型某次仿真后保存的Final states参数,可以作为下一次仿真的Initial states参数来使用,从而将两次分开的仿真首尾相接。

示例:

5.2 模型仿真数据记录

1. 信号日志

右击模型中希望记录过程的信号线,打开属性对话框,勾选Log signal data。设置之后的信号上出现了一个浅蓝色探针符号,表示此信号的数据记录功能已开。

仿真后会在工作空间中得到名为logsout的变量。

>> logsout

logsout = 

Simulink.SimulationData.Dataset 'logsout' with 1 element

                         Name  BlockPath     
                         ____  _____________ 
    1  [1x1 Signal]      ''    mymodel/Clock

  - Use braces { } to access, modify, or add elements using index.

2. Simulinnk Data Inspector

Inspector需要与信号日志功能联合使用,不仅可以一次记录多个信号数据,还可以记录多次仿真的数据过程。

选中信号线,单击Log/Unlog Selected Signals也可以增设/删除信号日志功能点。

Inspect用于记录信号,Compare用于比较信号的差别。

勾选Overwrite可使仿真数据被覆盖。

5.3 仿真过程的调试

5.3.1 Debugger的启动

Simulink→Debug→Debug Model即可启动。

Debug模式将仿真过程变得可控,单步或多步执行,或者全速执行到断点停下来。过程中每个采样时刻所执行的模块及方法名都可以观察到。

在Sorted List界面可以观察到模块的执行顺序。

5.3.2 Debugger的单步方法

  1. step into the current method:

猜你喜欢

转载自www.cnblogs.com/dingdangsunny/p/12244228.html