主要内容

记录在结构格式

日志状态使用结构格式可以提供优势数组格式。当你使用日志状态数组格式,州沿着列的顺序记录数组顺序取决于块。各种因素会影响块顺序,可以改变状态从一个模拟的顺序。当你使用结构格式、存储块的名称和登录状态数据块,所以你可以处理数据而不考虑顺序。

数组格式的日志状态

当你使用日志状态数组格式,记录的数据存储在一个数组中N列,N的状态数,行,一个为每个模拟时间步。这个m×n的矩阵形式很容易操纵在MATLAB®。然而,状态变量的顺序记录矩阵的列顺序取决于块。因此,任何MATLAB代码预计固定块的状态之间的映射模型和状态矩阵的列时容易断裂块顺序改变模型中的变化。

例如,考虑模型sldemo_state_logging1sldemo_state_logging2

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

两个模型包含相同的块,同样的方式连接。唯一的区别是输出端口的顺序。模拟模型和日志状态使用数组格式。

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

提取的状态向量万博1manbetxSimulink.SimulationOutput对象,该对象包含所有数据登录模拟。

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

记录的状态数据x1x2是不同的,因为块命令不同,所以记录数组的列之间的映射和块模型是不同的。

isequal (x1, x2)
ans =逻辑0

日志使用结构格式

模拟的模型,但这一次日志结构格式的州。

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

提取结构,其中包含记录的状态,从SimulationOutput对象。

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

显示这些结构,其中包含两个字段:时间信号。的时间字段是空的,因为数据是记录使用结构格式而不是StructureWithTime格式。您可以使用StructureWithTime当你需要保存时间数据格式以及美国数据。

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

结构信号字段是一个结构数组,每个块有一个结构模型中的状态数据。每一块数据结构中信号字段包含一个美国数据和领域blockName字段的名称与生产状态数据块。您可以提取状态数据到一个矩阵,可以类似于如何处理您登录美国使用数组格式。

要解决国家排序问题,首先使用块名称,美国数据转换成一个固定的顺序。例如,您可以把状态数据,以便块按字母顺序排列,将从一个模拟下保持不变,不管块顺序。

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

一旦你按字母顺序重新排序字段的信号块名称,如果你提取的值字段数据在同一个订单,然后您可以处理数据类似于如何当你使用数组格式,但状态数据块的顺序不会改变从一个仿真。