Main Content

本页翻译不是最新的。点击此处可查看最新英文版本。

From Spreadsheet

从电子表格读取数据

  • From Spreadsheet block

库:
Simulink / Sources

描述

From Spreadsheet 模块可以从 Microsoft® Excel®(所有平台)或 CSV(仅限安装了 Microsoft Office 的 Microsoft Windows® 平台)电子表格读取数据并将数据输出为信号。From Spreadsheet 模块不支持 Microsoft Excel 电子表格图。

From Spreadsheet 图标显示在模块的文件名工作表名称参数中指定的电子表格文件名和工作表名称。

存储格式

From Spreadsheet 模块从电子表格中读取的数据必须已适当格式化。

对于 Microsoft Excel 电子表格:

  • From Spreadsheet 模块将第一行解释为信号名称。如果您不指定信号名称,From Spreadsheet 模块将使用格式 Signal # 指定默认信号名称,其中 # 随着每个未命名信号的增加而递增。

  • From Spreadsheet 模块将第一列解释为时间。在此列中,时间值必须是单调递增的。

  • From Spreadsheet 模块将其余列解释为信号。

以下示例显示了一个可接受格式的 Microsoft Excel 电子表格。第一列是 Time,第一行包含信号名称。每个工作表包含一个组。

对于 CSV 文本文件(仅限安装了 Microsoft Office 的 Microsoft 平台):

  • From Spreadsheet 模块将第一列解释为时间。在此列中,时间值必须是递增的。

  • From Spreadsheet 模块将其余列解释为信号。

  • 每个列必须具有相同的条目数。

  • From Spreadsheet 模块将每个文件解释为一个信号组。

以下示例显示了一个可接受格式的 CSV 文件。内容表示一个信号组。

0,0,0,5,0
1,0,1,5,0
2,0,1,5,0
3,0,1,5,0
4,5,1,5,0
5,5,1,5,0
6,5,1,5,0
7,0,1,5,0
8,0,1,5,1
9,0,1,5,1
10,0,1,5,0

From Spreadsheet 模块不接受非有限数据的信号值,例如 NanInf-Inf

仿真过程中的模块行为

From Spreadsheet 模块在仿真期间以增量方式从电子表格中读取数据。

采样时间参数指定 From Spreadsheet 模块用来从电子表格中读取数据的采样时间。有关详细信息,请参阅参数。文件中的时间戳必须单调非递减。

对于电子表格中不包含任何匹配时间戳的每个仿真时间点,Simulink® 软件都会使用所选方法进行内插或外插以获得所需数据。有关详细信息,请参阅没有对应电子表格时间戳的仿真时间点

没有对应电子表格时间戳的仿真时间点

如果仿真时间点没有对应的电子表格时间戳,则 From Spreadsheet 模块输出将取决于:

  • 仿真时间点出现在第一个时间戳之前、时间戳范围内还是最后一个时间戳之后

  • 您选择的内插或外插方法

  • 电子表格数据的数据类型

有关内插和外插选项的详细信息,请参阅下列参数描述:

有时,电子表格包含两个或多个具有相同时间戳的数据值。在这种情况下,From Spreadsheet 模块的操作取决于仿真时间点的出现时间(相对于电子表格中的重复时间戳)。

例如,假设电子表格包含以下数据。三个数据值的时间戳值为 2

time stamps:    0 1 2 2 2 3 4
data values:    2 3 6 4 9 1 5

下表列出了 From Spreadsheet 模块输出。

仿真时间(相对电子表格中的重复时间戳值)From Spreadsheet 模块操作
在重复时间戳之前

执行与时间戳不同时相同的操作,使用第一个重复时间戳值作为插值的基础。(在此示例中,该时间戳值为 6。)

在重复时间戳当时或之后

执行与时间戳不同时相同的操作,使用最后一个重复时间戳值作为插值的基础。(在此示例中,该时间戳值为 9。)

COM 的读取问题

