Microsoft Excel 导入、导出和记录格式
使用仿真数据检查器或 Simulink® Test™,您可以从 Microsoft® Excel® 文件导入数据或将数据导出到 Microsoft Excel 文件。您还可以使用 Playback 模块将数据从 Excel 电子表格加载到您的模型中,或使用 Record 模块将数据记录到 Excel 文件中。仿真数据检查器、Simulink Test、Playback 模块和 Record 模块都使用相同的文件格式,因此您可以在多个应用程序中使用相同的 Microsoft Excel 文件。
提示
当 Excel 文件中的数据格式与本主题中的设定不匹配时,您可以编写自己的文件读取器来使用 io.reader
类导入数据。
基本文件格式
在最简单的格式中,Excel 文件的第一行是标题,列出文件中信号的名称。第一列是时间。时间列的名称必须为 time
,并且时间值必须单调递增。信号名称以下的各行列出对应于每个时间步的信号值。
Excel 不支持 Inf
或 NaN
值,这会影响导入和导出操作。当您从 Excel 文件导入数据时,仿真数据检查器:
支持所有内置数据类型
不支持导入包含空单元格或数字值错误的数据,例如在
time
列中由Inf
或NaN
值产生的数据将空单元格和在信号值列中有数字值错误的单元格视为缺失数据
当您将包含 Inf
或 NaN
值的数据从仿真数据检查器导出到 Excel 时:
仿真数据检查器会删除
NaN
值,在导出的电子表格中将这些单元格保留为空。由于 Excel 本身不支持将
Inf
作为数值,因此 Excel 会根据 Excel 软件的版本将Inf
数据转换为错误代码或数值65535
。
多个时间向量
当数据包含具有不同时间向量的信号时,文件可以包含多个时间向量。每个时间列必须命名为 time
。时间列指定其右边各信号列的采样时间,直到下一个时间向量列为止。例如,第一个时间列定义 signal1
和 signal2
的时间,第二个时间列定义 signal3
的时间步。
信号列必须具有与相关联的时间向量相同的数据点数。
信号元数据
文件可以包括信号元数据,例如数据类型、单位和插值方法。元数据用于确定如何绘制数据、如何应用单位和数据转换以及如何计算比较结果。有关如何在比较中使用元数据的详细信息,请参阅仿真数据检查器如何比较数据。
每个信号的元数据在信号名称和信号数据之间的行中列出。您可以为每个信号指定任意元数据组合。对元数据指定不足的信号,在相应位置保留一个空元胞即可。
根据下表标记每个元数据片段。该表还指出工具和操作对每个元数据片段的支持情况。当导入的文件未指定信号元数据时,将使用 double
数据类型、zoh
(零阶保持)插值和 union
同步。
信号属性 | 标签 | 值 | 仿真数据检查器导入 | Record 模块记录和仿真数据检查器导出 | Simulink Test 导入和导出 |
---|---|---|---|---|---|
数据类型 | Type: | 内置数据类型。 | 支持 | 支持 | 支持 |
单位 | Unit: | 支持的单位。例如, 有关支持的设备列表,请在 MATLAB® 命令行窗口中输入 | 支持 | 支持 | 支持 |
插值方法 | Interp: | linear 、zoh (零阶保持)或 none 。 | 支持 | 支持 | 支持 |
同步方法 | Sync: | union 或 intersection 。 | 支持 | 不支持 导出的文件中不包含元数据。 | 支持 |
相对容差 | RelTol: | 百分比,以小数形式表示。例如,RelTol: 0.1 指定 10% 的相对容差。 | 支持 | 不支持 导出的文件中不包含元数据。 | 支持 |
绝对容差 | AbsTol: | 数值。 | 支持 | 不支持 导出的文件中不包含元数据。 | 支持 |
时间容差 | TimeTol: | 数值,以秒为单位。 | 支持 | 不支持 导出的文件中不包含元数据。 | 支持 |
超前容差 | LeadingTol: | 数值,以秒为单位。 | 支持 仅在 Simulink Test 中可见。 | 不支持 导出的文件中不包含元数据。 | 支持 |
滞后容差 | LaggingTol: | 数值,以秒为单位。 | 支持 仅在 Simulink Test 中可见。 | 不支持 导出的文件中不包含元数据。 | 支持 |
模块路径 | BlockPath: | 生成信号的模块的路径。 | 支持 | 支持 | 支持 |
端口索引 | PortIndex: | 整数。 | 支持 | 支持 | 支持 |
名称 | Name: | 信号名称 | 支持 | 不支持 导出的文件中不包含元数据。 | 支持 |
用户定义的数据类型
除了内置数据类型之外,您还可以使用其他标签代替 DataType:
标签来指定定点、枚举、别名和总线数据类型。
数据类型 | 标签 | 值 | 仿真数据检查器导入 | Record 模块记录和仿真数据检查器导出 | Simulink Test 导入和导出 |
---|---|---|---|---|---|
枚举 | Enum: | 枚举类的名称。 | 支持 枚举类定义必须保存在 MATLAB 路径中。 | 支持 枚举类定义必须保存在 MATLAB 路径中。 | 支持 枚举类定义必须保存在 MATLAB 路径中。 |
别名 | Alias: | MATLAB 工作区中 | 支持 对于矩阵和复信号,在第一个通道上指定别名数据类型。 | 不支持 | 支持 对于矩阵和复信号,在第一个通道上指定别名数据类型。 |
定点 | Fixdt: |
| 支持 | 不支持 | 支持 |
总线 | Bus: | MATLAB 工作区中 | 支持 | 不支持 | 支持 |
当您使用 Simulink.Bus
对象的名称指定类型并且该对象不在 MATLAB 工作区中时,数据仍会从文件中导入。但是,总线中的单个信号使用文件中所述的数据类型,而不是 Simulink.Bus
对象中定义的数据类型。
复信号、多维信号和总线信号
您可以使用 Excel 文件导入和导出复信号、多维信号和总线信号。数据列的信号名称表示该数据是复信号、多维信号还是总线信号的一部分。Excel 文件导入和导出不支持总线数组。
注意
当您将数据从具有可变大小信号的非虚拟总线导出到 Excel 文件时,可变大小信号数据会扩展到各个通道,并且数据的层次结构性质会丢失。从此文件导入的数据以扁平列表形式返回。
多维信号名称包含用圆括号括起来的索引信息。例如,列的信号名称可能是 signal1(2,3)
。当您从包含多维信号数据的文件中导入数据时,文件中未包含的数据中的元素将采用零采样值,其数据类型和复/实性与其他元素相同。
复信号数据始终采用实部-虚部格式。包含复信号数据的列的信号名称包括 (real)
和 (imag)
,以指示每列包含哪些数据。如果从包含虚部信号数据的文件中导入数据但没有指定该信号的实部值,则实部的信号值默认为零。
多维信号可以包含复数数据。信号名称包括多维信号内的索引指示以及实部或虚部标记。例如,signal1(1,3)(real)
。
信号名称中的点指定总线的层次结构。例如:
bus.y.a
bus.y.b
bus.x
提示
当信号名称中包含的字符使其看起来像是矩阵、复信号或总线的一部分时,使用 Name
元数据选项指定您要导入的信号在 Playback 模块、仿真数据检查器和 Simulink Test 中使用的名称。
函数调用信号
在第一个时间列之前的列中指定的信号数据作为一个或多个函数调用信号导入。该列中的数据指定函数调用信号启用的时间。对于该列中指定的时间,导入信号的值为 1
。函数调用信号的时间值必须为双精度实数标量,并且必须单调递增。
当您从仿真数据检查器中导出数据时,函数调用信号的格式与其他信号相同,具有一个时间列和一个信号值列。
仿真参数
您可以为仿真中使用的参数值导入数据。在 Playback 模块和仿真数据检查器中,参数值显示为信号。Simulink Test 使用导入的参数值指定在它基于导入的数据运行的测试中这些参数的值。
使用两列或三列来指定参数数据。第一列指定参数名称,该列标题行中的单元格标注为 Parameter:
。第二列指定用于每个参数的值,标题行中的单元格标注为 Value:
。参数数据还可能包括第三列,该列包含与每个参数关联的模块路径,标题行中的单元格标注为 BlockPath:
。从包含信号数据的第一行开始,在用于指定信号元数据的行下面,指定参数的名称、值和模块路径。例如,以下文件指定两个参数 X
和 Y
的值。
有关详细信息,请参阅创建用于测试用例的外部数据文件 (Simulink Test)。
多次运行
您可以在单个文件中包含多次运行的数据。在工作表中,您可以通过使用仿真编号和源类型(如 Input
或 Output
)标记数据,从而将数据划分为若干次运行。使用标签 Simulation:
表示仿真编号,使用标签 Source:
表示源类型,将仿真编号和源类型指定为附加信号元数据。Playback 模块和仿真数据检查器仅使用仿真编号和源类型来确定属于每个运行中的信号。Simulink Test 根据导入的数据,使用这些信息定义要运行的测试的输入、参数和验收标准。
您不需要为每个信号指定仿真编号和输出类型。具有仿真编号和源的信号右侧的信号使用相同的仿真编号和源,直到下一个信号具有不同的源或仿真编号。例如,以下文件定义两个仿真的数据,并导入仿真数据检查器中的四个运行中:
运行 1 包含
signal1
和signal2
。运行 2 包含
signal3
、X
和Y
。运行 3 包含
signal4
。运行 4 包含
signal5
。
您也可以使用 Microsoft Excel 文件中的工作表将数据划分为运行和测试。当您不指定仿真编号和源信息时,每个工作表上的数据将导入仿真数据检查器或 Playback 模块中的一个单独运行中。从仿真数据检查器中导出多个运行时,每个运行的数据都保存在一个单独的工作表上。当您将一个包含多个工作表数据的 Microsoft Excel 文件导入 Simulink Test 时,会为每个工作表创建一个迭代。
另请参阅
Simulink.sdi.createRun
| Simulink.sdi.exportRun