AnyMath 文档

回调

不要将本文中描述的回调与库回调混淆。 DiffEqCallbacks.jl。 阅读更多关于与他们合作的信息 Event Handling and Callback Functions.

*模型回调* —这些是响应模型中的某些事件而自动调用的函数。 回调 *AnyMath*用编程语言创建 朱莉娅

要打开回调,请转到设置窗口 lk 5 并点击 *编辑源代码* pen button graphs:

callbacks start 1 cn

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

callback start 2 cn

所有回调 *AnyMath*大致可分为4组:

打开模型

[完整_回退]

保存模型

关闭模型

[医]预发基金

邮递员

InitFunc

启动基金

[医]暂停 ContinueFunc

权宜之计

[医]前驱

后avefunc

关闭,关闭

回调的描述

打开模型

它们用于调整模型在打开前后的行为。

了解有关模型打开回调的更多信息

*使用的回调*: [医]预发基金 (开幕)及 邮递员 (关闭)。

*描述*:

* [医]预发基金 -加载模型之前运行。

+

在此模型的回调中不能使用软件控制方法,因为模型尚未加载。

* 邮递员 -加载模型后执行。 您可以在其中使用模型参数,因为它们已经加载。

基于模型打开条件的回调允许:

*准备工作区 *AnyMath*或者在使用以下方法加载模型之前执行初始化任务 [医]预发基金;

*使用以下方法配置模型参数或执行依赖于上载数据的操作 邮递员.

模型执行

它们在仿真过程中使用。

了解有关模型执行回调的更多信息

*使用的回调*: InitFunc (初始化), 启动基金 (推出), [医]暂停 (停顿), ContinueFunc (执行), 权宜之计 (停止)。

当您启动模型并至少停止一次仿真过程时,所有这些功能都将起作用。

*描述*:

* InitFunc -在模型的编译阶段之后执行; * 启动基金 -运行到模拟的第一步; * [医]暂停 -在模拟过程中暂停时调用; * ContinueFunc -在暂停后启动模型时一步运行; * 权宜之计 -它在仿真过程的关闭期间执行。

保存模型

保存模型时使用。

了解有关模型保存回调的更多信息

*使用的回调*: [医]前 (保存前), 储蓄后 (保存后)

*描述*:

* [医]前 -在保存模型之前执行;

* 储蓄后 -保存模型后执行。

关闭模型

闭模型时使用。

了解更多关于模型闭包回调的信息

*使用的回调*: 关闭,关闭 (闭幕)

*描述*:

* 关闭,关闭 -在模型关闭后执行。

基于模型闭包条件的回调允许:

*释放模型运行期间使用的资源(内存或文件描述符;

*执行模型关闭前需要完成的任何最终任务;

*在关闭之前保存模型(或其数据)的状态。

诊断窗口中的消息

在模型的回调代码中,您可以将消息发送到 模型诊断窗口 model diagnosis main 使用函数:

* engee.info(味精) --资讯讯息; * 恩吉。警告(味精) --警告信息;

这些函数只在回调(掩码和模型)中工作。 通过插值收集文本("价值=$(x)")或 字符串(…​).
回调组的_examples_

打开模型([医]预发基金, 邮递员):

PreLoadFunc() = begin
    engee.info("Открываю модель")
end

PostLoadFunc() = begin
    engee.info("Модель загружена")
end

模型执行(InitFunc, 启动基金, [医]暂停, ContinueFunc, 权宜之计):

InitFunc() = engee.info("Инициализация завершена")
StartFunc() = engee.info("Симуляция запущена")
PauseFunc() = engee.warning("Симуляция на паузе")
ContinueFunc() = engee.info("Продолжаю после паузы")
StopFunc() = engee.info("Симуляция остановлена")

保存模型(PreSave臓臓, 储蓄后):

PreSave() = engee.info("Сохраняю модель…")
PostSave() = engee.info("Модель сохранена")

关闭模型(关闭,关闭):

CloseFunc() = begin
    try
        # освобождение временных ресурсов
        engee.info("Ресурсы освобождены, модель закрыта")
    catch e
        engee.warning("Не удалось корректно закрыть модель: $(e)")
    end
end
另请参阅有关块掩码中的消息的部分。: 诊断窗口中的消息

工作示例

要查看回调如何工作的示例,请转到 链接

对于每个回调在 *AnyMath*您可以分配一个变量。 这是方便跟踪触发取决于模拟条件,例如,在模型开放调用。 [医]预发基金 您可以使用代码:

#переменные открытия модели
PreL = 1 #выполняется до загрузки модели
PostL = 0 #выполняется после загрузки модели

# переменные выполнения модели
Init = 0 #выполняется после компиляции модели
Start = 0 #выполняется до первого шага симуляции
Pause = 0 #вызывается в случае паузы симуляции
Continue = 0 #выполняется на одном шаге при запуске модели после паузы
Stop = 0 #выполняется во время остановки симуляции

#переменные сохранения модели
PreS = 0 #выполняется перед сохранением модели
PostS = 0 #выполняется после сохранения модели

#переменные закрытия модели
Close = 0 #выполняется после закрытия модели

此代码使用null值初始化变量。 变量 预处理/预处理,与打开模型相关联,等于一,因为它的参数在加载模型之前和之后加载(它们总是被执行)。 例如,在模型执行回调中 启动基金 你可以设置一个变量 开始=1. 如果此回调成功,则变量的值将从 0 (未完成)上 1 (完成)。 您可以使用"变量"窗口监视回调的执行。:

callback variables 1 cn

每次触发回调时,都会更新变量,然后输出它们的值,用于仿真过程的分析和调试。