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
SA0117:数据类型为 BIT 的变量 检测数据类型的变量声明 BIT (可能在结构定义内) 理由:IEC 61131-3 标准不包含数据类型 BIT 。该代码更容易移植,无需 BIT 。 重要性:低 例 100 . 例子 TYPE Struct1 : STRUCT bitVar : BIT; iVar : INT; bVar : BOOL; END_STRUCT END_TYPE 输出在 留言
SA0119:面向对象的特性 检测面向对象功能的使用,例如功能块声明 EXTENDS 和 IMPLEMENTS ,或属性和接口声明。当您编写旨在移植到其他符合 IEC 61131-3 的系统的代码时,此规则很有用。 理由:并非所有系统都支持面向对象编程。没有面向对象的代码更容易移植。 重要性:低 例 101 . 例子 //Function block extended by another and
SA0120:程序调用 检测程序调用 说明:根据IEC 61131-3标准,程序只能在任务配置中调用。当您不从其他位置调用程序时,代码更容易移植。 重要性:低 例 102 . 例子 PROGRAM prog_control VAR END_VAR ; PROGRAM PLC_PRG VAR END_VAR prog_control(); 输出在 留言 看法: SA0120:不允许程序调用“prg_