回调¶
在本演示中,我们将展示根据模型内部执行的条件从模型中调用函数的可能性。
模型本身是一个记录的正弦曲线。当建模过程中可能包含回调时,工作方案如下图所示。
本演示将是一组测试,可按条件分为 4 组:
- 以打开模型为条件的函数、
- 以执行模型为条件的函数、
- 保存模型条件下的函数、
- 关闭模型条件下的函数。
要打开回调窗口,请打开 "模型设置"->"编辑源代码"。
要触发下面描述的测试,需要运行 model_callback.engee。
第一个测试是打开模型时触发回调。
In [ ]:
PreL = 0
PostL = 0
Init = 0
Start = 0
Pause = 0
Continue = 0
Stop = 0
PreS = 0
PostS = 0
Close = 0
Out[0]:
我们可以看到,有两个变量在打开时被初始化:
- 模型打开前、
- 模型打开后。
In [ ]:
print("PreLoad: " * string(PreL) * " / PostLoad: " * string(PostL) *
" / PreSave: " * string(PreS) * " / PostSave: " * string(PostS) *
" / Close: " * string(Close))
第二个测试在保存模型时进行。
与上一个实施方案类似,提供了两个功能,分别在保存前和保存后设置条件。
In [ ]:
print("PreLoad: " * string(PreL) * " / PostLoad: " * string(PostL) *
" / PreSave: " * string(PreS) * " / PostSave: " * string(PostS) *
" / Close: " * string(Close))
第三个测试是关闭模型。
从中我们可以看出,如果模型关闭,触发的就是这个函数。
In [ ]:
print("Close: " * string(Close))
最后一组回调是建模过程中的操作函数。如下图所示,共有 5 个。
现在让我们考虑一下调用每个函数时的情况。正如您所看到的,在打开模型之前的阶段,我们对所有变量进行了初始化,之后我们将根据情况对其进行更改。
1.初始化函数在模型编译阶段后调用。 2.在模拟的第一步执行启动函数。 3.如果模拟过程中出现暂停,则调用暂停函数。 4.在模拟的所有步骤中执行函数。 5.停止建模过程的函数。
因此,如果我们运行模型并在模拟过程中至少暂停一次,上述所有函数都将被执行。从下图中我们可以看到,在工作区运行测试后,所有变量都等于 1。
结论¶
在本演示中,我们介绍了如何使用回调。该工具旨在实现建模过程自动化,以及保存和分析建模结果。在回调的帮助下,我们可以完全摆脱脚本,完全用模型来实现整个项目,从参数声明阶段到结果分析阶段。