Main Content

定义自定义模型顾问检查

您可以通过定义自定义检查来创建自己的条件和模型配置设置,供模型顾问审核。您可以创建能在编辑时也能在模型顾问中运行的自定义检查,也可以创建仅在模型顾问中运行的自定义检查。

自定义编辑时检查有助于您在模型设计过程中更早识别问题,但它们仅查看与用户正在编辑的模型或子系统中处于同一级别的模块和信号。但是,这些检查确实会在模型层次结构的各个级别上进行聚合,并在模型顾问中报告问题。如果您的检查必须检查模型的其他级别上受到影响的模块,请创建一个仅在模型顾问中运行的自定义检查。例如,如果您的检查必须检查整个模型层次结构中不匹配的 FromGoto 模块,请将此检查定义为仅在模型顾问中运行。

下列步骤显示创建在编辑时运行或仅在模型顾问中运行的检查的过程。

创建 sl_customization 函数

要定义自定义检查,首先在 MATLAB 路径中创建一个 sl_customization.m 文件。在 sl_customization.m 文件中,创建一个 sl_customization 函数。sl_customization 函数接受一个参量,即自定义管理器对象:

function sl_customization(cm)

提示

  • 您的 MATLAB 路径上可以有多个 sl_customization.m 文件。

  • 不要将用于对模型顾问检查和文件夹进行自定义的 sl_customization.m 文件放在您的根 MATLAB® 文件夹或其子文件夹中,matlabroot/work 文件夹除外。否则,模型顾问会忽略文件指定的自定义。

注册自定义检查

要注册自定义检查,请使用 addModelAdvisorCheckFcn 方法,它是您输入到 sl_customization 函数的自定义管理器对象的一部分。以下代码显示一个示例 sl_customization.m 函数:

function sl_customization(cm)
% register custom checks 
cm.addModelAdvisorCheckFcn(@defineModelAdvisorChecks);

% -----------------------------
% defines Model Advisor Checks
% -----------------------------
function defineModelAdvisorChecks
defineDetailStyleCheck;
defineConfigurationParameterCheck;
defineNewBlockConstraintCheck;
defineEditTimeChecks;

addModelAdvisorCheckFcn 方法将检查注册到模型顾问的按产品文件夹。defineModelAdvisorChecks 参量是一个函数的句柄,该函数包含对定义自定义检查的函数的调用。对于您创建的每个自定义模型顾问检查,您应创建一个检查定义函数。您可以为您的编辑时检查创建一个检查定义函数,因为每个编辑时检查都包含它自己的类定义。有关定义自定义检查的函数的详细信息,请参阅创建和部署模型顾问自定义配置

创建检查定义函数

检查定义函数定义在运行检查时模型顾问采取的操作。下列各节描述自定义编辑时检查和仅在模型顾问中运行的检查的检查定义函数的关键组成部分。

创建 ModelAdvisor.Check 类的实例

对于每个自定义检查,创建 ModelAdvisor.Check 类的一个实例。使用 ModelAdvisor.Check 属性和方法来定义检查用户界面和操作。下表说明了一些关键的检查组成部分。

内容描述
检查 ID(必需)用于对检查进行唯一性标识。模型顾问使用此 ID 来访问检查。
仅自定义模型顾问检查)检查回调函数的句柄(必需)用于指定检查内容的函数。
仅自定义模型顾问检查)操作回调函数的句柄(可选)添加修复操作。
仅自定义编辑时检查)类句柄(必需)定义编辑时检查操作的派生类。(可选)此类也可以定义编辑时检查的修复。
检查名称(推荐)指定模型顾问中检查的名称。
模型编译(可选)指定是否编译模型以用于检查分析。编辑时检查不支持 CallbackContext 属性的 PostCompileForCodegen 值。
输入参数(可选)添加输入参数,这些输入参数要求用户提供输入。模型顾问使用输入来执行检查。

定义自定义模型顾问检查

对于仅显示在模型顾问中的自定义检查,该检查定义函数包含一个检查回调函数,该函数指定您希望模型顾问对模型或子系统执行的操作。定义检查回调函数,并将其句柄传递给 setCallbackFcn 方法。在您运行检查时,模型顾问执行该回调函数。回调函数提供一个或多个返回参量,这些参量在执行检查后显示结果。在您运行检查时,模型顾问执行该回调函数。

如果您要指定自定义检查修复,检查定义函数还应包含操作回调函数。在检查定义函数中,创建 ModelAdvisor.Action 类的一个实例。定义操作回调函数,并将其句柄传递给 setCallbackFcn 方法。在模型顾问中,检查用户点击修复以将自定义修复应用于其模型。

