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