默认情况下,From Spreadsheet 模块使用 Windows 平台上的组件对象模型 (COM) 接口和其他平台上的 LibXL 库读取电子表格。如果 From Spreadsheet 模块在读取 Windows 上的电子表格时遇到问题,请使用 set_param 函数将 'ReaderLibrary' 设置为 'LibXL'。例如:

set_param(blockPath,‘ReaderLibrary’,‘LibXL’);

其中 blockPath 是模型模块路径。

端口

输出

全部展开

来自指定电子表格的增量数据。

采样时间参数指定 From Spreadsheet 模块用来从电子表格中读取数据的采样时间。有关详细信息,请参阅参数。文件中的时间戳必须单调非递减。

对于电子表格中不包含任何匹配时间戳的每个仿真时间点,Simulink 软件都会使用所选方法进行内插或外插以获得所需数据。有关详细信息,请参阅没有对应电子表格时间戳的仿真时间点

From Spreadsheet 模块接受在模块级指定的数据类型。如果您要为各个信号指定不同的数据类型,请考虑选择输出数据类型 > Inherit: Auto。此选项使用反向传播来解析反向信号数据类型。例如,假定 From Spreadsheet 模块中有两个信号 In1 和 In2,该模块将它们发送到具有 int8 和布尔数据类型的端口。通过反向传播,该模块将 In1 重新转换为 int8,将 In2 重新转换为布尔型。

数据类型: single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64 | Boolean | fixed point | enumerated

参数

全部展开

输入电子表格文件的完整路径和文件名,包括文件扩展名。注意:

  • 如果在完整路径中找不到该文件,模块将在当前工作文件夹中查找该文件。

  • 如果不包含文件扩展名,该模块将采用 .xlsx 作为扩展名。

只有在 Microsoft 平台上,此模块才支持非英语完整路径和文件名。

编程用法

模块参数FileName
类型:字符向量
:完整路径和文件名
默认值'untitled.xlsx'

输入电子表格中的工作表的名称。您可以在此编辑框中键入工作表名称,或者在打开工作表之后选择工作表名称。

如果您的电子表格是 CSV 格式,则模块会使用不带扩展名的 CSV 文件名称填充此参数。不要更改此值。

要打开工作表,请点击 。在工作表中,您可以通过在所需的值范围上拖动来选择数据范围。

或者,您可以通过在范围参数中指定值范围来选择数据范围。

编程用法

模块参数SheetName
类型:字符向量
:工作表名称
默认值'Sheet1'

要指定范围,请使用格式 column:row,其中用逗号分隔多个指定值。例如,A1:B3,D1:D3,A7:B9,D7:D9。如果未指定或为空,模块将自动检测使用的范围,即工作表中的所有数据。

如果所选范围重叠,模块将视情况解析所选范围信息。例如,如果您指定多个有重叠的范围(如 A1:B4,B1:E7),模块会将所选范围解析为 A1 至 E7(包括 A1 和 E7)。

所选内容/历史记录包含此会话期间所选范围的列表。在您关闭范围选择后,该模块不存储范围。

使用范围参数的替代方法是通过点击 打开工作表。在工作表中,您可以通过在所需的值范围上拖动来选择数据范围。范围选择反映在范围参数文本框中。

要应用来自模块对话框的新范围,请点击应用

编程用法

模块参数Range
类型:字符向量
:工作表中所用单元格的完整范围 | 以逗号分隔的 column:row 列表
默认值''

From Spreadsheet 模块输出的数据类型。From Spreadsheet 模块接受包含多种数据类型的电子表格。但是,该模块将电子表格数据类型作为双精度读取。它随后根据输出数据类型的值输出数据类型。

如果您要为各个信号指定不同的数据类型,请考虑选择输出数据类型 > Inherit: auto。此选项使用反向传播来解析反向信号数据类型。例如,假定 From Spreadsheet 模块中有两个信号 In1 和 In2,该模块将它们发送到具有 int8 和布尔数据类型的端口。通过反向传播,该模块将 In1 重新转换为 int8,将 In2 重新转换为布尔型。

