在Engee功能块内使用MATLAB
在本例中,我们将介绍如何在Engee功能块内应用MATLAB中的代码插入。 为此,我们使用持久变量,这允许我们扩展MATLAB代码的功能,并在退出函数后将值存储在它们自己中。
对于这个演示,我们在MATLAB中编写了一个计数器函数,如果输入值为1,则重置该函数。
功能代码如下所示。
接下来,我们将测试此函数的操作。 为此,请连接MATLAB并转到具有函数的文件夹。
In [ ]:
using MATLAB
mat"cd $(@__DIR__)"
In [ ]:
mat"cnt(0)"
mat"cnt(0)"
mat"cnt(0)"
Out[0]:
In [ ]:
mat"cnt(1)"
Out[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]:
下图显示了我们开发的模型。
现在我们来分析一下Engee功能块中呈现的代码。
因此,操作顺序是:连接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
因此,我们的函数可以正常工作:在我们设置"rst=1"的那些运行中,计数器为零。
结论
我们想出了如何在Engee函数块中使用MATLAB代码插入,并且还演示了将MATLAB文件连接到Engee函数的能力。 正如您所看到的,这些功能易于使用,并且它们可以正常工作。