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 |
![]() | Diese Regel kann nicht über ein Pragma oder Attribut abgeschaltet werden! |
Beispiel:
Globale Variablenliste:
VAR_GLOBAL
bVar AT%QX0.0 : BOOL;
nSample AT%QW5 : INT;
END_VARProgramm MAIN:
PROGRAM MAIN
VAR
nCondition : INT;
END_VARIF 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