Main Content

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

From Spreadsheet

从电子表格读取数据

  • 库:
  • Simulink / Sources

  • From Spreadsheet block

说明

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

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

存储格式

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 模块在仿真期间以增量方式从电子表格中读取数据。

Sample time 参数指定 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。)

端口

输出

全部展开

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

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

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

From Spreadsheet 模块接受在模块级指定的数据类型。如果您要为各个信号指定不同的数据类型,请考虑选择 Output Data Type > 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 文件名称填充此参数。不要更改此值。

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

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

编程用法

模块参数SheetName
类型:字符向量
:Sheet name
默认值'Sheet1'

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

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

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

编程用法

模块参数Range
类型:字符向量
:单元格范围
默认值''

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

如果您要为各个信号指定不同的数据类型,请考虑选择 Output Data Type > 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'

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

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

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

依存关系

当您选择 “Data” 时,该模块禁用:

  • Data extrapolation before first data point

  • Data interpolation within time range

  • Data extrapolation after last data point

并且启用:

  • Output after last data point

编程用法

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

采样期间和偏移量。

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

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

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

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

编程用法

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

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

方法说明
Linear extrapolation

(默认值)

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

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

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

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

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

    • 将数据向上转换为 double

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

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

不能将 “Linear extrapolation” 选项与枚举 (enum) 数据结合使用。

Hold first value

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

Ground value

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

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

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

  • Boolean - 使用 false

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

依存关系

要启用此参数,请将 Treat first column as 设置为 “Time”。

编程用法

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

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

方法说明
Linear interpolation

(默认值)

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

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

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

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

    • 将数据向上转换为 double

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

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

不能将 “Linear interpolation” 选项与枚举 (enum) 数据结合使用。

Zero order hold

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

依存关系

要启用此参数,请将 Treat first column as 设置为 “Time”。

编程用法

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

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

方法说明
Linear extrapolation

(默认值)

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

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

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

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

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

    • 将数据向上转换为 double

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

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

不能将 “Linear extrapolation” 选项与枚举 (enum) 数据结合使用。

Hold last value

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

Ground value

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

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

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

  • Boolean - 使用 false

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

依存关系

要启用此参数,请将 Treat first column as 设置为 “Time”。

编程用法

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

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

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

  • Hold final value” - 在仿真的剩余时间段输出最后定义的值。

  • Ground value” - 根据在 Output data type 中指定的数据类型值输出接地值。

依存关系

要启用此参数,请将 Treat first column as 设置为 “Data”。

编程用法

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

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

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

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

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

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

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

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

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

  • Data extrapolation before first data point

  • Data interpolation within time range

  • Data extrapolation after last data point

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

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

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

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

时间戳发生过零检测时

第一个

Data extrapolation before first data point 设置为 “Ground value”。

第一个和最后一个之间

Data interpolation within time range 设置为 “Zero-order hold”。

最后一个

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

  • Data extrapolation after last data point 设置为 “Ground value”。

  • Data interpolation within time range 设置为 “Zero-order hold”。

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

  • Data extrapolation before first data point - “Linear extrapolation

  • Data interpolation within time range(用于内部点)- “Zero order hold

  • Data extrapolation after last data point - “Linear extrapolation

下图是针对 From Spreadsheet 模块所访问的数据的过零检测的另一种表示。该模块具有以下时间戳(点)设置:

  • Data extrapolation before first data point - “Hold first value

  • Data interpolation within time range - “Zero order hold

  • Data extrapolation after last data point - “Hold last value

编程用法

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

模块特性

数据类型

Boolean | double | enumerated | fixed point[a] | integer | single

直接馈通

多维信号

可变大小信号

过零检测

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

算法

全部展开

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

扩展功能

在 R2015b 中推出