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