定义命名约定
在里面 静态分析设置 对话框,在 命名约定 选项卡,定义您将在代码中遵循的命名约定。您可以根据其范围和限定符为 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 文件之一。