要允许该模块转换输出数据类型以匹配接收模块的数据类型,请使用 Inherit: auto

有关详细信息,请参阅控制信号的数据类型

编程用法

模块参数OutDataTypeStr
类型:字符向量
'Inherit: auto' | 'double' | 'single' | 'int8' | 'uint8' | 'int16' | 'uint16' | 'int32' | 'uint32' | 'int64' | 'uint64' | 'boolean' | 'fixdt(1,16,0)' | 'fixdt(1,16,2^0,0)' | 'Enum: <class name>' | '<data type expression>'
默认值'Inherit: auto'

选择模块应该如何处理电子表格的第一列:

  • 时间 - 将第一列视为时间。

  • 数据 - 将第一列视为数据。

依存关系

当您选择数据时,该模块禁用:

  • 第一个数据点之前的数据外插

  • 时间范围内的数据插值

  • 末尾数据点后的数据外插

并且启用:

  • 最后一个数据点后的输出

编程用法

模块参数TreatFirstColumnAs
类型:字符向量
'Time' | 'Data'
默认值'Time'

采样周期和偏移量。

From Spreadsheet 模块使用以下任一采样时间从电子表格中读取数据:

  • 您为 From Spreadsheet 模块指定的采样时间

  • From Spreadsheet 模块从目标模块(即 From Spreadsheet 模块将数据馈送到的模块)继承的采样时间

默认值为 0,指定的是连续采样时间。以模型的基础(最快)速率读取电子表格。有关详细信息,请参阅指定采样时间

编程用法

参数:SampleTime
类型:字符向量
值:标量 | 向量
默认值:'0'

Simulink 针对电子表格中第一个时间戳之前的仿真时间点使用的外插法。选择下列外插方法之一。

方法描述
线性外插

(默认值)

如果电子表格只包含一个样本,则 From Spreadsheet 模块输出相应的数据值。

如果电子表格包含多个样本,则 From Spreadsheet 模块使用前两个样本进行线性外插:

  • 对于 double 数据,使用前两个样本对值进行线性外插

  • 对于 Boolean 数据,输出第一个数据值

  • 对于除 doubleBoolean 之外的内置数据类型:

    • 将数据向上转换为 double

    • 执行线性外插(如上针对 double 数据所述)

    • 将外插的数据值向下转换为原始数据类型

不能将线性外插选项与枚举 (enum) 数据结合使用。

保持第一个值

使用文件中的第一个数据值

接地值

使用的值取决于电子表格样本数据值的数据类型:

  • 定点数据类型 - 使用接地值

  • 除定点之外的数值类型 - 使用 0

  • Boolean - 使用 false

  • 枚举数据类型 - 使用默认值

依存关系

要启用此参数,请将将第一列视为设置为时间

编程用法

参数:ExtrapolationBeforeFirstDataPoint
类型:字符向量
值:'Linear extrapolation' | 'Hold first value' | 'Ground value'
默认值:'Linear extrapolation'

Simulink 针对电子表格中的两个时间戳之间的仿真时间点使用的插值法。选择以下插值法之一。

方法描述
线性插值

(默认值)

From Spreadsheet 模块使用两个对应的电子表格样本进行插值:

  • 对于 double 数据,使用两个对应样本进行线性插值

  • 对于布尔数据,如果仿真时间在两个具有不同值的电子表格数据点之间,则 From Spreadsheet 模块会将值转换定位在这两个电子表格数据点的中间。例如,如果电子表格数据从 true 转换为 false,则在电子表格数据点转换间隔的前一半仿真时间中,From Spreadsheet 数据的输出值为 true。间隔的后半段仿真时间的输出值为 false。

  • 对于除 doubleBoolean 之外的内置数据类型:

    • 将数据向上转换为 double

    • 执行线性内插(如上针对 double 数据所述)

    • 将插入的值向下转换为原始数据类型

不能将线性插值选项与枚举 (enum) 数据结合使用。

零阶保持

