标志
功能 :此对话框将激活CODESYS Static Analysis 轻量版在每次生成代码时执行的测试。
请致电 :菜单栏:“项目 项目设置” (“静态分析灯” 类别)。
通过使用 pragma{analysis ...}
或 pragma{attribute 'analysis' := '...'}
标记代码,您可以将代码行排除在静态代码分析之外。
附加编译测试
“SA0033:未使用的变量” |
查找已声明但未在编译后的程序代码中使用的变量。 对于 GVL 变量:如果一个项目中有多个应用程序,则只有当前活动应用程序下的对象会受到影响。如果只有一个应用程序,那么 |
“SA0028:重叠的内存区域” |
检测两个或多个变量保留相同存储空间的位置。例如,下列声明就会出现这种情况: |
“SA0006:多个任务的写入访问” |
检测由多个任务写入的变量。 |
SA0004“对输出的多次写入访问” |
检测写入一个以上位置的输出。 请注意:在 请注意:pragma 不能停用此规则。 |
“SA0027:多重使用标识符” |
检测项目范围内变量或对象 (POU) 名称/标识符的多次使用。 检测到以下情况:
|
“SA0167:临时功能块实例” |
该测试可检测声明为临时变量的功能块实例。这涉及到在方法或函数中声明的实例,或作为 |
示例
SA0003:空洞的陈述
; (* Comment *); iVar;
SA0006:并发访问
FUNCTION_BLOCK ADD_FB g_iTemp1 := g_iTemp1 + INT#1;
PROGRAM PLC_PRG //controlled by MainTask g_iTemp1 := g_iTemp1 + INT#2; g_xTemp2 := g_iTemp1 > INT#10;
PROGRAM PLC_PRG_1 //controlled by SubTask g_iTemp1 := g_iTemp1 - INT#3; g_xTemp2 := g_iTemp1 < INT#-10;
SA0004对输出的多次写入访问
VAR_GLOBAL g_xVar AT %QX0.0 : BOOL ; g_iTest AT %QW0 : INT ; END_VAR
PROGRAM PLC_PRG IF iCondition < INT#0 THEN g_xVar := TRUE; g_iTest := INT#12; END_IF
CASE iCondition OF INT#1: g_xVar := FALSE; INT#2: g_iTest := INT#11; ELSE g_xVar := TRUE; g_iTest := INT#9; END_CASE
SA0006:多个任务的写入访问
FUNCTION_BLOCK ADD_FB g_iTemp1 := g_iTemp1 + INT#1; PROGRAM PLC_PRG // Controlled by MainTask g_iTemp1 := g_iTemp1 + INT#2; g_xTemp2 := g_iTemp1 > INT#10; PROGRAM PLC_PRG_1 //Controlled by SubTask g_iTemp1 := g_iTemp1 - INT#3; g_xTemp2 := g_iTemp1 < INT#-10;
SA0027:名称的多重使用
PROGRAM PLC_PRG VAR ton : INT; // error SA0027 END_VAR
SA0029:执行和声明中的符号不同
PLC_PRG
POU 和一个fnc
功能 POU 位于设备树中。
PROGRAM PLC_PRG VAR iVar:INT; _123test_var_: INT; END_VAR ivar := iVar + 1; // notation different to that in the declaration part -> SA0029 _123TEST_var_ := _123test_var_INT; // notation different to that in the declaration part -> SA0029 Fnc(); // notation different to that in the devices tree -> SA0029 END_VAR
SA0167:临时功能块实例
PROGRAM PLC_PRG VAR END_VAR VAR_TEMP yafb: AFB; END_VAR FUNCTION Fun : INT VAR_INPUT END_VAR VAR funafb: AFB; END_VAR METHOD METH: INT VAR_INPUT END_VAR VAR methafb: AFB; END_VAR
另见