Symbol:
Funktion: Der Dialog aktiviert die Prüfungen, die bei der Light-Version der Statischen Analyse in CODESYS bei einer Codeerzeugung jeweils durchführt werden
Aufruf: Menü „Projekt Projekteinstellungen“, Kategorie „Static Analysis Light“.
Sie können die statische Codeanalyse für Codeteile ausschließen, indem Sie den Code
mit dem Pragma {analysis ...}
oder dem Pragma {attribute 'analysis' := '...'}
kennzeichnen.
'Zusätzliche Kompilierungsprüfungen'
„SA0033: Nicht verwendete Variablen“ |
Ermittelt Variablen, die deklariert sind, aber innerhalb des kompilierten Programmcodes nicht verwendet werden. Für GVL-Variablen: Wenn es in einem Projekt mehrere Applikationen gibt, werden nur
die Objekte unter der gerade aktiven Applikation berücksichtigt. Wenn es nur eine
einzige Applikation gibt, werden auch die Objekte in der Ansicht |
„SA0028: Überlappende Speicherbereiche“ |
Ermittelt die Stellen, durch die 2 oder mehr Variablen denselben Speicherplatz belegen.
Beispielsweise tritt dies auf, wenn es die folgenden Deklarationen gibt: |
„SA0006: Schreibzugriff aus mehreren Tasks“ |
Ermittelt Variablen, auf die von mehr als einer Task geschrieben wird. |
„SA0004: Mehrfacher Schreibzugriff auf Ausgang“ |
Ermittelt Ausgänge, die an mehr als einer Position geschrieben werden. Hinweis: Es wird kein Fehler ausgegeben, wenn auf eine Ausgabevariable ( Hinweis: Diese Regel kann nicht über Pragma abgeschaltet werden! |
„SA0027: Mehrfachverwendungen von Bezeichnern“ |
Ermittelt Mehrfachverwendung des Namens/Bezeichners einer Variable oder eines Objekts (POU) innerhalb des Gültigkeitsbereichs eines Projekts. Die folgenden Fälle werden abgedeckt:
|
„SA0167: Temporäre Funktionsbaustein-Instanzen“ |
Die Prüfung ermittelt Funktionsbaustein-Instanzen, die als temporäre Variablen deklariert
sind. Dies betrifft also Instanzen, die in einer Methode oder in einer Funktion oder
als |
Beispiele
SA0003: Leere Anweisungen
; (* Comment *); iVar;
SA0006: Gleichzeitiger Zugriff
FUNCTION_BLOCK ADD_FB g_iTemp1 := g_iTemp1 + INT#1;
PROGRAM PLC_PRG //controlled by MainTask g_iTemp1 := g_iTemp1 + INT#2; g_xTemp2 := g_iTemp1 > INT#10;
PROGRAM PLC_PRG_1 //controlled by SubTask g_iTemp1 := g_iTemp1 - INT#3; g_xTemp2 := g_iTemp1 < INT#-10;
SA0004: Mehrfacher Schreibzugriff auf Ausgang
VAR_GLOBAL g_xVar AT %QX0.0 : BOOL ; g_iTest AT %QW0 : INT ; END_VAR
PROGRAM PLC_PRG IF iCondition < INT#0 THEN g_xVar := TRUE; g_iTest := INT#12; END_IF
CASE iCondition OF INT#1: g_xVar := FALSE; INT#2: g_iTest := INT#11; ELSE g_xVar := TRUE; g_iTest := INT#9; END_CASE
SA0006: Schreibzugriff aus mehreren Tasks
FUNCTION_BLOCK ADD_FB g_iTemp1 := g_iTemp1 + INT#1; PROGRAM PLC_PRG // Controlled by MainTask g_iTemp1 := g_iTemp1 + INT#2; g_xTemp2 := g_iTemp1 > INT#10; PROGRAM PLC_PRG_1 //Controlled by SubTask g_iTemp1 := g_iTemp1 - INT#3; g_xTemp2 := g_iTemp1 < INT#-10;
SA0027: Mehrfachverwendung des Namens
PROGRAM PLC_PRG VAR ton : INT; // error SA0027 END_VAR
SA0029: Notation in Implementierung und Deklaration unterschiedlich
Im Gerätebaum gibt es einen Baustein PLC_PRG
und einen Baustein fnc
(Funktion).
PROGRAM PLC_PRG VAR iVar:INT; _123test_var_: INT; END_VAR ivar := iVar + 1; // notation different to that in the declaration part -> SA0029 _123TEST_var_ := _123test_var_INT; // notation different to that in the declaration part -> SA0029 Fnc(); // notation different to that in the devices tree -> SA0029 END_VAR
SA0167: Temporäre Funktionsbaustein-Instanzen
PROGRAM PLC_PRG VAR END_VAR VAR_TEMP yafb: AFB; END_VAR FUNCTION Fun : INT VAR_INPUT END_VAR VAR funafb: AFB; END_VAR METHOD METH: INT VAR_INPUT END_VAR VAR methafb: AFB; END_VAR
Siehe auch