主要内容

数据存储基础知识

一个数据存储是一个存储库,您可以编写数据,您可以读取数据,而不需要一个输入或输出信号直接连接到数据存储。数据存储在模型级别访问,所以子系统和引用的模型可以使用数据存储共享数据而不使用I / O端口。

当使用一个数据存储

当多个数据存储可以有用信号在不同级别的模型需要相同的全球价值观,明确和连接所有的信号杂波模型不可接受或时间过长是可行的。数据存储在程序,类似于全局变量和有相似的优点和缺点,如制作验证更加困难。

可重用算法的实例之间共享数据(例如,一个子系统的自定义库或一个可重用的参考模型),您可以使用一个数据存储。有关数据共享的更多信息可重用模型,引用引用的模型实例之间共享数据

数据存储和软件验证

数据存储可以对软件验证产生重大影响,特别是在该地区的数据耦合和控制。模型和子系统,只使用输入和输出端口传递数据导致清洁,良好的,轻易可核查的接口在生成的代码中。

数据存储,像任何类型的全局数据,使验证更加困难。如果你的开发过程包括软件验证,考虑规划的影响数据存储在设计过程的早期。

有关更多信息,请参见RTCA - 331,“基于模型的开发和验证补充- 178 c和- 278 a,“部分MB.6.3.3.b。

转到块作为一个信号路由选择

在某些情况下,您可以使用一个简单的技术,转到块和块,获得类似的结果所提供的数据存储。数据转到/从链接的主要缺点是,他们通常无法访问跨nonvirtual子系统边界,而适当地配置数据存储可以在任何地方访问。看到转到块参考页面转到/从链接的更多信息。

局部和全局数据存储

您可以定义两种类型的数据存储:

  • 一个本地数据存储可以从任何地方访问模型层次结构中处于或低于你的水平定义数据存储,除了参考模型。您可以定义一个本地数据存储模型中图形对象(或通过创建一个模型空间信号金宝appSimulink.Signal)。

  • 一个全球数据存储整个模型层次结构来进行访问,包括从参考模型。定义一个全局数据只存储在MATLAB®基本工作空间,使用一个信号对象。唯一一个参考模型的数据存储类型可以访问是一个全球性的数据存储。

一般来说,定位一个最低水平的数据存储模型,允许访问数据存储模型的所有部分,需要访问。本地和全球的一些示例数据存储中出现数据存储的例子

使用引用模型的信息,请参阅模型引用

数据存储诊断

对数据存储诊断

金宝app®提供各种运行时和编译时诊断,您可以使用它们来帮助避免数据存储的问题。诊断模型中的可配置参数对话框和数据存储内存块的参数对话框。顾问提供金宝app支持的仿真软件模型清单数据存储错误的情况下更有可能因为金宝app诊断是禁用的。

检测存取顺序错误

您可以使用数据存储运行时诊断检测意外的数据存储读写序列发生在模拟。您可以应用这些诊断所有的数据存储,或允许每个数据存储内存块来设置自己的价值。诊断方法有:

这些诊断中出现模型配置参数>诊断>数据有效性>数据存储内存块面板,每个可以有下列值之一:

  • 禁用所有禁用这个诊断为所有访问的数据存储模型。

  • 使所有的警告——显示诊断是在MATLAB命令窗口的一个警告。

  • 使所有的错误——停止模拟和显示诊断一个错误对话框。

  • 使用本地设置——允许每个数据存储内存块设置为这个诊断自己的值(默认)。

同样的诊断也出现在每个数据存储内存块参数对话框诊断选项卡。您可以设置每一个诊断没有一个,警告,或错误。指定的值由个体块只有在相应的配置参数生效使用本地设置。看到模型配置参数:数据有效性诊断数据存储内存文档的更多信息。

最保守的方法是将所有数据存储诊断使所有的错误模型配置参数>诊断>数据的有效性>数据存储内存块。然而,这个设置不是最好的在所有情况下,因为它可以国旗故意的行为是错误的。例如,下一个图显示了一个模型,使用块优先级的力量数据存储读取块执行之前数据存储写布洛克:

一个错误发生在模拟,因为数据存储一个读取的数据存储读取块前数据存储写块更新商店。如果相关的延迟的目的是,可以抑制误差的全局参数设置检测读之前写使用本地设置,然后设置参数没有一个诊断面板的数据存储内存块对话框。如果你使用这种技术,设置参数错误在所有其他数据存储内存块除了那些故意排除诊断。

