Variablenkapselung

Themenpunkte:

  1. Nicht veränderte Variablen als VAR CONSTANT deklarieren [+]
  2. Globalere Bezeichner nicht verschatten [+]
  3. ADS Zugriff einschränken [+]

Nicht veränderte Variablen als VAR CONSTANT deklarieren

Variablen, die nicht verändert werden, sollten als VAR CONSTANT deklariert werden.

Static Analysis:

Überprüfen mit Hilfe von Static Analysis Regel:

Negatives Beispiel:

PROGRAM Sample_neg
VAR
    fTest         : REAL := 1E-20;   // Test value
    cFloatEpsilon : REAL := 1E-12;   // NON COMPLIANT: cFloatEpsilon will not be changed, but is not declared as VAR CONSTANT
END_VAR
--------------------------------------------------------------------
IF (fTest > (0 - cFloatEpsilon)) AND (fTest < (0 + cFloatEpsilon)) THEN
    F_DoSomethingUsefulHere();       // it's just a sample
END_IF

Positives Beispiel:

PROGRAM Sample_pos
VAR
    fTest         : REAL := 1E-20;   // Test value
END_VAR
VAR CONSTANT
    cFloatEpsilon : REAL := 1E-12;   // COMPLIANT: cFloatEpsilon will not be changed and is declared as VAR CONSTANT
END_VAR
--------------------------------------------------------------------
IF (fTest > (0 - cFloatEpsilon)) AND (fTest < (0 + cFloatEpsilon)) THEN
    F_DoSomethingUsefulHere();       // it's just a sample
END_IF

Globalere Bezeichner nicht verschatten

Bezeichner in einem inneren Zusammenhang sollten keine globaleren Bezeichner verschatten. Bezeichner in einem inneren Zusammenhang sind z. B. Variablen, die in einer Methode instanziiert werden. Die globaleren Bezeichner sind in diesem Fall beispielsweise Variablen des dazugehörigen Funktionsblocks.

Static Analysis:

Überprüfen mit Hilfe der folgenden Static Analysis Regeln:

Die Regel SA0027 ist auch in der lizenzfreien Variante Static Analysis Light enthalten.

Allgemeine Programmelemente für die folgenden Beispiele:

FUNCTION_BLOCK FB_Sample
VAR
    sDescription : STRING;  // STRING for POU description
END_VAR
--------------------------------------------------------------------
sDescription := 'This is a function block';

Negatives Beispiel:

METHOD PUBLIC nccl_Test : STRING
VAR
    sDescription : STRING;  // NON COMPLIANT: sDescription is already defined in method’s outer scope FB_Sample
END_VAR
--------------------------------------------------------------------
sDescription  := 'This is a method';
nccl_Test     := sDescription;

Positives Beispiel:

METHOD PUBLIC nccl_Test : STRING
VAR
    sMethodDescription  : STRING;  // COMPLIANT
END_VAR
--------------------------------------------------------------------
sMethodDescription  := 'This is a method';
nccl_Test           := sMethodDescription;

ADS Zugriff einschränken

Bei Bedarf kann der Zugriff auf Variablen so eingeschränkt werden, dass keine Sichtbarkeit über ADS gegeben ist. Solche Variablen sind dann nicht für HMIs nutzbar. Hierzu kann das Attribut ‚TcNoSymbol‘ verwendet werden.