YAOTU INSIGHTS

SimulinkTest 时间评估

SimulinkTest 时间评估
1. 概念讲解带离散与连续时间行为的混合系统Hybrid Systems往往包含复杂的时序相关信号逻辑。例如信号幅值一旦超过 P必须在 d 秒内回落到 Q 以下并保持 u 秒这类需求用离散的verify语句逐拍检查会很繁琐因为它涉及事件触发—等待—保持时长的时序结构。时间评估Temporal Assessment就是为这类问题设计的你在测试用例中编写并包含时间评估Simulink Test 在仿真结束后用记录的信号数据离线评估它从而判断被测系统System Under TestSUT是否满足时序需求。指南用一个受迫振荡阻尼问题引出概念对信号 S若其幅值超过 P则必须在 d 秒内回落到 Q 以下并保持 u 秒。下图画出了两次触发中 d最长延迟与 u最短保持的含义。工作流分四步选择评估模板 → 填写评估条件把符号映射到信号、时间序列或常量并查看评估摘要→ 运行测试用例 → 用结果对照需求评估 SUT。评估可以像文本一样复制、粘贴、删除粘贴时会加到评估列表末尾删除后即使之前复制过也不能再粘贴。2. 操作步骤 / 工作流1创建时间评估在测试管理器中创建或打开一个测试用例。进入Logical and Temporal Assessments Editor。单击Add Assessment选择模板Logical Assessment Templates逻辑评估模板Bounds Check边界检查检查信号与表达式的最大、最小边界Custom自定义检查逻辑表达式是否在所有时间步成立。Temporal Assessment Template时间评估模板Trigger-Response触发-响应检测到触发后检查信号响应。以 Trigger-Response 为例完成创建后需要填写三类参数Trigger触发、Response响应、可选的Delay延迟。对上述阻尼问题触发选whenever is true条件写abs(S) P响应选must stay true for at least条件写abs(S) Q最短时间写u延迟选with a delay of at most最长时间写d。所有时间单位均为秒。2解析评估参数符号Resolve Assessment Parameter Symbols在编辑评估参数时加入的符号会以未解析符号出现在 Symbols 列表中。右键符号有两种解析方式Map to model element映射到模型元素用映射对话框把符号映射到 SUT 中的信号、参数或块映射后运行测试用例时该信号会被自动记录。若映射的是总线或数组在 Symbols 面板的 Field/Element 行写.fieldA选总线字段、写(5,5)选数组元素、两者可合并为.fieldA(5,5)。Map to expression映射到表达式给符号赋一个标量常量值或变量表达式必须是 MATLAB 代码求值结果为标量字面量或 timeseries 对象。取回工作区变量可用evalin如符号表达式写evalin(base,var)复杂数据可用 Assessment Callback 分区先取回再赋给变量。注意t符号自动绑定到仿真时间不需要映射也不在 Symbols 面板显示。若把符号映射到经过线性插值的离散信号评估时会自动改为零阶保持并在符号名旁出现信息图标提示。3查看评估摘要与可视化表示填完参数后单击评估描述左侧的箭头展开摘要。Visual Representation面板给出该评估一个通过案例的图示单击Explore Pattern图标可查看不同的通过/失败案例。4评估 SUT 与查看结果时间评估在仿真结束后用记录的信号数据评估。运行测试用例后在测试管理器的Results and Artifacts面板选中该评估打开Assessment Result页Simulink Test 显示期望行为Expected Behavior与实际结果Actual Result并在不同时间步描述失败原因。用导航按钮和失败点文字说明定位问题展开Expression Tree可查看每个子表达式元素的结果配合缩放、平移与数据游标分析。注意评估结果图不能导出到 Simulink Test 报告。含逻辑或时间评估的测试用例可在多个版本间运行。5链接到需求若有 Requirements Toolbox 许可可在 Logical and Temporal Assessments Editor 中选中评估单击 Requirements 列打开 Requirement Editor 建立需求链接实现时间评估的需求追溯。3. 示例交通灯控制测试指南用sltestTrafficLight模型演示两类评估一个两灯路口的信号灯控制器状态在 Stateflow 图中切换输出对应红、黄、绿的枚举类型。模型的设计需求包括等候车辆数始终不小于零任一时刻至少有一个灯是红的灯变黄后保持固定时长容差 0.5 秒才转红灯变绿后在最短与最长时长之间容差 0.5 秒才转黄。测试文件用一个边界检查评估、一个自定义评估和两个触发-响应评估覆盖这些需求。model sltestTrafficLight; open_system(model) sim(model) % 在仿真数据检查器中绘制两灯状态 runData Simulink.sdi.Run.getLatest; LightState1 getSignalsByName(runData,Light1); LightState2 getSignalsByName(runData,Light2); Simulink.sdi.setSubPlotLayout(2,1); plotOnSubPlot(LightState1,1,1,true); plotOnSubPlot(LightState2,1,1,false); plotOnSubPlot(LightState2,2,1,true); plotOnSubPlot(LightState1,2,1,false); Simulink.sdi.view; % 加载测试文件并打开测试管理器 sltest.testmanager.load(test_traffic.mldatx); sltest.testmanager.view;两灯大致反相一灯绿时另一灯红且从绿转红必经黄。仿真会自动生成枚举类型LightModeType。边界检查评估Waiting Cars检查等候车辆数恒不小于零。符号NumCars映射到Car_Monitor1子系统输出该输出为 int32故下界写成int32(0)。在 Visual Representation 的 Pattern Explorer 中查看通过/失败示例。自定义评估Both lights safety check任何时刻两灯都不能同时绿也不允许一绿一黄或两黄该评估检查至少有一个灯是红的。它使用符号Red、Yellow分别映射到LightModeType.Red、LightModeType.Yellow枚举成员。自定义评估的 Visual Representation 预览为空因为该预览只对边界检查与触发-响应评估可用。触发-响应评估Light1 YellowToRed评估 Light1 从黄转红。Stateflow 图中 Yellow 状态在after(YELLOWDELAY,sec)后转红评估时把YELLOWDELAY减去容差tol得到YellowDelayWithTol。第一次运行失败——原因是时间参考time-reference设为触发的上升沿响应Light1 Red在触发刚为真灯刚变黄时就被评估自然不成立。把时间参考改为触发的下降沿后响应只在 Light1 不再是黄时才评估四个触发点全部通过。t 984.5 之后标记为无法再评估因为剩余仿真时间不足以覆盖整个保持窗口此时在 Property-Value 面板底部勾选Extended Assessment Result重新评估可消除未测试结果。自建触发-响应评估Light1 GreenToYellow触发选becomes true and stays true for between条件写t500 Light1 Green用内置符号t把评估限制在前 500 秒最短时间填GreenMin、最长时间填GreenMax时间参考设为触发的下降沿延迟选with no delay响应选must be true、条件写Light1 Yellow。GreenMin、GreenMax初为未解析符号在 Assessment Callback 中写greenMin maskObj.getParameter(MINGREENDELAY); greenMin str2double(greenMin.Value); greenMinAdj greenMin - tol; greenMax maskObj.getParameter(GREENDELAY); greenMax str2double(greenMax.Value); greenMaxAdj greenMax tol;再在 Symbols 面板把GreenMin映射到表达式greenMinAdj、GreenMax映射到greenMaxAdj。运行后该评估在前半段仿真触发两次与 SDI 中 Light1 在 t12.1 与 t282.2 进入绿态对齐。4. 语法参考与回调变量触发条件模式Trigger Condition Patterns共五种触发模式行为可用时间参考whenever is true触发条件为真期间持续检查响应无becomes true每次触发条件变真时检查一次响应上升沿becomes true and stays true for at least变真并保持至少 min-time 秒后检查触发上升沿或 min-time 结束becomes true and stays true for at most变真并保持至多 max-time 秒时检查触发上升/下降沿或 max-time 结束becomes true and stays true for between变真并保持在 min-time 与 max-time 之间时检查触发沿或 min/max-time 结束响应条件模式Response Condition Patterns共五种must be true从时间参考到延迟结束前必须为真、must stay true for at least至少保持 min-time、must stay true for at most至多保持 max-time、must stay true for between保持在 min 与 max 之间、must stay true until在 max-time 内直到 until 条件为真。延迟是从时间参考点开始的可选时间区间可设最大值或秒级时间范围。自定义评估允许写不适合上述模板的 MATLAB 逻辑表达式其中所有符号都必须映射到信号数据模型元素、timeseries 或标量常量。评估条件可用的运算符逻辑、|、~关系、、、~、、算术、-、*仅限乘标量常量以及abs函数与t符号支持single、double、uint8/16/32、int8/16/32、logical强转。逻辑/关系/算术运算符的函数形式不支持事件型信号不支持t不能用作 min-time 或 max-time 参数。条件中所有操作数必须同数据类型定点类型不支持。Assessment Callback 分区可像 MATLAB 工作区一样定义变量并可使用以下预定义对象TestResult本次测试用例或迭代结果、sltest_simout仿真输出数组、sltest_testCase当前测试用例、sltest_bdroot被仿真模型元胞数组可能是测试框架模型、sltest_sut被测系统元胞数组框架中即被测组件。5. 要点与注意事项时间评估是离线评估仿真结束后才用记录信号判定这与verify语句在仿真逐拍执行不同。时间参考time-reference选错是最常见的失败原因上升沿触发意味着刚触发就评响应下降沿则等触发条件撤销后再评——写事件后经过一段时间才响应的需求时通常要选下降沿。符号映射到模型元素后该信号会被自动记录总线/数组必须用 Field/Element 选单个标量元素。评估条件操作数必须同类型int32 输出与0比较要写int32(0)浮点数比较要带容差。仿真末尾时间不足时会出现 Untested 结果可用 Extended Assessment Result 重新评估以减少未测试项。评估结果图不能导出到报告要在报告中展示时序判定请导出结果数据或文字结论。建立需求链接需要 Requirements Toolbox 许可。