Namenskonventionen definieren
Im Dialog Einstellungen Statische Analyse unter der Registerkarte Namenskonventionen definieren Sie die Namenskonventionen, denen Sie in Ihren Code folgen werden. Sie definieren Präfixe für die Bezeichner Ihrer Programmierbausteine, Variablen und Datentypen in Abhängigkeit von deren Gültigkeitsbereichen und Qualifizierern.
Die Einhaltung der Namenskonventionen können Sie dann von der Statischen Analyse prüfen lassen.
Eine Anleitung dazu: Einhaltung der definierten Namenskonventionen überprüfen
Präfixe definieren
Im Dialog Einstellungen Statische Analyse unter der Registerkarte Namenskonventionen definieren Sie die Namenskonventionen im Eingabefeld der Spalte Präfix.
Zeichenliteral
Beispiel:
PRG_in Präfixe für POUs, Präfixe für POU-Typ, PROGRAM (102)Mehrere Literale pro Eintrag, die durch ein Komma separiert werden
Syntax:
<prefix> ( , <next prefix> )*Beispiel:
PRG_, PRGin Präfixe für POUs, Präfixe für POU-Typ, PROGRAM (102)Regulärer Ausdruck RegEx, der eine Menge von Präfixen definiert
Syntax:
@ <expression>Beispiele:
@x[a-dA-D]definiert ein Präfix, das mitxbeginnt, gefolgt von genau einem Zeichen des Bereichsa-dA-D@[A-Za-z][A-Za-z][A-Za-z][A-Za-z0-9]definiert ein Präfix, das aus 4 Zeichen besteht: die ersten 3 sind Buchstaben, das 4. Zeichen kann auch eine Ziffer sein
Für kombinierbare Datentypen Präfixe definieren
Folgende Datentypen basieren auf Standarddatenypen, bestehenden Datentypen oder Funktionsbausteinen:
Pointer :
POINTER TO <basic type>Referenz:
REFERENCE TO <basic type>Array:
ARRAY[ <lower index bound> .. <upper index bound> ] OF <basic type>
Diese Datentypen können verschachtelt und gegenseitig kombiniert werden. Wenn die Option Rekursive Präfixe für kombinierbare Datentypen aktiviert ist, erwartet die Statische Analyse bei Variablen solcher kombinierbarer Datentypen rekursiv zusammengesetzte Präfixe. Die Präfixe folgen der Deklaration und entsprechen den Namenskonventionen, die für die Basisdatentypen vereinbart wurden.
Beispiel
Folgende Namenskonventionen wurden gesetzt:
iin Präfixe für Variablen, INT (26)pin Präfixe für Variablen, POINTER (26)refin Präfixe für Variablen, REFERENCE (27)structin Präfixe für Variablen, Struktur (32)Option Rekursive Präfixe für kombinierbare Datentypen:

