主要内容

通过创建数据存储模型全局数据

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

数据存储的例子

概述

下面的示例说明了如何定义和访问数据存储的技术。看到订单数据存储访问控制数据存储访问的技术随着时间的推移,如确保给定数据存储总是写前阅读。看到数据存储诊断技术可以用来帮助检测并纠正潜在的数据存储错误而不需要运行任何模拟。

请注意

除了下面的例子,请参阅sldemo_mdlref_dsm模型,它显示了如何使用全局数据存储中共享数据参考模型。

本地数据存储的例子

下面的模型说明了创建一个本地数据存储和访问的,它是可见的只有在模型或特定子系统。

这个模型使用一个数据存储子系统允许信号,其输出是无效的。

如果子系统的输出无效,模型使用B的输出子系统。

全球数据存储的例子

下面的模型替换前面的例子的子系统与功能相同的引用的模型来说明使用全局数据共享数据存储在一个层次结构模型参考。

在这个例子中,顶部模型使用MATLAB信号对象®空间数据存储定义错误。这是必要的,因为跨模型边界数据存储是可见的只有在MATLAB中的信号对象定义的工作区或一个数据字典。该模型指定的代码PreLoadFcn回调参数,创建信号对象模型。这段代码执行前加载模型。

创建和应用数据存储

请注意

使用公共汽车和公交车数组数据存储,表演这两个下面的过程和建立一个模型来使用数据存储公共汽车和公交车的数组

下面是一个通用工作流配置数据存储。你可以以不同的顺序执行任务,或分开,这取决于你如何使用数据存储。

  1. 在适用情况下,计划使用数据存储它们对软件验证的影响降到最低。有关更多信息,请参见数据存储和软件验证

  2. 使用中所述的技术创建数据存储数据存储与数据存储内存块与信号数据存储对象。更大的可靠性,考虑分配而不是继承数据存储属性,描述指定数据存储内存块的属性

  3. 添加到模型数据存储写和读数据存储块写入和读取数据存储,如前所述访问数据存储模型万博1manbetx

  4. 配置模型和块访问每个数据存储,以避免并发读写数据存储时,失败中描述订单数据存储访问

  5. 应用中所述的技术数据存储诊断根据需要,以防止数据存储错误,或诊断他们是否发生在模拟。

  6. 如果您打算为您的模型生成代码,看看数据存储在生成的代码(万博1manbetx仿真软件编码器)

创建一个数据存储,您创建一个数据存储内存块或万博1manbetxSimulink.Signal对象。块或信号对象表示数据存储并指定其属性。每个数据存储必须有一个唯一的名称。

数据存储与数据存储内存块实现:

  • 万博1manbetx支持数据存储初始化

  • 提供数据存储的控制范围和选择在特定水平的层次结构模型

  • 需要一块来表示数据存储

  • 在参考模型中无法访问

  • 不能在一个子系统,每个子系统块代表。

数据存储实现万博1manbetxSimulink.Signal对象:

  • 提供model-wide数据存储的控制范围和选择

  • 不需要一块来表示数据存储

  • 可以访问在参考模型中,如果数据存储是全球

小心不要将本地数据存储与数据存储内存块,和全球数据存储万博1manbetxSimulink.Signal对象。可以定义一个本地数据存储技术,信号对象可以定义一个本地或全局数据存储。

数据存储与数据存储内存块

创建数据存储

使用一个数据存储内存块定义一个数据存储,拖动块到模型的一个实例在最高的级别,你想要的数据存储是可见的。结果是一个本地数据存储,在参考模型中无法访问。

  • 定义一个数据存储在每一个可见水平在一个给定的模型,除了内部模型模块,数据存储内存块拖到根级别的模型。

  • 定义一个数据存储,是可见的只有在一个特定的子系统和它包含的子系统,但不是在模型模块,数据存储内存块拖到子系统。

一旦你已经添加了数据存储内存块,利用其参数来定义数据存储的属性。的数据存储名称属性指定数据存储,数据存储的名称写和读数据存储块的访问。看到数据存储内存文档的细节。

您可以指定数据存储属性之外可定义与数据存储内存块通过选择参数数据存储名称必须解决信号模型对象万博1manbetx选择和使用一个信号对象作为数据存储名称。看到使用一个信号对象指定属性获取详细信息。

