参考模型(Model Reference)
在本演示中,我们将使用一个简单的示例来演示如何在Engee中使用Model块。
链接模型技术本身是使用Model块到另一个模型的链接。 此类模型用于创建系统模型的层次结构。 参考模型非常适合子系统重用、单元测试、并行构建和大型系统。
为了实现我们的演示,我们需要两个模型:主模型和链接模型。
在我们的例子中,我们使用简单的元素实现了一个具有两个输入端口的计数器,这些元素确定了计数器的步长和最大值。
之后,我们可以继续开发主模型,其中我们将使用Model块引用实现的计数器。
要连接模型,请使用模型选择功能。
现在,在打开的文件管理器窗口中,选择我们已经实现的计数器的模型。
因此,我们有一个基本模型,其中一个子系统存储在一个单独的文件中。 通过这个实现,我们可以在同一个项目中多次重用这个计数器。 与此同时,通过更改参考子系统中的逻辑,我们将将这些更改应用于引用原始模型的所有块。
现在让我们运行我们的模型并分析计数器的正确性。
In [ ]:
function run_model( name_model, path_to_folder )
Path = path_to_folder * "/" * name_model * ".engee"
if name_model in [m.name for m in engee.get_all_models()] # Проверка условия загрузки модели в ядро
model = engee.open( name_model ) # Открыть модель
model_output = engee.run( model, verbose=true ); # Запустить модель
else
model = engee.load( Path, force=true ) # Загрузить модель
model_output = engee.run( model, verbose=true ); # Запустить модель
engee.close( name_model, force=true ); # Закрыть модель
end
return model_output
end
Out[0]:
In [ ]:
run_model("model", @__DIR__)
Out[0]:
我们考虑承诺的数据。
In [ ]:
Data = collect(simout["model/Model.Cnt"]);
让我们展示模拟结果。
In [ ]:
using Plots
plot(Data.time, Data.value, linetype=:steppre)
Out[0]:
从上图中我们可以看到,计数器实际上以1的增量递增,计数器的最大值为5。
您可以添加无限数量的此类计数器。 下面的示例显示了一个具有两个并行计数器的模型。
在这种情况下,当再次添加块时,有必要更新连接器以进一步处理重复子系统。
In [ ]:
run_model("model_2", @__DIR__)
Out[0]:
In [ ]:
Data_1 = collect(simout["model_2/Model.Cnt"]);
Data_2 = collect(simout["model_2/Model-1.Cnt"]);
plot(Data_1.time, Data_1.value, linetype=:steppre)
plot!(Data_2.time, Data_2.value, linetype=:steppre)
Out[0]:
正如我们所看到的,在这种情况下,两个计数器并行工作,具有不同的最大值。
结论
在这个例子中,我们分析了使用链接模型的可能性,并展示了如何将它们应用到您的项目中。 这种系统设计方法大大简化了项目的工作,并减少了在项目发生变化时编辑块所花费的时间。