SA0162:缺少注释 检测程序中未注释的位置 理由:许多编程指南都要求完整的注释,它增加了代码的可读性和可维护性。 重要性:低 PLCopen 规则:C2 在以下情况下需要注释: 对于变量的声明。评论位于上方或右侧。 用于程序、功能块或方法的声明。注释位于声明上方(第一行)。 例 119 . 例子 PROGRAM PLC_PRG VAR iMaxValue: INT; END_VAR 输出在 留
SA0163:嵌套注释 检测嵌套评论 理由:应避免嵌套注释,因为它们难以阅读。 重要性:低 PLCopen 规则:C3 例 120 . 例子 {attribute 'do-analysis'} (* That is (* nested comment 1 *) *) PROGRAM PLC_PRG VAR (* That is // nested comment 2 comment *) iVal
SA0164:多行注释 检测编码为的多行注释 (* comment *) .仅编码为的单行注释 // comment 被允许。 理由:一些编程指南禁止代码中的多行注释,因为注释的开头和结尾可能会丢失,并且结束注释括号可能会被意外删除。 提示 您可以通过编译指示停用此检查 analysis ,也用于声明部分的注释。 重要性:低 PLCopen规则:C5 例 121 . 例子 {attribute '
SA0165:调用其他 POU 而非程序的任务 检测调用功能块或函数而不是程序的任务 理由:此规则是 PLCopen 编码指南的一部分。因此,还检查了合规性 CODESYS .我们没有看到任何数据一致性问题 CODESYS 如果任务会调用程序以外的 POU。但是,如果要将代码移植到其他平台,则可能会出现问题。 重要性:低 PLCopen规则:CP16 任务被插入到任务配置下方。要调用的 POU 在
SA0166:最大。输入/输出/输入输出变量的数量... 检测是否有定义数量的输入变量 ( VAR_INPUT ), 输出变量 ( VAR_OUTPUT ) 或者 VAR_IN_OUT 在 POU 中超出变量。在里面 项目设置 ,双击规则条目以打开一个对话框,您可以在其中定义最大数量。 理由:这是关于检查个人编程指南。许多编程指南都规定了 POU 参数的最大数量。太多的参数使代码不可读,POU 难
SA0167:临时功能块实例 检查检测声明为临时变量的功能块实例。这会影响在方法或函数中声明的实例,或者 VAR_TEMP ,因此在每个处理周期或每个 POU 调用中重新初始化。 理由: 功能块的状态通常在多个 PLC 周期内维持。堆栈上的实例仅在函数调用期间存在。因此,创建实例作为临时变量几乎没有意义。 其次,功能块实例通常很大,并且需要大量堆栈空间(通常仅限于控制器)。 第三,功能块的初始化以
SA0169:忽略的输出 检测调用方法或函数时未指定的方法和函数的输出。 理由:忽略的输出可能是关于未处理错误或无意义函数调用的通知,因为未使用结果。 重要性:中等 例 126 . 例子 FUNCTION Fun1 VAR_INPUT bIn : BOOL; VAR_END VAR_OUTPUT bOut : BOOL; END_VA ; PROGRAM PLC_PRG VAR bValue :B
SA0170:不应使用输出变量的地址 检测输出变量地址所在的代码位置( VAR_OUTPUT , VAR_IN_OUT 使用功能块的 )。 理由: 不允许按以下方式使用功能块输出的地址: 通过 ADR 操作员 通过 REF= 例外:如果在同一功能块中使用输出变量,则不会报告错误。 重要性:中等 例 127 . 例子 功能块 FB1 有 VAR_OUTPUT 多变的 iOutVal : INT; 另
SA0171:枚举应具有“strict”属性 检测未提供的枚举声明 {attribute 'strict'} 属性。 理由: {attribute 'strict'} 如果代码违反了严格的枚举编程规则,属性会导致编译器错误。默认情况下,创建新枚举时,声明会自动分配 'strict' 属性。 有关更多信息,请参阅: 数据类型:枚举 重要性:高 例 128 . 例子 TYPE COLOR : ( re
SA0172:可能尝试访问数组边界之外 检测对数组边界之外的数组索引的可能访问。 通常会超出数组索引的范围 FOR 循环,其中索引变量用于访问数组索引。 重要性:高 例 129 . 例子 PROGRAM Test VAR_TEMP iIndex: INT; arUSINT: Array[0..10] OF INT; END_VAR FOR iIndex := INT#0 TO INT#50 DO