Main Content

本页的翻译已过时。点击此处可查看最新英文版本。

使用 From Workspace 模块加载数据

此示例说明如何使用 From Workspace 模块创建和格式化要从基础工作区加载的数据。要使用 From Workspace 模块加载数据,您必须在基础、模型或封装工作区中使用 From Workspace 模块支持的格式创建或保存数据。您可以通过编程方式创建您加载的数据,加载在另一个仿真中记录的数据,或加载从传感器或实验室采集的真实数据。您可以将每个格式部分的代码用作模板,以了解如何格式化您自己的仿真输入数据。

检查模型

此示例使用一个简单模型。两个 From Workspace 模块从基础工作区加载数据,并将该数据发送到两个 Outport 模块。一个 From Workspace 模块使用所有模块设置的默认值,另一个配置为加载总线数据。模型中的两个 Dashboard Scope 模块显示每个 From Workspace 模块加载的数据。该模型还包含几个 Callback Button 模块,您可以将其用于使用 From Workspace 模块支持的不同格式在基础工作区中生成数据。

当您打开模型时,该模型通过 PreLoadFcn 回调来使用 timeseries 格式定义 simin 变量,使用 timeseries 对象的结构体定义 busin 变量。在仿真模型之前,使用 Callback Button 模块之一以所需格式创建数据。要创建数据,请点击以选择该 Callback Button 模块,然后再次点击以运行代码。您可以在模块对话框或属性检查器中查看每个 Callback Button 模块的代码。

创建时间和信号数据

From Workspace 模块支持的大多数数据格式基本上由与信号值配对的时间向量组成。您可以使用 Structure without time 格式仅加载没有对应时间值的输入数据值,这有时是离散仿真所必需的。(有关详细信息,请参阅Load Data to Test a Discrete Algorithm。)此示例创建并加载时长为 10 秒的表示正弦波的数据。

要创建一个等间距时间向量,请先建立一个数组,该数组从零开始计数,直到所需的时间步数减 1(减 1 是对应于已定义的第一个时间步)。将该数组乘以所需的采样间隔。最后,转置得到的时间变量,使其成为列向量,而不是行向量。

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

注意

MATLAB® 支持另外几种创建等间距时间向量的方法,但这些方法可能会在时间数据中引入双精度舍入误差,从而导致意外的仿真结果。例如,不要使用 linspsace 函数或以下形式的 MATLAB 表达式为仿真输入数据创建等间距时间向量:

time = [startTime:stepSize:endTime]';
生成的时间向量与使用以下表达式创建的向量等效:
time = stepSize*[startTime:(numSteps-1)]

当时间向量由非等间距时间值组成时,可以使用任何有效的 MATLAB 表达式来创建时间数据。

现在,使用 sin 函数创建信号数据。此示例创建一个周期为 3 的正弦波。

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

加载 timeseries 数据

Simulink® 加载和记录通常都使用 MATLAB timeseries 对象将时序数据传入和传出仿真。标注为 Create timeseries data to loadCallback Button 模块的代码创建时间和信号数据,使用它来创建 timeseries 对象,并将 timeseries 对象分配给加载变量 simin

sampleRate = 0.01;
numSteps = 1001;
time = sampleRate*[0:(numSteps-1)];
time = time';
data = sin(2*pi/3*time);
simin = timeseries(data,time);

要加载 timeseries 数据,您可以运行代码以在 MATLAB 命令行窗口中创建 simin 加载变量,或选择然后点击标注为 Create timeseries data to loadCallback Button 模块。然后,仿真模型并查看 Dashboard Scope 模块中加载的数据。

加载 timetable 数据

MATLAB timetable 对象是用于存储时序数据的另一种格式。顾名思义,数据格式化为表。当您使用 timetable 对象加载数据时,timetable 对象只能在一列中包含单个信号的数据。

标注为 Create timetable data to loadCallback Button 模块的代码创建时间和信号数据,使用它来创建 timetable 对象,并将 timetable 对象分配给加载变量 simintimetable 对象要求输入时间是 datetimeduration 向量。此示例使用 seconds 函数创建持续时间向量 secs

sampleRate = 0.01;
numSteps = 1001;
time = sampleRate*[0:(numSteps-1)];
time = time';
data = sin(2*pi/3*time);
secs = seconds(time);
simin = timetable(secs,data);

要加载 timetable 数据,您可以运行代码以在 MATLAB 命令行窗口中创建 simin 加载变量,或选择然后点击标注为 Create timetable data to loadCallback Button 模块。然后,仿真模型并查看 Dashboard Scope 模块中加载的数据。

加载结构体数据

From Workspace 模块支持使用与 StructureStructure with time 记录格式匹配的结构体为信号加载数据。该模型包含 Callback Button 模块,该模块创建与 Structure with time 格式匹配的数据。Structure 格式与 Structure with time 格式匹配,但 Structure 格式没有 time 字段。

该结构体有两个顶层字段,即 timesignals。当您使用 Structure with time 格式记录数据时,signals 字段可能是包含多个信号数据的结构体数组。当您使用 Structure with time 格式加载数据时,signals 字段只能包含一个结构体,且该结构体只包含单个信号的数据。signals 字段的结构体包含一个 values 字段,当信号不是标量时,必须包含多个 dimensions 字段。

标注为 Create structure with time data to loadCallback Button 模块的代码创建时间和信号数据,并使用它来构建具有所需字段和层次结构的结构体。该代码首先清除名为 simin 的任何现有变量,该变量可能是属性名称与结构体字段名称匹配的对象。

