SA0124:声明中的指针取消引用 检测用于声明部分初始化的指针取消引用 理由:指针和引用不应该用于初始化,因为如果指针尚未初始化,这可能会导致访问冲突。 重要性:中等 例 110 . 例子 TYPE TESTSTRUCT : STRUCT xA : BOOL; xB : BOOL; END_STRUCT END_TYPE FUNCTION_BLOCK FB_Test VAR_INPUT pTes
SA0148:异常位访问 -strict 检测未对位域数据类型进行的位访问( BYTE , WORD , DWORD , 和 LWORD )。 IEC 61131-3 标准只允许对位域数据类型进行位访问。但是,那 CODESYS 编译器还允许对无符号数据类型进行位访问。 重要性:低 例 108 . 例子 PROGRAM PLC_PRG VAR iTemp1 : INT; diTemp3 : DIN
对话框:静态分析设置: 规则 功能 :在对话框中选择 规则 在项目源代码的静态分析过程中检查。 有关更多信息,请参阅: 配置和运行静态分析 称呼 : 项目 → 项目设置 菜单, 静态分析 类别, 打开配置对话框 关联 构建→静态分析→设置 菜单 要求 : 这 CODESYS Static Analysis 包已安装。 一个项目已打开。 此选项卡显示可以在静态分析期间检查的所有规则的树结构。默认情况
对话框:静态分析设置 - 命名约定 功能 :在对话框中,您 定义 变量的数据类型和范围的前缀,以及 POU 和用户定义的数据类型 (DUT) 的前缀。静态分析检查 遵守 与命名约定。当未遵守约定时,静态分析会在 留言 看法。有关更多信息,请参阅: 配置和运行静态分析 称呼 : 项目 → 项目设置 菜单, 静态分析 类别, 打开配置对话框 关联 构建→静态分析→设置 菜单 要求 : 这 CODESY
SA0015:通过 FB_Init 访问全局数据 通过方法检测功能块对全局变量的访问 FB_Init .此变量的值取决于初始化的顺序。 理由:根据 POU 实例的声明位置,如果违反规则,可能会访问未初始化的变量。 重要性:高 例 27 . 例子 VAR_GLOBAL g_xTest1 : BOOL; g_iTest3 : INT; END_VAR METHOD PUBLIC fb_init : B
SA0024:无类型文字/常量 标识属于操作一部分的无类型文字 理由:无类型文字会根据其用法自动类型化。在某些情况下,例如 dw := ROL(DWORD#1, i); ,这可能会导致意外的情况,最好使用类型化文字来提供独特的说明。 重要性:低 例 35 . 例子 PROGRAM PLC_PRG VAR iTemp1 : INT := 10; //no part of operation diTe
SA0054:REAL/LREAL 的相等/不等比较 检测比较运算符是否 = (平等)和 <> (不等式)比较类型的操作数 REAL 或者 LREAL . 理由: REAL / LREAL 根据 IEEE 754 标准,值被实现为浮点数。该标准意味着特定的、看似简单的十进制数无法精确表示。因此,可能会有不同的表示形式: LREAL 对于相同的十进制数。 考虑以下代码行: lr11 := 1.1;
SA0102:从外部访问程序/fb变量 检测对程序或功能块的局部变量的外部访问。 理由: CODESYS 允许对程序或功能块的局部变量进行外部读取访问。这违背了数据封装(隐藏数据)的原则,不符合IEC 61131-3标准。 重要性:中等 例 90 . 例子 PROGRAM PLC_PRG VAR iCounter : INT; afb_Instance : AFB; bfb_Instance :
SA0125:初始化中的引用 检测声明部分中用于初始化的引用变量 理由:指针和引用不应该用于初始化,因为如果指针尚未初始化,这可能会导致访问冲突。 重要性:中等 例 111 . 例子 TYPE TESTSTRUCT : STRUCT xA : BOOL; xB : BOOL; END_STRUCT END_TYPE FUNCTION_BLOCK FB_Test VAR_INPUT refTests
SA0161:压缩结构中的未压缩结构 检测在打包结构中使用的未打包结构 理由:编译器通常将解包结构设置为一个地址,该地址允许对结构内的所有元素进行对齐访问。如果您在打包结构中创建此结构,则不再可能进行对齐访问。此外,访问解压缩结构中的元素可能会导致“未对齐异常”。 重要性:高 例 118 . 例子 结构 structSingleDataRecord 已打包,但它包含未打包的结构 struct4By