命令:检测克隆 功能 :命令扫描打开的程序代码 CODESYS 复制代码的项目,然后打开 克隆检测结果 查看以显示检测到的克隆代码块。在这个过程中,只有大于特定大小的代码块才被认为是克隆。非常小的代码块不会显示为克隆。 在这种情况下,还要注意 提取功能 和 检测代码克隆 指示。 称呼 : 构建 → 静态分析 菜单 静态分析 上下文菜单 要求 : 这 CODESYS Static Analysis
对话框 对于配置静态代码分析的对话框,单击 构建→静态分析→设置 .要求:一个 CODESYS 项目必须打开。 本节内容如下 :
对话框:静态分析设置:设置 功能 :在对话框中,选择自动 静态分析 ,并将静态分析的项目设置保存或加载为 CSA 文件。 项目 → 项目设置 菜单, 静态分析 类别, 打开配置对话框 关联 构建→静态分析→设置 菜单 要求 : 这 CODESYS Static Analysis 包已安装。 一个项目已打开。 自动执行静态分析 : CODESYS Static Analysis 在每次代码生成时自动
SA0001:无法访问的代码 检测未执行的代码行,例如由于 RETURN 或者 CONTINUE 陈述 理由:应始终避免无法访问的代码。这 测试 通常表明测试代码仍然存在,应该删除。 重要性:高 PLCopen 规则:CP2 例 14 . 例子 PROGRAM PLC_PRG VAR xReturn_Before_End: BOOL; xContinue_In_Loop_FUN: BOOL; iC
SA0002:空对象 检测不包含任何代码的 POU、GVL、数据类型声明或接口 理由:应该避免空对象。它们通常表明对象尚未完全实现。例外:在某些情况下,当功能块只应由接口使用时,没有在功能块主体中指定代码。在其他情况下,创建一个方法只是因为接口需要该方法,而对该方法没有合理的实现。无论如何,这种情况都应该被评论。 重要性:中等 本节内容如下 :
SA0003:空语句 检测带有分号 ( ; ) 但不是声明 理由:空语句可能是缺少代码的标志。 注意:使用空语句有充分的理由。例如,在一个 CASE 声明明确地编程出所有情况是有意义的,即使是那些无事可做的情况。当这种空 CASE 语句包含注释,静态分析不会生成错误消息。 重要性:低 例 15 . 例子 CASE value OF 1: DoSomething(); 2: ; 3: DoSomet
SA0006:来自多个任务的写访问 检测由多个任务写入的变量。 理由:在多个任务中写入的变量可能会意外更改其值。这可能会导致混乱的情况。如果同时将变量写入两个任务,则字符串变量(在某些 32 位系统上还有 64 位整数变量)甚至会达到不一致的状态。 例外:在特定情况下,可能需要多个任务编写一个变量。例如,使用信号量来确保访问不会导致不一致的状态。 重要性:高 PLCopen规则:CP10 例 17
SA0028:重叠的内存区域 检测两个或多个变量保留相同内存的代码行。 理由:当两个变量保留相同的内存时,代码可能会出现意外的结果。应不惜一切代价避免这种情况。如果您无法避免在不同的解释中使用某个值(例如,一次作为 DINT 还有一次作为 REAL ),那么你应该定义一个 UNION 。您还可以使用指针访问不同类型的值,而无需转换该值。 重要性:高 例 39 . 例子 PROGRAM PLC_PR
SA0029:代码中的符号与声明不同 检测标识符的符号与其声明中的符号不同的代码位置 理由:IEC 61131-3 标准将标识符定义为不区分大小写。这意味着变量声明为“ varx “也可以用作” VaRx ” 在代码中。但是,这是令人困惑和误导的,应该避免。 重要性:中等 例 40 . 例子 一个 PLC_PRG POU 和一个 fnc (函数) POU 存在于设备树中。 PROGRAM PLC_