本页对应的英文页面已更新,但尚未翻译。 若要查看最新内容,请点击此处访问英文页面。

使用真值表对组合逻辑建模

真值表通过简洁的表格形式来实现组合逻辑设计。真值表的典型应用包括以下决策:

  • 故障检测与管理

  • 模式切换

真值表仅在 Simulink® 中受支持。

您可以将 Truth Table 模块直接添加到您的 Simulink 模型中,也可以在 Stateflow® 图、状态或子图中定义真值表函数。Simulink 模型中的 Truth Table 模块作为 Simulink 模块执行,而 Stateflow 图中的真值表函数仅在您调用真值表函数时执行。函数的位置确定可以调用函数的状态和转移的集合。

  • 如果想要在图的任意位置调用函数,需将真值表置于与图同一层次的位置。

  • 如果想从一个状态(或子图)及其子状态内调用函数,只需将真值表置于该状态或子图中。该函数将覆盖该状态或子图的父级中同名的任何其他函数。

  • 如果要从模型中的任何图调用该函数,请将真值表放在图级别,并启用图级别函数的导出。有关详细信息,请参阅Export Stateflow Functions for Reuse

无论您的真值表是作为 Simulink 模型中的模块存在,还是作为 Stateflow 图中的函数存在,您都可以用相同的方式来编写它们。

真值表的布局

以下真值表函数的名称为 ttable。它接受三个参数(xyz)并返回一个输出值 (r)。

该函数对条件、决策和动作的安排如下。

条件

决策 1

决策 2

决策 3

决策 4

x == 1

τ

F

F

-

y == 1

F

τ

F

-

z == 1

F

F

τ

-

动作

r = 1r = 2r = 3r = 4

条件列输入的每个条件的计算结果必须为 true(非零值)或 false(零值)。每个条件的结果指定为 T (true)、F (false) 或 -(true 或 false)。每个决策列通过逻辑 AND 运算符将每个条件的结果结合形成一个复合条件,即所谓的决策。

计算真值表时,一次计算一个决策,从决策 1 开始。决策 4 涵盖了所有可能的剩余决策。如果计算出某个决策的值为 true,该表会执行关联动作,然后结束真值表的执行。

例如,如果条件 x == 1y == 1 为 false 且条件 z == 1 为 true,则决策 3 为 true 且变量 r 设为等于 3。在这种情况下,不会再继续测试剩余决策,真值表的计算到此结束。如果前三个决策为 false,则默认决策将自动为 true,并执行其动作 (r=4)。下表列出了与该真值表示例的计算相对应的伪代码。

伪代码

说明

if ((x == 1) & !(y == 1) & !(z == 1))
  r = 1;

如果决策 1 为 true,则设置 r=1

elseif (!(x == 1) & (y == 1) & !(z == 1))
  r = 2;

如果决策 2 为 true,则设置 r=2

elseif (!(x == 1) & !(y == 1) & (z == 1))
  r = 3;

如果决策 3 为 true,则设置 r=3

else
  r = 4;
endif

如果所有其他决策都为 false,则默认决策为 true。设置 r=4

定义真值表函数

要定义真值表函数,请执行下列步骤:

  1. 声明真值表函数参数和返回值。

  2. 编写真值表函数。请参阅编写真值表

  3. 使用 Property Inspector 和 Symbols 窗格为每个参数和返回值指定数据属性。

  4. 使用 Symbols 窗格创建函数所需的任何附加数据项。您的函数可以访问它自己的数据或属于父状态或图的数据。

声明函数参数和返回值

函数签名标签指定函数的名称及其参数和返回值的形式名称。签名标签采用以下语法:

[return_val1,return_val2,...] = function_name(arg1,arg2,...)
您可以指定多个返回值和多个输入参数。每个返回值和输入参数可以是一个标量、向量或值的矩阵。对于只有一个返回值的函数,忽略签名标签中的方括号。

您可以对参数和返回值使用相同的变量名称。例如,使用以下签名标签的函数将变量 y1y2 同时用作输入和输出:

[y1,y2,y3] = f(y1,u,y2)
如果将此函数导出为 C 代码,y1y2 将通过引用(作为指针)传递,u 通过值传递。通过引用传递输入可减少生成的代码复制中间数据的次数,从而产生更优的代码。

在状态和转移中调用真值表函数

您可以基于任何状态或任何转移的动作来调用真值表函数。您还可以从其他函数调用真值表函数。如果导出真值表函数,将可以从模型的任何 Stateflow 图中调用它。有关导出函数的详细信息,请参阅Export Stateflow Functions for Reuse

调用真值表函数的语法与函数签名相同,即用实参替换签名中指定的形参。如果实参和形参的数据类型不同,则函数将实参强制转换为形参的类型。

如果函数签名的形参为标量,请确认这些函数调用的输入和输出遵循标量扩展的规则。有关详细信息,请参阅 为矩阵的所有元素赋值

指定真值表函数的属性

您可以通过真值表函数的属性对话框为其设置常规属性。要打开函数属性对话框,请右键点击真值表函数框,然后从上下文菜单中选择 Properties

Name

函数名称。点击函数名称链接可使函数显示在其所属图的前端。

Function Inline Option

控制函数在生成的代码中的内联:

  • Auto” - 确定是否根据内部计算内联函数。

  • Inline” - 如果不将函数导出到其他图并且它不是递归的一部分,则内联函数。(如果函数直接调用自身或通过另一个函数调用间接调用自身,则存在递归。)

  • Function” - 不内联函数。

Label

函数的签名标签。有关详细信息,请参阅声明函数参数和返回值

Underspecification

在真值表函数中控制欠定的诊断级别。有关详细信息,请参阅Correct Overspecified and Underspecified Truth Tables

Overspecification

在真值表函数中控制过定的诊断级别。有关详细信息,请参阅Correct Overspecified and Underspecified Truth Tables

Action Language

控制 Stateflow 真值表函数的动作语言。在 MATLAB® 或 C 之间进行选择。有关详细信息,请参阅 使用 MATLAB 和 C 作为动作语言语法时的差异

Description

函数说明。您可以为层次结构中的函数输入简要说明。

Document Link

函数的在线文档链接。您可以输入 Web URL 地址或者能以合适的在线格式(例如 HTML 文件或 MATLAB 命令行窗口中的文本)显示文档的 MATLAB 命令。点击 Document link 超链接时,Stateflow 会显示该文档。

相关主题