主要内容

数据库基础知识

一种数据存储是一个存储库,您可以向其中写入数据,也可以从中读取数据,而无需将输入或输出信号直接连接到数据存储。数据存储可以跨模型级别访问,因此子系统和引用的模型可以使用数据存储来共享数据,而不需要使用I/O端口。

何时使用数据存储

当模型的不同级别的多个信号需要相同的全局值时,数据存储可以是有用的,并明确地连接所有信号会使模型不可接受或花费太长,以便可行。数据商店类似于程序中的全局变量,并且具有类似的优点和缺点,例如使验证更加困难。

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

数据存储和软件验证

数据存储可能对软件验证具有显着影响,尤其是在数据耦合和控制领域。仅使用输入和输出端口的模型和子系统通过数据在生成的代码中的干净,规定,且易于验证的接口中传递数据。

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

有关更多信息,请参阅RTCA DO-331,“基于模型的开发和验证补充至DO-178C和DO-278A”部分MB.6.3.3.b.b.

转到块作为信号路由替代方案

在某些情况下,您可以使用更简单的技术,转到块和块,以获得与数据存储提供的结果相似的结果。数据Goto/From链接的主要缺点是,它们通常不能跨非虚拟子系统边界访问,而适当配置的数据存储可以在任何地方访问。看到转到块引用页面有关GOTO /来自链接的更多信息。

本地和全球数据存储

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

  • 一种本地数据存储可以从模型层次结构中的任何位置访问,该模型在或低于您定义数据存储的级别,除了引用的模型之外。您可以在模型中以图形方式定义本地数据存储,也可以通过创建模型工作区信号对象(金宝app仿真软件。信号)。

  • 一种全球数据存储可以在整个模型层次结构中访问,包括从引用的模型。仅在MATLAB中定义全局数据存储®基础工作区,使用信号对象。引用的模型可以访问的唯一数据存储类型是全局数据存储。

通常,在模型中的最低级别定位一个数据存储,允许通过需要该访问的模型的所有部分访问数据存储。本地和全局数据存储的一些示例出现在数据存储的例子

有关使用引用模型的信息,请参阅模型参考文献

数据存储诊断

关于数据存储诊断

金宝app®提供各种运行时和编译时诊断,可用于帮助避免数据存储问题。诊断在模型配置参数对话框和数据存储内存块的参数对话框中可用。Simu金宝applink Model Advisor通过列出由于禁用诊金宝app断而更可能出现数据存储错误的情况来提供支持。

检测访问订单错误

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

这些诊断出现在模型配置参数>诊断>数据有效性>数据存储内存块窗格,每个窗格可以具有以下值之一:

  • 禁用所有- 禁用模型访问的所有数据存储的此诊断。

  • 使全部启用作为警告- 将诊断显示为Matlab命令窗口中的警告。

  • 启用所有错误- 停止模拟,并在错误对话框中显示诊断。

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

每个数据存储内存块参数对话框中也出现相同的诊断诊断标签。您可以将每个诊断设置为没有任何警告, 要么错误.仅当相应的配置参数是时,单个块指定的值使用本地设置.看模型配置参数:数据有效性诊断数据存储内存有关更多信息的文档。

最保守的技术是将所有数据存储诊断设置为启用所有错误模型配置参数>诊断>数据有效性>数据存储内存块.然而,这个设置并不是在所有情况下都是最好的,因为它会将预期的行为标记为错误。例如,下一个图显示了一个模型,它使用块优先级来强制数据存储阅读块在之前执行数据存储写入堵塞:

模拟期间发生错误,因为数据存储一种从中读取数据存储阅读街区前数据存储写入块更新商店。如果有关延迟,则可以通过设置全局参数来抑制错误在写之前检测读取使用本地设置,然后将该参数设置为没有任何诊断窗格的数据存储内存块对话框。如果使用此技术,请将参数设置为错误在所有其他地方数据存储内存除了那些被有意排除在诊断之外的区块。

