使用真值表对组合逻辑建模
真值表通过表格形式来实现组合逻辑设计。您可以使用 stateflow® 真值表为故障检测和管理以及模式切换的决策建模。
stateflow 图中的真值表函数仅在您调用真值表函数时执行。您可以在 stateflow 图、状态或子图中定义真值表函数。函数的位置确定可以调用函数的状态和转移的集合。
如果想从一个状态(或子图)及其子状态内调用函数,只需将真值表置于该状态或子图中。该函数将覆盖该状态或子图的父级和前代中同名的任何其他函数。
如果想要在图的任意位置调用函数,需将真值表置于与图同一层次的位置。
如果要从模型中的任何图调用该函数,请将真值表放在图级别,并启用图级别函数的导出。有关详细信息,请参阅。
真值表函数可以访问在 stateflow 层次结构中位于其上方的图和状态数据。
或者,为了更直接地实现决策逻辑,您可以将 模块直接添加到 simulink® 模型中。为了实现控制逻辑,truth table 模块使用 matlab® 作为动作语言。
真值表的布局
以下真值表函数的名称为 ttable
。它接受三个参数(x
、y
和 z
)并返回一个输出值 (r
)。
该函数对条件、决策和动作的安排如下。
条件 | 决策 1 | 决策 2 | 决策 3 | 决策 4 |
---|---|---|---|---|
x == 1 | τ | f | f | - |
y == 1 | f | τ | f | - |
z == 1 | f | f | τ | - |
动作 | r = 1 | r = 2 | r = 3 | r = 4 |
在条件列输入的每个条件的计算结果必须为 true(非零值)或 false(零值)。每个条件的结果指定为 t (true)、f (false) 或 -(true 或 false)。每个决策列通过逻辑 and 运算符将每个条件的结果结合形成一个复合条件,即所谓的决策。
计算真值表时,一次计算一个决策,从决策 1 开始。决策 4 涵盖了所有可能的剩余决策。如果计算出某个决策的值为 true,该表会执行关联动作,然后结束真值表的执行。
例如,如果条件 x == 1
和 y == 1
为 false 且条件 z == 1
为 true,则决策 3 为 true 且变量 r
设为等于 3。在这种情况下,不会再继续测试剩余决策,真值表的计算到此结束。如果前三个决策为 false,则默认决策将自动为 true,并执行其动作 (r=4
)。下表列出了与该真值表示例的计算相对应的伪代码。
伪代码 | 描述 |
---|---|
if ((x == 1) & !(y == 1) & !(z == 1)) r = 1; | 如果决策 1 为 true,则设置 |
elseif (!(x == 1) & (y == 1) & !(z == 1)) r = 2; | 如果决策 2 为 true,则设置 |
elseif (!(x == 1) & !(y == 1) & (z == 1)) r = 3; | 如果决策 3 为 true,则设置 |
else r = 4; endif | 如果所有其他决策都为 false,则默认决策为 true。设置 |
定义真值表函数
要定义真值表函数,请执行以下操作:
在对象选项板中,点击真值表函数图标 。
在图画布上,点击新真值表函数的位置。
输入函数的签名标签。
函数的签名标签指定函数的名称及其参数和返回值的形式名称。签名标签采用以下语法:
您可以指定多个返回值和多个输入参数。每个返回值和输入参数可以是一个标量、向量或值的矩阵。对于只有一个返回值的函数,忽略签名标签中的方括号。[return_val1,return_val2,...] = function_name(arg1,arg2,...)
您可以对参数和返回值使用相同的变量名称。当您对输入和输出使用相同的变量时,您会创建原位数据。例如,使用以下签名标签的函数将变量
y1
和y2
同时用作输入和输出:如果将此函数导出为 c 代码,生成的代码会将[y1,y2,y3] = f(y1,u,y2)
y1
和y2
视为传引用的原位参数。使用原位数据可减少生成代码复制中间数据的次数,从而提高代码的效率。在符号窗格和模型资源管理器中,函数签名中的参数和返回值显示为属于您的函数的数据项。参数的作用域是“
输入
”。返回值的作用域是“输出
”。为每个参数和返回值指定数据属性,如 中所述。当参数和返回值同名时,只能编辑参数的属性。返回值的属性为只读。
要对该函数进行编程,请双击函数框打开真值表编辑器。
在真值表编辑器中,添加条件、决策和动作。有关详细信息,请参阅。
创建您的函数所需的其他数据项。有关详细信息,请参阅。
您的函数可以访问它自己的数据或属于父状态或图的数据。函数中的数据项可以有以下作用域之一:
constant
- 常量数据在所有函数调用中都保持其初始值。parameter
- 参数数据在所有函数调用中都保持其初始值。local
- 局部数据从一个函数调用保留到下一个函数调用。仅对使用 c 语言作为动作语言的真值表有效。temporary
- 临时数据在每个函数调用开始时初始化。仅对使用 c 语言作为动作语言的真值表有效。
在使用 c 语言作为动作语言的真值表函数中,如果希望数据值在整个仿真期间的各次函数调用之间保持不变,请定义局部数据。如果您要在每次函数调用开始时初始化数据值,请定义临时数据。例如,如果要跟踪调用函数的次数,可以定义一个具有“
局部
”作用域的计数器。相反,如果不需要在函数完成后计数器值保持不变,则可以将循环计数器指定为具有“临时
”作用域。在使用 matlab 作为动作语言的真值表函数中,您不需要定义局部或临时函数数据。在这些函数中,您可以使用未定义的变量来存储仅在函数调用的其余部分可访问的值。要存储在各次函数调用之间保持不变的值,请在图级别使用局部数据。
提示
您可以从 matlab 工作区初始化函数中的局部和临时数据。有关详细信息,请参阅。
在状态和转移中调用真值表函数
您可以基于任何状态或任何转移的动作或从其他函数来调用真值表函数。如果导出真值表函数,将可以从模型的任何 stateflow 图中调用它。有关导出函数的详细信息,请参阅。
要调用真值表函数,请使用函数签名,并在函数签名中为每个形参包含一个对应的实参值。
[return_val1,return_val2,...] = function_name(arg1,arg2,...)
如果实参和形参的数据类型不同,函数会将实参转换为形参的类型。
指定真值表函数的属性
您可以通过下面列出的属性指定真值表函数如何与 stateflow 图中的其他组件交互。您可以在属性检查器、模型资源管理器或“真值表”属性对话框中修改这些属性。
要使用属性检查器,请执行以下操作:
在建模选项卡的设计数据下,选择属性检查器。
在 stateflow 编辑器中,选择真值表函数。
在属性检查器中,编辑真值表函数属性。
要使用模型资源管理器,请执行以下操作:
在建模选项卡的设计数据下,选择模型资源管理器。
在模型层次结构窗格中,选择真值表函数。
在对话框窗格中,编辑真值表函数属性。
要使用“真值表”属性对话框,请执行以下操作:
在 stateflow 编辑器中,右键点击真值表函数。
选择属性。
在属性对话框中,编辑真值表函数属性。
您还可以通过使用 对象以编程方式修改这些属性。有关 stateflow 编程接口的详细信息,请参阅 。
名称
函数名称。点击函数名称链接可使函数显示在其所属图的前端。
函数内联选项
控制函数在生成的代码中的内联:
“
自动
” - 确定是否根据内部计算内联函数。“
内联
” - 如果不将函数导出到其他图并且它不是递归的一部分,则内联函数。(如果函数直接调用自身或通过另一个函数调用间接调用自身,则存在递归。)“
函数
” - 不内联函数。
此属性在属性检查器中不可用。
标签
函数的签名标签。函数签名标签指定函数的名称及其参数和返回值的形式名称。此属性在属性检查器中不可用。
欠定
在真值表函数中控制欠定的诊断级别。有关详细信息,请参阅。
过定
在真值表函数中控制过定的诊断级别。有关详细信息,请参阅。
动作语言
控制 stateflow 真值表函数的动作语言。在 matlab 或 c 之间选择。此属性仅在使用 c 语言作为动作语言的图中可用。有关详细信息,请参阅。
描述
真值表函数的描述。
文档链接
真值表函数的在线文档的链接。您可以输入 web url 地址或者将文档显示为 html 文件或 matlab 命令行窗口中的文本的 matlab 命令。点击文档链接超链接时,stateflow 会计算该链接并显示该文档。
指定真值表模块的属性
truth table 模块属性指定您的真值表如何与 simulink 模型对接。您可以在属性检查器、模型资源管理器或“真值表”属性对话框中修改这些属性。
要使用属性检查器,请执行以下操作:
在建模选项卡的设计数据下,选择属性检查器。
在 stateflow 编辑器中,点击真值表。
在属性检查器中,编辑真值表属性。
要使用模型资源管理器,请执行以下操作:
在建模选项卡的设计数据下,选择模型资源管理器。
在模型层次结构窗格中,选择真值表。
在对话框窗格中,编辑真值表属性。
要使用“真值表”属性对话框,请执行以下操作:
打开 stateflow 编辑器。
在建模选项卡中,点击表属性。
在属性对话框中,编辑真值表属性。
您还可以通过使用 对象以编程方式修改这些属性。有关 stateflow 编程接口的详细信息,请参阅 。
提示
truth table 模块属性包含了使用 matlab 作为动作语言的真值表函数和图的属性。有关每个属性的描述,请参阅指定真值表函数的属性和。
另请参阅
模块
对象
- |
工具
- (simulink)