SA0039:可能的空指针引用 检测可能取消引用空指针的代码位置 理由:在每次取消引用之前应检查指针以确保它不等于零。否则,运行时可能会发生访问冲突。 重要性:高 例 113 . 例子 PROGRAM PLC_PRG VAR ptiVar1:POINTER TO INT; ptiVar2:POINTER TO INT; ptiVar3:POINTER TO INT; iVar:INT; iCoun
SA0046: 可能使用未初始化的接口 检测使用前未初始化的接口的使用情况 理由:接口引用在使用之前应该检查<> 0。否则访问过程中可能会出现访问冲突。 重要性:高 例 114 . 例子 //Declaration of INTERFACE ITF and assigned METH2: METHOD METH2 : BOOL VAR_INPUT iInput2:INT; END_VAR //De
SA0145:可能使用未初始化的引用 检测任何在使用前可能未初始化且操作员未检查的参考变量 __ISVALIDREF .该规则适用于 POU 的实现部分。对于声明,有规则 SA0124 . 理由:访问前应检查引用的有效性,因为访问期间可能会发生访问冲突。 重要性:高 例 115 . 例子 PROGRAM PLC_PRG VAR_INPUT ref_iTest : REFERENCE TO INT;
SA0150:违反下限或上限或指标 检测违反下限或上限激活指标的 POU 理由:符合某些指标的代码更易于阅读、更易于维护和更易于测试。 重要性:高 PLCopen规则:CP9 例 116 . 例子 初始情况: 通话次数 指标选择在 项目设置→静态分析→指标 .下限: 0 ;上限: 3 . Prog_1 被调用五次。 运行静态分析时, SA0150:Prog_1 的度量违规。指标调用报告 (5) >
SA0160:递归调用 检测功能块的动作、方法和属性中的递归调用。还检测来自虚拟函数调用和接口调用的可能递归。 理由:递归会导致不确定的行为,因此是错误的来源。 重要性:中等 PLCopen规则:CP13 例 117 . 例子 下面的方法 Call 分配给功能块 FB_Test : FUNCTION_BLOCK FB_Test VAR bParameter: BOOL; END_VAR METHO
SA0161:压缩结构中的未压缩结构 检测在打包结构中使用的未打包结构 理由:编译器通常将解包结构设置为一个地址,该地址允许对结构内的所有元素进行对齐访问。如果您在打包结构中创建此结构,则不再可能进行对齐访问。此外,访问解压缩结构中的元素可能会导致“未对齐异常”。 重要性:高 例 118 . 例子 结构 structSingleDataRecord 已打包,但它包含未打包的结构 struct4By
SA0113:数据类型为 WSTRING 的变量 检测类型变量 WSTRING 理由:并非所有系统都支持 WSTRING .代码更容易移植,无需 WSTRING . 重要性:低 例 97 . 例子 VAR wstrTemp : WSTRING; END_VAR 输出在 留言 看法: SA0113:不允许数据类型 WSTRING 本节内容如下 :
SA0114:数据类型为 LTIME 的变量 检测类型变量 LTIME 理由:并非所有系统都支持 LTIME 代码更容易移植,无需 LTIME . 重要性:低 例 98 . 例子 VAR ltVar : LTIME; // SA0114 END_VAR 输出在 留言 看法: SA0114:不允许数据类型 LTIME 有关更多信息,请参阅: 属性“分析:报告多实例调用” 本节内容如下 :
SA0115:数据类型为 UNION 的变量 检测 a 的声明 UNION 数据类型和变量声明 UNION 类型 理由:IEC 61131-3 标准不包括工会。该代码在没有联合的情况下更容易移植。 重要性:低 例 99 . 例子 TYPE A_UNION: UNION lrTemp : LREAL; liTemp : LINT; END_UNION END_TYPE PROGRAM PLC_PRG