主要内容

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

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

  • 故障检测与管理

  • 模式切换

独立的statflow不支持真值表金宝app®MATLAB中的图表®

您可以添加一个真值表块直接到你的Simulink金宝app®模型,也可以在状态流程图、状态图或子图表中定义真值表函数。真值表Simulink模型中的金宝app块作为Simulink块执行,而状态流图中的真值表函数只在调用真值表函数时执行。函数的位置决定了可以调用该函数的状态集和转换集。

  • 如果要从一个状态或subchart及其子状态中调用函数,请将真值表函数置于该状态或subchart中。该函数将覆盖该状态或subchart的父级和祖先中同名的任何其他函数。

  • 如果你想在图表的任何地方调用函数,把真值表函数放在图表级别。

  • 如果要从模型中的任何图表调用函数,请将真值表置于图表级别,并启用图表级别函数的导出。有关详细信息,请参阅导出状态流函数以供重用

笔记

真值表函数可以访问statflow层次结构中位于其之上的图表和状态数据。

真值表的布局

真值表函数有它的名字ttable.它有三个参数(x,Y,Z),并返回一个输出值(R).

该功能由条件、决策和行动的安排组成。

条件

决定1

决定2

决定3

决定4

x = = 1

T

F

F

-

y==1

F

T

F

-

z = = 1

F

F

T

-

行动

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

每个条件输入条件列必须计算为真(非零值)或假(零值)。每个条件的结果被指定为T(真),F(假),或-(真或假)。每个决策列将每个条件的结果与逻辑AND组合成复合条件,称为决策。

每次评估一个真值表,从决定1.的决定4涵盖所有可能的剩余决策。如果其中一个决策为真,则表将执行相关操作,然后真值表执行完成。

例如,if条件x = = 1y==1都是假的和条件z = = 1是真的,那么决定3是真的,变量R设置为等于3。其余的决策未经测试,真值表的评估已完成。如果前三个决策为false,则默认决策自动为true,并且其操作为true(r = 4)被执行。此表列出了与此真值表示例的计算相对应的伪代码。

伪代码

描述

如果((x==1)&!(y==1)&!(z==1))r=1;

如果决定1是真的,那就定了r = 1

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

如果决定2是真的,那就定了r = 2

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

如果决定3是真的,那就定了r = 3

Else r = 4;endif

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

定义真值表函数

定义真值表函数:

  1. 在对象选项板中,单击真值表函数图标

  2. 在图表画布上,单击新真值表函数的位置。

  3. 输入函数的签名标签。

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

    [返回值1,返回值2,…]=函数名称(arg1,arg2,…)
    可以指定多个返回值和多个输入参数。每个返回值和输入参数都可以是标量、向量或值矩阵。对于只有一个返回值的函数,省略签名标签中的括号。

    可以对参数和返回值使用相同的变量名。例如,具有此签名标签的函数使用这些变量日元y2作为输入和输出:

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

    笔记

    不要使用图表符号的名称作为函数参数或返回值。例如,如果有xY图表数据是用签名定义函数的吗y=f(x)导致运行时错误。

  4. 要对函数进行编程,请通过双击函数框打开真值表编辑器。

  5. 在真值表编辑器中,添加条件、决策和操作。有关更多信息,请参阅编制真值表

  6. 在Model Explorer中,展开图表对象并选择真值表函数。函数签名的参数和返回值显示为属于函数的数据项。参数有作用域输入.返回值具有作用域输出

  7. 在每个参数和返回值的数据属性对话框中,指定数据属性,如设置数据属性

  8. 创建函数所需的任何附加数据项。有关更多信息,请参见通过模型资源管理器添加数据

    函数可以访问自己的数据或属于父状态或图表的数据。函数中的数据项可以有以下作用域之一:

    • 常数-常量数据在所有函数调用中都保留其初始值。

    • 参数-参数数据在所有函数调用中保持其初始值。

    • 当地的—本地数据从一个函数调用持续到下一个函数调用。仅对使用C作为操作语言的真值表有效。

    • 临时临时数据在每次函数调用开始时初始化。仅对使用C作为操作语言的真值表有效。

    在使用C作为操作语言的真值表函数中,当您希望数据值在整个模拟过程中跨函数调用保持时,请定义本地数据。如果要在每次函数调用开始时初始化数据值,请定义临时数据。例如,可以使用定义计数器当地的如果要跟踪调用函数的次数,则可以指定一个循环计数器临时作用域,如果在函数完成后不需要计数器值持久存在。

    在使用MATLAB作为操作语言的真值表函数中,不需要定义局部或临时函数数据。如果使用未定义的变量,statflow将创建一个临时变量,该变量对函数的其余部分可用。要存储跨函数调用持久存在的值,函数可以在图表级别访问本地数据。

    提示

    您可以从MATLAB工作区初始化函数中的本地和临时数据。有关详细信息,请参阅初始化数据从MATLAB基础工作区

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

您可以从任何状态或转换的操作或从其他函数调用真值表函数。如果导出真值表函数,则可以从模型中的任何图表中调用它。有关导出函数的更多信息,请参见导出状态流函数以供重用

要调用真值表函数,请使用函数签名,并在函数签名中为每个正式参数包含一个实际参数值。

[返回值1,返回值2,…]=函数名称(arg1,arg2,…)

如果实际参数和形式参数的数据类型不同,则函数将实际参数转换为形式参数的类型。

指定真值表函数的属性

可以在“模型管理器”或“真值表属性”对话框中指定真值表函数的属性。

  • 使用模型资源管理器:

    1. 要打开模型管理器,请在建模选项卡上,选择模型浏览器

    2. 模型层次结构窗格中,选择真值表函数。

    3. 真值表窗格中,编辑真值表函数属性。

  • 要使用“真值表属性”对话框,请执行以下操作:

    1. 在Stateflow编辑器中,右键单击真值表函数。

    2. 选择属性

    3. 编辑真值表函数属性。

还可以通过使用以编程方式指定真值表函数属性Stateflow。TruthTable对象。有关Stateflow编程接口的更多信息,请参见Stateflow API概述

名称

函数名。单击函数名链接,将函数显示在原生图表的前台。

内联函数的选择

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

  • 汽车-决定是否根据内部计算内联函数。

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

  • 函数-不内联你的函数。

标签

您的功能签名标签。函数签名标签指定函数的名称及其参数和返回值的正式名称。

不指定

控制真值表函数中对规格不足的诊断级别。有关更多信息,请参见修正指定过多和未指定的真值表

Overspecification

控制真值表函数中过度指定的诊断级别。有关详细信息,请参阅修正指定过多和未指定的真值表

动作语言

控制statflow真值表函数的操作语言。在MATLAB或c中选择MATLAB与C作为动作语言语法的区别

描述

功能描述。您可以在层次结构中输入函数的简要描述。

文档链接

链接到该函数的在线文档。您可以输入web URL地址或MATLAB命令,以合适的在线格式显示文档,例如在MATLAB命令窗口中显示HTML文件或文本。当你点击文档链接超链接,Stateflow显示文档。

为真值表块指定属性

要打开真值表属性对话框,请在建模选项卡,单击表属性

的属性真值表块是真值表函数和图的属性的组合,使用MATLAB作为动作语言。有关每个属性的描述,请参见指定真值表函数的属性指定状态流程图的属性

你也可以指定真值表通过使用Stateflow.TruthTableChart对象。有关Stateflow编程接口的更多信息,请参见Stateflow API概述

另见

相关的话题