定义命名约定
在里面 静态分析设置 对话框,在 命名约定 选项卡,定义您将在代码中遵循的命名约定。您可以根据其范围和限定符为 POU、变量和数据类型的标识符定义前缀。
然后,您可以让静态分析检查命名约定的合规性。
有关说明,请参阅: 检查是否符合定义的命名约定
定义前缀
在里面 静态分析设置 对话框,在 命名约定 选项卡,在输入字段中定义命名约定 字首 柱子。
字符字面量
例子:
PRG_
在 POU 的前缀, POU 类型的前缀, 程序 (102)每个条目有多个文字,用逗号分隔
句法:
<prefix> ( , <next prefix> )*
例子:
PRG_, PRG
在 POU 的前缀, POU 类型的前缀, 程序 (102)正则表达式 正则表达式 它定义了一组前缀
句法:
@ <expression>
例子:
@x[a-dA-D]
定义一个以x
, 紧接着是集合中的一个字符a-dA-D
@[A-Za-z][A-Za-z][A-Za-z][A-Za-z0-9]
定义一个由四个字符组成的前缀:前三个字符是字母,第四个字符也可以是数字。
定义可组合数据类型的前缀
以下数据类型基于标准数据类型、现有数据类型或功能块:
指针:
POINTER TO <basic type>
参考:
REFERENCE TO <basic type>
大批:
ARRAY[ <lower index bound> .. <upper index bound> ] OF <basic type>
这些数据类型可以嵌套和相互组合。当。。。的时候 可组合数据类型的递归前缀 选项被选中时,静态分析期望此类可组合数据类型的变量递归组合前缀。前缀遵循声明并对应于为基本数据类型定义的命名约定。
例子
已设置以下命名约定:
i
在 变量的前缀, 情报 (26)p
在 变量的前缀, 指针 (26)ref
在 变量的前缀, 参考 (27)struct
在 变量的前缀, 结构 (32)可组合数据类型的递归前缀 选项:
以下代码违反了命名约定并且难以阅读。
PROGRAM plc1 VAR var1 : ARRAY[100..110] OF ARRAY[30..50] OF ARRAY[6..7] OF BOOL; var2 : ARRAY[1..3] OF INT; var3 : REFERENCE TO INT; iVar4 : INT; iVar5 : INT; var6 : ARRAY[1..3] OF INT := [11, 22, 33]; var7 : POINTER TO ARRAY[1..3] OF INT; var8 : REFERENCE TO INT; var9 : S_POLYGONLINE := (aiStart:=[1,1], aiPoint1:=[5,2], aiPoint2:=[7,3], aiPoint3:=[8,5], aiPoint4:=[5,7], aiEnd:=[1,1]); var0 : ARRAY[0..3] OF S_POLYGONLINE; // S_POLYGONLINE is a already defined structure END_VAR iVar4 := iVar4 + 1; var8 REF= iVar4; var1[100][30][6] := TRUE; var9.aiPoint1[1] := 99; var7 := ADR(var6); var6[2] := 44; iVar5 := var7^[2]; var0[0] := var9;
静态分析报告以下违反命名约定的情况:
NC0102:无效名称“plc1”:预期前缀“PRG_”
NC0014:无效的变量名“var0”:预期的前缀“astruct”
NC0014:无效的变量名“var1”:预期的前缀“aaax”
NC0014:无效的变量名称“var2”:预期的前缀“ai”
NC0014:无效的变量名“var3”:预期的前缀“refi”
NC0014:无效的变量名“var6”:预期的前缀“ai”
NC0014:无效的变量名“var7”:预期的前缀“pai”
NC0014:无效的变量名“var8”:预期的前缀“refi”
NC0014:无效的变量名“var9”:预期的前缀“结构”
定义别名变量的前缀
您可以为数据类型的变量定义前缀 别名 作为占位符的文字 {datatype}
.然后静态分析需要基本数据类型的前缀而不是占位符。
这 结合范围前缀和数据类型前缀 选项对前缀的使用没有影响 {datatype}
.
例子
已设置以下命名约定:
s
在 变量的前缀, 类型的前缀, 字符串()19A_{datatype}
在 变量的前缀, 别名 (33)
代码
TYPE A_MESSAGE : STRING[50]; // base data type is STRING END_TYPE VAR A_sMessage_N1 : A_MESSAGE := 'Robot is running.'; A_s_Message_N2 : A_MESSAGE := 'Robot has been finished.'; As_Message_N3 : A_MESSAGE := 'Robot has been stopped.'; AsMessage_N4 : A_MESSAGE := 'Error 3 has been occured.'; END_VAR
静态分析报告以下违反命名约定:
NC0033:无效的变量名称“As_Message_N3”:预期的前缀“A_s”
NC0033:无效的变量名称“AsMessage_N4”:预期的前缀“A_s”
为属性定义前缀
您可以为数据类型的 POU 定义前缀 PROPERTY
作为占位符的文字 {datatype}
.然后静态分析需要属性的返回数据类型的前缀而不是占位符。
这 结合范围前缀和数据类型前缀 选项对占位符的使用没有影响 {datatype}
.
例子
已设置以下命名约定:
fb
在 变量的前缀, 类型的前缀, 功能块实例FB_
在 POU 的前缀, POU 类型的前缀, 功能块 (103)prop_{datatype}
在 POU 的前缀, POU 类型的前缀, 物业 (107)
代码
FUNCTION_BLOCK blocka // Invalid function block name VAR_INPUT END_VAR VAR_OUTPUT END_VAR VAR iA : INT; END_VAR iA := iA + 1; PROPERTY PUBLIC vara : INT // Invalid property name, return data type is INT Get vara := iA; Set iA := vara; PROGRAM plc1 VAR var10 : blocka; // Invalid variable name of typ function block iVar11: INT; END_VAR var10(); IF var10.vara > 500 THEN var10.vara := 0; END_IF iVar11 := var10.vara;
静态分析报告以下违反命名约定:
NC0102:无效名称“plc1”:预期前缀“PRG_”
NC0031:无效的变量名“var10”:预期的前缀“fb”
NC0103:无效的变量名“blocka”:预期的前缀“FB_”
NC0107:无效的变量名“blocka.vara”:预期的前缀“prop_i”
根据命名约定编码
FUNCTION_BLOCK FB_A VAR_INPUT END_VAR VAR_OUTPUT END_VAR VAR iA : INT; END_VAR iA := iA + 1; PROPERTY PUBLIC prop_iA : INT Get prop_iA := iA; Set iA := prop_iA; PROGRAM PRG_PLC1 VAR fbA : FB_A; iVar11: INT; END_VAR fbA(); IF fbA.prop_iA > 500 THEN fbA.prop_iA := 0; END_IF iVar11 := fbA.prop_iA;
定义结构的前缀
您可以在项目中为结构定义一个通用前缀 DUT 的前缀, 结构 (151).你也可以给一个结构一个特殊的前缀。然后,特殊前缀将覆盖一般前缀。
特殊前缀在结构的数据类型声明中用 pragma 定义 {attribute 'nameprefix' := <special prefix> '}
.然后以这个前缀开始这个结构的所有变量 <special prefix>
.
例子
已设置以下命名约定:
struct
在 变量的前缀, 结构 (32)S_
在 DUT 的前缀, 结构 (151)可组合数据类型的递归前缀:
代码
TYPE S_POLYGONLINE : STRUCT aiStart : ARRAY[1..2] OF INT := [-99, -99]; aiPoint1 : ARRAY[1..2] OF INT; aiPoint2 : ARRAY[1..2] OF INT; aiPoint3 : ARRAY[1..2] OF INT; aiPoint4 : ARRAY[1..2] OF INT; aiEnd : ARRAY[1..2] OF INT := [99, 99]; END_STRUCT END_TYPE {attribute 'nameprefix' := 'penta'} // Pragma to define a special prefix TYPE S_PENTA EXTENDS S_POLYGONLINE : STRUCT aiPoint5 : ARRAY[1..2] OF INT; END_STRUCT END_TYPE PROGRAM PRG_Compute VAR structPolygon : S_POLYGONLINE := (aiStart:=[1,1], aiPoint1:=[5,2], aiPoint2:=[7,3], aiPoint3:=[8,5], aiPoint4:=[5,7], aiEnd:=[1,1]); structPentagon : S_PENTAGON := (aiStart:=[0,0], aiPoint1:=[1,1], aiPoint2:=[2,2], aiPoint3:=[3,3], aiPoint4:=[4,4], aiPoint5:=[5,5]); structLine0 : S_PENTA; pentaLine1 : S_PENTA; iXPoint: INT; aPoint0: ARRAY [1..2] OF INT; aPoint1: ARRAY [1..2] OF INT; END_VAR iXPoint := structPolygon.aiPoint1[1]; aPoint0 := structLine0.aiEnd; aiPoint1 := pentaLine1.aiEnd;
静态分析报告以下违反命名约定:
无效的变量名“structLine0”:预期的前缀“penta”
提供其他 CODESYS Static Analysis 具有命名约定的项目
将命名约定保存在 CSA 文件中。您可以在其他地方加载和使用此文件 CODESYS Static Analysis 项目。
点击
.点击
按钮。文件选择对话框打开。在那里,您可以将命名约定存储在具有文件扩展名 CSA 的任何名称下的文件中。
点击
.点击
按钮。文件选择对话框打开。选择下面显示的 CSA 文件之一。