Engee 文档
Notebook

型号参考

在本演示中,我们将使用一个简单的示例来说明如何在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]:

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

结论

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

示例中使用的块