# 使用 FromFile 模块加载数据
# 引言
本示例演示了如何使用 Sysblock 系统创建 FromFile 模块,实现从 CSV 文件加载仿真输入数据的功能。通过集成 Julia 脚本和 FromFile 模块,实现多种数据格式的加载算法,包括时间序列数据、数组数据和总线数据。该模块可以对输入信号进行数据预处理,有效支持复杂仿真场景,广泛应用于信号处理、数据分析和系统仿真等领域。
# 软件环境配置
本次仿真因为需要 FromFile 模块,所以需要从 Syslab 中打开 Sysplorer。
提示
若出现“MWORKS.Sysplorer 可执行文件路径不存在”,则需要重新设置 Sysplorer 的文件路径,单击 Syslab主页 > 首选项 > MWORKS.Sysplorer 可执行文件路径 > 浏览…。

找到本地安装 Sysplorer 2025b 文件夹的位置,单击打开,找到 MWORKS.Sysplorer 2025b(x64)。由于安装位置和版本的不同,文件后缀可能不同。完成设置后重新从 Syslab 中打开 Sysplorer 即可。

# 检查模型
单击右侧打开示例按钮,在 Sysplorer 中打开文件。
在 Sysblock 中单击用户模型找到 Demo_FromFile 的示例,双击打开。
# 仿真设置
在进行仿真之前需要进行仿真设置,在软件上方功能区,单击主页 > 仿真设置按钮,打开仿真设置界面。在该界面设置开始时间 0,终止时间 10,输出区间步长 0.01。积分算法的类型设置为定步长,算法为 Euler (Runge-Kutta,1 阶,非刚性),容差 0.0001,初始积分步长 1,单击确定并保存到模型。
# 创建时间和信号数据
FromFile 模块支持加载存储在 timeseries 对象中的数据和存储在数组中的数据。在使用 FromFile 模块加载的数据中,每个采样值必须有一个与其对应的时间值。此示例创建并加载时长为 10 秒的表示正弦波的数据。首先,创建一个时间向量。在使用 FromFile 模块加载数据时,时间值的数据类型必须为 double,并且时间值必须单调递增。
sampleTime = 0.01
numSteps = 1001
time = sampleTime .* (0:numSteps-1)
使用此示例中的表达式为输入信号创建一个等间距时间向量,尤其是在对离散输入信号建模时。Syslab 支持另外几种创建等间距时间向量的方法,但这些方法可能会在时间数据中引入双精度舍入误差,从而导致意外的仿真结果。现在,使用 sin 函数创建信号数据。使用 From File 模块加载的采样值不能包含 NaN、Inf 或 -Inf 值。
data = sin.(2π/3 .* time)
# 加载 timeseries 数据
Sysblock 加载和记录通常都使用 timeseries 对象将时间序列数据传入和传出仿真。当您将 csv 文件中的数据保存为 timeseries 对象时,FromFile 模块支持加载各种输入数据。您加载的信号值可以是:half、int64 和 uint64 以外的内置数值数据类型;最长 32 位字长的定点数据类型;或者枚举数据类型。实数或复数。标量、向量或多维。
创建时间和信号数据为行向量。根据创建具有标量数据值的 timeseries 对象的需要,将行向量转置为列向量。创建一个用于包含数据的 timeseries 对象。
回到 Syslab,单击新建 Julia 脚本,输入下面代码,再单击运行并且等待运行结束,可在终端看到运行生成的 CSV 文件的保存地址。
using CSV, DataFrames
current_dir = @__DIR__
file_path = joinpath(current_dir, "inputData.csv")
sampleTime = 0.01
numSteps = 1001
time = sampleTime .* (0:(numSteps-1))
data = sin.(2π/3 .* time)
df = DataFrame(Time = time, Data = data)
# 保存为 CSV 文件
CSV.write(file_path, df)
println("文件已保存到: ", file_path)
# 验证文件是否创建成功
if isfile(file_path)
println("✓ inputData.csv 已成功创建在与代码相同的文件夹中")
else
println("✗ 文件创建失败")
end
# 加载数组数据
您可以使用 FromFile 模块加载格式化为数组的标量或向量信号数据,其中第一行包含时间数据,后续行包含采样值。当使用 FromFile 模块加载数组数据时,采样值必须为实数且类型为 double。代码创建时间和信号数据,将行向量串联为一个数组,并将该数组保存到 CSV 文件中。
单击起始页 > 新建 Julia 脚本,输入下面代码,再单击运行并且等待运行结束,可在终端看到运行生成的 CSV 文件的保存地址。
using CSV, DataFrames
current_dir = @__DIR__
file_path = joinpath(current_dir, "inputData.csv")
sampleTime = 0.01
numSteps = 1001
time = sampleTime .* (0:(numSteps-1))
data = sin.(2π/3 .* time)
inputData = vcat(time', data')
df = DataFrame(inputData', :auto)
CSV.write(file_path, df)
println("文件已保存到: ", file_path)
# 验证文件是否创建成功
if isfile(file_path)
println("✓ inputData.csv 已成功创建在与代码相同的文件夹中")
else
println("✗ 文件创建失败")
end
提示
加载 timeseries 数据和加载数组数据的代码运行后,生成文件名是相同的,会互相覆盖。
# 加载总线数据
FromFile 模块支持加载包含 timeseries 对象作为总线输入数据的结构体。结构体中的每个 timeseries 对象都可以包含从单个 timeseries 对象加载数据时支持的任何类型的数据。
单击起始页 > 新建 Julia 脚本,输入下面代码,再单击运行并且等待运行结束,可在终端看到运行生成的 CSV 文件的保存地址。
using CSV, DataFrames
using Dates
current_dir = @__DIR__
file_path = joinpath(current_dir, "busData.csv")
sampleTime = 0.01
numSteps = 1001
time = sampleTime .* (0:(numSteps-1))
time = time'
data = sin.(2π/3 .* time)
cosdata = cos.(2π/3 .* time)
ampdata = 2 .* data
busData = Dict(
"Cosine" => cosdata,
"SineBus" => Dict(
"Sine" => data,
"BigSine" => ampdata
)
)
df = DataFrame(
Time = vec(time),
Cosine = vec(cosdata),
SineBus_Sine = vec(data),
SineBus_BigSine = vec(ampdata)
)
# 保存为 CSV 文件
CSV.write(file_path, df)
println("文件已保存到: ", file_path)
# 验证文件是否创建成功
if isfile(file_path)
println("✓ busData.csv 已成功创建在与代码相同的文件夹中")
else
println("✗ 文件创建失败")
end
# 模型参数设置
在 Syslab 中找到 Untitled-1.jl 代码生成的 CSV 文件路径,回到 Sysplorer ,双击打开 fromFile 模块,单击文件名右边按键,根据代码生成的文件地址路径,找到 inputData.csv 文件。单击选中后单击打开,最后单击确定保存设置,这样 CSV 文件的数据就导入到 fromFile 模块中了。

在 Syslab 中找到 Untitled-3.jl 代码生成的 CSV 文件路径,回到 Sysplorer,双击打开 fromFile1 模块,将维度设置为 [3],单击文件名右边按键,根据代码生成的文件地址路径,找到 inputData.csv 文件。单击选中后单击打开,最后单击确定保存设置。

# 仿真运行
单击主页 > 仿真,等待仿真运行结束。分别双击 2 个 scope 示波器查看仿真运行结果。
