Main Content

本页采用了机器翻译。点击此处可查看英文原文。

管理模型数据以简化分析

简化数据类型

简化模型的一种方法是针对指定的信号数据类型使用所需空间最少的数据类型。例如,不要对布尔数据使用 int 数据类型,因为布尔数据只需要一位。

在另一个例子中,假设您有一个 Sum模块,它有两个输入,它们始终是 -10 到 10 之间的整数。将 输出数据类型 参数设置为 int8,而不是 int32双精度值

要显示信号数据类型,请在“调试”选项卡上点击“叠加信息 > 端口数据类型”。

限制数据

降低复杂性的另一种有效技术是将输入限制为一组代表值,或者理想情况下为单个常数值。这个过程称为离散化,将输入视为一个枚举。离散化使您能够以最简单的方式处理乘法和除法的非线性算术。

以下模型有一个 Product模块为 Saturation模块提供动力。输入 xy 具有所示的特定设计范围,并且 Saturation模块将输入信号限制为上限和下限饱和值,即 8000 和 0 RPM。

Multiply block with inputs x and y. The output of Multiply block is input for Saturation block. Output for Saturation block is Out1.

Simulink® Design Verifier™ 软件在尝试满足 Saturation模块的上限和下限时会产生错误,因为该软件不支持非线性算术。要解决这些错误,请将其中一个输入限制为一组离散值。

确定满足您的测试需求所需的离散值。例如,您可能有一个模型速度的输入,并且您的设计包含以高于或低于 80、150、600 和 8000 RPM 的阈值的速度为条件的执行路径。为了进行有效分析,将速度值限制为 50、100、200、1000、5000 或 10000 RPM,以便每个阈值都可以处于活动或非非活动。

如果需要使用两个或三个以上的值,请考虑使用类似以下表达式指定约束值

num2cell(minval:increment:maxval)

使用前面的示例模型,使用 Test Condition模块将第二个输入(y)限制为 12510,如下面的模型所示。Simulink Design Verifier 软件为所有输入生成测试用例。

Multiply block with inputs x and y. Input y is constrained by using a Test Condition block. The output of Multiply block is input for Saturation block. Output for Saturation block is Out1.

您还可以约束模型的中间值或输出值的信号。约束此类信号可以更容易地解决不依赖于模型输入的低级子系统内的乘法或除法。

注意

离散化最好限制为少量输入(少于 10)。如果您的模型需要对许多输入进行离散化,请尝试通过连续仿真实现模型覆盖率,如增量测试生成的分区模型输入中所述。

Test Condition 模块不需要精确地放置在输入上。在决定在模型中放置约束的位置时,请考虑以下准则:

  • 倾向于对输入值进行约束,因为软件可以更容易地处理输入。

  • 如果您需要对输入和输出都施加约束,例如为了避免非线性算术,则其中一个约束应该是诸如 [minval maxval] 之类的范围。该软件首先测试范围两端的值并可以返回一个测试用例,即使底层计算是非线性的。

  • 确保相应输入和输出点的约束不矛盾。不要将输出信号限制为由于输入值的约束而无法实现的值。

  • 避免产生与模型相矛盾的约束。当某个约束与模型的某些方面或另一个约束相矛盾而永远无法满足时,就会出现这种矛盾。分析矛盾的模型可能会导致Simulink Design Verifier挂起。

    下一个模型是矛盾模型的一个简单示例。乘法模块的第二个输入是常数 1,但 Test Condition模块将其限制为 2510 的值。分析无法达到该模型中所有的测试目标。

    Multiply block with inputs x and Constant 1. Constant 1 is constrained by using a Test Condition block. The output of Multiply block is input for Saturation block. Output for Saturation block is Out1.

  • 当您处理具有许多乘法和除法运算的大型模型时,您可能会发现向所有浮点输入添加约束比识别需要约束的精确输入集更容易。