真值表以简明的表格格式实现组合逻辑设计。真值表的典型应用包括以下方面的决策:
故障检测与管理
模式切换
只有在Simulink中才支持真值金宝app表金宝app®.
你可以添加真值表直接块到Simulink模型,也可以在Stat金宝appeflow中定义真值表函数®图表、状态或子图表。真值表Simulink模型中的金宝app块作为Simulink块执行,而状态流程图中的真值表函数仅在调用真值表函数时执行。函数的位置决定了可以调用函数的一组状态和转换。
如果要从一个状态或subchart及其子状态中调用函数,请将真值表函数置于该状态或subchart中。该函数覆盖该状态或子图表的父级和父级中任何其他同名函数。
如果要在图表中的任何位置调用该函数,请将真值表函数置于图表级别。
如果您想从模型中的任何图表调用该函数,请将真值表放在图表级别,并允许导出图表级别的函数。有关更多信息,请参见导出Stateflow函数以供重用.
请注意
真值表函数可以访问Stateflow层次结构中它上面的图表和状态数据。
此真值表函数的名称为塔布尔
. 这需要三个论点(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 |
每个条件输入条件列的计算结果必须为true(非零值)或false(零值)。每种情况的结果都指定为T(真)、F(假)或-(真或假)。每个决策列将每个条件的结果与逻辑AND组合成复合条件,称为决策。
您一次评估一个真值表一个决策,从决定1.的决定4涵盖所有可能的剩余决定。如果其中一个决策为真,则表执行相关的操作,然后真值表执行就完成了。
例如,if条件x==1
和y==1
都是假的和条件z = = 1
是真的,那么决定3是真和变量r
设为3。剩下的决策没有被测试,真值表的评估已经完成。如果前三个决定为假,则默认决定自动为真,其行为(r = 4
)执行。这个表列出了与真值表示例的计算相对应的伪代码。
伪代码 |
描述 |
---|---|
If ((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如果是真的,那么设置 |
否则r=4;恩迪夫 |
如果所有其他决定都是错误的,那么默认决定就是正确的。集 |
要定义真值表函数,请执行以下操作:
在对象面板中,单击真值表函数图标。将指针移动到图表中新真值表函数的位置。
输入函数的签名标签。
函数签名标签指定函数的名称及其参数和返回值的正式名称。签名标签有这样的语法:
[return_val1, return_val2,…] = function_name (__arg1,最长,…)
可以对参数和返回值使用相同的变量名。例如,具有此签名标签的函数使用这些变量y1
和y2
作为输入和输出:
(y1、y2、y3) = f (y1, u, y2)
y1
和y2
通过引用(作为指针)传递,和u
通过值传递。通过引用传递输入减少了生成的代码复制中间数据的次数,从而产生更优的代码。
请注意
不要将图表符号的名称用作函数参数或返回值。例如,如果x
或y
是图表数据,用签名定义函数y = f (x)
导致运行时错误。
要对函数进行编程,请通过双击函数框打开真值表编辑器。
在真值表编辑器中,添加条件、决策和操作。有关详细信息,请参阅编制真值表.
在模型管理器中,展开图表对象并选择真值表函数。函数签名的参数和返回值显示为属于函数的数据项。参数具有范围输入
.返回值具有作用域输出
.
在每个参数和返回值的“数据属性”对话框中,指定数据属性,如中所述设置数据属性.
创建函数所需的任何附加数据项。有关更多信息,请参见通过模型资源管理器添加数据.
函数可以访问自己的数据或属于父状态或图表的数据。函数中的数据项可以有以下作用域之一:
常数
-常量数据在所有函数调用中都保留其初始值。
参数
-参数数据在所有函数调用中保持其初始值。
地方的
—本地数据从一个函数调用持续到下一个函数调用。仅对使用C作为操作语言的真值表有效。
临时
-临时数据在每次函数调用开始时初始化。仅对使用C作为操作语言的真值表有效。
在使用C语言作为操作语言的真值表函数中,当您希望您的数据值在整个模拟过程中跨函数调用持久存在时,请定义本地数据。当您希望在每次函数调用开始时初始化数据值时,请定义临时数据。例如,可以用地方的
如果要跟踪调用该函数的次数,请指定范围。相反,您可以指定一个循环计数器临时
如果不需要计数器值在函数完成后保持不变,则返回范围。
在真值表函数中使用MATLAB®作为操作语言,您不需要定义局部或临时函数数据。如果使用未定义的变量,statflow将创建一个临时变量,该变量对函数的其余部分可用。要存储跨函数调用持久存在的值,函数可以在图表级别访问本地数据。
提示
您可以从MATLAB工作区初始化函数中的本地和临时数据。有关更多信息,请参见从MATLAB基本工作区初始化数据.
您可以从任何状态或转换的操作调用真值表函数。也可以从其他函数中调用真值表函数。如果导出真值表函数,则可以从模型中的任何图表中调用它。有关导出函数的更多信息,请参见导出Stateflow函数以供重用.
真值表函数调用的语法与函数签名相同,实际参数替换签名中指定的正式参数。如果实际实参和形式实参的数据类型不同,则函数将实际实参转换为形式实参的类型。
要调用真值表函数,请使用函数签名,并在函数签名中为每个正式参数包含一个实际参数值。如果实际参数和形式参数的数据类型不同,则函数将实际参数转换为形式参数的类型。
您可以在模型资源管理器或真值表属性对话框中为真值表函数指定属性。
使用模型资源管理器:
要打开模型资源管理器,在建模选项卡,选择模型资源管理器.
在模型层次结构窗格中,选择真值表函数。
在真值表窗格中,编辑真值表函数属性。
使用真值表属性对话框:
在statflow Editor中,右键单击真值表函数。
选择性质.
编辑真值表函数属性。
您还可以使用Stateflow。TruthTable
对象。有关Stateflow编程接口的更多信息,请参见Stateflow API概述.
函数名。单击“函数名”链接,将函数带到其本机图表中的前台。
控制生成代码中函数的内联:
汽车
-决定是否根据内部计算内联函数。
内联
-内联函数,如果你不导出它到其他图表,它不是递归的一部分。(如果你的函数直接或间接地通过另一个函数调用调用自己,那么递归就存在。)
函数
-不内联函数。
您的功能签名标签。函数签名标签指定函数的名称及其参数和返回值的正式名称。
控制真值表函数中对规格不足的诊断级别。有关更多信息,请参见修正指定过多和未指定的真值表.
控制真值表函数中过度说明的诊断级别。有关更多信息,请参见修正指定过多和未指定的真值表.
控制Stateflow真值表函数的操作语言。在MATLAB或C之间选择。有关更多信息,请参阅作为动作语言语法的MATLAB与C的区别.
功能描述。您可以在层次结构中输入功能的简要描述。
链接到该功能的联机文档。您可以输入web URL地址或MATLAB命令,以适当的联机格式显示文档,如HTML文件或MATLAB命令窗口中的文本。当您单击文档链接超链接,Stateflow显示文档。
要打开真值表属性对话框,请在建模选项卡上,单击表属性.
的属性真值表块是使用MATLAB作为动作语言的真值表函数和图表属性的组合。有关每个属性的说明,请参见指定真值表函数的属性和为状态流图指定属性.
你也可以指定真值表通过使用Stateflow。TruthTableChart
对象。有关Stateflow编程接口的更多信息,请参见Stateflow API概述.