Engee 文档
Notebook

在 Engee 功能块内使用 MATLAB

在本示例中,我们将了解如何在 Engee 功能块中使用 MATLAB 代码插入。为此,我们将使用持久变量,它允许我们扩展 MATLAB 代码的功能,即使在退出函数后也能将值存储在自身中。 在本演示中,我们在 MATLAB 中编写了一个计数器函数,如果输入值为 1,该函数将被重置。 函数代码如下。

image.png

接下来,让我们测试一下该函数的工作情况。为此,请连接 MATLAB 并转到包含函数的文件夹。

In [ ]:
using MATLAB
mat"cd $(@__DIR__)"
In [ ]:
mat"cnt(0)"
mat"cnt(0)"
mat"cnt(0)"
Out[0]:
3.0
In [ ]:
mat"cnt(1)"
Out[0]:
0.0

我们可以看到,每次调用该函数都能正常工作。参数 rst=0 时,计数器递增;参数 rst=1 时,计数器重置。

现在我们已经测试了函数本身,让我们添加一个辅助函数来运行模型,并创建一个应用该计数器的模型。

In [ ]:
# Подключение вспомогательной функции запуска модели.
function run_model( name_model)
    
    Path = (@__DIR__) * "/" * 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
    sleep(5)
    return model_output
end
Out[0]:
run_model (generic function with 1 method)

下图显示了我们开发的模型。

image.png

现在我们来分析 Engee 功能块中的代码。

image_2.png

其操作顺序是:连接 MATLAB 库,然后明确指定计数器文件的路径并调用它,将结果输入代码块输出。

现在让我们描述一下调用模型的循环。其中,计数器将在模型第一次和第三次运行时重置。

In [ ]:
rst = 0;
for i in 1:1:5
    if i == 1 || i == 3
        rst = 1;
    else
        rst = 0;
    end
    run_model("MATLAB_in_Engee_models") # Запуск модели.
    c = collect(Cnt)
    print("Значение счётчика на "*string(i)*" запуске модели: "*string(c.value))
end
Building...
Progress 0%
Progress 100%
Progress 100%
Значение счётчка на 1 запуске модели: [0.0]Building...
Progress 0%
Progress 100%
Progress 100%
Значение счётчка на 2 запуске модели: [1.0]Building...
Progress 0%
Progress 100%
Progress 100%
Значение счётчка на 3 запуске модели: [0.0]Building...
Progress 0%
Progress 100%
Progress 100%
Значение счётчка на 4 запуске модели: [1.0]Building...
Progress 0%
Progress 100%
Progress 100%
Значение счётчка на 5 запуске модели: [2.0]

这样,我们的函数就可以正常工作了:在这些运行中,当我们设置 "rst=1 "时,计数器等于零。

输出

我们已经演示了如何在 Engee 功能块中使用 MATLAB 代码插入,还演示了将 MATLAB 文件连接到 Engee 功能的可能性。正如您所看到的,这些函数易于使用且运行正常。