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_
SA0121:缺少 VAR_EXTERNAL 声明 检测功能块中全局变量的使用,而无需将其声明为 VAR_EXTERNAL 理由:根据 IEC 61131-3 标准,只有通过显式导入才允许访问全局变量 VAR_EXTERNAL 宣言。 重要性:低 PLCopen规则:CP18 例 103 . 例子 VAR_GLOBAL iGlob1 : INT; END_VAR PROGRAM PLC_PRG V
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