: {analysis -<rule number> ( , -<further rule number [...] more further rule
' := '-<rule number> ( , -<further rule number [...] further rule numbers 例子
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