主要内容

检查 If 模块中的逻辑表达式

检查 IDmathworks.maab.na_0003

规范:na_0003:If 模块的使用

描述

检查 If 模块中逻辑表达式的主表达式是否构造不当。

标识 If 模块中主表达式过于复杂的情形。

主表达式被定义为:

  • 一个输入

  • 一个常量

  • 一个常数参数

  • 一个括号表达式,只包含零或特定运算符(<>>=<===~=|&~)。

主表达式的示例包括:

  • u1

  • 5

  • K

  • (u1 > 0)

  • (u1) ≤ G

  • (u1 > U2)

  • (~u1)

可接受的逻辑表达式例外示例包括:

  • u1 | u2

  • ((u1 > 0) & (u1 < 20)

  • (u1 > 0) & (u2 < u3)

  • (u1 > 0) & (~u2)

下表提供了不可接受的逻辑表达式的示例。

主表达式原因

u1 & u2 | u3

主表达式过多。

u1 & (u2 | u3)

主表达式中包含不可接受的运算符。

(u1 > 0) & (u1 < 20) & (u2 > 5)

非输入类型的主表达式过多。

(u1 > 0) & ((2* u2) > 6)

主表达式中包含不可接受的运算符。

例外

当同时满足以下两个条件时,一个逻辑表达式可以包含两个以上的主表达式:

  • 主表达式均为输入。

  • 仅存在一种逻辑运算符。

可接受的例外情况示例包括:

  • u1 | u2 | u3 | u4 | u5

  • u1 & u2 & u3 & u4

简单的 "If" 表达式

根据规范 na_0003 的字面解释,表达式 u1 < u2 属于违规。然而,该表达式遵循常用的 "If" 表达式模板(<主表达式><运算符><主表达式>)。因此,当不使用逻辑运算符且仅存在一个关系运算符时,该表达式满足规范 na_0003u1 < u2 并不违规。

此检查需要 Simulink® Check™ 许可证。

检查参数化

此检查不包括子检查,因为 MAB 建模规范仅提供一个子 ID。

作为参考,NA-MAAB 和 JMAAB 建模标准组织建议使用的 MAB 规范子 ID 为:

  • NA-MAAB - 无建议

  • JMAAB - a

结果和建议的操作

条件建议的操作
逻辑表达式包含两个以上的主表达式,每个主表达式由一个常量、常量参数和输入组成。

考虑以下项之一:

  • 将主表达式作为输入,并执行以下操作之一:

    • 使用包含一个关系运算符类型的括号表达式

    • 构建一个简单的 "If" 表达式,使用模板
      <主表达式><逻辑运算符><主表达式>

  • 将主表达式的数量减少到两个或更少。

  • 使用除 If 模块以外的逻辑模块构造逻辑表达式。

逻辑表达式包含两个以上的括号表达式,且这些表达式使用了多个关系运算符。

考虑以下项之一:

  • 仅使用一种关系运算符。可接受的逻辑运算符包括 <>>=<===~=|&~。主表达式必须仅包含输入。

  • 将括号表达式的数量减少到两个或更少。

  • 使用除 If 模块以外的逻辑模块构造逻辑表达式。

括号表达式包含除零或 <>>=<===~=|&~ 之外的关系运算符。

考虑以下项之一:

  • 在括号表达式中使用关系运算符 <>>=<===~=|&~

  • 使用除 If 模块以外的逻辑模块构造逻辑表达式。

功能和限制

  • 不会对仅使用以下任一相对运算符的逻辑表达式进行标记:<>>=<===~=|&~

  • 对库模型运行。

  • 可以分析库链接模块的内容。默认情况下,输入参数 Follow links 设置为 on

  • 可以分析封装子系统中的内容。默认情况下,输入参数 Look under masks 设置为 graphical