主要内容

定义自定义编辑时检查,以修复架构模型中的问题

此示例演示如何创建一个自定义编辑时检查,该检查运行在使用System Composer™创建的架构模型上。编辑时检查可以帮助您在模型设计评审过程的早期发现问题。如果连接块端口接口名称不匹配,本例中的自定义编辑时检查将产生警告。有关创建自定义检查的过程的详细信息,请参见定义自定义模型顾问检查

创建一个简单的架构模型

在共享连接器的端口中使用不匹配的数据接口名称创建一个简单的体系结构模型。

  1. 创建临时工作目录。

  2. 在MATLAB中,在首页选项卡上,单击动态仿真模块

  3. 2 .在“Simulink开始”页面单击系统的作曲家并选择体系结构模型

  4. 添加三个组件块。

  5. 连接其中一个的输出端口组件块到其他两个的输入端口组件如图所示。

    简单的体系结构模型

  6. 建模选项卡上,单击接口编辑器

  7. 使用名称创建两个数据接口interface0而且interface1

  8. 打开属性检查器。

  9. 组件,按OutBus端口。在接口属性检查器的部分,用于的名字字段中,选择interface0

  10. Component1,按InBus端口。在接口属性检查器的部分,用于的名字字段中,选择interface1

  11. 于Component2,按InBus端口。在接口属性检查器的部分,用于的名字字段中,选择interface0

  12. 将模型保存到您的工作目录。对于本例,模型名称为myModel.slx

创建自定义编辑时间检查

创建一个检查,在用户编辑模型时检测共享相同连接器的端口中不匹配的数据接口名称。

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

    函数sl_customization (cm) cm.addModelAdvisorCheckFcn (@defineCheck);
  2. 创建检查定义函数。在函数内部,创建一个ModelAdvisor。检查对象,并指定Check ID作为输入参数。然后,指定ModelAdvisor。检查标题而且CallbackHandle属性。的CallbackHandle属性是为定义编辑时检查而创建的类的名称。在这个例子中,MyEditTimeChecks是包名和PortMismatch是类名。然后,将检查发布到Model Advisor中的一个新文件夹中。在本例中,文件夹名称为系统编辑器编辑时检查.对于本例,创建一个defineCheck函数并在其中包含下面的代码。保存defineCheck函数到您的工作文件夹。

    函数defineCheck rec = ModelAdvisor。检查(“advisor.edittimecheck.SystemComposerPortMismatch”);rec.Title =“检查系统编写器组件的端口不匹配”;rec.CallbackHandle =“MyEditTimeChecks。PortMismatch”;mdladvRoot = ModelAdvisor.Root;mdladvRoot.publish (rec,“系统编辑器编辑时检查”);结束
  3. 类的派生类ModelAdvisor。EdittimeCheck抽象基类。对于本例,创建一个名为PortMismatch.将下面的代码复制到PortMismatch.m文件。然后,创建一个名为+ MyEditTimeChecks然后保存PortMismatch.m文件在那个文件夹里。类必须位于与包名相同的文件夹中。

    PortMismatch类定义了两个方法:PortMismatch而且blockDiscovered.的PortMismatch方法设置CheckId而且TraversalType属性。该检查的遍历类型为edittimecheck.TraversalTypes.ACTIVEGRAPH因为检查必须检查同一子系统或模型中新添加和编辑的块和受影响的块。的blockDiscovered方法包含检查端口接口名称是否匹配的算法。

    classdefPortMismatch < ModelAdvisor。EdittimeCheck方法函数obj = PortMismatch (checkId) obj = obj@ModelAdvisor.EdittimeCheck (checkId);obj。traversalType = edittimecheck.TraversalTypes.ACTIVEGRAPH;结束函数violationArray = blockDiscovered(obj,blk) violationArray = [];blkHdl = get_param(blk“处理”);archMdl = systemcomposer.arch.Model(broot (blk));comp = archmld .lookup(“SimulinkHandle”, blkHdl);如果isa(排版,“systemcomposer.arch.Component”i = 1:length(comp.Ports) compPort = comp.Ports(i);如果比较字符串(compPort。方向,“输出”) srcInterfaceName = compPort.InterfaceName;j = 1:length(compPort.Connectors) connector = compPort.Connectors(j);destPort = connector.DestinationPort;destInterfaceName = destPort.InterfaceName;如果(~strcmpi(srcInterfaceName, destInterfaceName)) hiliteHandle = destPort.SimulinkHandle;违规= ModelAdvisor.ResultDetail;ModelAdvisor.ResultDetail.setData(违反,“信号”, hiliteHandle);侵犯。检查ID = obj.checkId; violation.Description =连接端口的接口名称应该相同。;侵犯。Title =“端口接口不匹配”;侵犯。ViolationType =“警告”;violationArray = [violationArray违规];% #好< AGROW >结束结束结束结束其他的compPort = comp;如果比较字符串(compPort。方向,“输出”) srcInterfaceName = compPort.InterfaceName;j = 1:length(compPort.Connectors) connector = compPort.Connectors(j);destPort = connector.DestinationPort;destInterfaceName = destPort.InterfaceName;如果(~strcmpi(srcInterfaceName, destInterfaceName)) hiliteHandle = destPort.SimulinkHandle;违规= ModelAdvisor.ResultDetail;ModelAdvisor.ResultDetail.setData(违反,“信号”, hiliteHandle);侵犯。检查ID = obj.checkId; violation.Description =连接端口的接口名称应该相同。;侵犯。Title =“端口接口不匹配”;侵犯。ViolationType =“警告”;violationArray = [violationArray违规];% #好< AGROW >结束结束结束结束结束结束结束

创建自定义编辑时检查配置

创建由编辑时检查组成的自定义配置。对象关联配置myModel.slx模型。

  1. 刷新Model Advisor,用路径上的新检查更新缓存。

    Advisor.Manager.refresh_customizations
  2. 单击,打开Model Advisor配置编辑器建模TAB和选择模型的顾问>自定义编辑时检查或者在命令提示符处输入以下命令:

    Simulink.ModelAdvisor.openConfigUI;
  3. 创建只包含自定义编辑时检查的自定义配置。选择产品>系统编辑器编辑时检查文件夹,然后删除其他文件夹。将配置保存为sc_config.json.关闭Model Advisor配置编辑器。

  4. 将自定义配置设置为sc_config.json通过单击建模TAB和选择模型的顾问>编辑时间检查.在打开的“配置参数”对话框中指定配置文件的路径Model Advisor配置文件参数。或者,在命令提示符处输入以下命令:

    ModelAdvisor.setModelConfiguration (“myModel”“sc_config.json”);

  5. 控件打开编辑时检查模型顾问>编辑时间配置参数。或者,您也可以在命令提示符下输入该命令:

    edittime.setAdvisorChecking (“myModel”“上”);
  6. 要查看编辑时警告,请单击以黄色突出显示的信号。

    具有编辑时警告的架构模型

    连接组件而且Component1Blocks产生警告,因为每个端口中的数据接口名称不匹配。

另请参阅

||

相关的话题

Baidu
map