主要内容

To Workspace

R2026b

将数据从 Simulink 模型记录到工作区

  • To Workspace block

库:
Simulink / Sinks
DSP System Toolbox / Sinks
HDL Coder / Sinks

描述

To Workspace 模块将连接到其输入端口的数据从 Simulink® 模型记录到工作区。通常,记录的数据在基础工作区中返回。当您以编程方式在函数中仿真模型时,记录的数据将返回到函数的工作区中。在仿真期间,记录的数据会流式传输到仿真数据检查器。当仿真暂停或停止时,记录的数据会写入工作区。

您可以使用 To Workspace 模块记录信号、总线或总线数组的数据。To Workspace 模块支持记录标量和多维数据,包括可变大小信号的数据。

您可以配置存储 To Workspace 模块所记录数据的变量的名称,还可以指定所记录数据的格式。您还可以通过指定模块或模型参数来控制 To Workspace 模块记录的值。有关详细信息,请参阅Specify Signal Values to Log。

访问记录的数据

仿真结果如何返回到工作区取决于您如何仿真和配置模型。在以下任何情况下,仿真结果都以单个 Simulink.SimulationOutput 对象形式返回:

  • 启用单一仿真输出参数。

    默认情况下,创建新模型时,单一仿真输出参数处于启用状态。您可以使用“配置参数”对话框来启用该参数。在建模选项卡上的设置下,点击模型设置。然后,在“配置参数”对话框中,选择数据导入/导出,并选择单一仿真输出。

  • 您可以使用多个仿真窗格运行一组仿真。

  • 您可以使用一个或多个 Simulink.SimulationInput 对象以编程方式对模型进行仿真。

    使用 sim、parsim 和 batchsim 函数运行仿真时,您可以使用 SimulationInput 对象配置仿真。

  • 使用 sim 函数语法仿真模型,该语法将结果以单个仿真输出形式返回。

    有关详细信息,请参阅 sim。

当仿真结果在单个输出中返回时,对于模型中的每个 To Workspace 模块,SimulationOutput 对象都包含一个对应的变量。要访问 To Workspace 模块记录的数据,请执行以下操作:

  • 使用一个圆点,后跟使用模块的变量名称参数指定的变量名称。默认情况下,模型配置为使用变量名称 out 返回单个仿真输出,To Workspace 模块会将数据保存到名为 simout 的变量中。

    toWksData = out.simout;
  • 使用 get 函数和包含所记录数据的变量的名称。

    toWksData = get(out,"simout");

在模型中,To Workspace 模块指示如何访问工作区中的数据。默认情况下,该模块显示 out.simout。当您执行以下操作时,模块外观会更新:

  • 为模块中的变量名称参数指定不同的值。

  • 为单个仿真输出指定不同的变量名称。

  • 清除单一仿真输出配置参数。

示例

全部展开

To Workspace 模块将仿真数据记录到工作区。

例如,仿真 SineToWorkspace 模型。

The SineToWorkspace model

mdl = "SineToWorkspace";
out = sim(mdl);

模型的仿真结果在名为 out 的单个 Simulink.SimulationOutput 对象中返回。要访问由 To Workspace 模块保存的结果,请使用圆点表示法。

toWksData = out.simout
  timeseries

  Common Properties:
            Name: 'Sine Wave'
            Time: [51x1 double]
        TimeInfo: [1x1 tsdata.timemetadata]
            Data: [51x1 double]
        DataInfo: [1x1 tsdata.datametadata]

  More properties, Methods

扩展示例

端口

输入

全部展开

接收数据以记录到工作区的输入端口。To Workspace 模块支持记录任何内置数据类型或用户定义数据类型的实数和复数数据,如总线、枚举和定点数据。

提示

记录定点数据需要 Fixed-Point Designer™ 许可证。

数据类型: single | double | half | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64 | Boolean | string | fixed point | enumerated | bus | image | datetime
复数支持: 是

参数

全部展开

要以交互方式编辑模块参数,请使用属性检查器。在 Simulink 工具条中,在仿真选项卡的准备库中,选择属性检查器。

为包含所记录数据的变量指定名称。默认情况下,To Workspace 模块将记录的数据保存在名为 simout 的变量中。当一个模型包含多个 To Workspace 模块时,每个模块的变量名称参数值必须是唯一的。

有关命名 MATLAB® 变量的信息,请参阅变量名称。

编程用法

要以编程方式设置模块参数值,请使用 set_param 函数。

参数: VariableName
值: "simout" (默认) | valid MATLAB variable name
数据类型: character vector | string

