SA0101:名称长度无效 检测长度无效的名称。在里面 项目设置 ,双击规则条目以打开一个对话框,您可以在其中定义名称的长度并定义任何例外。 理由:一些编程指南指定了变量名的最小长度。此分析可用于检查合规性。 重要性:低 PLCopen规则:N6 提示 所有规则都列在 设置静态分析:规则 对话。您可以在其中双击规则 101 以打开特定于规则的配置。然后,您可以定义最小和最大字符数,并在 名称长度
SA0102:从外部访问程序/fb变量 检测对程序或功能块的局部变量的外部访问。 理由: CODESYS 允许对程序或功能块的局部变量进行外部读取访问。这违背了数据封装(隐藏数据)的原则,不符合IEC 61131-3标准。 重要性:中等 例 90 . 例子 PROGRAM PLC_PRG VAR iCounter : INT; afb_Instance : AFB; bfb_Instance :
SA0103:对非原子数据的并发访问 检测是否非原子变量(例如,具有数据类型 STRING , WSTRING , ARRAY , STRUCT 、FB 实例、64 位数据类型)用于多个任务 理由:在访问过程中没有同步的情况下,在一个任务中读,同时在另一个任务中写入时,可能会读到不一致的值。 重要性:中等 提示 对于某些数据类型,尤其是 64 位整数,访问是否是原子的取决于平台。仅当控制器不支持对
SA0105:多个实例调用 检测被多次调用的功能块的实例。为此,必须使用以下编译指示来标记功能块: {attribute 'analysis:report-multiple-instance-calls'} 理由: 某些功能块的设计方式是在一个循环中只能调用一次。此测试检查是否在多个位置进行呼叫。 重要性:低 PLCopen规则:CP16 / CP20 例 92 . 例子 // {attribut
SA0106:FB_INIT 中的虚拟方法调用 检测方法调用 FB_Init 基本功能块的方法,被从基本功能块派生的功能块覆盖 理由:在这些情况下,可能是覆盖方法中的变量未在基础 FB 中初始化。 重要性:高 例 93 . 例子 功能块 FB_A 包括方法 FB_Init 和 Meth_MyInit . FB_Init 来电 Meth_MyInit 用于初始化。功能块 FB_B 来源于 FB_A
SA0107:缺少形式参数 检测是否缺少形式参数 理由:在调用中指定形式参数时,代码变得更具可读性。 重要性:低 例 94 . 例子 FUNCTION FUNA : BOOL VAR_INPUT bDo : BOOL; bInit : BOOL; bManual : BOOL; END_VAR VAR iInit : INT; iLocal : INT; iManual : INT; END_VA
SA0111:指针变量 检测类型变量 POINTER TO 理由:IEC 61131-3 标准不允许指针。 重要性:低 例 95 . 例子 VAR piTemp : POINTER TO INT; pbyTemp : POINTER TO BYTE; END_VAR 输出在 留言 看法: SA0111:不允许数据类型 POINTER 本节内容如下 :
SA0112:参考变量 检测类型变量 REFERENCE TO 理由:IEC 61131-3 标准不允许引用。 重要性:低 例 96 . 例子 VAR ref_int : REFERENCE TO INT; ref_dw : REFERENCE TO DWORD; END_VAR 输出在 留言 看法: SA0112:不允许数据类型引用 本节内容如下 :
SA0162:缺少注释 检测程序中未注释的位置 理由:许多编程指南都要求完整的注释,它增加了代码的可读性和可维护性。 重要性:低 PLCopen 规则:C2 在以下情况下需要注释: 对于变量的声明。评论位于上方或右侧。 用于程序、功能块或方法的声明。注释位于声明上方(第一行)。 例 119 . 例子 PROGRAM PLC_PRG VAR iMaxValue: INT; END_VAR 输出在 留