静态分析灯

概述

在项目下载到目标系统之前,静态分析功能检查项目的源代码是否与某些编码指令存在偏差。这沿用了 lint 分析工具的基本理念。

确保在项目设置 > 静态分析灯对话框中定义了所需的规则集。

注: 每次生成代码时,会自动执行检查。

如果与规则存在偏差,则会以类别为生成的消息的形式显示在消息视图中。错误编号显示为SA<编号>的形式。

注: 仅对当前项目中的应用程序代码执行分析。不考虑库。
注: 对于 GVL 变量:如果项目中有多个应用程序,则仅检查当前活动应用程序下的对象。如果项目中只有一个应用程序,则也会检查 POU 池中的所有对象。

静态分析灯的 pragma 和属性

借助 pragma 指令,您可以将代码的某些部分排除在检查之外。

前提条件:必须在项目设置中激活规则。

注: 规则 SA0004:无法通过 pragma 禁用“在输出上有多个写访问”。

Pragma {analysis ...}

您可以使用 pragma {analysis ...} 来禁用后续代码行的特定编码规则。为此,将其置于:相关代码上方的行中(禁用),以及相关代码下方的行中(重新启用);要禁用的规则的编号在指定时其前面都必须添加减号 ()(对于禁用),或者添加加号 (+)(对于重新启用)。根据规则,pragma 可以用在编程对象的声明部分中或实现部分中。

语法

{analysis <sign><rule number>|,<other combinations of signs and rules, comma-separated>}
  • -<rule number>: 禁用规则 SA<规则编号>。

  • +<rule number>: 激活规则 SA<规则编号>。

示例

为两行禁用了规则 24(这就意味着,这里不必写入(比如)nTest:=DINT#99),之后此规则被重新启用。

{analysis -24}
nTest := 99;
iVar := INT#2;
{analysis +24}

指定多个规则:

{analysis -10, -24, -18}

属性 {attribute 'analysis' := '...'}

您可以在声明部分中使用属性 {attribute 'analysis' := '<sign><rule number>'} 来为整个编程对象启用或禁用特定规则:

语法

{attribute 'analysis' := '<sign><rule number>|,<further rule numbers separated by commas>'}

示例

为整个结构禁用规则 SA0033 和 SA0031:

{attribute 'analysis' := '-33, -31'}
TYPE My_Structure :
STRUCT
    iLocal : INT;
    uiLocal : UINT;
    udiLocal : UDINT;
END_STRUCT
END_TYPE

为数组禁用规则 SA0100:

{attribute 'analysis' := '-100'}
big: ARRAY[1..10000] OF DWORD;