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_, PRG
in 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 mitx
beginnt, 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:
i
in Präfixe für Variablen, INT (26)p
in Präfixe für Variablen, POINTER (26)ref
in Präfixe für Variablen, REFERENCE (27)struct
in 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:
s
in 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_VAR
Die 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:
fb
in 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:
struct
in 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.