Der folgende Code verletzt Namenskonventionen und ist schwer lesbar.
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;Die Statische Analyse meldet folgende Verletzungen der Namenskonventionen:
NC0102: Ungültiger Name ‚plc1‘: Erwartetes Präfix ‚PRG_‘
NC0014: Ungültiger Variablenname ‚var0‘: Erwartetes Präfix ‚astruct‘
NC0014: Ungültiger Variablenname ‚var1‘: Erwartetes Präfix ‚aaax‘
NC0014: Ungültiger Variablenname ‚var2‘: Erwartetes Präfix ‚ai‘
NC0014: Ungültiger Variablenname ‚var3‘: Erwartetes Präfix ‚refi‘
NC0014: Ungültiger Variablenname ‚var6‘: Erwartetes Präfix ‚ai‘
NC0014: Ungültiger Variablenname ‚var7‘: Erwartetes Präfix ‚pai‘
NC0014: Ungültiger Variablenname ‚var8‘: Erwartetes Präfix ‚refi‘
NC0014: Ungültiger Variablenname ‚var9‘: Erwartetes Präfix ‚struct‘
Für Variablen eines Alias Präfixe definieren
Sie können Präfixe für Variablen des Datentyps Alias als Literal mit dem Platzhalter {datatype} definieren. Dann erwartet die Statische Analyse an Stelle des Platzhalters das Präfix des Basisdatentyps.
Die Option Namensraumpräfix mit Datentyppräfix kombinieren hat keinen Einfluss auf die Verwendung des Präfixes {datatype}.
Beispiel
Folgende Namenskonventionen wurden gesetzt:
sin Präfixe für Variablen, Präfixe für Typen, STRING()19A_{datatype}in Präfixe für Variablen, 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_VARDie Statische Analyse meldet folgende Verletzung der Namenskonvention:
NC0033: Ungültiger Variablenname ‚‘As_Message_N3‘: Erwartetes Präfix ‚A_s‘
NC0033: Ungültiger Variablenname ‚AsMessage_N4‘: Erwartetes Präfix ‚A_s‘‘
Für Eigenschaften Präfixe definieren
Sie können das Präfix für Bausteine (POUs) des Datentyps PROPERTY als ein Literal mit dem Platzhalter {datatype} definieren. Dann erwartet die Statische Analyse an Stelle des Platzhalters das Präfix des Rückgabedatentyps der Eigenschaft.
Die Option Namensraumpräfix mit Datentyppräfix kombinieren hat keinen Einfluss auf die Verwendung des Platzhalters {datatype}.
Beispiel
Folgende Namenskonventionen wurden gesetzt:
fbin Präfixe für Variablen, Präfixe für Typen, FunktionsbausteininstanzFB_in Präfixe für POUs, Präfixe für POU-Typ, FUNCTIONBLOCK (103)prop_{datatype}in Präfixe für POUs, Präfixe für POU-Typ, 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;Die Statische Analyse meldet folgende Verletzung der Namenskonventionen:
NC0102: Ungültiger Name ‚‘plc1‘: Erwartetes Präfix ‚PRG_‘‘
NC0031: Ungültiger Variablenname ‚‘var10‘: Erwartetes Präfix ‚‘fb‘‘
NC0103: Ungültiger Variablenname ‚‘blocka‘: Erwartetes Präfix ‚FB_‘‘
NC0107: Ungültiger Variablenname ‚blocka.vara‘: Erwartetes Präfix ‚prop_i‘‘
Code gemäß Namenskonventionen
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;Für Strukturen Präfixe definieren
Sie können im Projekt für Strukturen ein allgemeinen Präfix unter Präfixe für DUTs, Struktur (151) definieren. Daneben können Sie eine Struktur mit einem speziellen Präfix versehen. Das spezielle Präfix verschattet dann das allgemeine Präfix.
Das spezielle Präfix wird in der Datentypdeklaration der Struktur mit dem Pragma {attribute 'nameprefix' := <special prefix> '} definiert. Beginnen Sie daraufhin alle Variablen dieser Struktur mit diesem Präfix <special prefix>.
Beispiel
Folgende Namenskonventionen wurden gesetzt:
structin Präfixe für Variablen, Struktur(32)S_in Präfixe für DUTs, Struktur (151)Rekursive Präfixe für kombinierbare Datentypen:

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;Die Statische Analyse meldet folgende Verletzung der Namenskonventionen:
Ungültiger Variablenname ‚structLine0‘: Erwartetes Präfix ‚penta‘
Weiteren CODESYS Static Analysis-Projekten Namenskonventionen zur Verfügung stellen
Speichern Sie Ihre Namenskonventionen in einer CSA-Datei. Diese Datei können Sie in anderen CODESYS Static Analysis-Projekten laden und verwenden.
Wählen Sie den Befehl .
Wählen Sie die Schaltfläche .
Ein Dateiauswahldialog öffnet sich. Dort können Sie die Namenkonventionen in einer Datei unter einem beliebigen Namen mit Dateiendung CSA ablegen.
Wählen Sie den Befehl .
Wählen Sie die Schaltfläche .
Der Dateiauswahldialog öffnet sich. Wählen Sie unter den angezeigten CSA-Dateien eine aus.