软件模型管理的应用
此示例演示模型管理工具之一-软件管理。
软件管理允许您创建,运行和保存模型,以及使用特殊命令在脚本编辑器中更改其参数。
In [ ]:
cd( @__DIR__ ) # Переместимся в каталог, где лежит текущий скрипт
homePath = string(@__DIR__)
Out[0]:
创建和保存模型
In [ ]:
# Для повторного запуска команды create
if "model" in [m.name for m in engee.get_all_models()]
engee.close("model", force=true)
end
Out[0]:
创建模型:
In [ ]:
engee.create("model")
Out[0]:
查看打开模型的名称由函数执行:
``'茱莉亚
恩吉。get_current_model()::模型
恩吉。gcm()::模型
In [ ]:
m = engee.gcm()
Out[0]:
使用函数保存模型 save():
In [ ]:
engee.save( "model", "$homePath/model.engee"; force=true )
Out[0]:
使用指定的路径保存模型。:
您可以使用该函数查看打开的模型列表 get_all_models():
In [ ]:
engee.get_all_models()
Out[0]:
加载模型并更改仿真参数
如果模型还没有在编辑器中打开,那么我们使用函数加载模型 load(). 如果它已经打开,那么您需要使用该功能 open(). 然后我们使用命令获取仿真参数 get_param():
In [ ]:
if "program_control_model" in [m.name for m in engee.get_all_models()]
m = engee.open( "program_control_model" ) # загрузка модели
else
m = engee.load( "$homePath/program_control_model.engee" ) # если модель уже открыта, выполните эту строчку
end
m_param = engee.get_param( "program_control_model" ) # получение параметров моделирования
Out[0]:
可以使用函数更改仿真参数 set_param!():
In [ ]:
engee.set_param!("program_control_model", "SolverName" => "Tsit5", "SolverType" => "variable-step") #= меняем постоянный шаг решателя
на переменный и изменяем сам решатель =#
engee.get_param("program_control_model") # выводим параметры с внесёнными изменениями
Out[0]:
In [ ]:
engee.set_param!("program_control_model", "MinStep" => "auto", "MaxStep" => "auto") #= меняем постоянный шаг решателя
на переменный и изменяем сам решатель =#
engee.get_param("program_control_model") # выводим параметры с внесёнными изменениями
Out[0]:
运行模拟
``'茱莉亚
run([m::Model];verbose=false)
开始执行模型。 如果未指定模型,则启动对当前模型的模拟。 如果模型未打开,则抛出NoModelOpenedException。
争论:
* `verbose`:是否打印进度,默认情况下 `verbose=false`.
* `m::Model`:为其执行操作的默认模型是当前模型。
例子::
``'茱莉亚
engee>m=engee。负载("开始/示例/powersystems/models/power_line_apv。engee")
恩吉>恩吉。跑(m)
带有6个条目的Dict{String,DataFrame}:
"Va"=>40001×2数据帧…
"Ia"=>40001×2数据帧…
"Ib"=>40001×2数据帧…
"Ic"=>40001×2数据帧…
"Vc"=>40001×2数据帧…
"Vb"=>40001×2数据框…
使用仿真进度输出运行模型:
In [ ]:
engee.run(m, verbose=true)
Out[0]:
查看模拟结果
使用该函数可以获得仿真结果 get_results():
``'茱莉亚
恩吉。get_results(model_name::String)
恩吉。get_results(模型::模型)
恩吉。get_结果()
以字典的形式返回模型的最后一次模拟的结果 `Dict{String, DataFrame}`,其中键是被监视端口的名称。
如果模型未打开,则引发异常。 `NoModelOpenedException`.
如果模拟未运行,则引发异常。 `ModelIsNotRunningException`.
争论:
* `m::Model`:为其执行操作的默认模型是当前模型。
例子::
``'茱莉亚
engee>m=engee。负载("开始/示例/powersystems/models/power_line_apv。engee")
engee>结果1=engee。跑(m);
engee>结果2=engee。get_结果(m)
带有6个条目的Dict{String,DataFrame}:
"Va"=>40001×2数据帧…
"Ia"=>40001×2数据帧…
"Ib"=>40001×2数据帧…
"Ic"=>40001×2数据帧…
"Vc"=>40001×2数据帧…
"Vb"=>40001×2数据框…
结果>结果1==结果2
真的
显示仿真过程中获得的结果:
In [ ]:
results = engee.get_results( "program_control_model" )
Out[0]:
将仿真结果记录到变量中,并显示包含结果的汇总表:
In [ ]:
sin1 = engee.get_results("program_control_model")["Sine Wave.1"]
sin2 = engee.get_results("program_control_model")["Sine Wave-1.1"]
sum_signal = engee.get_results("program_control_model")["Add.1"]
table = hcat(hcat(sin1, sin2[:,2], makeunique=true), sum_signal[:,2], makeunique=true) # используя сложение массивов по горизонтали (hcat()), составляем таблицу
first(table, 10) # выводим первые 10 значений получившейся таблицы
Out[0]:
我们绘制了作为模拟结果获得的值的变化。:
In [ ]:
using Plots
plot(table[:,1], table[:,2])
plot!(table[:,1], table[:,3])
plot!(table[:,1], table[:,4])
Out[0]:
结论:
在这个例子中,我们演示了使用软件模型控制从脚本运行模拟。
在执行代码的过程中,创建并保存了一个新模型,加载了完成的模型,更改了仿真参数,并且使用图形库显示了仿真结果并将其转换为方便的形式。