# 编写真值表

双击真值表函数,即可打开真值表对话框。默认情况下,真值表包含一个条件表动作表,二者各有一行。条件表还包含一个决策列 D1 和一个动作行。

# 输入真值表条件

条件是在真值表中指定逻辑行为的起点。

条件表条件列中输入条件。对于所输入的每个条件,可以在描述列输入可选说明,在标签列输入可选标签。要为真值表 F 输入条件:

  1. 单击您要追加新行的条件表

  2. 单击工具栏中添加行按钮 一次。真值表会在条件表的底部追加一个空行。

  3. 单击并拉动分割条件表窗格与动作表窗格的横条,使条件表窗格变大。

  4. 条件表中,单击描述列顶部的单元格。带闪烁文本的光标会高亮显示在该单元格中,输入以下文本:

    x1 is bigger than 0
    
  5. 单击其右侧标签列中的相邻单元格。在标签列中输入可选标签:

    X1B0
    

    提示

    条件标签必须以字母字符([a-z][A-Z])开始,后接任意数量的字母数字字符([a-z][A-Z][0-9])或下划线(_)。

    条件标签不允许与其他条件和动作的标签重名,也不允许与真值表及其父类中管理的变量、事件重名。

  6. 单击其右侧条件列中的相邻单元格。输入条件文本:

    x1>=0
    

    提示

    所输入的每个条件计算结果必须为零(false)或非零(true)。

    条件的文本需要符合 Modelica 语义。

  7. 重复之前的步骤输入另一个条件。

# 输入真值表决策

每个决策列(D1、D2 等)通过 AND 关系运算符将一组条件结果绑定到一起形成一个决策。决策中条件结果的可能值包括 T(true)、 F(false) 和 -(true或false)。

在上述操作中,您已为真值表 F 输入了条件。接下来继续在决策列中输入值:

  1. 单击条件表中要追加新列的决策列 D1。

  2. 单击工具栏上的添加列按钮 三次。

  3. 单击决策列 D1 顶部的单元格。

  4. 按空格键,直到出现值 T。

    按空格键可以在可能的值 F、 T 和 - 之间切换。您还可以直接输入这些字符。按 1 会将值设置为 T,按 0 会将值设置为 F,按 x 会将值设置为 -。

  5. 为决策列输入其余值:

真值表执行期间,会按照从左到右的顺序进行决策测试。决策内各个条件结果的测试顺序未定义。真值表会按从上到下的顺序对每个决策的条件进行计算(首先是条件 1,然后是条件 2,以此类推)。由于这一实现在以后可能会有变化,因此请不要依赖某个特定的计算顺序。

默认决策列

真值表 F 最后一个决策列 D4 是此真值表的默认决策。该默认决策涵盖了之前的决策列中未测试到的其他所有决策。通过在最右侧决策列的每个单元格中输入-来创建一个默认决策。这个输入条目代表条件的任何结果,T 或 F。默认决策列必须是条件表右侧的最后一列。

# 输入真值表动作

真值表执行期间,会按从左到右的顺序进行决策测试。当实际结果与某一决策匹配时,即会执行在动作表的动作行中为该决策指定的动作。然后,结束并退出真值表的执行。

在上述操作中,您已为真值表输入了决策。下一步是在动作表中为每个决策输入要发生的动作。稍后,再将这些动作分配给条件表动作行中与之对应的决策。

设置动作表

  1. 单击您要追加新行的动作表

  2. 单击工具栏中添加行按钮 两次。

  3. 对真值表的动作进行编程。

对真值表的动作进行编程

  1. 单击动作表描述列顶部的单元格。带闪烁文本的光标会高亮显示在该单元格中,输入以下描述:

    set y to 10.
    
  2. 单击其右侧标签列中的相邻单元格。在标签列中输入可选标签:

    A1
    

    提示

    每个标签必须以字母字符([a-z][A-Z])开始,后接任意数量的字母数字字符([a-z][A-Z][0-9])或下划线(_)。

    动作标签不允许与其他条件或动作的标签重名。

  3. 单击其右侧动作列中的相邻单元格。输入以下文本:

    y = 10;
    

    提示

    此文本是真正的动作。动作的文本需要符合 Modelica 语义。

    在真值表中,暂不支持使用真值表的父对象(包括顶层状态机)定义的数据。

  4. 动作表中输入其余的动作,如下所示:

# 将真值表动作分配给决策

您必须为条件表中的每个决策分配至少一个动作表中的动作。真值表使用此关联来确定决策测试结果为 true 时要指定的动作。

为决策分配动作的规则

为真值表中的决策分配动作时,适用以下规则:

  • 您可以通过在决策列的动作行单元格中输入动作的行号或标签,来为决策指定动作。

    如果使用标签来指定动作,则动作表中的该动作必须具有标签。

  • 必须为每个决策指定至少一个动作。

    决策的动作是必不可少的。每个决策至少要有一个动作设定符,指向动作表中的动作。如果不想为决策指定动作,可以指定一个不包含任何动作语句的行。

  • 您可以为决策指定多个动作,以逗号、分号或空格分隔。

    例如,对于决策列 D1 ,您可以指定 A1, A2, A3 或 1; 2; 3,以在决策 D1 为 true 时,执行这三个动作。

  • 您可以按任意顺序混合使用行号和标签操作设定符。

  • 您可以为多个决策指定同一动作。

  • 条件表动作行中的行号动作设定符会根据动作表中行顺序的变化自动进行调整。

  • 条件表动作行中的标签设定符会根据动作表中标签的变化自动进行调整。

如何将动作分配给决策

此部分说明如何将动作分配给真值表 F 中的决策。在本示例中,每个决策列的动作行单元格都包含一个为动作表中的动作所指定的标签。请按照以下步骤操作:

  1. 单击决策列 D1 底部的单元格,即条件表动作行的第一个单元格。

  2. 为决策列 D1 输入动作设定符 A1。

    当 D1 为 true 时,执行动作表中的动作 A1。

  3. 为其余决策列输入动作设定符:

现在,您已准备就绪,可以执行编写真值表的最后一步。

# 添加初始动作和最终动作

除了为决策指定动作外,您还可以为真值表函数添加初始动作和最终动作。初始动作指定任何决策测试发生之前执行的动作。最终动作指定在退出真值表之前作为最后一个动作执行的动作。要为真值表指定初始动作和最终动作,请在动作表中使用动作标签 INIT 和 FINAL。

提示

初始动作和最终动作不要求在动作表的第一行和最后一行。