回调
| 请勿将本文中描述的回调函数与库回调函数混淆: DiffEqCallbacks.jl。有关如何使用它们的更多信息,请参阅 Event Handling and Callback Functions。 |
回调 回调函数会在模型中发生特定事件时自动调用。Engee 回调函数使用 Julia 编程语言创建。
要启用回调,请前往设置窗口
并点击 编辑源代码
:

所有 Engee 回调都可在打开的菜单中找到。它们默认为空,不包含任何代码:

所有 Engee 回调函数大致可以分为 4 组:
|
|
|
|
回调函数说明 回调函数
打开模型
用于自定义模型的行为打开前后。
更多关于模型打开回调的信息
使用的回调函数:PreLoadFunc(打开)和 PostLoadFunc(关闭)。
说明:
-
PreLoadFunc— 在模型加载之前执行。由于模型尚未加载,因此无法在此模型的回调函数中使用程序控制方法。 -
PostLoadFunc— 在模型加载之后执行。由于模型参数已加载,因此可以在其中使用它们。
|
模型打开条件回调函数允许您:
|
模型执行
在仿真过程中使用。
更多关于模型执行回调的信息
使用的回调函数:InitFunc(初始化)、StartFunc(启动)、PauseFunc(暂停)、ContinueFunc(执行)、StopFunc(停止)。
所有这些函数都会在模型启动时执行,并且仿真至少会暂停一次。
说明:
-
InitFunc- 在模型编译步骤之后执行; -
StartFunc- 在第一个仿真步骤之前执行; -
PauseFunc- 如果在仿真过程中出现暂停,则调用此函数; -
ContinueFunc- 在模型暂停后启动的单个步骤中执行; -
StopFunc- 在仿真暂停时执行。
保存模型
用于保存模型时。
更多关于模型保存回调的信息
使用的回调函数:PreSave(保存前),PostSave(保存后)
说明:
-
PreSave— 在保存模型之前执行; -
PostSave— 在保存模型之后执行。
关闭模型
用于关闭模型时。
更多关于模型关闭回调的信息
使用的回调函数:CloseFunc(关闭)
说明:
-
CloseFunc— 在关闭模型之后执行。
|
模型关闭条件回调允许您:
|
诊断窗口中的消息
在模型回调代码中,您可以使用以下函数向 模型诊断窗口
发送消息:
-
engee.info(msg)— 信息性消息; -
engee.warning(msg)— 警告消息;
这些函数仅在回调函数(掩码和模型)中有效。使用插值("Value = $(x)")或 string(…) 收集文本。
|
回调组示例
==== 打开模型(PreLoadFunc,PostLoadFunc):
PreLoadFunc() = begin
engee.info("打开模型")
end
PostLoadFunc() = begin
engee.info("模型已加载")
end
模型执行(InitFunc、StartFunc、PauseFunc、ContinueFunc、StopFunc):
InitFunc() = engee.info("初始化完成")
StartFunc() = engee.info("模拟正在运行")
PauseFunc() = engee.warning("模拟暂停")
ContinueFunc() = engee.info("我暂停后继续")
StopFunc() = engee.info("模拟停止")
保存模型(PreSave、PostSave):
PreSave() = engee.info("保存模型…")
PostSave() = engee.info("模型已保存")
关闭模型(CloseFunc):
CloseFunc() = begin
try
# 释放临时资源
engee.info("资源被释放,模型被关闭")
catch e
engee.warning("无法正确关闭模型:$(e)")
end
end
| 另请参阅关于代码块掩码中消息的部分:guide/masks-main.adoc#mask-callbacks-diagnostics。 |
示例
有关回调函数的示例,请访问链接:/helpcenter/stable/ru/interactive-scripts/base_simulation/demo_callback.html[link]。
Engee 中的每个回调函数都可以分配一个变量。这便于根据仿真条件跟踪执行情况。例如,在 PreLoadFunc 模型打开调用中,您可以使用以下代码:
# 模型开放变量
PreL = 1 # 在加载模型之前执行
PostL = 0 # 加载模型后执行
# 模型执行变量
Init = 0 # 它在编译模型后执行
Start = 0 # 运行到模拟的第一步
Pause = 0 # 暂停模拟时调用
Continue = 0 # 它在暂停后启动模型时一步执行
Stop = 0 # 它是在模拟停止期间执行的
# 模型保留变量
PreS = 0 # 在保存模型之前执行
PostS = 0 # 保存模型后执行
# 模型闭包变量
Close = 0 # 模型关闭后执行
此代码将变量初始化为零值。与打开模型相关的 PreL 变量等于 1,因为它的参数在模型加载前后都会加载(始终执行)。例如,在 StartFunc 模型执行回调函数中,您可以将 Start 变量设置为 1。如果此回调函数执行成功,则该变量的值将从 0(失败)变为 1(执行成功)。您可以使用“变量”窗口监控回调函数的执行情况:

每次执行回调函数时,变量都会更新,然后显示其值,以便分析和调试仿真过程。