Simulin金宝appk上的Guy

金宝appSimulink &基于模型的设计

状态读取器和状态写入器块

正如我在之前的文章中提到的,我一直在尝试写一些关于新事物的文章初始化函数重置功能而且终止函数在R2016b中引入。然而,每次我最终都会意识到我需要先引入另一个功能。

本周:国家的读者而且国家的作家块,也在R2016b中引入。

不是你的日常标准街区…

让我们从一个简单的模型开始,我有一个离散状态空间块。

离散状态空间

我可以向模型中添加一个State Reader块,打开它的对话框,然后选择Discrete State- space块来读取它的状态。注意离散状态空间块顶部的菱形“x”。它的存在是为了表明它的状态正在其他地方读取。另外,请注意State Reader旁边的块名,它指示从哪里读取数据。

选择要由State REader块读取的块

您可能还想注意到,State Reader块用红色高亮显示。这要归功于R2016b的一个新功能:编辑时间检查.如果你将鼠标悬停在块的顶部,你会得到更多的细节:

编辑时间检查

嗯…这是什么意思?把这两个块放在同一个子系统中有什么问题?

正如我所说,状态读取器和状态写入器块与其他块不同!让我们试着更新图表。这次我们收到了这个错误:

状态读取错误

的解释

对于那些长期阅读这个博客的人,我希望你记得我多年前写的一篇文章如何根据另一个块的输出改变一个块参数?

在这篇文章中,我解释了如果一个块可以改变另一个块的参数,这将导致不可预测的排序顺序。在一个时间步骤中,没有人能够预测在块执行之前或之后参数是否会被修改。

类似的推理适用于状态读取器和写入器块。由于没有信号将Reader/Writer连接到状态所有者,因此没有显式的数据依赖来强制排序。这就是为什么这些块只能在执行顺序由用户显式指定的上下文中使用。

换句话说,这种“约束”是一件好事,从长远来看,它会让你的生活更轻松。

让我们看看可以使用状态读取器和状态写入器块的那些结构。

互斥子系统

以一种类似于离合器锁定示例使用Integrator块的状态端口,可以使用状态读取器和状态写入器块在有条件执行的子系统之间传递状态。

说明这一点的一个简单方法是实现两个下落质量的方程,它们是刚性连接在一起的;那突然分开了。在模拟的第一部分,运动计算使用两个离散时间积分器块串联。

结合质量

在模拟的第二部分中,我们使用两个系列的离散时间积分器块,使用State Reader块初始化,配置为从模拟的第一部分读取积分器块的状态

分群众

在顶层,模拟看起来像:

顶级模特

导出函数模型

使用中描述的导出函数模型我之前的文章,您可以显式地控制哪个块首先执行。

首先创建一个包含两个函数调用子系统的模型,一个用于离散状态空间,另一个用于状态读取器:

导出函数模型

然后,您可以将此模型用作引用模型,其中父模块显式地安排离散状态空间和状态读取器块执行的顺序

输出功能顶模

分支函数调用

此语法与前面的示例类似,只是所有内容都在同一个模型中。

函数调用调度程序

接下来是什么?

重要的是要认识到,上面使用分支函数调用和导出函数模型的示例太简单了,无法真正说明状态读取器和状态写入器块的真正功能。它们是我能想到的最简单的模型来说明这些块的用法。

在接下来的文章中,我将展示如何将这些特性与初始化函数重置功能而且终止函数在一个更现实的用例中。

|

评论

如欲留言,请点击在这里登录您的MathWorks帐户或创建一个新帐户。