SA0118:不使用常量的初始化 检测未分配常量的初始化 理由:如果可能,初始化应该是常量,并且不应该引用其他变量。特别是,您应该避免在初始化期间调用函数,因为这可能允许访问未初始化的数据。 重要性:中等 例 109 . 例子 PROGRAM PLC_PRG VAR dwTemp : DWORD := 22; dwTest : DWORD := dwTemp; // SA0118 dwVar :
SA0124:声明中的指针取消引用 检测用于声明部分初始化的指针取消引用 理由:指针和引用不应该用于初始化,因为如果指针尚未初始化,这可能会导致访问冲突。 重要性:中等 例 110 . 例子 TYPE TESTSTRUCT : STRUCT xA : BOOL; xB : BOOL; END_STRUCT END_TYPE FUNCTION_BLOCK FB_Test VAR_INPUT pTes
SA0125:初始化中的引用 检测声明部分中用于初始化的引用变量 理由:指针和引用不应该用于初始化,因为如果指针尚未初始化,这可能会导致访问冲突。 重要性:中等 例 111 . 例子 TYPE TESTSTRUCT : STRUCT xA : BOOL; xB : BOOL; END_STRUCT END_TYPE FUNCTION_BLOCK FB_Test VAR_INPUT refTests
SA0140:注释掉的语句 检测注释掉的语句 理由:出于调试目的,代码经常被注释掉。当这种注释发布时,以后并不总是清楚代码是否应该被删除,或者它是否出于调试目的而被注释掉并且无意中没有被注释掉。 重要性:高 PLCopen 规则:C4 例 112 . 例子 PROGRAM PLC_PRG VAR iValue1: INT; iValue2: INT; END_VAR iValue1 := 100;
SA0046: 可能使用未初始化的接口 检测使用前未初始化的接口的使用情况 理由:接口引用在使用之前应该检查<> 0。否则访问过程中可能会出现访问冲突。 重要性:高 例 114 . 例子 //Declaration of INTERFACE ITF and assigned METH2: METHOD METH2 : BOOL VAR_INPUT iInput2:INT; END_VAR //De
SA0160:递归调用 检测功能块的动作、方法和属性中的递归调用。还检测来自虚拟函数调用和接口调用的可能递归。 理由:递归会导致不确定的行为,因此是错误的来源。 重要性:中等 PLCopen规则:CP13 例 117 . 例子 下面的方法 Call 分配给功能块 FB_Test : FUNCTION_BLOCK FB_Test VAR bParameter: BOOL; END_VAR METHO
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_