Engee 文档
Notebook

回调

在本演示中,我们将展示根据模型内部执行的条件从模型中调用函数的可能性。

模型本身是一个记录的正弦曲线。当建模过程中可能包含回调时,工作方案如下图所示。

本演示将是一组测试,可按条件分为 4 组:

  1. 以打开模型为条件的函数、
  2. 以执行模型为条件的函数、
  3. 保存模型条件下的函数、
  4. 关闭模型条件下的函数。

image_2.png

要打开回调窗口,请打开 "模型设置"->"编辑源代码"。

要触发下面描述的测试,需要运行 model_callback.engee

第一个测试是打开模型时触发回调。

image_3.png

image.png

In [ ]:
PreL = 0
PostL = 0
Init = 0
Start = 0
Pause = 0
Continue = 0
Stop = 0
PreS = 0
PostS = 0
Close = 0
Out[0]:
0

我们可以看到,有两个变量在打开时被初始化:

  1. 模型打开前、
  2. 模型打开后。
In [ ]:
print("PreLoad: " * string(PreL) * " / PostLoad: " * string(PostL) *
" / PreSave: " * string(PreS) * " / PostSave: " * string(PostS) *
" / Close: " * string(Close))
PreLoad: 1 / PostLoad: 1 / PreSave: 0 / PostSave: 0 / Close: 0

第二个测试在保存模型时进行。 image.png

image_2.png

image_3.png

与上一个实施方案类似,提供了两个功能,分别在保存前和保存后设置条件。

In [ ]:
print("PreLoad: " * string(PreL) * " / PostLoad: " * string(PostL) *
" / PreSave: " * string(PreS) * " / PostSave: " * string(PostS) *
" / Close: " * string(Close))
PreLoad: 1 / PostLoad: 1 / PreSave: 1 / PostSave: 1 / Close: 0

第三个测试是关闭模型。

image_2.png

从中我们可以看出,如果模型关闭,触发的就是这个函数。

In [ ]:
print("Close: " * string(Close))
Close: 1

最后一组回调是建模过程中的操作函数。如下图所示,共有 5 个。

image_2.png

现在让我们考虑一下调用每个函数时的情况。正如您所看到的,在打开模型之前的阶段,我们对所有变量进行了初始化,之后我们将根据情况对其进行更改。

1.初始化函数在模型编译阶段后调用。 2.在模拟的第一步执行启动函数。 3.如果模拟过程中出现暂停,则调用暂停函数。 4.在模拟的所有步骤中执行函数。 5.停止建模过程的函数。

因此,如果我们运行模型并在模拟过程中至少暂停一次,上述所有函数都将被执行。从下图中我们可以看到,在工作区运行测试后,所有变量都等于 1

image.png

结论

在本演示中,我们介绍了如何使用回调。该工具旨在实现建模过程自动化,以及保存和分析建模结果。在回调的帮助下,我们可以完全摆脱脚本,完全用模型来实现整个项目,从参数声明阶段到结果分析阶段。

示例中使用的块