3. 使用真值表实现逻辑决策

使用真值表实现逻辑决策 学习卡片

任务说明

在Simulink/Stateflow中,当控制逻辑表现为“多输入条件组合决定输出”时,使用真值表(Truth Table)比逐个编写if-else转移更直观、易维护。本案例创建一个包含3个布尔输入(A、B、C)和1个布尔输出(Y)的真值表,实现逻辑:Y = (A && B) || C,并通过真值表驱动Stateflow中的状态转移——当输出为真时进入ACTIVE状态,否则停留在IDLE状态。

环境依赖

  • MATLAB R2020b或更新版本(含Stateflow许可证)
  • Simulink与Stateflow工具箱

实现步骤

  1. 在MATLAB命令窗口输入sfnew创建空白Stateflow图。
  2. 双击图表进入编辑界面,从左侧面板拖入一个Truth Table块。
  3. 双击真值表块,按下方代码定义输入、输出与条件表。
  4. 在图表中添加两个状态IDLE和ACTIVE,用默认转移连接(初始转移指向IDLE)。
  5. 从IDLE到ACTIVE的转移条件写为[Y == true],从ACTIVE回到IDLE的条件写为[Y == false]。
  6. 在图表中添加输入事件或输入端口:右键图表→Add Input Port,添加A、B、C三个布尔输入;添加输出端口Y。

关键完整代码

以下为真值表块内部定义(在Truth Table属性对话框中填写):

% 输入定义
A = {Inputs, 'boolean'};
B = {Inputs, 'boolean'};
C = {Inputs, 'boolean'};

% 输出定义
Y = {Outputs, 'boolean'};

% 条件表(每行:A B C | Y)
ConditionTable = [
    true  true  true  | true;
    true  true  false | true;
    true  false true  | true;
    true  false false | false;
    false true  true  | true;
    false true  false | false;
    false false true  | true;
    false false false | false;
];

% 动作表(每行对应条件表为真时的输出赋值)
ActionTable = {
    'Y = true;';
    'Y = true;';
    'Y = true;';
    'Y = false;';
    'Y = true;';
    'Y = false;';
    'Y = true;';
    'Y = false;';
};

在真值表属性对话框中,将Condition Table和Action Table分别粘贴到对应编辑区,并设置输入/输出名称与上述代码一致。

运行与验证

  1. 在Simulink模型中添加一个Signal Builder或Constant块组合,为A、B、C提供测试序列。
  2. 添加Scope连接到输出Y和当前状态(可通过Stateflow的Active State输出端口获取)。
  3. 点击Run仿真,仿真时间设为10秒。

通过判定标准:观察Scope波形,当输入组合满足(A&&B)||C为真时,状态输出显示为ACTIVE(通常编码为1或2),Y输出为高电平;否则状态为IDLE,Y为低电平。例如测试序列:A=1,B=1,C=0时Y应为1且状态为ACTIVE;A=1,B=0,C=0时Y应为0且状态为IDLE。

预期输出示例

对于输入组合A=true, B=false, C=true,真值表第3行匹配,输出Y=true,状态从IDLE转移到ACTIVE。该结果由真值表定义直接唯一推出,可用于核对模型配置是否正确。