指定数据存储内存块的属性

数据存储内存块可以继承三个属性的数据对应的数据存储读取和数据存储块写。可继承的属性有:

  • 数据类型

  • 复杂性

  • 样品时间

然而,允许继承了这些属性会导致意想不到的结果,很难调试。为了防止此类错误,或使用数据存储内存块对话框万博1manbetxSimulink.Signal明确对象指定属性。

使用块参数指定属性

您可以使用数据存储内存块对话框或模型数据编辑器数据存储选项卡(在建模选项卡上,单击模型数据编辑器)指定的数据类型和数据存储的复杂性。在接下来的图,块对话框设置数据类型uint16信号类型真正的

使用一个信号对象指定属性

您可以使用一个万博1manbetxSimulink.Signal对象指定数据存储属性数据存储内存块。

提示

建立一个隐式数据存储,如前文所述与信号数据存储对象使用相同的一般方法,当您显式地将一个信号对象关联到一个数据存储内存块。

下一个图显示一个数据存储内存块,指定分辨率万博1manbetxSimulink.Signal对象,名为一个。为数据存储,使用一个信号对象集数据存储名称信号对象的名称。编译时检查,打开信号的属性选项卡并选择数据存储名称必须解决信号模型对象万博1manbetx参数。

另外,在模型数据编辑器数据存储选项卡(在建模选项卡上,单击模型数据编辑器),而编辑数据存储的名称,单击附近的操作按钮并选择创建和解决。在创建新的数据对话框中,设置价值万博1manbetxSimulink.Signal

所有三个数据信号对象指定值的属性数据存储否则继承。在这个例子中,定义了一个本地数据存储的万博1manbetxSimulink.Signal对象一个有以下继承的属性:数据类型,复杂性,SampleTime

一个=仿万博1manbetx真软件。信号(处理)CoderInfo: [1 x1仿真软件。万博1manbetxCoderInfo)描述:”数据类型:‘汽车’分钟:[]马克斯:[]单元:“维度:1 DimensionsMode:“汽车”的复杂性:“汽车”SampleTime: 1 InitialValue: 0

关于指定信号的更多信息为本地和全局数据存储对象属性,看看信号数据存储对象属性

使用模型数据编辑器来配置数据存储内存在一个列表。使用数据存储在模型数据编辑器选项卡配置的参数数据存储内存块。使用这种技术来配置数据存储没有定位在模型和配置数据存储等界面元素轮廓尺寸外港块。模型数据编辑器还显示你的信息数据存储读取数据存储写在同一块列表。

打开模型数据编辑器,建模选项卡上,单击模型数据编辑器。使用模型数据编辑器的信息,请参阅通过使用模型数据编辑器配置数据属性

与信号数据存储对象

创建数据存储

使用一个万博1manbetxSimulink.Signal对象定义一个数据存储不使用一个数据存储内存块,在工作区中创建信号对象是可见的每个组件,需要访问的数据存储。相关的数据存储的名称是信号对象的名称。您可以使用这个名称在数据存储读取和数据存储块写,就好像它是数据存储名称数据存储的内存块。万博1manbetx动态仿真模块®创建一个关联的数据存储当您使用的信号对象数据存储。

局部和全局数据存储

您可以使用一个万博1manbetxSimulink.Signal对象定义一个本地或全局数据存储。

  • 如果你在MATLAB基础工作空间定义对象或数据字典,结果是一个全球性的数据存储,可以在每一个模型在仿真软件中,包括所有引用的模型。万博1manbetx

  • 如果一个模型的工作区中创建对象,结果是一个本地数据存储,可以在模型中除了各级任何参考模型。

信号数据存储对象属性

这些数据存储属性,一个信号对象没有定义默认值相同,他们在数据存储内存块。信号对象的属性值作为数据存储有不同的需求,取决于数据存储本地或全球。

一旦您创建了对象,设置信号对象的属性值,你想对应的数据存储属性。例如,以下命令定义一个数据存储错误MATLAB基础工作:

错误= Simu万博1manbetxlink.Signal;错误。描述=使用信号子系统输出无效的;错误。数据类型=“布尔”;错误。复杂性=“真实”;错误。尺寸= 1;错误。SampleTime = 0.1;