示例: set_param(gcb,"VariableName","myName")

如果只想保存或分析仿真结束时的数据,请将要记录的采样数指定为大于零的正整数。默认情况下,To Workspace 模块记录整个仿真的数据,并且将数据点限制为最后参数的值为 inf。

将记录的数据限制为最后 n 个信号值会直接影响内存分配。指定此参数时,软件会根据指定的值(而不是根据在仿真期间生成的时间步)预分配内存。因此,当记录不确定数量的时间步时,不推荐使用将数据点限制为最后参数。

有关控制在仿真期间记录哪些采样的详细信息,请参阅Specify Signal Values to Log。

编程用法

要以编程方式设置模块参数值,请使用 set_param 函数。

参数: MaxDataPoints
值: "inf" (默认) | positive integer
数据类型: character vector | string

示例: set_param(gcb,"MaxDataPoints","20")

指定抽取因子以降低记录数据的有效采样率。对于抽取因子 n,To Workspace 模块记录每第 n 个采样值。例如,当抽取值指定为 2 时,To Workspace 模块每隔一个数据点记录一个采样。

有关控制在仿真期间记录哪些采样的详细信息,请参阅Specify Signal Values to Log。

编程用法

要以编程方式设置模块参数值,请使用 set_param 函数。

参数: Decimation
值: "1" (默认) | positive integer
数据类型: character vector | string

示例: set_param(gcb,"Decimation","2")

指定记录到工作区的数据的格式。要记录总线或总线数组输入的数据,请使用时间序列格式。

保存格式值工作区数据格式仿真工作流支持
时间序列

非总线输入记录为 timeseries 对象。

总线输入记录为由 timeseries 对象组成的结构体。结构体中字段的层次结构和名称与在定义总线的 Simulink.Bus 对象中指定的层次结构和名称匹配。

总线数组输入记录为由 timeseries 对象组成的结构体数组。

支持:

  • 普通模式仿真

  • 加速模式仿真

  • 快速加速模式仿真 (自 R2022a 起)

  • 使用 XCP 通信的外部模式仿真(如果 StreamToWks 设置为 'on' 并且 MATFileLogging 设置为 'off')

不支持:

  • 使用 TCP/IP 或串行通信的外部模式仿真

  • 软件在环 (SIL) 仿真

  • 处理器在环 (PIL) 仿真

  • Simulink Coder™ 目标的代码生成

带时间的结构体

非总线输入记录为包含以下字段的结构体:

  • time - 由记录输入值的仿真时间点组成的列向量。

  • signals - 具有采样值的结构体,包含以下字段:

    • values - 由采样值组成的数组。

    • dimensions - 采样维度。

    • label - 模型中信号线的名称。

  • blockName - To Workspace 模块的名称。

始终支持:

  • 普通模式仿真。

  • 使用 XCP 通信的外部模式仿真(如果 StreamToWks 设置为 'on' 并且 MATFileLogging 设置为 'off')

支持,除非 To Workspace 模块位于引用模型中:

  • 加速模式仿真

  • 快速加速模式仿真

  • 使用 TCP/IP 或串行通信的外部模式仿真

如果为生成的代码启用 MAT 文件记录 (Simulink Coder),则支持,除非 To Workspace 模块位于引用模型中:

  • 软件在环 (SIL) 仿真

  • 处理器在环 (PIL) 仿真

  • Simulink Coder 目标的代码生成

结构体

非总线输入记录为与带时间的结构体格式匹配的结构体,但该结构体的 time 字段为空。

数组

非总线输入的采样值保存为 N 维数组,其中 N 比输入维数大一。例如:

  • 标量信号数据记录为列向量。

  • 向量信号数据记录为矩阵。

  • 矩阵信号数据记录为三维数组。

数组中值的结构取决于输入信号数据的维数:

  • 对于标量和向量信号,每个采样值在输出数组中都有一个对应的行。数组的第一个维度与时间对齐,使得 simout(1,:) 返回记录的第一个信号值。

  • 对于矩阵信号,输出数组的第三个维度与时间对齐,使得 simout(:,:,1) 返回记录的第一个信号值。

  • 对于 N 维信号,最后一个维度与时间对齐,使得最后一个维度中的元素数等于从仿真记录的采样数。

输出数组只包含信号值,不包含时间数据。

