Main Content

使用 From File 模块加载数据

此示例说明如何使用 From File 模块从 MAT 文件加载仿真输入数据,包括如何创建和格式化输入数据。您可以通过编程方式创建您加载的数据,加载从另一个仿真中记录的数据,或加载从传感器或实验室采集的真实数据。您可以将每个格式部分的代码用作模板,以了解如何格式化您自己的仿真输入数据。

检查模型

此示例使用一个简单模型。两个 From File 模块从两个不同 MAT 文件加载数据,以创建连接到两个 Outport 模块的信号。一个 From File 模块加载标量信号的数据,并且只有该模块的文件名参数的默认值被更改。另一个 From File 模块配置为加载总线的数据。两个 Dashboard Scope 模块分别显示 From File 模块创建的输出信号。该模型还包含三个 Callback Button 模块,您可以用它们生成各种带有 From File 模块支持格式的输入数据的文件。

该模型使用 PreLoadFcn 回调来:

  • 创建 timeseries 数据并将其保存为文件 inputData.mat

  • 创建总线的输入数据并将其保存为文件 busData.mat

  • 创建 Simulink.Bus 对象,该对象为加载总线数据的 From File 模块定义输出数据类型。

在仿真模型之前,使用 Callback Button 模块以所需格式创建数据。要创建数据,请点击以选择该 Callback Button 模块,然后再次点击以运行代码。您可以在模块对话框或属性检查器中查看每个 Callback Button 模块的代码。

创建时间和信号数据

From File 模块支持加载存储在 timeseries 对象中的数据和存储在数组中的数据。在使用 From File 模块加载的数据中,每个采样值必须有一个与其对应的时间值。此示例创建并加载时长为 10 秒的表示正弦波的数据。

首先,创建一个时间向量。在使用 From File 模块加载数据时,时间值的数据类型必须为 double,并且时间值必须单调递增。

sampleTime = 0.01;
numSteps = 1001;
time = sampleTime*(0:numSteps-1);

使用此示例中的表达式为输入信号创建一个等间距时间向量,尤其是在对离散输入信号建模时。MATLAB® 支持另外几种创建等间距时间向量的方法,但这些方法可能会在时间数据中引入双精度舍入误差,从而导致意外的仿真结果。

现在,使用 sin 函数创建信号数据。使用 From File 模块加载的采样值不能包含 NaNInf-Inf 值。

data = sin(2*pi/3*time);

加载 timeseries 数据

Simulink® 加载和记录通常都使用 timeseries 对象将时间序列数据传入和传出仿真。当您将 MAT 文件中的数据保存为 timeseries 对象时,From File 模块支持加载各种输入数据。您加载的信号值可以是:

  • halfint64uint64 以外的内置数值数据类型;最长 32 位字长的定点数据类型;或者枚举数据类型。

  • 实数或复数。

  • 标量、向量或多维。

使用 From File 模块加载 timeseries 对象中的数据时,必须将 timeseries 数据保存在 7.3 版 MAT 文件中。To File 模块将数据保存到 7.3 版的 MAT 文件中。从使用 To File 模块创建的文件加载数据时,不需要转换文件的版本。

Callback Button 模块的代码,标注为 Create file with timeseries data to load

  1. 创建时间和信号数据为行向量。

  2. 根据创建具有标量数据值的 timeseries 对象的需要,将行向量转置为列向量。

  3. 创建一个用于包含数据的 timeseries 对象。

  4. timeseries 对象保存在 7.3 版 MAT 文件中。

sampleTime = 0.01;
numSteps = 1001;
time = sampleTime*[0:(numSteps-1)];
data = sin(2*pi/3*time);
time = time';
data = data';
inputData = timeseries(data,time);
save("inputData.mat","inputData","-v7.3");

要加载 timeseries 数据,您可以运行代码以使用 MATLAB 命令行窗口创建 inputData.mat 文件,或选择然后点击 Create file with timeseries data to load Callback Button 模块。然后,仿真模型并查看 Dashboard Scope 模块中加载的数据。

加载数组数据

