主要内容

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

在此示例中,您可以评估Simulink®模型,检测意外行为,并使金宝app用模型切片程序以编程方式隔离并解决意外行为。当您计划重复使用API​​命令并将其扩展到其他模型时,程序方法是有用的。

先决条件

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

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

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

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

Open_System('sldvslicecruiseControlharness'

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

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

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

3.在SLDVSLICECRUISECONTROLHARNESS模型中,双击断言块,清除启用断言,然后单击好的

set_param('SldvsliceCruiseControlharness / Assertion'“启用”'离开'

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

signalbuilder (“sldvSliceCruiseControlHarness /测试点”“ACTIVEGROUP”12) sim卡('sldvslicecruiseControlharness'

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

  • 操作模式- 显示子系统的实际操作模式。

  • 预期_Mode.-显示测试用例提供的子系统的预期操作模式。

  • 核实- 显示比较操作模式和预期模式的布尔值。

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

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

1.使用模型创建模型Slicer配置对象SLSLICER..命令窗口显示此模型Slicer配置的切片属性。

obj = slslicer ('sldvslicecruiseControlharness'
obj = SLSlicer with properties:SLSlicerConfig] ActiveConfig: 1 DisplayedConfig: [] StorageOptions: [1 x1 struct] AnalysisOptions: [1 x1 struct] SliceOptions: [1 x1 struct] InlineOptions: [1 x1 struct]的内容积极配置:名称:无标题的描述:”颜色:[0 1 1]SignalPropagation:“上游”StartingPoint: [1 x0 struct] ExclusionPoint: [1 x0 struct]约束:[1x0 struct] SliceComponent: [1x0 struct] UseTimeWindow: 0 CoverageFile: " UseDeadLogic: 0 DeadLogicFile: "

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

激活(obj)
考虑打开再次显示。

3.添加操作模式Outport块作为起点并突出显示它。

addStartingPoint (obj,“sldvSliceCruiseControlHarness / operation_mode”)亮点(obj)

突出显示起点和在模拟期间激活的模型的区域。

4.在受限制的模拟时间窗口(最多30秒)中模拟模型,仅突出显示起点上游的模型区域,在感兴趣的时间窗口期间。

模拟(obj,0,30)

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

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

settimewindow(obj,20,30)

6.创建一个切片模型sldvslicecruiseControlharness_sliced.仅包含感兴趣的领域。

slicedModel =片(obj,'sldvslicecruiseControlharness_sliced')Open_System('sldvslicecruiseControlharness_sliced'
slicedModel = ' sldvSliceCruiseControlHarness_sliced '

切片模型sldvslicecruiseControlharness_sliced.现在包含一个简化版本的源模型SldvsliceCruiseControlharness.简化的独立模型仅包含模型的模型的那些部分,这些部分是在感兴趣的时间窗口期间在指定起点的上游和活动。

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

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

1.要再次启用编辑模型,请终止模型切片器模式。

终止(obj)

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

Open_System('SLDVSLICECRUISECONTROLHARNESS_SLICED / MODEL / CRUISECONTROLMODE / OPMODE / RESUMECHORDITION / HASCANCELED'

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

3.导航到等同物使用源系统中的逻辑运算符块Slslicertrace.查看连接到第二输入端口的块。

h = slslicertrace ('来源'...“sldvSliceCruiseControlHarness_sliced /模型/ CruiseControlMode / opMode / resumeCondition / hasCanceled / LogicOp1 ')hilite_system(h)
h = 615.0006

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

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”

该范围现在表明预期操作模式与实际操作模式相同。

清理

要完成演示,请保存并关闭所有型号并删除模型切片器配置对象。

save_system (“sldvSliceCruiseControl_fixed”)save_system(“sldvSliceCruiseControlHarness_fixed”)close_system(“sldvSliceCruiseControl_fixed”)close_system(“sldvSliceCruiseControlHarness_fixed”)close_system('sldvslicecruiseControlharness_sliced')明确obj.