数据库诊断和加速器模式引用的型号。对于Accelerator模式中引用的模型,Simulink忽略了以下内容金宝app配置参数>诊断>数据有效性>数据存储内存块参数如果将它们设置为以外的值禁用所有

  • 在写之前检测读取readbeforewritemsg.

  • 读后检测写WritafterreadMsg.

  • 写入后检测写入WriteAfterWriteMsg

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

  1. 在Simuli金宝appnk编辑器中造型选项卡,单击模型顾问

  2. 选择通过任务

  3. 跑过在加速模型参考仿真期间检查诊断设置查看。

数据存储诊断和MATLAB功能块。用于数据存储内存的诊断可能更为保守Matlab功能块。例如,如果您将数据存储内存数组传递给MATLAB函数,则可以进行诸如a = foo(a)可能导致MATLAB标记数组的整个内容,如读取或写入,即使只访问了某些元素。

检测多任务处理错误

数据存储在一个任务中被读取,在另一个任务中被写入,可能会影响数据的完整性。例如,假设:

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

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

  3. 第二个任务从该数据存储中读取。

如果第一个任务仅在第二个任务中断时仅部分更新数据存储,则数据存储中的结果数据不一致。例如,如果该值是向量,则可能在当前时间步骤中写入其一些元素,而其余部分被写入前一步。如果该值是多字,则它可以留在不一致的状态下,甚至不均正确。

除非您确定任务抢占不会导致数据完整性问题,否则请设置编译时诊断模型配置参数>诊断>数据有效性>数据存储内存块>多任务数据存储警告(默认)或错误.此诊断标志在不同任务中读取和写入数据存储的任何情况。下一个图说明了通过设置检测到的问题多任务数据存储错误

自数据存储以来一种在快速任务中写入并从慢速任务中读取,报告了一个错误,提出了建议的补救措施。即使在条件子系统的数据存储读取或写入的情况下,也适用该诊断。金宝appSimulink正确标识块在内部执行的任务,并使用该任务以评估诊断。

下图显示了上述问题的一种解决方案:在数据存储读取之后放置一个速率转换块,该块之前以较慢的速率访问数据存储。

通过这种变化,数据存储器写入可以以更快的速率继续发生。如果必须在模型中其他地方的更快速率读取数据存储,则这可能很重要。

多任务数据存储诊断还适用于引用模型中的数据存储读写。如果两个不同的子模型在不同的任务中执行数据存储的读写,那么在Simulink编译它们的公共父模型时将检测到错误。金宝app

检测重复的名称错误

由于模型中的数据存储名称的重复使用,可以发生数据存储错误。例如,当不同嵌套范围中的两个或多个数据存储存储器具有相同的数据存储名称时,会发生数据存储阴影。在这种情况下,数据存储在低电平下由数据存储读取或写入块的数据存储存储器可能不是预期的商店。

为避免重复的数据存储名称导致错误,请设置编译时诊断模型配置参数>诊断>数据有效性>数据存储内存块>重复数据存储名称警告错误.默认情况下,诊断的值是没有任何,抑制重复的名称检测。下图显示了通过设置检测到的问题重复数据存储名称错误

在子系统层次结构的底部读取的数据存储是指名为的数据存储一种,同一模型中的两个数据存储存储块具有该名称,因此报告了错误。这种诊断防范假设数据存储读取是指模型的顶层中的数据存储存储块。读取实际上是指中间级别的数据存储存储块,其在数据存储读取块的范围内更近。

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

模型顾问提供了几种可以与数据存储一起使用的诊断。有关数据存储的Model Advisor诊断信息,请参阅这些部分:

检查数据存储内存块是否存在多任务、强类型和隐藏问题

检查数据存储块采样时间以进行建模错误

检查数据存储块是否启用了读/写诊断程序

为数据存储指定初始值

通常,要为数据存储指定初始值,可以使用对其他块使用的相同技术。看初始化信号和离散状态

通过大多数块,您可以利用标量扩展以最大限度地减少指定非卡拉尔信号的初始值的努力。指定标量初始值时,信号中的每个元素都使用该标量。

但是,当你设置的时候方面参数到-1在一个数据存储内存块(默认值),您不能使用标量扩展。相反,您必须指定具有与存储信号相同尺寸的初始值。要利用初始值的标量扩展,请设置方面参数到特定值,例如[1 2][1 mydim](符号维度)。

也可以看看

|||

相关的话题