使用两个样本中第一个样本的数据

依存关系

要启用此参数,请将将第一列视为设置为时间

编程用法

参数:InterpolationWithinTimeRange
类型:字符向量
值:'Linear interpolation' | 'Zero order hold'
默认值:'Linear interpolation'

Simulink 针对电子表格中最后一个时间戳之后的仿真时间点使用的外插法。选择以下外插方法之一。

方法描述
线性外插

(默认值)

如果电子表格只包含一个样本,则 From Spreadsheet 模块输出相应的数据值。

如果电子表格包含多个样本,则 From Spreadsheet 模块使用最后两个样本的数据值进行线性外插:

  • 对于 double 数据,使用最后两个样本对值进行外插。

  • 对于 Boolean 数据,输出最后一个数据值

  • 对于除 doubleBoolean 之外的内置数据类型:

    • 将数据向上转换为 double

    • 执行线性外插(如上针对 double 数据所述)。

    • 将外插的值向下转换为原始数据类型。

不能将线性外插选项与枚举 (enum) 数据结合使用。

保留最后一个值

使用文件中的最后一个数据值

接地值

使用的值取决于电子表格样本数据值的数据类型:

  • 定点数据类型 - 使用接地值

  • 除定点之外的数值类型 - 使用 0

  • Boolean - 使用 false

  • 枚举数据类型 - 使用默认值

依存关系

要启用此参数,请将将第一列视为设置为时间

编程用法

参数:ExtrapolationAfterLastDataPoint
类型:字符向量
值:'Linear extrapolation' | 'Hold last value' | 'Ground value'
默认值:'Linear extrapolation'

选择在读完最后一个数据点后的操作:

  • 重复序列 - 从范围所指定范围的第一行开始,重复读取数据序列

  • 保留最终值 - 在仿真的剩余时间段输出最后定义的值。

  • 接地值 - 根据在输出数据类型中指定的数据类型值输出接地值。

依存关系

要启用此参数,请将将第一列视为设置为数据

编程用法

参数:OutputAfterLastPoint
类型:字符向量
值:'Repeating sequence' | 'Hold final value' | 'Ground value'
默认值:'Repeating sequence'

选择此项以启用过零检测。

仅当采样时间参数设置为 0(连续)时,过零检测 参数才适用。

此模块仅在使用变步长求解器的仿真中支持过零检测。当使用定步长求解器进行仿真时,软件不会检测或定位此模块的过零点。

Simulink 使用一种称为过零检测的技术来准确定位不连续性,无需借助于过小的时间步。在这种情况下,过零用于表示不连续性。

对于 From Spreadsheet 模块,过零检测只能在文件中时间戳所标记的时间点进行。Simulink 仅检查时间戳,不检查数据值。

如果输入数组包含重复的时间戳(多个条目具有相同的时间戳),Simulink 将在该时间戳处进行过零检测。例如,假设输入数组具有以下数据。

time:     0 1 2 2 3
signal:   2 3 4 5 6

在时间 2 处,存在由于输入信号不连续而产生的一个过零点。

对于没有重复时间戳的数据,过零检测取决于以下参数的设置:

  • 第一个数据点之前的数据外插

  • 时间范围内的数据插值

  • 末尾数据点后的数据外插

当模块确定在以下时间发生过零时,应用下面的规则:

  • 第一个时间戳上发生过零

  • 第一个和最后一个时间戳之间的时间戳上发生过零。

  • 最后一个时间戳上发生过零

时间戳发生过零检测时

第一个

第一个数据点之前的数据外插设置为接地值

第一个和最后一个之间

时间范围内的数据插值设置为零阶保持

最后一个

满足以下一项或两项设置:

  • 末尾数据点后的数据外插设置为接地值

  • 时间范围内的数据插值设置为零阶保持

该图显示了当 From Spreadsheet 模块具有以下设置时针对其所访问数据的过零检测:

  • 第一个数据点之前的数据外插 - 线性外插

  • 时间范围内的数据插值(用于内部点)- 零阶保持

  • 末尾数据点后的数据外插 - 线性外插

