真值表以简洁的表格形式实现组合逻辑设计。真值表的典型应用包括:
故障检测与管理
模式切换
独立的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 = = 1
和y==1
都是假的和条件z = = 1
是真的,那么决定3是真的,变量R
设置为等于3。其余的决策未经测试,真值表的评估已完成。如果前三个决策为false,则默认决策自动为true,并且其操作为true(r = 4
)被执行。此表列出了与此真值表示例的计算相对应的伪代码。
伪代码 |
描述 |
---|---|
如果((x==1)&!(y==1)&!(z==1))r=1; |
如果决定1是真的,那就定了 |
elseif(!(x==1)和(y==1)和!(z==1))r=2; |
如果决定2是真的,那就定了 |
elseif(!(x==1)和!(y==1)和(z==1))r=3; |
如果决定3是真的,那就定了 |
Else r = 4;endif |
如果所有其他决策都为false,则默认决策为true。设置 |
定义真值表函数:
在对象选项板中,单击真值表函数图标.
在图表画布上,单击新真值表函数的位置。
输入函数的签名标签。
函数的签名标签指定函数的名称及其参数和返回值的形式名称。签名标签具有以下语法:
[返回值1,返回值2,…]=函数名称(arg1,arg2,…)
可以对参数和返回值使用相同的变量名。例如,具有此签名标签的函数使用这些变量日元
和y2
作为输入和输出:
(y1、y2、y3) = f (y1, u, y2)
日元
和y2
通过引用传递(作为指针),并且U
通过值传递。通过引用传递输入减少了生成的代码复制中间数据的次数,从而产生更优的代码。
笔记
不要使用图表符号的名称作为函数参数或返回值。例如,如果有x
或Y
图表数据是用签名定义函数的吗y=f(x)
导致运行时错误。
要对函数进行编程,请通过双击函数框打开真值表编辑器。
在真值表编辑器中,添加条件、决策和操作。有关更多信息,请参阅编制真值表.
在Model Explorer中,展开图表对象并选择真值表函数。函数签名的参数和返回值显示为属于函数的数据项。参数有作用域输入
.返回值具有作用域输出
.
在每个参数和返回值的数据属性对话框中,指定数据属性,如设置数据属性.
创建函数所需的任何附加数据项。有关更多信息,请参见通过模型资源管理器添加数据.
函数可以访问自己的数据或属于父状态或图表的数据。函数中的数据项可以有以下作用域之一:
常数
-常量数据在所有函数调用中都保留其初始值。
参数
-参数数据在所有函数调用中保持其初始值。
当地的
—本地数据从一个函数调用持续到下一个函数调用。仅对使用C作为操作语言的真值表有效。
临时
临时数据在每次函数调用开始时初始化。仅对使用C作为操作语言的真值表有效。
在使用C作为操作语言的真值表函数中,当您希望数据值在整个模拟过程中跨函数调用保持时,请定义本地数据。如果要在每次函数调用开始时初始化数据值,请定义临时数据。例如,可以使用定义计数器当地的
如果要跟踪调用函数的次数,则可以指定一个循环计数器临时
作用域,如果在函数完成后不需要计数器值持久存在。
在使用MATLAB作为操作语言的真值表函数中,不需要定义局部或临时函数数据。如果使用未定义的变量,statflow将创建一个临时变量,该变量对函数的其余部分可用。要存储跨函数调用持久存在的值,函数可以在图表级别访问本地数据。
提示
您可以从MATLAB工作区初始化函数中的本地和临时数据。有关详细信息,请参阅初始化数据从MATLAB基础工作区.
您可以从任何状态或转换的操作或从其他函数调用真值表函数。如果导出真值表函数,则可以从模型中的任何图表中调用它。有关导出函数的更多信息,请参见导出状态流函数以供重用.
要调用真值表函数,请使用函数签名,并在函数签名中为每个正式参数包含一个实际参数值。
[返回值1,返回值2,…]=函数名称(arg1,arg2,…)
如果实际参数和形式参数的数据类型不同,则函数将实际参数转换为形式参数的类型。
可以在“模型管理器”或“真值表属性”对话框中指定真值表函数的属性。
使用模型资源管理器:
要打开模型管理器,请在建模选项卡上,选择模型浏览器.
在模型层次结构窗格中,选择真值表函数。
在真值表窗格中,编辑真值表函数属性。
要使用“真值表属性”对话框,请执行以下操作:
在Stateflow编辑器中,右键单击真值表函数。
选择属性.
编辑真值表函数属性。
还可以通过使用以编程方式指定真值表函数属性Stateflow。TruthTable
对象。有关Stateflow编程接口的更多信息,请参见Stateflow API概述.
函数名。单击函数名链接,将函数显示在原生图表的前台。
控制生成代码中函数的内联:
汽车
-决定是否根据内部计算内联函数。
内联
-如果不将函数导出到其他图表,并且它不是递归的一部分,则内联函数。(如果函数通过另一个函数调用直接或间接调用自身,则存在递归。)
函数
-不内联你的函数。
您的功能签名标签。函数签名标签指定函数的名称及其参数和返回值的正式名称。
控制真值表函数中对规格不足的诊断级别。有关更多信息,请参见修正指定过多和未指定的真值表.
控制真值表函数中过度指定的诊断级别。有关详细信息,请参阅修正指定过多和未指定的真值表.
控制statflow真值表函数的操作语言。在MATLAB或c中选择MATLAB与C作为动作语言语法的区别.
功能描述。您可以在层次结构中输入函数的简要描述。
链接到该函数的在线文档。您可以输入web URL地址或MATLAB命令,以合适的在线格式显示文档,例如在MATLAB命令窗口中显示HTML文件或文本。当你点击文档链接超链接,Stateflow显示文档。
要打开真值表属性对话框,请在建模选项卡,单击表属性.
的属性真值表块是真值表函数和图的属性的组合,使用MATLAB作为动作语言。有关每个属性的描述,请参见指定真值表函数的属性和指定状态流程图的属性.
你也可以指定真值表通过使用Stateflow.TruthTableChart
对象。有关Stateflow编程接口的更多信息,请参见Stateflow API概述.