clear simin;
sampleRate = 0.01;
numSteps = 1001;
time = sampleRate*[0:(numSteps-1)];
time = time';
data = sin(2*pi/3*time);
simin.time = time;
simin.signals.values = data;

要加载结构体数据,您可以运行代码以在 MATLAB 命令行窗口中创建 simin 加载变量,或选择然后点击标注为 Create structure data to loadCallback Button 模块。然后,仿真模型并查看 Dashboard Scope 模块中加载的数据。

为多维信号加载数据时,请再添加一行代码,以将信号维度赋给 simin.signals.dimensions。当信号数据是标量时,如果包含维度字段,请将该字段设置为 1。当每个信号值均为行向量时,可以将维度指定为 [1 n]n,其中 n 是列数。当每个信号值为 M×N 矩阵时,请将维度字段值指定为 [M N]

当您要加载没有时间数据的仿真输入数据时,请使用不包含 time 字段的 Structure 格式,并在 Sample time 参数中指定所需的采样率。有关详细信息,请参阅 Load Data to Test a Discrete Algorithm

加载数组数据

您可以使用 From Workspace 模块加载格式化为数组的信号数据,其中数组的第一列包含时间数据,后续列包含信号数据。当以数组格式加载数据时,信号值只能包含一行。

名为 Create array data to loadCallback Button 模块的代码创建时间和信号数据,并将两个行向量串联成一个数组。

sampleRate = 0.01;
numSteps = 1001;
time = sampleRate*[0:(numSteps-1)];
time = time';
data = sin(2*pi/3*time);
simin = [time,data];

要加载数组数据,您可以运行代码以在 MATLAB 命令行窗口中创建 simin 加载变量,或选择然后点击标注为 Create array data to loadCallback Button 模块。然后,仿真模型并查看 Dashboard Scope 模块中加载的数据。

加载总线数据

使用 From Workspace 模块加载总线数据时,必须将 Output data type 参数指定为定义总线的 Simulink.Bus 对象。加载总线数据的 From Workspace 模块的 Output data type 设置为 Bus: SinusoidBus。模型的 PreLoadFcn 回调和标注为 Create bus data to loadCallback 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 loadCallback Button 模块创建一个由 timeseries 对象组成的结构体,其层次结构和字段名称与 SinusoidBus 对象的层次结构和元素名称相匹配。您还可以创建一个由 timetable 对象组成的结构体,以作为总线的输入数据进行加载。

sampleRate = 0.01;
numSteps = 1001;

time = sampleRate*[0:(numSteps-1)];
time = time';

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

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

要加载总线数据,您可以运行代码以在 MATLAB 命令行窗口中创建 busin 加载变量,或选择然后点击标注为 Create bus data to loadCallback Button 模块。然后,仿真模型并查看 Dashboard Scope 模块中加载的数据。

加载部分指定的总线数据

当使用 From Workspace 模块为总线加载输入数据时,不需要为每个总线元素提供数据。要部分指定总线的输入数据,可以省略结构体中的对应字段,或将其值指定为 []

标注为 Create partially specified bus data to loadCallback Button 模块创建一个由 timeseries 对象组成的结构体,其层次结构和字段名称与 SinusoidBus 对象的层次结构和元素名称相匹配。它不指定 Cosine 总线元素的数据。

sampleRate = 0.01;
numSteps = 1001;

time = sampleRate*[0:(numSteps-1)];
time = time';

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

busin.Cosine = [];
busin.SineBus.Sine = timeseries(data,time);
busin.SineBus.BigSine = timeseries(ampdata,time);

要加载总线数据,您可以运行代码以在 MATLAB 命令行窗口中创建 busin 加载变量,或选择然后点击标注为 Create partially specified bus data to loadCallback Button 模块。然后,仿真模型并查看 Dashboard Scope 模块中加载的数据。

当您为包含嵌套总线或嵌套总线数组的总线部分指定数据时,您可以将整个嵌套总线或嵌套总线数组指定为 [],并且 From Workspace 模块为嵌套总线或总线数组的所有元素提供基值。您还可以通过省略总线数组中包含的一个或多个总线的数据来部分指定总线数组的数据。

加载总线数据的数组

当使用 From Workspace 模块加载总线数组的数据时,必须将 Output data type 参数指定为定义总线数组包含的总线的 Simulink.Bus 对象。总线数组中的所有总线必须由同一个 Simulink.Bus 对象定义。为总线数组加载数据的 From Workspace 模块将其 Output data type 设置为 Bus: SinusoidBus。有关定义 Bus 对象的详细信息,请参阅加载总线数据

标注为 Create array of buses data to loadCallback Button 模块创建一个数组,该数组包含两个由 timeseries 对象组成的结构体,其层次结构和字段名称与 SinusoidBus 对象的层次结构体和元素名称相匹配。第二个结构体 bus2 使用与第一个结构体相同的数据,但会下移一位,以便您看到 Dashboard Scope 模块上的所有六个信号。

sampleRate = 0.01;
numSteps = 1001;

time = sampleRate*[0:(numSteps-1)];
time = time';

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

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

bus2.Cosine = timeseries((cosdata-1),time);
bus2.SineBus.Sine = timeseries((data-1),time);
bus2.SineBus.BigSine = timeseries((ampdata-1),time);

busin = [bus1,bus2];

要加载总线数组数据,您可以运行代码以在 MATLAB 命令行窗口中创建 busin 加载变量,或选择然后点击标注为 Create array of buses data to loadCallback Button 模块。然后,仿真模型并查看 Dashboard Scope 模块中加载的数据。

另请参阅

模块

对象

相关主题