这个示例展示了如何将总线传播到引用的模型中。它还展示了如何使用来自父模型的记录信号数据独立地模拟引用模型。
打开并模拟示例模型sldemo_mdlref_bus
.
该模型包含一个名为CounterA的模型块,它引用sldemo_mdlref_counter_bus
,这是一个简单计数器的模型。
一个名为COUNTERBUS的总线数组将计数器的数据和饱和限制提供给模型。名为COUNTERBUS的总线每个都包含两个元素:一个数据信号和一个名为LIMITBUS的嵌套总线。该数据用于计数,并且LIMITBUS包含计数器的上下限值。
Model块有第二个输入端口,该端口连接到名为INCREMENTBUS的总线。此总线包含更改增量和重置计数器的元素。
该模型使用名为sldemo_mdlref_bus.sldd
包含
对象定义COUNTERBUS、LIMITBUS和INCREMENTBUS的元素。金宝app仿真软件。公共汽车
查看公共汽车
对象,打开总线编辑器。在Simuli金宝appnk®Toolstrip中,在建模选项卡,设计画廊,点击公共汽车编辑器.
模型使用公共汽车
对象指定下列总线创建器块的输出:
COUNTERBUSCreator1
COUNTERBUSCreator2
LIMITBUSCreator1
LIMITBUSCreator2
IncrementBusCreator
名为counter_input in的导入块sldemo_mdlref_counter_bus
指定了公共汽车
对象命名COUNTERBUS
.双击。在“块参数”对话框中,单击信号的属性选项卡,数据类型被设置为总线:COUNTERBUS
.
命名为increment_input的import块以类似的方式配置为使用公共汽车
对象命名INCREMENTBUS
.
这些信号被标记为信号记录:
COUNTERBUS
INCREMENTBUS
OUTERDATA
INNERDATA
在模拟模型之后,日志记录的信号可以在topOut
变量。
topOut = 金宝appSimulink.SimulationData.Dataset topOut BlockPath 4个元素名称 ____________ ________________________________________ 1 [1 x1信号]COUNTERBUS sldemo_mdlref_bus /连接2 [1 x1信号]OUTERDATA sldemo_mdlref_bus / CounterA 3 [1 x1信号]INCREMENTBUS sldemo_mdlref_bus / IncrementBusCreator 4 [1 x1信号]INNERDATA……erA|sldemo_mdlref_counter_bus/COUNTER -使用大括号{}访问、修改或使用索引添加元素。
该模型使用数据集
信号记录格式。访问数据集
为给定的信号格式化记录数据,使用getElement
方法:
topOut.getElement(“COUNTERBUS”)
ans = 金宝appSimulink. simulationdata . signal Package: Simulink。SimulationData属性:Name: 'COUNTERBUS' PropagatedName: " BlockPath: [1x1 Simulink.Si金宝appmulationData. BlockPath: [1x1 Simulink.SimulationData. BlockPath] "BlockPath] PortType: 'outport' PortIndex: 1 Values: [2x1 struct]
总线数据被记录为MATLAB®结构值
字段:
topOut.getElement . values(“COUNTERBUS”)
Ans = 2x1带有字段的结构数组:数据限制
该结构包含MATLABtimeseries
每个总线的对象:
topOut.getElement (COUNTERBUS) . values (1) . data
timeseries公共属性:Name: 'data' Time: [301x1 double] TimeInfo: tsdata. timeseries公共属性:Name: 'data' Time: [301x1 double] TimeInfo: tsdata. timeseriestimeemetdata数据:[301x1 int32] DataInfo: tsdata. datametdata . timeemetdata
topOut.getElement (COUNTERBUS) . values (2) . data
timeseries公共属性:Name: 'data' Time: [301x1 double] TimeInfo: tsdata. timeseries公共属性:Name: 'data' Time: [301x1 double] TimeInfo: tsdata. timeseriestimeemetdata数据:[301x1 int32] DataInfo: tsdata. datametdata . timeemetdata
控件还可以绘制记录的数据情节
功能:
topOut.getElement (OUTERDATA) .Values.plot ()
要记录引用模型中的信号,请选择model块并单击测井信号在模型块选项卡。
对于这个模型,日志记录模式被设置为按照模型中的规定记录所有信号
.模拟时记录的所有信号sldemo_mdlref_counter_bus
当将顶级模型模拟为引用模型时,它也会被记录。更改这些信号的日志记录或记录信号的子集:
集日志记录模式来覆盖信号
.
在模型层次结构窗格中,清除CounterA (sldemo_mdlref_counter_bus)复选框,以指示此模型不应使用按照模型中的规定记录所有信号
设置。
在表中,选择模拟顶模型时要记录的信号。
要保存更改,请保存顶部模型。
打开引用的模型sldemo_mdlref_counter_bus
作为顶级模型,单击作为顶级模特开放在模型块的左下角。
被引用的模型被配置为通过根import块读取记录的信号数据。要查看此配置,请打开“配置参数”对话框。在Simuli金宝appnk工具条中,在建模选项卡上,单击模型设置.在数据导入/导出选项卡,输入使用逗号分隔的列表指定记录的数据topOut
用于两个输入端口。的counter_input端口使用时间序列的数组结构来加载COUNTERBUS的数据increment_inputport使用时间序列结构为INCREMENTBUS加载数据。
topOut.getElement(“COUNTERBUS”)
topOut.getElement(“INCREMENTBUS”)
您可以配置输入字段,单击连接输入按钮。将打开根导入映射器工具。在本例中,该工具使用映射算法来设置输入字段来自基本工作空间中记录的数据。
选择要导入的数据:
在根导入映射器中,单击从工作空间.
选择记录的数据topOut
并点击好吧.
在打开的对话框中,指定文件名并单击保存.
通过将数据加载到Root import Mapper工具中,您可以确定为其分配输入数据的根输入端口。金宝appSimulink基于以下条件之一将输入数据与输入端口匹配:块名称、块路径、信号名称、端口顺序或自定义算法。因为topOut
使用来自模型的信号名称进行日志记录时,映射条件的最佳选择是信号的名字.使用这个标准,Simulink试图将输入数据金宝app变量名称与输入信号的名称匹配。
要选择此选项:
在“根导入映射器”层次结构窗格中,选择场景数据集topOut
.
单击信号的名字单选按钮。
单击映射到模型按钮箭头,然后单击映射所有.
当映射数据时,Simulink根据输入金宝app数据评估输入端口以确定兼容性。Root import Mapper表用绿色的复选标记、橙色的警告三角形或红色的错误感叹号反映了这种兼容性的状态。在本例中,表格显示绿色状态,表示没有兼容性问题。您可以使用输入数据到输入端口的映射来模拟该模型。映射还设置输入在数据导入/导出选项卡中的正确逗号分隔的输入列表。要将更改应用到模型,在Configuration Parameters对话框中,单击应用.
模拟sldemo_mdlref_counter_bus
.
经过模拟,范围从sldemo_mdlref_bus
(OUTERDATA
),sldemo_mdlref_counter_bus
(INNERDATA
)显示同样的痕迹。
在参考模型中提供作用域的信号也被记录下来。记录的数据可以在MATLAB工作区的变量下使用subOut
.您可以验证输入的数据topOut.getElement(“OUTERDATA”)
和subOut.getElement(“INNERDATA”)
是相同的。