数据存储诊断和模型中引用加速器模式。对于模型中引用加速器模式,模型忽略了以下金宝app配置参数>诊断>数据的有效性>数据存储内存块参数如果你设置以外的一个值禁用所有

  • 检测读之前写(ReadBeforeWriteMsg)

  • 发现写后读(WriteAfterReadMsg)

  • 发现写后写(WriteAfterWriteMsg)

您可以使用加速器模式中引用的模型顾问识别模型的模型忽略了上面列出的配置参数。金宝app

  1. 在模型编辑器中金宝app,在建模选项卡上,单击模型的顾问

  2. 选择按照任务

  3. 运行检查诊断设置忽略在加速仿真模型参考检查。

数据存储诊断和MATLAB函数块。诊断可能是更为保守的数据存储内存使用MATLAB函数块。例如,如果你通过MATLAB函数数组的数据存储内存,优化等= foo ()可能导致MATLAB将整个数组的内容标记为读或写,尽管只有一些元素被访问。

检测任务访问错误

数据的完整性可能会损害如果读取数据存储在一个任务,写在另一个任务。例如,假设:

  1. 一个任务是写入数据存储。

  2. 第二个任务中断第一个任务。

  3. 第二个任务读取的数据存储。

如果第一个任务只有部分更新了数据存储第二个任务中断时,产生的数据存储中的数据不一致。例如,如果该值是一个向量,它的一些元素可能是写在当前时间步长,而其余的都是在前一个步骤写的。如果该值是一个多文字,它可能处于不一致状态,甚至一定程度上是正确的。

除非你确定任务抢占不能导致数据完整性问题,设置编译时的诊断模型配置参数>诊断>数据有效性>数据存储内存块>多任务数据存储警告(默认)或错误。这个诊断标记任何情况下的数据存储读取和写入不同的任务。下一个图说明了一个问题被设置多任务数据存储错误:

由于数据存储一个是快速任务和读取写入在缓慢的任务中,一个错误报告,提出补救措施。诊断适用即使在这样一个数据存储读写是内部条件子系统。金宝app仿真软件正确识别块中执行的任务,并使用这一任务为目的的评估诊断。

接下来的图上面显示了一个解决问题的办法:将率过渡块数据存储读取后,此前访问数据存储速度越慢。

通过这种改变,数据存储写可以继续以更快的速度发生。这可能是重要的,如果必须读取数据存储在其他地方的速度模型。

多任务数据存储诊断也适用于数据存储在参考模型中读取和写入。如果两个不同的子模型数据存储的读写执行不同任务,错误时将检测到仿真软件编译他们的共同父模型。金宝app

检测重复名称错误

数据存储错误可能发生由于重复使用的数据存储名称在一个模型。例如,数据存储跟踪发生在两个或两个以上的数据储存记忆不同的嵌套范围数据存储名称相同。在这种情况下,数据存储内存引用的数据存储读写块在低水平可能不是预期的商店。

为了防止错误造成的重复数据存储名称,设置编译时的诊断模型配置参数>诊断>数据有效性>数据存储内存块>复制数据存储名称警告错误。默认情况下,诊断的价值没有一个,抑制重复名称检测。下一个图显示一个问题被设置重复的数据存储名称错误:

底部的数据存储阅读水平子系统的层次结构是指一个数据存储一个,两个数据存储内存块在相同的模型有这个名字,所以会报告一个错误。这个诊断防范假设数据存储读指的是数据存储内存块模型的顶层。阅读实际上指的是数据存储内存块在中间水平,更在空间数据存储读取块。

数据存储诊断模型中的顾问

顾问提供了一些诊断模型,您可以使用数据存储。看到这些部分顾问诊断信息模型数据存储:

检查数据存储内存块的多任务处理,强类型,和跟踪问题

检查数据存储块样品时间建模错误

如果启用了读/写诊断检查数据存储块

为数据存储指定初始值

一般来说,指定数据存储的一个初始值,您可以使用相同的技术,你使用其他块。看到初始化信号和离散状态

与大多数块,您可以利用标量扩张的努力降到最低指定nonscalar信号的初始值。当你指定一个标量初始值,每个元素的信号使用标量。

然而,当你设置参数1在一个数据存储内存块(默认),你不能使用标量扩张。相反,您必须指定一个初始值,存储信号相同的维度。利用标量扩展初始值的设置参数到一个特定的值等(1 2)[1 myDim](符号维度)。

另请参阅

|||

相关的话题