Custom Model Advisor check with a fix

回调和操作回调函数提供一个或多个返回参量,用于在执行检查后显示结果。请参阅创建检查回调定义函数创建操作回调定义函数

要对模型顾问结果使用默认格式,请在 setCallbackFcn 方法中将回调函数类型指定为 DetailStyle。如果默认格式不能满足您的需要,请使用 ModelAdvisor.FormatTemplate 类或下列其他模型顾问格式类:

描述
ModelAdvisor.Text

创建一个模型顾问文本输出。

ModelAdvisor.List

创建一个列表。

ModelAdvisor.Table

创建一个表。

ModelAdvisor.Paragraph

创建并格式化一个段落。

ModelAdvisor.LineBreak

插入一个换行符。

ModelAdvisor.Image

在模型顾问输出中包含一个图像。

定义自定义编辑时检查

要创建自定义编辑时检查,请创建一个从 ModelAdvisor.EdittimeCheck 类派生的 MATLAB 类。在检查定义函数中,将此类指定为 ModelAdvisor.Check CallbackHandle 属性的值。在派生类中,定义下列方法:

  • 定义一个方法来指定该检查的检查 ID 和 ModelAdivsor.EdittimeCheck.TraversalType 属性。TraversalType 属性指定模型顾问如何运行该检查。

  • 定义一个 blockDiscovered 方法来查找违反编辑时算法的模块。

  • 如果违规发生在模块上,则通过创建 Type 属性设置为默认值 SIDModelAdvisor.ResultDetail 违规对象,在编辑时突出显示该模块。如果违规发生在信号上,则通过创建 Type 属性设置为 Signal 的违规对象来突出显示该信号。

  • 如果指定 edittimecheck.TraversalTypes.ACTIVEGRAPHTraversalType 属性,请定义一个 finishedTraversal 方法,该方法指定编辑时检查应如何处理在执行 blockDiscovered 方法时所收集的数据。

  • (可选)为编辑时检查违规定义一个 fix 方法。

有关示例,请参阅Define Edit-Time Checks to Comply with Conditions That You Specify with the Model Advisor

为了防止自定义编辑时检查在您编辑模型时对性能产生负面影响,如果当前 MATLAB 会话中在至少三个不同 Simulink® 模型中执行检查的时间超过 500 毫秒,则模型顾问会自动禁用自定义编辑时检查。

如果模型顾问禁用自定义编辑时检查,您将在 Simulink 画布上看到一条警告。您可以通过以下任一方式重新启用编辑时检查:

  • 点击警告中的超链接文本。

  • 将检查标识符 checkID 传递给函数 edittime.enableCheckedittime.enableCheck(checkID)

要防止自定义编辑时检查被禁用,请创建该检查并使它在模型上的执行时间少于 500 毫秒。

定义检查输入参数

您可以通过使用输入参数在运行检查之前请求提供输入。通过使用 ModelAdvisor.InputParameter 类定义输入参数。您必须在自定义检查定义函数中包含输入参数定义。您必须为要添加到自定义检查中的每个输入参数定义此类的一个实例。

通过使用以下方法在模型顾问中指定输入参数的布局。

目的方法
指定输入参数网格的大小。setInputParametersLayoutGrid
指定参数在输入参数布局网格中占据的行数。setRowSpan
指定参数在输入参数布局网格中占据的列数。setColSpan

模型顾问在输入参数框中显示输入参数。

Model Advisor check with input parameters

显示和启用检查

您可以指定自定义检查在模型顾问中的显示方式。您可以定义何时显示检查,或者用户是否可以使用 ModelAdvisor.Check 类的 VisibleEnableValue 属性选择或清除检查。这些属性的交互方式如下:

  • 如果 Visible 属性为 false,则该检查或任务不会显示在模型顾问中,并且会忽略 EnableValue 属性。

  • 如果 Visible 属性为 true,并且 Enable 属性为 false

    • 该检查显示在模型顾问中。

    • 该检查的初始状态为 Value

    • 复选框呈灰显状态。

  • 如果 Visible 属性为 true,并且 Enabled 属性为 true,则该检查或任务将显示在模型顾问中,并且该复选框处于活动状态。

发布自定义检查

通过使用 publish 方法在按产品文件夹中创建一个用于自定义检查的文件夹。然后使用模型顾问配置编辑器自定义模型顾问树中的文件夹。有关详细信息,请参阅使用模型顾问配置编辑器来自定义模型顾问

另请参阅

| | | |

相关主题