Defining Naming Conventions
In the Static Analysis Settings dialog, on the Naming Conventions tab, define the naming conventions that you will follow in your code. You define prefixes for the identifiers of your POUs, variables, and data types depending on their scopes and qualifiers.
Then you can let the Static Analysis check compliance of the naming conventions.
For instructions, see: Checking for compliance to defined naming conventions
Defining prefixes
In the Static Analysis Settings dialog, on the Naming Conventions tab, define the naming conventions in the input field of the Prefix column.
Character literal
Example:
PRG_in Prefixes for POUs, Prefixes for POU type, PROGRAM (102)Multiple literals per entry which are separated by a comma
Syntax:
<prefix> ( , <next prefix> )*Example:
PRG_, PRGin Prefixes for POUs, Prefixes for POU type, PROGRAM (102)Regular expression RegEx which defines a set of prefixes
Syntax:
@ <expression>Examples:
@x[a-dA-D]defines a prefix that begins withx, followed by exactly one character in the seta-dA-D@[A-Za-z][A-Za-z][A-Za-z][A-Za-z0-9]defines a prefix that consists of four characters: The first three characters are letters, and the fourth character can also be a number.
Defining prefixes for combinable data types
The following data types are based on standard data types, existing data types, or function blocks:
Pointer:
POINTER TO <basic type>Reference:
REFERENCE TO <basic type>Array:
ARRAY[ <lower index bound> .. <upper index bound> ] OF <basic type>
These data types can be nested and mutually combined. When the Recursive prefixes for combinable data types option is selected, Static Analysis expects recursively combined prefixes for variables of such combinable data types. The prefixes follow the declaration and correspond to the naming conventions defined for the basic data types.
Example
The following naming conventions have been set:
iin Prefixes for variables, INT (26)pin Prefixes for variables, POINTER (26)refin Prefixes for variables, REFERENCE (27)structin Prefixes for variables, Structure (32)Recursive prefixes for combinable data types option:

The following code violates naming conventions and is difficult to read.
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;Static Analysis reports the following violations of naming conventions:
NC0102: Invalid name 'plc1': Expected prefix 'PRG_'
NC0014: Invalid variable name 'var0': Expected prefix 'astruct'
NC0014: Invalid variable name 'var1': Expected prefix 'aaax'
NC0014: Invalid variable name 'var2': Expected prefix 'ai'
NC0014: Invalid variable name 'var3': Expected prefix 'refi'
NC0014: Invalid variable name 'var6': Expected prefix 'ai'
NC0014: Invalid variable name 'var7': Expected prefix 'pai'
NC0014: Invalid variable name 'var8': Expected prefix 'refi'
NC0014: Invalid variable name 'var9': Expected prefix 'struct'
Defining prefixes for variables of an alias
You can define prefixes for variables of data type Alias as a literal with the placeholder {datatype}. Then Static Analysis expects the prefix of the base data type instead of the placeholder.
The Combine scope prefix with data type prefix option has no effect on the use of the prefix {datatype}.
Example
The following naming conventions have been set:
sin Prefixes for variables, Prefixes for types, STRING()19A_{datatype}in Prefixes for variables, Alias (33)
Code
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_VARStatic Analysis reports the following violation of naming convention:
NC0033: Invalid variable name 'As_Message_N3': Expected prefix 'A_s'
NC0033: Invalid variable name 'AsMessage_N4': Expected prefix 'A_s'
Defining prefixes for properties
You can define the prefix for POUs of data type PROPERTY as a literal with the placeholder {datatype}. Then Static Analysis expects the prefix of the return data type of the property instead of the placeholder.
The Combine scope prefix with data type prefix option has no effect on the use of the placeholder {datatype}.
Example
The following naming conventions have been set:
fbin Prefixes for variables, Prefixes for types, Function block instanceFB_in Prefixes for POUs, Prefixes for POU type, FUNCTIONBLOCK (103)prop_{datatype}in Prefixes for POUs, Prefixes for POU type, PROPERTY (107)
Code
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;Static Analysis reports the following violation of naming conventions:
NC0102: Invalid name 'plc1': Expected prefix 'PRG_'
NC0031: Invalid variable name 'var10': Expected prefix 'fb'
NC0103: Invalid variable name ''blocka': Expected prefix 'FB_'
NC0107: Invalid variable name 'blocka.vara': Expected prefix 'prop_i'
Code according to naming conventions
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;Defining prefixes for structures
You can define a general prefix for structures in the project in Prefixes for DUTs, Structure (151). You can also give a structure a special prefix. The special prefix then overrides the general prefix.
The special prefix is defined in the data type declaration of the structure with the pragma {attribute 'nameprefix' := <special prefix> '}. Then start all variables of this structure with this prefix <special prefix>.
Example
The following naming conventions have been set:
structin Prefixes for variables, Structure (32)S_in Prefixes for DUTs, Structure (151)Recursive prefixes for combinable data types:

Code
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;Static Analysis reports the following violation of naming conventions:
Invalid variable name 'structLine0': Expected prefix 'penta'
Providing other CODESYS Static Analysis projects with naming conventions
Save your naming conventions in a CSA file. You can load and use this file in other CODESYS Static Analysis projects.
Click .
Click the button.
A file selection dialog opens. There you can store the naming conventions in a file under any name with the file extension CSA.
Click .
Click the button.
The file selection dialog opens. Select one of the CSA files displayed below.