SA0004: Mehrfacher Schreibzugriff auf Ausgang

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.

Wichtigkeit: Hoch

PLCopen-Regel: CP12

VORSCHLAG:

Kein Fehler wird ausgegeben, wenn auf eine Ausgabevariable (VAR_IN_OUT) in verschiedenen Zweigen von IF oder CASE Anweisungen geschrieben wird.

Diese Regel kann nicht über ein Pragma abgeschaltet werden.

Beispiel

VAR_GLOBAL
        g_xVar AT %QX0.0 : BOOL ;
        g_iTest AT %QW0 : INT ;
END_VAR

PROGRAM PLC_PRG
IF g_iCondition < INT#0 THEN
        g_xVar := TRUE;
        g_iTest := INT#12;
END_IF

CASE g_iCondition OF
        INT#1:
                g_xVar := FALSE;
        INT#2:
                g_iTest := INT#11;
        ELSE
                g_xVar := TRUE;
                g_iTest := INT#9;
END_CASE

--> SA0004: Mehrfacher Schreibzugriff auf Ausgang '%QX0.0'
--> SA0004: Mehrfacher Schreibzugriff auf Ausgang '%QW0'