您可以使用 From File 模块加载格式化为数组的标量或向量信号数据,其中第一行包含时间数据,后续行包含采样值。当使用 From File 模块加载数组数据时,采样值必须为实数且类型为 double。From File 模块可以从任何 MAT 文件版本加载数组数据。

标注为 Create file with array data to load 的 Callback Button 模块的代码创建时间和信号数据,将行向量串联为一个数组,并将该数组保存到版本 7 的 MAT 文件中。

sampleTime = 0.01;
numSteps = 1001;
time = sampleTime*[0:(numSteps-1)];
data = sin(2*pi/3*time);
inputData = [time;data];
save("inputData.mat","inputData")

要加载数组数据,您可以运行代码以使用 MATLAB 命令行窗口创建 inputData.mat 文件,或选择然后点击 Create file with array data to load Callback Button 模块。然后,仿真模型并查看 Dashboard Scope 模块中加载的数据。

加载总线数据

From File 模块支持加载包含 timeseries 对象作为总线输入数据的结构体。结构体中的每个 timeseries 对象都可以包含从单个 timeseries 对象加载数据时支持的任何类型的数据。

使用 From File 模块加载总线数据时,必须将输出数据类型参数指定为定义总线的 Simulink.Bus 对象。包含总线数据的结构体中的层次结构和字段名称必须与定义输出数据类型的 Bus 对象的层次结构和元素名称匹配。

加载总线数据的 From File 模块将其输出数据类型设置配置为 Bus: SinusoidBus。模型的 PreLoadFcn 回调和 Create file with bus data to load Callback Button 模块的代码都定义 SinusoidBus 对象。

Bus 对象定义总线层次结构以及总线中元素的属性,如名称和数据类型。此示例中的 Bus 对象定义总线层次结构、总线中包含的信号名称以及嵌套总线的数据类型。总线 SinusoidBus 包含一个信号 Cosine、一个名为 SineBus 的嵌套总线,该嵌套总线包含两个信号 SineBigSine

elems(1) = Simulink.BusElement;
elems(1).Name = 'Sine';
elems(2) = Simulink.BusElement;
elems(2).Name = 'BigSine';
SineBus = Simulink.Bus;
SineBus.Elements = elems;

clear elems;
elems(1) = Simulink.BusElement;
elems(1).Name = 'SineBus';
elems(1).DataType = 'Bus: SineBus';
elems(2) = Simulink.BusElement;
elems(2).Name = 'Cosine';
SinusoidBus = Simulink.Bus;
SinusoidBus.Elements = elems;

有关使用 Simulink.Bus 对象定义总线的详细信息,请参阅使用 Simulink.Bus 对象数据类型指定总线属性

标注为 Create bus data to load 的 Callback Button 模块创建一个由 timeseries 对象组成的结构体,其层次结构和字段名称与 SinusoidBus 对象的层次结构和元素名称相匹配,并将该结构体保存到 7.3 版的 MAT 文件中。

sampleTime = 0.01;
numSteps = 1001;
time = sampleTime*[0:(numSteps-1)];
time = time';

data = sin(2*pi/3*time);
cosdata = cos(2*pi/3*time);
ampdata = 2*data;

busData.Cosine = timeseries(cosdata,time);
busData.SineBus.Sine = timeseries(data,time);
busData.SineBus.BigSine = timeseries(ampdata,time);

save("busData.mat","busData","-v7.3");

要加载总线数据,您可以运行代码以使用 MATLAB 命令行窗口创建 busData.mat 文件,或选择然后点击 Create bus data to load Callback Button 模块。然后,仿真模型并查看 Dashboard Scope 模块中加载的数据。

当使用 From File 模块为总线加载输入数据时,不需要为总线中的每个元素提供数据。要部分指定总线的输入数据,可以省略结构体中的对应字段,或将其值指定为 []。当您为包含嵌套总线的总线部分指定数据时,您可以将整个嵌套总线指定为 [],并且 From File 模块为嵌套总线的所有元素提供接地值。

另请参阅

模块

对象

函数

相关主题