SA0004: Mehrfacher Schreibzugriff auf Ausgang

Funktion

Ermittelt Ausgänge, die an mehr als einer Position geschrieben werden.

Begründung

Die Wartbarkeit leidet, wenn ein Ausgang an verschiedenen Stellen im Code geschrieben wird. Es ist dann unklar, welcher Schreibzugriff derjenige ist, der tatsächlich Auswirkungen im Prozess hat. Gute Praxis ist es, die Berechnung der Ausgangsvariablen in Hilfsvariablen durchzuführen und an einer Stelle am Ende des Zyklus den berechneten Wert zuzuweisen.

Ausnahme

Es wird kein Fehler ausgegeben, wenn eine Ausgangsvariable in verschiedenen Zweigen von IF- bzw. CASE-Anweisungen geschrieben wird.

Wichtigkeit

Hoch

PLCopen-Regel

CP12

SA0004: Mehrfacher Schreibzugriff auf Ausgang 1:

Diese Regel kann nicht über ein Pragma oder Attribut abgeschaltet werden!
Weitere Informationen zu Attributen finden Sie unter Pragmas und Attribute.

Beispiel:

Globale Variablenliste:

VAR_GLOBAL
    bVar     AT%QX0.0 : BOOL;
    nSample  AT%QW5   : INT;
END_VAR

Programm MAIN:

PROGRAM MAIN
VAR
    nCondition        : INT;
END_VAR
IF nCondition < INT#0 THEN
    bVar    := TRUE;             // => SA0004
    nSample := INT#12;           // => SA0004
END_IF
 
CASE nCondition OF
    INT#1:
        bVar := FALSE;           // => SA0004
 
    INT#2:
        nSample := INT#11;       // => SA0004
 
ELSE
     bVar    := TRUE;            // => SA0004
     nSample := INT#9;           // => SA0004
END_CASE