SA0038: 对输出变量的读访问 检测输出变量( VAR_OUTPUT ) 可以通过 POU 内的读取权限进行访问 理由:根据 IEC 61131-3 标准,禁止读取 POU 内的输出。这表明输出不仅用作输出,而且还用作中间结果的临时变量。应该避免这种双重用途。 重要性:低 例 47 . 例子 VAR_GLOBAL g_xGlob AT %QX0.0 : BOOL ; g_iGlob AT %Q
SA0041:检测可能的循环不变代码 检测循环中为每个循环周期计算相同值的分配。这些代码行可以插入到循环之外。 理由:这是一个性能警告。在循环中执行但在每个循环中执行相同操作的代码可以在循环外执行。 重要性:中等 例 49 . 例子 PROGRAM PLC_PRG VAR iCounter, iVar1, iVar2 : INT; END_VAR FOR iCounter := 0 TO 10 D
SA0039:可能的空指针引用 检测可能取消引用空指针的代码位置 理由:在每次取消引用之前应检查指针以确保它不等于零。否则,运行时可能会发生访问冲突。 重要性:高 例 113 . 例子 PROGRAM PLC_PRG VAR ptiVar1:POINTER TO INT; ptiVar2:POINTER TO INT; ptiVar3:POINTER TO INT; iVar:INT; iCoun
SA0122:数组索引定义为表达式 检测数组索引声明中表达式的使用 理由:并非所有系统都允许将表达式作为数组限制。 重要性:低 例 105 . 例子 PROGRAM PLC_PRG VAR CONSTANT c_iValue : INT := INT#15; END_VAR VAR arr : ARRAY [0..c_iValue + 1] OF INT; END_VAR 输出在 留言 看法: S
语用:analysis 此 pragma 用于停用 POU 的各个代码行的代码规则,以便将它们排除在 静态分析 .您可以通过指定带有前置减号 ("-") 的规则编号来停用代码规则。前置加号 ("+") 激活规则。您可以在 pragma 中指定任意数量的规则。 插入位置 :停用:在实现部分,用 {analysis - ...} 在停用代码分析的第一个代码行之前。激活:有 {analysis + ..
属性:analysis:report-multiple-instance-calls 该属性标记了用于检查规则的功能块 规则 105 :仅检查具有该属性的功能块是否多次调用功能块实例。当规则 105 在 项目设置 ,该属性没有任何作用。 插入位置 : 功能块声明部分的顶行。 句法 : {attribute 'analysis:report-multiple-instance-calls'} 例子
对话框:静态分析设置 - 命名约定 功能 :在对话框中,您 定义 变量的数据类型和范围的前缀,以及 POU 和用户定义的数据类型 (DUT) 的前缀。静态分析检查 遵守 与命名约定。当未遵守约定时,静态分析会在 留言 看法。有关更多信息,请参阅: 配置和运行静态分析 称呼 : 项目 → 项目设置 菜单, 静态分析 类别, 打开配置对话框 关联 构建→静态分析→设置 菜单 要求 : 这 CODESY
ST 代码中违反规则的快速修复 在里面 静态分析设置 对话框,在 规则 选项卡,您可以启用 ST 代码的规则。根据预编译信息检查这些规则的合规性。不需要显式调用静态分析来检测任何此类违反规则的行为。在预编译期间和成功编译之后,在活动的 ST 编辑器中检查是否符合规则。当发生违反规则时,它会立即在 ST 编辑器中以波浪下划线显示。此外,在消息视图中,错误消息或警告列在 预编译 看法。 有关说明,请参
SA0106:FB_INIT 中的虚拟方法调用 检测方法调用 FB_Init 基本功能块的方法,被从基本功能块派生的功能块覆盖 理由:在这些情况下,可能是覆盖方法中的变量未在基础 FB 中初始化。 重要性:高 例 93 . 例子 功能块 FB_A 包括方法 FB_Init 和 Meth_MyInit . FB_Init 来电 Meth_MyInit 用于初始化。功能块 FB_B 来源于 FB_A
SA0020:可能将截断的值分配给 REAL 变量 检测对整数变量的操作,其截断值可以分配给 REAL 数据类型变量 理由:当整数计算的结果分配给一个 REAL 或者 LREAL 多变的。应该提醒程序员注意对这种赋值的可能错误解释: lrealvar := dintvar1 * dintvar2 . 因为取值范围 LREAL 大于 DINT ,可以假设计算的结果总是可以表示为 LREAL .但事实