主要内容

用模型切片器以编程方式解决模型中的意外行为

在本例中,您将评估Simulink®模型,检测意外行为,并使用m金宝appodel Slicer以编程方式隔离和解决意外行为。当您计划重用API命令并将它们的使用扩展到其他模型时,编程方法很有用。

先决条件

熟悉Model Slicer的行为和目的,以及Model Slicer API的功能。突出功能依赖关系概述如何使用模型切片器用户界面来探索模型。的slslicerslsliceroptions,slslicertrace函数参考页包含模型切片器API命令帮助。

找到对意外行为负责的模型区域

sldvSliceCruiseControlHarness测试线束模型包含一个巡航控制器子系统sldvSliceCruiseControl一个方块,测试点,包含这个子系统的测试用例。您首先模拟模型来执行测试用例。然后,您评估模型的行为,以找到并隔离模型中负责意外行为的区域:

1.打开sldvSliceCruiseControlHarness巡航控制模型的测试线束。

open_system (“sldvSliceCruiseControlHarness”

注意:断言块被设置为当断言失败时停止模拟当实际运行模式与预期不一致时。

TestCases块包含sldvSliceCruiseControl的几个测试输入。

2.在TestCases Signal Builder中单击运行所有按钮以运行所有包含的测试用例。您在ResumeWO测试用例期间收到一个错误。断言块在27秒时停止模拟,因为实际操作模式与预期的操作模式不相同。点击好吧关闭此错误信息。

3.在sldvSliceCruiseControlHarness模型中,双击断言块,清除启用断言,并单击好吧

set_param (“sldvSliceCruiseControlHarness /断言”“启用”“关闭”

4.设置活性基团测试点信号构建器块到包含错误的测试用例,并再次运行模拟。

signalbuilder (“sldvSliceCruiseControlHarness /测试点”“ACTIVEGROUP”, 12) sim(“sldvSliceCruiseControlHarness”

模型中的Scope块包含三个信号:

  • operation_mode-显示子系统的实际运行模式。

  • expected_mode-显示测试用例提供的子系统的预期运行模式。

  • 验证-显示一个布尔值,用于比较操作模式和期望模式。

范围显示了预期操作模式与实际操作模式之间的差距,从时间开始27。现在您知道了显示意外行为的输出端口和包含意外行为的时间窗口,使用Model Slicer隔离和分析意外行为。

隔离对意外行为负责的模型区域

1.为所使用的模型创建模型切片器配置对象slslicer。命令窗口显示此Model切片器配置的切片属性。

Obj = slslicer(“sldvSliceCruiseControlHarness”
obj = SLSlicerAPI with properties: Configuration: [1x1 SLSlicerAPI. obj = SLSlicer with properties:SLSlicerConfig] ActiveConfig: 1 DisplayedConfig: [] StorageOptions: [1x1 struct] AnalysisOptions: [1x1 struct] SliceOptions: [1x1 struct] InlineOptions: [1x1 struct]活动配置的内容:名称:'untitled'描述:"颜色:[0 1 1]SignalPropagation: 'upstream' StartingPoint: [1x0 struct] ExclusionPoint: [1x0 struct]约束:[1x0 struct] SliceComponent: [1x0 struct] UseTimeWindow: 0 CoverageFile: " UseDeadLogic: 0 DeadLogicFile: "

2.激活Model Slicer的切片高亮显示模式,以编译模型并为依赖项分析做好准备。

激活(obj)
考虑打开快速重启之前启动模型切片器模拟基于工作流。< a href = " matlab: SlicerConfiguration。 . DisableFastRestartNotif">不再次显示

3.添加operation_mode输出端口块作为起点,并突出显示它。

addStartingPoint (obj,“sldvSliceCruiseControlHarness / operation_mode”)突出(obj)

在模拟过程中,模型的起始点和活动的上游区域被突出显示。

4.在受限的模拟时间窗口(最多30秒)内模拟模型,以只突出显示起点上游的模型区域,并在感兴趣的时间窗口内活动。

模拟(obj 0 30)

在模拟时间窗口中,只突出显示起始点上游和活动的模型部分。

5.您可以通过将开始时间更改为20秒来进一步缩小模拟时间窗口。

setTimeWindow (obj 20 30)

6.创建切片模型sldvSliceCruiseControlHarness_sliced只包含感兴趣的区域。

slicedModel = slice(obj,“sldvSliceCruiseControlHarness_sliced”) open_system (“sldvSliceCruiseControlHarness_sliced”
slicedModel = 'sldvSliceCruiseControlHarness_sliced'

切片模型sldvSliceCruiseControlHarness_sliced现在包含了源模型的简化版本sldvSliceCruiseControlHarness。简化的独立模型只包含模型中位于指定起始点上游并在感兴趣的时间窗口内活动的那些部分。

研究切片模型和调试源模型

您现在可以调试简化的独立模型中的意外行为,然后将更改应用到源模型。

1.要再次启用编辑模型,请终止model Slicer模式。

终止(obj)

2.导航到切片模型中包含意外行为的区域。

open_system (“sldvSliceCruiseControlHarness_sliced /模型/ CruiseControlMode / opMode / resumeCondition / hasCanceled '

逻辑运算符块在这个子系统中有一个截断真正的常数连接到它的第二个输入端口。这真正的Constant表示第二输入端口始终不变真正的在此切片模型的限制时间窗口内,导致巡航控制系统未进入“已取消”状态。

3.导航到等价物逻辑操作符块在源系统中使用slslicertrace查看连接到第二个输入端口的块。

H = slslicertrace(“源”...“sldvSliceCruiseControlHarness_sliced /模型/ CruiseControlMode / opMode / resumeCondition / hasCanceled / LogicOp1 ') hilite_system (h)
H = 1.1900e+03

逻辑运算符块在这个子系统中总是真正的在当前配置中。改变了的逻辑运算符块逻辑运算符块纠正了此错误。

4.在进行编辑之前,创建巡航控制模型和测试套具模型的新副本。

save_system (“sldvSliceCruiseControl”“sldvSliceCruiseControl_fixed”) save_system (“sldvSliceCruiseControlHarness”“sldvSliceCruiseControlHarness_fixed”

5.更新测试工具中的模型引用以引用新保存的模型。

set_param (“sldvSliceCruiseControlHarness_fixed /模式”...“ModelNameDialog”“sldvSliceCruiseControl_fixed.slx”

6.使用错误的逻辑操作符块的块路径来修复错误。

set_param (“sldvSliceCruiseControl_fixed / CruiseControlMode opMode / resumeCondition hasCanceled / LogicOp2 '“LogicOp””和“

7.用固定的模型模拟测试束45秒,以确认正确的行为。

sim卡(“sldvSliceCruiseControlHarness_fixed”

作用域现在显示预期的操作模式与实际操作模式相同。

清理

要完成演示,保存并关闭所有模型,并删除Model Slicer配置对象。

save_system (“sldvSliceCruiseControl_fixed”) save_system (“sldvSliceCruiseControlHarness_fixed”) close_system (“sldvSliceCruiseControl_fixed”) close_system (“sldvSliceCruiseControlHarness_fixed”) close_system (“sldvSliceCruiseControlHarness_sliced”)明确obj