提示

  • 要将数据记录为基于帧而不是基于采样,请执行以下操作:

    • 配置保存格式参数,以使用结构体或数组格式记录数据。

    • 将将二维信号另存为参数指定为二维数组(沿第一个维度串联)

  • 当您要使用 From Workspace 模块加载记录的数据时,请考虑使用时间序列或带时间的结构体格式。当使用数组格式记录数据时,您需要在加载数据之前将采样时间值合并到数组中。

编程用法

要以编程方式设置模块参数值,请使用 set_param 函数。

参数: SaveFormat
值: "Timeseries" (默认) | "Structure with Time" | "Structure" | "Array"
数据类型: character vector | string

示例: set_param(gcb,"SaveFormat","Structure")

指定将二维输入数据记录为三维数组还是二维数组。

记录为三维数组非常适合基于采样的输入数据。采样在第三个维度上串联,这样可以轻松访问二维采样数据。

记录为二维数组非常适合基于帧的输入数据。采样在第一个维度上串联,这实际上从第一个维度删除了帧缓冲。

输入数据维度将二维信号另存为...工作区数据维度
M×N二维数组(沿第一个维度串联)

K×N 矩阵,其中 K 等于 M 乘以从仿真记录的采样数。

例如,记录 2×4 矩阵输入的十个采样会创建一个 20×4 矩阵。

三维数组(沿第一个维度串联)

M×N×K 数组,其中 K 等于从仿真记录的采样数。

例如,记录 2×4 矩阵输入的十个采样会创建一个 2×4×10 数组。

依赖关系

要启用此参数,请将保存格式设置为数组或结构体。

编程用法

要以编程方式设置模块参数值,请使用 set_param 函数。

参数: Save2DSignal
值: "3-D array (concatenate along third dimension)" (默认) | "2-D array (concatenate along first dimension)"
数据类型: character vector | string

示例: set_param(gcb,"Save2DSignal","2-D array (concatenate along first dimension)")

指定如何记录定点输入数据。

当保存格式参数指定为时间序列时,To Workspace 模块始终将定点输入数据记录为 fi (Fixed-Point Designer) 对象。要在保存格式参数未指定为时间序列时将定点数据记录为 fi 对象,请选择将定点数据记录为 fi 对象参数,并在普通或加速模式下运行仿真。

当您清除将定点数据记录为 fi 对象参数或在快速加速模式下运行仿真时,定点输入数据将记录为 double。

要将 int64 类型的输入数据记录为 int64 或将 uint64 类型的输入数据记录为 uint64,请选择将定点数据记录为 fi 对象参数。当您清除将定点数据记录为 fi 对象参数时,类型为 int64 或 uint64 的输入数据将记录为 double。

使用 To Workspace 模块记录定点数据需要 Fixed-Point Designer 许可证。

编程用法

要以编程方式设置模块参数值,请使用 set_param 函数。

参数: FixptAsFi
值: "on" (默认) | "off"
数据类型: character vector | string

示例: set_param(gcb,"FixptAtFi","off")

指定模块在仿真期间记录输入值的时间。默认情况下,采样时间为继承 (-1)。对于连续采样时间,将值指定为 0。要使用离散采样时间,请将采样时间参数指定为标量。有关详细信息,请参阅指定采样时间。

编程用法

要以编程方式设置模块参数值,请使用 set_param 函数。

参数: SampleTime
值: "-1" (默认) | scalar
数据类型: character vector | string

示例: set_param(gcb,"SampleTime","0")

模块特性

数据类型

Boolean | bus | datetime | double | enumerated | fixed point | half | integer | single | string

直接馈通

否

多维信号

是

可变大小信号

是

过零检测

否

提示

  • 您可以将使用 To Workspace 模块记录的数据转换为数据集格式。如果您使用其他记录方法,例如使用数据集格式的信号记录,转换数据可以使后处理更容易。有关详细信息,请参阅Convert timeseries Object to Dataset Object。

  • 当您调用用于仿真模型的函数时,仿真中记录的数据将返回到函数工作区。要将从通过函数进行的仿真记录的数据返回到基础工作区,请使用 assignin 函数。例如,以下名为 myfunc 的函数对模型 myModel 进行仿真,该模型包括一个 To Workspace 模块,该模块将数据记录到变量 simout 中,并将 To Workspace 模块记录的数据发送到基础工作区。

    function myfunc
        out = sim("myModel");
        toWksData = get(out,"simout");
        assignin("base","toWksData",toWksData);
    end
    

扩展功能

全部展开

PLC 代码生成
使用 Simulink® PLC Coder™ 生成结构化文本代码。

定点转换
使用 Fixed-Point Designer™ 设计和仿真定点系统。

版本历史记录

在 R2006a 之前推出

全部展开