SA0065:添加到基本大小的指针不正确 检测要添加的值与指针的基本大小不匹配的指针添加。只能添加基本数据大小及其倍数的文字而不会出现错误。 理由:在 CODESYS (与 C 和 C++ 相反),当添加具有整数值的指针时,仅将该整数值添加为字节数,而不是整数值乘以基本大小。 例 75 . ST 中的示例 pINT := ADR(array_of_int[0]); pINT := pINT + 2
定义命名约定 在里面 静态分析设置 对话框,在 命名约定 选项卡,定义您将在代码中遵循的命名约定。您可以根据其范围和限定符为 POU、变量和数据类型的标识符定义前缀。 然后,您可以让静态分析检查命名约定的合规性。 有关说明,请参阅: 检查是否符合定义的命名约定 定义前缀 在里面 静态分析设置 对话框,在 命名约定 选项卡,在输入字段中定义命名约定 字首 柱子。 字符字面量 例子: PRG_ 在 P
SA0024:无类型文字/常量 标识属于操作一部分的无类型文字 理由:无类型文字会根据其用法自动类型化。在某些情况下,例如 dw := ROL(DWORD#1, i); ,这可能会导致意外的情况,最好使用类型化文字来提供独特的说明。 重要性:低 例 35 . 例子 PROGRAM PLC_PRG VAR iTemp1 : INT := 10; //no part of operation diTe
SA0061:指针上的异常操作 检测操作一种类型的变量 POINTER TO 哪些不是 = (平等), <> (不等式), + (加法),或 ADR . 在 CODESYS , 指针算术一般是允许的,也可以适当使用。因此,将指针与整数值相加被认为是对指针的常见操作。这使得可以使用指针来处理可变长度的数组。使用 SA0061 报告所有其他(不寻常的)指针操作。 重要性:高 PLCopen 规则:E2
不断传播 随着 CODESYS Static Analysis 版本V5.0.0.0,代码的分析基于常量传播。恒定传播的结果用于各种检查。例如,它检查指针是否不等于 0,或者数组索引是否超出有效范围。 只需了解静态分析的工作原理及其局限性,您就可以有效地支持静态分析。 不断传播 静态分析尝试根据变量的用途来确定变量的值。 例 1 . 例子 PROGRAM PLC_PRG //Declaration
SA0064:添加指针 检测指针的添加 理由:在 CODESYS ,指针运算一般是允许的,也可以适当使用。然而,它也代表了错误的来源。因此,存在通常禁止指针运算的编程规则。这个测试可以检查这样的需求。 重要性:中等 例 74 . 例子 PROGRAM PLC_PRG VAR iTest : INT; ariTest : ARRAY[0..10] OF INT; {attribute 'analys
SA0102:从外部访问程序/fb变量 检测对程序或功能块的局部变量的外部访问。 理由: CODESYS 允许对程序或功能块的局部变量进行外部读取访问。这违背了数据封装(隐藏数据)的原则,不符合IEC 61131-3标准。 重要性:中等 例 90 . 例子 PROGRAM PLC_PRG VAR iCounter : INT; afb_Instance : AFB; bfb_Instance :
SA0107:缺少形式参数 检测是否缺少形式参数 理由:在调用中指定形式参数时,代码变得更具可读性。 重要性:低 例 94 . 例子 FUNCTION FUNA : BOOL VAR_INPUT bDo : BOOL; bInit : BOOL; bManual : BOOL; END_VAR VAR iInit : INT; iLocal : INT; iManual : INT; END_VA
命令:反转 IF 语句 功能 :该命令反转 IF 声明不改变语义 IF 陈述。条件被否定。中的陈述 THEN 和 ELSE 分支被交换。所有评论均被保留。 称呼 :上下文菜单下 重构 命令 要求:光标位于任意位置 之内 一个 IF 陈述。 表 2 . 否定规则 表达 否定表达 描述 < >= “小于”的比较变为“大于”,反之亦然。 <= > “小于或等于”的比较变为“大于”,反之亦然。 = <>
SA0057:可能丢失小数位 检测可能丢失小数位的语句 理由:以下类型的一段代码( diTemp2 := 1 rTemp1 := TO_REAL(diTemp2 / DINT#2) ) 可能会导致误解。这行代码的作者或读者可以假设除法将作为 REAL 操作,在这种情况下,结果将是 REAL#0.5 .然而,事实并非如此。它是一个整数运算。结果被转换为 REAL 和 rTemp1 获取值 REAL#