该图说明对由 From Spreadsheet 模块访问的数据的过零检测。该模块具有以下时间戳(点)设置:

  • 第一个数据点之前的数据外插 - 保持第一个值

  • 时间范围内的数据插值 - 零阶保持

  • 末尾数据点后的数据外插 - 保留最后一个值

编程用法

模块参数ZeroCross
类型:字符向量
'off' | 'on'
默认值'off'

选择要指定的数据类别。有关详细信息,请参阅控制信号的数据类型

  • 继承

    数据类型的继承规则。选择 inherit 将在右侧启用另一个菜单/文本框。

  • 内置

    内置的数据类型。选择内置将在右侧启用另一个菜单/文本框。选择以下选项之一:

    • double - 默认值

    • single

    • int8

    • uint8

    • int16

    • uint16

    • int32

    • uint32

    • int64

    • uint64

    • boolean

  • 定点 - 定点数据类型。

  • 枚举 - 枚举数据类型。选择枚举将启用右侧的另一个菜单/文本框,您可以在其中输入类名称。

  • 表达式 - 计算结果为数据类型的表达式。选择表达式将在右侧启用另一个菜单/文本框,您可以在其中输入表达式。

为此信号选择数据类型覆盖模式。

  • 当您选择 inherit 时,Simulink 从信号的上下文(即:从 Simulink 中使用该信号的模块、Simulink.Signal 对象或 Stateflow® 图)中继承数据类型覆盖设置。

  • 当您选择 off 时,Simulink 忽略信号上下文的数据类型覆盖设置,并使用为信号指定的定点数据类型。

有关详细信息,请参阅 Simulink 文档中的使用数据类型助手指定数据类型

依存关系

要启用此参数,请将模式设置为内置定点

提示

由于能够关闭单个数据类型的数据类型覆盖,您可以在应用数据类型覆盖时更好地控制模型中的数据类型。例如,您可以使用此选项确保数据类型满足下游模块的要求,而忽略数据类型覆盖设置。

指定定点数据是有符号还是无符号。有符号数据可以表示正值和负值,无符号数据只表示正值。

  • 有符号,将定点数据指定为有符号数据。

  • 无符号,将定点数据指定为无符号数据。

有关详细信息,请参阅使用数据类型助手指定数据类型

依存关系

要启用此参数,请将模式设置为 Fixed point

指定定点数据的定标方法,以避免发生溢出情况并最大限度地减少量化错误。有关详细信息,请参阅指定定点数据类型

依存关系

要启用此参数,请将模式设置为定点

定标设置为二进制小数点可启用:

  • 小数长度

  • 计算最佳精度定标

定标设置为斜率和偏置可启用:

  • 斜率

  • 偏置

  • 计算最佳精度定标

指定存储量化整数的字的位大小。有关详细信息,请参阅指定定点数据类型

依存关系

要启用此参数,请将模式设置为定点

将定点数据类型的小数长度指定为正整数或负整数。有关详细信息,请参阅指定定点数据类型

依存关系

要启用此参数,请将定标设置为二进制小数点

指定定点数据类型的斜率。有关详细信息,请参阅指定定点数据类型

依存关系

要启用此参数,请将定标设置为斜率和偏置

将定点数据类型的偏置指定为任意实数。有关详细信息,请参阅指定定点数据类型

依存关系

要启用此参数,请将定标设置为斜率和偏置

模块特性

数据类型

Boolean | double | enumerated | fixed pointa | integer | single

直接馈通

多维信号

可变大小信号

过零检测

a 最高支持 32 位定点数据类型。

算法

全部展开

From Spreadsheet 模块从电子表格中读取数据时,它会以双精度读取所有信号,然后将其转换为输出信号的输出数据类型参数中指定的数据类型。在转换过程中,模块对整数溢出使用舍入模式及饱和处理,如下所示。

扩展功能

版本历史记录

在 R2015b 中推出

全部展开