通过编程方式为模型顾问自定义任务和文件夹
自定义文件概述
sl_customization.m 文件包含一组用于注册和定义自定义检查、任务和组的函数。要设置 sl_customization.m 文件,请按照下表中的规范进行操作。
注意
如果“模型顾问”窗口中未显示按产品文件夹,请从设置 > 预设项对话框中选择显示 " 按产品 " 文件夹。
| 函数 | 描述 | 必需还是可选? |
|---|---|---|
| 在启动时,向 Simulink® 自定义管理器注册自定义检查和任务、文件夹。请参阅 定义自定义模型顾问检查。 | 自定义模型顾问所必需。 |
一个或多个检查定义 | 定义自定义检查。请参阅定义自定义模型顾问检查。 | 需要进行自定义检查,并将自定义检查添加到按产品文件夹。 |
一个或多个任务定义 | 定义自定义任务。请参阅定义自定义任务。 | 需要向模型顾问添加自定义检查,但将检查添加到按产品文件夹时除外。为添加到模型顾问中的每个检查项编写一个任务。 注意 建议在按产品文件夹下添加自定义检查和自定义检查文件夹。然后,使用模型顾问配置编辑器自定义配置。有关详细信息,请参阅定义自定义模型顾问检查和使用模型顾问配置编辑器来自定义模型顾问。
|
一个或多个组 | 定义自定义组。请参阅定义自定义任务。 | 在模型顾问中,向新文件夹添加自定义任务是必需的,但向按产品文件夹添加新子文件夹时除外。为每个新文件夹编写一个组定义。 注意 建议在按产品文件夹下添加自定义检查和自定义检查文件夹。然后,使用模型顾问配置编辑器自定义配置。有关详细信息,请参阅定义自定义模型顾问检查和使用模型顾问配置编辑器来自定义模型顾问。
|
注册任务和文件夹
创建 sl_customization 函数
要向模型顾问添加任务和文件夹,请在您的 MATLAB® 路径上创建 sl_customization.m 文件。然后,在 MATLAB 路径下的 sl_customization.m 文件中创建 sl_customization() 函数。
提示
您的 MATLAB 路径上可以有多个
sl_customization.m文件。请勿将用于自定义模型顾问的
sl_customization.m文件放置在根 MATLAB 文件夹或其子文件夹中,但文件夹除外。否则,模型顾问会忽略文件指定的自定义。matlabroot/work
sl_customization 函数接受一个参量,即自定义管理器对象,如下例所示:
function sl_customization(cm)
自定义管理器对象包含用于注册自定义检查、任务和文件夹的方法。按照以下各节所述,使用这些方法注册特定于您的应用程序的自定义项。
注册任务和文件夹
自定义管理器提供以下方法用于注册自定义任务和文件夹:
addModelAdvisorTaskFcn (@factorygroupDefinitionFcn)将您在
中定义的任务注册到模型顾问的按任务文件夹中。factorygroupDefinitionFcn参量是一个指向函数的句柄,该函数定义要添加到模型顾问的检查,作为factorygroupDefinitionFcnModelAdvisor.FactoryGroup类的实例。addModelAdvisorTaskAdvisorFcn (@taskDefinitionFcn)将您在
中定义的任务和文件夹注册到您使用taskDefinitionFcnModelAdvisor.Root.publish方法或ModelAdvisor.Group类指定的模型顾问中的文件夹中。参量是定义自定义任务和文件夹的函数的句柄。Simulink 将检查和文件夹作为taskDefinitionFcnModelAdvisor.Task或ModelAdvisor.Group类的实例添加到模型顾问中。
以下示例展示了如何注册自定义任务和文件夹:
function sl_customization(cm) % register custom factory group cm.addModelAdvisorTaskFcn(@defineModelAdvisorTasks); % register custom tasks. cm.addModelAdvisorTaskAdvisorFcn(@defineTaskAdvisor);
注意
如果在 sl_customization.m 文件中添加自定义检查,请在 sl_customization 函数中包含注册检查的方法。
定义自定义任务
使用任务向自定义文件夹或多个文件夹添加复选框
您可以使用自定义任务向模型顾问添加检查,检查可以位于多个文件夹中,也可以位于单个自定义文件夹中。您可以在一个或多个函数中定义自定义任务,这些函数指定 ModelAdvisor.Task 类的每个实例的属性。对于要添加到模型顾问的每个自定义任务,定义此类的一个实例。然后注册自定义任务。以下各节介绍如何定义自定义任务。
要为多个文件夹或单个自定义文件夹添加复选框:
使用
ModelAdvisor.Check类创建检查。注册一个用于检查的任务包装器。
如果要将检查添加到尚不存在的文件夹,请使用
ModelAdvisor.Group类注册并创建文件夹。使用
ModelAdvisor.Task.setCheck方法为任务添加检查。使用
ModelAdvisor.Group.addTask方法和任务 ID 将任务添加到每个文件夹。
使用 MathWorks 检查创建自定义任务
您可以将 MathWorks® 检查添加到自定义文件夹中,方法是将检查定义为自定义任务。当您将检查添加为自定义任务时,您可以通过检查 ID 来识别检查。
要查找 MathWorks,请检查 ID:
在层级结构中,导航到包含 MathWorks 检查的文件夹。
在模型顾问的左侧窗格中,选中该复选框。
右键点击支票名称并选择将检查 ID 发送到工作区。ID 会显示在命令行窗口中,并发送到基础工作区。
从命令行窗口中选择并复制要添加的检查的检查 ID 作为任务。
显示和启用任务
对于任务而言,Visible、Enable 和 Value 属性的交互方式与检查的交互方式相同。
定义任务显示位置
您可以按照以下准则指定模型顾问在模型顾问内部放置任务的位置:
要将任务放置在模型顾问任务管理器中的新文件夹中,请使用
ModelAdvisor.Group类。要将任务放置在按任务文件夹中的新文件夹中,请使用
ModelAdvisor.FactoryGroup类。
任务定义功能
以下示例展示了一个任务定义函数。该函数定义了三个任务。
% Defines Model Advisor tasks and a custom folder % Add checks to a custom folder using task definitions function defineTaskAdvisor mdladvRoot = ModelAdvisor.Root; % Define task that uses Sample Check 0: Check whose Results are Viewed as Detailed Result Collections MAT8 = ModelAdvisor.Task('com.mathworks.sample.TaskSample8'); MAT8.DisplayName='Example task using new check style (recommended style)'; MAT8.setCheck('com.mathworks.sample.Check0'); mdladvRoot.register(MAT8); % Define task that uses Sample Check 1: Informational check MAT1 = ModelAdvisor.Task('mathworks.example.task.configManagement'); MAT1.DisplayName = 'Informational check for model configuration management'; MAT1.Description = 'Display model configuration and checksum information.'; setCheck(MAT1, 'mathworks.example.configManagement'); mdladvRoot.register(MAT1); % Define task that uses Sample Check 2: Basic Check with Pass/Fail Status MAT2 = ModelAdvisor.Task('mathworks.example.task.unconnectedObjects'); MAT2.DisplayName = 'Check for unconnected objects'; setCheck(MAT2, 'mathworks.example.unconnectedObjects'); MAT2.Description = ['Identify unconnected lines, input ports, and output ' ... 'ports in the model or subsystem.']; mdladvRoot.register(MAT2); % Define task that uses Sample Check 3: Check with Subresults and Actions MAT3 = ModelAdvisor.Task('mathworks.example.task.optimizationSettings'); MAT3.DisplayName = 'Check safety-related optimization settings'; MAT3.Description = ['Check model configuration for optimization ' ... 'settings that can impact safety.']; MAT3.setCheck('mathworks.example.optimizationSettings'); mdladvRoot.register(MAT3); % Custom folder definition MAG = ModelAdvisor.Group('mathworks.example.ExampleGroup'); MAG.DisplayName = 'My Group'; % Add tasks to My Group folder MAG.addTask(MAT8); addTask(MAG, MAT1); addTask(MAG, MAT2); addTask(MAG, MAT3); % Add My Group folder to the Model Advisor under 'Model Advisor' (root) mdladvRoot.publish(MAG);
定义自定义文件夹
关于自定义文件夹
在模型顾问中使用文件夹按功能或用途对检查进行分组。您可以在以下位置定义自定义文件夹:
工厂组定义函数,用于指定
ModelAdvisor.FactoryGroup类的每个实例的属性。一个任务定义函数,用于指定
ModelAdvisor.Group类的每个实例的属性。
为要添加到模型顾问的每个文件夹定义一个组类实例。
添加自定义文件夹
添加自定义文件夹:
使用
ModelAdvisor.Group或ModelAdvisor.FactoryGroup类创建文件夹。注册文件夹。
定义自定义文件夹的显示位置
您可以按照以下准则指定模型顾问中自定义文件夹的位置:
要在模型顾问任务管理器中定义一个新文件夹,请使用
ModelAdvisor.Group类。要在按任务文件夹中定义一个新文件夹,请使用
ModelAdvisor.FactoryGroup类。
注意
要在按产品文件夹中定义一个新文件夹,请在自定义检查中使用 ModelAdvisor.Root.publish 方法。如果“模型顾问”窗口中未显示按产品文件夹,请从设置 > 预设项对话框中选择显示 " 按产品 " 文件夹。
组定义
以下示例展示了组的定义。该定义将任务放置在名为 My Group 的文件夹下,该文件夹位于模型顾问根目录下。任务定义功能包含此组定义。
% Custom folder definition MAG = ModelAdvisor.Group('mathworks.example.ExampleGroup'); MAG.DisplayName='My Group'; % Add tasks to My Group folder MAG.addTask(MAT8); MAG.addTask(MAT1); MAG.addTask(MAT2); MAG.addTask(MAT3); % Add My Group folder to the Model Advisor under 'Model Advisor' (root) mdladvRoot.publish(MAG);
以下示例展示了工厂组定义函数。该定义将检查项放置在按任务文件夹内的 Demo Factory Group 文件夹中。
function defineModelAdvisorTasks mdladvRoot = ModelAdvisor.Root; % --- sample factory group rec = ModelAdvisor.FactoryGroup('com.mathworks.sample.factorygroup'); rec.DisplayName='Demo Factory Group'; rec.Description='Demo Factory Group'; rec.addCheck('com.mathworks.sample.Check0'); rec.addCheck('mathworks.example.configManagement'); rec.addCheck('mathworks.example.unconnectedObjects'); rec.addCheck('mathworks.example.optimizationSettings'); mdladvRoot.publish(rec); % publish inside By Task
另请参阅
ModelAdvisor.Check | ModelAdvisor.FactoryGroup | ModelAdvisor.Group | ModelAdvisor.Task | ModelAdvisor.Procedure | publish