对本地数据存储属性。本地数据存储,下面列出的每个参数,您可以设置值显式地或者你可以有数据存储继承来自数据存储的值写和读数据存储块。

  • 数据类型

  • 复杂性

  • SampleTime

定义一个本地数据存储使用数据存储内存块,您可以使用对象的一个信号数据存储名称参数。的编译时检查信号的属性选项卡中,选择数据存储对象必须解决仿真软件信号万博1manbetx参数。的数据存储对象必须解决仿真软件信号万博1manbetx参数使模型显示错误,停止编译如果仿万博1manbetx真软件找不到信号对象或者对象属性的信号与信号不一致对象属性。

全球数据存储属性。下表描述了全球数据存储的参数要求。

参数 全球数据存储值
数据类型 必须显式地设置
复杂性 必须显式地设置
可以设置或继承
SampleTime 可以设置或继承

修改对象的属性数据存储定义为信号。您可以使用模型数据(在编辑建模选项卡上,单击模型数据编辑器)修改和检查数据存储的属性,数据存储读取,数据存储写块。在数据存储选项卡,显示数据存储您所定义的属性对象(如通过使用信号万博1manbetxSimulink.Signal),点击显示/刷新的额外信息按钮。然后,如果一个数据存储读取数据存储写块数据表所示指的是一个数据存储对象定义为信号,对应于对象的表包含一个行。

关于模型数据编辑器的更多信息,请参阅通过使用模型数据编辑器配置数据属性

访问数据存储万博1manbetx

写入数据存储

设置数据存储在每个时间步的价值:

  1. 创建一个实例数据存储写块的模型计算值。

  2. 设置数据存储块写数据存储名称参数的名字你想要写的数据存储的数据。

  3. 连接块的输出计算值的输入数据存储块写。

阅读从一个数据存储

得到的值在每个时间步数据存储:

  1. 创建一个实例数据存储读取块在你的模型需要的价值。

  2. 设置数据存储读取块数据存储名称参数的名称你想要读的数据存储。

  3. 连接的输出数据存储读取块的输入块需要数据存储的值。

全球数据存储访问

当连接到一个全球数据存储(由MATLAB中的信号对象定义工作区),数据存储读或写数据存储块显示这个词全球数据存储名称上面。

订单数据存储访问

关于数据存储访问顺序

从数据存储获得正确的结果,你必须控制的执行顺序数据存储的读写。如果一个数据存储的读前发生写延迟引入该算法:阅读获得的价值计算和存储在前面的时间步长,而不是值计算并存储在当前时间步。

这样的延迟可能导致系统以外的行为设计,和在某些情况下可能会破坏系统。即使这些问题没有发生,一个不受控制的访问顺序可以改变从一个版本的模型。万博1manbetx

本节描述一些显式控制策略的执行顺序数据存储的读写。看到数据存储诊断的技术可以用来检测并纠正潜在的数据存储错误没有运行模拟。

使用函数调用顺序访问子系统

您可以使用函数调用子系统控制模型组件的执行顺序访问数据存储。下一个图展示了这一技巧:

子系统之前包含数据存储写,Stateflow®表调用子系统之前调用子系统,其中包含数据存储读。

使用块优先级顺序访问

你可以在原子嵌入数据存储读写子系统或模型块的优先级指定它们的相对执行顺序。

该模型块beforeDSM有一个低优先级呢afterDSM首先,这是保证执行。自beforeDSM是原子性的,它的所有操作,包括数据存储,将执行之前afterDSM和它的所有操作,包括数据存储读取。

数据存储与公共汽车和公交车的数组

使用数据存储的好处与公共汽车和公交车的阵列包括:

  • 简化模型的布局将多个信号与一个数据存储

  • 生产中的数据生成的代码表示存储数据结构,反映了公共汽车的层次结构

  • 写作和阅读的数据存储没有创建数据副本,从而导致更有效的数据访问

你不能使用公共汽车或巴士,其中包含数组:

  • 变尺度信号

  • 不定位信号

建立一个模型来使用数据存储公共汽车和公交车的数组

本程序适用于局部和全局数据存储,以及数据存储与数据存储内存块或定义万博1manbetxSimulink.Signal对象。在执行程序之前,您必须了解如何使用数据存储在一个模型中,所述创建和应用数据存储

