对话框 对于配置静态代码分析的对话框,单击 构建→静态分析→设置 .要求:一个 CODESYS 项目必须打开。 本节内容如下 :
对话框:静态分析设置:设置 功能 :在对话框中,选择自动 静态分析 ,并将静态分析的项目设置保存或加载为 CSA 文件。 项目 → 项目设置 菜单, 静态分析 类别, 打开配置对话框 关联 构建→静态分析→设置 菜单 要求 : 这 CODESYS Static Analysis 包已安装。 一个项目已打开。 自动执行静态分析 : CODESYS Static Analysis 在每次代码生成时自动
SA0011:只有一个成员的无用声明 检测仅具有单个成员的结构或枚举 理由:不应声明只有一个成员的结构或枚举。此类声明可能会让读者感到困惑。只有一个元素的结构可以用别名类型替换。只有一个元素的枚举可以用常量替换。 PLCopen规则:CP22/CP24 重要性:低 例 22 . 例子 {attribute 'qualified_only'} {attribute 'strict'} TYPE SI
SA0012:可以声明为常量的变量 检测未使用写权限访问的变量,因此可以声明为常量 理由:如果变量仅在声明点写入并且仅用于读取,则静态分析假定该变量也不应该被更改。首先,声明为常量会导致检查程序更改时变量是否未更改。其次,声明为常量可能会导致代码更快。 重要 如果一个项目中存在多个应用程序,则仅影响当前活动应用程序下的对象。如果只有一个应用程序,那么公共 POU 池中的对象也会受到影响。 重要性:
SA0013:具有相同变量名的声明 检测名称已被其他变量使用的变量(例如,具有相同名称的全局变量和局部变量)。还可以检测其函数、操作、方法或属性名称在同一访问范围内使用的变量。还检测在 GVL 中声明的变量 设备 查看或在 POU 池中。然而,为此,GVL POU 视图必须在应用程序中使用。 说明:相同的名称在阅读代码时可能会造成混淆,如果无意中访问了错误的对象,它们可能会导致错误。我们建议您使用
SA0014:实例分配 检测功能块实例的分配。在具有指针或引用变量的实例的情况下,这些赋值具有潜在的风险。 理由:这是一个性能警告。当一个实例分配给另一个实例时,所有元素和子元素都从一个实例复制到另一个实例。指向数据的指针也会被复制,但不会复制它们引用的数据,因此目标实例和源实例在赋值后包含相同的数据。根据实例的大小,这种分配可能会持续很长时间。例如,如果应该将一个实例传递给一个函数进行处理,那么
SA0015:通过 FB_Init 访问全局数据 通过方法检测功能块对全局变量的访问 FB_Init .此变量的值取决于初始化的顺序。 理由:根据 POU 实例的声明位置,如果违反规则,可能会访问未初始化的变量。 重要性:高 例 27 . 例子 VAR_GLOBAL g_xTest1 : BOOL; g_iTest3 : INT; END_VAR METHOD PUBLIC fb_init : B
SA0016:结构中的间隙 检测由当前设置的目标系统的对齐要求引起的结构或功能块中的间隙。如果可能,您应该通过使用结构元素或用虚拟元素填充它们来消除间隙。如果这是不可能的,那么您可以通过以下方式停用受影响结构的规则 analysis 语用。 说明:由于不同平台的对齐要求不同,这些结构在内存中可能会有不同的布局。然后代码可以根据平台执行不同的操作。 重要性:低 例 28 . 例子 TYPE Unpa
SA0017:对指针变量的异常赋值 检测对既不是地址的指针的分配( ADR 运算符、指针变量)或常量 0 理由:如果为指针分配的值不是有效地址,则指针的取消引用会导致“访问冲突异常”。 重要性:高 例 29 . 例子 PROGRAM PLC_PRG VAR pInt : POINTER TO INT; dwAddress : DWORD; END_VAR dwAddress := dwAddres
SA0018:异常位访问 检测对有符号变量的位访问。但是,IEC 61131-3 标准只允许对位域进行位访问和位移操作。另请参阅严格的规则 SA0147 和 SA0148 . 另请参阅严格规则 SA0147 和 SA0148 。 理由:有符号数据类型不应用作位字段,反之亦然。 IEC 61131-3 标准不提供这种访问,因此您在编写可移植代码时应遵守此规则。 重要性:中等 提示 标志枚举的例外:当