# From Workspace Block
通过组件从 Syslab 工作区加载数据。
# 说明
From Workspace Block 从 Syslab 工作区中读取数据,并在其输出端将数据输出。
From Workspace Block 共分为 4 种,分别为
- FromWorkspace_Scale:从 Syslab 工作区中获取标量数据
- FromWorkspace_Vector:从 Syslab 工作区中获取一维数组
- FromWorkspace_Matrix:从 Syslab 工作区中获取二维数组
- FromWorkspace_3D_Array:从 Syslab 工作区中获取三维数组
# 端口
# 输出
outputs标量 | 向量 | 矩阵
从 Syslab 工作区中读取的数据。
接口类型:RealOutput
# 参数
varName - Syslab工作区变量名String
需要读取的 Syslab 工作区中的变量名
默认值:"x"
interpreted - 实时更新Boolean
如果为true,则实时读取 Syslab 工作区数据;如果为false,则在仿真开始时读取一次。
默认值:false
row_dims - 变量行数Integer
只针对 FromWorkspace_Vector、FromWorkspace_Matrix模型有效。
此参数表示所获取数据的行数,参数示例 SyslabWorkspace.Examples.Demo_FromWorkspace。
默认值:1
col_dims - 变量列数Integer
只针对 FromWorkspace_Matrix 模型有效。
此参数表示所获取数据的列数,参见示例 SyslabWorkspace.Examples.Demo_FromWorkspace。
默认值:1
dims - 变量维度大小Integer
只针对 FromWorkspace_3D_Array 模型有效,为长度为 3 的一维数组。
此参数表示所需获取数据的维度大小,参见示例 SyslabWorkspace.Test.Test_ToWorkspace_3d。
默认值:{2, 2, 2}
# 获取 Syslab 工作区数据
通过 From Workspace Block 获取 Syslab 工作区中的数据,需要执行下列操作:
- 启动 Syslab,启动 REPL,并确保工作区中有变量。
- 在 Syslab 中启动 Sysplorer,并加载
SyslabWorkspace模型库。 - 在 Sysplorer 中,选取 From Workspace Block 组件并添加到模型。
- 对 From Workspace Block 组件设置参数,包括:
varName:Syslab 工作区中的变量名,支持分量表达式,如"f"、"multiarry[1:2,:]";interpreted:仿真过程中是否实时读取数据;row_dims、col_dims、dims:所需获取数据的维度参数(若有)。
- 模型构建完成后,就可以开始仿真。
注意
- 目前只支持 x64 的仿真求解;
- 如果无法在 Syslab 工作区内找到对应的变量,则仿真会报错;
- 如果出现数据类型错误或数据长度错误,From Workspace Block 组件会输出 0。
# 实时刷新
参数 interpreted 用于控制是否实时读取工作区数据。
无论 Sysplorer 模型采用何种仿真模式(独立仿真、实时同步仿真),实时刷新会在工作区变量刷新之后即时生效。
一般而言,如果需要实时刷新 From Workspace Block 组件的输出值,推荐采用实时同步仿真模式。
# 多维数组
From Workspace Block 支持获取多维数组,模型库中提供了获取三维数组的模型FromWorkspace_3D_Array,可以在此模型基础上稍作修改即可实现更高维数组的获取。
例如,假设需要一个获取 5 维数组的模型。
首先,复制模型 FromWorkspace_3D_Array 为 FromWorkspace_5D_Array,作为修改的基础。
其次,使用文本视图编辑该模型,一共需要修改三处:
- 在模型第 7 行,声明了
dims参数,此参数定义了变量的维度大小,将参数声明更改为:
parameter Integer dims[5] = {2, 2, 2, 2, 2};
- 在模型的第 8 行,声明了模型的输出,将声明更改为:
Modelica.Blocks.Interfaces.RealOutput output[dims[1], dims[2], dims[3], dims[4], dims[5]];
- 在模型的第 20 行,声明了获取工作区变量的函数返回值,将声明更改为:
output Real outputs[dims[1], dims[2], dims[3], dims[4], dims[5]];
上述修改完毕后,就可以得到一个从 Syslab 工作区读取 5 维数组的 From Workspace Block 组件。
# 性能基线
From Workspace Block 从 Syslab 中获取数据时,建议数组的长度不要超过 10000。
| 数组长度值 | 单个 Block 翻译+仿真耗时 |
|---|---|
| 1000 | 5 秒 |
| 2000 | 7 秒 |
| 5000 | 17 秒 |
| 10000 | 33 秒 |
# 模型示例
从 Syslab 工作区获取数据:
SyslabWorkspace.Examples.Demo_FromWorkspace耦合离合器:
SyslabWorkspace.Examples.Demo_CoupledClutches