使用公共汽车和公共汽车与数据存储的数组:

  1. 使用公共汽车时编辑器定义一个对象的属性匹配你想写的总线数据从数据存储和读取。有关详细信息,请参见创建并指定仿真软件。万博1manbetx总线对象

  2. 添加一个数据存储(使用数据存储内存块或万博1manbetxSimulink.Signal为存储总线数据对象)。

  3. 指定总线对象作为数据存储的数据类型。有关详细信息,请参见指定一个总线对象数据类型

  4. 如果你使用MATLAB结构初始值的数据存储,然后设置配置参数>诊断>数据的有效性>先进的参数>未指定初始化检测简化。有关详细信息,请参见为总线元素指定初始条件未指定初始化检测

  5. (可选)选择单个总线元素写入或读取数据存储。有关详细信息,请参见访问特定总线和矩阵元素

访问特定总线和矩阵元素

选择特定的总线或矩阵元素

默认情况下,模型写入和读取的所有总线和矩阵元素和数据存储。

选择特定的总线或矩阵元素写入或读取一个数据存储,使用元素赋值面板的数据存储写块和元素选择面板的数据存储读取块。选择特定总线或矩阵元素提供了以下好处:

  • 减少模型中块的数量。例如,您可以消除数据读取和存储总线选择器块一对或一个数据存储为每个具体的编写和总线分配块对汽车元素,你想访问)。

  • 速度的仿真模型与大型公共汽车和公交车的数组。

写数据存储的特定元素

请注意

以下步骤描述了如何使用数据存储块写接口编写数据存储的特定元素。你也可以在命令行中执行此任务,使用DataStoreElements参数指定的元素。有关详细信息,请参见规范使用命令行

分配特定的总线或矩阵元素写入数据存储:

  1. 选择数据存储写块和参数对话框,选择元素赋值窗格。例如,假设您使用的是一辆公共汽车和一个数据存储需求侧管理:

    数据存储的元素赋值选项卡写块参数对话框。“总线信号”窗格中显示了一个未展开的总线DSM。

  2. 扩大中的所有元素在公共汽车上的信号列表。

    数据存储的元素赋值选项卡写块参数对话框。“总线信号”窗格中显示了一个扩展总线DSM的所有元素的视图。

  3. 指定的元素要写的数据存储。例如:

    • 在公共汽车上的信号列表中,点击B。然后单击选择> >选择的元素B

    • 写的所有元素A2(在一个嵌套总线),选择A2 (5、1)。然后单击选择> >

    • 写的第二个元素A2C2嵌套的巴士,选择A2 (5、1)元素。在指定要分配元素(s)文本框、编辑文本DSM.C.C2.A2 (2, 1)

    数据存储的元素赋值选项卡写块参数对话框。“总线信号”窗格中显示了一个扩展总线DSM的所有元素的视图。“指定元素(s)”窗格显示3指定元素的总线DSM。

    更多的例子,请参阅指定元素分配或选择

  4. 指定的元素(可选)重新排序,改变订单的港口数据存储写块。

    • 重新安排一个指定的元素,分配元素(年代)列表中,选择你想要移动的元素,并点击向上下来

    • 删除一个指定的元素,点击删除

  5. 应用指定的元素,单击好吧

    数据存储写块有一个端口为每个指定元素。选定元素的名称对应于每个端口出现在块图标。如果你分配几个信号,这些添加可能会降低模型的可读性。为了提高可读性,您可以扩展块的大小或创建多个数据存储写块。

从一个数据存储读取特定元素

从数据存储读取特定元素包括非常相似的步骤中描述写数据存储的特定元素。的数据存储读取从一块稍有不同数据存储写块。一个数据存储读取块有:

  • 一个元素选择窗格中,而不是一个元素赋值窗格

  • 一个所选元素(s)列表而不是一个分配元素(年代)列表

指定元素分配或选择

使用MATLAB矩阵元素的语法来指定特定元素。在MATLAB矩阵指定详细信息,明白了创建、连接和扩展矩阵

请注意

选择与动态索引矩阵元素数据存储读取数据存储写块,选择启用索引元素选择/元素赋值窗格块参数对话框。你可以一次只选择一个元素动态索引。看到数据存储读取数据存储写

