文档

记录在结构格式

这个例子展示了如何记录状态轨迹的仿真软件®模型的结构格式可以比传统方法以数组格式的日志状态。万博1manbetx州沿着列的顺序记录矩阵顺序取决于块,该仿真软件在模型编译软件决定。万博1manbetx各种因素可以影响块顺序,从而改变美国的命令。

这个例子演示了如何记录状态结构格式,名称存储块的状态轨迹,可以帮助防止国家排序问题。

数组格式的问题日志

默认情况下,模型软件日志状态轨迹万博1manbetx数组格式的,这是一个与N列矩阵,其中N是州的数量。矩阵M行,每一行对应一个仿真时间步。这个m×n的矩阵形式很容易操纵在MATLAB®。然而,状态变量的顺序记录矩阵的列顺序取决于块。因此,任何MATLAB代码预计固定块的状态之间的映射模型和状态矩阵的列时容易断裂块顺序改变模型中的变化。

例如,考虑以下两个方框图:

mdl1 =“sldemo_state_logging1”;mdl2 =“sldemo_state_logging2”;open_system (mdl1);open_system (mdl2);

这两个图有相同的块,唯一的区别是输出端口的命令。模拟模型和日志状态数组格式:

simOut1 = sim (mdl1,“SaveFormat”,“数组”);simOut2 = sim (mdl2,“SaveFormat”,“数组”);

从模型中提取状态向量。万博1manbetx模拟Output object, which contains the output logs of the simulation:

x1 = simOut1.get (“xout”);x2 = simOut2.get (“xout”);

注意,集成块的相对顺序是不同的两个方框图。这导致记录的状态x1x2因为不同列之间的映射和美国是不同的:

isequal (x1, x2)
ans =逻辑0

使用结构格式记录

模拟的模型,但这一次日志国家结构形式:

simOut1 = sim (mdl1,“SaveFormat”,“结构”);simOut2 = sim (mdl2,“SaveFormat”,“结构”);

提取结构,其中包含日志,从仿真输出对象:

x1 = simOut1.get (“xout”);x2 = simOut2.get (“xout”);

显示这些结构。请注意,这些结构有两个字段:时间和信号。字段“时间”是空的,因为我们选择了“结构”模型参数“SaveFormat”。我们可以选择“StructureWithTime”存储在美国时间向量结构:

disp (x1);disp (x2);
时间:[]的信号:[1 x2 struct]:[]的信号:[1 x2 struct]

软件记录状态的轨迹xs.signals (k) . values随着模块的名字xs.signals .blockName (k)对应于这些国家。美国提取到一个矩阵(像在数组格式)是这样的:

x1a = [x1s.signals.values];x2a = [x2s.signals.values];

注意状态排序问题仍然存在x1ax2a是一样的x1x2获得通过数组格式):

isequal (x1a x2a)
ans =逻辑0

获取状态矩阵与固定状态

解决国家排序问题,使用块名称存储的值将状态映射到一个固定的顺序,例如,块名称的字母顺序排列:

[~,idx1] =排序({x1s.signals.blockName});x1 = [x1s.signals (idx1) . values);[~,idx2] =排序({x2s.signals.blockName});x2 = [x2s.signals (idx2) . values);isequal (x1, x2)
ans =逻辑1

通过重新排序数组的信号x1x2成块的名字的字母顺序排列,提取字段的值,依次,矩阵x1x2,我们有一个机制来记录状态为一个矩阵与固定块的映射到列的记录的矩阵。

关闭模型和明确的是本例中使用的变量:

close_system (mdl1);close_system (mdl2);清晰的idx1idx2mdl1mdl2simOut1simOut2x1x1ax1x2x2ax2
这个主题有帮助吗?