CODESYS Development System
数据类型:隐式枚举 隐式枚举允许一种简单的方法来声明仅在本地 POU 中有效的新枚举变量。这种类型的变量可以采用在组件列表中声明的有限数量的整数值。 隐式枚举没有数据类型名称或标识符。 宣言 : <variable name> : ( <list of component names> ) := <initialization>; <list of component names> 具有所需数量组
属性:analysis 该属性停用整个编程对象的特定规则,以便将它们排除在 静态分析 .您可以通过指定带有前置减号 ("-") 的规则编号来停用代码规则。您可以在属性中指定任意数量的规则。 插入位置 : 在 POU 的声明部分,在第一行。 句法 : {attribute 'analysis' := '-<rule number> ( , -<further rule number> )* '} *
SA0016:结构中的间隙 检测由当前设置的目标系统的对齐要求引起的结构或功能块中的间隙。如果可能,您应该通过使用结构元素或用虚拟元素填充它们来消除间隙。如果这是不可能的,那么您可以通过以下方式停用受影响结构的规则 analysis 语用。 说明:由于不同平台的对齐要求不同,这些结构在内存中可能会有不同的布局。然后代码可以根据平台执行不同的操作。 重要性:低 例 28 . 例子 TYPE Unpa
SA0018:异常位访问 检测对有符号变量的位访问。但是,IEC 61131-3 标准只允许对位域进行位访问和位移操作。另请参阅严格的规则 SA0147 和 SA0148 . 另请参阅严格规则 SA0147 和 SA0148 。 理由:有符号数据类型不应用作位字段,反之亦然。 IEC 61131-3 标准不提供这种访问,因此您在编写可移植代码时应遵守此规则。 重要性:中等 提示 标志枚举的例外:当
属性:analysis:report-multiple-instance-calls 该属性标记了用于检查规则的功能块 规则 105 :仅检查具有该属性的功能块是否多次调用功能块实例。当规则 105 在 项目设置 ,该属性没有任何作用。 插入位置 : 功能块声明部分的顶行。 句法 : {attribute 'analysis:report-multiple-instance-calls'} 例子
SA0052:不寻常的移位操作 检测有符号变量的移位操作(位移)。在对位域数据类型进行移位操作的情况下( Byte , DWORD , LWORD , WORD ),不报错。 理由: CODESYS 允许对有符号数据类型进行移位操作。但是,这些操作是不寻常的并且可能会令人困惑。 IEC 61131-3 标准不提供此类操作。因此,应该避免它们以增加代码对其他开发系统的可移植性。 重要性:中等 例 6
SA0106:FB_INIT 中的虚拟方法调用 检测方法调用 FB_Init 基本功能块的方法,被从基本功能块派生的功能块覆盖 理由:在这些情况下,可能是覆盖方法中的变量未在基础 FB 中初始化。 重要性:高 例 93 . 例子 功能块 FB_A 包括方法 FB_Init 和 Meth_MyInit . FB_Init 来电 Meth_MyInit 用于初始化。功能块 FB_B 来源于 FB_A
SA0043:仅在一个 POU 中使用全局变量 仅在单个 POU 中检测全局变量的使用 理由:仅在一个位置使用的全局变量也只能在该位置声明。 重要性:中等 PLCopen规则:CP26 例 51 . 例子 VAR_GLOBAL g_xVar AT %QX0.0 : BOOL ; g_iTest AT %QW1 : INT ; g_wTest AT %QW2 : WORD; END_VAR PROG
SA0044:关于接口的声明 检测声明 REFERENCE TO 接口和声明 VAR_IN_OUT 带接口的变量(通过 REFERENCE TO ) 理由:接口类型总是隐含地引用实现该接口的功能块实例。因此,对接口的引用就是对引用的引用,并且可能导致不需要的行为。 重要性:高 例 52 . 例子 ITF 是在项目中定义的接口。 FUNCTION_BLOCK POU VAR_INPUT inst_i
SA0124:声明中的指针取消引用 检测用于声明部分初始化的指针取消引用 理由:指针和引用不应该用于初始化,因为如果指针尚未初始化,这可能会导致访问冲突。 重要性:中等 例 110 . 例子 TYPE TESTSTRUCT : STRUCT xA : BOOL; xB : BOOL; END_STRUCT END_TYPE FUNCTION_BLOCK FB_Test VAR_INPUT pTes