规范有效的元素。下面的表显示了示例指定有效的语法元素分配或选择。这些示例使用A2嵌套的巴士一个公共汽车时,所示的层次结构中使用写数据存储的特定元素

数据存储的元素赋值选项卡写块参数对话框。“总线信号”窗格中显示了一个扩展总线DSM的所有元素的视图。

有效的语法 描述
DSM.A.A2 (::)

选择所有元素在每一个维度

DSM.A.A2 (1、3、5, 1)

选择第一,第三,第五元素

DSM.A.A2 (2:5, 1)

选择第二个通过第五元素

无效的元素规范。下面的表显示了无效的语法指定元素的例子分配或选择。这些示例使用A2嵌套的巴士一个公共汽车时,所示的层次结构中使用写数据存储的特定元素

无效的语法 原因,语法是无效的
DSM.A.A2 (:)

你必须为每个维度指定一个冒号。使用的总线层次结构在这些例子中,您必须使用两个冒号。

DSM.A.A2(2:结束,1)

你不能使用结束操作符。

DSM.A.A2 (idx, 1)

你不能使用变量来指定索引。考虑使用动态索引通过选择启用索引元素选择/元素赋值窗格块参数对话框。看到数据存储读取数据存储写

DSM.A.A2 (1, 1)

维度1不是在有效的尺寸范围内。

规范使用命令行。设置元素写入或读取,使用DataStoreElements参数。使用一个井号(#)分隔多个元素。例如,选择数据存储写数据存储读取块你想指定元素和输入一个命令,如:

set_param (gcb, DataStoreElements”、“DSM.A # DSM.B # DSM.C (3、4) ')

这个规范的结果相对应的块现在有三个港口指定的元素。

重命名数据存储

重命名数据存储定义的块

重命名一个数据存储都使用它数据存储读取数据存储写块模型。

  1. 在一个数据存储内存块对话框,输入一个新的名字数据存储名称框,然后单击重命名所有

  2. 重命名所有对话框,确认新的数据存储名称新名字字段中,然后单击好吧

请注意

你不能使用重命名所有如果你创建一个重命名一个数据存储万博1manbetxSimulink.Signal对象在一个工作区来控制生成的代码的数据存储。相反,您必须重命名相应的万博1manbetxSimulink.Signal对象模型浏览器使用。例如,看到的重命名对象数据存储定义为信号

重命名对象数据存储定义为信号

这个例子展示了如何重命名一个数据存储定义的万博1manbetxSimulink.Signal对象。您可以使用模型浏览器重命名对象都使用它数据存储读取数据存储写块在一个层次结构模型或模型参考。

  1. 打开模型sldemo_mdlref_dsm。创建一个模型万博1manbetxSimulink.Signal对象ErrorCond在MATLAB基础工作空间和使用对象作为一个全球数据存储在一个层次结构模型参考。

  2. 模型浏览器打开。

  3. 模型层次结构窗格中,选择基本工作空间。

  4. 内容窗格中,右键单击数据存储ErrorCond并选择重命名所有

  5. 选择一个系统对话框中,单击模型的名称sldemo_mdlref_dsm选择它作为重命名上下文数据存储ErrorCond

  6. 选择搜索在引用模型ErrorCond使用的是一个全球性的数据存储在一个参考模型。点击好吧

    更新图,包括最近的变化清除复选框默认情况下节约时间,避免不必要的模型图更新。选中该复选框将最近的变化你的模型通过迫使图更新。

  7. 点击好吧响应消息来更新模型图。

    因为你只是打开模型时,您必须更新模型图重命名变量如之前至少一次ErrorCond。你可以选择更新图,包括最近的变化选择一个系统对话框,迫使一个初始图更新,尽管你通常使用这个选项,当你更改模型,同时执行多个变量重命名操作。

  8. 重命名所有对话框中,键入新名称的数据存储新名字框,然后单击好吧

自定义数据存储访问函数生成的代码

嵌入式编码器®提供了一个存储类,您可以使用它来指定自定义数据存储访问函数生成的代码。看到参数数据组织成一个结构通过使用结构体存储类(嵌入式编码)通过与存储类GetSet函数访问数据(嵌入式编码)

另请参阅

|||

相关的话题