Engee 文档
Notebook

参考模型(Model Reference)

在本演示中,我们将使用一个简单的示例来演示如何在Engee中使用Model块。

链接模型技术本身是使用Model块到另一个模型的链接。 此类模型用于创建系统模型的层次结构。 参考模型非常适合子系统重用、单元测试、并行构建和大型系统。

为了实现我们的演示,我们需要两个模型:主模型和链接模型。

image.png

在我们的例子中,我们使用简单的元素实现了一个具有两个输入端口的计数器,这些元素确定了计数器的步长和最大值。

image.png

之后,我们可以继续开发主模型,其中我们将使用Model块引用实现的计数器。

要连接模型,请使用模型选择功能。

image_4.png

现在,在打开的文件管理器窗口中,选择我们已经实现的计数器的模型。

image_3.png

因此,我们有一个基本模型,其中一个子系统存储在一个单独的文件中。 通过这个实现,我们可以在同一个项目中多次重用这个计数器。 与此同时,通过更改参考子系统中的逻辑,我们将将这些更改应用于引用原始模型的所有块。

image.png

现在让我们运行我们的模型并分析计数器的正确性。

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]:
run_model (generic function with 1 method)
In [ ]:
run_model("model", @__DIR__)
Building...
Progress 100%
Progress 100%
Out[0]:
Dict{String, DataFrame} with 1 entry:
  "Model.Cnt" => 11×2 DataFrame

我们考虑承诺的数据。

In [ ]:
Data = collect(simout["model/Model.Cnt"]);

让我们展示模拟结果。

In [ ]:
using Plots
plot(Data.time, Data.value, linetype=:steppre)
Out[0]:

从上图中我们可以看到,计数器实际上以1的增量递增,计数器的最大值为5。

您可以添加无限数量的此类计数器。 下面的示例显示了一个具有两个并行计数器的模型。

image_2.png

在这种情况下,当再次添加块时,有必要更新连接器以进一步处理重复子系统。

image.png
In [ ]:
run_model("model_2", @__DIR__)
Building...
Progress 100%
Progress 100%
Out[0]:
Dict{String, DataFrame} with 2 entries:
  "Model.Cnt"   => 11×2 DataFrame…
  "Model-1.Cnt" => 11×2 DataFrame
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]:

正如我们所看到的,在这种情况下,两个计数器并行工作,具有不同的最大值。

结论

在这个例子中,我们分析了使用链接模型的可能性,并展示了如何将它们应用到您的项目中。 这种系统设计方法大大简化了项目的工作,并减少了在项目发生变化时编辑块所花费的时间。

示例中使用的块