AnyMath 文档
Notebook

屏蔽回调

此示例侧重于在屏蔽块中使用回调。

模拟环境中的掩模

面具是一个可定制的用户界面,简化了块的使用,以及它的重用。 屏蔽块有自己的设置窗口,您可以在其中更改各种参数。

使用面具,您可以:

*创建一个设置窗口,用于快速更改子系统或块参数。

*隐藏子系统的内容并保护其免受意外更改。

*通过调整其图标来更改块的外观。

此外,掩码经常与用户库一起使用。

创建子系统

让我们创建一个子系统,进入它并添加三个块-"增益因子","加法"和"常数"。 我们会打电话给入口 xy,将输入信号乘以系数 k 并为其添加一个常数。 b:

image.png

让我们将子系统称为"线性函数",输入当前仿真时间,并记录输出并将其添加到信号可视化模块:

image.png

如果我们尝试运行这个模型,那么我们当然会看到一个模拟错误。 毕竟,变量 kb 未在工作区中定义。

子系统屏蔽

而不是在命令行、脚本或模型回调中分配它们,让我们右键单击子系统并在掩码部分单击"添加掩码"。

image.png

因此,在一个新的浏览器窗口中打开了一个配置蒙版的工具--蒙版编辑器。 它由一个界面编辑器和一个代码编辑器组成。

界面编辑器允许您向块设置窗口添加各种控件、结构元素和操作。

image.png

默认情况下,在界面编辑器中创建了一个名为"主选项卡"的选项卡和一个用于隐藏"主组"的部分。

您可以重命名它们。:

*或双击选项卡名称,更改它,然后按Enter键。

*或者,选择一个节并在设置面板中更改节名称参数。

单击"+"按钮将创建另一个选项卡。

添加控件

控制包括:

*输入字段;

*复选框;

*下拉列表。

您可以将元素从"库"面板拖到"设置"窗口中,方法与向画布添加块时的方法相同。

如果需要删除某个项目,请选择它并按Delete键。

如果选择控件,例如输入字段,则可以在"设置"面板中更改其参数。

参数名称是您在块中访问的变量的名称。 在我们的例子中,有两个这样的变量。 - kb.

让我们设置第一个参数的名称并写入 k. 将"字段名称"更改为"角度系数",并将默认值设置为5。

image.png

添加另一个输入字段。 我们将参数名称设置为 b,我们表明这是一个自由成员,并定义默认值:

image.png

如果你现在运行模拟,它将完成没有错误,尽管没有变量。 kb 在工作区中,因为现在它们被定义在掩码中。

反过来,您可以轻松调整参数值,因为为此您不必打开命令行或切换到子系统。

掩码回调

单击"代码编辑器"选项卡后,掩码回调编辑器打开。:

image.png

回调分为全局和本地。

全局回调应用于整个掩码:

  • iconDrawCallback -当您需要根据当前参数值重绘块图标时调用。
  • blockChangedCallback -在一个或多个掩模参数被改变之后执行。
image.png

本地回调绑定到特定的掩码参数,并在其值更改后触发。

选择参数 k 在左边的面板中,我们会看到我们可以设置两个本地回调函数。:

  • valueChangedCallback -参数值更改时执行;
  • validateCallback -验证参数(即验证输入值的正确性)。
image.png

参数验证

回调;回调 validateCallback 它必须从宏开始 @assert. 您可以指定逻辑表达式和后面的错误文本。 例如,将参数值与零进行比较:

image.png
@assert value > 0 "Значение должно быть больше нуля"

如果您现在尝试将角度系数的值更改为负值,则会显示错误。:

image.png

隐藏参数

让我们删除验证并在界面编辑器中添加另一个控件-一个复选框。 让我们命名变量 is_direct 在名称中,我们将写入"直接比例",并指出默认情况下应激活复选框。

image.png

让我们回到代码编辑器并编写回调函数。 更改复选框的值时,我们将隐藏参数。 b 从面具,或显示它。

要做到这一点,让我们转向一个特殊的对象。 mask.parameters,其中存储掩码参数。 我们对参数感兴趣 b 所以让我们在点之后写下他的名字。

如果我们想更改b的值,我们需要引用属性 value. 例如,我们可以写 mask.parameters.b.value = 42. 之后,每次复选框的状态发生变化时,参数 b 指定的值将被分配:

image.png
mask.parameters.b.value = 42

但是我们不想赋值,而是从掩码中隐藏参数。 因此,我们必须参考属性 hidden 并为其分配一个布尔值。 如果复选框 is_direct 取值 true,参数 b 不应显示:

image.png
mask.parameters.b.hidden = is_direct

让我们保存蒙版,并确保现在自由成员的显示取决于复选框的值。 但是如果我们运行模型,我们会看到参数 b 它只是从掩模中消失,但在模拟期间继续考虑其值。

我们来修好它。:

  1. 定义一个名称为变量 constant_path 并将路径保存到其中的"常量"块。

  2. 并且还记下以下条件。 如果复选框处于活动状态,则将常量的值设置为零。 否则,我们将为其分配一个参数。 b.

image.png
mask.parameters.b.hidden = is_direct

constant_path = joinpath(engee.gcb(), "Константа")

if is_direct
    engee.set_param!(constant_path, "Value" => "0.0")
else
    engee.set_param!(constant_path, "Value" => "b")
end

一方面,此示例显示您可以在掩码回调中使用编程控制方法。 另一方面,它演示了应用"隐藏"属性的方法之一。

image.png

让我们保存掩码,并确保现在当复选框被激活时,参数值为 b 对仿真结果没有影响。 当取消激活复选框时,"自由成员"参数将保存最后输入的值。

image.png

自定义外观

最后,我想向您展示如何使用回调。 iconDrawCallback. 要自定义蒙版的外观,请使用函数 engee.show.

在[文档](https://engee.com/helpcenter/stable/ru/guide/masks-main.html#engee-show )你会发现许多自定义块外观的例子。 您可以输出文本、LaTeX公式、图形和图像。 此外,您可以调整水平和垂直对齐方式,在块上显示几层图像,并更改端口签名。

让我们在街区上划一条线 y = kx + b 我们将把参数值插入其中。 只有当"直接比例"复选框被停用时,我们才会显示自由项的值。:

image.png
text = "y = $(k)x"

if !is_direct
    text = text * " + $(b)"
end

engee.show(text)

让我们保存掩码,并确保在更改参数时更新块图标。:

image.png
image.png

结论

在这个例子中,我们研究了屏蔽块,并熟悉了各种类型的回调。 我们学习了如何验证参数、隐藏参数和自定义块的外观。