SA0165:调用其他 POU 而非程序的任务 检测调用功能块或函数而不是程序的任务 理由:此规则是 PLCopen 编码指南的一部分。因此,还检查了合规性 CODESYS .我们没有看到任何数据一致性问题 CODESYS 如果任务会调用程序以外的 POU。但是,如果要将代码移植到其他平台,则可能会出现问题。 重要性:低 PLCopen规则:CP16 任务被插入到任务配置下方。要调用的 POU 在
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
SA0035:未使用的输入变量 检测未被任何功能块实例使用的输入变量 理由:未使用的变量使程序的可读性和可维护性降低。未使用的变量不必要地填充内存并在初始化期间不必要地浪费运行时间。 重要性:中等 PLCopen规则:CP24 例 43 . 例子 FUNCTION_BLOCK FB_Afb VAR_INPUT iIn1: INT; iIn2: INT; END_VAR VAR_OUTPUT iOu
SA0036:未使用的输出变量 确定未在相关功能或功能块内分配的功能和功能块的输出变量。 理由:未使用的变量使程序的可读性和可维护性降低。未使用的变量不必要地填充内存并在初始化期间不必要地浪费运行时间。 重要性:中等 PLCopen规则:CP24 例 44 . 例子 FUNCTION_BLOCK FB_Afb VAR_INPUT iIn1: INT; iIn2: INT; END_VAR VAR_
SA0042:使用不同的访问路径 检测同一变量的不同访问路径的使用情况 理由:对同一元素的不同访问会降低程序的可读性和可维护性。我们建议一致使用 {attribute 'qualified-only'} 用于库、全局变量列表和枚举。这会强制进行完全限定的访问。 重要性:低 例 50 . 例子 VAR_GLOBAL iTemp:INT; instPOU:POU; END_VAR FUNCTION_B
SA0140:注释掉的语句 检测注释掉的语句 理由:出于调试目的,代码经常被注释掉。当这种注释发布时,以后并不总是清楚代码是否应该被删除,或者它是否出于调试目的而被注释掉并且无意中没有被注释掉。 重要性:高 PLCopen 规则:C4 例 112 . 例子 PROGRAM PLC_PRG VAR iValue1: INT; iValue2: INT; END_VAR iValue1 := 100;
SA0039:可能的空指针引用 检测可能取消引用空指针的代码位置 理由:在每次取消引用之前应检查指针以确保它不等于零。否则,运行时可能会发生访问冲突。 重要性:高 例 113 . 例子 PROGRAM PLC_PRG VAR ptiVar1:POINTER TO INT; ptiVar2:POINTER TO INT; ptiVar3:POINTER TO INT; iVar:INT; iCoun
SA0150:违反下限或上限或指标 检测违反下限或上限激活指标的 POU 理由:符合某些指标的代码更易于阅读、更易于维护和更易于测试。 重要性:高 PLCopen规则:CP9 例 116 . 例子 初始情况: 通话次数 指标选择在 项目设置→静态分析→指标 .下限: 0 ;上限: 3 . Prog_1 被调用五次。 运行静态分析时, SA0150:Prog_1 的度量违规。指标调用报告 (5) >