Skip to main content

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 mit x beginnt, gefolgt von genau einem Zeichen des Bereichs a-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: standard icon

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()19

  • A_{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, Funktionsbausteininstanz

  • FB_ 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: standard icon

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.

Prozedur. In Datei speichern
  1. Wählen Sie den Befehl Erstellen → Statische Analyse → Einstellungen.

  2. Wählen Sie die Schaltfläche Speichern.

    Ein Dateiauswahldialog öffnet sich. Dort können Sie die Namenkonventionen in einer Datei unter einem beliebigen Namen mit Dateiendung CSA ablegen.

Prozedur. Datei mit Namenskonventionen laden
  1. Wählen Sie den Befehl Erstellen → Statische Analyse → Einstellungen.

  2. Wählen Sie die Schaltfläche Laden.

    Der Dateiauswahldialog öffnet sich. Wählen Sie unter den angezeigten CSA-Dateien eine aus.