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

结论

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

示例中使用的块