打开真值表进行编辑
在图表中创建并标记真值表后,您可以指定其逻辑行为。要打开真值表,请双击真值表函数。
默认情况下,真值表包含一个条件表和一个动作表,每个表都有一行。条件表包含一个决策列D1和一个动作行。
选择动作语言
如果真值表位于C动作语言Stateflow图表内,则可以为Stateflow真值表指定动作语言:
通过选择View > Property Inspector打开属性检查器。
在Properties 部分,选择C或MATLAB作为动作语言。
输入真值表条件
条件是在真值表中指定逻辑行为的起点。您打开可编辑的真值表。通过指定条件开始对ttable的行为进行编程。
在“ Condition Table”的“Condition ”列中输入条件。对于您输入的每个条件,您可以在“Description”列中输入可选的描述。要为真值表ttable输入条件,请执行以下操作:
1 单击 Condition Table上要附加的行。
2 单击侧面板上的Append Row”按钮两次。
真值表将两行附加到条件表的底部。
3 单击并向下拖动分隔Condition Table和 Action Table窗格的条,以放大Condition Table窗格。
4 在“Condition Table”中,单击“Description”列的顶部单元格。
单元格中会出现一个闪烁的文本光标,该光标会突出显示。
5 输入此文本:
x is equal to 1
条件描述是可选的,但在生成的真值表代码中显示为注释。
6 要选择“Condition ”列右侧的下一个单元格,请按向右箭头。
7 在“Condition ”列的第一个单元格中,输入
XEQ1:
此文本是一个可选标签,您可以将其包含在条件中。每个标签必须以字母字符([a-z][a-z])开头,后跟任意数量的字母数字字符([a-z][a-z][0-9])或下划线(_)。
8 按Enter键,然后显示以下文本:
x == 1
你输入的每个条件都必须计算为零(false)或非零(true)。您可以在条件中使用可选括号(例如,[x==1])。
在真值表条件下,您可以使用通过其参数传递给真值表函数的数据。前面的条件测试参数x是否等于1。您还可以使用为真值表的父对象定义的数据,包括图表。
9 重复上述步骤以输入其他两个条件。
输入真值表决策
每个决策列(D1、D2等)将一组条件结果与and关系绑定到一个决策中。决策中条件结果的可能值是T(真)、F(假)和-(真或假)。在“输入真值表条件”中,您为真值表表表输入了条件。继续在决策列中输入值:
1 单击要附加的列“Condition Table”。
2 单击侧面板上的“Append Column”按钮两次。
3 单击决策列D1中的顶部单元格。
单元格中会出现一个闪烁的文本光标,该光标会突出显示。
4 按下空格键,直到出现T值。
按下空格键可切换F、T和-的可能值。您也可以直接输入这些字符。按1将该值设置为T,按0将该值设为F。按x将该值设定为-。
5 按向下箭头键前进到D1列中的下一个单元格。
在决策列中,您可以使用箭头键沿任何方向前进到另一个单元格。您还可以使用左右箭头键在这些单元格中向左或向右前进。
6 为决策列输入剩余值:
在执行真值表期间,决策测试按从左到右的顺序进行。决策中单个条件结果的测试顺序未定义。真值表按自上而下的顺序评估每个决策的条件(先是条件1,然后是条件2,依此类推)。由于此实现在未来可能会发生变化,因此不依赖于特定的评估顺序。
默认决策栏
ttable中的最后一个决策列D4是此真值表的默认决策。默认决策涵盖了左侧前面决策列中未测试的任何决策。您可以在右侧的最后一个决策列中输入默认决策,并为决策中的所有条件输入-。此条目表示条件T或F的任何结果。
在前面的示例中,默认决策列D4指定了这些决策:
输入真值表动作
在执行真值表期间,决策测试按从左到右的顺序进行。当发生决策匹配时,将执行在该决策列的“Actions”行中指定的“Action Table”中的操作。然后,真值表退出。
在“输入真值表决策”中,您在真值表中输入了决策。下一步是在Action Table中为每个决策输入要执行的动作。稍后,您可以在条件表的“Actions ”行中将这些动作分配给他们的决策。
设置动作表
1 单击要附加的行“Action Table”。
2 单击侧面板上的“Append Row ”按钮三次。
3 使用你为真值表选择的语言对动作进行编程。
使用C表达式的编程动作
按照以下过程使用C作为动作语言对动作进行编程:
1 单击“Action Table”的“Description ”列中的顶部单元格。
单元格中会出现一个闪烁的文本光标,该光标会突出显示。
2 输入以下说明:
将r设置为1
3 动作描述是可选的,但在生成的真值表代码中显示为注释。
按向右箭头键选择“动作”列右侧的下一个单元格。
4输入以下文本:
A1:
可以使用可选标签后跟冒号(:)开始动作。稍后,您可以在“Condition Table”的“Actions ”行中输入这些标签,为每个决策列指定一个动作。与条件标签一样,动作标签必须以字母字符([a-z][a-z])开头,后跟任意数量的字母数字字符([a-z][a-z][0-9])或下划线(_)。
5 按Enter键并输入以下文本:
r=1;
在真值表动作中,您可以使用通过其参数和返回值传递给真值表函数的数据。前面的动作r=1设置返回值r的值。您还可以使用为真值表的父对象(包括图表)定义的数据指定动作。真值表动作还可以广播或发送为真值表或父级(如图表本身)定义的事件。
6 在动作表中输入剩余动作,如图所示:
为决策分配真值表动作
你必须从动作表中为条件表中的每个决策分配至少一个动作。真值表使用此关联来确定当决策测试为真时执行什么动作。
决策动作分配规则
将动作分配给真值表中的决策时,以下规则适用:
通过在决策列的“Actions”行单元格中输入行号或标签,可以指定决策的动作。
如果使用标签说明符,则标签必须与动作一起出现在动作表中。
您必须为每个决策指定至少一个动作。
决策动作不是可选的。每个决策都必须至少有一个动作说明符,指向动作表中的动作。如果不想为决策指定任何动作,请指定一行不包含动作语句。
您可以使用逗号、分号或空格分隔的多个说明符为决策指定多个动作。
例如,对于决策列D1,可以指定A1、A2、A3或1;2.当决策D1为真时,执行前三个动作。
可以按任何顺序交替使用行号和标签动作说明符。
以下示例同时使用行和标签动作说明符。
可以为多个决策指定相同的动作,如图所示:
条件表动作行中的行号动作说明符会自动调整为动作表行顺序的变化。
如何为决策分配动作
本节介绍如何在真值表ttable中为决策分配动作。在此示例中,每个决策列的“Actions”行单元格都包含为“Action Table”中的每个动作指定的标签。请按照以下步骤操作:
1 单击决策列D1中的底部单元格,即条件表“Actions”行的第一个单元格。
2 为决策列D1输入动作说明符A1。
当D1为真时,执行动作表中的动作A1。
3 为其余决策列输入动作说明符:
添加初始和最终动作
除了决策动作外,您还可以将初始和最终动作添加到真值表函数中。初始动作指定在任何决策测试发生之前执行的动作。最终动作指定了一个动作,该动作作为真值表退出前的最后一个动作执行。要为真值表指定初始和最终动作,请使用 Action Table中的动作标签INIT和final。
使用此过程添加在执行真值表之前和之后在MATLAB命令窗口中显示诊断消息的初始和最终动作:
1在真值表中,右键单击“ Action Table ”的第1行,然后选择 Insert Row。
动d作表顶部出现一个空白行。
2 选择Edit > Append Row。
动作表底部出现一个空白行。
3 单击并拖动真值表的底部边框,以显示动作表的所有六行:
在第1行中添加初始动作,如下所示
在第6行添加最后一个动作,如下所示:
虽然前面真值表示例的初始和最终动作出现在Action Table的第一行和最后一行,但您可以在任何行中输入这些动作。您还可以通过在 Condition Table的Actions行中使用动作说明符INIT或final,为决策分配初始和最终动作。
下面进入实操,创建一个ttable真值表,返回值是r。
双击打开真值表,配置如下所示,然后生成代码
可以看到真值表函数就返回了一个456.前面的配置似乎都失效了。
所以我认为init和final是不能同时配置的。
现在我把final选项删除,然后看下代码,可以发现真值表初始值也有了,各种判断也有了。