主要内容

本页采用了机器翻译。点击此处可查看英文原文。

finishedTraversal

类: ModelAdvisor.EdittimeCheck
命名空间: ModelAdvisor

指定在 blockDiscovered 方法之后运行的编辑时检查算法

自 R2022a 起

语法

violation = finishedTraversal(obj)

说明

violation = finishedTraversal(obj) 用于指定在 blockDiscovered 方法遍历用户正在编辑的模型或子系统同一级别的块之后调用的算法。当您为编辑时间检查对象 objTraversalType 属性指定值 edittimecheck.TraversalTypes.ACTIVEGRAPH 时,请使用此方法。该方法返回违反您的编辑时检查算法 violation 的块。

使用 finishedTraversal 方法指定编辑时间检查应该如何处理作为 blockDiscovered 方法一部分收集的数据。例如,假设您定义了一个编辑时检查,该检查会标记包含超过 20 个块的子系统。在这种场景下,blockDiscovered 方法遍历子系统中的每个模块,并计算块的数量。然后调用 finishedTraversal 方法,如果子系统包含超过 20 个块,则会创建编辑时检查违规。

输入参数

全部展开

编辑时间检查对象,指定为继承自 ModelAdvisor.EdittimeCheck 类的类的对象。

输出参量

全部展开

违反编辑时检查的块,以 ModelAdvisor.ResultDetail 对象或 ModelAdvisor.ResultDetail 对象数组的形式返回。

属性

Accessprotected

要了解有关方法属性的信息,请参阅方法属性

示例

全部展开

创建一个自定义编辑时检查,检查子系统中 Trigger 模块的位置。此检查需要 finishedTraversal 方法,因为它在检查子系统中块的位置后必须指定违规信息。

获取一个模型来测试模型顾问功能。

openExample('AdvisorCustomizationExample')

Model with edit-time check violations

将模型保存到您的工作文件夹中。关闭模型。

要注册自定义编辑时间检查,请创建 sl_customization 函数。 sl_customization 函数接受一个参量,即自定义管理器对象。要注册自定义检查,请使用 addModelAdvisorCheckFcn 方法。此方法的输入是检查定义函数的句柄。对于此示例,defineCheck 是检查定义函数。创建 sl_customization 函数并将其保存到工作文件夹中。

function sl_customization(cm)
cm.addModelAdvisorCheckFcn(@defineCheck);

创建检查定义函数。在函数内部,创建一个 ModelAdvisor.Check 对象,并将检查 ID 指定为输入参量。然后,指定 ModelAdvisor.Check TitleCallbackHandle 属性。CallbackHandle 属性是您为定义编辑时检查而创建的类的名称。对于此示例,MyEditTimeChecks 是包名称,TriggerBlockPosition 是类名。然后,将检查发布到模型顾问中的新文件夹。对于此示例,文件夹名称为 DEMO:编辑时间检查 。在这个示例中,创建一个名为 defineCheck 的函数,并将以下代码包含在其中。将 defineCheck 函数保存到工作文件夹中。

function defineCheck
rec= ModelAdvisor.Check("advisor.edittimecheck.TriggerBlock");
rec.Title = 'Check that Trigger block position is higher than other blocks';
rec.CallbackHandle = 'MyEditTimeChecks.TriggerBlockPosition';
mdladvRoot.publish(rec,'DEMO: Edit Time Checks');

创建一个从 ModelAdvisor.EdittimeCheck 抽象基类派生的类。对于此示例,请创建一个名为 TriggerBlockPosition.m 的类文件。将以下代码复制到 TriggerBlockPosition.m 文件中。然后,创建一个名为 +MyEditTimeChecks 的文件夹,并将 TriggerBlockPosition.m 文件保存在该文件夹中。类必须位于与包名相同的文件夹中。

TriggerBlockPosition 类定义了三个方法:TriggerBlockPositionblockDiscoveredfinishedTraversalTriggerBlockPosition 方法设置 CheckIdTraversalType 属性。此检查的遍历类型为 edittimecheck.TraversalTypes.ACTIVEGRAPH,因为它必须检查与 Trigger 模块在同一子系统中的其他块。blockDiscovered 方法检查子系统中 Trigger 块的位置。finishedTraversal 方法检查这些 Trigger 块的位置是否高于子系统中的其他块。

classdef TriggerBlockPosition < ModelAdvisor.EdittimeCheck
    properties
        TriggerBlock = [];
        position = [];
    end
 
 methods
        % Set Check ID and traversal type.
        function obj=TriggerBlockPosition(checkId)
            obj=obj@ModelAdvisor.EdittimeCheck(checkId);
            obj.traversalType = edittimecheck.TraversalTypes.ACTIVEGRAPH;
        end
 
        function violation = blockDiscovered(obj, blk)
            violation = [];
            if strcmp(get_param(blk,'BlockType'),'TriggerPort')
                obj.TriggerBlock = blk;
            else
                h = get_param(blk,'Position');
                obj.position = [obj.position, h(2)];
            end
        end
 
        function violation = finishedTraversal(obj)
            violation = [];
            if isempty(obj.TriggerBlock) 
                return;
            end
            triggerPosition = get_param(obj.TriggerBlock,'Position');
            if min(obj.position) < triggerPosition(2)
                violation = ModelAdvisor.ResultDetail;
                ModelAdvisor.ResultDetail.setData(violation,'SID',...
                Simulink.ID.getSID(obj.TriggerBlock)); 
                violation.CheckID = obj.checkId;
                violation.title = 'Trigger Block Position';
                violation.Description = 'Trigger Block should be top block in subsystem'; 
                violation.ViolationType = 'Warning'; 
            end
            obj.TriggerBlock = [];
            obj.position =[]; 
        end 
    end
end

刷新模型顾问以使用路径上的新检查更新缓存。

Advisor.Manager.refresh_customizations

打开 AdvisorCustomizationExample 模型。

点击建模选项卡并选择 模型顾问 > 配置编辑器,或在命令提示符下输入以下命令,即可打开模型顾问配置编辑器:

Simulink.ModelAdvisor.openConfigUI;

创建包含自定义编辑时间检查的自定义配置。将配置保存为 my_config2.json。关闭模型顾问配置编辑器。将自定义配置设置到 my_config2.json 文件中。

ModelAdvisor.setModelConfiguration('AdvisorCustomizationExample', ''my_config2.json');

点击建模选项卡并选择模型顾问 > 编辑时间检查,即可启用编辑时检查。在“配置参数”对话框打开后,选择编辑时检查参数。您也可以在命令提示符下输入以下命令:

edittime.setAdvisorChecking('AdvisorCustomizationExample','on');

要查看编​​辑时间警告,点击黄色高亮显示的块。

放大器子系统中,Trigger 模块不会产生编辑时警告,因为它是子系统中最顶层的模块。如果将 Trigger 模块移到另一个模块下方,则会产生编辑时警告。

版本历史记录

在 R2022a 中推出